webdar-1.0.0/0000755000175000017520000000000015045134256007764 500000000000000webdar-1.0.0/misc/0000755000175000017520000000000015045134256010717 500000000000000webdar-1.0.0/misc/webdar_static_builder_with_musl_voidlinux.bash0000755000175000017520000001277615031233272022224 00000000000000#!/bin/bash if [ ! -z "$1" ] && [ "$1" -gt 1 ] ; then export MAKE_FLAGS="-j $1" else echo "usage: $0 [root]" exit 1 fi if [ -z "$2" ] ; then export ROOT_PERM=no else export ROOT_PERM=yes fi echo "ROOT_PERM = $ROOT_PERM" # config/compilation/linking related variables if [ "$ROOT_PERM" = "no" ] ; then export LOCAL_PREFIX="$HOME/usr" else export LOCAL_PREFIX="/usr/local" fi export LOCAL_PKG_CONFIG_DIR1="$LOCAL_PREFIX/lib/pkgconfig" export LOCAL_PKG_CONFIG_DIR2="$LOCAL_PREFIX/lib64/pkgconfig" export PKG_CONFIG_PATH="$LOCAL_PKG_CONFIG_DIR1:$LOCAL_PKG_CONFIG_DIR2:/usr/lib/pkgconfig:/usr/lib64/pkgconfig:/usr/local/lib/pkgconfig:/usr/local/lib64/pkgconfig" export CFLAGS="-I$LOCAL_PREFIX/include -I/usr/local/include -I/usr/include" export CXXFLAGS="$CFLAGS" export LDFLAGS="-L$LOCAL_PREFIX/lib -L$LOCAL_PREFIX/lib64 -L/usr/local/lib -L/usr/local/lib64 -L/usr/lib -L/usr/lib64 -L/lib -L/lib64" export LD_LIBRARY_PATH="$LOCAL_PREFIX/lib:$LOCAL_PREFIX/lib64:/usr/local/lib:/usr/local/lib64:/usr/lib:/usr/lib64:/lib:/lib64" export PATH="$LOCAL_PREFIX/bin:/usr/local/bin:$PATH" # packages version OPENSSL=3.0.16 # wget options need for gnutls website that does not provide all chain of trust in its certificate GNUTLS_WGET_OPT="--no-check-certificate" REPO=$(pwd)/REPO # check() { # checking we are under Void Linux if [ $(which lsb_release | wc -l) -eq 0 ] ; then echo "missing lsb_release command to check sanity of the environment" exit 1 fi if [ "$(lsb_release -i | sed -rn -e 's/^Distributor ID:\s+//p')" != "VoidLinux" ] ; then echo "This script is only expected to work on VoidLinux Distribution" exit 1 fi # checking for xbps-install if [ "$(which xbps-install | wc -l)" -eq 0 ] ; then echo "Missing xbps-instal command" exit 1 fi # checking musl libc is the system standard C library if [ $(xbps-query -l | grep musl | wc -l) -le 0 ] ; then echo "Cannot find musl standard C library" echo "static linking with glibc is broken, musl is needed" exit 1 fi if [ ! -f configure -o ! -f configure.ac ] || [ $(grep DAR_VERSION configure.ac | wc -l) -ne 1 ] ; then echo "This script must be run from the root directory of the dar/libdar source package" exit 1 fi if [ ! -e "${REPO}" ] ; then mkdir "${REPO}" fi if [ ! -d "${REPO}" ] ; then echo "${REPO} exists but is not a directory, aborting" exit 1 fi if [ ! -e "${LOCAL_PKG_CONFIG_DIR1}" ] ; then mkdir -p "${LOCAL_PKG_CONFIG_DIR1}" fi if [ ! -e "${LOCAL_PKG_CONFIG_DIR2}" ] ; then mkdir -p "${LOCAL_PKG_CONFIG_DIR2}" fi if [ ! -d "${LOCAL_PKG_CONFIG_DIR1}" ] ; then echo "${LOCAL_PKG_CONFIG_DIR1} exists but is not a directory, aborting" exit 1 fi if [ ! -d "${LOCAL_PKG_CONFIG_DIR2}" ] ; then echo "${LOCAL_PKG_CONFIG_DIR2} exists but is not a directory, aborting" exit 1 fi } requirements() { if [ "$ROOT_PERM" = "yes" ] ; then #updating xbps db xbps-install -SUy || (xbps-install -uy xbps && xbps-install -SUy) || return 1 # tools used to build the different packages involved here xbps-install -y gcc make wget pkg-config cmake xz || exit 1 #direct dependencies of libdar xbps-install -y bzip2-devel e2fsprogs-devel libargon2-devel libgcc-devel libgcrypt-devel liblz4-devel \ liblzma-devel libstdc++-devel libzstd-devel lz4-devel \ lzo-devel musl-devel zlib-devel || exit 1 # needed to build static flavor of librsync xbps-install -y libb2-devel || exit 1 # needed to build static flavor of gnutls xbps-install -y nettle-devel libtasn1-devel libunistring-devel unbound-devel unbound || exit 1 #needed for static flavor of libcurl xbps-install -y libssp-devel || echo "ignoring error if libssp-devel fails to install due to musl-devel already installed" # optional but interesting to get a smaller dar_static binary xbps-install -y upx || (echo "" && echo "WARNING!" && echo "Failed to install upx, will do without" && echo && sleep 3) # openssl needs perl xbps-install -y perl || (echo "" && echo "WARNING!" && echo "Failed to install perl" && exit 1) fi } openssl() { local OPENSSL_PKG=openssl-${OPENSSL}.tar.gz if [ ! -e "${REPO}/${OPENSSL_PKG}" ] ; then wget "https://github.com/openssl/openssl/releases/download/openssl-$OPENSSL/${OPENSSL_PKG}" && mv "${OPENSSL_PKG}" "${REPO}" || exit 1 ; fi tar -xf "${REPO}/${OPENSSL_PKG}" || exit 1 cd openssl-${OPENSSL} || exit 1 ./Configure --prefix="$LOCAL_PREFIX" enable-ktls threads || exit 1 make ${MAKE_FLAGS} || exit 1 make install || exit 1 cd .. ldconfig rm -rf openssl-${OPENSSL} } nlhomann() { mkdir -p "$LOCAL_PREFIX/include/nlohmann" || exit 1 wget https://raw.githubusercontent.com/nlohmann/json/refs/tags/v3.12.0/single_include/nlohmann/json.hpp || exit 1 mv json.hpp "$LOCAL_PREFIX/include/nlohmann" || exit 1 } webdar_static() { make clean || /bin/true make distclean || /bin/true ./configure --enable-static\ --disable-shared\ --enable-webdar-static\ --prefix="$LOCAL_PREFIX" || exit 1 make ${MAKE_FLAGS} || exit 1 make DESTDIR=${tmp_dir} install-strip || exit 1 mv "$LOCAL_PREFIX"/bin/webdar_static . && echo "webdar_static binary is available in the current directory" } check requirements || (echo "Failed setting up requirements" && exit 1) # openssl || (echo "Failed building libssl" && exit 1) nlhomann || (echo "Failed installing json lib by Neils Lhomann" && exit 1) webdar_static || (echo "Failed building webdar_static" && exit 1) webdar-1.0.0/misc/Makefile.am0000644000175000017520000000177514774773202012715 00000000000000######################################################################## # webdar - a web server and interface program to libdar # Copyright (C) 2013-2025 Denis Corbin # # This file is part of Webdar # # Webdar is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # Webdar is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with Webdar. If not, see # #---- # to contact the author: dar.linux@free.fr ######################################################################## dist_noinst_DATA = webdar_static_builder_with_musl_voidlinux.bash webdar-1.0.0/misc/Makefile.in0000644000175000017520000003402515045134062012703 00000000000000# Makefile.in generated by automake 1.16.5 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2021 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ ######################################################################## # webdar - a web server and interface program to libdar # Copyright (C) 2013-2025 Denis Corbin # # This file is part of Webdar # # Webdar is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # Webdar is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with Webdar. If not, see # #---- # to contact the author: dar.linux@free.fr ######################################################################## VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = misc ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/gettext.m4 \ $(top_srcdir)/m4/host-cpu-c-abi.m4 $(top_srcdir)/m4/iconv.m4 \ $(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/lib-ld.m4 \ $(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \ $(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/po.m4 \ $(top_srcdir)/m4/progtest.m4 $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(dist_noinst_DATA) \ $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = SOURCES = DIST_SOURCES = am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac DATA = $(dist_noinst_DATA) am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) am__DIST_COMMON = $(srcdir)/Makefile.in DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPPFLAGS = @CPPFLAGS@ CSCOPE = @CSCOPE@ CTAGS = @CTAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CXXSTDFLAGS = @CXXSTDFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DOXYGEN_PROG = @DOXYGEN_PROG@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ ETAGS = @ETAGS@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ FILECMD = @FILECMD@ GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@ GMSGFMT = @GMSGFMT@ GMSGFMT_015 = @GMSGFMT_015@ GREP = @GREP@ HAS_DOT = @HAS_DOT@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INTLLIBS = @INTLLIBS@ INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBDAR_CFLAGS = @LIBDAR_CFLAGS@ LIBDAR_LIBS = @LIBDAR_LIBS@ LIBICONV = @LIBICONV@ LIBINTL = @LIBINTL@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTHREADAR_CFLAGS = @LIBTHREADAR_CFLAGS@ LIBTHREADAR_LIBS = @LIBTHREADAR_LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBICONV = @LTLIBICONV@ LTLIBINTL = @LTLIBINTL@ LTLIBOBJS = @LTLIBOBJS@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ MSGFMT = @MSGFMT@ MSGMERGE = @MSGMERGE@ MSGMERGE_FOR_MSGFMT_OPTION = @MSGMERGE_FOR_MSGFMT_OPTION@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OPENSSL_CFLAGS = @OPENSSL_CFLAGS@ OPENSSL_LIBS = @OPENSSL_LIBS@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ POSUB = @POSUB@ RANLIB = @RANLIB@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ UPX_PROG = @UPX_PROG@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ XGETTEXT = @XGETTEXT@ XGETTEXT_015 = @XGETTEXT_015@ XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dot = @dot@ doxygen = @doxygen@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ groff = @groff@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ pkgconfigdir = @pkgconfigdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ tmp = @tmp@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ upx = @upx@ dist_noinst_DATA = webdar_static_builder_with_musl_voidlinux.bash all: all-am .SUFFIXES: $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu misc/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu misc/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs tags TAGS: ctags CTAGS: cscope cscopelist: distdir: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) distdir-am distdir-am: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(DATA) installdirs: install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-libtool mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: .MAKE: install-am install-strip .PHONY: all all-am check check-am clean clean-generic clean-libtool \ cscopelist-am ctags-am distclean distclean-generic \ distclean-libtool distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-ps install-ps-am \ install-strip installcheck installcheck-am installdirs \ maintainer-clean maintainer-clean-generic mostlyclean \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ tags-am uninstall uninstall-am .PRECIOUS: Makefile # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: webdar-1.0.0/configure0000755000175000017520000320520715045134061011616 00000000000000#! /bin/sh # Guess values for system-dependent variables and create Makefiles. # Generated by GNU Autoconf 2.71 for WEBDAR 1.0.0. # # Report bugs to . # # # Copyright (C) 1992-1996, 1998-2017, 2020-2021 Free Software Foundation, # Inc. # # # This configure script is free software; the Free Software Foundation # gives unlimited permission to copy, distribute and modify it. ## -------------------- ## ## M4sh Initialization. ## ## -------------------- ## # Be more Bourne compatible DUALCASE=1; export DUALCASE # for MKS sh as_nop=: if test ${ZSH_VERSION+y} && (emulate sh) >/dev/null 2>&1 then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST else $as_nop case `(set -o) 2>/dev/null` in #( *posix*) : set -o posix ;; #( *) : ;; esac fi # Reset variables that may have inherited troublesome values from # the environment. # IFS needs to be set, to space, tab, and newline, in precisely that order. # (If _AS_PATH_WALK were called with IFS unset, it would have the # side effect of setting IFS to empty, thus disabling word splitting.) # Quoting is to prevent editors from complaining about space-tab. as_nl=' ' export as_nl IFS=" "" $as_nl" PS1='$ ' PS2='> ' PS4='+ ' # Ensure predictable behavior from utilities with locale-dependent output. LC_ALL=C export LC_ALL LANGUAGE=C export LANGUAGE # We cannot yet rely on "unset" to work, but we need these variables # to be unset--not just set to an empty or harmless value--now, to # avoid bugs in old shells (e.g. pre-3.0 UWIN ksh). This construct # also avoids known problems related to "unset" and subshell syntax # in other old shells (e.g. bash 2.01 and pdksh 5.2.14). for as_var in BASH_ENV ENV MAIL MAILPATH CDPATH do eval test \${$as_var+y} \ && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : done # Ensure that fds 0, 1, and 2 are open. if (exec 3>&0) 2>/dev/null; then :; else exec 0&1) 2>/dev/null; then :; else exec 1>/dev/null; fi if (exec 3>&2) ; then :; else exec 2>/dev/null; fi # The user is always right. if ${PATH_SEPARATOR+false} :; then PATH_SEPARATOR=: (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || PATH_SEPARATOR=';' } fi # Find who we are. Look in the path if we contain no directory separator. as_myself= case $0 in #(( *[\\/]* ) as_myself=$0 ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac test -r "$as_dir$0" && as_myself=$as_dir$0 && break done IFS=$as_save_IFS ;; esac # We did not find ourselves, most probably we were run as `sh COMMAND' # in which case we are not to be found in the path. if test "x$as_myself" = x; then as_myself=$0 fi if test ! -f "$as_myself"; then printf "%s\n" "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 exit 1 fi # Use a proper internal environment variable to ensure we don't fall # into an infinite loop, continuously re-executing ourselves. if test x"${_as_can_reexec}" != xno && test "x$CONFIG_SHELL" != x; then _as_can_reexec=no; export _as_can_reexec; # We cannot yet assume a decent shell, so we have to provide a # neutralization value for shells without unset; and this also # works around shells that cannot unset nonexistent variables. # Preserve -v and -x to the replacement shell. BASH_ENV=/dev/null ENV=/dev/null (unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV case $- in # (((( *v*x* | *x*v* ) as_opts=-vx ;; *v* ) as_opts=-v ;; *x* ) as_opts=-x ;; * ) as_opts= ;; esac exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"} # Admittedly, this is quite paranoid, since all the known shells bail # out after a failed `exec'. printf "%s\n" "$0: could not re-execute with $CONFIG_SHELL" >&2 exit 255 fi # We don't want this to propagate to other subprocesses. { _as_can_reexec=; unset _as_can_reexec;} if test "x$CONFIG_SHELL" = x; then as_bourne_compatible="as_nop=: if test \${ZSH_VERSION+y} && (emulate sh) >/dev/null 2>&1 then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on \${1+\"\$@\"}, which # is contrary to our usage. Disable this feature. alias -g '\${1+\"\$@\"}'='\"\$@\"' setopt NO_GLOB_SUBST else \$as_nop case \`(set -o) 2>/dev/null\` in #( *posix*) : set -o posix ;; #( *) : ;; esac fi " as_required="as_fn_return () { (exit \$1); } as_fn_success () { as_fn_return 0; } as_fn_failure () { as_fn_return 1; } as_fn_ret_success () { return 0; } as_fn_ret_failure () { return 1; } exitcode=0 as_fn_success || { exitcode=1; echo as_fn_success failed.; } as_fn_failure && { exitcode=1; echo as_fn_failure succeeded.; } as_fn_ret_success || { exitcode=1; echo as_fn_ret_success failed.; } as_fn_ret_failure && { exitcode=1; echo as_fn_ret_failure succeeded.; } if ( set x; as_fn_ret_success y && test x = \"\$1\" ) then : else \$as_nop exitcode=1; echo positional parameters were not saved. fi test x\$exitcode = x0 || exit 1 blah=\$(echo \$(echo blah)) test x\"\$blah\" = xblah || exit 1 test -x / || exit 1" as_suggested=" as_lineno_1=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_1a=\$LINENO as_lineno_2=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_2a=\$LINENO eval 'test \"x\$as_lineno_1'\$as_run'\" != \"x\$as_lineno_2'\$as_run'\" && test \"x\`expr \$as_lineno_1'\$as_run' + 1\`\" = \"x\$as_lineno_2'\$as_run'\"' || exit 1 test \$(( 1 + 1 )) = 2 || exit 1 test -n \"\${ZSH_VERSION+set}\${BASH_VERSION+set}\" || ( ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' ECHO=\$ECHO\$ECHO\$ECHO\$ECHO\$ECHO ECHO=\$ECHO\$ECHO\$ECHO\$ECHO\$ECHO\$ECHO PATH=/empty FPATH=/empty; export PATH FPATH test \"X\`printf %s \$ECHO\`\" = \"X\$ECHO\" \\ || test \"X\`print -r -- \$ECHO\`\" = \"X\$ECHO\" ) || exit 1" if (eval "$as_required") 2>/dev/null then : as_have_required=yes else $as_nop as_have_required=no fi if test x$as_have_required = xyes && (eval "$as_suggested") 2>/dev/null then : else $as_nop as_save_IFS=$IFS; IFS=$PATH_SEPARATOR as_found=false for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac as_found=: case $as_dir in #( /*) for as_base in sh bash ksh sh5; do # Try only shells that exist, to save several forks. as_shell=$as_dir$as_base if { test -f "$as_shell" || test -f "$as_shell.exe"; } && as_run=a "$as_shell" -c "$as_bourne_compatible""$as_required" 2>/dev/null then : CONFIG_SHELL=$as_shell as_have_required=yes if as_run=a "$as_shell" -c "$as_bourne_compatible""$as_suggested" 2>/dev/null then : break 2 fi fi done;; esac as_found=false done IFS=$as_save_IFS if $as_found then : else $as_nop if { test -f "$SHELL" || test -f "$SHELL.exe"; } && as_run=a "$SHELL" -c "$as_bourne_compatible""$as_required" 2>/dev/null then : CONFIG_SHELL=$SHELL as_have_required=yes fi fi if test "x$CONFIG_SHELL" != x then : export CONFIG_SHELL # We cannot yet assume a decent shell, so we have to provide a # neutralization value for shells without unset; and this also # works around shells that cannot unset nonexistent variables. # Preserve -v and -x to the replacement shell. BASH_ENV=/dev/null ENV=/dev/null (unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV case $- in # (((( *v*x* | *x*v* ) as_opts=-vx ;; *v* ) as_opts=-v ;; *x* ) as_opts=-x ;; * ) as_opts= ;; esac exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"} # Admittedly, this is quite paranoid, since all the known shells bail # out after a failed `exec'. printf "%s\n" "$0: could not re-execute with $CONFIG_SHELL" >&2 exit 255 fi if test x$as_have_required = xno then : printf "%s\n" "$0: This script requires a shell more modern than all" printf "%s\n" "$0: the shells that I found on your system." if test ${ZSH_VERSION+y} ; then printf "%s\n" "$0: In particular, zsh $ZSH_VERSION has bugs and should" printf "%s\n" "$0: be upgraded to zsh 4.3.4 or later." else printf "%s\n" "$0: Please tell bug-autoconf@gnu.org and $0: [https://github.com/Edrusb/webdar/issues] about your $0: system, including any error possibly output before this $0: message. Then install a modern shell, or manually run $0: the script under such a shell if you do have one." fi exit 1 fi fi fi SHELL=${CONFIG_SHELL-/bin/sh} export SHELL # Unset more variables known to interfere with behavior of common tools. CLICOLOR_FORCE= GREP_OPTIONS= unset CLICOLOR_FORCE GREP_OPTIONS ## --------------------- ## ## M4sh Shell Functions. ## ## --------------------- ## # as_fn_unset VAR # --------------- # Portably unset VAR. as_fn_unset () { { eval $1=; unset $1;} } as_unset=as_fn_unset # as_fn_set_status STATUS # ----------------------- # Set $? to STATUS, without forking. as_fn_set_status () { return $1 } # as_fn_set_status # as_fn_exit STATUS # ----------------- # Exit the shell with STATUS, even in a "trap 0" or "set -e" context. as_fn_exit () { set +e as_fn_set_status $1 exit $1 } # as_fn_exit # as_fn_nop # --------- # Do nothing but, unlike ":", preserve the value of $?. as_fn_nop () { return $? } as_nop=as_fn_nop # as_fn_mkdir_p # ------------- # Create "$as_dir" as a directory, including parents if necessary. as_fn_mkdir_p () { case $as_dir in #( -*) as_dir=./$as_dir;; esac test -d "$as_dir" || eval $as_mkdir_p || { as_dirs= while :; do case $as_dir in #( *\'*) as_qdir=`printf "%s\n" "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( *) as_qdir=$as_dir;; esac as_dirs="'$as_qdir' $as_dirs" as_dir=`$as_dirname -- "$as_dir" || $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || printf "%s\n" X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` test -d "$as_dir" && break done test -z "$as_dirs" || eval "mkdir $as_dirs" } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" } # as_fn_mkdir_p # as_fn_executable_p FILE # ----------------------- # Test if FILE is an executable regular file. as_fn_executable_p () { test -f "$1" && test -x "$1" } # as_fn_executable_p # as_fn_append VAR VALUE # ---------------------- # Append the text in VALUE to the end of the definition contained in VAR. Take # advantage of any shell optimizations that allow amortized linear growth over # repeated appends, instead of the typical quadratic growth present in naive # implementations. if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null then : eval 'as_fn_append () { eval $1+=\$2 }' else $as_nop as_fn_append () { eval $1=\$$1\$2 } fi # as_fn_append # as_fn_arith ARG... # ------------------ # Perform arithmetic evaluation on the ARGs, and store the result in the # global $as_val. Take advantage of shells that can avoid forks. The arguments # must be portable across $(()) and expr. if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null then : eval 'as_fn_arith () { as_val=$(( $* )) }' else $as_nop as_fn_arith () { as_val=`expr "$@" || test $? -eq 1` } fi # as_fn_arith # as_fn_nop # --------- # Do nothing but, unlike ":", preserve the value of $?. as_fn_nop () { return $? } as_nop=as_fn_nop # as_fn_error STATUS ERROR [LINENO LOG_FD] # ---------------------------------------- # Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are # provided, also output the error to LOG_FD, referencing LINENO. Then exit the # script with STATUS, using 1 if that was 0. as_fn_error () { as_status=$1; test $as_status -eq 0 && as_status=1 if test "$4"; then as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 fi printf "%s\n" "$as_me: error: $2" >&2 as_fn_exit $as_status } # as_fn_error if expr a : '\(a\)' >/dev/null 2>&1 && test "X`expr 00001 : '.*\(...\)'`" = X001; then as_expr=expr else as_expr=false fi if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then as_basename=basename else as_basename=false fi if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then as_dirname=dirname else as_dirname=false fi as_me=`$as_basename -- "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)' \| . 2>/dev/null || printf "%s\n" X/"$0" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/ q } /^X\/\(\/\/\)$/{ s//\1/ q } /^X\/\(\/\).*/{ s//\1/ q } s/.*/./; q'` # Avoid depending upon Character Ranges. as_cr_letters='abcdefghijklmnopqrstuvwxyz' as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' as_cr_Letters=$as_cr_letters$as_cr_LETTERS as_cr_digits='0123456789' as_cr_alnum=$as_cr_Letters$as_cr_digits as_lineno_1=$LINENO as_lineno_1a=$LINENO as_lineno_2=$LINENO as_lineno_2a=$LINENO eval 'test "x$as_lineno_1'$as_run'" != "x$as_lineno_2'$as_run'" && test "x`expr $as_lineno_1'$as_run' + 1`" = "x$as_lineno_2'$as_run'"' || { # Blame Lee E. McMahon (1931-1989) for sed's syntax. :-) sed -n ' p /[$]LINENO/= ' <$as_myself | sed ' s/[$]LINENO.*/&-/ t lineno b :lineno N :loop s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/ t loop s/-\n.*// ' >$as_me.lineno && chmod +x "$as_me.lineno" || { printf "%s\n" "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; } # If we had to re-execute with $CONFIG_SHELL, we're ensured to have # already done that, so ensure we don't try to do so again and fall # in an infinite loop. This has already happened in practice. _as_can_reexec=no; export _as_can_reexec # Don't try to exec as it changes $[0], causing all sort of problems # (the dirname of $[0] is not the place where we might find the # original and so on. Autoconf is especially sensitive to this). . "./$as_me.lineno" # Exit status is that of the last command. exit } # Determine whether it's possible to make 'echo' print without a newline. # These variables are no longer used directly by Autoconf, but are AC_SUBSTed # for compatibility with existing Makefiles. ECHO_C= ECHO_N= ECHO_T= case `echo -n x` in #((((( -n*) case `echo 'xy\c'` in *c*) ECHO_T=' ';; # ECHO_T is single tab character. xy) ECHO_C='\c';; *) echo `echo ksh88 bug on AIX 6.1` > /dev/null ECHO_T=' ';; esac;; *) ECHO_N='-n';; esac # For backward compatibility with old third-party macros, we provide # the shell variables $as_echo and $as_echo_n. New code should use # AS_ECHO(["message"]) and AS_ECHO_N(["message"]), respectively. as_echo='printf %s\n' as_echo_n='printf %s' rm -f conf$$ conf$$.exe conf$$.file if test -d conf$$.dir; then rm -f conf$$.dir/conf$$.file else rm -f conf$$.dir mkdir conf$$.dir 2>/dev/null fi if (echo >conf$$.file) 2>/dev/null; then if ln -s conf$$.file conf$$ 2>/dev/null; then as_ln_s='ln -s' # ... but there are two gotchas: # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. # In both cases, we have to default to `cp -pR'. ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || as_ln_s='cp -pR' elif ln conf$$.file conf$$ 2>/dev/null; then as_ln_s=ln else as_ln_s='cp -pR' fi else as_ln_s='cp -pR' fi rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file rmdir conf$$.dir 2>/dev/null if mkdir -p . 2>/dev/null; then as_mkdir_p='mkdir -p "$as_dir"' else test -d ./-p && rmdir ./-p as_mkdir_p=false fi as_test_x='test -x' as_executable_p=as_fn_executable_p # Sed expression to map a string onto a valid CPP name. as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" # Sed expression to map a string onto a valid variable name. as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" SHELL=${CONFIG_SHELL-/bin/sh} test -n "$DJDIR" || exec 7<&0 &1 # Name of the host. # hostname on some systems (SVR3.2, old GNU/Linux) returns a bogus exit status, # so uname gets run too. ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q` # # Initializations. # ac_default_prefix=/usr/local ac_clean_files= ac_config_libobj_dir=. LIBOBJS= cross_compiling=no subdirs= MFLAGS= MAKEFLAGS= # Identity of this package. PACKAGE_NAME='WEBDAR' PACKAGE_TARNAME='webdar' PACKAGE_VERSION='1.0.0' PACKAGE_STRING='WEBDAR 1.0.0' PACKAGE_BUGREPORT='https://github.com/Edrusb/webdar/issues' PACKAGE_URL='' ac_unique_file="src/webdar.cpp" gt_needs= # Factoring default headers for most tests. ac_includes_default="\ #include #ifdef HAVE_STDIO_H # include #endif #ifdef HAVE_STDLIB_H # include #endif #ifdef HAVE_STRING_H # include #endif #ifdef HAVE_INTTYPES_H # include #endif #ifdef HAVE_STDINT_H # include #endif #ifdef HAVE_STRINGS_H # include #endif #ifdef HAVE_SYS_TYPES_H # include #endif #ifdef HAVE_SYS_STAT_H # include #endif #ifdef HAVE_UNISTD_H # include #endif" ac_header_c_list= ac_header_cxx_list= ac_func_cxx_list= ac_default_prefix=/usr/local ac_subst_vars='am__EXEEXT_FALSE am__EXEEXT_TRUE LTLIBOBJS HAS_DOT DOXYGEN_PROG UPX_PROG CXXSTDFLAGS BSD_SED_FALSE BSD_SED_TRUE USE_GROFF_FALSE USE_GROFF_TRUE USE_DOXYGEN_FALSE USE_DOXYGEN_TRUE USE_UPX_FALSE USE_UPX_TRUE BUILD_MODE64_FALSE BUILD_MODE64_TRUE BUILD_MODE32_FALSE BUILD_MODE32_TRUE BUILD_WEBDAR_STATIC_FALSE BUILD_WEBDAR_STATIC_TRUE LIBTHREADAR_LIBS LIBTHREADAR_CFLAGS LIBDAR_LIBS LIBDAR_CFLAGS OPENSSL_LIBS OPENSSL_CFLAGS PKG_CONFIG_LIBDIR PKG_CONFIG_PATH PKG_CONFIG groff tmp dot doxygen upx LIBOBJS LT_SYS_LIBRARY_PATH OTOOL64 OTOOL LIPO NMEDIT DSYMUTIL MANIFEST_TOOL RANLIB ac_ct_AR AR DLLTOOL OBJDUMP FILECMD LN_S NM ac_ct_DUMPBIN DUMPBIN LD FGREP LIBTOOL pkgconfigdir POSUB LTLIBINTL LIBINTL INTLLIBS LTLIBICONV LIBICONV INTL_MACOSX_LIBS EGREP GREP CXXCPP am__fastdepCXX_FALSE am__fastdepCXX_TRUE CXXDEPMODE ac_ct_CXX CXXFLAGS CXX host_os host_vendor host_cpu host build_os build_vendor build_cpu build am__fastdepCC_FALSE am__fastdepCC_TRUE CCDEPMODE am__nodep AMDEPBACKSLASH AMDEP_FALSE AMDEP_TRUE am__include DEPDIR OBJEXT EXEEXT ac_ct_CC CPPFLAGS LDFLAGS CFLAGS CC XGETTEXT_EXTRA_OPTIONS MSGMERGE_FOR_MSGFMT_OPTION MSGMERGE XGETTEXT_015 XGETTEXT GMSGFMT_015 GMSGFMT MSGFMT GETTEXT_MACRO_VERSION USE_NLS SED AM_BACKSLASH AM_DEFAULT_VERBOSITY AM_DEFAULT_V AM_V CSCOPE ETAGS CTAGS am__untar am__tar AMTAR am__leading_dot SET_MAKE AWK mkdir_p MKDIR_P INSTALL_STRIP_PROGRAM STRIP install_sh MAKEINFO AUTOHEADER AUTOMAKE AUTOCONF ACLOCAL VERSION PACKAGE CYGPATH_W am__isrc INSTALL_DATA INSTALL_SCRIPT INSTALL_PROGRAM target_alias host_alias build_alias LIBS ECHO_T ECHO_N ECHO_C DEFS mandir localedir libdir psdir pdfdir dvidir htmldir infodir docdir oldincludedir includedir runstatedir localstatedir sharedstatedir sysconfdir datadir datarootdir libexecdir sbindir bindir program_transform_name prefix exec_prefix PACKAGE_URL PACKAGE_BUGREPORT PACKAGE_STRING PACKAGE_VERSION PACKAGE_TARNAME PACKAGE_NAME PATH_SEPARATOR SHELL am__quote' ac_subst_files='' ac_user_opts=' enable_option_checking enable_silent_rules enable_nls enable_dependency_tracking with_gnu_ld enable_rpath with_libiconv_prefix with_libintl_prefix with_pkgconfigdir enable_shared enable_static with_pic enable_fast_install with_aix_soname with_sysroot enable_libtool_lock enable_largefile enable_mode enable_upx enable_build_html enable_dev enable_webdar_static ' ac_precious_vars='build_alias host_alias target_alias CC CFLAGS LDFLAGS LIBS CPPFLAGS CXX CXXFLAGS CCC CXXCPP LT_SYS_LIBRARY_PATH PKG_CONFIG PKG_CONFIG_PATH PKG_CONFIG_LIBDIR OPENSSL_CFLAGS OPENSSL_LIBS LIBDAR_CFLAGS LIBDAR_LIBS LIBTHREADAR_CFLAGS LIBTHREADAR_LIBS' # Initialize some variables set by options. ac_init_help= ac_init_version=false ac_unrecognized_opts= ac_unrecognized_sep= # The variables have the same names as the options, with # dashes changed to underlines. cache_file=/dev/null exec_prefix=NONE no_create= no_recursion= prefix=NONE program_prefix=NONE program_suffix=NONE program_transform_name=s,x,x, silent= site= srcdir= verbose= x_includes=NONE x_libraries=NONE # Installation directory options. # These are left unexpanded so users can "make install exec_prefix=/foo" # and all the variables that are supposed to be based on exec_prefix # by default will actually change. # Use braces instead of parens because sh, perl, etc. also accept them. # (The list follows the same order as the GNU Coding Standards.) bindir='${exec_prefix}/bin' sbindir='${exec_prefix}/sbin' libexecdir='${exec_prefix}/libexec' datarootdir='${prefix}/share' datadir='${datarootdir}' sysconfdir='${prefix}/etc' sharedstatedir='${prefix}/com' localstatedir='${prefix}/var' runstatedir='${localstatedir}/run' includedir='${prefix}/include' oldincludedir='/usr/include' docdir='${datarootdir}/doc/${PACKAGE_TARNAME}' infodir='${datarootdir}/info' htmldir='${docdir}' dvidir='${docdir}' pdfdir='${docdir}' psdir='${docdir}' libdir='${exec_prefix}/lib' localedir='${datarootdir}/locale' mandir='${datarootdir}/man' ac_prev= ac_dashdash= for ac_option do # If the previous option needs an argument, assign it. if test -n "$ac_prev"; then eval $ac_prev=\$ac_option ac_prev= continue fi case $ac_option in *=?*) ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;; *=) ac_optarg= ;; *) ac_optarg=yes ;; esac case $ac_dashdash$ac_option in --) ac_dashdash=yes ;; -bindir | --bindir | --bindi | --bind | --bin | --bi) ac_prev=bindir ;; -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*) bindir=$ac_optarg ;; -build | --build | --buil | --bui | --bu) ac_prev=build_alias ;; -build=* | --build=* | --buil=* | --bui=* | --bu=*) build_alias=$ac_optarg ;; -cache-file | --cache-file | --cache-fil | --cache-fi \ | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c) ac_prev=cache_file ;; -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \ | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*) cache_file=$ac_optarg ;; --config-cache | -C) cache_file=config.cache ;; -datadir | --datadir | --datadi | --datad) ac_prev=datadir ;; -datadir=* | --datadir=* | --datadi=* | --datad=*) datadir=$ac_optarg ;; -datarootdir | --datarootdir | --datarootdi | --datarootd | --dataroot \ | --dataroo | --dataro | --datar) ac_prev=datarootdir ;; -datarootdir=* | --datarootdir=* | --datarootdi=* | --datarootd=* \ | --dataroot=* | --dataroo=* | --dataro=* | --datar=*) datarootdir=$ac_optarg ;; -disable-* | --disable-*) ac_useropt=`expr "x$ac_option" : 'x-*disable-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid feature name: \`$ac_useropt'" ac_useropt_orig=$ac_useropt ac_useropt=`printf "%s\n" "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "enable_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--disable-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval enable_$ac_useropt=no ;; -docdir | --docdir | --docdi | --doc | --do) ac_prev=docdir ;; -docdir=* | --docdir=* | --docdi=* | --doc=* | --do=*) docdir=$ac_optarg ;; -dvidir | --dvidir | --dvidi | --dvid | --dvi | --dv) ac_prev=dvidir ;; -dvidir=* | --dvidir=* | --dvidi=* | --dvid=* | --dvi=* | --dv=*) dvidir=$ac_optarg ;; -enable-* | --enable-*) ac_useropt=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid feature name: \`$ac_useropt'" ac_useropt_orig=$ac_useropt ac_useropt=`printf "%s\n" "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "enable_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--enable-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval enable_$ac_useropt=\$ac_optarg ;; -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \ | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \ | --exec | --exe | --ex) ac_prev=exec_prefix ;; -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \ | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \ | --exec=* | --exe=* | --ex=*) exec_prefix=$ac_optarg ;; -gas | --gas | --ga | --g) # Obsolete; use --with-gas. with_gas=yes ;; -help | --help | --hel | --he | -h) ac_init_help=long ;; -help=r* | --help=r* | --hel=r* | --he=r* | -hr*) ac_init_help=recursive ;; -help=s* | --help=s* | --hel=s* | --he=s* | -hs*) ac_init_help=short ;; -host | --host | --hos | --ho) ac_prev=host_alias ;; -host=* | --host=* | --hos=* | --ho=*) host_alias=$ac_optarg ;; -htmldir | --htmldir | --htmldi | --htmld | --html | --htm | --ht) ac_prev=htmldir ;; -htmldir=* | --htmldir=* | --htmldi=* | --htmld=* | --html=* | --htm=* \ | --ht=*) htmldir=$ac_optarg ;; -includedir | --includedir | --includedi | --included | --include \ | --includ | --inclu | --incl | --inc) ac_prev=includedir ;; -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \ | --includ=* | --inclu=* | --incl=* | --inc=*) includedir=$ac_optarg ;; -infodir | --infodir | --infodi | --infod | --info | --inf) ac_prev=infodir ;; -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*) infodir=$ac_optarg ;; -libdir | --libdir | --libdi | --libd) ac_prev=libdir ;; -libdir=* | --libdir=* | --libdi=* | --libd=*) libdir=$ac_optarg ;; -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \ | --libexe | --libex | --libe) ac_prev=libexecdir ;; -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \ | --libexe=* | --libex=* | --libe=*) libexecdir=$ac_optarg ;; -localedir | --localedir | --localedi | --localed | --locale) ac_prev=localedir ;; -localedir=* | --localedir=* | --localedi=* | --localed=* | --locale=*) localedir=$ac_optarg ;; -localstatedir | --localstatedir | --localstatedi | --localstated \ | --localstate | --localstat | --localsta | --localst | --locals) ac_prev=localstatedir ;; -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \ | --localstate=* | --localstat=* | --localsta=* | --localst=* | --locals=*) localstatedir=$ac_optarg ;; -mandir | --mandir | --mandi | --mand | --man | --ma | --m) ac_prev=mandir ;; -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*) mandir=$ac_optarg ;; -nfp | --nfp | --nf) # Obsolete; use --without-fp. with_fp=no ;; -no-create | --no-create | --no-creat | --no-crea | --no-cre \ | --no-cr | --no-c | -n) no_create=yes ;; -no-recursion | --no-recursion | --no-recursio | --no-recursi \ | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) no_recursion=yes ;; -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \ | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \ | --oldin | --oldi | --old | --ol | --o) ac_prev=oldincludedir ;; -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \ | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \ | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*) oldincludedir=$ac_optarg ;; -prefix | --prefix | --prefi | --pref | --pre | --pr | --p) ac_prev=prefix ;; -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*) prefix=$ac_optarg ;; -program-prefix | --program-prefix | --program-prefi | --program-pref \ | --program-pre | --program-pr | --program-p) ac_prev=program_prefix ;; -program-prefix=* | --program-prefix=* | --program-prefi=* \ | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*) program_prefix=$ac_optarg ;; -program-suffix | --program-suffix | --program-suffi | --program-suff \ | --program-suf | --program-su | --program-s) ac_prev=program_suffix ;; -program-suffix=* | --program-suffix=* | --program-suffi=* \ | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*) program_suffix=$ac_optarg ;; -program-transform-name | --program-transform-name \ | --program-transform-nam | --program-transform-na \ | --program-transform-n | --program-transform- \ | --program-transform | --program-transfor \ | --program-transfo | --program-transf \ | --program-trans | --program-tran \ | --progr-tra | --program-tr | --program-t) ac_prev=program_transform_name ;; -program-transform-name=* | --program-transform-name=* \ | --program-transform-nam=* | --program-transform-na=* \ | --program-transform-n=* | --program-transform-=* \ | --program-transform=* | --program-transfor=* \ | --program-transfo=* | --program-transf=* \ | --program-trans=* | --program-tran=* \ | --progr-tra=* | --program-tr=* | --program-t=*) program_transform_name=$ac_optarg ;; -pdfdir | --pdfdir | --pdfdi | --pdfd | --pdf | --pd) ac_prev=pdfdir ;; -pdfdir=* | --pdfdir=* | --pdfdi=* | --pdfd=* | --pdf=* | --pd=*) pdfdir=$ac_optarg ;; -psdir | --psdir | --psdi | --psd | --ps) ac_prev=psdir ;; -psdir=* | --psdir=* | --psdi=* | --psd=* | --ps=*) psdir=$ac_optarg ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil) silent=yes ;; -runstatedir | --runstatedir | --runstatedi | --runstated \ | --runstate | --runstat | --runsta | --runst | --runs \ | --run | --ru | --r) ac_prev=runstatedir ;; -runstatedir=* | --runstatedir=* | --runstatedi=* | --runstated=* \ | --runstate=* | --runstat=* | --runsta=* | --runst=* | --runs=* \ | --run=* | --ru=* | --r=*) runstatedir=$ac_optarg ;; -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb) ac_prev=sbindir ;; -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \ | --sbi=* | --sb=*) sbindir=$ac_optarg ;; -sharedstatedir | --sharedstatedir | --sharedstatedi \ | --sharedstated | --sharedstate | --sharedstat | --sharedsta \ | --sharedst | --shareds | --shared | --share | --shar \ | --sha | --sh) ac_prev=sharedstatedir ;; -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \ | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \ | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \ | --sha=* | --sh=*) sharedstatedir=$ac_optarg ;; -site | --site | --sit) ac_prev=site ;; -site=* | --site=* | --sit=*) site=$ac_optarg ;; -srcdir | --srcdir | --srcdi | --srcd | --src | --sr) ac_prev=srcdir ;; -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*) srcdir=$ac_optarg ;; -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \ | --syscon | --sysco | --sysc | --sys | --sy) ac_prev=sysconfdir ;; -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \ | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*) sysconfdir=$ac_optarg ;; -target | --target | --targe | --targ | --tar | --ta | --t) ac_prev=target_alias ;; -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*) target_alias=$ac_optarg ;; -v | -verbose | --verbose | --verbos | --verbo | --verb) verbose=yes ;; -version | --version | --versio | --versi | --vers | -V) ac_init_version=: ;; -with-* | --with-*) ac_useropt=`expr "x$ac_option" : 'x-*with-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid package name: \`$ac_useropt'" ac_useropt_orig=$ac_useropt ac_useropt=`printf "%s\n" "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "with_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--with-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval with_$ac_useropt=\$ac_optarg ;; -without-* | --without-*) ac_useropt=`expr "x$ac_option" : 'x-*without-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid package name: \`$ac_useropt'" ac_useropt_orig=$ac_useropt ac_useropt=`printf "%s\n" "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "with_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--without-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval with_$ac_useropt=no ;; --x) # Obsolete; use --with-x. with_x=yes ;; -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \ | --x-incl | --x-inc | --x-in | --x-i) ac_prev=x_includes ;; -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \ | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*) x_includes=$ac_optarg ;; -x-libraries | --x-libraries | --x-librarie | --x-librari \ | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l) ac_prev=x_libraries ;; -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \ | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*) x_libraries=$ac_optarg ;; -*) as_fn_error $? "unrecognized option: \`$ac_option' Try \`$0 --help' for more information" ;; *=*) ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='` # Reject names that are not valid shell variable names. case $ac_envvar in #( '' | [0-9]* | *[!_$as_cr_alnum]* ) as_fn_error $? "invalid variable name: \`$ac_envvar'" ;; esac eval $ac_envvar=\$ac_optarg export $ac_envvar ;; *) # FIXME: should be removed in autoconf 3.0. printf "%s\n" "$as_me: WARNING: you should use --build, --host, --target" >&2 expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null && printf "%s\n" "$as_me: WARNING: invalid host type: $ac_option" >&2 : "${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option}" ;; esac done if test -n "$ac_prev"; then ac_option=--`echo $ac_prev | sed 's/_/-/g'` as_fn_error $? "missing argument to $ac_option" fi if test -n "$ac_unrecognized_opts"; then case $enable_option_checking in no) ;; fatal) as_fn_error $? "unrecognized options: $ac_unrecognized_opts" ;; *) printf "%s\n" "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;; esac fi # Check all directory arguments for consistency. for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \ datadir sysconfdir sharedstatedir localstatedir includedir \ oldincludedir docdir infodir htmldir dvidir pdfdir psdir \ libdir localedir mandir runstatedir do eval ac_val=\$$ac_var # Remove trailing slashes. case $ac_val in */ ) ac_val=`expr "X$ac_val" : 'X\(.*[^/]\)' \| "X$ac_val" : 'X\(.*\)'` eval $ac_var=\$ac_val;; esac # Be sure to have absolute directory names. case $ac_val in [\\/$]* | ?:[\\/]* ) continue;; NONE | '' ) case $ac_var in *prefix ) continue;; esac;; esac as_fn_error $? "expected an absolute directory name for --$ac_var: $ac_val" done # There might be people who depend on the old broken behavior: `$host' # used to hold the argument of --host etc. # FIXME: To remove some day. build=$build_alias host=$host_alias target=$target_alias # FIXME: To remove some day. if test "x$host_alias" != x; then if test "x$build_alias" = x; then cross_compiling=maybe elif test "x$build_alias" != "x$host_alias"; then cross_compiling=yes fi fi ac_tool_prefix= test -n "$host_alias" && ac_tool_prefix=$host_alias- test "$silent" = yes && exec 6>/dev/null ac_pwd=`pwd` && test -n "$ac_pwd" && ac_ls_di=`ls -di .` && ac_pwd_ls_di=`cd "$ac_pwd" && ls -di .` || as_fn_error $? "working directory cannot be determined" test "X$ac_ls_di" = "X$ac_pwd_ls_di" || as_fn_error $? "pwd does not report name of working directory" # Find the source files, if location was not specified. if test -z "$srcdir"; then ac_srcdir_defaulted=yes # Try the directory containing this script, then the parent directory. ac_confdir=`$as_dirname -- "$as_myself" || $as_expr X"$as_myself" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_myself" : 'X\(//\)[^/]' \| \ X"$as_myself" : 'X\(//\)$' \| \ X"$as_myself" : 'X\(/\)' \| . 2>/dev/null || printf "%s\n" X"$as_myself" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` srcdir=$ac_confdir if test ! -r "$srcdir/$ac_unique_file"; then srcdir=.. fi else ac_srcdir_defaulted=no fi if test ! -r "$srcdir/$ac_unique_file"; then test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .." as_fn_error $? "cannot find sources ($ac_unique_file) in $srcdir" fi ac_msg="sources are in $srcdir, but \`cd $srcdir' does not work" ac_abs_confdir=`( cd "$srcdir" && test -r "./$ac_unique_file" || as_fn_error $? "$ac_msg" pwd)` # When building in place, set srcdir=. if test "$ac_abs_confdir" = "$ac_pwd"; then srcdir=. fi # Remove unnecessary trailing slashes from srcdir. # Double slashes in file names in object file debugging info # mess up M-x gdb in Emacs. case $srcdir in */) srcdir=`expr "X$srcdir" : 'X\(.*[^/]\)' \| "X$srcdir" : 'X\(.*\)'`;; esac for ac_var in $ac_precious_vars; do eval ac_env_${ac_var}_set=\${${ac_var}+set} eval ac_env_${ac_var}_value=\$${ac_var} eval ac_cv_env_${ac_var}_set=\${${ac_var}+set} eval ac_cv_env_${ac_var}_value=\$${ac_var} done # # Report the --help message. # if test "$ac_init_help" = "long"; then # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat <<_ACEOF \`configure' configures WEBDAR 1.0.0 to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... To assign environment variables (e.g., CC, CFLAGS...), specify them as VAR=VALUE. See below for descriptions of some of the useful variables. Defaults for the options are specified in brackets. Configuration: -h, --help display this help and exit --help=short display options specific to this package --help=recursive display the short help of all the included packages -V, --version display version information and exit -q, --quiet, --silent do not print \`checking ...' messages --cache-file=FILE cache test results in FILE [disabled] -C, --config-cache alias for \`--cache-file=config.cache' -n, --no-create do not create output files --srcdir=DIR find the sources in DIR [configure dir or \`..'] Installation directories: --prefix=PREFIX install architecture-independent files in PREFIX [$ac_default_prefix] --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX [PREFIX] By default, \`make install' will install all the files in \`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc. You can specify an installation prefix other than \`$ac_default_prefix' using \`--prefix', for instance \`--prefix=\$HOME'. For better control, use the options below. Fine tuning of the installation directories: --bindir=DIR user executables [EPREFIX/bin] --sbindir=DIR system admin executables [EPREFIX/sbin] --libexecdir=DIR program executables [EPREFIX/libexec] --sysconfdir=DIR read-only single-machine data [PREFIX/etc] --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com] --localstatedir=DIR modifiable single-machine data [PREFIX/var] --runstatedir=DIR modifiable per-process data [LOCALSTATEDIR/run] --libdir=DIR object code libraries [EPREFIX/lib] --includedir=DIR C header files [PREFIX/include] --oldincludedir=DIR C header files for non-gcc [/usr/include] --datarootdir=DIR read-only arch.-independent data root [PREFIX/share] --datadir=DIR read-only architecture-independent data [DATAROOTDIR] --infodir=DIR info documentation [DATAROOTDIR/info] --localedir=DIR locale-dependent data [DATAROOTDIR/locale] --mandir=DIR man documentation [DATAROOTDIR/man] --docdir=DIR documentation root [DATAROOTDIR/doc/webdar] --htmldir=DIR html documentation [DOCDIR] --dvidir=DIR dvi documentation [DOCDIR] --pdfdir=DIR pdf documentation [DOCDIR] --psdir=DIR ps documentation [DOCDIR] _ACEOF cat <<\_ACEOF Program names: --program-prefix=PREFIX prepend PREFIX to installed program names --program-suffix=SUFFIX append SUFFIX to installed program names --program-transform-name=PROGRAM run sed PROGRAM on installed program names System types: --build=BUILD configure for building on BUILD [guessed] --host=HOST cross-compile to build programs to run on HOST [BUILD] _ACEOF fi if test -n "$ac_init_help"; then case $ac_init_help in short | recursive ) echo "Configuration of WEBDAR 1.0.0:";; esac cat <<\_ACEOF Optional Features: --disable-option-checking ignore unrecognized --enable/--with options --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no) --enable-FEATURE[=ARG] include FEATURE [ARG=yes] --enable-silent-rules less verbose build output (undo: "make V=1") --disable-silent-rules verbose build output (undo: "make V=0") --disable-nls do not use Native Language Support --enable-dependency-tracking do not reject slow dependency extractors --disable-dependency-tracking speeds up one-time build --disable-rpath do not hardcode runtime library paths --enable-shared[=PKGS] build shared libraries [default=yes] --enable-static[=PKGS] build static libraries [default=yes] --enable-fast-install[=PKGS] optimize for fast installation [default=yes] --disable-libtool-lock avoid locking (might break parallel builds) --disable-largefile omit support for large files --enable-mode=arg where arg is either 32, 64 (the default) or "infinint". Makes libdar internally use 32 bits or limitless integers in place of 64 bits integers --disable-upx by default configure looks for UPX and if available make executables compressed at installation time, you can disable this feature --disable-build-html don't build programming documentation (in particular libdar API documentation) and html man page --enable-dev use trivial password for development purposes --enable-webdar-static building webdar_static, a webdar statically linked version Optional Packages: --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no) --with-gnu-ld assume the C compiler uses GNU ld [default=no] --with-libiconv-prefix[=DIR] search for libiconv in DIR/include and DIR/lib --without-libiconv-prefix don't search for libiconv in includedir and libdir --with-libintl-prefix[=DIR] search for libintl in DIR/include and DIR/lib --without-libintl-prefix don't search for libintl in includedir and libdir --with-pkgconfigdir=DIR defines an alternative directory to install pkconfig files, default is '${libdir}/pkgconfig' --with-pic[=PKGS] try to use only PIC/non-PIC objects [default=use both] --with-aix-soname=aix|svr4|both shared library versioning (aka "SONAME") variant to provide on AIX, [default=aix]. --with-gnu-ld assume the C compiler uses GNU ld [default=no] --with-sysroot[=DIR] Search for dependent libraries within DIR (or the compiler's sysroot if not specified). Some influential environment variables: CC C compiler command CFLAGS C compiler flags LDFLAGS linker flags, e.g. -L if you have libraries in a nonstandard directory LIBS libraries to pass to the linker, e.g. -l CPPFLAGS (Objective) C/C++ preprocessor flags, e.g. -I if you have headers in a nonstandard directory CXX C++ compiler command CXXFLAGS C++ compiler flags CXXCPP C++ preprocessor LT_SYS_LIBRARY_PATH User-defined run-time library search path. PKG_CONFIG path to pkg-config utility PKG_CONFIG_PATH directories to add to pkg-config's search path PKG_CONFIG_LIBDIR path overriding pkg-config's built-in search path OPENSSL_CFLAGS C compiler flags for OPENSSL, overriding pkg-config OPENSSL_LIBS linker flags for OPENSSL, overriding pkg-config LIBDAR_CFLAGS C compiler flags for LIBDAR, overriding pkg-config LIBDAR_LIBS linker flags for LIBDAR, overriding pkg-config LIBTHREADAR_CFLAGS C compiler flags for LIBTHREADAR, overriding pkg-config LIBTHREADAR_LIBS linker flags for LIBTHREADAR, overriding pkg-config Use these variables to override the choices made by `configure' or to help it to find libraries and programs with nonstandard names/locations. Report bugs to . _ACEOF ac_status=$? fi if test "$ac_init_help" = "recursive"; then # If there are subdirs, report their specific --help. for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue test -d "$ac_dir" || { cd "$srcdir" && ac_pwd=`pwd` && srcdir=. && test -d "$ac_dir"; } || continue ac_builddir=. case "$ac_dir" in .) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_dir_suffix=/`printf "%s\n" "$ac_dir" | sed 's|^\.[\\/]||'` # A ".." for each directory in $ac_dir_suffix. ac_top_builddir_sub=`printf "%s\n" "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` case $ac_top_builddir_sub in "") ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; esac ;; esac ac_abs_top_builddir=$ac_pwd ac_abs_builddir=$ac_pwd$ac_dir_suffix # for backward compatibility: ac_top_builddir=$ac_top_build_prefix case $srcdir in .) # We are building in place. ac_srcdir=. ac_top_srcdir=$ac_top_builddir_sub ac_abs_top_srcdir=$ac_pwd ;; [\\/]* | ?:[\\/]* ) # Absolute name. ac_srcdir=$srcdir$ac_dir_suffix; ac_top_srcdir=$srcdir ac_abs_top_srcdir=$srcdir ;; *) # Relative name. ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix ac_top_srcdir=$ac_top_build_prefix$srcdir ac_abs_top_srcdir=$ac_pwd/$srcdir ;; esac ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix cd "$ac_dir" || { ac_status=$?; continue; } # Check for configure.gnu first; this name is used for a wrapper for # Metaconfig's "Configure" on case-insensitive file systems. if test -f "$ac_srcdir/configure.gnu"; then echo && $SHELL "$ac_srcdir/configure.gnu" --help=recursive elif test -f "$ac_srcdir/configure"; then echo && $SHELL "$ac_srcdir/configure" --help=recursive else printf "%s\n" "$as_me: WARNING: no configuration information is in $ac_dir" >&2 fi || ac_status=$? cd "$ac_pwd" || { ac_status=$?; break; } done fi test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF WEBDAR configure 1.0.0 generated by GNU Autoconf 2.71 Copyright (C) 2021 Free Software Foundation, Inc. This configure script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it. _ACEOF exit fi ## ------------------------ ## ## Autoconf initialization. ## ## ------------------------ ## # ac_fn_c_try_compile LINENO # -------------------------- # Try to compile conftest.$ac_ext, and return whether this succeeded. ac_fn_c_try_compile () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack rm -f conftest.$ac_objext conftest.beam if { { ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_compile") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext then : ac_retval=0 else $as_nop printf "%s\n" "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_try_compile # ac_fn_cxx_try_compile LINENO # ---------------------------- # Try to compile conftest.$ac_ext, and return whether this succeeded. ac_fn_cxx_try_compile () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack rm -f conftest.$ac_objext conftest.beam if { { ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_compile") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { test -z "$ac_cxx_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext then : ac_retval=0 else $as_nop printf "%s\n" "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_cxx_try_compile # ac_fn_cxx_try_cpp LINENO # ------------------------ # Try to preprocess conftest.$ac_ext, and return whether this succeeded. ac_fn_cxx_try_cpp () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack if { { ac_try="$ac_cpp conftest.$ac_ext" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_cpp conftest.$ac_ext") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } > conftest.i && { test -z "$ac_cxx_preproc_warn_flag$ac_cxx_werror_flag" || test ! -s conftest.err } then : ac_retval=0 else $as_nop printf "%s\n" "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_cxx_try_cpp # ac_fn_cxx_try_link LINENO # ------------------------- # Try to link conftest.$ac_ext, and return whether this succeeded. ac_fn_cxx_try_link () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack rm -f conftest.$ac_objext conftest.beam conftest$ac_exeext if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_link") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { test -z "$ac_cxx_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && { test "$cross_compiling" = yes || test -x conftest$ac_exeext } then : ac_retval=0 else $as_nop printf "%s\n" "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi # Delete the IPA/IPO (Inter Procedural Analysis/Optimization) information # created by the PGI compiler (conftest_ipa8_conftest.oo), as it would # interfere with the next link command; also delete a directory that is # left behind by Apple's compiler. We do this before executing the actions. rm -rf conftest.dSYM conftest_ipa8_conftest.oo eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_cxx_try_link # ac_fn_cxx_try_run LINENO # ------------------------ # Try to run conftest.$ac_ext, and return whether this succeeded. Assumes that # executables *can* be run. ac_fn_cxx_try_run () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { ac_try='./conftest$ac_exeext' { { case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_try") 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; } then : ac_retval=0 else $as_nop printf "%s\n" "$as_me: program exited with status $ac_status" >&5 printf "%s\n" "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=$ac_status fi rm -rf conftest.dSYM conftest_ipa8_conftest.oo eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_cxx_try_run # ac_fn_c_try_link LINENO # ----------------------- # Try to link conftest.$ac_ext, and return whether this succeeded. ac_fn_c_try_link () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack rm -f conftest.$ac_objext conftest.beam conftest$ac_exeext if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_link") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && { test "$cross_compiling" = yes || test -x conftest$ac_exeext } then : ac_retval=0 else $as_nop printf "%s\n" "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi # Delete the IPA/IPO (Inter Procedural Analysis/Optimization) information # created by the PGI compiler (conftest_ipa8_conftest.oo), as it would # interfere with the next link command; also delete a directory that is # left behind by Apple's compiler. We do this before executing the actions. rm -rf conftest.dSYM conftest_ipa8_conftest.oo eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_try_link # ac_fn_c_check_header_compile LINENO HEADER VAR INCLUDES # ------------------------------------------------------- # Tests whether HEADER exists and can be compiled using the include files in # INCLUDES, setting the cache variable VAR accordingly. ac_fn_c_check_header_compile () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 printf %s "checking for $2... " >&6; } if eval test \${$3+y} then : printf %s "(cached) " >&6 else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 #include <$2> _ACEOF if ac_fn_c_try_compile "$LINENO" then : eval "$3=yes" else $as_nop eval "$3=no" fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi eval ac_res=\$$3 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 printf "%s\n" "$ac_res" >&6; } eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_check_header_compile # ac_fn_c_check_func LINENO FUNC VAR # ---------------------------------- # Tests whether FUNC exists, setting the cache variable VAR accordingly ac_fn_c_check_func () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 printf %s "checking for $2... " >&6; } if eval test \${$3+y} then : printf %s "(cached) " >&6 else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Define $2 to an innocuous variant, in case declares $2. For example, HP-UX 11i declares gettimeofday. */ #define $2 innocuous_$2 /* System header to define __stub macros and hopefully few prototypes, which can conflict with char $2 (); below. */ #include #undef $2 /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char $2 (); /* The GNU C library defines this for functions which it implements to always fail with ENOSYS. Some functions are actually named something starting with __ and the normal name is an alias. */ #if defined __stub_$2 || defined __stub___$2 choke me #endif int main (void) { return $2 (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : eval "$3=yes" else $as_nop eval "$3=no" fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext fi eval ac_res=\$$3 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 printf "%s\n" "$ac_res" >&6; } eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_check_func # ac_fn_cxx_check_header_compile LINENO HEADER VAR INCLUDES # --------------------------------------------------------- # Tests whether HEADER exists and can be compiled using the include files in # INCLUDES, setting the cache variable VAR accordingly. ac_fn_cxx_check_header_compile () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 printf %s "checking for $2... " >&6; } if eval test \${$3+y} then : printf %s "(cached) " >&6 else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 #include <$2> _ACEOF if ac_fn_cxx_try_compile "$LINENO" then : eval "$3=yes" else $as_nop eval "$3=no" fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi eval ac_res=\$$3 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 printf "%s\n" "$ac_res" >&6; } eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_cxx_check_header_compile # ac_fn_cxx_check_type LINENO TYPE VAR INCLUDES # --------------------------------------------- # Tests whether TYPE exists after having included INCLUDES, setting cache # variable VAR accordingly. ac_fn_cxx_check_type () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 printf %s "checking for $2... " >&6; } if eval test \${$3+y} then : printf %s "(cached) " >&6 else $as_nop eval "$3=no" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 int main (void) { if (sizeof ($2)) return 0; ; return 0; } _ACEOF if ac_fn_cxx_try_compile "$LINENO" then : cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 int main (void) { if (sizeof (($2))) return 0; ; return 0; } _ACEOF if ac_fn_cxx_try_compile "$LINENO" then : else $as_nop eval "$3=yes" fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi eval ac_res=\$$3 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 printf "%s\n" "$ac_res" >&6; } eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_cxx_check_type # ac_fn_cxx_check_member LINENO AGGR MEMBER VAR INCLUDES # ------------------------------------------------------ # Tries to find if the field MEMBER exists in type AGGR, after including # INCLUDES, setting cache variable VAR accordingly. ac_fn_cxx_check_member () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $2.$3" >&5 printf %s "checking for $2.$3... " >&6; } if eval test \${$4+y} then : printf %s "(cached) " >&6 else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $5 int main (void) { static $2 ac_aggr; if (ac_aggr.$3) return 0; ; return 0; } _ACEOF if ac_fn_cxx_try_compile "$LINENO" then : eval "$4=yes" else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $5 int main (void) { static $2 ac_aggr; if (sizeof ac_aggr.$3) return 0; ; return 0; } _ACEOF if ac_fn_cxx_try_compile "$LINENO" then : eval "$4=yes" else $as_nop eval "$4=no" fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi eval ac_res=\$$4 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 printf "%s\n" "$ac_res" >&6; } eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_cxx_check_member # ac_fn_cxx_compute_int LINENO EXPR VAR INCLUDES # ---------------------------------------------- # Tries to find the compile-time value of EXPR in a program that includes # INCLUDES, setting VAR accordingly. Returns whether the value could be # computed ac_fn_cxx_compute_int () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack if test "$cross_compiling" = yes; then # Depending upon the size, compute the lo and hi bounds. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 int main (void) { static int test_array [1 - 2 * !(($2) >= 0)]; test_array [0] = 0; return test_array [0]; ; return 0; } _ACEOF if ac_fn_cxx_try_compile "$LINENO" then : ac_lo=0 ac_mid=0 while :; do cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 int main (void) { static int test_array [1 - 2 * !(($2) <= $ac_mid)]; test_array [0] = 0; return test_array [0]; ; return 0; } _ACEOF if ac_fn_cxx_try_compile "$LINENO" then : ac_hi=$ac_mid; break else $as_nop as_fn_arith $ac_mid + 1 && ac_lo=$as_val if test $ac_lo -le $ac_mid; then ac_lo= ac_hi= break fi as_fn_arith 2 '*' $ac_mid + 1 && ac_mid=$as_val fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext done else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 int main (void) { static int test_array [1 - 2 * !(($2) < 0)]; test_array [0] = 0; return test_array [0]; ; return 0; } _ACEOF if ac_fn_cxx_try_compile "$LINENO" then : ac_hi=-1 ac_mid=-1 while :; do cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 int main (void) { static int test_array [1 - 2 * !(($2) >= $ac_mid)]; test_array [0] = 0; return test_array [0]; ; return 0; } _ACEOF if ac_fn_cxx_try_compile "$LINENO" then : ac_lo=$ac_mid; break else $as_nop as_fn_arith '(' $ac_mid ')' - 1 && ac_hi=$as_val if test $ac_mid -le $ac_hi; then ac_lo= ac_hi= break fi as_fn_arith 2 '*' $ac_mid && ac_mid=$as_val fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext done else $as_nop ac_lo= ac_hi= fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext # Binary search between lo and hi bounds. while test "x$ac_lo" != "x$ac_hi"; do as_fn_arith '(' $ac_hi - $ac_lo ')' / 2 + $ac_lo && ac_mid=$as_val cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 int main (void) { static int test_array [1 - 2 * !(($2) <= $ac_mid)]; test_array [0] = 0; return test_array [0]; ; return 0; } _ACEOF if ac_fn_cxx_try_compile "$LINENO" then : ac_hi=$ac_mid else $as_nop as_fn_arith '(' $ac_mid ')' + 1 && ac_lo=$as_val fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext done case $ac_lo in #(( ?*) eval "$3=\$ac_lo"; ac_retval=0 ;; '') ac_retval=1 ;; esac else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 static long int longval (void) { return $2; } static unsigned long int ulongval (void) { return $2; } #include #include int main (void) { FILE *f = fopen ("conftest.val", "w"); if (! f) return 1; if (($2) < 0) { long int i = longval (); if (i != ($2)) return 1; fprintf (f, "%ld", i); } else { unsigned long int i = ulongval (); if (i != ($2)) return 1; fprintf (f, "%lu", i); } /* Do not output a trailing newline, as this causes \r\n confusion on some platforms. */ return ferror (f) || fclose (f) != 0; ; return 0; } _ACEOF if ac_fn_cxx_try_run "$LINENO" then : echo >>conftest.val; read $3 &5 printf %s "checking for $2... " >&6; } if eval test \${$3+y} then : printf %s "(cached) " >&6 else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Define $2 to an innocuous variant, in case declares $2. For example, HP-UX 11i declares gettimeofday. */ #define $2 innocuous_$2 /* System header to define __stub macros and hopefully few prototypes, which can conflict with char $2 (); below. */ #include #undef $2 /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char $2 (); /* The GNU C library defines this for functions which it implements to always fail with ENOSYS. Some functions are actually named something starting with __ and the normal name is an alias. */ #if defined __stub_$2 || defined __stub___$2 choke me #endif int main (void) { return $2 (); ; return 0; } _ACEOF if ac_fn_cxx_try_link "$LINENO" then : eval "$3=yes" else $as_nop eval "$3=no" fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext fi eval ac_res=\$$3 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 printf "%s\n" "$ac_res" >&6; } eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_cxx_check_func ac_configure_args_raw= for ac_arg do case $ac_arg in *\'*) ac_arg=`printf "%s\n" "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; esac as_fn_append ac_configure_args_raw " '$ac_arg'" done case $ac_configure_args_raw in *$as_nl*) ac_safe_unquote= ;; *) ac_unsafe_z='|&;<>()$`\\"*?[ '' ' # This string ends in space, tab. ac_unsafe_a="$ac_unsafe_z#~" ac_safe_unquote="s/ '\\([^$ac_unsafe_a][^$ac_unsafe_z]*\\)'/ \\1/g" ac_configure_args_raw=` printf "%s\n" "$ac_configure_args_raw" | sed "$ac_safe_unquote"`;; esac cat >config.log <<_ACEOF This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. It was created by WEBDAR $as_me 1.0.0, which was generated by GNU Autoconf 2.71. Invocation command line was $ $0$ac_configure_args_raw _ACEOF exec 5>>config.log { cat <<_ASUNAME ## --------- ## ## Platform. ## ## --------- ## hostname = `(hostname || uname -n) 2>/dev/null | sed 1q` uname -m = `(uname -m) 2>/dev/null || echo unknown` uname -r = `(uname -r) 2>/dev/null || echo unknown` uname -s = `(uname -s) 2>/dev/null || echo unknown` uname -v = `(uname -v) 2>/dev/null || echo unknown` /usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown` /bin/uname -X = `(/bin/uname -X) 2>/dev/null || echo unknown` /bin/arch = `(/bin/arch) 2>/dev/null || echo unknown` /usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null || echo unknown` /usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown` /usr/bin/hostinfo = `(/usr/bin/hostinfo) 2>/dev/null || echo unknown` /bin/machine = `(/bin/machine) 2>/dev/null || echo unknown` /usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null || echo unknown` /bin/universe = `(/bin/universe) 2>/dev/null || echo unknown` _ASUNAME as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac printf "%s\n" "PATH: $as_dir" done IFS=$as_save_IFS } >&5 cat >&5 <<_ACEOF ## ----------- ## ## Core tests. ## ## ----------- ## _ACEOF # Keep a trace of the command line. # Strip out --no-create and --no-recursion so they do not pile up. # Strip out --silent because we don't want to record it for future runs. # Also quote any args containing shell meta-characters. # Make two passes to allow for proper duplicate-argument suppression. ac_configure_args= ac_configure_args0= ac_configure_args1= ac_must_keep_next=false for ac_pass in 1 2 do for ac_arg do case $ac_arg in -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil) continue ;; *\'*) ac_arg=`printf "%s\n" "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; esac case $ac_pass in 1) as_fn_append ac_configure_args0 " '$ac_arg'" ;; 2) as_fn_append ac_configure_args1 " '$ac_arg'" if test $ac_must_keep_next = true; then ac_must_keep_next=false # Got value, back to normal. else case $ac_arg in *=* | --config-cache | -C | -disable-* | --disable-* \ | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \ | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \ | -with-* | --with-* | -without-* | --without-* | --x) case "$ac_configure_args0 " in "$ac_configure_args1"*" '$ac_arg' "* ) continue ;; esac ;; -* ) ac_must_keep_next=true ;; esac fi as_fn_append ac_configure_args " '$ac_arg'" ;; esac done done { ac_configure_args0=; unset ac_configure_args0;} { ac_configure_args1=; unset ac_configure_args1;} # When interrupted or exit'd, cleanup temporary files, and complete # config.log. We remove comments because anyway the quotes in there # would cause problems or look ugly. # WARNING: Use '\'' to represent an apostrophe within the trap. # WARNING: Do not start the trap code with a newline, due to a FreeBSD 4.0 bug. trap 'exit_status=$? # Sanitize IFS. IFS=" "" $as_nl" # Save into config.log some information that might help in debugging. { echo printf "%s\n" "## ---------------- ## ## Cache variables. ## ## ---------------- ##" echo # The following way of writing the cache mishandles newlines in values, ( for ac_var in `(set) 2>&1 | sed -n '\''s/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'\''`; do eval ac_val=\$$ac_var case $ac_val in #( *${as_nl}*) case $ac_var in #( *_cv_*) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 printf "%s\n" "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; esac case $ac_var in #( _ | IFS | as_nl) ;; #( BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( *) { eval $ac_var=; unset $ac_var;} ;; esac ;; esac done (set) 2>&1 | case $as_nl`(ac_space='\'' '\''; set) 2>&1` in #( *${as_nl}ac_space=\ *) sed -n \ "s/'\''/'\''\\\\'\'''\''/g; s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\''\\2'\''/p" ;; #( *) sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" ;; esac | sort ) echo printf "%s\n" "## ----------------- ## ## Output variables. ## ## ----------------- ##" echo for ac_var in $ac_subst_vars do eval ac_val=\$$ac_var case $ac_val in *\'\''*) ac_val=`printf "%s\n" "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; esac printf "%s\n" "$ac_var='\''$ac_val'\''" done | sort echo if test -n "$ac_subst_files"; then printf "%s\n" "## ------------------- ## ## File substitutions. ## ## ------------------- ##" echo for ac_var in $ac_subst_files do eval ac_val=\$$ac_var case $ac_val in *\'\''*) ac_val=`printf "%s\n" "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; esac printf "%s\n" "$ac_var='\''$ac_val'\''" done | sort echo fi if test -s confdefs.h; then printf "%s\n" "## ----------- ## ## confdefs.h. ## ## ----------- ##" echo cat confdefs.h echo fi test "$ac_signal" != 0 && printf "%s\n" "$as_me: caught signal $ac_signal" printf "%s\n" "$as_me: exit $exit_status" } >&5 rm -f core *.core core.conftest.* && rm -f -r conftest* confdefs* conf$$* $ac_clean_files && exit $exit_status ' 0 for ac_signal in 1 2 13 15; do trap 'ac_signal='$ac_signal'; as_fn_exit 1' $ac_signal done ac_signal=0 # confdefs.h avoids OS command line length limits that DEFS can exceed. rm -f -r conftest* confdefs.h printf "%s\n" "/* confdefs.h */" > confdefs.h # Predefined preprocessor variables. printf "%s\n" "#define PACKAGE_NAME \"$PACKAGE_NAME\"" >>confdefs.h printf "%s\n" "#define PACKAGE_TARNAME \"$PACKAGE_TARNAME\"" >>confdefs.h printf "%s\n" "#define PACKAGE_VERSION \"$PACKAGE_VERSION\"" >>confdefs.h printf "%s\n" "#define PACKAGE_STRING \"$PACKAGE_STRING\"" >>confdefs.h printf "%s\n" "#define PACKAGE_BUGREPORT \"$PACKAGE_BUGREPORT\"" >>confdefs.h printf "%s\n" "#define PACKAGE_URL \"$PACKAGE_URL\"" >>confdefs.h # Let the site file select an alternate cache file if it wants to. # Prefer an explicitly selected file to automatically selected ones. if test -n "$CONFIG_SITE"; then ac_site_files="$CONFIG_SITE" elif test "x$prefix" != xNONE; then ac_site_files="$prefix/share/config.site $prefix/etc/config.site" else ac_site_files="$ac_default_prefix/share/config.site $ac_default_prefix/etc/config.site" fi for ac_site_file in $ac_site_files do case $ac_site_file in #( */*) : ;; #( *) : ac_site_file=./$ac_site_file ;; esac if test -f "$ac_site_file" && test -r "$ac_site_file"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: loading site script $ac_site_file" >&5 printf "%s\n" "$as_me: loading site script $ac_site_file" >&6;} sed 's/^/| /' "$ac_site_file" >&5 . "$ac_site_file" \ || { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "failed to load site script $ac_site_file See \`config.log' for more details" "$LINENO" 5; } fi done if test -r "$cache_file"; then # Some versions of bash will fail to source /dev/null (special files # actually), so we avoid doing that. DJGPP emulates it as a regular file. if test /dev/null != "$cache_file" && test -f "$cache_file"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: loading cache $cache_file" >&5 printf "%s\n" "$as_me: loading cache $cache_file" >&6;} case $cache_file in [\\/]* | ?:[\\/]* ) . "$cache_file";; *) . "./$cache_file";; esac fi else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: creating cache $cache_file" >&5 printf "%s\n" "$as_me: creating cache $cache_file" >&6;} >$cache_file fi gt_needs="$gt_needs " # Test code for whether the C compiler supports C89 (global declarations) ac_c_conftest_c89_globals=' /* Does the compiler advertise C89 conformance? Do not test the value of __STDC__, because some compilers set it to 0 while being otherwise adequately conformant. */ #if !defined __STDC__ # error "Compiler does not advertise C89 conformance" #endif #include #include struct stat; /* Most of the following tests are stolen from RCS 5.7 src/conf.sh. */ struct buf { int x; }; struct buf * (*rcsopen) (struct buf *, struct stat *, int); static char *e (p, i) char **p; int i; { return p[i]; } static char *f (char * (*g) (char **, int), char **p, ...) { char *s; va_list v; va_start (v,p); s = g (p, va_arg (v,int)); va_end (v); return s; } /* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has function prototypes and stuff, but not \xHH hex character constants. These do not provoke an error unfortunately, instead are silently treated as an "x". The following induces an error, until -std is added to get proper ANSI mode. Curiously \x00 != x always comes out true, for an array size at least. It is necessary to write \x00 == 0 to get something that is true only with -std. */ int osf4_cc_array ['\''\x00'\'' == 0 ? 1 : -1]; /* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters inside strings and character constants. */ #define FOO(x) '\''x'\'' int xlc6_cc_array[FOO(a) == '\''x'\'' ? 1 : -1]; int test (int i, double x); struct s1 {int (*f) (int a);}; struct s2 {int (*f) (double a);}; int pairnames (int, char **, int *(*)(struct buf *, struct stat *, int), int, int);' # Test code for whether the C compiler supports C89 (body of main). ac_c_conftest_c89_main=' ok |= (argc == 0 || f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]); ' # Test code for whether the C compiler supports C99 (global declarations) ac_c_conftest_c99_globals=' // Does the compiler advertise C99 conformance? #if !defined __STDC_VERSION__ || __STDC_VERSION__ < 199901L # error "Compiler does not advertise C99 conformance" #endif #include extern int puts (const char *); extern int printf (const char *, ...); extern int dprintf (int, const char *, ...); extern void *malloc (size_t); // Check varargs macros. These examples are taken from C99 6.10.3.5. // dprintf is used instead of fprintf to avoid needing to declare // FILE and stderr. #define debug(...) dprintf (2, __VA_ARGS__) #define showlist(...) puts (#__VA_ARGS__) #define report(test,...) ((test) ? puts (#test) : printf (__VA_ARGS__)) static void test_varargs_macros (void) { int x = 1234; int y = 5678; debug ("Flag"); debug ("X = %d\n", x); showlist (The first, second, and third items.); report (x>y, "x is %d but y is %d", x, y); } // Check long long types. #define BIG64 18446744073709551615ull #define BIG32 4294967295ul #define BIG_OK (BIG64 / BIG32 == 4294967297ull && BIG64 % BIG32 == 0) #if !BIG_OK #error "your preprocessor is broken" #endif #if BIG_OK #else #error "your preprocessor is broken" #endif static long long int bignum = -9223372036854775807LL; static unsigned long long int ubignum = BIG64; struct incomplete_array { int datasize; double data[]; }; struct named_init { int number; const wchar_t *name; double average; }; typedef const char *ccp; static inline int test_restrict (ccp restrict text) { // See if C++-style comments work. // Iterate through items via the restricted pointer. // Also check for declarations in for loops. for (unsigned int i = 0; *(text+i) != '\''\0'\''; ++i) continue; return 0; } // Check varargs and va_copy. static bool test_varargs (const char *format, ...) { va_list args; va_start (args, format); va_list args_copy; va_copy (args_copy, args); const char *str = ""; int number = 0; float fnumber = 0; while (*format) { switch (*format++) { case '\''s'\'': // string str = va_arg (args_copy, const char *); break; case '\''d'\'': // int number = va_arg (args_copy, int); break; case '\''f'\'': // float fnumber = va_arg (args_copy, double); break; default: break; } } va_end (args_copy); va_end (args); return *str && number && fnumber; } ' # Test code for whether the C compiler supports C99 (body of main). ac_c_conftest_c99_main=' // Check bool. _Bool success = false; success |= (argc != 0); // Check restrict. if (test_restrict ("String literal") == 0) success = true; char *restrict newvar = "Another string"; // Check varargs. success &= test_varargs ("s, d'\'' f .", "string", 65, 34.234); test_varargs_macros (); // Check flexible array members. struct incomplete_array *ia = malloc (sizeof (struct incomplete_array) + (sizeof (double) * 10)); ia->datasize = 10; for (int i = 0; i < ia->datasize; ++i) ia->data[i] = i * 1.234; // Check named initializers. struct named_init ni = { .number = 34, .name = L"Test wide string", .average = 543.34343, }; ni.number = 58; int dynamic_array[ni.number]; dynamic_array[0] = argv[0][0]; dynamic_array[ni.number - 1] = 543; // work around unused variable warnings ok |= (!success || bignum == 0LL || ubignum == 0uLL || newvar[0] == '\''x'\'' || dynamic_array[ni.number - 1] != 543); ' # Test code for whether the C compiler supports C11 (global declarations) ac_c_conftest_c11_globals=' // Does the compiler advertise C11 conformance? #if !defined __STDC_VERSION__ || __STDC_VERSION__ < 201112L # error "Compiler does not advertise C11 conformance" #endif // Check _Alignas. char _Alignas (double) aligned_as_double; char _Alignas (0) no_special_alignment; extern char aligned_as_int; char _Alignas (0) _Alignas (int) aligned_as_int; // Check _Alignof. enum { int_alignment = _Alignof (int), int_array_alignment = _Alignof (int[100]), char_alignment = _Alignof (char) }; _Static_assert (0 < -_Alignof (int), "_Alignof is signed"); // Check _Noreturn. int _Noreturn does_not_return (void) { for (;;) continue; } // Check _Static_assert. struct test_static_assert { int x; _Static_assert (sizeof (int) <= sizeof (long int), "_Static_assert does not work in struct"); long int y; }; // Check UTF-8 literals. #define u8 syntax error! char const utf8_literal[] = u8"happens to be ASCII" "another string"; // Check duplicate typedefs. typedef long *long_ptr; typedef long int *long_ptr; typedef long_ptr long_ptr; // Anonymous structures and unions -- taken from C11 6.7.2.1 Example 1. struct anonymous { union { struct { int i; int j; }; struct { int k; long int l; } w; }; int m; } v1; ' # Test code for whether the C compiler supports C11 (body of main). ac_c_conftest_c11_main=' _Static_assert ((offsetof (struct anonymous, i) == offsetof (struct anonymous, w.k)), "Anonymous union alignment botch"); v1.i = 2; v1.w.k = 5; ok |= v1.i != 5; ' # Test code for whether the C compiler supports C11 (complete). ac_c_conftest_c11_program="${ac_c_conftest_c89_globals} ${ac_c_conftest_c99_globals} ${ac_c_conftest_c11_globals} int main (int argc, char **argv) { int ok = 0; ${ac_c_conftest_c89_main} ${ac_c_conftest_c99_main} ${ac_c_conftest_c11_main} return ok; } " # Test code for whether the C compiler supports C99 (complete). ac_c_conftest_c99_program="${ac_c_conftest_c89_globals} ${ac_c_conftest_c99_globals} int main (int argc, char **argv) { int ok = 0; ${ac_c_conftest_c89_main} ${ac_c_conftest_c99_main} return ok; } " # Test code for whether the C compiler supports C89 (complete). ac_c_conftest_c89_program="${ac_c_conftest_c89_globals} int main (int argc, char **argv) { int ok = 0; ${ac_c_conftest_c89_main} return ok; } " # Test code for whether the C++ compiler supports C++98 (global declarations) ac_cxx_conftest_cxx98_globals=' // Does the compiler advertise C++98 conformance? #if !defined __cplusplus || __cplusplus < 199711L # error "Compiler does not advertise C++98 conformance" #endif // These inclusions are to reject old compilers that // lack the unsuffixed header files. #include #include // and are *not* freestanding headers in C++98. extern void assert (int); namespace std { extern int strcmp (const char *, const char *); } // Namespaces, exceptions, and templates were all added after "C++ 2.0". using std::exception; using std::strcmp; namespace { void test_exception_syntax() { try { throw "test"; } catch (const char *s) { // Extra parentheses suppress a warning when building autoconf itself, // due to lint rules shared with more typical C programs. assert (!(strcmp) (s, "test")); } } template struct test_template { T const val; explicit test_template(T t) : val(t) {} template T add(U u) { return static_cast(u) + val; } }; } // anonymous namespace ' # Test code for whether the C++ compiler supports C++98 (body of main) ac_cxx_conftest_cxx98_main=' assert (argc); assert (! argv[0]); { test_exception_syntax (); test_template tt (2.0); assert (tt.add (4) == 6.0); assert (true && !false); } ' # Test code for whether the C++ compiler supports C++11 (global declarations) ac_cxx_conftest_cxx11_globals=' // Does the compiler advertise C++ 2011 conformance? #if !defined __cplusplus || __cplusplus < 201103L # error "Compiler does not advertise C++11 conformance" #endif namespace cxx11test { constexpr int get_val() { return 20; } struct testinit { int i; double d; }; class delegate { public: delegate(int n) : n(n) {} delegate(): delegate(2354) {} virtual int getval() { return this->n; }; protected: int n; }; class overridden : public delegate { public: overridden(int n): delegate(n) {} virtual int getval() override final { return this->n * 2; } }; class nocopy { public: nocopy(int i): i(i) {} nocopy() = default; nocopy(const nocopy&) = delete; nocopy & operator=(const nocopy&) = delete; private: int i; }; // for testing lambda expressions template Ret eval(Fn f, Ret v) { return f(v); } // for testing variadic templates and trailing return types template auto sum(V first) -> V { return first; } template auto sum(V first, Args... rest) -> V { return first + sum(rest...); } } ' # Test code for whether the C++ compiler supports C++11 (body of main) ac_cxx_conftest_cxx11_main=' { // Test auto and decltype auto a1 = 6538; auto a2 = 48573953.4; auto a3 = "String literal"; int total = 0; for (auto i = a3; *i; ++i) { total += *i; } decltype(a2) a4 = 34895.034; } { // Test constexpr short sa[cxx11test::get_val()] = { 0 }; } { // Test initializer lists cxx11test::testinit il = { 4323, 435234.23544 }; } { // Test range-based for int array[] = {9, 7, 13, 15, 4, 18, 12, 10, 5, 3, 14, 19, 17, 8, 6, 20, 16, 2, 11, 1}; for (auto &x : array) { x += 23; } } { // Test lambda expressions using cxx11test::eval; assert (eval ([](int x) { return x*2; }, 21) == 42); double d = 2.0; assert (eval ([&](double x) { return d += x; }, 3.0) == 5.0); assert (d == 5.0); assert (eval ([=](double x) mutable { return d += x; }, 4.0) == 9.0); assert (d == 5.0); } { // Test use of variadic templates using cxx11test::sum; auto a = sum(1); auto b = sum(1, 2); auto c = sum(1.0, 2.0, 3.0); } { // Test constructor delegation cxx11test::delegate d1; cxx11test::delegate d2(); cxx11test::delegate d3(45); } { // Test override and final cxx11test::overridden o1(55464); } { // Test nullptr char *c = nullptr; } { // Test template brackets test_template<::test_template> v(test_template(12)); } { // Unicode literals char const *utf8 = u8"UTF-8 string \u2500"; char16_t const *utf16 = u"UTF-8 string \u2500"; char32_t const *utf32 = U"UTF-32 string \u2500"; } ' # Test code for whether the C compiler supports C++11 (complete). ac_cxx_conftest_cxx11_program="${ac_cxx_conftest_cxx98_globals} ${ac_cxx_conftest_cxx11_globals} int main (int argc, char **argv) { int ok = 0; ${ac_cxx_conftest_cxx98_main} ${ac_cxx_conftest_cxx11_main} return ok; } " # Test code for whether the C compiler supports C++98 (complete). ac_cxx_conftest_cxx98_program="${ac_cxx_conftest_cxx98_globals} int main (int argc, char **argv) { int ok = 0; ${ac_cxx_conftest_cxx98_main} return ok; } " as_fn_append ac_header_c_list " stdio.h stdio_h HAVE_STDIO_H" as_fn_append ac_header_c_list " stdlib.h stdlib_h HAVE_STDLIB_H" as_fn_append ac_header_c_list " string.h string_h HAVE_STRING_H" as_fn_append ac_header_c_list " inttypes.h inttypes_h HAVE_INTTYPES_H" as_fn_append ac_header_c_list " stdint.h stdint_h HAVE_STDINT_H" as_fn_append ac_header_c_list " strings.h strings_h HAVE_STRINGS_H" as_fn_append ac_header_c_list " sys/stat.h sys_stat_h HAVE_SYS_STAT_H" as_fn_append ac_header_c_list " sys/types.h sys_types_h HAVE_SYS_TYPES_H" as_fn_append ac_header_c_list " unistd.h unistd_h HAVE_UNISTD_H" as_fn_append ac_header_cxx_list " vfork.h vfork_h HAVE_VFORK_H" as_fn_append ac_func_cxx_list " fork HAVE_FORK" as_fn_append ac_func_cxx_list " vfork HAVE_VFORK" as_fn_append ac_header_cxx_list " utime.h utime_h HAVE_UTIME_H" # Auxiliary files required by this configure script. ac_aux_files="ltmain.sh config.guess config.sub compile config.rpath missing install-sh" # Locations in which to look for auxiliary files. ac_aux_dir_candidates="${srcdir}${PATH_SEPARATOR}${srcdir}/..${PATH_SEPARATOR}${srcdir}/../.." # Search for a directory containing all of the required auxiliary files, # $ac_aux_files, from the $PATH-style list $ac_aux_dir_candidates. # If we don't find one directory that contains all the files we need, # we report the set of missing files from the *first* directory in # $ac_aux_dir_candidates and give up. ac_missing_aux_files="" ac_first_candidate=: printf "%s\n" "$as_me:${as_lineno-$LINENO}: looking for aux files: $ac_aux_files" >&5 as_save_IFS=$IFS; IFS=$PATH_SEPARATOR as_found=false for as_dir in $ac_aux_dir_candidates do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac as_found=: printf "%s\n" "$as_me:${as_lineno-$LINENO}: trying $as_dir" >&5 ac_aux_dir_found=yes ac_install_sh= for ac_aux in $ac_aux_files do # As a special case, if "install-sh" is required, that requirement # can be satisfied by any of "install-sh", "install.sh", or "shtool", # and $ac_install_sh is set appropriately for whichever one is found. if test x"$ac_aux" = x"install-sh" then if test -f "${as_dir}install-sh"; then printf "%s\n" "$as_me:${as_lineno-$LINENO}: ${as_dir}install-sh found" >&5 ac_install_sh="${as_dir}install-sh -c" elif test -f "${as_dir}install.sh"; then printf "%s\n" "$as_me:${as_lineno-$LINENO}: ${as_dir}install.sh found" >&5 ac_install_sh="${as_dir}install.sh -c" elif test -f "${as_dir}shtool"; then printf "%s\n" "$as_me:${as_lineno-$LINENO}: ${as_dir}shtool found" >&5 ac_install_sh="${as_dir}shtool install -c" else ac_aux_dir_found=no if $ac_first_candidate; then ac_missing_aux_files="${ac_missing_aux_files} install-sh" else break fi fi else if test -f "${as_dir}${ac_aux}"; then printf "%s\n" "$as_me:${as_lineno-$LINENO}: ${as_dir}${ac_aux} found" >&5 else ac_aux_dir_found=no if $ac_first_candidate; then ac_missing_aux_files="${ac_missing_aux_files} ${ac_aux}" else break fi fi fi done if test "$ac_aux_dir_found" = yes; then ac_aux_dir="$as_dir" break fi ac_first_candidate=false as_found=false done IFS=$as_save_IFS if $as_found then : else $as_nop as_fn_error $? "cannot find required auxiliary files:$ac_missing_aux_files" "$LINENO" 5 fi # These three variables are undocumented and unsupported, # and are intended to be withdrawn in a future Autoconf release. # They can cause serious problems if a builder's source tree is in a directory # whose full name contains unusual characters. if test -f "${ac_aux_dir}config.guess"; then ac_config_guess="$SHELL ${ac_aux_dir}config.guess" fi if test -f "${ac_aux_dir}config.sub"; then ac_config_sub="$SHELL ${ac_aux_dir}config.sub" fi if test -f "$ac_aux_dir/configure"; then ac_configure="$SHELL ${ac_aux_dir}configure" fi # Check that the precious variables saved in the cache have kept the same # value. ac_cache_corrupted=false for ac_var in $ac_precious_vars; do eval ac_old_set=\$ac_cv_env_${ac_var}_set eval ac_new_set=\$ac_env_${ac_var}_set eval ac_old_val=\$ac_cv_env_${ac_var}_value eval ac_new_val=\$ac_env_${ac_var}_value case $ac_old_set,$ac_new_set in set,) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5 printf "%s\n" "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;} ac_cache_corrupted=: ;; ,set) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was not set in the previous run" >&5 printf "%s\n" "$as_me: error: \`$ac_var' was not set in the previous run" >&2;} ac_cache_corrupted=: ;; ,);; *) if test "x$ac_old_val" != "x$ac_new_val"; then # differences in whitespace do not lead to failure. ac_old_val_w=`echo x $ac_old_val` ac_new_val_w=`echo x $ac_new_val` if test "$ac_old_val_w" != "$ac_new_val_w"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' has changed since the previous run:" >&5 printf "%s\n" "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;} ac_cache_corrupted=: else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&5 printf "%s\n" "$as_me: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&2;} eval $ac_var=\$ac_old_val fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: former value: \`$ac_old_val'" >&5 printf "%s\n" "$as_me: former value: \`$ac_old_val'" >&2;} { printf "%s\n" "$as_me:${as_lineno-$LINENO}: current value: \`$ac_new_val'" >&5 printf "%s\n" "$as_me: current value: \`$ac_new_val'" >&2;} fi;; esac # Pass precious variables to config.status. if test "$ac_new_set" = set; then case $ac_new_val in *\'*) ac_arg=$ac_var=`printf "%s\n" "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;; *) ac_arg=$ac_var=$ac_new_val ;; esac case " $ac_configure_args " in *" '$ac_arg' "*) ;; # Avoid dups. Use of quotes ensures accuracy. *) as_fn_append ac_configure_args " '$ac_arg'" ;; esac fi done if $ac_cache_corrupted; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: changes in the environment can compromise the build" >&5 printf "%s\n" "$as_me: error: changes in the environment can compromise the build" >&2;} as_fn_error $? "run \`${MAKE-make} distclean' and/or \`rm $cache_file' and start over" "$LINENO" 5 fi ## -------------------- ## ## Main body of script. ## ## -------------------- ## ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu ac_config_headers="$ac_config_headers config.h" ac_ext=cpp ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu printf "%s\n" "#define WEBDAR_VERSION \"1.0.0\"" >>confdefs.h am__api_version='1.16' # Find a good install program. We prefer a C program (faster), # so one script is as good as another. But avoid the broken or # incompatible versions: # SysV /etc/install, /usr/sbin/install # SunOS /usr/etc/install # IRIX /sbin/install # AIX /bin/install # AmigaOS /C/install, which installs bootblocks on floppy discs # AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag # AFS /usr/afsws/bin/install, which mishandles nonexistent args # SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" # OS/2's system install, which has a completely different semantic # ./install, which can be erroneously created by make from ./install.sh. # Reject install programs that cannot install multiple files. { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for a BSD-compatible install" >&5 printf %s "checking for a BSD-compatible install... " >&6; } if test -z "$INSTALL"; then if test ${ac_cv_path_install+y} then : printf %s "(cached) " >&6 else $as_nop as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac # Account for fact that we put trailing slashes in our PATH walk. case $as_dir in #(( ./ | /[cC]/* | \ /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \ ?:[\\/]os2[\\/]install[\\/]* | ?:[\\/]OS2[\\/]INSTALL[\\/]* | \ /usr/ucb/* ) ;; *) # OSF1 and SCO ODT 3.0 have their own names for install. # Don't use installbsd from OSF since it installs stuff as root # by default. for ac_prog in ginstall scoinst install; do for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_prog$ac_exec_ext"; then if test $ac_prog = install && grep dspmsg "$as_dir$ac_prog$ac_exec_ext" >/dev/null 2>&1; then # AIX install. It has an incompatible calling convention. : elif test $ac_prog = install && grep pwplus "$as_dir$ac_prog$ac_exec_ext" >/dev/null 2>&1; then # program-specific install script used by HP pwplus--don't use. : else rm -rf conftest.one conftest.two conftest.dir echo one > conftest.one echo two > conftest.two mkdir conftest.dir if "$as_dir$ac_prog$ac_exec_ext" -c conftest.one conftest.two "`pwd`/conftest.dir/" && test -s conftest.one && test -s conftest.two && test -s conftest.dir/conftest.one && test -s conftest.dir/conftest.two then ac_cv_path_install="$as_dir$ac_prog$ac_exec_ext -c" break 3 fi fi fi done done ;; esac done IFS=$as_save_IFS rm -rf conftest.one conftest.two conftest.dir fi if test ${ac_cv_path_install+y}; then INSTALL=$ac_cv_path_install else # As a last resort, use the slow shell script. Don't cache a # value for INSTALL within a source directory, because that will # break other packages using the cache if that directory is # removed, or if the value is a relative name. INSTALL=$ac_install_sh fi fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $INSTALL" >&5 printf "%s\n" "$INSTALL" >&6; } # Use test -z because SunOS4 sh mishandles braces in ${var-val}. # It thinks the first close brace ends the variable substitution. test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}' test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}' test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether build environment is sane" >&5 printf %s "checking whether build environment is sane... " >&6; } # Reject unsafe characters in $srcdir or the absolute working directory # name. Accept space and tab only in the latter. am_lf=' ' case `pwd` in *[\\\"\#\$\&\'\`$am_lf]*) as_fn_error $? "unsafe absolute working directory name" "$LINENO" 5;; esac case $srcdir in *[\\\"\#\$\&\'\`$am_lf\ \ ]*) as_fn_error $? "unsafe srcdir value: '$srcdir'" "$LINENO" 5;; esac # Do 'set' in a subshell so we don't clobber the current shell's # arguments. Must try -L first in case configure is actually a # symlink; some systems play weird games with the mod time of symlinks # (eg FreeBSD returns the mod time of the symlink's containing # directory). if ( am_has_slept=no for am_try in 1 2; do echo "timestamp, slept: $am_has_slept" > conftest.file set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null` if test "$*" = "X"; then # -L didn't work. set X `ls -t "$srcdir/configure" conftest.file` fi if test "$*" != "X $srcdir/configure conftest.file" \ && test "$*" != "X conftest.file $srcdir/configure"; then # If neither matched, then we have a broken ls. This can happen # if, for instance, CONFIG_SHELL is bash and it inherits a # broken ls alias from the environment. This has actually # happened. Such a system could not be considered "sane". as_fn_error $? "ls -t appears to fail. Make sure there is not a broken alias in your environment" "$LINENO" 5 fi if test "$2" = conftest.file || test $am_try -eq 2; then break fi # Just in case. sleep 1 am_has_slept=yes done test "$2" = conftest.file ) then # Ok. : else as_fn_error $? "newly created file is older than distributed files! Check your system clock" "$LINENO" 5 fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 printf "%s\n" "yes" >&6; } # If we didn't sleep, we still need to ensure time stamps of config.status and # generated files are strictly newer. am_sleep_pid= if grep 'slept: no' conftest.file >/dev/null 2>&1; then ( sleep 1 ) & am_sleep_pid=$! fi rm -f conftest.file test "$program_prefix" != NONE && program_transform_name="s&^&$program_prefix&;$program_transform_name" # Use a double $ so make ignores it. test "$program_suffix" != NONE && program_transform_name="s&\$&$program_suffix&;$program_transform_name" # Double any \ or $. # By default was `s,x,x', remove it if useless. ac_script='s/[\\$]/&&/g;s/;s,x,x,$//' program_transform_name=`printf "%s\n" "$program_transform_name" | sed "$ac_script"` # Expand $ac_aux_dir to an absolute path. am_aux_dir=`cd "$ac_aux_dir" && pwd` if test x"${MISSING+set}" != xset; then MISSING="\${SHELL} '$am_aux_dir/missing'" fi # Use eval to expand $SHELL if eval "$MISSING --is-lightweight"; then am_missing_run="$MISSING " else am_missing_run= { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: 'missing' script is too old or missing" >&5 printf "%s\n" "$as_me: WARNING: 'missing' script is too old or missing" >&2;} fi if test x"${install_sh+set}" != xset; then case $am_aux_dir in *\ * | *\ *) install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;; *) install_sh="\${SHELL} $am_aux_dir/install-sh" esac fi # Installed binaries are usually stripped using 'strip' when the user # run "make install-strip". However 'strip' might not be the right # tool to use in cross-compilation environments, therefore Automake # will honor the 'STRIP' environment variable to overrule this program. if test "$cross_compiling" != no; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args. set dummy ${ac_tool_prefix}strip; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_STRIP+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$STRIP"; then ac_cv_prog_STRIP="$STRIP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_STRIP="${ac_tool_prefix}strip" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi STRIP=$ac_cv_prog_STRIP if test -n "$STRIP"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5 printf "%s\n" "$STRIP" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi fi if test -z "$ac_cv_prog_STRIP"; then ac_ct_STRIP=$STRIP # Extract the first word of "strip", so it can be a program name with args. set dummy strip; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_ac_ct_STRIP+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$ac_ct_STRIP"; then ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_STRIP="strip" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP if test -n "$ac_ct_STRIP"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5 printf "%s\n" "$ac_ct_STRIP" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi if test "x$ac_ct_STRIP" = x; then STRIP=":" else case $cross_compiling:$ac_tool_warned in yes:) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac STRIP=$ac_ct_STRIP fi else STRIP="$ac_cv_prog_STRIP" fi fi INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for a race-free mkdir -p" >&5 printf %s "checking for a race-free mkdir -p... " >&6; } if test -z "$MKDIR_P"; then if test ${ac_cv_path_mkdir+y} then : printf %s "(cached) " >&6 else $as_nop as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/opt/sfw/bin do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_prog in mkdir gmkdir; do for ac_exec_ext in '' $ac_executable_extensions; do as_fn_executable_p "$as_dir$ac_prog$ac_exec_ext" || continue case `"$as_dir$ac_prog$ac_exec_ext" --version 2>&1` in #( 'mkdir ('*'coreutils) '* | \ 'BusyBox '* | \ 'mkdir (fileutils) '4.1*) ac_cv_path_mkdir=$as_dir$ac_prog$ac_exec_ext break 3;; esac done done done IFS=$as_save_IFS fi test -d ./--version && rmdir ./--version if test ${ac_cv_path_mkdir+y}; then MKDIR_P="$ac_cv_path_mkdir -p" else # As a last resort, use the slow shell script. Don't cache a # value for MKDIR_P within a source directory, because that will # break other packages using the cache if that directory is # removed, or if the value is a relative name. MKDIR_P="$ac_install_sh -d" fi fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $MKDIR_P" >&5 printf "%s\n" "$MKDIR_P" >&6; } for ac_prog in gawk mawk nawk awk do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_AWK+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$AWK"; then ac_cv_prog_AWK="$AWK" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_AWK="$ac_prog" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi AWK=$ac_cv_prog_AWK if test -n "$AWK"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $AWK" >&5 printf "%s\n" "$AWK" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi test -n "$AWK" && break done { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether ${MAKE-make} sets \$(MAKE)" >&5 printf %s "checking whether ${MAKE-make} sets \$(MAKE)... " >&6; } set x ${MAKE-make} ac_make=`printf "%s\n" "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'` if eval test \${ac_cv_prog_make_${ac_make}_set+y} then : printf %s "(cached) " >&6 else $as_nop cat >conftest.make <<\_ACEOF SHELL = /bin/sh all: @echo '@@@%%%=$(MAKE)=@@@%%%' _ACEOF # GNU make sometimes prints "make[1]: Entering ...", which would confuse us. case `${MAKE-make} -f conftest.make 2>/dev/null` in *@@@%%%=?*=@@@%%%*) eval ac_cv_prog_make_${ac_make}_set=yes;; *) eval ac_cv_prog_make_${ac_make}_set=no;; esac rm -f conftest.make fi if eval test \$ac_cv_prog_make_${ac_make}_set = yes; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 printf "%s\n" "yes" >&6; } SET_MAKE= else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } SET_MAKE="MAKE=${MAKE-make}" fi rm -rf .tst 2>/dev/null mkdir .tst 2>/dev/null if test -d .tst; then am__leading_dot=. else am__leading_dot=_ fi rmdir .tst 2>/dev/null # Check whether --enable-silent-rules was given. if test ${enable_silent_rules+y} then : enableval=$enable_silent_rules; fi case $enable_silent_rules in # ((( yes) AM_DEFAULT_VERBOSITY=0;; no) AM_DEFAULT_VERBOSITY=1;; *) AM_DEFAULT_VERBOSITY=1;; esac am_make=${MAKE-make} { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether $am_make supports nested variables" >&5 printf %s "checking whether $am_make supports nested variables... " >&6; } if test ${am_cv_make_support_nested_variables+y} then : printf %s "(cached) " >&6 else $as_nop if printf "%s\n" 'TRUE=$(BAR$(V)) BAR0=false BAR1=true V=1 am__doit: @$(TRUE) .PHONY: am__doit' | $am_make -f - >/dev/null 2>&1; then am_cv_make_support_nested_variables=yes else am_cv_make_support_nested_variables=no fi fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $am_cv_make_support_nested_variables" >&5 printf "%s\n" "$am_cv_make_support_nested_variables" >&6; } if test $am_cv_make_support_nested_variables = yes; then AM_V='$(V)' AM_DEFAULT_V='$(AM_DEFAULT_VERBOSITY)' else AM_V=$AM_DEFAULT_VERBOSITY AM_DEFAULT_V=$AM_DEFAULT_VERBOSITY fi AM_BACKSLASH='\' if test "`cd $srcdir && pwd`" != "`pwd`"; then # Use -I$(srcdir) only when $(srcdir) != ., so that make's output # is not polluted with repeated "-I." am__isrc=' -I$(srcdir)' # test to see if srcdir already configured if test -f $srcdir/config.status; then as_fn_error $? "source directory already configured; run \"make distclean\" there first" "$LINENO" 5 fi fi # test whether we have cygpath if test -z "$CYGPATH_W"; then if (cygpath --version) >/dev/null 2>/dev/null; then CYGPATH_W='cygpath -w' else CYGPATH_W=echo fi fi # Define the identity of the package. PACKAGE='webdar' VERSION='1.0.0' printf "%s\n" "#define PACKAGE \"$PACKAGE\"" >>confdefs.h printf "%s\n" "#define VERSION \"$VERSION\"" >>confdefs.h # Some tools Automake needs. ACLOCAL=${ACLOCAL-"${am_missing_run}aclocal-${am__api_version}"} AUTOCONF=${AUTOCONF-"${am_missing_run}autoconf"} AUTOMAKE=${AUTOMAKE-"${am_missing_run}automake-${am__api_version}"} AUTOHEADER=${AUTOHEADER-"${am_missing_run}autoheader"} MAKEINFO=${MAKEINFO-"${am_missing_run}makeinfo"} # For better backward compatibility. To be removed once Automake 1.9.x # dies out for good. For more background, see: # # mkdir_p='$(MKDIR_P)' # We need awk for the "check" target (and possibly the TAP driver). The # system "awk" is bad on some platforms. # Always define AMTAR for backward compatibility. Yes, it's still used # in the wild :-( We should find a proper way to deprecate it ... AMTAR='$${TAR-tar}' # We'll loop over all known methods to create a tar archive until one works. _am_tools='gnutar pax cpio none' am__tar='$${TAR-tar} chof - "$$tardir"' am__untar='$${TAR-tar} xf -' # Variables for tags utilities; see am/tags.am if test -z "$CTAGS"; then CTAGS=ctags fi if test -z "$ETAGS"; then ETAGS=etags fi if test -z "$CSCOPE"; then CSCOPE=cscope fi # POSIX will say in a future version that running "rm -f" with no argument # is OK; and we want to be able to make that assumption in our Makefile # recipes. So use an aggressive probe to check that the usage we want is # actually supported "in the wild" to an acceptable degree. # See automake bug#10828. # To make any issue more visible, cause the running configure to be aborted # by default if the 'rm' program in use doesn't match our expectations; the # user can still override this though. if rm -f && rm -fr && rm -rf; then : OK; else cat >&2 <<'END' Oops! Your 'rm' program seems unable to run without file operands specified on the command line, even when the '-f' option is present. This is contrary to the behaviour of most rm programs out there, and not conforming with the upcoming POSIX standard: Please tell bug-automake@gnu.org about your system, including the value of your $PATH and any error possibly output before this message. This can help us improve future automake versions. END if test x"$ACCEPT_INFERIOR_RM_PROGRAM" = x"yes"; then echo 'Configuration will proceed anyway, since you have set the' >&2 echo 'ACCEPT_INFERIOR_RM_PROGRAM variable to "yes"' >&2 echo >&2 else cat >&2 <<'END' Aborting the configuration process, to ensure you take notice of the issue. You can download and install GNU coreutils to get an 'rm' implementation that behaves properly: . If you want to complete the configuration process using your problematic 'rm' anyway, export the environment variable ACCEPT_INFERIOR_RM_PROGRAM to "yes", and re-run configure. END as_fn_error $? "Your 'rm' program is bad, sorry." "$LINENO" 5 fi fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for a sed that does not truncate output" >&5 printf %s "checking for a sed that does not truncate output... " >&6; } if test ${ac_cv_path_SED+y} then : printf %s "(cached) " >&6 else $as_nop ac_script=s/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb/ for ac_i in 1 2 3 4 5 6 7; do ac_script="$ac_script$as_nl$ac_script" done echo "$ac_script" 2>/dev/null | sed 99q >conftest.sed { ac_script=; unset ac_script;} if test -z "$SED"; then ac_path_SED_found=false # Loop through the user's path and test for each of PROGNAME-LIST as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_prog in sed gsed do for ac_exec_ext in '' $ac_executable_extensions; do ac_path_SED="$as_dir$ac_prog$ac_exec_ext" as_fn_executable_p "$ac_path_SED" || continue # Check for GNU ac_path_SED and select it if it is found. # Check for GNU $ac_path_SED case `"$ac_path_SED" --version 2>&1` in *GNU*) ac_cv_path_SED="$ac_path_SED" ac_path_SED_found=:;; *) ac_count=0 printf %s 0123456789 >"conftest.in" while : do cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" printf "%s\n" '' >> "conftest.nl" "$ac_path_SED" -f conftest.sed < "conftest.nl" >"conftest.out" 2>/dev/null || break diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break as_fn_arith $ac_count + 1 && ac_count=$as_val if test $ac_count -gt ${ac_path_SED_max-0}; then # Best one so far, save it but keep looking for a better one ac_cv_path_SED="$ac_path_SED" ac_path_SED_max=$ac_count fi # 10*(2^10) chars as input seems more than enough test $ac_count -gt 10 && break done rm -f conftest.in conftest.tmp conftest.nl conftest.out;; esac $ac_path_SED_found && break 3 done done done IFS=$as_save_IFS if test -z "$ac_cv_path_SED"; then as_fn_error $? "no acceptable sed could be found in \$PATH" "$LINENO" 5 fi else ac_cv_path_SED=$SED fi fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_SED" >&5 printf "%s\n" "$ac_cv_path_SED" >&6; } SED="$ac_cv_path_SED" rm -f conftest.sed { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether NLS is requested" >&5 printf %s "checking whether NLS is requested... " >&6; } # Check whether --enable-nls was given. if test ${enable_nls+y} then : enableval=$enable_nls; USE_NLS=$enableval else $as_nop USE_NLS=yes fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $USE_NLS" >&5 printf "%s\n" "$USE_NLS" >&6; } GETTEXT_MACRO_VERSION=0.20 # Prepare PATH_SEPARATOR. # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then # Determine PATH_SEPARATOR by trying to find /bin/sh in a PATH which # contains only /bin. Note that ksh looks also at the FPATH variable, # so we have to set that as well for the test. PATH_SEPARATOR=: (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 \ && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 \ || PATH_SEPARATOR=';' } fi # Find out how to test for executable files. Don't use a zero-byte file, # as systems may use methods other than mode bits to determine executability. cat >conf$$.file <<_ASEOF #! /bin/sh exit 0 _ASEOF chmod +x conf$$.file if test -x conf$$.file >/dev/null 2>&1; then ac_executable_p="test -x" else ac_executable_p="test -f" fi rm -f conf$$.file # Extract the first word of "msgfmt", so it can be a program name with args. set dummy msgfmt; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_path_MSGFMT+y} then : printf %s "(cached) " >&6 else $as_nop case "$MSGFMT" in [\\/]* | ?:[\\/]*) ac_cv_path_MSGFMT="$MSGFMT" # Let the user override the test with a path. ;; *) ac_save_IFS="$IFS"; IFS=$PATH_SEPARATOR for ac_dir in $PATH; do IFS="$ac_save_IFS" test -z "$ac_dir" && ac_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $ac_executable_p "$ac_dir/$ac_word$ac_exec_ext"; then echo "$as_me: trying $ac_dir/$ac_word..." >&5 if $ac_dir/$ac_word --statistics /dev/null >&5 2>&1 && (if $ac_dir/$ac_word --statistics /dev/null 2>&1 >/dev/null | grep usage >/dev/null; then exit 1; else exit 0; fi); then ac_cv_path_MSGFMT="$ac_dir/$ac_word$ac_exec_ext" break 2 fi fi done done IFS="$ac_save_IFS" test -z "$ac_cv_path_MSGFMT" && ac_cv_path_MSGFMT=":" ;; esac fi MSGFMT="$ac_cv_path_MSGFMT" if test "$MSGFMT" != ":"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $MSGFMT" >&5 printf "%s\n" "$MSGFMT" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi # Extract the first word of "gmsgfmt", so it can be a program name with args. set dummy gmsgfmt; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_path_GMSGFMT+y} then : printf %s "(cached) " >&6 else $as_nop case $GMSGFMT in [\\/]* | ?:[\\/]*) ac_cv_path_GMSGFMT="$GMSGFMT" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_path_GMSGFMT="$as_dir$ac_word$ac_exec_ext" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS test -z "$ac_cv_path_GMSGFMT" && ac_cv_path_GMSGFMT="$MSGFMT" ;; esac fi GMSGFMT=$ac_cv_path_GMSGFMT if test -n "$GMSGFMT"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $GMSGFMT" >&5 printf "%s\n" "$GMSGFMT" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi case `$GMSGFMT --version | sed 1q | sed -e 's,^[^0-9]*,,'` in '' | 0.[0-9] | 0.[0-9].* | 0.1[0-4] | 0.1[0-4].*) GMSGFMT_015=: ;; *) GMSGFMT_015=$GMSGFMT ;; esac # Prepare PATH_SEPARATOR. # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then # Determine PATH_SEPARATOR by trying to find /bin/sh in a PATH which # contains only /bin. Note that ksh looks also at the FPATH variable, # so we have to set that as well for the test. PATH_SEPARATOR=: (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 \ && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 \ || PATH_SEPARATOR=';' } fi # Find out how to test for executable files. Don't use a zero-byte file, # as systems may use methods other than mode bits to determine executability. cat >conf$$.file <<_ASEOF #! /bin/sh exit 0 _ASEOF chmod +x conf$$.file if test -x conf$$.file >/dev/null 2>&1; then ac_executable_p="test -x" else ac_executable_p="test -f" fi rm -f conf$$.file # Extract the first word of "xgettext", so it can be a program name with args. set dummy xgettext; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_path_XGETTEXT+y} then : printf %s "(cached) " >&6 else $as_nop case "$XGETTEXT" in [\\/]* | ?:[\\/]*) ac_cv_path_XGETTEXT="$XGETTEXT" # Let the user override the test with a path. ;; *) ac_save_IFS="$IFS"; IFS=$PATH_SEPARATOR for ac_dir in $PATH; do IFS="$ac_save_IFS" test -z "$ac_dir" && ac_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $ac_executable_p "$ac_dir/$ac_word$ac_exec_ext"; then echo "$as_me: trying $ac_dir/$ac_word..." >&5 if $ac_dir/$ac_word --omit-header --copyright-holder= --msgid-bugs-address= /dev/null >&5 2>&1 && (if $ac_dir/$ac_word --omit-header --copyright-holder= --msgid-bugs-address= /dev/null 2>&1 >/dev/null | grep usage >/dev/null; then exit 1; else exit 0; fi); then ac_cv_path_XGETTEXT="$ac_dir/$ac_word$ac_exec_ext" break 2 fi fi done done IFS="$ac_save_IFS" test -z "$ac_cv_path_XGETTEXT" && ac_cv_path_XGETTEXT=":" ;; esac fi XGETTEXT="$ac_cv_path_XGETTEXT" if test "$XGETTEXT" != ":"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $XGETTEXT" >&5 printf "%s\n" "$XGETTEXT" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi rm -f messages.po case `$XGETTEXT --version | sed 1q | sed -e 's,^[^0-9]*,,'` in '' | 0.[0-9] | 0.[0-9].* | 0.1[0-4] | 0.1[0-4].*) XGETTEXT_015=: ;; *) XGETTEXT_015=$XGETTEXT ;; esac # Prepare PATH_SEPARATOR. # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then # Determine PATH_SEPARATOR by trying to find /bin/sh in a PATH which # contains only /bin. Note that ksh looks also at the FPATH variable, # so we have to set that as well for the test. PATH_SEPARATOR=: (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 \ && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 \ || PATH_SEPARATOR=';' } fi # Find out how to test for executable files. Don't use a zero-byte file, # as systems may use methods other than mode bits to determine executability. cat >conf$$.file <<_ASEOF #! /bin/sh exit 0 _ASEOF chmod +x conf$$.file if test -x conf$$.file >/dev/null 2>&1; then ac_executable_p="test -x" else ac_executable_p="test -f" fi rm -f conf$$.file # Extract the first word of "msgmerge", so it can be a program name with args. set dummy msgmerge; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_path_MSGMERGE+y} then : printf %s "(cached) " >&6 else $as_nop case "$MSGMERGE" in [\\/]* | ?:[\\/]*) ac_cv_path_MSGMERGE="$MSGMERGE" # Let the user override the test with a path. ;; *) ac_save_IFS="$IFS"; IFS=$PATH_SEPARATOR for ac_dir in $PATH; do IFS="$ac_save_IFS" test -z "$ac_dir" && ac_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $ac_executable_p "$ac_dir/$ac_word$ac_exec_ext"; then echo "$as_me: trying $ac_dir/$ac_word..." >&5 if $ac_dir/$ac_word --update -q /dev/null /dev/null >&5 2>&1; then ac_cv_path_MSGMERGE="$ac_dir/$ac_word$ac_exec_ext" break 2 fi fi done done IFS="$ac_save_IFS" test -z "$ac_cv_path_MSGMERGE" && ac_cv_path_MSGMERGE=":" ;; esac fi MSGMERGE="$ac_cv_path_MSGMERGE" if test "$MSGMERGE" != ":"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $MSGMERGE" >&5 printf "%s\n" "$MSGMERGE" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi if LC_ALL=C $MSGMERGE --help | grep ' --for-msgfmt ' >/dev/null; then MSGMERGE_FOR_MSGFMT_OPTION='--for-msgfmt' else if LC_ALL=C $MSGMERGE --help | grep ' --no-fuzzy-matching ' >/dev/null; then MSGMERGE_FOR_MSGFMT_OPTION='--no-fuzzy-matching --no-location --quiet' else MSGMERGE_FOR_MSGFMT_OPTION='--no-location --quiet' fi fi test -n "${XGETTEXT_EXTRA_OPTIONS+set}" || XGETTEXT_EXTRA_OPTIONS= ac_config_commands="$ac_config_commands po-directories" if test "X$prefix" = "XNONE"; then acl_final_prefix="$ac_default_prefix" else acl_final_prefix="$prefix" fi if test "X$exec_prefix" = "XNONE"; then acl_final_exec_prefix='${prefix}' else acl_final_exec_prefix="$exec_prefix" fi acl_save_prefix="$prefix" prefix="$acl_final_prefix" eval acl_final_exec_prefix=\"$acl_final_exec_prefix\" prefix="$acl_save_prefix" DEPDIR="${am__leading_dot}deps" ac_config_commands="$ac_config_commands depfiles" { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether ${MAKE-make} supports the include directive" >&5 printf %s "checking whether ${MAKE-make} supports the include directive... " >&6; } cat > confinc.mk << 'END' am__doit: @echo this is the am__doit target >confinc.out .PHONY: am__doit END am__include="#" am__quote= # BSD make does it like this. echo '.include "confinc.mk" # ignored' > confmf.BSD # Other make implementations (GNU, Solaris 10, AIX) do it like this. echo 'include confinc.mk # ignored' > confmf.GNU _am_result=no for s in GNU BSD; do { echo "$as_me:$LINENO: ${MAKE-make} -f confmf.$s && cat confinc.out" >&5 (${MAKE-make} -f confmf.$s && cat confinc.out) >&5 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } case $?:`cat confinc.out 2>/dev/null` in #( '0:this is the am__doit target') : case $s in #( BSD) : am__include='.include' am__quote='"' ;; #( *) : am__include='include' am__quote='' ;; esac ;; #( *) : ;; esac if test "$am__include" != "#"; then _am_result="yes ($s style)" break fi done rm -f confinc.* confmf.* { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: ${_am_result}" >&5 printf "%s\n" "${_am_result}" >&6; } # Check whether --enable-dependency-tracking was given. if test ${enable_dependency_tracking+y} then : enableval=$enable_dependency_tracking; fi if test "x$enable_dependency_tracking" != xno; then am_depcomp="$ac_aux_dir/depcomp" AMDEPBACKSLASH='\' am__nodep='_no' fi if test "x$enable_dependency_tracking" != xno; then AMDEP_TRUE= AMDEP_FALSE='#' else AMDEP_TRUE='#' AMDEP_FALSE= fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args. set dummy ${ac_tool_prefix}gcc; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_CC+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_CC="${ac_tool_prefix}gcc" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 printf "%s\n" "$CC" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi fi if test -z "$ac_cv_prog_CC"; then ac_ct_CC=$CC # Extract the first word of "gcc", so it can be a program name with args. set dummy gcc; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_ac_ct_CC+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="gcc" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 printf "%s\n" "$ac_ct_CC" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi else CC="$ac_cv_prog_CC" fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. set dummy ${ac_tool_prefix}cc; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_CC+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_CC="${ac_tool_prefix}cc" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 printf "%s\n" "$CC" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi fi fi if test -z "$CC"; then # Extract the first word of "cc", so it can be a program name with args. set dummy cc; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_CC+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else ac_prog_rejected=no as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then if test "$as_dir$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then ac_prog_rejected=yes continue fi ac_cv_prog_CC="cc" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS if test $ac_prog_rejected = yes; then # We found a bogon in the path, so make sure we never use it. set dummy $ac_cv_prog_CC shift if test $# != 0; then # We chose a different compiler from the bogus one. # However, it has the same basename, so the bogon will be chosen # first if we set CC to just the basename; use the full file name. shift ac_cv_prog_CC="$as_dir$ac_word${1+' '}$@" fi fi fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 printf "%s\n" "$CC" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then for ac_prog in cl.exe do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_CC+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_CC="$ac_tool_prefix$ac_prog" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 printf "%s\n" "$CC" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi test -n "$CC" && break done fi if test -z "$CC"; then ac_ct_CC=$CC for ac_prog in cl.exe do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_ac_ct_CC+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="$ac_prog" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 printf "%s\n" "$ac_ct_CC" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi test -n "$ac_ct_CC" && break done if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi fi fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}clang", so it can be a program name with args. set dummy ${ac_tool_prefix}clang; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_CC+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_CC="${ac_tool_prefix}clang" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 printf "%s\n" "$CC" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi fi if test -z "$ac_cv_prog_CC"; then ac_ct_CC=$CC # Extract the first word of "clang", so it can be a program name with args. set dummy clang; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_ac_ct_CC+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="clang" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 printf "%s\n" "$ac_ct_CC" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi else CC="$ac_cv_prog_CC" fi fi test -z "$CC" && { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "no acceptable C compiler found in \$PATH See \`config.log' for more details" "$LINENO" 5; } # Provide some information about the compiler. printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5 set X $ac_compile ac_compiler=$2 for ac_option in --version -v -V -qversion -version; do { { ac_try="$ac_compiler $ac_option >&5" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_compiler $ac_option >&5") 2>conftest.err ac_status=$? if test -s conftest.err; then sed '10a\ ... rest of stderr output deleted ... 10q' conftest.err >conftest.er1 cat conftest.er1 >&5 fi rm -f conftest.er1 conftest.err printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } done cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { ; return 0; } _ACEOF ac_clean_files_save=$ac_clean_files ac_clean_files="$ac_clean_files a.out a.out.dSYM a.exe b.out" # Try to create an executable without -o first, disregard a.out. # It will help us diagnose broken compilers, and finding out an intuition # of exeext. { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the C compiler works" >&5 printf %s "checking whether the C compiler works... " >&6; } ac_link_default=`printf "%s\n" "$ac_link" | sed 's/ -o *conftest[^ ]*//'` # The possible output files: ac_files="a.out conftest.exe conftest a.exe a_out.exe b.out conftest.*" ac_rmfiles= for ac_file in $ac_files do case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; * ) ac_rmfiles="$ac_rmfiles $ac_file";; esac done rm -f $ac_rmfiles if { { ac_try="$ac_link_default" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_link_default") 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } then : # Autoconf-2.13 could set the ac_cv_exeext variable to `no'. # So ignore a value of `no', otherwise this would lead to `EXEEXT = no' # in a Makefile. We should not override ac_cv_exeext if it was cached, # so that the user can short-circuit this test for compilers unknown to # Autoconf. for ac_file in $ac_files '' do test -f "$ac_file" || continue case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; [ab].out ) # We found the default executable, but exeext='' is most # certainly right. break;; *.* ) if test ${ac_cv_exeext+y} && test "$ac_cv_exeext" != no; then :; else ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` fi # We set ac_cv_exeext here because the later test for it is not # safe: cross compilers may not add the suffix if given an `-o' # argument, so we may need to know it at that point already. # Even if this section looks crufty: it has the advantage of # actually working. break;; * ) break;; esac done test "$ac_cv_exeext" = no && ac_cv_exeext= else $as_nop ac_file='' fi if test -z "$ac_file" then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } printf "%s\n" "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error 77 "C compiler cannot create executables See \`config.log' for more details" "$LINENO" 5; } else $as_nop { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 printf "%s\n" "yes" >&6; } fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for C compiler default output file name" >&5 printf %s "checking for C compiler default output file name... " >&6; } { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_file" >&5 printf "%s\n" "$ac_file" >&6; } ac_exeext=$ac_cv_exeext rm -f -r a.out a.out.dSYM a.exe conftest$ac_cv_exeext b.out ac_clean_files=$ac_clean_files_save { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for suffix of executables" >&5 printf %s "checking for suffix of executables... " >&6; } if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } then : # If both `conftest.exe' and `conftest' are `present' (well, observable) # catch `conftest.exe'. For instance with Cygwin, `ls conftest' will # work properly (i.e., refer to `conftest.exe'), while it won't with # `rm'. for ac_file in conftest.exe conftest conftest.*; do test -f "$ac_file" || continue case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` break;; * ) break;; esac done else $as_nop { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot compute suffix of executables: cannot compile and link See \`config.log' for more details" "$LINENO" 5; } fi rm -f conftest conftest$ac_cv_exeext { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_exeext" >&5 printf "%s\n" "$ac_cv_exeext" >&6; } rm -f conftest.$ac_ext EXEEXT=$ac_cv_exeext ac_exeext=$EXEEXT cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main (void) { FILE *f = fopen ("conftest.out", "w"); return ferror (f) || fclose (f) != 0; ; return 0; } _ACEOF ac_clean_files="$ac_clean_files conftest.out" # Check that the compiler produces executables we can run. If not, either # the compiler is broken, or we cross compile. { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether we are cross compiling" >&5 printf %s "checking whether we are cross compiling... " >&6; } if test "$cross_compiling" != yes; then { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } if { ac_try='./conftest$ac_cv_exeext' { { case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_try") 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; }; then cross_compiling=no else if test "$cross_compiling" = maybe; then cross_compiling=yes else { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error 77 "cannot run C compiled programs. If you meant to cross compile, use \`--host'. See \`config.log' for more details" "$LINENO" 5; } fi fi fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $cross_compiling" >&5 printf "%s\n" "$cross_compiling" >&6; } rm -f conftest.$ac_ext conftest$ac_cv_exeext conftest.out ac_clean_files=$ac_clean_files_save { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for suffix of object files" >&5 printf %s "checking for suffix of object files... " >&6; } if test ${ac_cv_objext+y} then : printf %s "(cached) " >&6 else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { ; return 0; } _ACEOF rm -f conftest.o conftest.obj if { { ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_compile") 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } then : for ac_file in conftest.o conftest.obj conftest.*; do test -f "$ac_file" || continue; case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM ) ;; *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'` break;; esac done else $as_nop printf "%s\n" "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot compute suffix of object files: cannot compile See \`config.log' for more details" "$LINENO" 5; } fi rm -f conftest.$ac_cv_objext conftest.$ac_ext fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_objext" >&5 printf "%s\n" "$ac_cv_objext" >&6; } OBJEXT=$ac_cv_objext ac_objext=$OBJEXT { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the compiler supports GNU C" >&5 printf %s "checking whether the compiler supports GNU C... " >&6; } if test ${ac_cv_c_compiler_gnu+y} then : printf %s "(cached) " >&6 else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { #ifndef __GNUC__ choke me #endif ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : ac_compiler_gnu=yes else $as_nop ac_compiler_gnu=no fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ac_cv_c_compiler_gnu=$ac_compiler_gnu fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5 printf "%s\n" "$ac_cv_c_compiler_gnu" >&6; } ac_compiler_gnu=$ac_cv_c_compiler_gnu if test $ac_compiler_gnu = yes; then GCC=yes else GCC= fi ac_test_CFLAGS=${CFLAGS+y} ac_save_CFLAGS=$CFLAGS { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5 printf %s "checking whether $CC accepts -g... " >&6; } if test ${ac_cv_prog_cc_g+y} then : printf %s "(cached) " >&6 else $as_nop ac_save_c_werror_flag=$ac_c_werror_flag ac_c_werror_flag=yes ac_cv_prog_cc_g=no CFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : ac_cv_prog_cc_g=yes else $as_nop CFLAGS="" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : else $as_nop ac_c_werror_flag=$ac_save_c_werror_flag CFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : ac_cv_prog_cc_g=yes fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ac_c_werror_flag=$ac_save_c_werror_flag fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5 printf "%s\n" "$ac_cv_prog_cc_g" >&6; } if test $ac_test_CFLAGS; then CFLAGS=$ac_save_CFLAGS elif test $ac_cv_prog_cc_g = yes; then if test "$GCC" = yes; then CFLAGS="-g -O2" else CFLAGS="-g" fi else if test "$GCC" = yes; then CFLAGS="-O2" else CFLAGS= fi fi ac_prog_cc_stdc=no if test x$ac_prog_cc_stdc = xno then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CC option to enable C11 features" >&5 printf %s "checking for $CC option to enable C11 features... " >&6; } if test ${ac_cv_prog_cc_c11+y} then : printf %s "(cached) " >&6 else $as_nop ac_cv_prog_cc_c11=no ac_save_CC=$CC cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $ac_c_conftest_c11_program _ACEOF for ac_arg in '' -std=gnu11 do CC="$ac_save_CC $ac_arg" if ac_fn_c_try_compile "$LINENO" then : ac_cv_prog_cc_c11=$ac_arg fi rm -f core conftest.err conftest.$ac_objext conftest.beam test "x$ac_cv_prog_cc_c11" != "xno" && break done rm -f conftest.$ac_ext CC=$ac_save_CC fi if test "x$ac_cv_prog_cc_c11" = xno then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 printf "%s\n" "unsupported" >&6; } else $as_nop if test "x$ac_cv_prog_cc_c11" = x then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 printf "%s\n" "none needed" >&6; } else $as_nop { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c11" >&5 printf "%s\n" "$ac_cv_prog_cc_c11" >&6; } CC="$CC $ac_cv_prog_cc_c11" fi ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c11 ac_prog_cc_stdc=c11 fi fi if test x$ac_prog_cc_stdc = xno then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CC option to enable C99 features" >&5 printf %s "checking for $CC option to enable C99 features... " >&6; } if test ${ac_cv_prog_cc_c99+y} then : printf %s "(cached) " >&6 else $as_nop ac_cv_prog_cc_c99=no ac_save_CC=$CC cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $ac_c_conftest_c99_program _ACEOF for ac_arg in '' -std=gnu99 -std=c99 -c99 -qlanglvl=extc1x -qlanglvl=extc99 -AC99 -D_STDC_C99= do CC="$ac_save_CC $ac_arg" if ac_fn_c_try_compile "$LINENO" then : ac_cv_prog_cc_c99=$ac_arg fi rm -f core conftest.err conftest.$ac_objext conftest.beam test "x$ac_cv_prog_cc_c99" != "xno" && break done rm -f conftest.$ac_ext CC=$ac_save_CC fi if test "x$ac_cv_prog_cc_c99" = xno then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 printf "%s\n" "unsupported" >&6; } else $as_nop if test "x$ac_cv_prog_cc_c99" = x then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 printf "%s\n" "none needed" >&6; } else $as_nop { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c99" >&5 printf "%s\n" "$ac_cv_prog_cc_c99" >&6; } CC="$CC $ac_cv_prog_cc_c99" fi ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c99 ac_prog_cc_stdc=c99 fi fi if test x$ac_prog_cc_stdc = xno then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CC option to enable C89 features" >&5 printf %s "checking for $CC option to enable C89 features... " >&6; } if test ${ac_cv_prog_cc_c89+y} then : printf %s "(cached) " >&6 else $as_nop ac_cv_prog_cc_c89=no ac_save_CC=$CC cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $ac_c_conftest_c89_program _ACEOF for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" do CC="$ac_save_CC $ac_arg" if ac_fn_c_try_compile "$LINENO" then : ac_cv_prog_cc_c89=$ac_arg fi rm -f core conftest.err conftest.$ac_objext conftest.beam test "x$ac_cv_prog_cc_c89" != "xno" && break done rm -f conftest.$ac_ext CC=$ac_save_CC fi if test "x$ac_cv_prog_cc_c89" = xno then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 printf "%s\n" "unsupported" >&6; } else $as_nop if test "x$ac_cv_prog_cc_c89" = x then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 printf "%s\n" "none needed" >&6; } else $as_nop { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5 printf "%s\n" "$ac_cv_prog_cc_c89" >&6; } CC="$CC $ac_cv_prog_cc_c89" fi ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c89 ac_prog_cc_stdc=c89 fi fi ac_ext=cpp ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether $CC understands -c and -o together" >&5 printf %s "checking whether $CC understands -c and -o together... " >&6; } if test ${am_cv_prog_cc_c_o+y} then : printf %s "(cached) " >&6 else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { ; return 0; } _ACEOF # Make sure it works both with $CC and with simple cc. # Following AC_PROG_CC_C_O, we do the test twice because some # compilers refuse to overwrite an existing .o file with -o, # though they will create one. am_cv_prog_cc_c_o=yes for am_i in 1 2; do if { echo "$as_me:$LINENO: $CC -c conftest.$ac_ext -o conftest2.$ac_objext" >&5 ($CC -c conftest.$ac_ext -o conftest2.$ac_objext) >&5 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } \ && test -f conftest2.$ac_objext; then : OK else am_cv_prog_cc_c_o=no break fi done rm -f core conftest* unset am_i fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $am_cv_prog_cc_c_o" >&5 printf "%s\n" "$am_cv_prog_cc_c_o" >&6; } if test "$am_cv_prog_cc_c_o" != yes; then # Losing compiler, so override with the script. # FIXME: It is wrong to rewrite CC. # But if we don't then we get into trouble of one sort or another. # A longer-term fix would be to have automake use am__CC in this case, # and then we could set am__CC="\$(top_srcdir)/compile \$(CC)" CC="$am_aux_dir/compile $CC" fi ac_ext=cpp ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu depcc="$CC" am_compiler_list= { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5 printf %s "checking dependency style of $depcc... " >&6; } if test ${am_cv_CC_dependencies_compiler_type+y} then : printf %s "(cached) " >&6 else $as_nop if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then # We make a subdir and do the tests there. Otherwise we can end up # making bogus files that we don't know about and never remove. For # instance it was reported that on HP-UX the gcc test will end up # making a dummy file named 'D' -- because '-MD' means "put the output # in D". rm -rf conftest.dir mkdir conftest.dir # Copy depcomp to subdir because otherwise we won't find it if we're # using a relative directory. cp "$am_depcomp" conftest.dir cd conftest.dir # We will build objects and dependencies in a subdirectory because # it helps to detect inapplicable dependency modes. For instance # both Tru64's cc and ICC support -MD to output dependencies as a # side effect of compilation, but ICC will put the dependencies in # the current directory while Tru64 will put them in the object # directory. mkdir sub am_cv_CC_dependencies_compiler_type=none if test "$am_compiler_list" = ""; then am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp` fi am__universal=false case " $depcc " in #( *\ -arch\ *\ -arch\ *) am__universal=true ;; esac for depmode in $am_compiler_list; do # Setup a source with many dependencies, because some compilers # like to wrap large dependency lists on column 80 (with \), and # we should not choose a depcomp mode which is confused by this. # # We need to recreate these files for each test, as the compiler may # overwrite some of them when testing with obscure command lines. # This happens at least with the AIX C compiler. : > sub/conftest.c for i in 1 2 3 4 5 6; do echo '#include "conftst'$i'.h"' >> sub/conftest.c # Using ": > sub/conftst$i.h" creates only sub/conftst1.h with # Solaris 10 /bin/sh. echo '/* dummy */' > sub/conftst$i.h done echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf # We check with '-c' and '-o' for the sake of the "dashmstdout" # mode. It turns out that the SunPro C++ compiler does not properly # handle '-M -o', and we need to detect this. Also, some Intel # versions had trouble with output in subdirs. am__obj=sub/conftest.${OBJEXT-o} am__minus_obj="-o $am__obj" case $depmode in gcc) # This depmode causes a compiler race in universal mode. test "$am__universal" = false || continue ;; nosideeffect) # After this tag, mechanisms are not by side-effect, so they'll # only be used when explicitly requested. if test "x$enable_dependency_tracking" = xyes; then continue else break fi ;; msvc7 | msvc7msys | msvisualcpp | msvcmsys) # This compiler won't grok '-c -o', but also, the minuso test has # not run yet. These depmodes are late enough in the game, and # so weak that their functioning should not be impacted. am__obj=conftest.${OBJEXT-o} am__minus_obj= ;; none) break ;; esac if depmode=$depmode \ source=sub/conftest.c object=$am__obj \ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ >/dev/null 2>conftest.err && grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && grep $am__obj sub/conftest.Po > /dev/null 2>&1 && ${MAKE-make} -s -f confmf > /dev/null 2>&1; then # icc doesn't choke on unknown options, it will just issue warnings # or remarks (even with -Werror). So we grep stderr for any message # that says an option was ignored or not supported. # When given -MP, icc 7.0 and 7.1 complain thusly: # icc: Command line warning: ignoring option '-M'; no argument required # The diagnosis changed in icc 8.0: # icc: Command line remark: option '-MP' not supported if (grep 'ignoring option' conftest.err || grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else am_cv_CC_dependencies_compiler_type=$depmode break fi fi done cd .. rm -rf conftest.dir else am_cv_CC_dependencies_compiler_type=none fi fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $am_cv_CC_dependencies_compiler_type" >&5 printf "%s\n" "$am_cv_CC_dependencies_compiler_type" >&6; } CCDEPMODE=depmode=$am_cv_CC_dependencies_compiler_type if test "x$enable_dependency_tracking" != xno \ && test "$am_cv_CC_dependencies_compiler_type" = gcc3; then am__fastdepCC_TRUE= am__fastdepCC_FALSE='#' else am__fastdepCC_TRUE='#' am__fastdepCC_FALSE= fi # Make sure we can run config.sub. $SHELL "${ac_aux_dir}config.sub" sun4 >/dev/null 2>&1 || as_fn_error $? "cannot run $SHELL ${ac_aux_dir}config.sub" "$LINENO" 5 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking build system type" >&5 printf %s "checking build system type... " >&6; } if test ${ac_cv_build+y} then : printf %s "(cached) " >&6 else $as_nop ac_build_alias=$build_alias test "x$ac_build_alias" = x && ac_build_alias=`$SHELL "${ac_aux_dir}config.guess"` test "x$ac_build_alias" = x && as_fn_error $? "cannot guess build type; you must specify one" "$LINENO" 5 ac_cv_build=`$SHELL "${ac_aux_dir}config.sub" $ac_build_alias` || as_fn_error $? "$SHELL ${ac_aux_dir}config.sub $ac_build_alias failed" "$LINENO" 5 fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_build" >&5 printf "%s\n" "$ac_cv_build" >&6; } case $ac_cv_build in *-*-*) ;; *) as_fn_error $? "invalid value of canonical build" "$LINENO" 5;; esac build=$ac_cv_build ac_save_IFS=$IFS; IFS='-' set x $ac_cv_build shift build_cpu=$1 build_vendor=$2 shift; shift # Remember, the first character of IFS is used to create $*, # except with old shells: build_os=$* IFS=$ac_save_IFS case $build_os in *\ *) build_os=`echo "$build_os" | sed 's/ /-/g'`;; esac { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking host system type" >&5 printf %s "checking host system type... " >&6; } if test ${ac_cv_host+y} then : printf %s "(cached) " >&6 else $as_nop if test "x$host_alias" = x; then ac_cv_host=$ac_cv_build else ac_cv_host=`$SHELL "${ac_aux_dir}config.sub" $host_alias` || as_fn_error $? "$SHELL ${ac_aux_dir}config.sub $host_alias failed" "$LINENO" 5 fi fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_host" >&5 printf "%s\n" "$ac_cv_host" >&6; } case $ac_cv_host in *-*-*) ;; *) as_fn_error $? "invalid value of canonical host" "$LINENO" 5;; esac host=$ac_cv_host ac_save_IFS=$IFS; IFS='-' set x $ac_cv_host shift host_cpu=$1 host_vendor=$2 shift; shift # Remember, the first character of IFS is used to create $*, # except with old shells: host_os=$* IFS=$ac_save_IFS case $host_os in *\ *) host_os=`echo "$host_os" | sed 's/ /-/g'`;; esac ac_ext=cpp ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu if test -z "$CXX"; then if test -n "$CCC"; then CXX=$CCC else if test -n "$ac_tool_prefix"; then for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC clang++ do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_CXX+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$CXX"; then ac_cv_prog_CXX="$CXX" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_CXX="$ac_tool_prefix$ac_prog" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CXX=$ac_cv_prog_CXX if test -n "$CXX"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CXX" >&5 printf "%s\n" "$CXX" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi test -n "$CXX" && break done fi if test -z "$CXX"; then ac_ct_CXX=$CXX for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC clang++ do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_ac_ct_CXX+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$ac_ct_CXX"; then ac_cv_prog_ac_ct_CXX="$ac_ct_CXX" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CXX="$ac_prog" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_CXX=$ac_cv_prog_ac_ct_CXX if test -n "$ac_ct_CXX"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CXX" >&5 printf "%s\n" "$ac_ct_CXX" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi test -n "$ac_ct_CXX" && break done if test "x$ac_ct_CXX" = x; then CXX="g++" else case $cross_compiling:$ac_tool_warned in yes:) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CXX=$ac_ct_CXX fi fi fi fi # Provide some information about the compiler. printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for C++ compiler version" >&5 set X $ac_compile ac_compiler=$2 for ac_option in --version -v -V -qversion; do { { ac_try="$ac_compiler $ac_option >&5" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_compiler $ac_option >&5") 2>conftest.err ac_status=$? if test -s conftest.err; then sed '10a\ ... rest of stderr output deleted ... 10q' conftest.err >conftest.er1 cat conftest.er1 >&5 fi rm -f conftest.er1 conftest.err printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } done { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the compiler supports GNU C++" >&5 printf %s "checking whether the compiler supports GNU C++... " >&6; } if test ${ac_cv_cxx_compiler_gnu+y} then : printf %s "(cached) " >&6 else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { #ifndef __GNUC__ choke me #endif ; return 0; } _ACEOF if ac_fn_cxx_try_compile "$LINENO" then : ac_compiler_gnu=yes else $as_nop ac_compiler_gnu=no fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ac_cv_cxx_compiler_gnu=$ac_compiler_gnu fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_cxx_compiler_gnu" >&5 printf "%s\n" "$ac_cv_cxx_compiler_gnu" >&6; } ac_compiler_gnu=$ac_cv_cxx_compiler_gnu if test $ac_compiler_gnu = yes; then GXX=yes else GXX= fi ac_test_CXXFLAGS=${CXXFLAGS+y} ac_save_CXXFLAGS=$CXXFLAGS { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether $CXX accepts -g" >&5 printf %s "checking whether $CXX accepts -g... " >&6; } if test ${ac_cv_prog_cxx_g+y} then : printf %s "(cached) " >&6 else $as_nop ac_save_cxx_werror_flag=$ac_cxx_werror_flag ac_cxx_werror_flag=yes ac_cv_prog_cxx_g=no CXXFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { ; return 0; } _ACEOF if ac_fn_cxx_try_compile "$LINENO" then : ac_cv_prog_cxx_g=yes else $as_nop CXXFLAGS="" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { ; return 0; } _ACEOF if ac_fn_cxx_try_compile "$LINENO" then : else $as_nop ac_cxx_werror_flag=$ac_save_cxx_werror_flag CXXFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { ; return 0; } _ACEOF if ac_fn_cxx_try_compile "$LINENO" then : ac_cv_prog_cxx_g=yes fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ac_cxx_werror_flag=$ac_save_cxx_werror_flag fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cxx_g" >&5 printf "%s\n" "$ac_cv_prog_cxx_g" >&6; } if test $ac_test_CXXFLAGS; then CXXFLAGS=$ac_save_CXXFLAGS elif test $ac_cv_prog_cxx_g = yes; then if test "$GXX" = yes; then CXXFLAGS="-g -O2" else CXXFLAGS="-g" fi else if test "$GXX" = yes; then CXXFLAGS="-O2" else CXXFLAGS= fi fi ac_prog_cxx_stdcxx=no if test x$ac_prog_cxx_stdcxx = xno then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CXX option to enable C++11 features" >&5 printf %s "checking for $CXX option to enable C++11 features... " >&6; } if test ${ac_cv_prog_cxx_cxx11+y} then : printf %s "(cached) " >&6 else $as_nop ac_cv_prog_cxx_cxx11=no ac_save_CXX=$CXX cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $ac_cxx_conftest_cxx11_program _ACEOF for ac_arg in '' -std=gnu++11 -std=gnu++0x -std=c++11 -std=c++0x -qlanglvl=extended0x -AA do CXX="$ac_save_CXX $ac_arg" if ac_fn_cxx_try_compile "$LINENO" then : ac_cv_prog_cxx_cxx11=$ac_arg fi rm -f core conftest.err conftest.$ac_objext conftest.beam test "x$ac_cv_prog_cxx_cxx11" != "xno" && break done rm -f conftest.$ac_ext CXX=$ac_save_CXX fi if test "x$ac_cv_prog_cxx_cxx11" = xno then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 printf "%s\n" "unsupported" >&6; } else $as_nop if test "x$ac_cv_prog_cxx_cxx11" = x then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 printf "%s\n" "none needed" >&6; } else $as_nop { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cxx_cxx11" >&5 printf "%s\n" "$ac_cv_prog_cxx_cxx11" >&6; } CXX="$CXX $ac_cv_prog_cxx_cxx11" fi ac_cv_prog_cxx_stdcxx=$ac_cv_prog_cxx_cxx11 ac_prog_cxx_stdcxx=cxx11 fi fi if test x$ac_prog_cxx_stdcxx = xno then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CXX option to enable C++98 features" >&5 printf %s "checking for $CXX option to enable C++98 features... " >&6; } if test ${ac_cv_prog_cxx_cxx98+y} then : printf %s "(cached) " >&6 else $as_nop ac_cv_prog_cxx_cxx98=no ac_save_CXX=$CXX cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $ac_cxx_conftest_cxx98_program _ACEOF for ac_arg in '' -std=gnu++98 -std=c++98 -qlanglvl=extended -AA do CXX="$ac_save_CXX $ac_arg" if ac_fn_cxx_try_compile "$LINENO" then : ac_cv_prog_cxx_cxx98=$ac_arg fi rm -f core conftest.err conftest.$ac_objext conftest.beam test "x$ac_cv_prog_cxx_cxx98" != "xno" && break done rm -f conftest.$ac_ext CXX=$ac_save_CXX fi if test "x$ac_cv_prog_cxx_cxx98" = xno then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 printf "%s\n" "unsupported" >&6; } else $as_nop if test "x$ac_cv_prog_cxx_cxx98" = x then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 printf "%s\n" "none needed" >&6; } else $as_nop { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cxx_cxx98" >&5 printf "%s\n" "$ac_cv_prog_cxx_cxx98" >&6; } CXX="$CXX $ac_cv_prog_cxx_cxx98" fi ac_cv_prog_cxx_stdcxx=$ac_cv_prog_cxx_cxx98 ac_prog_cxx_stdcxx=cxx98 fi fi ac_ext=cpp ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu depcc="$CXX" am_compiler_list= { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5 printf %s "checking dependency style of $depcc... " >&6; } if test ${am_cv_CXX_dependencies_compiler_type+y} then : printf %s "(cached) " >&6 else $as_nop if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then # We make a subdir and do the tests there. Otherwise we can end up # making bogus files that we don't know about and never remove. For # instance it was reported that on HP-UX the gcc test will end up # making a dummy file named 'D' -- because '-MD' means "put the output # in D". rm -rf conftest.dir mkdir conftest.dir # Copy depcomp to subdir because otherwise we won't find it if we're # using a relative directory. cp "$am_depcomp" conftest.dir cd conftest.dir # We will build objects and dependencies in a subdirectory because # it helps to detect inapplicable dependency modes. For instance # both Tru64's cc and ICC support -MD to output dependencies as a # side effect of compilation, but ICC will put the dependencies in # the current directory while Tru64 will put them in the object # directory. mkdir sub am_cv_CXX_dependencies_compiler_type=none if test "$am_compiler_list" = ""; then am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp` fi am__universal=false case " $depcc " in #( *\ -arch\ *\ -arch\ *) am__universal=true ;; esac for depmode in $am_compiler_list; do # Setup a source with many dependencies, because some compilers # like to wrap large dependency lists on column 80 (with \), and # we should not choose a depcomp mode which is confused by this. # # We need to recreate these files for each test, as the compiler may # overwrite some of them when testing with obscure command lines. # This happens at least with the AIX C compiler. : > sub/conftest.c for i in 1 2 3 4 5 6; do echo '#include "conftst'$i'.h"' >> sub/conftest.c # Using ": > sub/conftst$i.h" creates only sub/conftst1.h with # Solaris 10 /bin/sh. echo '/* dummy */' > sub/conftst$i.h done echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf # We check with '-c' and '-o' for the sake of the "dashmstdout" # mode. It turns out that the SunPro C++ compiler does not properly # handle '-M -o', and we need to detect this. Also, some Intel # versions had trouble with output in subdirs. am__obj=sub/conftest.${OBJEXT-o} am__minus_obj="-o $am__obj" case $depmode in gcc) # This depmode causes a compiler race in universal mode. test "$am__universal" = false || continue ;; nosideeffect) # After this tag, mechanisms are not by side-effect, so they'll # only be used when explicitly requested. if test "x$enable_dependency_tracking" = xyes; then continue else break fi ;; msvc7 | msvc7msys | msvisualcpp | msvcmsys) # This compiler won't grok '-c -o', but also, the minuso test has # not run yet. These depmodes are late enough in the game, and # so weak that their functioning should not be impacted. am__obj=conftest.${OBJEXT-o} am__minus_obj= ;; none) break ;; esac if depmode=$depmode \ source=sub/conftest.c object=$am__obj \ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ >/dev/null 2>conftest.err && grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && grep $am__obj sub/conftest.Po > /dev/null 2>&1 && ${MAKE-make} -s -f confmf > /dev/null 2>&1; then # icc doesn't choke on unknown options, it will just issue warnings # or remarks (even with -Werror). So we grep stderr for any message # that says an option was ignored or not supported. # When given -MP, icc 7.0 and 7.1 complain thusly: # icc: Command line warning: ignoring option '-M'; no argument required # The diagnosis changed in icc 8.0: # icc: Command line remark: option '-MP' not supported if (grep 'ignoring option' conftest.err || grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else am_cv_CXX_dependencies_compiler_type=$depmode break fi fi done cd .. rm -rf conftest.dir else am_cv_CXX_dependencies_compiler_type=none fi fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $am_cv_CXX_dependencies_compiler_type" >&5 printf "%s\n" "$am_cv_CXX_dependencies_compiler_type" >&6; } CXXDEPMODE=depmode=$am_cv_CXX_dependencies_compiler_type if test "x$enable_dependency_tracking" != xno \ && test "$am_cv_CXX_dependencies_compiler_type" = gcc3; then am__fastdepCXX_TRUE= am__fastdepCXX_FALSE='#' else am__fastdepCXX_TRUE='#' am__fastdepCXX_FALSE= fi # Check whether --with-gnu-ld was given. if test ${with_gnu_ld+y} then : withval=$with_gnu_ld; test "$withval" = no || with_gnu_ld=yes else $as_nop with_gnu_ld=no fi # Prepare PATH_SEPARATOR. # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then # Determine PATH_SEPARATOR by trying to find /bin/sh in a PATH which # contains only /bin. Note that ksh looks also at the FPATH variable, # so we have to set that as well for the test. PATH_SEPARATOR=: (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 \ && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 \ || PATH_SEPARATOR=';' } fi if test -n "$LD"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for ld" >&5 printf %s "checking for ld... " >&6; } elif test "$GCC" = yes; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for ld used by $CC" >&5 printf %s "checking for ld used by $CC... " >&6; } elif test "$with_gnu_ld" = yes; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for GNU ld" >&5 printf %s "checking for GNU ld... " >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for non-GNU ld" >&5 printf %s "checking for non-GNU ld... " >&6; } fi if test -n "$LD"; then # Let the user override the test with a path. : else if test ${acl_cv_path_LD+y} then : printf %s "(cached) " >&6 else $as_nop acl_cv_path_LD= # Final result of this test ac_prog=ld # Program to search in $PATH if test "$GCC" = yes; then # Check if gcc -print-prog-name=ld gives a path. case $host in *-*-mingw*) # gcc leaves a trailing carriage return which upsets mingw acl_output=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; *) acl_output=`($CC -print-prog-name=ld) 2>&5` ;; esac case $acl_output in # Accept absolute paths. [\\/]* | ?:[\\/]*) re_direlt='/[^/][^/]*/\.\./' # Canonicalize the pathname of ld acl_output=`echo "$acl_output" | sed 's%\\\\%/%g'` while echo "$acl_output" | grep "$re_direlt" > /dev/null 2>&1; do acl_output=`echo $acl_output | sed "s%$re_direlt%/%"` done # Got the pathname. No search in PATH is needed. acl_cv_path_LD="$acl_output" ac_prog= ;; "") # If it fails, then pretend we aren't using GCC. ;; *) # If it is relative, then search for the first ld in PATH. with_gnu_ld=unknown ;; esac fi if test -n "$ac_prog"; then # Search for $ac_prog in $PATH. acl_save_ifs="$IFS"; IFS=$PATH_SEPARATOR for ac_dir in $PATH; do IFS="$acl_save_ifs" test -z "$ac_dir" && ac_dir=. if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then acl_cv_path_LD="$ac_dir/$ac_prog" # Check to see if the program is GNU ld. I'd rather use --version, # but apparently some variants of GNU ld only accept -v. # Break only if it was the GNU/non-GNU ld that we prefer. case `"$acl_cv_path_LD" -v 2>&1 conftest.$ac_ext /* end confdefs.h. */ #if defined __powerpc64__ || defined _ARCH_PPC64 int ok; #else error fail #endif _ACEOF if ac_fn_cxx_try_compile "$LINENO" then : # The compiler produces 64-bit code. Add option '-b64' so that the # linker groks 64-bit object files. case "$acl_cv_path_LD " in *" -b64 "*) ;; *) acl_cv_path_LD="$acl_cv_path_LD -b64" ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;; sparc64-*-netbsd*) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #if defined __sparcv9 || defined __arch64__ int ok; #else error fail #endif _ACEOF if ac_fn_cxx_try_compile "$LINENO" then : else $as_nop # The compiler produces 32-bit code. Add option '-m elf32_sparc' # so that the linker groks 32-bit object files. case "$acl_cv_path_LD " in *" -m elf32_sparc "*) ;; *) acl_cv_path_LD="$acl_cv_path_LD -m elf32_sparc" ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;; esac fi LD="$acl_cv_path_LD" fi if test -n "$LD"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $LD" >&5 printf "%s\n" "$LD" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } as_fn_error $? "no acceptable ld found in \$PATH" "$LINENO" 5 fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if the linker ($LD) is GNU ld" >&5 printf %s "checking if the linker ($LD) is GNU ld... " >&6; } if test ${acl_cv_prog_gnu_ld+y} then : printf %s "(cached) " >&6 else $as_nop # I'd rather use --version here, but apparently some GNU lds only accept -v. case `$LD -v 2>&1 &5 printf "%s\n" "$acl_cv_prog_gnu_ld" >&6; } with_gnu_ld=$acl_cv_prog_gnu_ld { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for shared library run path origin" >&5 printf %s "checking for shared library run path origin... " >&6; } if test ${acl_cv_rpath+y} then : printf %s "(cached) " >&6 else $as_nop CC="$CC" GCC="$GCC" LDFLAGS="$LDFLAGS" LD="$LD" with_gnu_ld="$with_gnu_ld" \ ${CONFIG_SHELL-/bin/sh} "$ac_aux_dir/config.rpath" "$host" > conftest.sh . ./conftest.sh rm -f ./conftest.sh acl_cv_rpath=done fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $acl_cv_rpath" >&5 printf "%s\n" "$acl_cv_rpath" >&6; } wl="$acl_cv_wl" acl_libext="$acl_cv_libext" acl_shlibext="$acl_cv_shlibext" acl_libname_spec="$acl_cv_libname_spec" acl_library_names_spec="$acl_cv_library_names_spec" acl_hardcode_libdir_flag_spec="$acl_cv_hardcode_libdir_flag_spec" acl_hardcode_libdir_separator="$acl_cv_hardcode_libdir_separator" acl_hardcode_direct="$acl_cv_hardcode_direct" acl_hardcode_minus_L="$acl_cv_hardcode_minus_L" # Check whether --enable-rpath was given. if test ${enable_rpath+y} then : enableval=$enable_rpath; : else $as_nop enable_rpath=yes fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking 32-bit host C ABI" >&5 printf %s "checking 32-bit host C ABI... " >&6; } if test ${gl_cv_host_cpu_c_abi_32bit+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$gl_cv_host_cpu_c_abi"; then case "$gl_cv_host_cpu_c_abi" in i386 | x86_64-x32 | arm | armhf | arm64-ilp32 | hppa | ia64-ilp32 | mips | mipsn32 | powerpc | riscv*-ilp32* | s390 | sparc) gl_cv_host_cpu_c_abi_32bit=yes ;; x86_64 | alpha | arm64 | hppa64 | ia64 | mips64 | powerpc64 | powerpc64-elfv2 | riscv*-lp64* | s390x | sparc64 ) gl_cv_host_cpu_c_abi_32bit=no ;; *) gl_cv_host_cpu_c_abi_32bit=unknown ;; esac else case "$host_cpu" in # CPUs that only support a 32-bit ABI. arc \ | bfin \ | cris* \ | csky \ | epiphany \ | ft32 \ | h8300 \ | m68k \ | microblaze | microblazeel \ | nds32 | nds32le | nds32be \ | nios2 | nios2eb | nios2el \ | or1k* \ | or32 \ | sh | sh1234 | sh1234elb \ | tic6x \ | xtensa* ) gl_cv_host_cpu_c_abi_32bit=yes ;; # CPUs that only support a 64-bit ABI. alpha | alphaev[4-8] | alphaev56 | alphapca5[67] | alphaev6[78] \ | mmix ) gl_cv_host_cpu_c_abi_32bit=no ;; i[34567]86 ) gl_cv_host_cpu_c_abi_32bit=yes ;; x86_64 ) # On x86_64 systems, the C compiler may be generating code in one of # these ABIs: # - 64-bit instruction set, 64-bit pointers, 64-bit 'long': x86_64. # - 64-bit instruction set, 64-bit pointers, 32-bit 'long': x86_64 # with native Windows (mingw, MSVC). # - 64-bit instruction set, 32-bit pointers, 32-bit 'long': x86_64-x32. # - 32-bit instruction set, 32-bit pointers, 32-bit 'long': i386. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #if (defined __x86_64__ || defined __amd64__ \ || defined _M_X64 || defined _M_AMD64) \ && !(defined __ILP32__ || defined _ILP32) int ok; #else error fail #endif _ACEOF if ac_fn_cxx_try_compile "$LINENO" then : gl_cv_host_cpu_c_abi_32bit=no else $as_nop gl_cv_host_cpu_c_abi_32bit=yes fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;; arm* | aarch64 ) # Assume arm with EABI. # On arm64 systems, the C compiler may be generating code in one of # these ABIs: # - aarch64 instruction set, 64-bit pointers, 64-bit 'long': arm64. # - aarch64 instruction set, 32-bit pointers, 32-bit 'long': arm64-ilp32. # - 32-bit instruction set, 32-bit pointers, 32-bit 'long': arm or armhf. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #if defined __aarch64__ && !(defined __ILP32__ || defined _ILP32) int ok; #else error fail #endif _ACEOF if ac_fn_cxx_try_compile "$LINENO" then : gl_cv_host_cpu_c_abi_32bit=no else $as_nop gl_cv_host_cpu_c_abi_32bit=yes fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;; hppa1.0 | hppa1.1 | hppa2.0* | hppa64 ) # On hppa, the C compiler may be generating 32-bit code or 64-bit # code. In the latter case, it defines _LP64 and __LP64__. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __LP64__ int ok; #else error fail #endif _ACEOF if ac_fn_cxx_try_compile "$LINENO" then : gl_cv_host_cpu_c_abi_32bit=no else $as_nop gl_cv_host_cpu_c_abi_32bit=yes fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;; ia64* ) # On ia64 on HP-UX, the C compiler may be generating 64-bit code or # 32-bit code. In the latter case, it defines _ILP32. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef _ILP32 int ok; #else error fail #endif _ACEOF if ac_fn_cxx_try_compile "$LINENO" then : gl_cv_host_cpu_c_abi_32bit=yes else $as_nop gl_cv_host_cpu_c_abi_32bit=no fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;; mips* ) # We should also check for (_MIPS_SZPTR == 64), but gcc keeps this # at 32. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #if defined _MIPS_SZLONG && (_MIPS_SZLONG == 64) int ok; #else error fail #endif _ACEOF if ac_fn_cxx_try_compile "$LINENO" then : gl_cv_host_cpu_c_abi_32bit=no else $as_nop gl_cv_host_cpu_c_abi_32bit=yes fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;; powerpc* ) # Different ABIs are in use on AIX vs. Mac OS X vs. Linux,*BSD. # No need to distinguish them here; the caller may distinguish # them based on the OS. # On powerpc64 systems, the C compiler may still be generating # 32-bit code. And on powerpc-ibm-aix systems, the C compiler may # be generating 64-bit code. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #if defined __powerpc64__ || defined _ARCH_PPC64 int ok; #else error fail #endif _ACEOF if ac_fn_cxx_try_compile "$LINENO" then : gl_cv_host_cpu_c_abi_32bit=no else $as_nop gl_cv_host_cpu_c_abi_32bit=yes fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;; rs6000 ) gl_cv_host_cpu_c_abi_32bit=yes ;; riscv32 | riscv64 ) # There are 6 ABIs: ilp32, ilp32f, ilp32d, lp64, lp64f, lp64d. # Size of 'long' and 'void *': cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #if defined __LP64__ int ok; #else error fail #endif _ACEOF if ac_fn_cxx_try_compile "$LINENO" then : gl_cv_host_cpu_c_abi_32bit=no else $as_nop gl_cv_host_cpu_c_abi_32bit=yes fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;; s390* ) # On s390x, the C compiler may be generating 64-bit (= s390x) code # or 31-bit (= s390) code. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #if defined __LP64__ || defined __s390x__ int ok; #else error fail #endif _ACEOF if ac_fn_cxx_try_compile "$LINENO" then : gl_cv_host_cpu_c_abi_32bit=no else $as_nop gl_cv_host_cpu_c_abi_32bit=yes fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;; sparc | sparc64 ) # UltraSPARCs running Linux have `uname -m` = "sparc64", but the # C compiler still generates 32-bit code. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #if defined __sparcv9 || defined __arch64__ int ok; #else error fail #endif _ACEOF if ac_fn_cxx_try_compile "$LINENO" then : gl_cv_host_cpu_c_abi_32bit=no else $as_nop gl_cv_host_cpu_c_abi_32bit=yes fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;; *) gl_cv_host_cpu_c_abi_32bit=unknown ;; esac fi fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_host_cpu_c_abi_32bit" >&5 printf "%s\n" "$gl_cv_host_cpu_c_abi_32bit" >&6; } HOST_CPU_C_ABI_32BIT="$gl_cv_host_cpu_c_abi_32bit" ac_ext=cpp ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking how to run the C++ preprocessor" >&5 printf %s "checking how to run the C++ preprocessor... " >&6; } if test -z "$CXXCPP"; then if test ${ac_cv_prog_CXXCPP+y} then : printf %s "(cached) " >&6 else $as_nop # Double quotes because $CXX needs to be expanded for CXXCPP in "$CXX -E" cpp /lib/cpp do ac_preproc_ok=false for ac_cxx_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include Syntax error _ACEOF if ac_fn_cxx_try_cpp "$LINENO" then : else $as_nop # Broken: fails on valid input. continue fi rm -f conftest.err conftest.i conftest.$ac_ext # OK, works on sane cases. Now check whether nonexistent headers # can be detected and how. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if ac_fn_cxx_try_cpp "$LINENO" then : # Broken: success on invalid input. continue else $as_nop # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.i conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.i conftest.err conftest.$ac_ext if $ac_preproc_ok then : break fi done ac_cv_prog_CXXCPP=$CXXCPP fi CXXCPP=$ac_cv_prog_CXXCPP else ac_cv_prog_CXXCPP=$CXXCPP fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CXXCPP" >&5 printf "%s\n" "$CXXCPP" >&6; } ac_preproc_ok=false for ac_cxx_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include Syntax error _ACEOF if ac_fn_cxx_try_cpp "$LINENO" then : else $as_nop # Broken: fails on valid input. continue fi rm -f conftest.err conftest.i conftest.$ac_ext # OK, works on sane cases. Now check whether nonexistent headers # can be detected and how. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if ac_fn_cxx_try_cpp "$LINENO" then : # Broken: success on invalid input. continue else $as_nop # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.i conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.i conftest.err conftest.$ac_ext if $ac_preproc_ok then : else $as_nop { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "C++ preprocessor \"$CXXCPP\" fails sanity check See \`config.log' for more details" "$LINENO" 5; } fi ac_ext=cpp ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for grep that handles long lines and -e" >&5 printf %s "checking for grep that handles long lines and -e... " >&6; } if test ${ac_cv_path_GREP+y} then : printf %s "(cached) " >&6 else $as_nop if test -z "$GREP"; then ac_path_GREP_found=false # Loop through the user's path and test for each of PROGNAME-LIST as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_prog in grep ggrep do for ac_exec_ext in '' $ac_executable_extensions; do ac_path_GREP="$as_dir$ac_prog$ac_exec_ext" as_fn_executable_p "$ac_path_GREP" || continue # Check for GNU ac_path_GREP and select it if it is found. # Check for GNU $ac_path_GREP case `"$ac_path_GREP" --version 2>&1` in *GNU*) ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_found=:;; *) ac_count=0 printf %s 0123456789 >"conftest.in" while : do cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" printf "%s\n" 'GREP' >> "conftest.nl" "$ac_path_GREP" -e 'GREP$' -e '-(cannot match)-' < "conftest.nl" >"conftest.out" 2>/dev/null || break diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break as_fn_arith $ac_count + 1 && ac_count=$as_val if test $ac_count -gt ${ac_path_GREP_max-0}; then # Best one so far, save it but keep looking for a better one ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_max=$ac_count fi # 10*(2^10) chars as input seems more than enough test $ac_count -gt 10 && break done rm -f conftest.in conftest.tmp conftest.nl conftest.out;; esac $ac_path_GREP_found && break 3 done done done IFS=$as_save_IFS if test -z "$ac_cv_path_GREP"; then as_fn_error $? "no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 fi else ac_cv_path_GREP=$GREP fi fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_GREP" >&5 printf "%s\n" "$ac_cv_path_GREP" >&6; } GREP="$ac_cv_path_GREP" { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for egrep" >&5 printf %s "checking for egrep... " >&6; } if test ${ac_cv_path_EGREP+y} then : printf %s "(cached) " >&6 else $as_nop if echo a | $GREP -E '(a|b)' >/dev/null 2>&1 then ac_cv_path_EGREP="$GREP -E" else if test -z "$EGREP"; then ac_path_EGREP_found=false # Loop through the user's path and test for each of PROGNAME-LIST as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_prog in egrep do for ac_exec_ext in '' $ac_executable_extensions; do ac_path_EGREP="$as_dir$ac_prog$ac_exec_ext" as_fn_executable_p "$ac_path_EGREP" || continue # Check for GNU ac_path_EGREP and select it if it is found. # Check for GNU $ac_path_EGREP case `"$ac_path_EGREP" --version 2>&1` in *GNU*) ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_found=:;; *) ac_count=0 printf %s 0123456789 >"conftest.in" while : do cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" printf "%s\n" 'EGREP' >> "conftest.nl" "$ac_path_EGREP" 'EGREP$' < "conftest.nl" >"conftest.out" 2>/dev/null || break diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break as_fn_arith $ac_count + 1 && ac_count=$as_val if test $ac_count -gt ${ac_path_EGREP_max-0}; then # Best one so far, save it but keep looking for a better one ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_max=$ac_count fi # 10*(2^10) chars as input seems more than enough test $ac_count -gt 10 && break done rm -f conftest.in conftest.tmp conftest.nl conftest.out;; esac $ac_path_EGREP_found && break 3 done done done IFS=$as_save_IFS if test -z "$ac_cv_path_EGREP"; then as_fn_error $? "no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 fi else ac_cv_path_EGREP=$EGREP fi fi fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_EGREP" >&5 printf "%s\n" "$ac_cv_path_EGREP" >&6; } EGREP="$ac_cv_path_EGREP" { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for ELF binary format" >&5 printf %s "checking for ELF binary format... " >&6; } if test ${gl_cv_elf+y} then : printf %s "(cached) " >&6 else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __ELF__ Extensible Linking Format #endif _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "Extensible Linking Format" >/dev/null 2>&1 then : gl_cv_elf=yes else $as_nop gl_cv_elf=no fi rm -rf conftest* fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_elf" >&5 printf "%s\n" "$gl_cv_elf" >&6; } if test $gl_cv_elf; then # Extract the ELF class of a file (5th byte) in decimal. # Cf. https://en.wikipedia.org/wiki/Executable_and_Linkable_Format#File_header if od -A x < /dev/null >/dev/null 2>/dev/null; then # Use POSIX od. func_elfclass () { od -A n -t d1 -j 4 -N 1 } else # Use BSD hexdump. func_elfclass () { dd bs=1 count=1 skip=4 2>/dev/null | hexdump -e '1/1 "%3d "' echo } fi case $HOST_CPU_C_ABI_32BIT in yes) # 32-bit ABI. acl_is_expected_elfclass () { test "`func_elfclass | sed -e 's/[ ]//g'`" = 1 } ;; no) # 64-bit ABI. acl_is_expected_elfclass () { test "`func_elfclass | sed -e 's/[ ]//g'`" = 2 } ;; *) # Unknown. acl_is_expected_elfclass () { : } ;; esac else acl_is_expected_elfclass () { : } fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for the common suffixes of directories in the library search path" >&5 printf %s "checking for the common suffixes of directories in the library search path... " >&6; } if test ${acl_cv_libdirstems+y} then : printf %s "(cached) " >&6 else $as_nop acl_libdirstem=lib acl_libdirstem2= acl_libdirstem3= case "$host_os" in solaris*) if test $HOST_CPU_C_ABI_32BIT = no; then acl_libdirstem2=lib/64 case "$host_cpu" in sparc*) acl_libdirstem3=lib/sparcv9 ;; i*86 | x86_64) acl_libdirstem3=lib/amd64 ;; esac fi ;; *) searchpath=`(LC_ALL=C $CC $CPPFLAGS $CFLAGS -print-search-dirs) 2>/dev/null \ | sed -n -e 's,^libraries: ,,p' | sed -e 's,^=,,'` if test $HOST_CPU_C_ABI_32BIT != no; then # 32-bit or unknown ABI. if test -d /usr/lib32; then acl_libdirstem2=lib32 fi fi if test $HOST_CPU_C_ABI_32BIT != yes; then # 64-bit or unknown ABI. if test -d /usr/lib64; then acl_libdirstem3=lib64 fi fi if test -n "$searchpath"; then acl_save_IFS="${IFS= }"; IFS=":" for searchdir in $searchpath; do if test -d "$searchdir"; then case "$searchdir" in */lib32/ | */lib32 ) acl_libdirstem2=lib32 ;; */lib64/ | */lib64 ) acl_libdirstem3=lib64 ;; */../ | */.. ) # Better ignore directories of this form. They are misleading. ;; *) searchdir=`cd "$searchdir" && pwd` case "$searchdir" in */lib32 ) acl_libdirstem2=lib32 ;; */lib64 ) acl_libdirstem3=lib64 ;; esac ;; esac fi done IFS="$acl_save_IFS" if test $HOST_CPU_C_ABI_32BIT = yes; then # 32-bit ABI. acl_libdirstem3= fi if test $HOST_CPU_C_ABI_32BIT = no; then # 64-bit ABI. acl_libdirstem2= fi fi ;; esac test -n "$acl_libdirstem2" || acl_libdirstem2="$acl_libdirstem" test -n "$acl_libdirstem3" || acl_libdirstem3="$acl_libdirstem" acl_cv_libdirstems="$acl_libdirstem,$acl_libdirstem2,$acl_libdirstem3" fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $acl_cv_libdirstems" >&5 printf "%s\n" "$acl_cv_libdirstems" >&6; } acl_libdirstem=`echo "$acl_cv_libdirstems" | sed -e 's/,.*//'` acl_libdirstem2=`echo "$acl_cv_libdirstems" | sed -e 's/^[^,]*,//' -e 's/,.*//'` acl_libdirstem3=`echo "$acl_cv_libdirstems" | sed -e 's/^[^,]*,[^,]*,//' -e 's/,.*//'` use_additional=yes acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval additional_includedir=\"$includedir\" eval additional_libdir=\"$libdir\" eval additional_libdir2=\"$exec_prefix/$acl_libdirstem2\" eval additional_libdir3=\"$exec_prefix/$acl_libdirstem3\" exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" # Check whether --with-libiconv-prefix was given. if test ${with_libiconv_prefix+y} then : withval=$with_libiconv_prefix; if test "X$withval" = "Xno"; then use_additional=no else if test "X$withval" = "X"; then acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval additional_includedir=\"$includedir\" eval additional_libdir=\"$libdir\" eval additional_libdir2=\"$exec_prefix/$acl_libdirstem2\" eval additional_libdir3=\"$exec_prefix/$acl_libdirstem3\" exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" else additional_includedir="$withval/include" additional_libdir="$withval/$acl_libdirstem" additional_libdir2="$withval/$acl_libdirstem2" additional_libdir3="$withval/$acl_libdirstem3" fi fi fi if test "X$additional_libdir2" = "X$additional_libdir"; then additional_libdir2= fi if test "X$additional_libdir3" = "X$additional_libdir"; then additional_libdir3= fi LIBICONV= LTLIBICONV= INCICONV= LIBICONV_PREFIX= HAVE_LIBICONV= rpathdirs= ltrpathdirs= names_already_handled= names_next_round='iconv ' while test -n "$names_next_round"; do names_this_round="$names_next_round" names_next_round= for name in $names_this_round; do already_handled= for n in $names_already_handled; do if test "$n" = "$name"; then already_handled=yes break fi done if test -z "$already_handled"; then names_already_handled="$names_already_handled $name" uppername=`echo "$name" | sed -e 'y|abcdefghijklmnopqrstuvwxyz./+-|ABCDEFGHIJKLMNOPQRSTUVWXYZ____|'` eval value=\"\$HAVE_LIB$uppername\" if test -n "$value"; then if test "$value" = yes; then eval value=\"\$LIB$uppername\" test -z "$value" || LIBICONV="${LIBICONV}${LIBICONV:+ }$value" eval value=\"\$LTLIB$uppername\" test -z "$value" || LTLIBICONV="${LTLIBICONV}${LTLIBICONV:+ }$value" else : fi else found_dir= found_la= found_so= found_a= eval libname=\"$acl_libname_spec\" # typically: libname=lib$name if test -n "$acl_shlibext"; then shrext=".$acl_shlibext" # typically: shrext=.so else shrext= fi if test $use_additional = yes; then for additional_libdir_variable in additional_libdir additional_libdir2 additional_libdir3; do if test "X$found_dir" = "X"; then eval dir=\$$additional_libdir_variable if test -n "$dir"; then if test -n "$acl_shlibext"; then if test -f "$dir/$libname$shrext" && acl_is_expected_elfclass < "$dir/$libname$shrext"; then found_dir="$dir" found_so="$dir/$libname$shrext" else if test "$acl_library_names_spec" = '$libname$shrext$versuffix'; then ver=`(cd "$dir" && \ for f in "$libname$shrext".*; do echo "$f"; done \ | sed -e "s,^$libname$shrext\\\\.,," \ | sort -t '.' -n -r -k1,1 -k2,2 -k3,3 -k4,4 -k5,5 \ | sed 1q ) 2>/dev/null` if test -n "$ver" && test -f "$dir/$libname$shrext.$ver" && acl_is_expected_elfclass < "$dir/$libname$shrext.$ver"; then found_dir="$dir" found_so="$dir/$libname$shrext.$ver" fi else eval library_names=\"$acl_library_names_spec\" for f in $library_names; do if test -f "$dir/$f" && acl_is_expected_elfclass < "$dir/$f"; then found_dir="$dir" found_so="$dir/$f" break fi done fi fi fi if test "X$found_dir" = "X"; then if test -f "$dir/$libname.$acl_libext" && ${AR-ar} -p "$dir/$libname.$acl_libext" | acl_is_expected_elfclass; then found_dir="$dir" found_a="$dir/$libname.$acl_libext" fi fi if test "X$found_dir" != "X"; then if test -f "$dir/$libname.la"; then found_la="$dir/$libname.la" fi fi fi fi done fi if test "X$found_dir" = "X"; then for x in $LDFLAGS $LTLIBICONV; do acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval x=\"$x\" exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" case "$x" in -L*) dir=`echo "X$x" | sed -e 's/^X-L//'` if test -n "$acl_shlibext"; then if test -f "$dir/$libname$shrext" && acl_is_expected_elfclass < "$dir/$libname$shrext"; then found_dir="$dir" found_so="$dir/$libname$shrext" else if test "$acl_library_names_spec" = '$libname$shrext$versuffix'; then ver=`(cd "$dir" && \ for f in "$libname$shrext".*; do echo "$f"; done \ | sed -e "s,^$libname$shrext\\\\.,," \ | sort -t '.' -n -r -k1,1 -k2,2 -k3,3 -k4,4 -k5,5 \ | sed 1q ) 2>/dev/null` if test -n "$ver" && test -f "$dir/$libname$shrext.$ver" && acl_is_expected_elfclass < "$dir/$libname$shrext.$ver"; then found_dir="$dir" found_so="$dir/$libname$shrext.$ver" fi else eval library_names=\"$acl_library_names_spec\" for f in $library_names; do if test -f "$dir/$f" && acl_is_expected_elfclass < "$dir/$f"; then found_dir="$dir" found_so="$dir/$f" break fi done fi fi fi if test "X$found_dir" = "X"; then if test -f "$dir/$libname.$acl_libext" && ${AR-ar} -p "$dir/$libname.$acl_libext" | acl_is_expected_elfclass; then found_dir="$dir" found_a="$dir/$libname.$acl_libext" fi fi if test "X$found_dir" != "X"; then if test -f "$dir/$libname.la"; then found_la="$dir/$libname.la" fi fi ;; esac if test "X$found_dir" != "X"; then break fi done fi if test "X$found_dir" != "X"; then LTLIBICONV="${LTLIBICONV}${LTLIBICONV:+ }-L$found_dir -l$name" if test "X$found_so" != "X"; then if test "$enable_rpath" = no \ || test "X$found_dir" = "X/usr/$acl_libdirstem" \ || test "X$found_dir" = "X/usr/$acl_libdirstem2" \ || test "X$found_dir" = "X/usr/$acl_libdirstem3"; then LIBICONV="${LIBICONV}${LIBICONV:+ }$found_so" else haveit= for x in $ltrpathdirs; do if test "X$x" = "X$found_dir"; then haveit=yes break fi done if test -z "$haveit"; then ltrpathdirs="$ltrpathdirs $found_dir" fi if test "$acl_hardcode_direct" = yes; then LIBICONV="${LIBICONV}${LIBICONV:+ }$found_so" else if test -n "$acl_hardcode_libdir_flag_spec" && test "$acl_hardcode_minus_L" = no; then LIBICONV="${LIBICONV}${LIBICONV:+ }$found_so" haveit= for x in $rpathdirs; do if test "X$x" = "X$found_dir"; then haveit=yes break fi done if test -z "$haveit"; then rpathdirs="$rpathdirs $found_dir" fi else haveit= for x in $LDFLAGS $LIBICONV; do acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval x=\"$x\" exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" if test "X$x" = "X-L$found_dir"; then haveit=yes break fi done if test -z "$haveit"; then LIBICONV="${LIBICONV}${LIBICONV:+ }-L$found_dir" fi if test "$acl_hardcode_minus_L" != no; then LIBICONV="${LIBICONV}${LIBICONV:+ }$found_so" else LIBICONV="${LIBICONV}${LIBICONV:+ }-l$name" fi fi fi fi else if test "X$found_a" != "X"; then LIBICONV="${LIBICONV}${LIBICONV:+ }$found_a" else LIBICONV="${LIBICONV}${LIBICONV:+ }-L$found_dir -l$name" fi fi additional_includedir= case "$found_dir" in */$acl_libdirstem | */$acl_libdirstem/) basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e "s,/$acl_libdirstem/"'*$,,'` if test "$name" = 'iconv'; then LIBICONV_PREFIX="$basedir" fi additional_includedir="$basedir/include" ;; */$acl_libdirstem2 | */$acl_libdirstem2/) basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e "s,/$acl_libdirstem2/"'*$,,'` if test "$name" = 'iconv'; then LIBICONV_PREFIX="$basedir" fi additional_includedir="$basedir/include" ;; */$acl_libdirstem3 | */$acl_libdirstem3/) basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e "s,/$acl_libdirstem3/"'*$,,'` if test "$name" = 'iconv'; then LIBICONV_PREFIX="$basedir" fi additional_includedir="$basedir/include" ;; esac if test "X$additional_includedir" != "X"; then if test "X$additional_includedir" != "X/usr/include"; then haveit= if test "X$additional_includedir" = "X/usr/local/include"; then if test -n "$GCC"; then case $host_os in linux* | gnu* | k*bsd*-gnu) haveit=yes;; esac fi fi if test -z "$haveit"; then for x in $CPPFLAGS $INCICONV; do acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval x=\"$x\" exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" if test "X$x" = "X-I$additional_includedir"; then haveit=yes break fi done if test -z "$haveit"; then if test -d "$additional_includedir"; then INCICONV="${INCICONV}${INCICONV:+ }-I$additional_includedir" fi fi fi fi fi if test -n "$found_la"; then save_libdir="$libdir" case "$found_la" in */* | *\\*) . "$found_la" ;; *) . "./$found_la" ;; esac libdir="$save_libdir" for dep in $dependency_libs; do case "$dep" in -L*) dependency_libdir=`echo "X$dep" | sed -e 's/^X-L//'` if test "X$dependency_libdir" != "X/usr/$acl_libdirstem" \ && test "X$dependency_libdir" != "X/usr/$acl_libdirstem2" \ && test "X$dependency_libdir" != "X/usr/$acl_libdirstem3"; then haveit= if test "X$dependency_libdir" = "X/usr/local/$acl_libdirstem" \ || test "X$dependency_libdir" = "X/usr/local/$acl_libdirstem2" \ || test "X$dependency_libdir" = "X/usr/local/$acl_libdirstem3"; then if test -n "$GCC"; then case $host_os in linux* | gnu* | k*bsd*-gnu) haveit=yes;; esac fi fi if test -z "$haveit"; then haveit= for x in $LDFLAGS $LIBICONV; do acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval x=\"$x\" exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" if test "X$x" = "X-L$dependency_libdir"; then haveit=yes break fi done if test -z "$haveit"; then if test -d "$dependency_libdir"; then LIBICONV="${LIBICONV}${LIBICONV:+ }-L$dependency_libdir" fi fi haveit= for x in $LDFLAGS $LTLIBICONV; do acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval x=\"$x\" exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" if test "X$x" = "X-L$dependency_libdir"; then haveit=yes break fi done if test -z "$haveit"; then if test -d "$dependency_libdir"; then LTLIBICONV="${LTLIBICONV}${LTLIBICONV:+ }-L$dependency_libdir" fi fi fi fi ;; -R*) dir=`echo "X$dep" | sed -e 's/^X-R//'` if test "$enable_rpath" != no; then haveit= for x in $rpathdirs; do if test "X$x" = "X$dir"; then haveit=yes break fi done if test -z "$haveit"; then rpathdirs="$rpathdirs $dir" fi haveit= for x in $ltrpathdirs; do if test "X$x" = "X$dir"; then haveit=yes break fi done if test -z "$haveit"; then ltrpathdirs="$ltrpathdirs $dir" fi fi ;; -l*) names_next_round="$names_next_round "`echo "X$dep" | sed -e 's/^X-l//'` ;; *.la) names_next_round="$names_next_round "`echo "X$dep" | sed -e 's,^X.*/,,' -e 's,^lib,,' -e 's,\.la$,,'` ;; *) LIBICONV="${LIBICONV}${LIBICONV:+ }$dep" LTLIBICONV="${LTLIBICONV}${LTLIBICONV:+ }$dep" ;; esac done fi else LIBICONV="${LIBICONV}${LIBICONV:+ }-l$name" LTLIBICONV="${LTLIBICONV}${LTLIBICONV:+ }-l$name" fi fi fi done done if test "X$rpathdirs" != "X"; then if test -n "$acl_hardcode_libdir_separator"; then alldirs= for found_dir in $rpathdirs; do alldirs="${alldirs}${alldirs:+$acl_hardcode_libdir_separator}$found_dir" done acl_save_libdir="$libdir" libdir="$alldirs" eval flag=\"$acl_hardcode_libdir_flag_spec\" libdir="$acl_save_libdir" LIBICONV="${LIBICONV}${LIBICONV:+ }$flag" else for found_dir in $rpathdirs; do acl_save_libdir="$libdir" libdir="$found_dir" eval flag=\"$acl_hardcode_libdir_flag_spec\" libdir="$acl_save_libdir" LIBICONV="${LIBICONV}${LIBICONV:+ }$flag" done fi fi if test "X$ltrpathdirs" != "X"; then for found_dir in $ltrpathdirs; do LTLIBICONV="${LTLIBICONV}${LTLIBICONV:+ }-R$found_dir" done fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for CFPreferencesCopyAppValue" >&5 printf %s "checking for CFPreferencesCopyAppValue... " >&6; } if test ${gt_cv_func_CFPreferencesCopyAppValue+y} then : printf %s "(cached) " >&6 else $as_nop gt_save_LIBS="$LIBS" LIBS="$LIBS -Wl,-framework -Wl,CoreFoundation" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main (void) { CFPreferencesCopyAppValue(NULL, NULL) ; return 0; } _ACEOF if ac_fn_cxx_try_link "$LINENO" then : gt_cv_func_CFPreferencesCopyAppValue=yes else $as_nop gt_cv_func_CFPreferencesCopyAppValue=no fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext LIBS="$gt_save_LIBS" fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gt_cv_func_CFPreferencesCopyAppValue" >&5 printf "%s\n" "$gt_cv_func_CFPreferencesCopyAppValue" >&6; } if test $gt_cv_func_CFPreferencesCopyAppValue = yes; then printf "%s\n" "#define HAVE_CFPREFERENCESCOPYAPPVALUE 1" >>confdefs.h fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for CFLocaleCopyPreferredLanguages" >&5 printf %s "checking for CFLocaleCopyPreferredLanguages... " >&6; } if test ${gt_cv_func_CFLocaleCopyPreferredLanguages+y} then : printf %s "(cached) " >&6 else $as_nop gt_save_LIBS="$LIBS" LIBS="$LIBS -Wl,-framework -Wl,CoreFoundation" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main (void) { CFLocaleCopyPreferredLanguages(); ; return 0; } _ACEOF if ac_fn_cxx_try_link "$LINENO" then : gt_cv_func_CFLocaleCopyPreferredLanguages=yes else $as_nop gt_cv_func_CFLocaleCopyPreferredLanguages=no fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext LIBS="$gt_save_LIBS" fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gt_cv_func_CFLocaleCopyPreferredLanguages" >&5 printf "%s\n" "$gt_cv_func_CFLocaleCopyPreferredLanguages" >&6; } if test $gt_cv_func_CFLocaleCopyPreferredLanguages = yes; then printf "%s\n" "#define HAVE_CFLOCALECOPYPREFERREDLANGUAGES 1" >>confdefs.h fi INTL_MACOSX_LIBS= if test $gt_cv_func_CFPreferencesCopyAppValue = yes \ || test $gt_cv_func_CFLocaleCopyPreferredLanguages = yes; then INTL_MACOSX_LIBS="-Wl,-framework -Wl,CoreFoundation" fi LIBINTL= LTLIBINTL= POSUB= case " $gt_needs " in *" need-formatstring-macros "*) gt_api_version=3 ;; *" need-ngettext "*) gt_api_version=2 ;; *) gt_api_version=1 ;; esac gt_func_gnugettext_libc="gt_cv_func_gnugettext${gt_api_version}_libc" gt_func_gnugettext_libintl="gt_cv_func_gnugettext${gt_api_version}_libintl" if test "$USE_NLS" = "yes"; then gt_use_preinstalled_gnugettext=no if test $gt_api_version -ge 3; then gt_revision_test_code=' #ifndef __GNU_GETTEXT_SUPPORTED_REVISION #define __GNU_GETTEXT_SUPPORTED_REVISION(major) ((major) == 0 ? 0 : -1) #endif typedef int array [2 * (__GNU_GETTEXT_SUPPORTED_REVISION(0) >= 1) - 1]; ' else gt_revision_test_code= fi if test $gt_api_version -ge 2; then gt_expression_test_code=' + * ngettext ("", "", 0)' else gt_expression_test_code= fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for GNU gettext in libc" >&5 printf %s "checking for GNU gettext in libc... " >&6; } if eval test \${$gt_func_gnugettext_libc+y} then : printf %s "(cached) " >&6 else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #ifndef __GNU_GETTEXT_SUPPORTED_REVISION extern int _nl_msg_cat_cntr; extern int *_nl_domain_bindings; #define __GNU_GETTEXT_SYMBOL_EXPRESSION (_nl_msg_cat_cntr + *_nl_domain_bindings) #else #define __GNU_GETTEXT_SYMBOL_EXPRESSION 0 #endif $gt_revision_test_code int main (void) { bindtextdomain ("", ""); return * gettext ("")$gt_expression_test_code + __GNU_GETTEXT_SYMBOL_EXPRESSION ; return 0; } _ACEOF if ac_fn_cxx_try_link "$LINENO" then : eval "$gt_func_gnugettext_libc=yes" else $as_nop eval "$gt_func_gnugettext_libc=no" fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext fi eval ac_res=\$$gt_func_gnugettext_libc { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 printf "%s\n" "$ac_res" >&6; } if { eval "gt_val=\$$gt_func_gnugettext_libc"; test "$gt_val" != "yes"; }; then am_save_CPPFLAGS="$CPPFLAGS" for element in $INCICONV; do haveit= for x in $CPPFLAGS; do acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval x=\"$x\" exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" if test "X$x" = "X$element"; then haveit=yes break fi done if test -z "$haveit"; then CPPFLAGS="${CPPFLAGS}${CPPFLAGS:+ }$element" fi done { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for iconv" >&5 printf %s "checking for iconv... " >&6; } if test ${am_cv_func_iconv+y} then : printf %s "(cached) " >&6 else $as_nop am_cv_func_iconv="no, consider installing GNU libiconv" am_cv_lib_iconv=no cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include int main (void) { iconv_t cd = iconv_open("",""); iconv(cd,NULL,NULL,NULL,NULL); iconv_close(cd); ; return 0; } _ACEOF if ac_fn_cxx_try_link "$LINENO" then : am_cv_func_iconv=yes fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext if test "$am_cv_func_iconv" != yes; then am_save_LIBS="$LIBS" LIBS="$LIBS $LIBICONV" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include int main (void) { iconv_t cd = iconv_open("",""); iconv(cd,NULL,NULL,NULL,NULL); iconv_close(cd); ; return 0; } _ACEOF if ac_fn_cxx_try_link "$LINENO" then : am_cv_lib_iconv=yes am_cv_func_iconv=yes fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext LIBS="$am_save_LIBS" fi fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $am_cv_func_iconv" >&5 printf "%s\n" "$am_cv_func_iconv" >&6; } if test "$am_cv_func_iconv" = yes; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for working iconv" >&5 printf %s "checking for working iconv... " >&6; } if test ${am_cv_func_iconv_works+y} then : printf %s "(cached) " >&6 else $as_nop am_save_LIBS="$LIBS" if test $am_cv_lib_iconv = yes; then LIBS="$LIBS $LIBICONV" fi am_cv_func_iconv_works=no for ac_iconv_const in '' 'const'; do if test "$cross_compiling" = yes then : case "$host_os" in aix* | hpux*) am_cv_func_iconv_works="guessing no" ;; *) am_cv_func_iconv_works="guessing yes" ;; esac else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #ifndef ICONV_CONST # define ICONV_CONST $ac_iconv_const #endif int main (void) { int result = 0; /* Test against AIX 5.1 bug: Failures are not distinguishable from successful returns. */ { iconv_t cd_utf8_to_88591 = iconv_open ("ISO8859-1", "UTF-8"); if (cd_utf8_to_88591 != (iconv_t)(-1)) { static ICONV_CONST char input[] = "\342\202\254"; /* EURO SIGN */ char buf[10]; ICONV_CONST char *inptr = input; size_t inbytesleft = strlen (input); char *outptr = buf; size_t outbytesleft = sizeof (buf); size_t res = iconv (cd_utf8_to_88591, &inptr, &inbytesleft, &outptr, &outbytesleft); if (res == 0) result |= 1; iconv_close (cd_utf8_to_88591); } } /* Test against Solaris 10 bug: Failures are not distinguishable from successful returns. */ { iconv_t cd_ascii_to_88591 = iconv_open ("ISO8859-1", "646"); if (cd_ascii_to_88591 != (iconv_t)(-1)) { static ICONV_CONST char input[] = "\263"; char buf[10]; ICONV_CONST char *inptr = input; size_t inbytesleft = strlen (input); char *outptr = buf; size_t outbytesleft = sizeof (buf); size_t res = iconv (cd_ascii_to_88591, &inptr, &inbytesleft, &outptr, &outbytesleft); if (res == 0) result |= 2; iconv_close (cd_ascii_to_88591); } } /* Test against AIX 6.1..7.1 bug: Buffer overrun. */ { iconv_t cd_88591_to_utf8 = iconv_open ("UTF-8", "ISO-8859-1"); if (cd_88591_to_utf8 != (iconv_t)(-1)) { static ICONV_CONST char input[] = "\304"; static char buf[2] = { (char)0xDE, (char)0xAD }; ICONV_CONST char *inptr = input; size_t inbytesleft = 1; char *outptr = buf; size_t outbytesleft = 1; size_t res = iconv (cd_88591_to_utf8, &inptr, &inbytesleft, &outptr, &outbytesleft); if (res != (size_t)(-1) || outptr - buf > 1 || buf[1] != (char)0xAD) result |= 4; iconv_close (cd_88591_to_utf8); } } #if 0 /* This bug could be worked around by the caller. */ /* Test against HP-UX 11.11 bug: Positive return value instead of 0. */ { iconv_t cd_88591_to_utf8 = iconv_open ("utf8", "iso88591"); if (cd_88591_to_utf8 != (iconv_t)(-1)) { static ICONV_CONST char input[] = "\304rger mit b\366sen B\374bchen ohne Augenma\337"; char buf[50]; ICONV_CONST char *inptr = input; size_t inbytesleft = strlen (input); char *outptr = buf; size_t outbytesleft = sizeof (buf); size_t res = iconv (cd_88591_to_utf8, &inptr, &inbytesleft, &outptr, &outbytesleft); if ((int)res > 0) result |= 8; iconv_close (cd_88591_to_utf8); } } #endif /* Test against HP-UX 11.11 bug: No converter from EUC-JP to UTF-8 is provided. */ { /* Try standardized names. */ iconv_t cd1 = iconv_open ("UTF-8", "EUC-JP"); /* Try IRIX, OSF/1 names. */ iconv_t cd2 = iconv_open ("UTF-8", "eucJP"); /* Try AIX names. */ iconv_t cd3 = iconv_open ("UTF-8", "IBM-eucJP"); /* Try HP-UX names. */ iconv_t cd4 = iconv_open ("utf8", "eucJP"); if (cd1 == (iconv_t)(-1) && cd2 == (iconv_t)(-1) && cd3 == (iconv_t)(-1) && cd4 == (iconv_t)(-1)) result |= 16; if (cd1 != (iconv_t)(-1)) iconv_close (cd1); if (cd2 != (iconv_t)(-1)) iconv_close (cd2); if (cd3 != (iconv_t)(-1)) iconv_close (cd3); if (cd4 != (iconv_t)(-1)) iconv_close (cd4); } return result; ; return 0; } _ACEOF if ac_fn_cxx_try_run "$LINENO" then : am_cv_func_iconv_works=yes fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi test "$am_cv_func_iconv_works" = no || break done LIBS="$am_save_LIBS" fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $am_cv_func_iconv_works" >&5 printf "%s\n" "$am_cv_func_iconv_works" >&6; } case "$am_cv_func_iconv_works" in *no) am_func_iconv=no am_cv_lib_iconv=no ;; *) am_func_iconv=yes ;; esac else am_func_iconv=no am_cv_lib_iconv=no fi if test "$am_func_iconv" = yes; then printf "%s\n" "#define HAVE_ICONV 1" >>confdefs.h fi if test "$am_cv_lib_iconv" = yes; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking how to link with libiconv" >&5 printf %s "checking how to link with libiconv... " >&6; } { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $LIBICONV" >&5 printf "%s\n" "$LIBICONV" >&6; } else CPPFLAGS="$am_save_CPPFLAGS" LIBICONV= LTLIBICONV= fi use_additional=yes acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval additional_includedir=\"$includedir\" eval additional_libdir=\"$libdir\" eval additional_libdir2=\"$exec_prefix/$acl_libdirstem2\" eval additional_libdir3=\"$exec_prefix/$acl_libdirstem3\" exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" # Check whether --with-libintl-prefix was given. if test ${with_libintl_prefix+y} then : withval=$with_libintl_prefix; if test "X$withval" = "Xno"; then use_additional=no else if test "X$withval" = "X"; then acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval additional_includedir=\"$includedir\" eval additional_libdir=\"$libdir\" eval additional_libdir2=\"$exec_prefix/$acl_libdirstem2\" eval additional_libdir3=\"$exec_prefix/$acl_libdirstem3\" exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" else additional_includedir="$withval/include" additional_libdir="$withval/$acl_libdirstem" additional_libdir2="$withval/$acl_libdirstem2" additional_libdir3="$withval/$acl_libdirstem3" fi fi fi if test "X$additional_libdir2" = "X$additional_libdir"; then additional_libdir2= fi if test "X$additional_libdir3" = "X$additional_libdir"; then additional_libdir3= fi LIBINTL= LTLIBINTL= INCINTL= LIBINTL_PREFIX= HAVE_LIBINTL= rpathdirs= ltrpathdirs= names_already_handled= names_next_round='intl ' while test -n "$names_next_round"; do names_this_round="$names_next_round" names_next_round= for name in $names_this_round; do already_handled= for n in $names_already_handled; do if test "$n" = "$name"; then already_handled=yes break fi done if test -z "$already_handled"; then names_already_handled="$names_already_handled $name" uppername=`echo "$name" | sed -e 'y|abcdefghijklmnopqrstuvwxyz./+-|ABCDEFGHIJKLMNOPQRSTUVWXYZ____|'` eval value=\"\$HAVE_LIB$uppername\" if test -n "$value"; then if test "$value" = yes; then eval value=\"\$LIB$uppername\" test -z "$value" || LIBINTL="${LIBINTL}${LIBINTL:+ }$value" eval value=\"\$LTLIB$uppername\" test -z "$value" || LTLIBINTL="${LTLIBINTL}${LTLIBINTL:+ }$value" else : fi else found_dir= found_la= found_so= found_a= eval libname=\"$acl_libname_spec\" # typically: libname=lib$name if test -n "$acl_shlibext"; then shrext=".$acl_shlibext" # typically: shrext=.so else shrext= fi if test $use_additional = yes; then for additional_libdir_variable in additional_libdir additional_libdir2 additional_libdir3; do if test "X$found_dir" = "X"; then eval dir=\$$additional_libdir_variable if test -n "$dir"; then if test -n "$acl_shlibext"; then if test -f "$dir/$libname$shrext" && acl_is_expected_elfclass < "$dir/$libname$shrext"; then found_dir="$dir" found_so="$dir/$libname$shrext" else if test "$acl_library_names_spec" = '$libname$shrext$versuffix'; then ver=`(cd "$dir" && \ for f in "$libname$shrext".*; do echo "$f"; done \ | sed -e "s,^$libname$shrext\\\\.,," \ | sort -t '.' -n -r -k1,1 -k2,2 -k3,3 -k4,4 -k5,5 \ | sed 1q ) 2>/dev/null` if test -n "$ver" && test -f "$dir/$libname$shrext.$ver" && acl_is_expected_elfclass < "$dir/$libname$shrext.$ver"; then found_dir="$dir" found_so="$dir/$libname$shrext.$ver" fi else eval library_names=\"$acl_library_names_spec\" for f in $library_names; do if test -f "$dir/$f" && acl_is_expected_elfclass < "$dir/$f"; then found_dir="$dir" found_so="$dir/$f" break fi done fi fi fi if test "X$found_dir" = "X"; then if test -f "$dir/$libname.$acl_libext" && ${AR-ar} -p "$dir/$libname.$acl_libext" | acl_is_expected_elfclass; then found_dir="$dir" found_a="$dir/$libname.$acl_libext" fi fi if test "X$found_dir" != "X"; then if test -f "$dir/$libname.la"; then found_la="$dir/$libname.la" fi fi fi fi done fi if test "X$found_dir" = "X"; then for x in $LDFLAGS $LTLIBINTL; do acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval x=\"$x\" exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" case "$x" in -L*) dir=`echo "X$x" | sed -e 's/^X-L//'` if test -n "$acl_shlibext"; then if test -f "$dir/$libname$shrext" && acl_is_expected_elfclass < "$dir/$libname$shrext"; then found_dir="$dir" found_so="$dir/$libname$shrext" else if test "$acl_library_names_spec" = '$libname$shrext$versuffix'; then ver=`(cd "$dir" && \ for f in "$libname$shrext".*; do echo "$f"; done \ | sed -e "s,^$libname$shrext\\\\.,," \ | sort -t '.' -n -r -k1,1 -k2,2 -k3,3 -k4,4 -k5,5 \ | sed 1q ) 2>/dev/null` if test -n "$ver" && test -f "$dir/$libname$shrext.$ver" && acl_is_expected_elfclass < "$dir/$libname$shrext.$ver"; then found_dir="$dir" found_so="$dir/$libname$shrext.$ver" fi else eval library_names=\"$acl_library_names_spec\" for f in $library_names; do if test -f "$dir/$f" && acl_is_expected_elfclass < "$dir/$f"; then found_dir="$dir" found_so="$dir/$f" break fi done fi fi fi if test "X$found_dir" = "X"; then if test -f "$dir/$libname.$acl_libext" && ${AR-ar} -p "$dir/$libname.$acl_libext" | acl_is_expected_elfclass; then found_dir="$dir" found_a="$dir/$libname.$acl_libext" fi fi if test "X$found_dir" != "X"; then if test -f "$dir/$libname.la"; then found_la="$dir/$libname.la" fi fi ;; esac if test "X$found_dir" != "X"; then break fi done fi if test "X$found_dir" != "X"; then LTLIBINTL="${LTLIBINTL}${LTLIBINTL:+ }-L$found_dir -l$name" if test "X$found_so" != "X"; then if test "$enable_rpath" = no \ || test "X$found_dir" = "X/usr/$acl_libdirstem" \ || test "X$found_dir" = "X/usr/$acl_libdirstem2" \ || test "X$found_dir" = "X/usr/$acl_libdirstem3"; then LIBINTL="${LIBINTL}${LIBINTL:+ }$found_so" else haveit= for x in $ltrpathdirs; do if test "X$x" = "X$found_dir"; then haveit=yes break fi done if test -z "$haveit"; then ltrpathdirs="$ltrpathdirs $found_dir" fi if test "$acl_hardcode_direct" = yes; then LIBINTL="${LIBINTL}${LIBINTL:+ }$found_so" else if test -n "$acl_hardcode_libdir_flag_spec" && test "$acl_hardcode_minus_L" = no; then LIBINTL="${LIBINTL}${LIBINTL:+ }$found_so" haveit= for x in $rpathdirs; do if test "X$x" = "X$found_dir"; then haveit=yes break fi done if test -z "$haveit"; then rpathdirs="$rpathdirs $found_dir" fi else haveit= for x in $LDFLAGS $LIBINTL; do acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval x=\"$x\" exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" if test "X$x" = "X-L$found_dir"; then haveit=yes break fi done if test -z "$haveit"; then LIBINTL="${LIBINTL}${LIBINTL:+ }-L$found_dir" fi if test "$acl_hardcode_minus_L" != no; then LIBINTL="${LIBINTL}${LIBINTL:+ }$found_so" else LIBINTL="${LIBINTL}${LIBINTL:+ }-l$name" fi fi fi fi else if test "X$found_a" != "X"; then LIBINTL="${LIBINTL}${LIBINTL:+ }$found_a" else LIBINTL="${LIBINTL}${LIBINTL:+ }-L$found_dir -l$name" fi fi additional_includedir= case "$found_dir" in */$acl_libdirstem | */$acl_libdirstem/) basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e "s,/$acl_libdirstem/"'*$,,'` if test "$name" = 'intl'; then LIBINTL_PREFIX="$basedir" fi additional_includedir="$basedir/include" ;; */$acl_libdirstem2 | */$acl_libdirstem2/) basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e "s,/$acl_libdirstem2/"'*$,,'` if test "$name" = 'intl'; then LIBINTL_PREFIX="$basedir" fi additional_includedir="$basedir/include" ;; */$acl_libdirstem3 | */$acl_libdirstem3/) basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e "s,/$acl_libdirstem3/"'*$,,'` if test "$name" = 'intl'; then LIBINTL_PREFIX="$basedir" fi additional_includedir="$basedir/include" ;; esac if test "X$additional_includedir" != "X"; then if test "X$additional_includedir" != "X/usr/include"; then haveit= if test "X$additional_includedir" = "X/usr/local/include"; then if test -n "$GCC"; then case $host_os in linux* | gnu* | k*bsd*-gnu) haveit=yes;; esac fi fi if test -z "$haveit"; then for x in $CPPFLAGS $INCINTL; do acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval x=\"$x\" exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" if test "X$x" = "X-I$additional_includedir"; then haveit=yes break fi done if test -z "$haveit"; then if test -d "$additional_includedir"; then INCINTL="${INCINTL}${INCINTL:+ }-I$additional_includedir" fi fi fi fi fi if test -n "$found_la"; then save_libdir="$libdir" case "$found_la" in */* | *\\*) . "$found_la" ;; *) . "./$found_la" ;; esac libdir="$save_libdir" for dep in $dependency_libs; do case "$dep" in -L*) dependency_libdir=`echo "X$dep" | sed -e 's/^X-L//'` if test "X$dependency_libdir" != "X/usr/$acl_libdirstem" \ && test "X$dependency_libdir" != "X/usr/$acl_libdirstem2" \ && test "X$dependency_libdir" != "X/usr/$acl_libdirstem3"; then haveit= if test "X$dependency_libdir" = "X/usr/local/$acl_libdirstem" \ || test "X$dependency_libdir" = "X/usr/local/$acl_libdirstem2" \ || test "X$dependency_libdir" = "X/usr/local/$acl_libdirstem3"; then if test -n "$GCC"; then case $host_os in linux* | gnu* | k*bsd*-gnu) haveit=yes;; esac fi fi if test -z "$haveit"; then haveit= for x in $LDFLAGS $LIBINTL; do acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval x=\"$x\" exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" if test "X$x" = "X-L$dependency_libdir"; then haveit=yes break fi done if test -z "$haveit"; then if test -d "$dependency_libdir"; then LIBINTL="${LIBINTL}${LIBINTL:+ }-L$dependency_libdir" fi fi haveit= for x in $LDFLAGS $LTLIBINTL; do acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval x=\"$x\" exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" if test "X$x" = "X-L$dependency_libdir"; then haveit=yes break fi done if test -z "$haveit"; then if test -d "$dependency_libdir"; then LTLIBINTL="${LTLIBINTL}${LTLIBINTL:+ }-L$dependency_libdir" fi fi fi fi ;; -R*) dir=`echo "X$dep" | sed -e 's/^X-R//'` if test "$enable_rpath" != no; then haveit= for x in $rpathdirs; do if test "X$x" = "X$dir"; then haveit=yes break fi done if test -z "$haveit"; then rpathdirs="$rpathdirs $dir" fi haveit= for x in $ltrpathdirs; do if test "X$x" = "X$dir"; then haveit=yes break fi done if test -z "$haveit"; then ltrpathdirs="$ltrpathdirs $dir" fi fi ;; -l*) names_next_round="$names_next_round "`echo "X$dep" | sed -e 's/^X-l//'` ;; *.la) names_next_round="$names_next_round "`echo "X$dep" | sed -e 's,^X.*/,,' -e 's,^lib,,' -e 's,\.la$,,'` ;; *) LIBINTL="${LIBINTL}${LIBINTL:+ }$dep" LTLIBINTL="${LTLIBINTL}${LTLIBINTL:+ }$dep" ;; esac done fi else LIBINTL="${LIBINTL}${LIBINTL:+ }-l$name" LTLIBINTL="${LTLIBINTL}${LTLIBINTL:+ }-l$name" fi fi fi done done if test "X$rpathdirs" != "X"; then if test -n "$acl_hardcode_libdir_separator"; then alldirs= for found_dir in $rpathdirs; do alldirs="${alldirs}${alldirs:+$acl_hardcode_libdir_separator}$found_dir" done acl_save_libdir="$libdir" libdir="$alldirs" eval flag=\"$acl_hardcode_libdir_flag_spec\" libdir="$acl_save_libdir" LIBINTL="${LIBINTL}${LIBINTL:+ }$flag" else for found_dir in $rpathdirs; do acl_save_libdir="$libdir" libdir="$found_dir" eval flag=\"$acl_hardcode_libdir_flag_spec\" libdir="$acl_save_libdir" LIBINTL="${LIBINTL}${LIBINTL:+ }$flag" done fi fi if test "X$ltrpathdirs" != "X"; then for found_dir in $ltrpathdirs; do LTLIBINTL="${LTLIBINTL}${LTLIBINTL:+ }-R$found_dir" done fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for GNU gettext in libintl" >&5 printf %s "checking for GNU gettext in libintl... " >&6; } if eval test \${$gt_func_gnugettext_libintl+y} then : printf %s "(cached) " >&6 else $as_nop gt_save_CPPFLAGS="$CPPFLAGS" CPPFLAGS="$CPPFLAGS $INCINTL" gt_save_LIBS="$LIBS" LIBS="$LIBS $LIBINTL" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #ifndef __GNU_GETTEXT_SUPPORTED_REVISION extern int _nl_msg_cat_cntr; extern #ifdef __cplusplus "C" #endif const char *_nl_expand_alias (const char *); #define __GNU_GETTEXT_SYMBOL_EXPRESSION (_nl_msg_cat_cntr + *_nl_expand_alias ("")) #else #define __GNU_GETTEXT_SYMBOL_EXPRESSION 0 #endif $gt_revision_test_code int main (void) { bindtextdomain ("", ""); return * gettext ("")$gt_expression_test_code + __GNU_GETTEXT_SYMBOL_EXPRESSION ; return 0; } _ACEOF if ac_fn_cxx_try_link "$LINENO" then : eval "$gt_func_gnugettext_libintl=yes" else $as_nop eval "$gt_func_gnugettext_libintl=no" fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext if { eval "gt_val=\$$gt_func_gnugettext_libintl"; test "$gt_val" != yes; } && test -n "$LIBICONV"; then LIBS="$LIBS $LIBICONV" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #ifndef __GNU_GETTEXT_SUPPORTED_REVISION extern int _nl_msg_cat_cntr; extern #ifdef __cplusplus "C" #endif const char *_nl_expand_alias (const char *); #define __GNU_GETTEXT_SYMBOL_EXPRESSION (_nl_msg_cat_cntr + *_nl_expand_alias ("")) #else #define __GNU_GETTEXT_SYMBOL_EXPRESSION 0 #endif $gt_revision_test_code int main (void) { bindtextdomain ("", ""); return * gettext ("")$gt_expression_test_code + __GNU_GETTEXT_SYMBOL_EXPRESSION ; return 0; } _ACEOF if ac_fn_cxx_try_link "$LINENO" then : LIBINTL="$LIBINTL $LIBICONV" LTLIBINTL="$LTLIBINTL $LTLIBICONV" eval "$gt_func_gnugettext_libintl=yes" fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext fi CPPFLAGS="$gt_save_CPPFLAGS" LIBS="$gt_save_LIBS" fi eval ac_res=\$$gt_func_gnugettext_libintl { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 printf "%s\n" "$ac_res" >&6; } fi if { eval "gt_val=\$$gt_func_gnugettext_libc"; test "$gt_val" = "yes"; } \ || { { eval "gt_val=\$$gt_func_gnugettext_libintl"; test "$gt_val" = "yes"; } \ && test "$PACKAGE" != gettext-runtime \ && test "$PACKAGE" != gettext-tools; }; then gt_use_preinstalled_gnugettext=yes else LIBINTL= LTLIBINTL= INCINTL= fi if test -n "$INTL_MACOSX_LIBS"; then if test "$gt_use_preinstalled_gnugettext" = "yes" \ || test "$nls_cv_use_gnu_gettext" = "yes"; then LIBINTL="$LIBINTL $INTL_MACOSX_LIBS" LTLIBINTL="$LTLIBINTL $INTL_MACOSX_LIBS" fi fi if test "$gt_use_preinstalled_gnugettext" = "yes" \ || test "$nls_cv_use_gnu_gettext" = "yes"; then printf "%s\n" "#define ENABLE_NLS 1" >>confdefs.h else USE_NLS=no fi fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether to use NLS" >&5 printf %s "checking whether to use NLS... " >&6; } { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $USE_NLS" >&5 printf "%s\n" "$USE_NLS" >&6; } if test "$USE_NLS" = "yes"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking where the gettext function comes from" >&5 printf %s "checking where the gettext function comes from... " >&6; } if test "$gt_use_preinstalled_gnugettext" = "yes"; then if { eval "gt_val=\$$gt_func_gnugettext_libintl"; test "$gt_val" = "yes"; }; then gt_source="external libintl" else gt_source="libc" fi else gt_source="included intl directory" fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gt_source" >&5 printf "%s\n" "$gt_source" >&6; } fi if test "$USE_NLS" = "yes"; then if test "$gt_use_preinstalled_gnugettext" = "yes"; then if { eval "gt_val=\$$gt_func_gnugettext_libintl"; test "$gt_val" = "yes"; }; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking how to link with libintl" >&5 printf %s "checking how to link with libintl... " >&6; } { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $LIBINTL" >&5 printf "%s\n" "$LIBINTL" >&6; } for element in $INCINTL; do haveit= for x in $CPPFLAGS; do acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval x=\"$x\" exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" if test "X$x" = "X$element"; then haveit=yes break fi done if test -z "$haveit"; then CPPFLAGS="${CPPFLAGS}${CPPFLAGS:+ }$element" fi done fi printf "%s\n" "#define HAVE_GETTEXT 1" >>confdefs.h printf "%s\n" "#define HAVE_DCGETTEXT 1" >>confdefs.h fi POSUB=po fi INTLLIBS="$LIBINTL" XGETTEXT_EXTRA_OPTIONS='--keyword=dar_gettext' am_save_CPPFLAGS="$CPPFLAGS" for element in $INCICONV; do haveit= for x in $CPPFLAGS; do acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval x=\"$x\" exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" if test "X$x" = "X$element"; then haveit=yes break fi done if test -z "$haveit"; then CPPFLAGS="${CPPFLAGS}${CPPFLAGS:+ }$element" fi done { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for iconv" >&5 printf %s "checking for iconv... " >&6; } if test ${am_cv_func_iconv+y} then : printf %s "(cached) " >&6 else $as_nop am_cv_func_iconv="no, consider installing GNU libiconv" am_cv_lib_iconv=no cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include int main (void) { iconv_t cd = iconv_open("",""); iconv(cd,NULL,NULL,NULL,NULL); iconv_close(cd); ; return 0; } _ACEOF if ac_fn_cxx_try_link "$LINENO" then : am_cv_func_iconv=yes fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext if test "$am_cv_func_iconv" != yes; then am_save_LIBS="$LIBS" LIBS="$LIBS $LIBICONV" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include int main (void) { iconv_t cd = iconv_open("",""); iconv(cd,NULL,NULL,NULL,NULL); iconv_close(cd); ; return 0; } _ACEOF if ac_fn_cxx_try_link "$LINENO" then : am_cv_lib_iconv=yes am_cv_func_iconv=yes fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext LIBS="$am_save_LIBS" fi fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $am_cv_func_iconv" >&5 printf "%s\n" "$am_cv_func_iconv" >&6; } if test "$am_cv_func_iconv" = yes; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for working iconv" >&5 printf %s "checking for working iconv... " >&6; } if test ${am_cv_func_iconv_works+y} then : printf %s "(cached) " >&6 else $as_nop am_save_LIBS="$LIBS" if test $am_cv_lib_iconv = yes; then LIBS="$LIBS $LIBICONV" fi am_cv_func_iconv_works=no for ac_iconv_const in '' 'const'; do if test "$cross_compiling" = yes then : case "$host_os" in aix* | hpux*) am_cv_func_iconv_works="guessing no" ;; *) am_cv_func_iconv_works="guessing yes" ;; esac else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #ifndef ICONV_CONST # define ICONV_CONST $ac_iconv_const #endif int main (void) { int result = 0; /* Test against AIX 5.1 bug: Failures are not distinguishable from successful returns. */ { iconv_t cd_utf8_to_88591 = iconv_open ("ISO8859-1", "UTF-8"); if (cd_utf8_to_88591 != (iconv_t)(-1)) { static ICONV_CONST char input[] = "\342\202\254"; /* EURO SIGN */ char buf[10]; ICONV_CONST char *inptr = input; size_t inbytesleft = strlen (input); char *outptr = buf; size_t outbytesleft = sizeof (buf); size_t res = iconv (cd_utf8_to_88591, &inptr, &inbytesleft, &outptr, &outbytesleft); if (res == 0) result |= 1; iconv_close (cd_utf8_to_88591); } } /* Test against Solaris 10 bug: Failures are not distinguishable from successful returns. */ { iconv_t cd_ascii_to_88591 = iconv_open ("ISO8859-1", "646"); if (cd_ascii_to_88591 != (iconv_t)(-1)) { static ICONV_CONST char input[] = "\263"; char buf[10]; ICONV_CONST char *inptr = input; size_t inbytesleft = strlen (input); char *outptr = buf; size_t outbytesleft = sizeof (buf); size_t res = iconv (cd_ascii_to_88591, &inptr, &inbytesleft, &outptr, &outbytesleft); if (res == 0) result |= 2; iconv_close (cd_ascii_to_88591); } } /* Test against AIX 6.1..7.1 bug: Buffer overrun. */ { iconv_t cd_88591_to_utf8 = iconv_open ("UTF-8", "ISO-8859-1"); if (cd_88591_to_utf8 != (iconv_t)(-1)) { static ICONV_CONST char input[] = "\304"; static char buf[2] = { (char)0xDE, (char)0xAD }; ICONV_CONST char *inptr = input; size_t inbytesleft = 1; char *outptr = buf; size_t outbytesleft = 1; size_t res = iconv (cd_88591_to_utf8, &inptr, &inbytesleft, &outptr, &outbytesleft); if (res != (size_t)(-1) || outptr - buf > 1 || buf[1] != (char)0xAD) result |= 4; iconv_close (cd_88591_to_utf8); } } #if 0 /* This bug could be worked around by the caller. */ /* Test against HP-UX 11.11 bug: Positive return value instead of 0. */ { iconv_t cd_88591_to_utf8 = iconv_open ("utf8", "iso88591"); if (cd_88591_to_utf8 != (iconv_t)(-1)) { static ICONV_CONST char input[] = "\304rger mit b\366sen B\374bchen ohne Augenma\337"; char buf[50]; ICONV_CONST char *inptr = input; size_t inbytesleft = strlen (input); char *outptr = buf; size_t outbytesleft = sizeof (buf); size_t res = iconv (cd_88591_to_utf8, &inptr, &inbytesleft, &outptr, &outbytesleft); if ((int)res > 0) result |= 8; iconv_close (cd_88591_to_utf8); } } #endif /* Test against HP-UX 11.11 bug: No converter from EUC-JP to UTF-8 is provided. */ { /* Try standardized names. */ iconv_t cd1 = iconv_open ("UTF-8", "EUC-JP"); /* Try IRIX, OSF/1 names. */ iconv_t cd2 = iconv_open ("UTF-8", "eucJP"); /* Try AIX names. */ iconv_t cd3 = iconv_open ("UTF-8", "IBM-eucJP"); /* Try HP-UX names. */ iconv_t cd4 = iconv_open ("utf8", "eucJP"); if (cd1 == (iconv_t)(-1) && cd2 == (iconv_t)(-1) && cd3 == (iconv_t)(-1) && cd4 == (iconv_t)(-1)) result |= 16; if (cd1 != (iconv_t)(-1)) iconv_close (cd1); if (cd2 != (iconv_t)(-1)) iconv_close (cd2); if (cd3 != (iconv_t)(-1)) iconv_close (cd3); if (cd4 != (iconv_t)(-1)) iconv_close (cd4); } return result; ; return 0; } _ACEOF if ac_fn_cxx_try_run "$LINENO" then : am_cv_func_iconv_works=yes fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi test "$am_cv_func_iconv_works" = no || break done LIBS="$am_save_LIBS" fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $am_cv_func_iconv_works" >&5 printf "%s\n" "$am_cv_func_iconv_works" >&6; } case "$am_cv_func_iconv_works" in *no) am_func_iconv=no am_cv_lib_iconv=no ;; *) am_func_iconv=yes ;; esac else am_func_iconv=no am_cv_lib_iconv=no fi if test "$am_func_iconv" = yes; then printf "%s\n" "#define HAVE_ICONV 1" >>confdefs.h fi if test "$am_cv_lib_iconv" = yes; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking how to link with libiconv" >&5 printf %s "checking how to link with libiconv... " >&6; } { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $LIBICONV" >&5 printf "%s\n" "$LIBICONV" >&6; } else CPPFLAGS="$am_save_CPPFLAGS" LIBICONV= LTLIBICONV= fi if test "$am_cv_func_iconv" = yes; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for iconv declaration" >&5 printf %s "checking for iconv declaration... " >&6; } if test ${am_cv_proto_iconv+y} then : printf %s "(cached) " >&6 else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include extern #ifdef __cplusplus "C" #endif #if defined(__STDC__) || defined(_MSC_VER) || defined(__cplusplus) size_t iconv (iconv_t cd, char * *inbuf, size_t *inbytesleft, char * *outbuf, size_t *outbytesleft); #else size_t iconv(); #endif int main (void) { ; return 0; } _ACEOF if ac_fn_cxx_try_compile "$LINENO" then : am_cv_proto_iconv_arg1="" else $as_nop am_cv_proto_iconv_arg1="const" fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext am_cv_proto_iconv="extern size_t iconv (iconv_t cd, $am_cv_proto_iconv_arg1 char * *inbuf, size_t *inbytesleft, char * *outbuf, size_t *outbytesleft);" fi am_cv_proto_iconv=`echo "$am_cv_proto_iconv" | tr -s ' ' | sed -e 's/( /(/'` { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $am_cv_proto_iconv" >&5 printf "%s\n" " $am_cv_proto_iconv" >&6; } else am_cv_proto_iconv_arg1="" fi printf "%s\n" "#define ICONV_CONST $am_cv_proto_iconv_arg1" >>confdefs.h #### # configure checks what is available from the operational system: # - it displays things on output for the user running the configure script has status information # - it sets some shell variable that are not used outside the configuration script # - it sets some shell variable that can be susbstitued in Makefile.in files (see AC_SUBST() and AC_CONFIG_FILES()) # also known as "output variables" # - it defines macros that get stored in config.h and used in source code (see AC_DEFINE()) # # header files: # header files are #included in source code if they HAVE_... macro has been defined in config.h # # libraries: # necessary library flags are stored in the "output variables" LIBS substituable shell variable and passed to Makefile.in # that get substitued in Makefiles.in when the @LIBS@ form is met. # # have a specific variable for pkgconfig, setting the default value: pkgconfigdir=${libdir}/pkgconfig # Check whether --with-pkgconfigdir was given. if test ${with_pkgconfigdir+y} then : withval=$with_pkgconfigdir; if ! -z "$withval" ; then pkgconfigdir=$withval fi fi # Checks for programs. ac_ext=cpp ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu if test -z "$CXX"; then if test -n "$CCC"; then CXX=$CCC else if test -n "$ac_tool_prefix"; then for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC clang++ do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_CXX+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$CXX"; then ac_cv_prog_CXX="$CXX" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_CXX="$ac_tool_prefix$ac_prog" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CXX=$ac_cv_prog_CXX if test -n "$CXX"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CXX" >&5 printf "%s\n" "$CXX" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi test -n "$CXX" && break done fi if test -z "$CXX"; then ac_ct_CXX=$CXX for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC clang++ do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_ac_ct_CXX+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$ac_ct_CXX"; then ac_cv_prog_ac_ct_CXX="$ac_ct_CXX" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CXX="$ac_prog" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_CXX=$ac_cv_prog_ac_ct_CXX if test -n "$ac_ct_CXX"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CXX" >&5 printf "%s\n" "$ac_ct_CXX" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi test -n "$ac_ct_CXX" && break done if test "x$ac_ct_CXX" = x; then CXX="g++" else case $cross_compiling:$ac_tool_warned in yes:) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CXX=$ac_ct_CXX fi fi fi fi # Provide some information about the compiler. printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for C++ compiler version" >&5 set X $ac_compile ac_compiler=$2 for ac_option in --version -v -V -qversion; do { { ac_try="$ac_compiler $ac_option >&5" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_compiler $ac_option >&5") 2>conftest.err ac_status=$? if test -s conftest.err; then sed '10a\ ... rest of stderr output deleted ... 10q' conftest.err >conftest.er1 cat conftest.er1 >&5 fi rm -f conftest.er1 conftest.err printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } done { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the compiler supports GNU C++" >&5 printf %s "checking whether the compiler supports GNU C++... " >&6; } if test ${ac_cv_cxx_compiler_gnu+y} then : printf %s "(cached) " >&6 else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { #ifndef __GNUC__ choke me #endif ; return 0; } _ACEOF if ac_fn_cxx_try_compile "$LINENO" then : ac_compiler_gnu=yes else $as_nop ac_compiler_gnu=no fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ac_cv_cxx_compiler_gnu=$ac_compiler_gnu fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_cxx_compiler_gnu" >&5 printf "%s\n" "$ac_cv_cxx_compiler_gnu" >&6; } ac_compiler_gnu=$ac_cv_cxx_compiler_gnu if test $ac_compiler_gnu = yes; then GXX=yes else GXX= fi ac_test_CXXFLAGS=${CXXFLAGS+y} ac_save_CXXFLAGS=$CXXFLAGS { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether $CXX accepts -g" >&5 printf %s "checking whether $CXX accepts -g... " >&6; } if test ${ac_cv_prog_cxx_g+y} then : printf %s "(cached) " >&6 else $as_nop ac_save_cxx_werror_flag=$ac_cxx_werror_flag ac_cxx_werror_flag=yes ac_cv_prog_cxx_g=no CXXFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { ; return 0; } _ACEOF if ac_fn_cxx_try_compile "$LINENO" then : ac_cv_prog_cxx_g=yes else $as_nop CXXFLAGS="" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { ; return 0; } _ACEOF if ac_fn_cxx_try_compile "$LINENO" then : else $as_nop ac_cxx_werror_flag=$ac_save_cxx_werror_flag CXXFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { ; return 0; } _ACEOF if ac_fn_cxx_try_compile "$LINENO" then : ac_cv_prog_cxx_g=yes fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ac_cxx_werror_flag=$ac_save_cxx_werror_flag fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cxx_g" >&5 printf "%s\n" "$ac_cv_prog_cxx_g" >&6; } if test $ac_test_CXXFLAGS; then CXXFLAGS=$ac_save_CXXFLAGS elif test $ac_cv_prog_cxx_g = yes; then if test "$GXX" = yes; then CXXFLAGS="-g -O2" else CXXFLAGS="-g" fi else if test "$GXX" = yes; then CXXFLAGS="-O2" else CXXFLAGS= fi fi ac_prog_cxx_stdcxx=no if test x$ac_prog_cxx_stdcxx = xno then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CXX option to enable C++11 features" >&5 printf %s "checking for $CXX option to enable C++11 features... " >&6; } if test ${ac_cv_prog_cxx_cxx11+y} then : printf %s "(cached) " >&6 else $as_nop ac_cv_prog_cxx_cxx11=no ac_save_CXX=$CXX cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $ac_cxx_conftest_cxx11_program _ACEOF for ac_arg in '' -std=gnu++11 -std=gnu++0x -std=c++11 -std=c++0x -qlanglvl=extended0x -AA do CXX="$ac_save_CXX $ac_arg" if ac_fn_cxx_try_compile "$LINENO" then : ac_cv_prog_cxx_cxx11=$ac_arg fi rm -f core conftest.err conftest.$ac_objext conftest.beam test "x$ac_cv_prog_cxx_cxx11" != "xno" && break done rm -f conftest.$ac_ext CXX=$ac_save_CXX fi if test "x$ac_cv_prog_cxx_cxx11" = xno then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 printf "%s\n" "unsupported" >&6; } else $as_nop if test "x$ac_cv_prog_cxx_cxx11" = x then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 printf "%s\n" "none needed" >&6; } else $as_nop { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cxx_cxx11" >&5 printf "%s\n" "$ac_cv_prog_cxx_cxx11" >&6; } CXX="$CXX $ac_cv_prog_cxx_cxx11" fi ac_cv_prog_cxx_stdcxx=$ac_cv_prog_cxx_cxx11 ac_prog_cxx_stdcxx=cxx11 fi fi if test x$ac_prog_cxx_stdcxx = xno then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CXX option to enable C++98 features" >&5 printf %s "checking for $CXX option to enable C++98 features... " >&6; } if test ${ac_cv_prog_cxx_cxx98+y} then : printf %s "(cached) " >&6 else $as_nop ac_cv_prog_cxx_cxx98=no ac_save_CXX=$CXX cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $ac_cxx_conftest_cxx98_program _ACEOF for ac_arg in '' -std=gnu++98 -std=c++98 -qlanglvl=extended -AA do CXX="$ac_save_CXX $ac_arg" if ac_fn_cxx_try_compile "$LINENO" then : ac_cv_prog_cxx_cxx98=$ac_arg fi rm -f core conftest.err conftest.$ac_objext conftest.beam test "x$ac_cv_prog_cxx_cxx98" != "xno" && break done rm -f conftest.$ac_ext CXX=$ac_save_CXX fi if test "x$ac_cv_prog_cxx_cxx98" = xno then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 printf "%s\n" "unsupported" >&6; } else $as_nop if test "x$ac_cv_prog_cxx_cxx98" = x then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 printf "%s\n" "none needed" >&6; } else $as_nop { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cxx_cxx98" >&5 printf "%s\n" "$ac_cv_prog_cxx_cxx98" >&6; } CXX="$CXX $ac_cv_prog_cxx_cxx98" fi ac_cv_prog_cxx_stdcxx=$ac_cv_prog_cxx_cxx98 ac_prog_cxx_stdcxx=cxx98 fi fi ac_ext=cpp ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu depcc="$CXX" am_compiler_list= { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5 printf %s "checking dependency style of $depcc... " >&6; } if test ${am_cv_CXX_dependencies_compiler_type+y} then : printf %s "(cached) " >&6 else $as_nop if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then # We make a subdir and do the tests there. Otherwise we can end up # making bogus files that we don't know about and never remove. For # instance it was reported that on HP-UX the gcc test will end up # making a dummy file named 'D' -- because '-MD' means "put the output # in D". rm -rf conftest.dir mkdir conftest.dir # Copy depcomp to subdir because otherwise we won't find it if we're # using a relative directory. cp "$am_depcomp" conftest.dir cd conftest.dir # We will build objects and dependencies in a subdirectory because # it helps to detect inapplicable dependency modes. For instance # both Tru64's cc and ICC support -MD to output dependencies as a # side effect of compilation, but ICC will put the dependencies in # the current directory while Tru64 will put them in the object # directory. mkdir sub am_cv_CXX_dependencies_compiler_type=none if test "$am_compiler_list" = ""; then am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp` fi am__universal=false case " $depcc " in #( *\ -arch\ *\ -arch\ *) am__universal=true ;; esac for depmode in $am_compiler_list; do # Setup a source with many dependencies, because some compilers # like to wrap large dependency lists on column 80 (with \), and # we should not choose a depcomp mode which is confused by this. # # We need to recreate these files for each test, as the compiler may # overwrite some of them when testing with obscure command lines. # This happens at least with the AIX C compiler. : > sub/conftest.c for i in 1 2 3 4 5 6; do echo '#include "conftst'$i'.h"' >> sub/conftest.c # Using ": > sub/conftst$i.h" creates only sub/conftst1.h with # Solaris 10 /bin/sh. echo '/* dummy */' > sub/conftst$i.h done echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf # We check with '-c' and '-o' for the sake of the "dashmstdout" # mode. It turns out that the SunPro C++ compiler does not properly # handle '-M -o', and we need to detect this. Also, some Intel # versions had trouble with output in subdirs. am__obj=sub/conftest.${OBJEXT-o} am__minus_obj="-o $am__obj" case $depmode in gcc) # This depmode causes a compiler race in universal mode. test "$am__universal" = false || continue ;; nosideeffect) # After this tag, mechanisms are not by side-effect, so they'll # only be used when explicitly requested. if test "x$enable_dependency_tracking" = xyes; then continue else break fi ;; msvc7 | msvc7msys | msvisualcpp | msvcmsys) # This compiler won't grok '-c -o', but also, the minuso test has # not run yet. These depmodes are late enough in the game, and # so weak that their functioning should not be impacted. am__obj=conftest.${OBJEXT-o} am__minus_obj= ;; none) break ;; esac if depmode=$depmode \ source=sub/conftest.c object=$am__obj \ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ >/dev/null 2>conftest.err && grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && grep $am__obj sub/conftest.Po > /dev/null 2>&1 && ${MAKE-make} -s -f confmf > /dev/null 2>&1; then # icc doesn't choke on unknown options, it will just issue warnings # or remarks (even with -Werror). So we grep stderr for any message # that says an option was ignored or not supported. # When given -MP, icc 7.0 and 7.1 complain thusly: # icc: Command line warning: ignoring option '-M'; no argument required # The diagnosis changed in icc 8.0: # icc: Command line remark: option '-MP' not supported if (grep 'ignoring option' conftest.err || grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else am_cv_CXX_dependencies_compiler_type=$depmode break fi fi done cd .. rm -rf conftest.dir else am_cv_CXX_dependencies_compiler_type=none fi fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $am_cv_CXX_dependencies_compiler_type" >&5 printf "%s\n" "$am_cv_CXX_dependencies_compiler_type" >&6; } CXXDEPMODE=depmode=$am_cv_CXX_dependencies_compiler_type if test "x$enable_dependency_tracking" != xno \ && test "$am_cv_CXX_dependencies_compiler_type" = gcc3; then am__fastdepCXX_TRUE= am__fastdepCXX_FALSE='#' else am__fastdepCXX_TRUE='#' am__fastdepCXX_FALSE= fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args. set dummy ${ac_tool_prefix}gcc; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_CC+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_CC="${ac_tool_prefix}gcc" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 printf "%s\n" "$CC" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi fi if test -z "$ac_cv_prog_CC"; then ac_ct_CC=$CC # Extract the first word of "gcc", so it can be a program name with args. set dummy gcc; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_ac_ct_CC+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="gcc" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 printf "%s\n" "$ac_ct_CC" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi else CC="$ac_cv_prog_CC" fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. set dummy ${ac_tool_prefix}cc; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_CC+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_CC="${ac_tool_prefix}cc" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 printf "%s\n" "$CC" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi fi fi if test -z "$CC"; then # Extract the first word of "cc", so it can be a program name with args. set dummy cc; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_CC+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else ac_prog_rejected=no as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then if test "$as_dir$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then ac_prog_rejected=yes continue fi ac_cv_prog_CC="cc" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS if test $ac_prog_rejected = yes; then # We found a bogon in the path, so make sure we never use it. set dummy $ac_cv_prog_CC shift if test $# != 0; then # We chose a different compiler from the bogus one. # However, it has the same basename, so the bogon will be chosen # first if we set CC to just the basename; use the full file name. shift ac_cv_prog_CC="$as_dir$ac_word${1+' '}$@" fi fi fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 printf "%s\n" "$CC" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then for ac_prog in cl.exe do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_CC+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_CC="$ac_tool_prefix$ac_prog" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 printf "%s\n" "$CC" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi test -n "$CC" && break done fi if test -z "$CC"; then ac_ct_CC=$CC for ac_prog in cl.exe do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_ac_ct_CC+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="$ac_prog" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 printf "%s\n" "$ac_ct_CC" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi test -n "$ac_ct_CC" && break done if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi fi fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}clang", so it can be a program name with args. set dummy ${ac_tool_prefix}clang; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_CC+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_CC="${ac_tool_prefix}clang" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 printf "%s\n" "$CC" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi fi if test -z "$ac_cv_prog_CC"; then ac_ct_CC=$CC # Extract the first word of "clang", so it can be a program name with args. set dummy clang; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_ac_ct_CC+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="clang" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 printf "%s\n" "$ac_ct_CC" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi else CC="$ac_cv_prog_CC" fi fi test -z "$CC" && { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "no acceptable C compiler found in \$PATH See \`config.log' for more details" "$LINENO" 5; } # Provide some information about the compiler. printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5 set X $ac_compile ac_compiler=$2 for ac_option in --version -v -V -qversion -version; do { { ac_try="$ac_compiler $ac_option >&5" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_compiler $ac_option >&5") 2>conftest.err ac_status=$? if test -s conftest.err; then sed '10a\ ... rest of stderr output deleted ... 10q' conftest.err >conftest.er1 cat conftest.er1 >&5 fi rm -f conftest.er1 conftest.err printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } done { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the compiler supports GNU C" >&5 printf %s "checking whether the compiler supports GNU C... " >&6; } if test ${ac_cv_c_compiler_gnu+y} then : printf %s "(cached) " >&6 else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { #ifndef __GNUC__ choke me #endif ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : ac_compiler_gnu=yes else $as_nop ac_compiler_gnu=no fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ac_cv_c_compiler_gnu=$ac_compiler_gnu fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5 printf "%s\n" "$ac_cv_c_compiler_gnu" >&6; } ac_compiler_gnu=$ac_cv_c_compiler_gnu if test $ac_compiler_gnu = yes; then GCC=yes else GCC= fi ac_test_CFLAGS=${CFLAGS+y} ac_save_CFLAGS=$CFLAGS { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5 printf %s "checking whether $CC accepts -g... " >&6; } if test ${ac_cv_prog_cc_g+y} then : printf %s "(cached) " >&6 else $as_nop ac_save_c_werror_flag=$ac_c_werror_flag ac_c_werror_flag=yes ac_cv_prog_cc_g=no CFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : ac_cv_prog_cc_g=yes else $as_nop CFLAGS="" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : else $as_nop ac_c_werror_flag=$ac_save_c_werror_flag CFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : ac_cv_prog_cc_g=yes fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ac_c_werror_flag=$ac_save_c_werror_flag fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5 printf "%s\n" "$ac_cv_prog_cc_g" >&6; } if test $ac_test_CFLAGS; then CFLAGS=$ac_save_CFLAGS elif test $ac_cv_prog_cc_g = yes; then if test "$GCC" = yes; then CFLAGS="-g -O2" else CFLAGS="-g" fi else if test "$GCC" = yes; then CFLAGS="-O2" else CFLAGS= fi fi ac_prog_cc_stdc=no if test x$ac_prog_cc_stdc = xno then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CC option to enable C11 features" >&5 printf %s "checking for $CC option to enable C11 features... " >&6; } if test ${ac_cv_prog_cc_c11+y} then : printf %s "(cached) " >&6 else $as_nop ac_cv_prog_cc_c11=no ac_save_CC=$CC cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $ac_c_conftest_c11_program _ACEOF for ac_arg in '' -std=gnu11 do CC="$ac_save_CC $ac_arg" if ac_fn_c_try_compile "$LINENO" then : ac_cv_prog_cc_c11=$ac_arg fi rm -f core conftest.err conftest.$ac_objext conftest.beam test "x$ac_cv_prog_cc_c11" != "xno" && break done rm -f conftest.$ac_ext CC=$ac_save_CC fi if test "x$ac_cv_prog_cc_c11" = xno then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 printf "%s\n" "unsupported" >&6; } else $as_nop if test "x$ac_cv_prog_cc_c11" = x then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 printf "%s\n" "none needed" >&6; } else $as_nop { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c11" >&5 printf "%s\n" "$ac_cv_prog_cc_c11" >&6; } CC="$CC $ac_cv_prog_cc_c11" fi ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c11 ac_prog_cc_stdc=c11 fi fi if test x$ac_prog_cc_stdc = xno then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CC option to enable C99 features" >&5 printf %s "checking for $CC option to enable C99 features... " >&6; } if test ${ac_cv_prog_cc_c99+y} then : printf %s "(cached) " >&6 else $as_nop ac_cv_prog_cc_c99=no ac_save_CC=$CC cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $ac_c_conftest_c99_program _ACEOF for ac_arg in '' -std=gnu99 -std=c99 -c99 -qlanglvl=extc1x -qlanglvl=extc99 -AC99 -D_STDC_C99= do CC="$ac_save_CC $ac_arg" if ac_fn_c_try_compile "$LINENO" then : ac_cv_prog_cc_c99=$ac_arg fi rm -f core conftest.err conftest.$ac_objext conftest.beam test "x$ac_cv_prog_cc_c99" != "xno" && break done rm -f conftest.$ac_ext CC=$ac_save_CC fi if test "x$ac_cv_prog_cc_c99" = xno then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 printf "%s\n" "unsupported" >&6; } else $as_nop if test "x$ac_cv_prog_cc_c99" = x then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 printf "%s\n" "none needed" >&6; } else $as_nop { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c99" >&5 printf "%s\n" "$ac_cv_prog_cc_c99" >&6; } CC="$CC $ac_cv_prog_cc_c99" fi ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c99 ac_prog_cc_stdc=c99 fi fi if test x$ac_prog_cc_stdc = xno then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CC option to enable C89 features" >&5 printf %s "checking for $CC option to enable C89 features... " >&6; } if test ${ac_cv_prog_cc_c89+y} then : printf %s "(cached) " >&6 else $as_nop ac_cv_prog_cc_c89=no ac_save_CC=$CC cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $ac_c_conftest_c89_program _ACEOF for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" do CC="$ac_save_CC $ac_arg" if ac_fn_c_try_compile "$LINENO" then : ac_cv_prog_cc_c89=$ac_arg fi rm -f core conftest.err conftest.$ac_objext conftest.beam test "x$ac_cv_prog_cc_c89" != "xno" && break done rm -f conftest.$ac_ext CC=$ac_save_CC fi if test "x$ac_cv_prog_cc_c89" = xno then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 printf "%s\n" "unsupported" >&6; } else $as_nop if test "x$ac_cv_prog_cc_c89" = x then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 printf "%s\n" "none needed" >&6; } else $as_nop { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5 printf "%s\n" "$ac_cv_prog_cc_c89" >&6; } CC="$CC $ac_cv_prog_cc_c89" fi ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c89 ac_prog_cc_stdc=c89 fi fi ac_ext=cpp ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether $CC understands -c and -o together" >&5 printf %s "checking whether $CC understands -c and -o together... " >&6; } if test ${am_cv_prog_cc_c_o+y} then : printf %s "(cached) " >&6 else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { ; return 0; } _ACEOF # Make sure it works both with $CC and with simple cc. # Following AC_PROG_CC_C_O, we do the test twice because some # compilers refuse to overwrite an existing .o file with -o, # though they will create one. am_cv_prog_cc_c_o=yes for am_i in 1 2; do if { echo "$as_me:$LINENO: $CC -c conftest.$ac_ext -o conftest2.$ac_objext" >&5 ($CC -c conftest.$ac_ext -o conftest2.$ac_objext) >&5 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } \ && test -f conftest2.$ac_objext; then : OK else am_cv_prog_cc_c_o=no break fi done rm -f core conftest* unset am_i fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $am_cv_prog_cc_c_o" >&5 printf "%s\n" "$am_cv_prog_cc_c_o" >&6; } if test "$am_cv_prog_cc_c_o" != yes; then # Losing compiler, so override with the script. # FIXME: It is wrong to rewrite CC. # But if we don't then we get into trouble of one sort or another. # A longer-term fix would be to have automake use am__CC in this case, # and then we could set am__CC="\$(top_srcdir)/compile \$(CC)" CC="$am_aux_dir/compile $CC" fi ac_ext=cpp ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu depcc="$CC" am_compiler_list= { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5 printf %s "checking dependency style of $depcc... " >&6; } if test ${am_cv_CC_dependencies_compiler_type+y} then : printf %s "(cached) " >&6 else $as_nop if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then # We make a subdir and do the tests there. Otherwise we can end up # making bogus files that we don't know about and never remove. For # instance it was reported that on HP-UX the gcc test will end up # making a dummy file named 'D' -- because '-MD' means "put the output # in D". rm -rf conftest.dir mkdir conftest.dir # Copy depcomp to subdir because otherwise we won't find it if we're # using a relative directory. cp "$am_depcomp" conftest.dir cd conftest.dir # We will build objects and dependencies in a subdirectory because # it helps to detect inapplicable dependency modes. For instance # both Tru64's cc and ICC support -MD to output dependencies as a # side effect of compilation, but ICC will put the dependencies in # the current directory while Tru64 will put them in the object # directory. mkdir sub am_cv_CC_dependencies_compiler_type=none if test "$am_compiler_list" = ""; then am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp` fi am__universal=false case " $depcc " in #( *\ -arch\ *\ -arch\ *) am__universal=true ;; esac for depmode in $am_compiler_list; do # Setup a source with many dependencies, because some compilers # like to wrap large dependency lists on column 80 (with \), and # we should not choose a depcomp mode which is confused by this. # # We need to recreate these files for each test, as the compiler may # overwrite some of them when testing with obscure command lines. # This happens at least with the AIX C compiler. : > sub/conftest.c for i in 1 2 3 4 5 6; do echo '#include "conftst'$i'.h"' >> sub/conftest.c # Using ": > sub/conftst$i.h" creates only sub/conftst1.h with # Solaris 10 /bin/sh. echo '/* dummy */' > sub/conftst$i.h done echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf # We check with '-c' and '-o' for the sake of the "dashmstdout" # mode. It turns out that the SunPro C++ compiler does not properly # handle '-M -o', and we need to detect this. Also, some Intel # versions had trouble with output in subdirs. am__obj=sub/conftest.${OBJEXT-o} am__minus_obj="-o $am__obj" case $depmode in gcc) # This depmode causes a compiler race in universal mode. test "$am__universal" = false || continue ;; nosideeffect) # After this tag, mechanisms are not by side-effect, so they'll # only be used when explicitly requested. if test "x$enable_dependency_tracking" = xyes; then continue else break fi ;; msvc7 | msvc7msys | msvisualcpp | msvcmsys) # This compiler won't grok '-c -o', but also, the minuso test has # not run yet. These depmodes are late enough in the game, and # so weak that their functioning should not be impacted. am__obj=conftest.${OBJEXT-o} am__minus_obj= ;; none) break ;; esac if depmode=$depmode \ source=sub/conftest.c object=$am__obj \ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ >/dev/null 2>conftest.err && grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && grep $am__obj sub/conftest.Po > /dev/null 2>&1 && ${MAKE-make} -s -f confmf > /dev/null 2>&1; then # icc doesn't choke on unknown options, it will just issue warnings # or remarks (even with -Werror). So we grep stderr for any message # that says an option was ignored or not supported. # When given -MP, icc 7.0 and 7.1 complain thusly: # icc: Command line warning: ignoring option '-M'; no argument required # The diagnosis changed in icc 8.0: # icc: Command line remark: option '-MP' not supported if (grep 'ignoring option' conftest.err || grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else am_cv_CC_dependencies_compiler_type=$depmode break fi fi done cd .. rm -rf conftest.dir else am_cv_CC_dependencies_compiler_type=none fi fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $am_cv_CC_dependencies_compiler_type" >&5 printf "%s\n" "$am_cv_CC_dependencies_compiler_type" >&6; } CCDEPMODE=depmode=$am_cv_CC_dependencies_compiler_type if test "x$enable_dependency_tracking" != xno \ && test "$am_cv_CC_dependencies_compiler_type" = gcc3; then am__fastdepCC_TRUE= am__fastdepCC_FALSE='#' else am__fastdepCC_TRUE='#' am__fastdepCC_FALSE= fi case `pwd` in *\ * | *\ *) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: Libtool does not cope well with whitespace in \`pwd\`" >&5 printf "%s\n" "$as_me: WARNING: Libtool does not cope well with whitespace in \`pwd\`" >&2;} ;; esac macro_version='2.4.7' macro_revision='2.4.7' ltmain=$ac_aux_dir/ltmain.sh # Backslashify metacharacters that are still active within # double-quoted strings. sed_quote_subst='s/\(["`$\\]\)/\\\1/g' # Same as above, but do not quote variable references. double_quote_subst='s/\(["`\\]\)/\\\1/g' # Sed substitution to delay expansion of an escaped shell variable in a # double_quote_subst'ed string. delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g' # Sed substitution to delay expansion of an escaped single quote. delay_single_quote_subst='s/'\''/'\'\\\\\\\'\''/g' # Sed substitution to avoid accidental globbing in evaled expressions no_glob_subst='s/\*/\\\*/g' ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO$ECHO { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking how to print strings" >&5 printf %s "checking how to print strings... " >&6; } # Test print first, because it will be a builtin if present. if test "X`( print -r -- -n ) 2>/dev/null`" = X-n && \ test "X`print -r -- $ECHO 2>/dev/null`" = "X$ECHO"; then ECHO='print -r --' elif test "X`printf %s $ECHO 2>/dev/null`" = "X$ECHO"; then ECHO='printf %s\n' else # Use this function as a fallback that always works. func_fallback_echo () { eval 'cat <<_LTECHO_EOF $1 _LTECHO_EOF' } ECHO='func_fallback_echo' fi # func_echo_all arg... # Invoke $ECHO with all args, space-separated. func_echo_all () { $ECHO "" } case $ECHO in printf*) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: printf" >&5 printf "%s\n" "printf" >&6; } ;; print*) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: print -r" >&5 printf "%s\n" "print -r" >&6; } ;; *) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: cat" >&5 printf "%s\n" "cat" >&6; } ;; esac { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for a sed that does not truncate output" >&5 printf %s "checking for a sed that does not truncate output... " >&6; } if test ${ac_cv_path_SED+y} then : printf %s "(cached) " >&6 else $as_nop ac_script=s/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb/ for ac_i in 1 2 3 4 5 6 7; do ac_script="$ac_script$as_nl$ac_script" done echo "$ac_script" 2>/dev/null | sed 99q >conftest.sed { ac_script=; unset ac_script;} if test -z "$SED"; then ac_path_SED_found=false # Loop through the user's path and test for each of PROGNAME-LIST as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_prog in sed gsed do for ac_exec_ext in '' $ac_executable_extensions; do ac_path_SED="$as_dir$ac_prog$ac_exec_ext" as_fn_executable_p "$ac_path_SED" || continue # Check for GNU ac_path_SED and select it if it is found. # Check for GNU $ac_path_SED case `"$ac_path_SED" --version 2>&1` in *GNU*) ac_cv_path_SED="$ac_path_SED" ac_path_SED_found=:;; *) ac_count=0 printf %s 0123456789 >"conftest.in" while : do cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" printf "%s\n" '' >> "conftest.nl" "$ac_path_SED" -f conftest.sed < "conftest.nl" >"conftest.out" 2>/dev/null || break diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break as_fn_arith $ac_count + 1 && ac_count=$as_val if test $ac_count -gt ${ac_path_SED_max-0}; then # Best one so far, save it but keep looking for a better one ac_cv_path_SED="$ac_path_SED" ac_path_SED_max=$ac_count fi # 10*(2^10) chars as input seems more than enough test $ac_count -gt 10 && break done rm -f conftest.in conftest.tmp conftest.nl conftest.out;; esac $ac_path_SED_found && break 3 done done done IFS=$as_save_IFS if test -z "$ac_cv_path_SED"; then as_fn_error $? "no acceptable sed could be found in \$PATH" "$LINENO" 5 fi else ac_cv_path_SED=$SED fi fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_SED" >&5 printf "%s\n" "$ac_cv_path_SED" >&6; } SED="$ac_cv_path_SED" rm -f conftest.sed test -z "$SED" && SED=sed Xsed="$SED -e 1s/^X//" { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for fgrep" >&5 printf %s "checking for fgrep... " >&6; } if test ${ac_cv_path_FGREP+y} then : printf %s "(cached) " >&6 else $as_nop if echo 'ab*c' | $GREP -F 'ab*c' >/dev/null 2>&1 then ac_cv_path_FGREP="$GREP -F" else if test -z "$FGREP"; then ac_path_FGREP_found=false # Loop through the user's path and test for each of PROGNAME-LIST as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_prog in fgrep do for ac_exec_ext in '' $ac_executable_extensions; do ac_path_FGREP="$as_dir$ac_prog$ac_exec_ext" as_fn_executable_p "$ac_path_FGREP" || continue # Check for GNU ac_path_FGREP and select it if it is found. # Check for GNU $ac_path_FGREP case `"$ac_path_FGREP" --version 2>&1` in *GNU*) ac_cv_path_FGREP="$ac_path_FGREP" ac_path_FGREP_found=:;; *) ac_count=0 printf %s 0123456789 >"conftest.in" while : do cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" printf "%s\n" 'FGREP' >> "conftest.nl" "$ac_path_FGREP" FGREP < "conftest.nl" >"conftest.out" 2>/dev/null || break diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break as_fn_arith $ac_count + 1 && ac_count=$as_val if test $ac_count -gt ${ac_path_FGREP_max-0}; then # Best one so far, save it but keep looking for a better one ac_cv_path_FGREP="$ac_path_FGREP" ac_path_FGREP_max=$ac_count fi # 10*(2^10) chars as input seems more than enough test $ac_count -gt 10 && break done rm -f conftest.in conftest.tmp conftest.nl conftest.out;; esac $ac_path_FGREP_found && break 3 done done done IFS=$as_save_IFS if test -z "$ac_cv_path_FGREP"; then as_fn_error $? "no acceptable fgrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 fi else ac_cv_path_FGREP=$FGREP fi fi fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_FGREP" >&5 printf "%s\n" "$ac_cv_path_FGREP" >&6; } FGREP="$ac_cv_path_FGREP" test -z "$GREP" && GREP=grep # Check whether --with-gnu-ld was given. if test ${with_gnu_ld+y} then : withval=$with_gnu_ld; test no = "$withval" || with_gnu_ld=yes else $as_nop with_gnu_ld=no fi ac_prog=ld if test yes = "$GCC"; then # Check if gcc -print-prog-name=ld gives a path. { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for ld used by $CC" >&5 printf %s "checking for ld used by $CC... " >&6; } case $host in *-*-mingw*) # gcc leaves a trailing carriage return, which upsets mingw ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; *) ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; esac case $ac_prog in # Accept absolute paths. [\\/]* | ?:[\\/]*) re_direlt='/[^/][^/]*/\.\./' # Canonicalize the pathname of ld ac_prog=`$ECHO "$ac_prog"| $SED 's%\\\\%/%g'` while $ECHO "$ac_prog" | $GREP "$re_direlt" > /dev/null 2>&1; do ac_prog=`$ECHO $ac_prog| $SED "s%$re_direlt%/%"` done test -z "$LD" && LD=$ac_prog ;; "") # If it fails, then pretend we aren't using GCC. ac_prog=ld ;; *) # If it is relative, then search for the first ld in PATH. with_gnu_ld=unknown ;; esac elif test yes = "$with_gnu_ld"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for GNU ld" >&5 printf %s "checking for GNU ld... " >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for non-GNU ld" >&5 printf %s "checking for non-GNU ld... " >&6; } fi if test ${lt_cv_path_LD+y} then : printf %s "(cached) " >&6 else $as_nop if test -z "$LD"; then lt_save_ifs=$IFS; IFS=$PATH_SEPARATOR for ac_dir in $PATH; do IFS=$lt_save_ifs test -z "$ac_dir" && ac_dir=. if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then lt_cv_path_LD=$ac_dir/$ac_prog # Check to see if the program is GNU ld. I'd rather use --version, # but apparently some variants of GNU ld only accept -v. # Break only if it was the GNU/non-GNU ld that we prefer. case `"$lt_cv_path_LD" -v 2>&1 &5 printf "%s\n" "$LD" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi test -z "$LD" && as_fn_error $? "no acceptable ld found in \$PATH" "$LINENO" 5 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if the linker ($LD) is GNU ld" >&5 printf %s "checking if the linker ($LD) is GNU ld... " >&6; } if test ${lt_cv_prog_gnu_ld+y} then : printf %s "(cached) " >&6 else $as_nop # I'd rather use --version here, but apparently some GNU lds only accept -v. case `$LD -v 2>&1 &5 printf "%s\n" "$lt_cv_prog_gnu_ld" >&6; } with_gnu_ld=$lt_cv_prog_gnu_ld { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for BSD- or MS-compatible name lister (nm)" >&5 printf %s "checking for BSD- or MS-compatible name lister (nm)... " >&6; } if test ${lt_cv_path_NM+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$NM"; then # Let the user override the test. lt_cv_path_NM=$NM else lt_nm_to_check=${ac_tool_prefix}nm if test -n "$ac_tool_prefix" && test "$build" = "$host"; then lt_nm_to_check="$lt_nm_to_check nm" fi for lt_tmp_nm in $lt_nm_to_check; do lt_save_ifs=$IFS; IFS=$PATH_SEPARATOR for ac_dir in $PATH /usr/ccs/bin/elf /usr/ccs/bin /usr/ucb /bin; do IFS=$lt_save_ifs test -z "$ac_dir" && ac_dir=. tmp_nm=$ac_dir/$lt_tmp_nm if test -f "$tmp_nm" || test -f "$tmp_nm$ac_exeext"; then # Check to see if the nm accepts a BSD-compat flag. # Adding the 'sed 1q' prevents false positives on HP-UX, which says: # nm: unknown option "B" ignored # Tru64's nm complains that /dev/null is an invalid object file # MSYS converts /dev/null to NUL, MinGW nm treats NUL as empty case $build_os in mingw*) lt_bad_file=conftest.nm/nofile ;; *) lt_bad_file=/dev/null ;; esac case `"$tmp_nm" -B $lt_bad_file 2>&1 | $SED '1q'` in *$lt_bad_file* | *'Invalid file or object type'*) lt_cv_path_NM="$tmp_nm -B" break 2 ;; *) case `"$tmp_nm" -p /dev/null 2>&1 | $SED '1q'` in */dev/null*) lt_cv_path_NM="$tmp_nm -p" break 2 ;; *) lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but continue # so that we can try to find one that supports BSD flags ;; esac ;; esac fi done IFS=$lt_save_ifs done : ${lt_cv_path_NM=no} fi fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_path_NM" >&5 printf "%s\n" "$lt_cv_path_NM" >&6; } if test no != "$lt_cv_path_NM"; then NM=$lt_cv_path_NM else # Didn't find any BSD compatible name lister, look for dumpbin. if test -n "$DUMPBIN"; then : # Let the user override the test. else if test -n "$ac_tool_prefix"; then for ac_prog in dumpbin "link -dump" do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_DUMPBIN+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$DUMPBIN"; then ac_cv_prog_DUMPBIN="$DUMPBIN" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_DUMPBIN="$ac_tool_prefix$ac_prog" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi DUMPBIN=$ac_cv_prog_DUMPBIN if test -n "$DUMPBIN"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $DUMPBIN" >&5 printf "%s\n" "$DUMPBIN" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi test -n "$DUMPBIN" && break done fi if test -z "$DUMPBIN"; then ac_ct_DUMPBIN=$DUMPBIN for ac_prog in dumpbin "link -dump" do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_ac_ct_DUMPBIN+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$ac_ct_DUMPBIN"; then ac_cv_prog_ac_ct_DUMPBIN="$ac_ct_DUMPBIN" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_DUMPBIN="$ac_prog" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_DUMPBIN=$ac_cv_prog_ac_ct_DUMPBIN if test -n "$ac_ct_DUMPBIN"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DUMPBIN" >&5 printf "%s\n" "$ac_ct_DUMPBIN" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi test -n "$ac_ct_DUMPBIN" && break done if test "x$ac_ct_DUMPBIN" = x; then DUMPBIN=":" else case $cross_compiling:$ac_tool_warned in yes:) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac DUMPBIN=$ac_ct_DUMPBIN fi fi case `$DUMPBIN -symbols -headers /dev/null 2>&1 | $SED '1q'` in *COFF*) DUMPBIN="$DUMPBIN -symbols -headers" ;; *) DUMPBIN=: ;; esac fi if test : != "$DUMPBIN"; then NM=$DUMPBIN fi fi test -z "$NM" && NM=nm { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking the name lister ($NM) interface" >&5 printf %s "checking the name lister ($NM) interface... " >&6; } if test ${lt_cv_nm_interface+y} then : printf %s "(cached) " >&6 else $as_nop lt_cv_nm_interface="BSD nm" echo "int some_variable = 0;" > conftest.$ac_ext (eval echo "\"\$as_me:$LINENO: $ac_compile\"" >&5) (eval "$ac_compile" 2>conftest.err) cat conftest.err >&5 (eval echo "\"\$as_me:$LINENO: $NM \\\"conftest.$ac_objext\\\"\"" >&5) (eval "$NM \"conftest.$ac_objext\"" 2>conftest.err > conftest.out) cat conftest.err >&5 (eval echo "\"\$as_me:$LINENO: output\"" >&5) cat conftest.out >&5 if $GREP 'External.*some_variable' conftest.out > /dev/null; then lt_cv_nm_interface="MS dumpbin" fi rm -f conftest* fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_nm_interface" >&5 printf "%s\n" "$lt_cv_nm_interface" >&6; } { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether ln -s works" >&5 printf %s "checking whether ln -s works... " >&6; } LN_S=$as_ln_s if test "$LN_S" = "ln -s"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 printf "%s\n" "yes" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no, using $LN_S" >&5 printf "%s\n" "no, using $LN_S" >&6; } fi # find the maximum length of command line arguments { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking the maximum length of command line arguments" >&5 printf %s "checking the maximum length of command line arguments... " >&6; } if test ${lt_cv_sys_max_cmd_len+y} then : printf %s "(cached) " >&6 else $as_nop i=0 teststring=ABCD case $build_os in msdosdjgpp*) # On DJGPP, this test can blow up pretty badly due to problems in libc # (any single argument exceeding 2000 bytes causes a buffer overrun # during glob expansion). Even if it were fixed, the result of this # check would be larger than it should be. lt_cv_sys_max_cmd_len=12288; # 12K is about right ;; gnu*) # Under GNU Hurd, this test is not required because there is # no limit to the length of command line arguments. # Libtool will interpret -1 as no limit whatsoever lt_cv_sys_max_cmd_len=-1; ;; cygwin* | mingw* | cegcc*) # On Win9x/ME, this test blows up -- it succeeds, but takes # about 5 minutes as the teststring grows exponentially. # Worse, since 9x/ME are not pre-emptively multitasking, # you end up with a "frozen" computer, even though with patience # the test eventually succeeds (with a max line length of 256k). # Instead, let's just punt: use the minimum linelength reported by # all of the supported platforms: 8192 (on NT/2K/XP). lt_cv_sys_max_cmd_len=8192; ;; mint*) # On MiNT this can take a long time and run out of memory. lt_cv_sys_max_cmd_len=8192; ;; amigaos*) # On AmigaOS with pdksh, this test takes hours, literally. # So we just punt and use a minimum line length of 8192. lt_cv_sys_max_cmd_len=8192; ;; bitrig* | darwin* | dragonfly* | freebsd* | midnightbsd* | netbsd* | openbsd*) # This has been around since 386BSD, at least. Likely further. if test -x /sbin/sysctl; then lt_cv_sys_max_cmd_len=`/sbin/sysctl -n kern.argmax` elif test -x /usr/sbin/sysctl; then lt_cv_sys_max_cmd_len=`/usr/sbin/sysctl -n kern.argmax` else lt_cv_sys_max_cmd_len=65536 # usable default for all BSDs fi # And add a safety zone lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` ;; interix*) # We know the value 262144 and hardcode it with a safety zone (like BSD) lt_cv_sys_max_cmd_len=196608 ;; os2*) # The test takes a long time on OS/2. lt_cv_sys_max_cmd_len=8192 ;; osf*) # Dr. Hans Ekkehard Plesser reports seeing a kernel panic running configure # due to this test when exec_disable_arg_limit is 1 on Tru64. It is not # nice to cause kernel panics so lets avoid the loop below. # First set a reasonable default. lt_cv_sys_max_cmd_len=16384 # if test -x /sbin/sysconfig; then case `/sbin/sysconfig -q proc exec_disable_arg_limit` in *1*) lt_cv_sys_max_cmd_len=-1 ;; esac fi ;; sco3.2v5*) lt_cv_sys_max_cmd_len=102400 ;; sysv5* | sco5v6* | sysv4.2uw2*) kargmax=`grep ARG_MAX /etc/conf/cf.d/stune 2>/dev/null` if test -n "$kargmax"; then lt_cv_sys_max_cmd_len=`echo $kargmax | $SED 's/.*[ ]//'` else lt_cv_sys_max_cmd_len=32768 fi ;; *) lt_cv_sys_max_cmd_len=`(getconf ARG_MAX) 2> /dev/null` if test -n "$lt_cv_sys_max_cmd_len" && \ test undefined != "$lt_cv_sys_max_cmd_len"; then lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` else # Make teststring a little bigger before we do anything with it. # a 1K string should be a reasonable start. for i in 1 2 3 4 5 6 7 8; do teststring=$teststring$teststring done SHELL=${SHELL-${CONFIG_SHELL-/bin/sh}} # If test is not a shell built-in, we'll probably end up computing a # maximum length that is only half of the actual maximum length, but # we can't tell. while { test X`env echo "$teststring$teststring" 2>/dev/null` \ = "X$teststring$teststring"; } >/dev/null 2>&1 && test 17 != "$i" # 1/2 MB should be enough do i=`expr $i + 1` teststring=$teststring$teststring done # Only check the string length outside the loop. lt_cv_sys_max_cmd_len=`expr "X$teststring" : ".*" 2>&1` teststring= # Add a significant safety factor because C++ compilers can tack on # massive amounts of additional arguments before passing them to the # linker. It appears as though 1/2 is a usable value. lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 2` fi ;; esac fi if test -n "$lt_cv_sys_max_cmd_len"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_sys_max_cmd_len" >&5 printf "%s\n" "$lt_cv_sys_max_cmd_len" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none" >&5 printf "%s\n" "none" >&6; } fi max_cmd_len=$lt_cv_sys_max_cmd_len : ${CP="cp -f"} : ${MV="mv -f"} : ${RM="rm -f"} if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then lt_unset=unset else lt_unset=false fi # test EBCDIC or ASCII case `echo X|tr X '\101'` in A) # ASCII based system # \n is not interpreted correctly by Solaris 8 /usr/ucb/tr lt_SP2NL='tr \040 \012' lt_NL2SP='tr \015\012 \040\040' ;; *) # EBCDIC based system lt_SP2NL='tr \100 \n' lt_NL2SP='tr \r\n \100\100' ;; esac { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking how to convert $build file names to $host format" >&5 printf %s "checking how to convert $build file names to $host format... " >&6; } if test ${lt_cv_to_host_file_cmd+y} then : printf %s "(cached) " >&6 else $as_nop case $host in *-*-mingw* ) case $build in *-*-mingw* ) # actually msys lt_cv_to_host_file_cmd=func_convert_file_msys_to_w32 ;; *-*-cygwin* ) lt_cv_to_host_file_cmd=func_convert_file_cygwin_to_w32 ;; * ) # otherwise, assume *nix lt_cv_to_host_file_cmd=func_convert_file_nix_to_w32 ;; esac ;; *-*-cygwin* ) case $build in *-*-mingw* ) # actually msys lt_cv_to_host_file_cmd=func_convert_file_msys_to_cygwin ;; *-*-cygwin* ) lt_cv_to_host_file_cmd=func_convert_file_noop ;; * ) # otherwise, assume *nix lt_cv_to_host_file_cmd=func_convert_file_nix_to_cygwin ;; esac ;; * ) # unhandled hosts (and "normal" native builds) lt_cv_to_host_file_cmd=func_convert_file_noop ;; esac fi to_host_file_cmd=$lt_cv_to_host_file_cmd { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_to_host_file_cmd" >&5 printf "%s\n" "$lt_cv_to_host_file_cmd" >&6; } { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking how to convert $build file names to toolchain format" >&5 printf %s "checking how to convert $build file names to toolchain format... " >&6; } if test ${lt_cv_to_tool_file_cmd+y} then : printf %s "(cached) " >&6 else $as_nop #assume ordinary cross tools, or native build. lt_cv_to_tool_file_cmd=func_convert_file_noop case $host in *-*-mingw* ) case $build in *-*-mingw* ) # actually msys lt_cv_to_tool_file_cmd=func_convert_file_msys_to_w32 ;; esac ;; esac fi to_tool_file_cmd=$lt_cv_to_tool_file_cmd { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_to_tool_file_cmd" >&5 printf "%s\n" "$lt_cv_to_tool_file_cmd" >&6; } { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $LD option to reload object files" >&5 printf %s "checking for $LD option to reload object files... " >&6; } if test ${lt_cv_ld_reload_flag+y} then : printf %s "(cached) " >&6 else $as_nop lt_cv_ld_reload_flag='-r' fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_reload_flag" >&5 printf "%s\n" "$lt_cv_ld_reload_flag" >&6; } reload_flag=$lt_cv_ld_reload_flag case $reload_flag in "" | " "*) ;; *) reload_flag=" $reload_flag" ;; esac reload_cmds='$LD$reload_flag -o $output$reload_objs' case $host_os in cygwin* | mingw* | pw32* | cegcc*) if test yes != "$GCC"; then reload_cmds=false fi ;; darwin*) if test yes = "$GCC"; then reload_cmds='$LTCC $LTCFLAGS -nostdlib $wl-r -o $output$reload_objs' else reload_cmds='$LD$reload_flag -o $output$reload_objs' fi ;; esac if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}file", so it can be a program name with args. set dummy ${ac_tool_prefix}file; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_FILECMD+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$FILECMD"; then ac_cv_prog_FILECMD="$FILECMD" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_FILECMD="${ac_tool_prefix}file" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi FILECMD=$ac_cv_prog_FILECMD if test -n "$FILECMD"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $FILECMD" >&5 printf "%s\n" "$FILECMD" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi fi if test -z "$ac_cv_prog_FILECMD"; then ac_ct_FILECMD=$FILECMD # Extract the first word of "file", so it can be a program name with args. set dummy file; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_ac_ct_FILECMD+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$ac_ct_FILECMD"; then ac_cv_prog_ac_ct_FILECMD="$ac_ct_FILECMD" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_FILECMD="file" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_FILECMD=$ac_cv_prog_ac_ct_FILECMD if test -n "$ac_ct_FILECMD"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_FILECMD" >&5 printf "%s\n" "$ac_ct_FILECMD" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi if test "x$ac_ct_FILECMD" = x; then FILECMD=":" else case $cross_compiling:$ac_tool_warned in yes:) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac FILECMD=$ac_ct_FILECMD fi else FILECMD="$ac_cv_prog_FILECMD" fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}objdump", so it can be a program name with args. set dummy ${ac_tool_prefix}objdump; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_OBJDUMP+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$OBJDUMP"; then ac_cv_prog_OBJDUMP="$OBJDUMP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_OBJDUMP="${ac_tool_prefix}objdump" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi OBJDUMP=$ac_cv_prog_OBJDUMP if test -n "$OBJDUMP"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $OBJDUMP" >&5 printf "%s\n" "$OBJDUMP" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi fi if test -z "$ac_cv_prog_OBJDUMP"; then ac_ct_OBJDUMP=$OBJDUMP # Extract the first word of "objdump", so it can be a program name with args. set dummy objdump; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_ac_ct_OBJDUMP+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$ac_ct_OBJDUMP"; then ac_cv_prog_ac_ct_OBJDUMP="$ac_ct_OBJDUMP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_OBJDUMP="objdump" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_OBJDUMP=$ac_cv_prog_ac_ct_OBJDUMP if test -n "$ac_ct_OBJDUMP"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OBJDUMP" >&5 printf "%s\n" "$ac_ct_OBJDUMP" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi if test "x$ac_ct_OBJDUMP" = x; then OBJDUMP="false" else case $cross_compiling:$ac_tool_warned in yes:) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac OBJDUMP=$ac_ct_OBJDUMP fi else OBJDUMP="$ac_cv_prog_OBJDUMP" fi test -z "$OBJDUMP" && OBJDUMP=objdump { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking how to recognize dependent libraries" >&5 printf %s "checking how to recognize dependent libraries... " >&6; } if test ${lt_cv_deplibs_check_method+y} then : printf %s "(cached) " >&6 else $as_nop lt_cv_file_magic_cmd='$MAGIC_CMD' lt_cv_file_magic_test_file= lt_cv_deplibs_check_method='unknown' # Need to set the preceding variable on all platforms that support # interlibrary dependencies. # 'none' -- dependencies not supported. # 'unknown' -- same as none, but documents that we really don't know. # 'pass_all' -- all dependencies passed with no checks. # 'test_compile' -- check by making test program. # 'file_magic [[regex]]' -- check by looking for files in library path # that responds to the $file_magic_cmd with a given extended regex. # If you have 'file' or equivalent on your system and you're not sure # whether 'pass_all' will *always* work, you probably want this one. case $host_os in aix[4-9]*) lt_cv_deplibs_check_method=pass_all ;; beos*) lt_cv_deplibs_check_method=pass_all ;; bsdi[45]*) lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib)' lt_cv_file_magic_cmd='$FILECMD -L' lt_cv_file_magic_test_file=/shlib/libc.so ;; cygwin*) # func_win32_libid is a shell function defined in ltmain.sh lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL' lt_cv_file_magic_cmd='func_win32_libid' ;; mingw* | pw32*) # Base MSYS/MinGW do not provide the 'file' command needed by # func_win32_libid shell function, so use a weaker test based on 'objdump', # unless we find 'file', for example because we are cross-compiling. if ( file / ) >/dev/null 2>&1; then lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL' lt_cv_file_magic_cmd='func_win32_libid' else # Keep this pattern in sync with the one in func_win32_libid. lt_cv_deplibs_check_method='file_magic file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)' lt_cv_file_magic_cmd='$OBJDUMP -f' fi ;; cegcc*) # use the weaker test based on 'objdump'. See mingw*. lt_cv_deplibs_check_method='file_magic file format pe-arm-.*little(.*architecture: arm)?' lt_cv_file_magic_cmd='$OBJDUMP -f' ;; darwin* | rhapsody*) lt_cv_deplibs_check_method=pass_all ;; freebsd* | dragonfly* | midnightbsd*) if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then case $host_cpu in i*86 ) # Not sure whether the presence of OpenBSD here was a mistake. # Let's accept both of them until this is cleared up. lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD|DragonFly)/i[3-9]86 (compact )?demand paged shared library' lt_cv_file_magic_cmd=$FILECMD lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*` ;; esac else lt_cv_deplibs_check_method=pass_all fi ;; haiku*) lt_cv_deplibs_check_method=pass_all ;; hpux10.20* | hpux11*) lt_cv_file_magic_cmd=$FILECMD case $host_cpu in ia64*) lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF-[0-9][0-9]) shared object file - IA64' lt_cv_file_magic_test_file=/usr/lib/hpux32/libc.so ;; hppa*64*) lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF[ -][0-9][0-9])(-bit)?( [LM]SB)? shared object( file)?[, -]* PA-RISC [0-9]\.[0-9]' lt_cv_file_magic_test_file=/usr/lib/pa20_64/libc.sl ;; *) lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|PA-RISC[0-9]\.[0-9]) shared library' lt_cv_file_magic_test_file=/usr/lib/libc.sl ;; esac ;; interix[3-9]*) # PIC code is broken on Interix 3.x, that's why |\.a not |_pic\.a here lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so|\.a)$' ;; irix5* | irix6* | nonstopux*) case $LD in *-32|*"-32 ") libmagic=32-bit;; *-n32|*"-n32 ") libmagic=N32;; *-64|*"-64 ") libmagic=64-bit;; *) libmagic=never-match;; esac lt_cv_deplibs_check_method=pass_all ;; # This must be glibc/ELF. linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) lt_cv_deplibs_check_method=pass_all ;; netbsd* | netbsdelf*-gnu) if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|_pic\.a)$' else lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so|_pic\.a)$' fi ;; newos6*) lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (executable|dynamic lib)' lt_cv_file_magic_cmd=$FILECMD lt_cv_file_magic_test_file=/usr/lib/libnls.so ;; *nto* | *qnx*) lt_cv_deplibs_check_method=pass_all ;; openbsd* | bitrig*) if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`"; then lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|\.so|_pic\.a)$' else lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|_pic\.a)$' fi ;; osf3* | osf4* | osf5*) lt_cv_deplibs_check_method=pass_all ;; rdos*) lt_cv_deplibs_check_method=pass_all ;; solaris*) lt_cv_deplibs_check_method=pass_all ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) lt_cv_deplibs_check_method=pass_all ;; sysv4 | sysv4.3*) case $host_vendor in motorola) lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib) M[0-9][0-9]* Version [0-9]' lt_cv_file_magic_test_file=`echo /usr/lib/libc.so*` ;; ncr) lt_cv_deplibs_check_method=pass_all ;; sequent) lt_cv_file_magic_cmd='/bin/file' lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [LM]SB (shared object|dynamic lib )' ;; sni) lt_cv_file_magic_cmd='/bin/file' lt_cv_deplibs_check_method="file_magic ELF [0-9][0-9]*-bit [LM]SB dynamic lib" lt_cv_file_magic_test_file=/lib/libc.so ;; siemens) lt_cv_deplibs_check_method=pass_all ;; pc) lt_cv_deplibs_check_method=pass_all ;; esac ;; tpf*) lt_cv_deplibs_check_method=pass_all ;; os2*) lt_cv_deplibs_check_method=pass_all ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_deplibs_check_method" >&5 printf "%s\n" "$lt_cv_deplibs_check_method" >&6; } file_magic_glob= want_nocaseglob=no if test "$build" = "$host"; then case $host_os in mingw* | pw32*) if ( shopt | grep nocaseglob ) >/dev/null 2>&1; then want_nocaseglob=yes else file_magic_glob=`echo aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZ | $SED -e "s/\(..\)/s\/[\1]\/[\1]\/g;/g"` fi ;; esac fi file_magic_cmd=$lt_cv_file_magic_cmd deplibs_check_method=$lt_cv_deplibs_check_method test -z "$deplibs_check_method" && deplibs_check_method=unknown if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}dlltool", so it can be a program name with args. set dummy ${ac_tool_prefix}dlltool; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_DLLTOOL+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$DLLTOOL"; then ac_cv_prog_DLLTOOL="$DLLTOOL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_DLLTOOL="${ac_tool_prefix}dlltool" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi DLLTOOL=$ac_cv_prog_DLLTOOL if test -n "$DLLTOOL"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $DLLTOOL" >&5 printf "%s\n" "$DLLTOOL" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi fi if test -z "$ac_cv_prog_DLLTOOL"; then ac_ct_DLLTOOL=$DLLTOOL # Extract the first word of "dlltool", so it can be a program name with args. set dummy dlltool; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_ac_ct_DLLTOOL+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$ac_ct_DLLTOOL"; then ac_cv_prog_ac_ct_DLLTOOL="$ac_ct_DLLTOOL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_DLLTOOL="dlltool" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_DLLTOOL=$ac_cv_prog_ac_ct_DLLTOOL if test -n "$ac_ct_DLLTOOL"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DLLTOOL" >&5 printf "%s\n" "$ac_ct_DLLTOOL" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi if test "x$ac_ct_DLLTOOL" = x; then DLLTOOL="false" else case $cross_compiling:$ac_tool_warned in yes:) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac DLLTOOL=$ac_ct_DLLTOOL fi else DLLTOOL="$ac_cv_prog_DLLTOOL" fi test -z "$DLLTOOL" && DLLTOOL=dlltool { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking how to associate runtime and link libraries" >&5 printf %s "checking how to associate runtime and link libraries... " >&6; } if test ${lt_cv_sharedlib_from_linklib_cmd+y} then : printf %s "(cached) " >&6 else $as_nop lt_cv_sharedlib_from_linklib_cmd='unknown' case $host_os in cygwin* | mingw* | pw32* | cegcc*) # two different shell functions defined in ltmain.sh; # decide which one to use based on capabilities of $DLLTOOL case `$DLLTOOL --help 2>&1` in *--identify-strict*) lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib ;; *) lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib_fallback ;; esac ;; *) # fallback: assume linklib IS sharedlib lt_cv_sharedlib_from_linklib_cmd=$ECHO ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_sharedlib_from_linklib_cmd" >&5 printf "%s\n" "$lt_cv_sharedlib_from_linklib_cmd" >&6; } sharedlib_from_linklib_cmd=$lt_cv_sharedlib_from_linklib_cmd test -z "$sharedlib_from_linklib_cmd" && sharedlib_from_linklib_cmd=$ECHO if test -n "$ac_tool_prefix"; then for ac_prog in ar do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_AR+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$AR"; then ac_cv_prog_AR="$AR" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_AR="$ac_tool_prefix$ac_prog" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi AR=$ac_cv_prog_AR if test -n "$AR"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $AR" >&5 printf "%s\n" "$AR" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi test -n "$AR" && break done fi if test -z "$AR"; then ac_ct_AR=$AR for ac_prog in ar do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_ac_ct_AR+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$ac_ct_AR"; then ac_cv_prog_ac_ct_AR="$ac_ct_AR" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_AR="$ac_prog" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_AR=$ac_cv_prog_ac_ct_AR if test -n "$ac_ct_AR"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_AR" >&5 printf "%s\n" "$ac_ct_AR" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi test -n "$ac_ct_AR" && break done if test "x$ac_ct_AR" = x; then AR="false" else case $cross_compiling:$ac_tool_warned in yes:) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac AR=$ac_ct_AR fi fi : ${AR=ar} # Use ARFLAGS variable as AR's operation code to sync the variable naming with # Automake. If both AR_FLAGS and ARFLAGS are specified, AR_FLAGS should have # higher priority because thats what people were doing historically (setting # ARFLAGS for automake and AR_FLAGS for libtool). FIXME: Make the AR_FLAGS # variable obsoleted/removed. test ${AR_FLAGS+y} || AR_FLAGS=${ARFLAGS-cr} lt_ar_flags=$AR_FLAGS # Make AR_FLAGS overridable by 'make ARFLAGS='. Don't try to run-time override # by AR_FLAGS because that was never working and AR_FLAGS is about to die. { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for archiver @FILE support" >&5 printf %s "checking for archiver @FILE support... " >&6; } if test ${lt_cv_ar_at_file+y} then : printf %s "(cached) " >&6 else $as_nop lt_cv_ar_at_file=no cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { ; return 0; } _ACEOF if ac_fn_cxx_try_compile "$LINENO" then : echo conftest.$ac_objext > conftest.lst lt_ar_try='$AR $AR_FLAGS libconftest.a @conftest.lst >&5' { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$lt_ar_try\""; } >&5 (eval $lt_ar_try) 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } if test 0 -eq "$ac_status"; then # Ensure the archiver fails upon bogus file names. rm -f conftest.$ac_objext libconftest.a { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$lt_ar_try\""; } >&5 (eval $lt_ar_try) 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } if test 0 -ne "$ac_status"; then lt_cv_ar_at_file=@ fi fi rm -f conftest.* libconftest.a fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ar_at_file" >&5 printf "%s\n" "$lt_cv_ar_at_file" >&6; } if test no = "$lt_cv_ar_at_file"; then archiver_list_spec= else archiver_list_spec=$lt_cv_ar_at_file fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args. set dummy ${ac_tool_prefix}strip; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_STRIP+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$STRIP"; then ac_cv_prog_STRIP="$STRIP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_STRIP="${ac_tool_prefix}strip" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi STRIP=$ac_cv_prog_STRIP if test -n "$STRIP"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5 printf "%s\n" "$STRIP" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi fi if test -z "$ac_cv_prog_STRIP"; then ac_ct_STRIP=$STRIP # Extract the first word of "strip", so it can be a program name with args. set dummy strip; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_ac_ct_STRIP+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$ac_ct_STRIP"; then ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_STRIP="strip" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP if test -n "$ac_ct_STRIP"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5 printf "%s\n" "$ac_ct_STRIP" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi if test "x$ac_ct_STRIP" = x; then STRIP=":" else case $cross_compiling:$ac_tool_warned in yes:) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac STRIP=$ac_ct_STRIP fi else STRIP="$ac_cv_prog_STRIP" fi test -z "$STRIP" && STRIP=: if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args. set dummy ${ac_tool_prefix}ranlib; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_RANLIB+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$RANLIB"; then ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi RANLIB=$ac_cv_prog_RANLIB if test -n "$RANLIB"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $RANLIB" >&5 printf "%s\n" "$RANLIB" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi fi if test -z "$ac_cv_prog_RANLIB"; then ac_ct_RANLIB=$RANLIB # Extract the first word of "ranlib", so it can be a program name with args. set dummy ranlib; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_ac_ct_RANLIB+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$ac_ct_RANLIB"; then ac_cv_prog_ac_ct_RANLIB="$ac_ct_RANLIB" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_RANLIB="ranlib" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB if test -n "$ac_ct_RANLIB"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_RANLIB" >&5 printf "%s\n" "$ac_ct_RANLIB" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi if test "x$ac_ct_RANLIB" = x; then RANLIB=":" else case $cross_compiling:$ac_tool_warned in yes:) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac RANLIB=$ac_ct_RANLIB fi else RANLIB="$ac_cv_prog_RANLIB" fi test -z "$RANLIB" && RANLIB=: # Determine commands to create old-style static archives. old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs' old_postinstall_cmds='chmod 644 $oldlib' old_postuninstall_cmds= if test -n "$RANLIB"; then case $host_os in bitrig* | openbsd*) old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB -t \$tool_oldlib" ;; *) old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB \$tool_oldlib" ;; esac old_archive_cmds="$old_archive_cmds~\$RANLIB \$tool_oldlib" fi case $host_os in darwin*) lock_old_archive_extraction=yes ;; *) lock_old_archive_extraction=no ;; esac # If no C compiler was specified, use CC. LTCC=${LTCC-"$CC"} # If no C compiler flags were specified, use CFLAGS. LTCFLAGS=${LTCFLAGS-"$CFLAGS"} # Allow CC to be a program name with arguments. compiler=$CC # Check for command to grab the raw symbol name followed by C symbol from nm. { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking command to parse $NM output from $compiler object" >&5 printf %s "checking command to parse $NM output from $compiler object... " >&6; } if test ${lt_cv_sys_global_symbol_pipe+y} then : printf %s "(cached) " >&6 else $as_nop # These are sane defaults that work on at least a few old systems. # [They come from Ultrix. What could be older than Ultrix?!! ;)] # Character class describing NM global symbol codes. symcode='[BCDEGRST]' # Regexp to match symbols that can be accessed directly from C. sympat='\([_A-Za-z][_A-Za-z0-9]*\)' # Define system-specific variables. case $host_os in aix*) symcode='[BCDT]' ;; cygwin* | mingw* | pw32* | cegcc*) symcode='[ABCDGISTW]' ;; hpux*) if test ia64 = "$host_cpu"; then symcode='[ABCDEGRST]' fi ;; irix* | nonstopux*) symcode='[BCDEGRST]' ;; osf*) symcode='[BCDEGQRST]' ;; solaris*) symcode='[BDRT]' ;; sco3.2v5*) symcode='[DT]' ;; sysv4.2uw2*) symcode='[DT]' ;; sysv5* | sco5v6* | unixware* | OpenUNIX*) symcode='[ABDT]' ;; sysv4) symcode='[DFNSTU]' ;; esac # If we're using GNU nm, then use its standard symbol codes. case `$NM -V 2>&1` in *GNU* | *'with BFD'*) symcode='[ABCDGIRSTW]' ;; esac if test "$lt_cv_nm_interface" = "MS dumpbin"; then # Gets list of data symbols to import. lt_cv_sys_global_symbol_to_import="$SED -n -e 's/^I .* \(.*\)$/\1/p'" # Adjust the below global symbol transforms to fixup imported variables. lt_cdecl_hook=" -e 's/^I .* \(.*\)$/extern __declspec(dllimport) char \1;/p'" lt_c_name_hook=" -e 's/^I .* \(.*\)$/ {\"\1\", (void *) 0},/p'" lt_c_name_lib_hook="\ -e 's/^I .* \(lib.*\)$/ {\"\1\", (void *) 0},/p'\ -e 's/^I .* \(.*\)$/ {\"lib\1\", (void *) 0},/p'" else # Disable hooks by default. lt_cv_sys_global_symbol_to_import= lt_cdecl_hook= lt_c_name_hook= lt_c_name_lib_hook= fi # Transform an extracted symbol line into a proper C declaration. # Some systems (esp. on ia64) link data and code symbols differently, # so use this general approach. lt_cv_sys_global_symbol_to_cdecl="$SED -n"\ $lt_cdecl_hook\ " -e 's/^T .* \(.*\)$/extern int \1();/p'"\ " -e 's/^$symcode$symcode* .* \(.*\)$/extern char \1;/p'" # Transform an extracted symbol line into symbol name and symbol address lt_cv_sys_global_symbol_to_c_name_address="$SED -n"\ $lt_c_name_hook\ " -e 's/^: \(.*\) .*$/ {\"\1\", (void *) 0},/p'"\ " -e 's/^$symcode$symcode* .* \(.*\)$/ {\"\1\", (void *) \&\1},/p'" # Transform an extracted symbol line into symbol name with lib prefix and # symbol address. lt_cv_sys_global_symbol_to_c_name_address_lib_prefix="$SED -n"\ $lt_c_name_lib_hook\ " -e 's/^: \(.*\) .*$/ {\"\1\", (void *) 0},/p'"\ " -e 's/^$symcode$symcode* .* \(lib.*\)$/ {\"\1\", (void *) \&\1},/p'"\ " -e 's/^$symcode$symcode* .* \(.*\)$/ {\"lib\1\", (void *) \&\1},/p'" # Handle CRLF in mingw tool chain opt_cr= case $build_os in mingw*) opt_cr=`$ECHO 'x\{0,1\}' | tr x '\015'` # option cr in regexp ;; esac # Try without a prefix underscore, then with it. for ac_symprfx in "" "_"; do # Transform symcode, sympat, and symprfx into a raw symbol and a C symbol. symxfrm="\\1 $ac_symprfx\\2 \\2" # Write the raw and C identifiers. if test "$lt_cv_nm_interface" = "MS dumpbin"; then # Fake it for dumpbin and say T for any non-static function, # D for any global variable and I for any imported variable. # Also find C++ and __fastcall symbols from MSVC++ or ICC, # which start with @ or ?. lt_cv_sys_global_symbol_pipe="$AWK '"\ " {last_section=section; section=\$ 3};"\ " /^COFF SYMBOL TABLE/{for(i in hide) delete hide[i]};"\ " /Section length .*#relocs.*(pick any)/{hide[last_section]=1};"\ " /^ *Symbol name *: /{split(\$ 0,sn,\":\"); si=substr(sn[2],2)};"\ " /^ *Type *: code/{print \"T\",si,substr(si,length(prfx))};"\ " /^ *Type *: data/{print \"I\",si,substr(si,length(prfx))};"\ " \$ 0!~/External *\|/{next};"\ " / 0+ UNDEF /{next}; / UNDEF \([^|]\)*()/{next};"\ " {if(hide[section]) next};"\ " {f=\"D\"}; \$ 0~/\(\).*\|/{f=\"T\"};"\ " {split(\$ 0,a,/\||\r/); split(a[2],s)};"\ " s[1]~/^[@?]/{print f,s[1],s[1]; next};"\ " s[1]~prfx {split(s[1],t,\"@\"); print f,t[1],substr(t[1],length(prfx))}"\ " ' prfx=^$ac_symprfx" else lt_cv_sys_global_symbol_pipe="$SED -n -e 's/^.*[ ]\($symcode$symcode*\)[ ][ ]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'" fi lt_cv_sys_global_symbol_pipe="$lt_cv_sys_global_symbol_pipe | $SED '/ __gnu_lto/d'" # Check to see that the pipe works correctly. pipe_works=no rm -f conftest* cat > conftest.$ac_ext <<_LT_EOF #ifdef __cplusplus extern "C" { #endif char nm_test_var; void nm_test_func(void); void nm_test_func(void){} #ifdef __cplusplus } #endif int main(){nm_test_var='a';nm_test_func();return(0);} _LT_EOF if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then # Now try to grab the symbols. nlist=conftest.nm $ECHO "$as_me:$LINENO: $NM conftest.$ac_objext | $lt_cv_sys_global_symbol_pipe > $nlist" >&5 if eval "$NM" conftest.$ac_objext \| "$lt_cv_sys_global_symbol_pipe" \> $nlist 2>&5 && test -s "$nlist"; then # Try sorting and uniquifying the output. if sort "$nlist" | uniq > "$nlist"T; then mv -f "$nlist"T "$nlist" else rm -f "$nlist"T fi # Make sure that we snagged all the symbols we need. if $GREP ' nm_test_var$' "$nlist" >/dev/null; then if $GREP ' nm_test_func$' "$nlist" >/dev/null; then cat <<_LT_EOF > conftest.$ac_ext /* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and tests. */ #if defined _WIN32 || defined __CYGWIN__ || defined _WIN32_WCE /* DATA imports from DLLs on WIN32 can't be const, because runtime relocations are performed -- see ld's documentation on pseudo-relocs. */ # define LT_DLSYM_CONST #elif defined __osf__ /* This system does not cope well with relocations in const data. */ # define LT_DLSYM_CONST #else # define LT_DLSYM_CONST const #endif #ifdef __cplusplus extern "C" { #endif _LT_EOF # Now generate the symbol file. eval "$lt_cv_sys_global_symbol_to_cdecl"' < "$nlist" | $GREP -v main >> conftest.$ac_ext' cat <<_LT_EOF >> conftest.$ac_ext /* The mapping between symbol names and symbols. */ LT_DLSYM_CONST struct { const char *name; void *address; } lt__PROGRAM__LTX_preloaded_symbols[] = { { "@PROGRAM@", (void *) 0 }, _LT_EOF $SED "s/^$symcode$symcode* .* \(.*\)$/ {\"\1\", (void *) \&\1},/" < "$nlist" | $GREP -v main >> conftest.$ac_ext cat <<\_LT_EOF >> conftest.$ac_ext {0, (void *) 0} }; /* This works around a problem in FreeBSD linker */ #ifdef FREEBSD_WORKAROUND static const void *lt_preloaded_setup() { return lt__PROGRAM__LTX_preloaded_symbols; } #endif #ifdef __cplusplus } #endif _LT_EOF # Now try linking the two files. mv conftest.$ac_objext conftstm.$ac_objext lt_globsym_save_LIBS=$LIBS lt_globsym_save_CFLAGS=$CFLAGS LIBS=conftstm.$ac_objext CFLAGS="$CFLAGS$lt_prog_compiler_no_builtin_flag" if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 (eval $ac_link) 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && test -s conftest$ac_exeext; then pipe_works=yes fi LIBS=$lt_globsym_save_LIBS CFLAGS=$lt_globsym_save_CFLAGS else echo "cannot find nm_test_func in $nlist" >&5 fi else echo "cannot find nm_test_var in $nlist" >&5 fi else echo "cannot run $lt_cv_sys_global_symbol_pipe" >&5 fi else echo "$progname: failed program was:" >&5 cat conftest.$ac_ext >&5 fi rm -rf conftest* conftst* # Do not use the global_symbol_pipe unless it works. if test yes = "$pipe_works"; then break else lt_cv_sys_global_symbol_pipe= fi done fi if test -z "$lt_cv_sys_global_symbol_pipe"; then lt_cv_sys_global_symbol_to_cdecl= fi if test -z "$lt_cv_sys_global_symbol_pipe$lt_cv_sys_global_symbol_to_cdecl"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: failed" >&5 printf "%s\n" "failed" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: ok" >&5 printf "%s\n" "ok" >&6; } fi # Response file support. if test "$lt_cv_nm_interface" = "MS dumpbin"; then nm_file_list_spec='@' elif $NM --help 2>/dev/null | grep '[@]FILE' >/dev/null; then nm_file_list_spec='@' fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for sysroot" >&5 printf %s "checking for sysroot... " >&6; } # Check whether --with-sysroot was given. if test ${with_sysroot+y} then : withval=$with_sysroot; else $as_nop with_sysroot=no fi lt_sysroot= case $with_sysroot in #( yes) if test yes = "$GCC"; then lt_sysroot=`$CC --print-sysroot 2>/dev/null` fi ;; #( /*) lt_sysroot=`echo "$with_sysroot" | $SED -e "$sed_quote_subst"` ;; #( no|'') ;; #( *) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $with_sysroot" >&5 printf "%s\n" "$with_sysroot" >&6; } as_fn_error $? "The sysroot must be an absolute path." "$LINENO" 5 ;; esac { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: ${lt_sysroot:-no}" >&5 printf "%s\n" "${lt_sysroot:-no}" >&6; } { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for a working dd" >&5 printf %s "checking for a working dd... " >&6; } if test ${ac_cv_path_lt_DD+y} then : printf %s "(cached) " >&6 else $as_nop printf 0123456789abcdef0123456789abcdef >conftest.i cat conftest.i conftest.i >conftest2.i : ${lt_DD:=$DD} if test -z "$lt_DD"; then ac_path_lt_DD_found=false # Loop through the user's path and test for each of PROGNAME-LIST as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_prog in dd do for ac_exec_ext in '' $ac_executable_extensions; do ac_path_lt_DD="$as_dir$ac_prog$ac_exec_ext" as_fn_executable_p "$ac_path_lt_DD" || continue if "$ac_path_lt_DD" bs=32 count=1 conftest.out 2>/dev/null; then cmp -s conftest.i conftest.out \ && ac_cv_path_lt_DD="$ac_path_lt_DD" ac_path_lt_DD_found=: fi $ac_path_lt_DD_found && break 3 done done done IFS=$as_save_IFS if test -z "$ac_cv_path_lt_DD"; then : fi else ac_cv_path_lt_DD=$lt_DD fi rm -f conftest.i conftest2.i conftest.out fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_lt_DD" >&5 printf "%s\n" "$ac_cv_path_lt_DD" >&6; } { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking how to truncate binary pipes" >&5 printf %s "checking how to truncate binary pipes... " >&6; } if test ${lt_cv_truncate_bin+y} then : printf %s "(cached) " >&6 else $as_nop printf 0123456789abcdef0123456789abcdef >conftest.i cat conftest.i conftest.i >conftest2.i lt_cv_truncate_bin= if "$ac_cv_path_lt_DD" bs=32 count=1 conftest.out 2>/dev/null; then cmp -s conftest.i conftest.out \ && lt_cv_truncate_bin="$ac_cv_path_lt_DD bs=4096 count=1" fi rm -f conftest.i conftest2.i conftest.out test -z "$lt_cv_truncate_bin" && lt_cv_truncate_bin="$SED -e 4q" fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_truncate_bin" >&5 printf "%s\n" "$lt_cv_truncate_bin" >&6; } # Calculate cc_basename. Skip known compiler wrappers and cross-prefix. func_cc_basename () { for cc_temp in $*""; do case $cc_temp in compile | *[\\/]compile | ccache | *[\\/]ccache ) ;; distcc | *[\\/]distcc | purify | *[\\/]purify ) ;; \-*) ;; *) break;; esac done func_cc_basename_result=`$ECHO "$cc_temp" | $SED "s%.*/%%; s%^$host_alias-%%"` } # Check whether --enable-libtool-lock was given. if test ${enable_libtool_lock+y} then : enableval=$enable_libtool_lock; fi test no = "$enable_libtool_lock" || enable_libtool_lock=yes # Some flags need to be propagated to the compiler or linker for good # libtool support. case $host in ia64-*-hpux*) # Find out what ABI is being produced by ac_compile, and set mode # options accordingly. echo 'int i;' > conftest.$ac_ext if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then case `$FILECMD conftest.$ac_objext` in *ELF-32*) HPUX_IA64_MODE=32 ;; *ELF-64*) HPUX_IA64_MODE=64 ;; esac fi rm -rf conftest* ;; *-*-irix6*) # Find out what ABI is being produced by ac_compile, and set linker # options accordingly. echo '#line '$LINENO' "configure"' > conftest.$ac_ext if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then if test yes = "$lt_cv_prog_gnu_ld"; then case `$FILECMD conftest.$ac_objext` in *32-bit*) LD="${LD-ld} -melf32bsmip" ;; *N32*) LD="${LD-ld} -melf32bmipn32" ;; *64-bit*) LD="${LD-ld} -melf64bmip" ;; esac else case `$FILECMD conftest.$ac_objext` in *32-bit*) LD="${LD-ld} -32" ;; *N32*) LD="${LD-ld} -n32" ;; *64-bit*) LD="${LD-ld} -64" ;; esac fi fi rm -rf conftest* ;; mips64*-*linux*) # Find out what ABI is being produced by ac_compile, and set linker # options accordingly. echo '#line '$LINENO' "configure"' > conftest.$ac_ext if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then emul=elf case `$FILECMD conftest.$ac_objext` in *32-bit*) emul="${emul}32" ;; *64-bit*) emul="${emul}64" ;; esac case `$FILECMD conftest.$ac_objext` in *MSB*) emul="${emul}btsmip" ;; *LSB*) emul="${emul}ltsmip" ;; esac case `$FILECMD conftest.$ac_objext` in *N32*) emul="${emul}n32" ;; esac LD="${LD-ld} -m $emul" fi rm -rf conftest* ;; x86_64-*kfreebsd*-gnu|x86_64-*linux*|powerpc*-*linux*| \ s390*-*linux*|s390*-*tpf*|sparc*-*linux*) # Find out what ABI is being produced by ac_compile, and set linker # options accordingly. Note that the listed cases only cover the # situations where additional linker options are needed (such as when # doing 32-bit compilation for a host where ld defaults to 64-bit, or # vice versa); the common cases where no linker options are needed do # not appear in the list. echo 'int i;' > conftest.$ac_ext if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then case `$FILECMD conftest.o` in *32-bit*) case $host in x86_64-*kfreebsd*-gnu) LD="${LD-ld} -m elf_i386_fbsd" ;; x86_64-*linux*) case `$FILECMD conftest.o` in *x86-64*) LD="${LD-ld} -m elf32_x86_64" ;; *) LD="${LD-ld} -m elf_i386" ;; esac ;; powerpc64le-*linux*) LD="${LD-ld} -m elf32lppclinux" ;; powerpc64-*linux*) LD="${LD-ld} -m elf32ppclinux" ;; s390x-*linux*) LD="${LD-ld} -m elf_s390" ;; sparc64-*linux*) LD="${LD-ld} -m elf32_sparc" ;; esac ;; *64-bit*) case $host in x86_64-*kfreebsd*-gnu) LD="${LD-ld} -m elf_x86_64_fbsd" ;; x86_64-*linux*) LD="${LD-ld} -m elf_x86_64" ;; powerpcle-*linux*) LD="${LD-ld} -m elf64lppc" ;; powerpc-*linux*) LD="${LD-ld} -m elf64ppc" ;; s390*-*linux*|s390*-*tpf*) LD="${LD-ld} -m elf64_s390" ;; sparc*-*linux*) LD="${LD-ld} -m elf64_sparc" ;; esac ;; esac fi rm -rf conftest* ;; *-*-sco3.2v5*) # On SCO OpenServer 5, we need -belf to get full-featured binaries. SAVE_CFLAGS=$CFLAGS CFLAGS="$CFLAGS -belf" { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the C compiler needs -belf" >&5 printf %s "checking whether the C compiler needs -belf... " >&6; } if test ${lt_cv_cc_needs_belf+y} then : printf %s "(cached) " >&6 else $as_nop ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : lt_cv_cc_needs_belf=yes else $as_nop lt_cv_cc_needs_belf=no fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_cc_needs_belf" >&5 printf "%s\n" "$lt_cv_cc_needs_belf" >&6; } if test yes != "$lt_cv_cc_needs_belf"; then # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf CFLAGS=$SAVE_CFLAGS fi ;; *-*solaris*) # Find out what ABI is being produced by ac_compile, and set linker # options accordingly. echo 'int i;' > conftest.$ac_ext if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then case `$FILECMD conftest.o` in *64-bit*) case $lt_cv_prog_gnu_ld in yes*) case $host in i?86-*-solaris*|x86_64-*-solaris*) LD="${LD-ld} -m elf_x86_64" ;; sparc*-*-solaris*) LD="${LD-ld} -m elf64_sparc" ;; esac # GNU ld 2.21 introduced _sol2 emulations. Use them if available. if ${LD-ld} -V | grep _sol2 >/dev/null 2>&1; then LD=${LD-ld}_sol2 fi ;; *) if ${LD-ld} -64 -r -o conftest2.o conftest.o >/dev/null 2>&1; then LD="${LD-ld} -64" fi ;; esac ;; esac fi rm -rf conftest* ;; esac need_locks=$enable_libtool_lock if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}mt", so it can be a program name with args. set dummy ${ac_tool_prefix}mt; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_MANIFEST_TOOL+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$MANIFEST_TOOL"; then ac_cv_prog_MANIFEST_TOOL="$MANIFEST_TOOL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_MANIFEST_TOOL="${ac_tool_prefix}mt" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi MANIFEST_TOOL=$ac_cv_prog_MANIFEST_TOOL if test -n "$MANIFEST_TOOL"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $MANIFEST_TOOL" >&5 printf "%s\n" "$MANIFEST_TOOL" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi fi if test -z "$ac_cv_prog_MANIFEST_TOOL"; then ac_ct_MANIFEST_TOOL=$MANIFEST_TOOL # Extract the first word of "mt", so it can be a program name with args. set dummy mt; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_ac_ct_MANIFEST_TOOL+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$ac_ct_MANIFEST_TOOL"; then ac_cv_prog_ac_ct_MANIFEST_TOOL="$ac_ct_MANIFEST_TOOL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_MANIFEST_TOOL="mt" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_MANIFEST_TOOL=$ac_cv_prog_ac_ct_MANIFEST_TOOL if test -n "$ac_ct_MANIFEST_TOOL"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_MANIFEST_TOOL" >&5 printf "%s\n" "$ac_ct_MANIFEST_TOOL" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi if test "x$ac_ct_MANIFEST_TOOL" = x; then MANIFEST_TOOL=":" else case $cross_compiling:$ac_tool_warned in yes:) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac MANIFEST_TOOL=$ac_ct_MANIFEST_TOOL fi else MANIFEST_TOOL="$ac_cv_prog_MANIFEST_TOOL" fi test -z "$MANIFEST_TOOL" && MANIFEST_TOOL=mt { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if $MANIFEST_TOOL is a manifest tool" >&5 printf %s "checking if $MANIFEST_TOOL is a manifest tool... " >&6; } if test ${lt_cv_path_mainfest_tool+y} then : printf %s "(cached) " >&6 else $as_nop lt_cv_path_mainfest_tool=no echo "$as_me:$LINENO: $MANIFEST_TOOL '-?'" >&5 $MANIFEST_TOOL '-?' 2>conftest.err > conftest.out cat conftest.err >&5 if $GREP 'Manifest Tool' conftest.out > /dev/null; then lt_cv_path_mainfest_tool=yes fi rm -f conftest* fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_path_mainfest_tool" >&5 printf "%s\n" "$lt_cv_path_mainfest_tool" >&6; } if test yes != "$lt_cv_path_mainfest_tool"; then MANIFEST_TOOL=: fi case $host_os in rhapsody* | darwin*) if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}dsymutil", so it can be a program name with args. set dummy ${ac_tool_prefix}dsymutil; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_DSYMUTIL+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$DSYMUTIL"; then ac_cv_prog_DSYMUTIL="$DSYMUTIL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_DSYMUTIL="${ac_tool_prefix}dsymutil" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi DSYMUTIL=$ac_cv_prog_DSYMUTIL if test -n "$DSYMUTIL"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $DSYMUTIL" >&5 printf "%s\n" "$DSYMUTIL" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi fi if test -z "$ac_cv_prog_DSYMUTIL"; then ac_ct_DSYMUTIL=$DSYMUTIL # Extract the first word of "dsymutil", so it can be a program name with args. set dummy dsymutil; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_ac_ct_DSYMUTIL+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$ac_ct_DSYMUTIL"; then ac_cv_prog_ac_ct_DSYMUTIL="$ac_ct_DSYMUTIL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_DSYMUTIL="dsymutil" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_DSYMUTIL=$ac_cv_prog_ac_ct_DSYMUTIL if test -n "$ac_ct_DSYMUTIL"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DSYMUTIL" >&5 printf "%s\n" "$ac_ct_DSYMUTIL" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi if test "x$ac_ct_DSYMUTIL" = x; then DSYMUTIL=":" else case $cross_compiling:$ac_tool_warned in yes:) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac DSYMUTIL=$ac_ct_DSYMUTIL fi else DSYMUTIL="$ac_cv_prog_DSYMUTIL" fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}nmedit", so it can be a program name with args. set dummy ${ac_tool_prefix}nmedit; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_NMEDIT+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$NMEDIT"; then ac_cv_prog_NMEDIT="$NMEDIT" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_NMEDIT="${ac_tool_prefix}nmedit" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi NMEDIT=$ac_cv_prog_NMEDIT if test -n "$NMEDIT"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $NMEDIT" >&5 printf "%s\n" "$NMEDIT" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi fi if test -z "$ac_cv_prog_NMEDIT"; then ac_ct_NMEDIT=$NMEDIT # Extract the first word of "nmedit", so it can be a program name with args. set dummy nmedit; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_ac_ct_NMEDIT+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$ac_ct_NMEDIT"; then ac_cv_prog_ac_ct_NMEDIT="$ac_ct_NMEDIT" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_NMEDIT="nmedit" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_NMEDIT=$ac_cv_prog_ac_ct_NMEDIT if test -n "$ac_ct_NMEDIT"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_NMEDIT" >&5 printf "%s\n" "$ac_ct_NMEDIT" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi if test "x$ac_ct_NMEDIT" = x; then NMEDIT=":" else case $cross_compiling:$ac_tool_warned in yes:) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac NMEDIT=$ac_ct_NMEDIT fi else NMEDIT="$ac_cv_prog_NMEDIT" fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}lipo", so it can be a program name with args. set dummy ${ac_tool_prefix}lipo; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_LIPO+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$LIPO"; then ac_cv_prog_LIPO="$LIPO" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_LIPO="${ac_tool_prefix}lipo" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi LIPO=$ac_cv_prog_LIPO if test -n "$LIPO"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $LIPO" >&5 printf "%s\n" "$LIPO" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi fi if test -z "$ac_cv_prog_LIPO"; then ac_ct_LIPO=$LIPO # Extract the first word of "lipo", so it can be a program name with args. set dummy lipo; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_ac_ct_LIPO+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$ac_ct_LIPO"; then ac_cv_prog_ac_ct_LIPO="$ac_ct_LIPO" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_LIPO="lipo" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_LIPO=$ac_cv_prog_ac_ct_LIPO if test -n "$ac_ct_LIPO"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_LIPO" >&5 printf "%s\n" "$ac_ct_LIPO" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi if test "x$ac_ct_LIPO" = x; then LIPO=":" else case $cross_compiling:$ac_tool_warned in yes:) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac LIPO=$ac_ct_LIPO fi else LIPO="$ac_cv_prog_LIPO" fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}otool", so it can be a program name with args. set dummy ${ac_tool_prefix}otool; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_OTOOL+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$OTOOL"; then ac_cv_prog_OTOOL="$OTOOL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_OTOOL="${ac_tool_prefix}otool" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi OTOOL=$ac_cv_prog_OTOOL if test -n "$OTOOL"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $OTOOL" >&5 printf "%s\n" "$OTOOL" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi fi if test -z "$ac_cv_prog_OTOOL"; then ac_ct_OTOOL=$OTOOL # Extract the first word of "otool", so it can be a program name with args. set dummy otool; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_ac_ct_OTOOL+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$ac_ct_OTOOL"; then ac_cv_prog_ac_ct_OTOOL="$ac_ct_OTOOL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_OTOOL="otool" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_OTOOL=$ac_cv_prog_ac_ct_OTOOL if test -n "$ac_ct_OTOOL"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OTOOL" >&5 printf "%s\n" "$ac_ct_OTOOL" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi if test "x$ac_ct_OTOOL" = x; then OTOOL=":" else case $cross_compiling:$ac_tool_warned in yes:) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac OTOOL=$ac_ct_OTOOL fi else OTOOL="$ac_cv_prog_OTOOL" fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}otool64", so it can be a program name with args. set dummy ${ac_tool_prefix}otool64; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_OTOOL64+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$OTOOL64"; then ac_cv_prog_OTOOL64="$OTOOL64" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_OTOOL64="${ac_tool_prefix}otool64" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi OTOOL64=$ac_cv_prog_OTOOL64 if test -n "$OTOOL64"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $OTOOL64" >&5 printf "%s\n" "$OTOOL64" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi fi if test -z "$ac_cv_prog_OTOOL64"; then ac_ct_OTOOL64=$OTOOL64 # Extract the first word of "otool64", so it can be a program name with args. set dummy otool64; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_ac_ct_OTOOL64+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$ac_ct_OTOOL64"; then ac_cv_prog_ac_ct_OTOOL64="$ac_ct_OTOOL64" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_OTOOL64="otool64" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_OTOOL64=$ac_cv_prog_ac_ct_OTOOL64 if test -n "$ac_ct_OTOOL64"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OTOOL64" >&5 printf "%s\n" "$ac_ct_OTOOL64" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi if test "x$ac_ct_OTOOL64" = x; then OTOOL64=":" else case $cross_compiling:$ac_tool_warned in yes:) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac OTOOL64=$ac_ct_OTOOL64 fi else OTOOL64="$ac_cv_prog_OTOOL64" fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for -single_module linker flag" >&5 printf %s "checking for -single_module linker flag... " >&6; } if test ${lt_cv_apple_cc_single_mod+y} then : printf %s "(cached) " >&6 else $as_nop lt_cv_apple_cc_single_mod=no if test -z "$LT_MULTI_MODULE"; then # By default we will add the -single_module flag. You can override # by either setting the environment variable LT_MULTI_MODULE # non-empty at configure time, or by adding -multi_module to the # link flags. rm -rf libconftest.dylib* echo "int foo(void){return 1;}" > conftest.c echo "$LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ -dynamiclib -Wl,-single_module conftest.c" >&5 $LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ -dynamiclib -Wl,-single_module conftest.c 2>conftest.err _lt_result=$? # If there is a non-empty error log, and "single_module" # appears in it, assume the flag caused a linker warning if test -s conftest.err && $GREP single_module conftest.err; then cat conftest.err >&5 # Otherwise, if the output was created with a 0 exit code from # the compiler, it worked. elif test -f libconftest.dylib && test 0 = "$_lt_result"; then lt_cv_apple_cc_single_mod=yes else cat conftest.err >&5 fi rm -rf libconftest.dylib* rm -f conftest.* fi fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_apple_cc_single_mod" >&5 printf "%s\n" "$lt_cv_apple_cc_single_mod" >&6; } { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for -exported_symbols_list linker flag" >&5 printf %s "checking for -exported_symbols_list linker flag... " >&6; } if test ${lt_cv_ld_exported_symbols_list+y} then : printf %s "(cached) " >&6 else $as_nop lt_cv_ld_exported_symbols_list=no save_LDFLAGS=$LDFLAGS echo "_main" > conftest.sym LDFLAGS="$LDFLAGS -Wl,-exported_symbols_list,conftest.sym" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : lt_cv_ld_exported_symbols_list=yes else $as_nop lt_cv_ld_exported_symbols_list=no fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext LDFLAGS=$save_LDFLAGS fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_exported_symbols_list" >&5 printf "%s\n" "$lt_cv_ld_exported_symbols_list" >&6; } { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for -force_load linker flag" >&5 printf %s "checking for -force_load linker flag... " >&6; } if test ${lt_cv_ld_force_load+y} then : printf %s "(cached) " >&6 else $as_nop lt_cv_ld_force_load=no cat > conftest.c << _LT_EOF int forced_loaded() { return 2;} _LT_EOF echo "$LTCC $LTCFLAGS -c -o conftest.o conftest.c" >&5 $LTCC $LTCFLAGS -c -o conftest.o conftest.c 2>&5 echo "$AR $AR_FLAGS libconftest.a conftest.o" >&5 $AR $AR_FLAGS libconftest.a conftest.o 2>&5 echo "$RANLIB libconftest.a" >&5 $RANLIB libconftest.a 2>&5 cat > conftest.c << _LT_EOF int main() { return 0;} _LT_EOF echo "$LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a" >&5 $LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a 2>conftest.err _lt_result=$? if test -s conftest.err && $GREP force_load conftest.err; then cat conftest.err >&5 elif test -f conftest && test 0 = "$_lt_result" && $GREP forced_load conftest >/dev/null 2>&1; then lt_cv_ld_force_load=yes else cat conftest.err >&5 fi rm -f conftest.err libconftest.a conftest conftest.c rm -rf conftest.dSYM fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_force_load" >&5 printf "%s\n" "$lt_cv_ld_force_load" >&6; } case $host_os in rhapsody* | darwin1.[012]) _lt_dar_allow_undefined='$wl-undefined ${wl}suppress' ;; darwin1.*) _lt_dar_allow_undefined='$wl-flat_namespace $wl-undefined ${wl}suppress' ;; darwin*) case $MACOSX_DEPLOYMENT_TARGET,$host in 10.[012],*|,*powerpc*-darwin[5-8]*) _lt_dar_allow_undefined='$wl-flat_namespace $wl-undefined ${wl}suppress' ;; *) _lt_dar_allow_undefined='$wl-undefined ${wl}dynamic_lookup' ;; esac ;; esac if test yes = "$lt_cv_apple_cc_single_mod"; then _lt_dar_single_mod='$single_module' fi if test yes = "$lt_cv_ld_exported_symbols_list"; then _lt_dar_export_syms=' $wl-exported_symbols_list,$output_objdir/$libname-symbols.expsym' else _lt_dar_export_syms='~$NMEDIT -s $output_objdir/$libname-symbols.expsym $lib' fi if test : != "$DSYMUTIL" && test no = "$lt_cv_ld_force_load"; then _lt_dsymutil='~$DSYMUTIL $lib || :' else _lt_dsymutil= fi ;; esac # func_munge_path_list VARIABLE PATH # ----------------------------------- # VARIABLE is name of variable containing _space_ separated list of # directories to be munged by the contents of PATH, which is string # having a format: # "DIR[:DIR]:" # string "DIR[ DIR]" will be prepended to VARIABLE # ":DIR[:DIR]" # string "DIR[ DIR]" will be appended to VARIABLE # "DIRP[:DIRP]::[DIRA:]DIRA" # string "DIRP[ DIRP]" will be prepended to VARIABLE and string # "DIRA[ DIRA]" will be appended to VARIABLE # "DIR[:DIR]" # VARIABLE will be replaced by "DIR[ DIR]" func_munge_path_list () { case x$2 in x) ;; *:) eval $1=\"`$ECHO $2 | $SED 's/:/ /g'` \$$1\" ;; x:*) eval $1=\"\$$1 `$ECHO $2 | $SED 's/:/ /g'`\" ;; *::*) eval $1=\"\$$1\ `$ECHO $2 | $SED -e 's/.*:://' -e 's/:/ /g'`\" eval $1=\"`$ECHO $2 | $SED -e 's/::.*//' -e 's/:/ /g'`\ \$$1\" ;; *) eval $1=\"`$ECHO $2 | $SED 's/:/ /g'`\" ;; esac } ac_header= ac_cache= for ac_item in $ac_header_c_list do if test $ac_cache; then ac_fn_c_check_header_compile "$LINENO" $ac_header ac_cv_header_$ac_cache "$ac_includes_default" if eval test \"x\$ac_cv_header_$ac_cache\" = xyes; then printf "%s\n" "#define $ac_item 1" >> confdefs.h fi ac_header= ac_cache= elif test $ac_header; then ac_cache=$ac_item else ac_header=$ac_item fi done if test $ac_cv_header_stdlib_h = yes && test $ac_cv_header_string_h = yes then : printf "%s\n" "#define STDC_HEADERS 1" >>confdefs.h fi ac_fn_c_check_header_compile "$LINENO" "dlfcn.h" "ac_cv_header_dlfcn_h" "$ac_includes_default " if test "x$ac_cv_header_dlfcn_h" = xyes then : printf "%s\n" "#define HAVE_DLFCN_H 1" >>confdefs.h fi func_stripname_cnf () { case $2 in .*) func_stripname_result=`$ECHO "$3" | $SED "s%^$1%%; s%\\\\$2\$%%"`;; *) func_stripname_result=`$ECHO "$3" | $SED "s%^$1%%; s%$2\$%%"`;; esac } # func_stripname_cnf # Set options enable_dlopen=no enable_win32_dll=no # Check whether --enable-shared was given. if test ${enable_shared+y} then : enableval=$enable_shared; p=${PACKAGE-default} case $enableval in yes) enable_shared=yes ;; no) enable_shared=no ;; *) enable_shared=no # Look at the argument we got. We use all the common list separators. lt_save_ifs=$IFS; IFS=$IFS$PATH_SEPARATOR, for pkg in $enableval; do IFS=$lt_save_ifs if test "X$pkg" = "X$p"; then enable_shared=yes fi done IFS=$lt_save_ifs ;; esac else $as_nop enable_shared=yes fi # Check whether --enable-static was given. if test ${enable_static+y} then : enableval=$enable_static; p=${PACKAGE-default} case $enableval in yes) enable_static=yes ;; no) enable_static=no ;; *) enable_static=no # Look at the argument we got. We use all the common list separators. lt_save_ifs=$IFS; IFS=$IFS$PATH_SEPARATOR, for pkg in $enableval; do IFS=$lt_save_ifs if test "X$pkg" = "X$p"; then enable_static=yes fi done IFS=$lt_save_ifs ;; esac else $as_nop enable_static=yes fi # Check whether --with-pic was given. if test ${with_pic+y} then : withval=$with_pic; lt_p=${PACKAGE-default} case $withval in yes|no) pic_mode=$withval ;; *) pic_mode=default # Look at the argument we got. We use all the common list separators. lt_save_ifs=$IFS; IFS=$IFS$PATH_SEPARATOR, for lt_pkg in $withval; do IFS=$lt_save_ifs if test "X$lt_pkg" = "X$lt_p"; then pic_mode=yes fi done IFS=$lt_save_ifs ;; esac else $as_nop pic_mode=default fi # Check whether --enable-fast-install was given. if test ${enable_fast_install+y} then : enableval=$enable_fast_install; p=${PACKAGE-default} case $enableval in yes) enable_fast_install=yes ;; no) enable_fast_install=no ;; *) enable_fast_install=no # Look at the argument we got. We use all the common list separators. lt_save_ifs=$IFS; IFS=$IFS$PATH_SEPARATOR, for pkg in $enableval; do IFS=$lt_save_ifs if test "X$pkg" = "X$p"; then enable_fast_install=yes fi done IFS=$lt_save_ifs ;; esac else $as_nop enable_fast_install=yes fi shared_archive_member_spec= case $host,$enable_shared in power*-*-aix[5-9]*,yes) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking which variant of shared library versioning to provide" >&5 printf %s "checking which variant of shared library versioning to provide... " >&6; } # Check whether --with-aix-soname was given. if test ${with_aix_soname+y} then : withval=$with_aix_soname; case $withval in aix|svr4|both) ;; *) as_fn_error $? "Unknown argument to --with-aix-soname" "$LINENO" 5 ;; esac lt_cv_with_aix_soname=$with_aix_soname else $as_nop if test ${lt_cv_with_aix_soname+y} then : printf %s "(cached) " >&6 else $as_nop lt_cv_with_aix_soname=aix fi with_aix_soname=$lt_cv_with_aix_soname fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $with_aix_soname" >&5 printf "%s\n" "$with_aix_soname" >&6; } if test aix != "$with_aix_soname"; then # For the AIX way of multilib, we name the shared archive member # based on the bitwidth used, traditionally 'shr.o' or 'shr_64.o', # and 'shr.imp' or 'shr_64.imp', respectively, for the Import File. # Even when GNU compilers ignore OBJECT_MODE but need '-maix64' flag, # the AIX toolchain works better with OBJECT_MODE set (default 32). if test 64 = "${OBJECT_MODE-32}"; then shared_archive_member_spec=shr_64 else shared_archive_member_spec=shr fi fi ;; *) with_aix_soname=aix ;; esac # This can be used to rebuild libtool when needed LIBTOOL_DEPS=$ltmain # Always use our own libtool. LIBTOOL='$(SHELL) $(top_builddir)/libtool' test -z "$LN_S" && LN_S="ln -s" if test -n "${ZSH_VERSION+set}"; then setopt NO_GLOB_SUBST fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for objdir" >&5 printf %s "checking for objdir... " >&6; } if test ${lt_cv_objdir+y} then : printf %s "(cached) " >&6 else $as_nop rm -f .libs 2>/dev/null mkdir .libs 2>/dev/null if test -d .libs; then lt_cv_objdir=.libs else # MS-DOS does not allow filenames that begin with a dot. lt_cv_objdir=_libs fi rmdir .libs 2>/dev/null fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_objdir" >&5 printf "%s\n" "$lt_cv_objdir" >&6; } objdir=$lt_cv_objdir printf "%s\n" "#define LT_OBJDIR \"$lt_cv_objdir/\"" >>confdefs.h case $host_os in aix3*) # AIX sometimes has problems with the GCC collect2 program. For some # reason, if we set the COLLECT_NAMES environment variable, the problems # vanish in a puff of smoke. if test set != "${COLLECT_NAMES+set}"; then COLLECT_NAMES= export COLLECT_NAMES fi ;; esac # Global variables: ofile=libtool can_build_shared=yes # All known linkers require a '.a' archive for static linking (except MSVC and # ICC, which need '.lib'). libext=a with_gnu_ld=$lt_cv_prog_gnu_ld old_CC=$CC old_CFLAGS=$CFLAGS # Set sane defaults for various variables test -z "$CC" && CC=cc test -z "$LTCC" && LTCC=$CC test -z "$LTCFLAGS" && LTCFLAGS=$CFLAGS test -z "$LD" && LD=ld test -z "$ac_objext" && ac_objext=o func_cc_basename $compiler cc_basename=$func_cc_basename_result # Only perform the check for file, if the check method requires it test -z "$MAGIC_CMD" && MAGIC_CMD=file case $deplibs_check_method in file_magic*) if test "$file_magic_cmd" = '$MAGIC_CMD'; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for ${ac_tool_prefix}file" >&5 printf %s "checking for ${ac_tool_prefix}file... " >&6; } if test ${lt_cv_path_MAGIC_CMD+y} then : printf %s "(cached) " >&6 else $as_nop case $MAGIC_CMD in [\\/*] | ?:[\\/]*) lt_cv_path_MAGIC_CMD=$MAGIC_CMD # Let the user override the test with a path. ;; *) lt_save_MAGIC_CMD=$MAGIC_CMD lt_save_ifs=$IFS; IFS=$PATH_SEPARATOR ac_dummy="/usr/bin$PATH_SEPARATOR$PATH" for ac_dir in $ac_dummy; do IFS=$lt_save_ifs test -z "$ac_dir" && ac_dir=. if test -f "$ac_dir/${ac_tool_prefix}file"; then lt_cv_path_MAGIC_CMD=$ac_dir/"${ac_tool_prefix}file" if test -n "$file_magic_test_file"; then case $deplibs_check_method in "file_magic "*) file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"` MAGIC_CMD=$lt_cv_path_MAGIC_CMD if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null | $EGREP "$file_magic_regex" > /dev/null; then : else cat <<_LT_EOF 1>&2 *** Warning: the command libtool uses to detect shared libraries, *** $file_magic_cmd, produces output that libtool cannot recognize. *** The result is that libtool may fail to recognize shared libraries *** as such. This will affect the creation of libtool libraries that *** depend on shared libraries, but programs linked with such libtool *** libraries will work regardless of this problem. Nevertheless, you *** may want to report the problem to your system manager and/or to *** bug-libtool@gnu.org _LT_EOF fi ;; esac fi break fi done IFS=$lt_save_ifs MAGIC_CMD=$lt_save_MAGIC_CMD ;; esac fi MAGIC_CMD=$lt_cv_path_MAGIC_CMD if test -n "$MAGIC_CMD"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $MAGIC_CMD" >&5 printf "%s\n" "$MAGIC_CMD" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi if test -z "$lt_cv_path_MAGIC_CMD"; then if test -n "$ac_tool_prefix"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for file" >&5 printf %s "checking for file... " >&6; } if test ${lt_cv_path_MAGIC_CMD+y} then : printf %s "(cached) " >&6 else $as_nop case $MAGIC_CMD in [\\/*] | ?:[\\/]*) lt_cv_path_MAGIC_CMD=$MAGIC_CMD # Let the user override the test with a path. ;; *) lt_save_MAGIC_CMD=$MAGIC_CMD lt_save_ifs=$IFS; IFS=$PATH_SEPARATOR ac_dummy="/usr/bin$PATH_SEPARATOR$PATH" for ac_dir in $ac_dummy; do IFS=$lt_save_ifs test -z "$ac_dir" && ac_dir=. if test -f "$ac_dir/file"; then lt_cv_path_MAGIC_CMD=$ac_dir/"file" if test -n "$file_magic_test_file"; then case $deplibs_check_method in "file_magic "*) file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"` MAGIC_CMD=$lt_cv_path_MAGIC_CMD if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null | $EGREP "$file_magic_regex" > /dev/null; then : else cat <<_LT_EOF 1>&2 *** Warning: the command libtool uses to detect shared libraries, *** $file_magic_cmd, produces output that libtool cannot recognize. *** The result is that libtool may fail to recognize shared libraries *** as such. This will affect the creation of libtool libraries that *** depend on shared libraries, but programs linked with such libtool *** libraries will work regardless of this problem. Nevertheless, you *** may want to report the problem to your system manager and/or to *** bug-libtool@gnu.org _LT_EOF fi ;; esac fi break fi done IFS=$lt_save_ifs MAGIC_CMD=$lt_save_MAGIC_CMD ;; esac fi MAGIC_CMD=$lt_cv_path_MAGIC_CMD if test -n "$MAGIC_CMD"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $MAGIC_CMD" >&5 printf "%s\n" "$MAGIC_CMD" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi else MAGIC_CMD=: fi fi fi ;; esac # Use C for the default configuration in the libtool script lt_save_CC=$CC ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu # Source file extension for C test sources. ac_ext=c # Object file extension for compiled C test sources. objext=o objext=$objext # Code to be used in simple compile tests lt_simple_compile_test_code="int some_variable = 0;" # Code to be used in simple link tests lt_simple_link_test_code='int main(){return(0);}' # If no C compiler was specified, use CC. LTCC=${LTCC-"$CC"} # If no C compiler flags were specified, use CFLAGS. LTCFLAGS=${LTCFLAGS-"$CFLAGS"} # Allow CC to be a program name with arguments. compiler=$CC # Save the default compiler, since it gets overwritten when the other # tags are being tested, and _LT_TAGVAR(compiler, []) is a NOP. compiler_DEFAULT=$CC # save warnings/boilerplate of simple test code ac_outfile=conftest.$ac_objext echo "$lt_simple_compile_test_code" >conftest.$ac_ext eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err _lt_compiler_boilerplate=`cat conftest.err` $RM conftest* ac_outfile=conftest.$ac_objext echo "$lt_simple_link_test_code" >conftest.$ac_ext eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err _lt_linker_boilerplate=`cat conftest.err` $RM -r conftest* if test -n "$compiler"; then lt_prog_compiler_no_builtin_flag= if test yes = "$GCC"; then case $cc_basename in nvcc*) lt_prog_compiler_no_builtin_flag=' -Xcompiler -fno-builtin' ;; *) lt_prog_compiler_no_builtin_flag=' -fno-builtin' ;; esac { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -fno-rtti -fno-exceptions" >&5 printf %s "checking if $compiler supports -fno-rtti -fno-exceptions... " >&6; } if test ${lt_cv_prog_compiler_rtti_exceptions+y} then : printf %s "(cached) " >&6 else $as_nop lt_cv_prog_compiler_rtti_exceptions=no ac_outfile=conftest.$ac_objext echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="-fno-rtti -fno-exceptions" ## exclude from sc_useless_quotes_in_assignment # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. # The option is referenced via a variable to avoid confusing sed. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 if (exit $ac_status) && test -s "$ac_outfile"; then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings other than the usual output. $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' >conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then lt_cv_prog_compiler_rtti_exceptions=yes fi fi $RM conftest* fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_rtti_exceptions" >&5 printf "%s\n" "$lt_cv_prog_compiler_rtti_exceptions" >&6; } if test yes = "$lt_cv_prog_compiler_rtti_exceptions"; then lt_prog_compiler_no_builtin_flag="$lt_prog_compiler_no_builtin_flag -fno-rtti -fno-exceptions" else : fi fi lt_prog_compiler_wl= lt_prog_compiler_pic= lt_prog_compiler_static= if test yes = "$GCC"; then lt_prog_compiler_wl='-Wl,' lt_prog_compiler_static='-static' case $host_os in aix*) # All AIX code is PIC. if test ia64 = "$host_cpu"; then # AIX 5 now supports IA64 processor lt_prog_compiler_static='-Bstatic' fi lt_prog_compiler_pic='-fPIC' ;; amigaos*) case $host_cpu in powerpc) # see comment about AmigaOS4 .so support lt_prog_compiler_pic='-fPIC' ;; m68k) # FIXME: we need at least 68020 code to build shared libraries, but # adding the '-m68020' flag to GCC prevents building anything better, # like '-m68040'. lt_prog_compiler_pic='-m68020 -resident32 -malways-restore-a4' ;; esac ;; beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) # PIC is the default for these OSes. ;; mingw* | cygwin* | pw32* | os2* | cegcc*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). # Although the cygwin gcc ignores -fPIC, still need this for old-style # (--disable-auto-import) libraries lt_prog_compiler_pic='-DDLL_EXPORT' case $host_os in os2*) lt_prog_compiler_static='$wl-static' ;; esac ;; darwin* | rhapsody*) # PIC is the default on this platform # Common symbols not allowed in MH_DYLIB files lt_prog_compiler_pic='-fno-common' ;; haiku*) # PIC is the default for Haiku. # The "-static" flag exists, but is broken. lt_prog_compiler_static= ;; hpux*) # PIC is the default for 64-bit PA HP-UX, but not for 32-bit # PA HP-UX. On IA64 HP-UX, PIC is the default but the pic flag # sets the default TLS model and affects inlining. case $host_cpu in hppa*64*) # +Z the default ;; *) lt_prog_compiler_pic='-fPIC' ;; esac ;; interix[3-9]*) # Interix 3.x gcc -fpic/-fPIC options generate broken code. # Instead, we relocate shared libraries at runtime. ;; msdosdjgpp*) # Just because we use GCC doesn't mean we suddenly get shared libraries # on systems that don't support them. lt_prog_compiler_can_build_shared=no enable_shared=no ;; *nto* | *qnx*) # QNX uses GNU C++, but need to define -shared option too, otherwise # it will coredump. lt_prog_compiler_pic='-fPIC -shared' ;; sysv4*MP*) if test -d /usr/nec; then lt_prog_compiler_pic=-Kconform_pic fi ;; *) lt_prog_compiler_pic='-fPIC' ;; esac case $cc_basename in nvcc*) # Cuda Compiler Driver 2.2 lt_prog_compiler_wl='-Xlinker ' if test -n "$lt_prog_compiler_pic"; then lt_prog_compiler_pic="-Xcompiler $lt_prog_compiler_pic" fi ;; esac else # PORTME Check for flag to pass linker flags through the system compiler. case $host_os in aix*) lt_prog_compiler_wl='-Wl,' if test ia64 = "$host_cpu"; then # AIX 5 now supports IA64 processor lt_prog_compiler_static='-Bstatic' else lt_prog_compiler_static='-bnso -bI:/lib/syscalls.exp' fi ;; darwin* | rhapsody*) # PIC is the default on this platform # Common symbols not allowed in MH_DYLIB files lt_prog_compiler_pic='-fno-common' case $cc_basename in nagfor*) # NAG Fortran compiler lt_prog_compiler_wl='-Wl,-Wl,,' lt_prog_compiler_pic='-PIC' lt_prog_compiler_static='-Bstatic' ;; esac ;; mingw* | cygwin* | pw32* | os2* | cegcc*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). lt_prog_compiler_pic='-DDLL_EXPORT' case $host_os in os2*) lt_prog_compiler_static='$wl-static' ;; esac ;; hpux9* | hpux10* | hpux11*) lt_prog_compiler_wl='-Wl,' # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but # not for PA HP-UX. case $host_cpu in hppa*64*|ia64*) # +Z the default ;; *) lt_prog_compiler_pic='+Z' ;; esac # Is there a better lt_prog_compiler_static that works with the bundled CC? lt_prog_compiler_static='$wl-a ${wl}archive' ;; irix5* | irix6* | nonstopux*) lt_prog_compiler_wl='-Wl,' # PIC (with -KPIC) is the default. lt_prog_compiler_static='-non_shared' ;; linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) case $cc_basename in # old Intel for x86_64, which still supported -KPIC. ecc*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-static' ;; # flang / f18. f95 an alias for gfortran or flang on Debian flang* | f18* | f95*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-fPIC' lt_prog_compiler_static='-static' ;; # icc used to be incompatible with GCC. # ICC 10 doesn't accept -KPIC any more. icc* | ifort*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-fPIC' lt_prog_compiler_static='-static' ;; # Lahey Fortran 8.1. lf95*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='--shared' lt_prog_compiler_static='--static' ;; nagfor*) # NAG Fortran compiler lt_prog_compiler_wl='-Wl,-Wl,,' lt_prog_compiler_pic='-PIC' lt_prog_compiler_static='-Bstatic' ;; tcc*) # Fabrice Bellard et al's Tiny C Compiler lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-fPIC' lt_prog_compiler_static='-static' ;; pgcc* | pgf77* | pgf90* | pgf95* | pgfortran*) # Portland Group compilers (*not* the Pentium gcc compiler, # which looks to be a dead project) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-fpic' lt_prog_compiler_static='-Bstatic' ;; ccc*) lt_prog_compiler_wl='-Wl,' # All Alpha code is PIC. lt_prog_compiler_static='-non_shared' ;; xl* | bgxl* | bgf* | mpixl*) # IBM XL C 8.0/Fortran 10.1, 11.1 on PPC and BlueGene lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-qpic' lt_prog_compiler_static='-qstaticlink' ;; *) case `$CC -V 2>&1 | $SED 5q` in *Sun\ Ceres\ Fortran* | *Sun*Fortran*\ [1-7].* | *Sun*Fortran*\ 8.[0-3]*) # Sun Fortran 8.3 passes all unrecognized flags to the linker lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-Bstatic' lt_prog_compiler_wl='' ;; *Sun\ F* | *Sun*Fortran*) lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-Bstatic' lt_prog_compiler_wl='-Qoption ld ' ;; *Sun\ C*) # Sun C 5.9 lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-Bstatic' lt_prog_compiler_wl='-Wl,' ;; *Intel*\ [CF]*Compiler*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-fPIC' lt_prog_compiler_static='-static' ;; *Portland\ Group*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-fpic' lt_prog_compiler_static='-Bstatic' ;; esac ;; esac ;; newsos6) lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-Bstatic' ;; *nto* | *qnx*) # QNX uses GNU C++, but need to define -shared option too, otherwise # it will coredump. lt_prog_compiler_pic='-fPIC -shared' ;; osf3* | osf4* | osf5*) lt_prog_compiler_wl='-Wl,' # All OSF/1 code is PIC. lt_prog_compiler_static='-non_shared' ;; rdos*) lt_prog_compiler_static='-non_shared' ;; solaris*) lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-Bstatic' case $cc_basename in f77* | f90* | f95* | sunf77* | sunf90* | sunf95*) lt_prog_compiler_wl='-Qoption ld ';; *) lt_prog_compiler_wl='-Wl,';; esac ;; sunos4*) lt_prog_compiler_wl='-Qoption ld ' lt_prog_compiler_pic='-PIC' lt_prog_compiler_static='-Bstatic' ;; sysv4 | sysv4.2uw2* | sysv4.3*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-Bstatic' ;; sysv4*MP*) if test -d /usr/nec; then lt_prog_compiler_pic='-Kconform_pic' lt_prog_compiler_static='-Bstatic' fi ;; sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-Bstatic' ;; unicos*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_can_build_shared=no ;; uts4*) lt_prog_compiler_pic='-pic' lt_prog_compiler_static='-Bstatic' ;; *) lt_prog_compiler_can_build_shared=no ;; esac fi case $host_os in # For platforms that do not support PIC, -DPIC is meaningless: *djgpp*) lt_prog_compiler_pic= ;; *) lt_prog_compiler_pic="$lt_prog_compiler_pic -DPIC" ;; esac { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $compiler option to produce PIC" >&5 printf %s "checking for $compiler option to produce PIC... " >&6; } if test ${lt_cv_prog_compiler_pic+y} then : printf %s "(cached) " >&6 else $as_nop lt_cv_prog_compiler_pic=$lt_prog_compiler_pic fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic" >&5 printf "%s\n" "$lt_cv_prog_compiler_pic" >&6; } lt_prog_compiler_pic=$lt_cv_prog_compiler_pic # # Check to make sure the PIC flag actually works. # if test -n "$lt_prog_compiler_pic"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if $compiler PIC flag $lt_prog_compiler_pic works" >&5 printf %s "checking if $compiler PIC flag $lt_prog_compiler_pic works... " >&6; } if test ${lt_cv_prog_compiler_pic_works+y} then : printf %s "(cached) " >&6 else $as_nop lt_cv_prog_compiler_pic_works=no ac_outfile=conftest.$ac_objext echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="$lt_prog_compiler_pic -DPIC" ## exclude from sc_useless_quotes_in_assignment # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. # The option is referenced via a variable to avoid confusing sed. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 if (exit $ac_status) && test -s "$ac_outfile"; then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings other than the usual output. $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' >conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then lt_cv_prog_compiler_pic_works=yes fi fi $RM conftest* fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic_works" >&5 printf "%s\n" "$lt_cv_prog_compiler_pic_works" >&6; } if test yes = "$lt_cv_prog_compiler_pic_works"; then case $lt_prog_compiler_pic in "" | " "*) ;; *) lt_prog_compiler_pic=" $lt_prog_compiler_pic" ;; esac else lt_prog_compiler_pic= lt_prog_compiler_can_build_shared=no fi fi # # Check to make sure the static flag actually works. # wl=$lt_prog_compiler_wl eval lt_tmp_static_flag=\"$lt_prog_compiler_static\" { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if $compiler static flag $lt_tmp_static_flag works" >&5 printf %s "checking if $compiler static flag $lt_tmp_static_flag works... " >&6; } if test ${lt_cv_prog_compiler_static_works+y} then : printf %s "(cached) " >&6 else $as_nop lt_cv_prog_compiler_static_works=no save_LDFLAGS=$LDFLAGS LDFLAGS="$LDFLAGS $lt_tmp_static_flag" echo "$lt_simple_link_test_code" > conftest.$ac_ext if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then # The linker can only warn and ignore the option if not recognized # So say no if there are warnings if test -s conftest.err; then # Append any errors to the config.log. cat conftest.err 1>&5 $ECHO "$_lt_linker_boilerplate" | $SED '/^$/d' > conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if diff conftest.exp conftest.er2 >/dev/null; then lt_cv_prog_compiler_static_works=yes fi else lt_cv_prog_compiler_static_works=yes fi fi $RM -r conftest* LDFLAGS=$save_LDFLAGS fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_static_works" >&5 printf "%s\n" "$lt_cv_prog_compiler_static_works" >&6; } if test yes = "$lt_cv_prog_compiler_static_works"; then : else lt_prog_compiler_static= fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5 printf %s "checking if $compiler supports -c -o file.$ac_objext... " >&6; } if test ${lt_cv_prog_compiler_c_o+y} then : printf %s "(cached) " >&6 else $as_nop lt_cv_prog_compiler_c_o=no $RM -r conftest 2>/dev/null mkdir conftest cd conftest mkdir out echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="-o out/conftest2.$ac_objext" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) (eval "$lt_compile" 2>out/conftest.err) ac_status=$? cat out/conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 if (exit $ac_status) && test -s out/conftest2.$ac_objext then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then lt_cv_prog_compiler_c_o=yes fi fi chmod u+w . 2>&5 $RM conftest* # SGI C++ compiler will create directory out/ii_files/ for # template instantiation test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files $RM out/* && rmdir out cd .. $RM -r conftest $RM conftest* fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o" >&5 printf "%s\n" "$lt_cv_prog_compiler_c_o" >&6; } { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5 printf %s "checking if $compiler supports -c -o file.$ac_objext... " >&6; } if test ${lt_cv_prog_compiler_c_o+y} then : printf %s "(cached) " >&6 else $as_nop lt_cv_prog_compiler_c_o=no $RM -r conftest 2>/dev/null mkdir conftest cd conftest mkdir out echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="-o out/conftest2.$ac_objext" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) (eval "$lt_compile" 2>out/conftest.err) ac_status=$? cat out/conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 if (exit $ac_status) && test -s out/conftest2.$ac_objext then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then lt_cv_prog_compiler_c_o=yes fi fi chmod u+w . 2>&5 $RM conftest* # SGI C++ compiler will create directory out/ii_files/ for # template instantiation test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files $RM out/* && rmdir out cd .. $RM -r conftest $RM conftest* fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o" >&5 printf "%s\n" "$lt_cv_prog_compiler_c_o" >&6; } hard_links=nottested if test no = "$lt_cv_prog_compiler_c_o" && test no != "$need_locks"; then # do not overwrite the value of need_locks provided by the user { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if we can lock with hard links" >&5 printf %s "checking if we can lock with hard links... " >&6; } hard_links=yes $RM conftest* ln conftest.a conftest.b 2>/dev/null && hard_links=no touch conftest.a ln conftest.a conftest.b 2>&5 || hard_links=no ln conftest.a conftest.b 2>/dev/null && hard_links=no { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $hard_links" >&5 printf "%s\n" "$hard_links" >&6; } if test no = "$hard_links"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: '$CC' does not support '-c -o', so 'make -j' may be unsafe" >&5 printf "%s\n" "$as_me: WARNING: '$CC' does not support '-c -o', so 'make -j' may be unsafe" >&2;} need_locks=warn fi else need_locks=no fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the $compiler linker ($LD) supports shared libraries" >&5 printf %s "checking whether the $compiler linker ($LD) supports shared libraries... " >&6; } runpath_var= allow_undefined_flag= always_export_symbols=no archive_cmds= archive_expsym_cmds= compiler_needs_object=no enable_shared_with_static_runtimes=no export_dynamic_flag_spec= export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' hardcode_automatic=no hardcode_direct=no hardcode_direct_absolute=no hardcode_libdir_flag_spec= hardcode_libdir_separator= hardcode_minus_L=no hardcode_shlibpath_var=unsupported inherit_rpath=no link_all_deplibs=unknown module_cmds= module_expsym_cmds= old_archive_from_new_cmds= old_archive_from_expsyms_cmds= thread_safe_flag_spec= whole_archive_flag_spec= # include_expsyms should be a list of space-separated symbols to be *always* # included in the symbol list include_expsyms= # exclude_expsyms can be an extended regexp of symbols to exclude # it will be wrapped by ' (' and ')$', so one must not match beginning or # end of line. Example: 'a|bc|.*d.*' will exclude the symbols 'a' and 'bc', # as well as any symbol that contains 'd'. exclude_expsyms='_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*' # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out # platforms (ab)use it in PIC code, but their linkers get confused if # the symbol is explicitly referenced. Since portable code cannot # rely on this symbol name, it's probably fine to never include it in # preloaded symbol tables. # Exclude shared library initialization/finalization symbols. extract_expsyms_cmds= case $host_os in cygwin* | mingw* | pw32* | cegcc*) # FIXME: the MSVC++ and ICC port hasn't been tested in a loooong time # When not using gcc, we currently assume that we are using # Microsoft Visual C++ or Intel C++ Compiler. if test yes != "$GCC"; then with_gnu_ld=no fi ;; interix*) # we just hope/assume this is gcc and not c89 (= MSVC++ or ICC) with_gnu_ld=yes ;; openbsd* | bitrig*) with_gnu_ld=no ;; linux* | k*bsd*-gnu | gnu*) link_all_deplibs=no ;; esac ld_shlibs=yes # On some targets, GNU ld is compatible enough with the native linker # that we're better off using the native interface for both. lt_use_gnu_ld_interface=no if test yes = "$with_gnu_ld"; then case $host_os in aix*) # The AIX port of GNU ld has always aspired to compatibility # with the native linker. However, as the warning in the GNU ld # block says, versions before 2.19.5* couldn't really create working # shared libraries, regardless of the interface used. case `$LD -v 2>&1` in *\ \(GNU\ Binutils\)\ 2.19.5*) ;; *\ \(GNU\ Binutils\)\ 2.[2-9]*) ;; *\ \(GNU\ Binutils\)\ [3-9]*) ;; *) lt_use_gnu_ld_interface=yes ;; esac ;; *) lt_use_gnu_ld_interface=yes ;; esac fi if test yes = "$lt_use_gnu_ld_interface"; then # If archive_cmds runs LD, not CC, wlarc should be empty wlarc='$wl' # Set some defaults for GNU ld with shared library support. These # are reset later if shared libraries are not supported. Putting them # here allows them to be overridden if necessary. runpath_var=LD_RUN_PATH hardcode_libdir_flag_spec='$wl-rpath $wl$libdir' export_dynamic_flag_spec='$wl--export-dynamic' # ancient GNU ld didn't support --whole-archive et. al. if $LD --help 2>&1 | $GREP 'no-whole-archive' > /dev/null; then whole_archive_flag_spec=$wlarc'--whole-archive$convenience '$wlarc'--no-whole-archive' else whole_archive_flag_spec= fi supports_anon_versioning=no case `$LD -v | $SED -e 's/([^)]\+)\s\+//' 2>&1` in *GNU\ gold*) supports_anon_versioning=yes ;; *\ [01].* | *\ 2.[0-9].* | *\ 2.10.*) ;; # catch versions < 2.11 *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ... *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ... *\ 2.11.*) ;; # other 2.11 versions *) supports_anon_versioning=yes ;; esac # See if GNU ld supports shared libraries. case $host_os in aix[3-9]*) # On AIX/PPC, the GNU linker is very broken if test ia64 != "$host_cpu"; then ld_shlibs=no cat <<_LT_EOF 1>&2 *** Warning: the GNU linker, at least up to release 2.19, is reported *** to be unable to reliably create shared libraries on AIX. *** Therefore, libtool is disabling shared libraries support. If you *** really care for shared libraries, you may want to install binutils *** 2.20 or above, or modify your PATH so that a non-GNU linker is found. *** You will then need to restart the configuration process. _LT_EOF fi ;; amigaos*) case $host_cpu in powerpc) # see comment about AmigaOS4 .so support archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' archive_expsym_cmds='' ;; m68k) archive_cmds='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' hardcode_libdir_flag_spec='-L$libdir' hardcode_minus_L=yes ;; esac ;; beos*) if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then allow_undefined_flag=unsupported # Joseph Beckenbach says some releases of gcc # support --undefined. This deserves some investigation. FIXME archive_cmds='$CC -nostart $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' else ld_shlibs=no fi ;; cygwin* | mingw* | pw32* | cegcc*) # _LT_TAGVAR(hardcode_libdir_flag_spec, ) is actually meaningless, # as there is no search path for DLLs. hardcode_libdir_flag_spec='-L$libdir' export_dynamic_flag_spec='$wl--export-all-symbols' allow_undefined_flag=unsupported always_export_symbols=no enable_shared_with_static_runtimes=yes export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1 DATA/;s/^.*[ ]__nm__\([^ ]*\)[ ][^ ]*/\1 DATA/;/^I[ ]/d;/^[AITW][ ]/s/.* //'\'' | sort | uniq > $export_symbols' exclude_expsyms='[_]+GLOBAL_OFFSET_TABLE_|[_]+GLOBAL__[FID]_.*|[_]+head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname' if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname $wl--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' # If the export-symbols file already is a .def file, use it as # is; otherwise, prepend EXPORTS... archive_expsym_cmds='if test DEF = "`$SED -n -e '\''s/^[ ]*//'\'' -e '\''/^\(;.*\)*$/d'\'' -e '\''s/^\(EXPORTS\|LIBRARY\)\([ ].*\)*$/DEF/p'\'' -e q $export_symbols`" ; then cp $export_symbols $output_objdir/$soname.def; else echo EXPORTS > $output_objdir/$soname.def; cat $export_symbols >> $output_objdir/$soname.def; fi~ $CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname $wl--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' else ld_shlibs=no fi ;; haiku*) archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' link_all_deplibs=yes ;; os2*) hardcode_libdir_flag_spec='-L$libdir' hardcode_minus_L=yes allow_undefined_flag=unsupported shrext_cmds=.dll archive_cmds='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~ $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~ $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~ $ECHO EXPORTS >> $output_objdir/$libname.def~ emxexp $libobjs | $SED /"_DLL_InitTerm"/d >> $output_objdir/$libname.def~ $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~ emximp -o $lib $output_objdir/$libname.def' archive_expsym_cmds='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~ $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~ $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~ $ECHO EXPORTS >> $output_objdir/$libname.def~ prefix_cmds="$SED"~ if test EXPORTS = "`$SED 1q $export_symbols`"; then prefix_cmds="$prefix_cmds -e 1d"; fi~ prefix_cmds="$prefix_cmds -e \"s/^\(.*\)$/_\1/g\""~ cat $export_symbols | $prefix_cmds >> $output_objdir/$libname.def~ $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~ emximp -o $lib $output_objdir/$libname.def' old_archive_From_new_cmds='emximp -o $output_objdir/${libname}_dll.a $output_objdir/$libname.def' enable_shared_with_static_runtimes=yes file_list_spec='@' ;; interix[3-9]*) hardcode_direct=no hardcode_shlibpath_var=no hardcode_libdir_flag_spec='$wl-rpath,$libdir' export_dynamic_flag_spec='$wl-E' # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. # Instead, shared libraries are loaded at an image base (0x10000000 by # default) and relocated if they conflict, which is a slow very memory # consuming and fragmenting process. To avoid this, we pick a random, # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link # time. Moving up from 0x10000000 also allows more sbrk(2) space. archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-h,$soname $wl--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' archive_expsym_cmds='$SED "s|^|_|" $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-h,$soname $wl--retain-symbols-file,$output_objdir/$soname.expsym $wl--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' ;; gnu* | linux* | tpf* | k*bsd*-gnu | kopensolaris*-gnu) tmp_diet=no if test linux-dietlibc = "$host_os"; then case $cc_basename in diet\ *) tmp_diet=yes;; # linux-dietlibc with static linking (!diet-dyn) esac fi if $LD --help 2>&1 | $EGREP ': supported targets:.* elf' > /dev/null \ && test no = "$tmp_diet" then tmp_addflag=' $pic_flag' tmp_sharedflag='-shared' case $cc_basename,$host_cpu in pgcc*) # Portland Group C compiler whole_archive_flag_spec='$wl--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive' tmp_addflag=' $pic_flag' ;; pgf77* | pgf90* | pgf95* | pgfortran*) # Portland Group f77 and f90 compilers whole_archive_flag_spec='$wl--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive' tmp_addflag=' $pic_flag -Mnomain' ;; ecc*,ia64* | icc*,ia64*) # Intel C compiler on ia64 tmp_addflag=' -i_dynamic' ;; efc*,ia64* | ifort*,ia64*) # Intel Fortran compiler on ia64 tmp_addflag=' -i_dynamic -nofor_main' ;; ifc* | ifort*) # Intel Fortran compiler tmp_addflag=' -nofor_main' ;; lf95*) # Lahey Fortran 8.1 whole_archive_flag_spec= tmp_sharedflag='--shared' ;; nagfor*) # NAGFOR 5.3 tmp_sharedflag='-Wl,-shared' ;; xl[cC]* | bgxl[cC]* | mpixl[cC]*) # IBM XL C 8.0 on PPC (deal with xlf below) tmp_sharedflag='-qmkshrobj' tmp_addflag= ;; nvcc*) # Cuda Compiler Driver 2.2 whole_archive_flag_spec='$wl--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive' compiler_needs_object=yes ;; esac case `$CC -V 2>&1 | $SED 5q` in *Sun\ C*) # Sun C 5.9 whole_archive_flag_spec='$wl--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive' compiler_needs_object=yes tmp_sharedflag='-G' ;; *Sun\ F*) # Sun Fortran 8.3 tmp_sharedflag='-G' ;; esac archive_cmds='$CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' if test yes = "$supports_anon_versioning"; then archive_expsym_cmds='echo "{ global:" > $output_objdir/$libname.ver~ cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ echo "local: *; };" >> $output_objdir/$libname.ver~ $CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-version-script $wl$output_objdir/$libname.ver -o $lib' fi case $cc_basename in tcc*) hardcode_libdir_flag_spec='$wl-rpath $wl$libdir' export_dynamic_flag_spec='-rdynamic' ;; xlf* | bgf* | bgxlf* | mpixlf*) # IBM XL Fortran 10.1 on PPC cannot create shared libs itself whole_archive_flag_spec='--whole-archive$convenience --no-whole-archive' hardcode_libdir_flag_spec='$wl-rpath $wl$libdir' archive_cmds='$LD -shared $libobjs $deplibs $linker_flags -soname $soname -o $lib' if test yes = "$supports_anon_versioning"; then archive_expsym_cmds='echo "{ global:" > $output_objdir/$libname.ver~ cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ echo "local: *; };" >> $output_objdir/$libname.ver~ $LD -shared $libobjs $deplibs $linker_flags -soname $soname -version-script $output_objdir/$libname.ver -o $lib' fi ;; esac else ld_shlibs=no fi ;; netbsd* | netbsdelf*-gnu) if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then archive_cmds='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib' wlarc= else archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' fi ;; solaris*) if $LD -v 2>&1 | $GREP 'BFD 2\.8' > /dev/null; then ld_shlibs=no cat <<_LT_EOF 1>&2 *** Warning: The releases 2.8.* of the GNU linker cannot reliably *** create shared libraries on Solaris systems. Therefore, libtool *** is disabling shared libraries support. We urge you to upgrade GNU *** binutils to release 2.9.1 or newer. Another option is to modify *** your PATH or compiler configuration so that the native linker is *** used, and then restart. _LT_EOF elif $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' else ld_shlibs=no fi ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*) case `$LD -v 2>&1` in *\ [01].* | *\ 2.[0-9].* | *\ 2.1[0-5].*) ld_shlibs=no cat <<_LT_EOF 1>&2 *** Warning: Releases of the GNU linker prior to 2.16.91.0.3 cannot *** reliably create shared libraries on SCO systems. Therefore, libtool *** is disabling shared libraries support. We urge you to upgrade GNU *** binutils to release 2.16.91.0.3 or newer. Another option is to modify *** your PATH or compiler configuration so that the native linker is *** used, and then restart. _LT_EOF ;; *) # For security reasons, it is highly recommended that you always # use absolute paths for naming shared libraries, and exclude the # DT_RUNPATH tag from executables and libraries. But doing so # requires that you compile everything twice, which is a pain. if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then hardcode_libdir_flag_spec='$wl-rpath $wl$libdir' archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' else ld_shlibs=no fi ;; esac ;; sunos4*) archive_cmds='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags' wlarc= hardcode_direct=yes hardcode_shlibpath_var=no ;; *) if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' else ld_shlibs=no fi ;; esac if test no = "$ld_shlibs"; then runpath_var= hardcode_libdir_flag_spec= export_dynamic_flag_spec= whole_archive_flag_spec= fi else # PORTME fill in a description of your system's linker (not GNU ld) case $host_os in aix3*) allow_undefined_flag=unsupported always_export_symbols=yes archive_expsym_cmds='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname' # Note: this linker hardcodes the directories in LIBPATH if there # are no directories specified by -L. hardcode_minus_L=yes if test yes = "$GCC" && test -z "$lt_prog_compiler_static"; then # Neither direct hardcoding nor static linking is supported with a # broken collect2. hardcode_direct=unsupported fi ;; aix[4-9]*) if test ia64 = "$host_cpu"; then # On IA64, the linker does run time linking by default, so we don't # have to do anything special. aix_use_runtimelinking=no exp_sym_flag='-Bexport' no_entry_flag= else # If we're using GNU nm, then we don't want the "-C" option. # -C means demangle to GNU nm, but means don't demangle to AIX nm. # Without the "-l" option, or with the "-B" option, AIX nm treats # weak defined symbols like other global defined symbols, whereas # GNU nm marks them as "W". # While the 'weak' keyword is ignored in the Export File, we need # it in the Import File for the 'aix-soname' feature, so we have # to replace the "-B" option with "-P" for AIX nm. if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then export_symbols_cmds='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && (substr(\$ 3,1,1) != ".")) { if (\$ 2 == "W") { print \$ 3 " weak" } else { print \$ 3 } } }'\'' | sort -u > $export_symbols' else export_symbols_cmds='`func_echo_all $NM | $SED -e '\''s/B\([^B]*\)$/P\1/'\''` -PCpgl $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "L") || (\$ 2 == "W") || (\$ 2 == "V") || (\$ 2 == "Z")) && (substr(\$ 1,1,1) != ".")) { if ((\$ 2 == "W") || (\$ 2 == "V") || (\$ 2 == "Z")) { print \$ 1 " weak" } else { print \$ 1 } } }'\'' | sort -u > $export_symbols' fi aix_use_runtimelinking=no # Test if we are trying to use run time linking or normal # AIX style linking. If -brtl is somewhere in LDFLAGS, we # have runtime linking enabled, and use it for executables. # For shared libraries, we enable/disable runtime linking # depending on the kind of the shared library created - # when "with_aix_soname,aix_use_runtimelinking" is: # "aix,no" lib.a(lib.so.V) shared, rtl:no, for executables # "aix,yes" lib.so shared, rtl:yes, for executables # lib.a static archive # "both,no" lib.so.V(shr.o) shared, rtl:yes # lib.a(lib.so.V) shared, rtl:no, for executables # "both,yes" lib.so.V(shr.o) shared, rtl:yes, for executables # lib.a(lib.so.V) shared, rtl:no # "svr4,*" lib.so.V(shr.o) shared, rtl:yes, for executables # lib.a static archive case $host_os in aix4.[23]|aix4.[23].*|aix[5-9]*) for ld_flag in $LDFLAGS; do if (test x-brtl = "x$ld_flag" || test x-Wl,-brtl = "x$ld_flag"); then aix_use_runtimelinking=yes break fi done if test svr4,no = "$with_aix_soname,$aix_use_runtimelinking"; then # With aix-soname=svr4, we create the lib.so.V shared archives only, # so we don't have lib.a shared libs to link our executables. # We have to force runtime linking in this case. aix_use_runtimelinking=yes LDFLAGS="$LDFLAGS -Wl,-brtl" fi ;; esac exp_sym_flag='-bexport' no_entry_flag='-bnoentry' fi # When large executables or shared objects are built, AIX ld can # have problems creating the table of contents. If linking a library # or program results in "error TOC overflow" add -mminimal-toc to # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. archive_cmds='' hardcode_direct=yes hardcode_direct_absolute=yes hardcode_libdir_separator=':' link_all_deplibs=yes file_list_spec='$wl-f,' case $with_aix_soname,$aix_use_runtimelinking in aix,*) ;; # traditional, no import file svr4,* | *,yes) # use import file # The Import File defines what to hardcode. hardcode_direct=no hardcode_direct_absolute=no ;; esac if test yes = "$GCC"; then case $host_os in aix4.[012]|aix4.[012].*) # We only want to do this on AIX 4.2 and lower, the check # below for broken collect2 doesn't work under 4.3+ collect2name=`$CC -print-prog-name=collect2` if test -f "$collect2name" && strings "$collect2name" | $GREP resolve_lib_name >/dev/null then # We have reworked collect2 : else # We have old collect2 hardcode_direct=unsupported # It fails to find uninstalled libraries when the uninstalled # path is not listed in the libpath. Setting hardcode_minus_L # to unsupported forces relinking hardcode_minus_L=yes hardcode_libdir_flag_spec='-L$libdir' hardcode_libdir_separator= fi ;; esac shared_flag='-shared' if test yes = "$aix_use_runtimelinking"; then shared_flag="$shared_flag "'$wl-G' fi # Need to ensure runtime linking is disabled for the traditional # shared library, or the linker may eventually find shared libraries # /with/ Import File - we do not want to mix them. shared_flag_aix='-shared' shared_flag_svr4='-shared $wl-G' else # not using gcc if test ia64 = "$host_cpu"; then # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release # chokes on -Wl,-G. The following line is correct: shared_flag='-G' else if test yes = "$aix_use_runtimelinking"; then shared_flag='$wl-G' else shared_flag='$wl-bM:SRE' fi shared_flag_aix='$wl-bM:SRE' shared_flag_svr4='$wl-G' fi fi export_dynamic_flag_spec='$wl-bexpall' # It seems that -bexpall does not export symbols beginning with # underscore (_), so it is better to generate a list of symbols to export. always_export_symbols=yes if test aix,yes = "$with_aix_soname,$aix_use_runtimelinking"; then # Warning - without using the other runtime loading flags (-brtl), # -berok will link without error, but may produce a broken library. allow_undefined_flag='-berok' # Determine the default libpath from the value encoded in an # empty executable. if test set = "${lt_cv_aix_libpath+set}"; then aix_libpath=$lt_cv_aix_libpath else if test ${lt_cv_aix_libpath_+y} then : printf %s "(cached) " >&6 else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : lt_aix_libpath_sed=' /Import File Strings/,/^$/ { /^0/ { s/^0 *\([^ ]*\) *$/\1/ p } }' lt_cv_aix_libpath_=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` # Check for a 64-bit object if we didn't find anything. if test -z "$lt_cv_aix_libpath_"; then lt_cv_aix_libpath_=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` fi fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext if test -z "$lt_cv_aix_libpath_"; then lt_cv_aix_libpath_=/usr/lib:/lib fi fi aix_libpath=$lt_cv_aix_libpath_ fi hardcode_libdir_flag_spec='$wl-blibpath:$libdir:'"$aix_libpath" archive_expsym_cmds='$CC -o $output_objdir/$soname $libobjs $deplibs $wl'$no_entry_flag' $compiler_flags `if test -n "$allow_undefined_flag"; then func_echo_all "$wl$allow_undefined_flag"; else :; fi` $wl'$exp_sym_flag:\$export_symbols' '$shared_flag else if test ia64 = "$host_cpu"; then hardcode_libdir_flag_spec='$wl-R $libdir:/usr/lib:/lib' allow_undefined_flag="-z nodefs" archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\$wl$no_entry_flag"' $compiler_flags $wl$allow_undefined_flag '"\$wl$exp_sym_flag:\$export_symbols" else # Determine the default libpath from the value encoded in an # empty executable. if test set = "${lt_cv_aix_libpath+set}"; then aix_libpath=$lt_cv_aix_libpath else if test ${lt_cv_aix_libpath_+y} then : printf %s "(cached) " >&6 else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : lt_aix_libpath_sed=' /Import File Strings/,/^$/ { /^0/ { s/^0 *\([^ ]*\) *$/\1/ p } }' lt_cv_aix_libpath_=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` # Check for a 64-bit object if we didn't find anything. if test -z "$lt_cv_aix_libpath_"; then lt_cv_aix_libpath_=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` fi fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext if test -z "$lt_cv_aix_libpath_"; then lt_cv_aix_libpath_=/usr/lib:/lib fi fi aix_libpath=$lt_cv_aix_libpath_ fi hardcode_libdir_flag_spec='$wl-blibpath:$libdir:'"$aix_libpath" # Warning - without using the other run time loading flags, # -berok will link without error, but may produce a broken library. no_undefined_flag=' $wl-bernotok' allow_undefined_flag=' $wl-berok' if test yes = "$with_gnu_ld"; then # We only use this code for GNU lds that support --whole-archive. whole_archive_flag_spec='$wl--whole-archive$convenience $wl--no-whole-archive' else # Exported symbols can be pulled into shared objects from archives whole_archive_flag_spec='$convenience' fi archive_cmds_need_lc=yes archive_expsym_cmds='$RM -r $output_objdir/$realname.d~$MKDIR $output_objdir/$realname.d' # -brtl affects multiple linker settings, -berok does not and is overridden later compiler_flags_filtered='`func_echo_all "$compiler_flags " | $SED -e "s%-brtl\\([, ]\\)%-berok\\1%g"`' if test svr4 != "$with_aix_soname"; then # This is similar to how AIX traditionally builds its shared libraries. archive_expsym_cmds="$archive_expsym_cmds"'~$CC '$shared_flag_aix' -o $output_objdir/$realname.d/$soname $libobjs $deplibs $wl-bnoentry '$compiler_flags_filtered'$wl-bE:$export_symbols$allow_undefined_flag~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$realname.d/$soname' fi if test aix != "$with_aix_soname"; then archive_expsym_cmds="$archive_expsym_cmds"'~$CC '$shared_flag_svr4' -o $output_objdir/$realname.d/$shared_archive_member_spec.o $libobjs $deplibs $wl-bnoentry '$compiler_flags_filtered'$wl-bE:$export_symbols$allow_undefined_flag~$STRIP -e $output_objdir/$realname.d/$shared_archive_member_spec.o~( func_echo_all "#! $soname($shared_archive_member_spec.o)"; if test shr_64 = "$shared_archive_member_spec"; then func_echo_all "# 64"; else func_echo_all "# 32"; fi; cat $export_symbols ) > $output_objdir/$realname.d/$shared_archive_member_spec.imp~$AR $AR_FLAGS $output_objdir/$soname $output_objdir/$realname.d/$shared_archive_member_spec.o $output_objdir/$realname.d/$shared_archive_member_spec.imp' else # used by -dlpreopen to get the symbols archive_expsym_cmds="$archive_expsym_cmds"'~$MV $output_objdir/$realname.d/$soname $output_objdir' fi archive_expsym_cmds="$archive_expsym_cmds"'~$RM -r $output_objdir/$realname.d' fi fi ;; amigaos*) case $host_cpu in powerpc) # see comment about AmigaOS4 .so support archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' archive_expsym_cmds='' ;; m68k) archive_cmds='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' hardcode_libdir_flag_spec='-L$libdir' hardcode_minus_L=yes ;; esac ;; bsdi[45]*) export_dynamic_flag_spec=-rdynamic ;; cygwin* | mingw* | pw32* | cegcc*) # When not using gcc, we currently assume that we are using # Microsoft Visual C++ or Intel C++ Compiler. # hardcode_libdir_flag_spec is actually meaningless, as there is # no search path for DLLs. case $cc_basename in cl* | icl*) # Native MSVC or ICC hardcode_libdir_flag_spec=' ' allow_undefined_flag=unsupported always_export_symbols=yes file_list_spec='@' # Tell ltmain to make .lib files, not .a files. libext=lib # Tell ltmain to make .dll files, not .so files. shrext_cmds=.dll # FIXME: Setting linknames here is a bad hack. archive_cmds='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~linknames=' archive_expsym_cmds='if test DEF = "`$SED -n -e '\''s/^[ ]*//'\'' -e '\''/^\(;.*\)*$/d'\'' -e '\''s/^\(EXPORTS\|LIBRARY\)\([ ].*\)*$/DEF/p'\'' -e q $export_symbols`" ; then cp "$export_symbols" "$output_objdir/$soname.def"; echo "$tool_output_objdir$soname.def" > "$output_objdir/$soname.exp"; else $SED -e '\''s/^/-link -EXPORT:/'\'' < $export_symbols > $output_objdir/$soname.exp; fi~ $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~ linknames=' # The linker will not automatically build a static lib if we build a DLL. # _LT_TAGVAR(old_archive_from_new_cmds, )='true' enable_shared_with_static_runtimes=yes exclude_expsyms='_NULL_IMPORT_DESCRIPTOR|_IMPORT_DESCRIPTOR_.*' export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1,DATA/'\'' | $SED -e '\''/^[AITW][ ]/s/.*[ ]//'\'' | sort | uniq > $export_symbols' # Don't use ranlib old_postinstall_cmds='chmod 644 $oldlib' postlink_cmds='lt_outputfile="@OUTPUT@"~ lt_tool_outputfile="@TOOL_OUTPUT@"~ case $lt_outputfile in *.exe|*.EXE) ;; *) lt_outputfile=$lt_outputfile.exe lt_tool_outputfile=$lt_tool_outputfile.exe ;; esac~ if test : != "$MANIFEST_TOOL" && test -f "$lt_outputfile.manifest"; then $MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1; $RM "$lt_outputfile.manifest"; fi' ;; *) # Assume MSVC and ICC wrapper hardcode_libdir_flag_spec=' ' allow_undefined_flag=unsupported # Tell ltmain to make .lib files, not .a files. libext=lib # Tell ltmain to make .dll files, not .so files. shrext_cmds=.dll # FIXME: Setting linknames here is a bad hack. archive_cmds='$CC -o $lib $libobjs $compiler_flags `func_echo_all "$deplibs" | $SED '\''s/ -lc$//'\''` -link -dll~linknames=' # The linker will automatically build a .lib file if we build a DLL. old_archive_from_new_cmds='true' # FIXME: Should let the user specify the lib program. old_archive_cmds='lib -OUT:$oldlib$oldobjs$old_deplibs' enable_shared_with_static_runtimes=yes ;; esac ;; darwin* | rhapsody*) archive_cmds_need_lc=no hardcode_direct=no hardcode_automatic=yes hardcode_shlibpath_var=unsupported if test yes = "$lt_cv_ld_force_load"; then whole_archive_flag_spec='`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience $wl-force_load,$conv\"; done; func_echo_all \"$new_convenience\"`' else whole_archive_flag_spec='' fi link_all_deplibs=yes allow_undefined_flag=$_lt_dar_allow_undefined case $cc_basename in ifort*|nagfor*) _lt_dar_can_shared=yes ;; *) _lt_dar_can_shared=$GCC ;; esac if test yes = "$_lt_dar_can_shared"; then output_verbose_link_cmd=func_echo_all archive_cmds="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod$_lt_dsymutil" module_cmds="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags$_lt_dsymutil" archive_expsym_cmds="$SED 's|^|_|' < \$export_symbols > \$output_objdir/\$libname-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod$_lt_dar_export_syms$_lt_dsymutil" module_expsym_cmds="$SED -e 's|^|_|' < \$export_symbols > \$output_objdir/\$libname-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags$_lt_dar_export_syms$_lt_dsymutil" else ld_shlibs=no fi ;; dgux*) archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_libdir_flag_spec='-L$libdir' hardcode_shlibpath_var=no ;; # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor # support. Future versions do this automatically, but an explicit c++rt0.o # does not break anything, and helps significantly (at the cost of a little # extra space). freebsd2.2*) archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o' hardcode_libdir_flag_spec='-R$libdir' hardcode_direct=yes hardcode_shlibpath_var=no ;; # Unfortunately, older versions of FreeBSD 2 do not have this feature. freebsd2.*) archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' hardcode_direct=yes hardcode_minus_L=yes hardcode_shlibpath_var=no ;; # FreeBSD 3 and greater uses gcc -shared to do shared libraries. freebsd* | dragonfly* | midnightbsd*) archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' hardcode_libdir_flag_spec='-R$libdir' hardcode_direct=yes hardcode_shlibpath_var=no ;; hpux9*) if test yes = "$GCC"; then archive_cmds='$RM $output_objdir/$soname~$CC -shared $pic_flag $wl+b $wl$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test "x$output_objdir/$soname" = "x$lib" || mv $output_objdir/$soname $lib' else archive_cmds='$RM $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test "x$output_objdir/$soname" = "x$lib" || mv $output_objdir/$soname $lib' fi hardcode_libdir_flag_spec='$wl+b $wl$libdir' hardcode_libdir_separator=: hardcode_direct=yes # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. hardcode_minus_L=yes export_dynamic_flag_spec='$wl-E' ;; hpux10*) if test yes,no = "$GCC,$with_gnu_ld"; then archive_cmds='$CC -shared $pic_flag $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $libobjs $deplibs $compiler_flags' else archive_cmds='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' fi if test no = "$with_gnu_ld"; then hardcode_libdir_flag_spec='$wl+b $wl$libdir' hardcode_libdir_separator=: hardcode_direct=yes hardcode_direct_absolute=yes export_dynamic_flag_spec='$wl-E' # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. hardcode_minus_L=yes fi ;; hpux11*) if test yes,no = "$GCC,$with_gnu_ld"; then case $host_cpu in hppa*64*) archive_cmds='$CC -shared $wl+h $wl$soname -o $lib $libobjs $deplibs $compiler_flags' ;; ia64*) archive_cmds='$CC -shared $pic_flag $wl+h $wl$soname $wl+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' ;; *) archive_cmds='$CC -shared $pic_flag $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $libobjs $deplibs $compiler_flags' ;; esac else case $host_cpu in hppa*64*) archive_cmds='$CC -b $wl+h $wl$soname -o $lib $libobjs $deplibs $compiler_flags' ;; ia64*) archive_cmds='$CC -b $wl+h $wl$soname $wl+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' ;; *) # Older versions of the 11.00 compiler do not understand -b yet # (HP92453-01 A.11.01.20 doesn't, HP92453-01 B.11.X.35175-35176.GP does) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if $CC understands -b" >&5 printf %s "checking if $CC understands -b... " >&6; } if test ${lt_cv_prog_compiler__b+y} then : printf %s "(cached) " >&6 else $as_nop lt_cv_prog_compiler__b=no save_LDFLAGS=$LDFLAGS LDFLAGS="$LDFLAGS -b" echo "$lt_simple_link_test_code" > conftest.$ac_ext if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then # The linker can only warn and ignore the option if not recognized # So say no if there are warnings if test -s conftest.err; then # Append any errors to the config.log. cat conftest.err 1>&5 $ECHO "$_lt_linker_boilerplate" | $SED '/^$/d' > conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if diff conftest.exp conftest.er2 >/dev/null; then lt_cv_prog_compiler__b=yes fi else lt_cv_prog_compiler__b=yes fi fi $RM -r conftest* LDFLAGS=$save_LDFLAGS fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler__b" >&5 printf "%s\n" "$lt_cv_prog_compiler__b" >&6; } if test yes = "$lt_cv_prog_compiler__b"; then archive_cmds='$CC -b $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $libobjs $deplibs $compiler_flags' else archive_cmds='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' fi ;; esac fi if test no = "$with_gnu_ld"; then hardcode_libdir_flag_spec='$wl+b $wl$libdir' hardcode_libdir_separator=: case $host_cpu in hppa*64*|ia64*) hardcode_direct=no hardcode_shlibpath_var=no ;; *) hardcode_direct=yes hardcode_direct_absolute=yes export_dynamic_flag_spec='$wl-E' # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. hardcode_minus_L=yes ;; esac fi ;; irix5* | irix6* | nonstopux*) if test yes = "$GCC"; then archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib' # Try to use the -exported_symbol ld option, if it does not # work, assume that -exports_file does not work either and # implicitly export all symbols. # This should be the same for all languages, so no per-tag cache variable. { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the $host_os linker accepts -exported_symbol" >&5 printf %s "checking whether the $host_os linker accepts -exported_symbol... " >&6; } if test ${lt_cv_irix_exported_symbol+y} then : printf %s "(cached) " >&6 else $as_nop save_LDFLAGS=$LDFLAGS LDFLAGS="$LDFLAGS -shared $wl-exported_symbol ${wl}foo $wl-update_registry $wl/dev/null" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int foo (void) { return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : lt_cv_irix_exported_symbol=yes else $as_nop lt_cv_irix_exported_symbol=no fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext LDFLAGS=$save_LDFLAGS fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_irix_exported_symbol" >&5 printf "%s\n" "$lt_cv_irix_exported_symbol" >&6; } if test yes = "$lt_cv_irix_exported_symbol"; then archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations $wl-exports_file $wl$export_symbols -o $lib' fi link_all_deplibs=no else archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib' archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -exports_file $export_symbols -o $lib' fi archive_cmds_need_lc='no' hardcode_libdir_flag_spec='$wl-rpath $wl$libdir' hardcode_libdir_separator=: inherit_rpath=yes link_all_deplibs=yes ;; linux*) case $cc_basename in tcc*) # Fabrice Bellard et al's Tiny C Compiler ld_shlibs=yes archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' hardcode_libdir_flag_spec='$wl-rpath $wl$libdir' ;; esac ;; netbsd* | netbsdelf*-gnu) if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out else archive_cmds='$LD -shared -o $lib $libobjs $deplibs $linker_flags' # ELF fi hardcode_libdir_flag_spec='-R$libdir' hardcode_direct=yes hardcode_shlibpath_var=no ;; newsos6) archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_direct=yes hardcode_libdir_flag_spec='$wl-rpath $wl$libdir' hardcode_libdir_separator=: hardcode_shlibpath_var=no ;; *nto* | *qnx*) ;; openbsd* | bitrig*) if test -f /usr/libexec/ld.so; then hardcode_direct=yes hardcode_shlibpath_var=no hardcode_direct_absolute=yes if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`"; then archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags $wl-retain-symbols-file,$export_symbols' hardcode_libdir_flag_spec='$wl-rpath,$libdir' export_dynamic_flag_spec='$wl-E' else archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' hardcode_libdir_flag_spec='$wl-rpath,$libdir' fi else ld_shlibs=no fi ;; os2*) hardcode_libdir_flag_spec='-L$libdir' hardcode_minus_L=yes allow_undefined_flag=unsupported shrext_cmds=.dll archive_cmds='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~ $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~ $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~ $ECHO EXPORTS >> $output_objdir/$libname.def~ emxexp $libobjs | $SED /"_DLL_InitTerm"/d >> $output_objdir/$libname.def~ $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~ emximp -o $lib $output_objdir/$libname.def' archive_expsym_cmds='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~ $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~ $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~ $ECHO EXPORTS >> $output_objdir/$libname.def~ prefix_cmds="$SED"~ if test EXPORTS = "`$SED 1q $export_symbols`"; then prefix_cmds="$prefix_cmds -e 1d"; fi~ prefix_cmds="$prefix_cmds -e \"s/^\(.*\)$/_\1/g\""~ cat $export_symbols | $prefix_cmds >> $output_objdir/$libname.def~ $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~ emximp -o $lib $output_objdir/$libname.def' old_archive_From_new_cmds='emximp -o $output_objdir/${libname}_dll.a $output_objdir/$libname.def' enable_shared_with_static_runtimes=yes file_list_spec='@' ;; osf3*) if test yes = "$GCC"; then allow_undefined_flag=' $wl-expect_unresolved $wl\*' archive_cmds='$CC -shared$allow_undefined_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib' else allow_undefined_flag=' -expect_unresolved \*' archive_cmds='$CC -shared$allow_undefined_flag $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib' fi archive_cmds_need_lc='no' hardcode_libdir_flag_spec='$wl-rpath $wl$libdir' hardcode_libdir_separator=: ;; osf4* | osf5*) # as osf3* with the addition of -msym flag if test yes = "$GCC"; then allow_undefined_flag=' $wl-expect_unresolved $wl\*' archive_cmds='$CC -shared$allow_undefined_flag $pic_flag $libobjs $deplibs $compiler_flags $wl-msym $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib' hardcode_libdir_flag_spec='$wl-rpath $wl$libdir' else allow_undefined_flag=' -expect_unresolved \*' archive_cmds='$CC -shared$allow_undefined_flag $libobjs $deplibs $compiler_flags -msym -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib' archive_expsym_cmds='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; printf "%s\\n" "-hidden">> $lib.exp~ $CC -shared$allow_undefined_flag $wl-input $wl$lib.exp $compiler_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && $ECHO "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib~$RM $lib.exp' # Both c and cxx compiler support -rpath directly hardcode_libdir_flag_spec='-rpath $libdir' fi archive_cmds_need_lc='no' hardcode_libdir_separator=: ;; solaris*) no_undefined_flag=' -z defs' if test yes = "$GCC"; then wlarc='$wl' archive_cmds='$CC -shared $pic_flag $wl-z ${wl}text $wl-h $wl$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -shared $pic_flag $wl-z ${wl}text $wl-M $wl$lib.exp $wl-h $wl$soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' else case `$CC -V 2>&1` in *"Compilers 5.0"*) wlarc='' archive_cmds='$LD -G$allow_undefined_flag -h $soname -o $lib $libobjs $deplibs $linker_flags' archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $LD -G$allow_undefined_flag -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$RM $lib.exp' ;; *) wlarc='$wl' archive_cmds='$CC -G$allow_undefined_flag -h $soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -G$allow_undefined_flag -M $lib.exp -h $soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' ;; esac fi hardcode_libdir_flag_spec='-R$libdir' hardcode_shlibpath_var=no case $host_os in solaris2.[0-5] | solaris2.[0-5].*) ;; *) # The compiler driver will combine and reorder linker options, # but understands '-z linker_flag'. GCC discards it without '$wl', # but is careful enough not to reorder. # Supported since Solaris 2.6 (maybe 2.5.1?) if test yes = "$GCC"; then whole_archive_flag_spec='$wl-z ${wl}allextract$convenience $wl-z ${wl}defaultextract' else whole_archive_flag_spec='-z allextract$convenience -z defaultextract' fi ;; esac link_all_deplibs=yes ;; sunos4*) if test sequent = "$host_vendor"; then # Use $CC to link under sequent, because it throws in some extra .o # files that make .init and .fini sections work. archive_cmds='$CC -G $wl-h $soname -o $lib $libobjs $deplibs $compiler_flags' else archive_cmds='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags' fi hardcode_libdir_flag_spec='-L$libdir' hardcode_direct=yes hardcode_minus_L=yes hardcode_shlibpath_var=no ;; sysv4) case $host_vendor in sni) archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_direct=yes # is this really true??? ;; siemens) ## LD is ld it makes a PLAMLIB ## CC just makes a GrossModule. archive_cmds='$LD -G -o $lib $libobjs $deplibs $linker_flags' reload_cmds='$CC -r -o $output$reload_objs' hardcode_direct=no ;; motorola) archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_direct=no #Motorola manual says yes, but my tests say they lie ;; esac runpath_var='LD_RUN_PATH' hardcode_shlibpath_var=no ;; sysv4.3*) archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_shlibpath_var=no export_dynamic_flag_spec='-Bexport' ;; sysv4*MP*) if test -d /usr/nec; then archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_shlibpath_var=no runpath_var=LD_RUN_PATH hardcode_runpath_var=yes ld_shlibs=yes fi ;; sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7* | sco3.2v5.0.[024]*) no_undefined_flag='$wl-z,text' archive_cmds_need_lc=no hardcode_shlibpath_var=no runpath_var='LD_RUN_PATH' if test yes = "$GCC"; then archive_cmds='$CC -shared $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds='$CC -shared $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' else archive_cmds='$CC -G $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds='$CC -G $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' fi ;; sysv5* | sco3.2v5* | sco5v6*) # Note: We CANNOT use -z defs as we might desire, because we do not # link with -lc, and that would cause any symbols used from libc to # always be unresolved, which means just about no library would # ever link correctly. If we're not using GNU ld we use -z text # though, which does catch some bad symbols but isn't as heavy-handed # as -z defs. no_undefined_flag='$wl-z,text' allow_undefined_flag='$wl-z,nodefs' archive_cmds_need_lc=no hardcode_shlibpath_var=no hardcode_libdir_flag_spec='$wl-R,$libdir' hardcode_libdir_separator=':' link_all_deplibs=yes export_dynamic_flag_spec='$wl-Bexport' runpath_var='LD_RUN_PATH' if test yes = "$GCC"; then archive_cmds='$CC -shared $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds='$CC -shared $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' else archive_cmds='$CC -G $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds='$CC -G $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' fi ;; uts4*) archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_libdir_flag_spec='-L$libdir' hardcode_shlibpath_var=no ;; *) ld_shlibs=no ;; esac if test sni = "$host_vendor"; then case $host in sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) export_dynamic_flag_spec='$wl-Blargedynsym' ;; esac fi fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ld_shlibs" >&5 printf "%s\n" "$ld_shlibs" >&6; } test no = "$ld_shlibs" && can_build_shared=no with_gnu_ld=$with_gnu_ld # # Do we need to explicitly link libc? # case "x$archive_cmds_need_lc" in x|xyes) # Assume -lc should be added archive_cmds_need_lc=yes if test yes,yes = "$GCC,$enable_shared"; then case $archive_cmds in *'~'*) # FIXME: we may have to deal with multi-command sequences. ;; '$CC '*) # Test whether the compiler implicitly links with -lc since on some # systems, -lgcc has to come before -lc. If gcc already passes -lc # to ld, don't add -lc before -lgcc. { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether -lc should be explicitly linked in" >&5 printf %s "checking whether -lc should be explicitly linked in... " >&6; } if test ${lt_cv_archive_cmds_need_lc+y} then : printf %s "(cached) " >&6 else $as_nop $RM conftest* echo "$lt_simple_compile_test_code" > conftest.$ac_ext if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } 2>conftest.err; then soname=conftest lib=conftest libobjs=conftest.$ac_objext deplibs= wl=$lt_prog_compiler_wl pic_flag=$lt_prog_compiler_pic compiler_flags=-v linker_flags=-v verstring= output_objdir=. libname=conftest lt_save_allow_undefined_flag=$allow_undefined_flag allow_undefined_flag= if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$archive_cmds 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1\""; } >&5 (eval $archive_cmds 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1) 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } then lt_cv_archive_cmds_need_lc=no else lt_cv_archive_cmds_need_lc=yes fi allow_undefined_flag=$lt_save_allow_undefined_flag else cat conftest.err 1>&5 fi $RM conftest* fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_archive_cmds_need_lc" >&5 printf "%s\n" "$lt_cv_archive_cmds_need_lc" >&6; } archive_cmds_need_lc=$lt_cv_archive_cmds_need_lc ;; esac fi ;; esac { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking dynamic linker characteristics" >&5 printf %s "checking dynamic linker characteristics... " >&6; } if test yes = "$GCC"; then case $host_os in darwin*) lt_awk_arg='/^libraries:/,/LR/' ;; *) lt_awk_arg='/^libraries:/' ;; esac case $host_os in mingw* | cegcc*) lt_sed_strip_eq='s|=\([A-Za-z]:\)|\1|g' ;; *) lt_sed_strip_eq='s|=/|/|g' ;; esac lt_search_path_spec=`$CC -print-search-dirs | awk $lt_awk_arg | $SED -e "s/^libraries://" -e $lt_sed_strip_eq` case $lt_search_path_spec in *\;*) # if the path contains ";" then we assume it to be the separator # otherwise default to the standard path separator (i.e. ":") - it is # assumed that no part of a normal pathname contains ";" but that should # okay in the real world where ";" in dirpaths is itself problematic. lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED 's/;/ /g'` ;; *) lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED "s/$PATH_SEPARATOR/ /g"` ;; esac # Ok, now we have the path, separated by spaces, we can step through it # and add multilib dir if necessary... lt_tmp_lt_search_path_spec= lt_multi_os_dir=/`$CC $CPPFLAGS $CFLAGS $LDFLAGS -print-multi-os-directory 2>/dev/null` # ...but if some path component already ends with the multilib dir we assume # that all is fine and trust -print-search-dirs as is (GCC 4.2? or newer). case "$lt_multi_os_dir; $lt_search_path_spec " in "/; "* | "/.; "* | "/./; "* | *"$lt_multi_os_dir "* | *"$lt_multi_os_dir/ "*) lt_multi_os_dir= ;; esac for lt_sys_path in $lt_search_path_spec; do if test -d "$lt_sys_path$lt_multi_os_dir"; then lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path$lt_multi_os_dir" elif test -n "$lt_multi_os_dir"; then test -d "$lt_sys_path" && \ lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path" fi done lt_search_path_spec=`$ECHO "$lt_tmp_lt_search_path_spec" | awk ' BEGIN {RS = " "; FS = "/|\n";} { lt_foo = ""; lt_count = 0; for (lt_i = NF; lt_i > 0; lt_i--) { if ($lt_i != "" && $lt_i != ".") { if ($lt_i == "..") { lt_count++; } else { if (lt_count == 0) { lt_foo = "/" $lt_i lt_foo; } else { lt_count--; } } } } if (lt_foo != "") { lt_freq[lt_foo]++; } if (lt_freq[lt_foo] == 1) { print lt_foo; } }'` # AWK program above erroneously prepends '/' to C:/dos/paths # for these hosts. case $host_os in mingw* | cegcc*) lt_search_path_spec=`$ECHO "$lt_search_path_spec" |\ $SED 's|/\([A-Za-z]:\)|\1|g'` ;; esac sys_lib_search_path_spec=`$ECHO "$lt_search_path_spec" | $lt_NL2SP` else sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" fi library_names_spec= libname_spec='lib$name' soname_spec= shrext_cmds=.so postinstall_cmds= postuninstall_cmds= finish_cmds= finish_eval= shlibpath_var= shlibpath_overrides_runpath=unknown version_type=none dynamic_linker="$host_os ld.so" sys_lib_dlsearch_path_spec="/lib /usr/lib" need_lib_prefix=unknown hardcode_into_libs=no # when you set need_version to no, make sure it does not cause -set_version # flags to be left without arguments need_version=unknown case $host_os in aix3*) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='$libname$release$shared_ext$versuffix $libname.a' shlibpath_var=LIBPATH # AIX 3 has no versioning support, so we append a major version to the name. soname_spec='$libname$release$shared_ext$major' ;; aix[4-9]*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no hardcode_into_libs=yes if test ia64 = "$host_cpu"; then # AIX 5 supports IA64 library_names_spec='$libname$release$shared_ext$major $libname$release$shared_ext$versuffix $libname$shared_ext' shlibpath_var=LD_LIBRARY_PATH else # With GCC up to 2.95.x, collect2 would create an import file # for dependence libraries. The import file would start with # the line '#! .'. This would cause the generated library to # depend on '.', always an invalid library. This was fixed in # development snapshots of GCC prior to 3.0. case $host_os in aix4 | aix4.[01] | aix4.[01].*) if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)' echo ' yes ' echo '#endif'; } | $CC -E - | $GREP yes > /dev/null; then : else can_build_shared=no fi ;; esac # Using Import Files as archive members, it is possible to support # filename-based versioning of shared library archives on AIX. While # this would work for both with and without runtime linking, it will # prevent static linking of such archives. So we do filename-based # shared library versioning with .so extension only, which is used # when both runtime linking and shared linking is enabled. # Unfortunately, runtime linking may impact performance, so we do # not want this to be the default eventually. Also, we use the # versioned .so libs for executables only if there is the -brtl # linker flag in LDFLAGS as well, or --with-aix-soname=svr4 only. # To allow for filename-based versioning support, we need to create # libNAME.so.V as an archive file, containing: # *) an Import File, referring to the versioned filename of the # archive as well as the shared archive member, telling the # bitwidth (32 or 64) of that shared object, and providing the # list of exported symbols of that shared object, eventually # decorated with the 'weak' keyword # *) the shared object with the F_LOADONLY flag set, to really avoid # it being seen by the linker. # At run time we better use the real file rather than another symlink, # but for link time we create the symlink libNAME.so -> libNAME.so.V case $with_aix_soname,$aix_use_runtimelinking in # AIX (on Power*) has no versioning support, so currently we cannot hardcode correct # soname into executable. Probably we can add versioning support to # collect2, so additional links can be useful in future. aix,yes) # traditional libtool dynamic_linker='AIX unversionable lib.so' # If using run time linking (on AIX 4.2 or later) use lib.so # instead of lib.a to let people know that these are not # typical AIX shared libraries. library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' ;; aix,no) # traditional AIX only dynamic_linker='AIX lib.a(lib.so.V)' # We preserve .a as extension for shared libraries through AIX4.2 # and later when we are not doing run time linking. library_names_spec='$libname$release.a $libname.a' soname_spec='$libname$release$shared_ext$major' ;; svr4,*) # full svr4 only dynamic_linker="AIX lib.so.V($shared_archive_member_spec.o)" library_names_spec='$libname$release$shared_ext$major $libname$shared_ext' # We do not specify a path in Import Files, so LIBPATH fires. shlibpath_overrides_runpath=yes ;; *,yes) # both, prefer svr4 dynamic_linker="AIX lib.so.V($shared_archive_member_spec.o), lib.a(lib.so.V)" library_names_spec='$libname$release$shared_ext$major $libname$shared_ext' # unpreferred sharedlib libNAME.a needs extra handling postinstall_cmds='test -n "$linkname" || linkname="$realname"~func_stripname "" ".so" "$linkname"~$install_shared_prog "$dir/$func_stripname_result.$libext" "$destdir/$func_stripname_result.$libext"~test -z "$tstripme" || test -z "$striplib" || $striplib "$destdir/$func_stripname_result.$libext"' postuninstall_cmds='for n in $library_names $old_library; do :; done~func_stripname "" ".so" "$n"~test "$func_stripname_result" = "$n" || func_append rmfiles " $odir/$func_stripname_result.$libext"' # We do not specify a path in Import Files, so LIBPATH fires. shlibpath_overrides_runpath=yes ;; *,no) # both, prefer aix dynamic_linker="AIX lib.a(lib.so.V), lib.so.V($shared_archive_member_spec.o)" library_names_spec='$libname$release.a $libname.a' soname_spec='$libname$release$shared_ext$major' # unpreferred sharedlib libNAME.so.V and symlink libNAME.so need extra handling postinstall_cmds='test -z "$dlname" || $install_shared_prog $dir/$dlname $destdir/$dlname~test -z "$tstripme" || test -z "$striplib" || $striplib $destdir/$dlname~test -n "$linkname" || linkname=$realname~func_stripname "" ".a" "$linkname"~(cd "$destdir" && $LN_S -f $dlname $func_stripname_result.so)' postuninstall_cmds='test -z "$dlname" || func_append rmfiles " $odir/$dlname"~for n in $old_library $library_names; do :; done~func_stripname "" ".a" "$n"~func_append rmfiles " $odir/$func_stripname_result.so"' ;; esac shlibpath_var=LIBPATH fi ;; amigaos*) case $host_cpu in powerpc) # Since July 2007 AmigaOS4 officially supports .so libraries. # When compiling the executable, add -use-dynld -Lsobjs: to the compileline. library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' ;; m68k) library_names_spec='$libname.ixlibrary $libname.a' # Create ${libname}_ixlibrary.a entries in /sys/libs. finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`func_echo_all "$lib" | $SED '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done' ;; esac ;; beos*) library_names_spec='$libname$shared_ext' dynamic_linker="$host_os ld.so" shlibpath_var=LIBRARY_PATH ;; bsdi[45]*) version_type=linux # correct to gnu/linux during the next big refactor need_version=no library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir' shlibpath_var=LD_LIBRARY_PATH sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib" sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib" # the default ld.so.conf also contains /usr/contrib/lib and # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow # libtool to hard-code these into programs ;; cygwin* | mingw* | pw32* | cegcc*) version_type=windows shrext_cmds=.dll need_version=no need_lib_prefix=no case $GCC,$cc_basename in yes,*) # gcc library_names_spec='$libname.dll.a' # DLL is installed to $(libdir)/../bin by postinstall_cmds postinstall_cmds='base_file=`basename \$file`~ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\$base_file'\''i; echo \$dlname'\''`~ dldir=$destdir/`dirname \$dlpath`~ test -d \$dldir || mkdir -p \$dldir~ $install_prog $dir/$dlname \$dldir/$dlname~ chmod a+x \$dldir/$dlname~ if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then eval '\''$striplib \$dldir/$dlname'\'' || exit \$?; fi' postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ dlpath=$dir/\$dldll~ $RM \$dlpath' shlibpath_overrides_runpath=yes case $host_os in cygwin*) # Cygwin DLLs use 'cyg' prefix rather than 'lib' soname_spec='`echo $libname | $SED -e 's/^lib/cyg/'``echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext' sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/lib/w32api" ;; mingw* | cegcc*) # MinGW DLLs use traditional 'lib' prefix soname_spec='$libname`echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext' ;; pw32*) # pw32 DLLs use 'pw' prefix rather than 'lib' library_names_spec='`echo $libname | $SED -e 's/^lib/pw/'``echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext' ;; esac dynamic_linker='Win32 ld.exe' ;; *,cl* | *,icl*) # Native MSVC or ICC libname_spec='$name' soname_spec='$libname`echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext' library_names_spec='$libname.dll.lib' case $build_os in mingw*) sys_lib_search_path_spec= lt_save_ifs=$IFS IFS=';' for lt_path in $LIB do IFS=$lt_save_ifs # Let DOS variable expansion print the short 8.3 style file name. lt_path=`cd "$lt_path" 2>/dev/null && cmd //C "for %i in (".") do @echo %~si"` sys_lib_search_path_spec="$sys_lib_search_path_spec $lt_path" done IFS=$lt_save_ifs # Convert to MSYS style. sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's|\\\\|/|g' -e 's| \\([a-zA-Z]\\):| /\\1|g' -e 's|^ ||'` ;; cygwin*) # Convert to unix form, then to dos form, then back to unix form # but this time dos style (no spaces!) so that the unix form looks # like /cygdrive/c/PROGRA~1:/cygdr... sys_lib_search_path_spec=`cygpath --path --unix "$LIB"` sys_lib_search_path_spec=`cygpath --path --dos "$sys_lib_search_path_spec" 2>/dev/null` sys_lib_search_path_spec=`cygpath --path --unix "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` ;; *) sys_lib_search_path_spec=$LIB if $ECHO "$sys_lib_search_path_spec" | $GREP ';[c-zC-Z]:/' >/dev/null; then # It is most probably a Windows format PATH. sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` else sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` fi # FIXME: find the short name or the path components, as spaces are # common. (e.g. "Program Files" -> "PROGRA~1") ;; esac # DLL is installed to $(libdir)/../bin by postinstall_cmds postinstall_cmds='base_file=`basename \$file`~ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\$base_file'\''i; echo \$dlname'\''`~ dldir=$destdir/`dirname \$dlpath`~ test -d \$dldir || mkdir -p \$dldir~ $install_prog $dir/$dlname \$dldir/$dlname' postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ dlpath=$dir/\$dldll~ $RM \$dlpath' shlibpath_overrides_runpath=yes dynamic_linker='Win32 link.exe' ;; *) # Assume MSVC and ICC wrapper library_names_spec='$libname`echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext $libname.lib' dynamic_linker='Win32 ld.exe' ;; esac # FIXME: first we should search . and the directory the executable is in shlibpath_var=PATH ;; darwin* | rhapsody*) dynamic_linker="$host_os dyld" version_type=darwin need_lib_prefix=no need_version=no library_names_spec='$libname$release$major$shared_ext $libname$shared_ext' soname_spec='$libname$release$major$shared_ext' shlibpath_overrides_runpath=yes shlibpath_var=DYLD_LIBRARY_PATH shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`' sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/local/lib" sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib' ;; dgux*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' shlibpath_var=LD_LIBRARY_PATH ;; freebsd* | dragonfly* | midnightbsd*) # DragonFly does not have aout. When/if they implement a new # versioning mechanism, adjust this. if test -x /usr/bin/objformat; then objformat=`/usr/bin/objformat` else case $host_os in freebsd[23].*) objformat=aout ;; *) objformat=elf ;; esac fi version_type=freebsd-$objformat case $version_type in freebsd-elf*) library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' need_version=no need_lib_prefix=no ;; freebsd-*) library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix' need_version=yes ;; esac shlibpath_var=LD_LIBRARY_PATH case $host_os in freebsd2.*) shlibpath_overrides_runpath=yes ;; freebsd3.[01]* | freebsdelf3.[01]*) shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; freebsd3.[2-9]* | freebsdelf3.[2-9]* | \ freebsd4.[0-5] | freebsdelf4.[0-5] | freebsd4.1.1 | freebsdelf4.1.1) shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; *) # from 4.6 on, and DragonFly shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; esac ;; haiku*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no dynamic_linker="$host_os runtime_loader" library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' shlibpath_var=LIBRARY_PATH shlibpath_overrides_runpath=no sys_lib_dlsearch_path_spec='/boot/home/config/lib /boot/common/lib /boot/system/lib' hardcode_into_libs=yes ;; hpux9* | hpux10* | hpux11*) # Give a soname corresponding to the major version so that dld.sl refuses to # link against other versions. version_type=sunos need_lib_prefix=no need_version=no case $host_cpu in ia64*) shrext_cmds='.so' hardcode_into_libs=yes dynamic_linker="$host_os dld.so" shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' if test 32 = "$HPUX_IA64_MODE"; then sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib" sys_lib_dlsearch_path_spec=/usr/lib/hpux32 else sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64" sys_lib_dlsearch_path_spec=/usr/lib/hpux64 fi ;; hppa*64*) shrext_cmds='.sl' hardcode_into_libs=yes dynamic_linker="$host_os dld.sl" shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64" sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec ;; *) shrext_cmds='.sl' dynamic_linker="$host_os dld.sl" shlibpath_var=SHLIB_PATH shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' ;; esac # HP-UX runs *really* slowly unless shared libraries are mode 555, ... postinstall_cmds='chmod 555 $lib' # or fails outright, so override atomically: install_override_mode=555 ;; interix[3-9]*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; irix5* | irix6* | nonstopux*) case $host_os in nonstopux*) version_type=nonstopux ;; *) if test yes = "$lt_cv_prog_gnu_ld"; then version_type=linux # correct to gnu/linux during the next big refactor else version_type=irix fi ;; esac need_lib_prefix=no need_version=no soname_spec='$libname$release$shared_ext$major' library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$release$shared_ext $libname$shared_ext' case $host_os in irix5* | nonstopux*) libsuff= shlibsuff= ;; *) case $LD in # libtool.m4 will add one of these switches to LD *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") libsuff= shlibsuff= libmagic=32-bit;; *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") libsuff=32 shlibsuff=N32 libmagic=N32;; *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") libsuff=64 shlibsuff=64 libmagic=64-bit;; *) libsuff= shlibsuff= libmagic=never-match;; esac ;; esac shlibpath_var=LD_LIBRARY${shlibsuff}_PATH shlibpath_overrides_runpath=no sys_lib_search_path_spec="/usr/lib$libsuff /lib$libsuff /usr/local/lib$libsuff" sys_lib_dlsearch_path_spec="/usr/lib$libsuff /lib$libsuff" hardcode_into_libs=yes ;; # No shared lib support for Linux oldld, aout, or coff. linux*oldld* | linux*aout* | linux*coff*) dynamic_linker=no ;; linux*android*) version_type=none # Android doesn't support versioned libraries. need_lib_prefix=no need_version=no library_names_spec='$libname$release$shared_ext' soname_spec='$libname$release$shared_ext' finish_cmds= shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes # This implies no fast_install, which is unacceptable. # Some rework will be needed to allow for fast_install # before this can be enabled. hardcode_into_libs=yes dynamic_linker='Android linker' # Don't embed -rpath directories since the linker doesn't support them. hardcode_libdir_flag_spec='-L$libdir' ;; # This must be glibc/ELF. linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no # Some binutils ld are patched to set DT_RUNPATH if test ${lt_cv_shlibpath_overrides_runpath+y} then : printf %s "(cached) " >&6 else $as_nop lt_cv_shlibpath_overrides_runpath=no save_LDFLAGS=$LDFLAGS save_libdir=$libdir eval "libdir=/foo; wl=\"$lt_prog_compiler_wl\"; \ LDFLAGS=\"\$LDFLAGS $hardcode_libdir_flag_spec\"" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : if ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null then : lt_cv_shlibpath_overrides_runpath=yes fi fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext LDFLAGS=$save_LDFLAGS libdir=$save_libdir fi shlibpath_overrides_runpath=$lt_cv_shlibpath_overrides_runpath # This implies no fast_install, which is unacceptable. # Some rework will be needed to allow for fast_install # before this can be enabled. hardcode_into_libs=yes # Ideally, we could use ldconfig to report *all* directores which are # searched for libraries, however this is still not possible. Aside from not # being certain /sbin/ldconfig is available, command # 'ldconfig -N -X -v | grep ^/' on 64bit Fedora does not report /usr/lib64, # even though it is searched at run-time. Try to do the best guess by # appending ld.so.conf contents (and includes) to the search path. if test -f /etc/ld.so.conf; then lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[ ]*hwcap[ ]/d;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;s/"//g;/^$/d' | tr '\n' ' '` sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra" fi # We used to test for /lib/ld.so.1 and disable shared libraries on # powerpc, because MkLinux only supported shared libraries with the # GNU dynamic linker. Since this was broken with cross compilers, # most powerpc-linux boxes support dynamic linking these days and # people can always --disable-shared, the test was removed, and we # assume the GNU/Linux dynamic linker is in use. dynamic_linker='GNU/Linux ld.so' ;; netbsdelf*-gnu) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes dynamic_linker='NetBSD ld.elf_so' ;; netbsd*) version_type=sunos need_lib_prefix=no need_version=no if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix' finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' dynamic_linker='NetBSD (a.out) ld.so' else library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' dynamic_linker='NetBSD ld.elf_so' fi shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; newsos6) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes ;; *nto* | *qnx*) version_type=qnx need_lib_prefix=no need_version=no library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes dynamic_linker='ldqnx.so' ;; openbsd* | bitrig*) version_type=sunos sys_lib_dlsearch_path_spec=/usr/lib need_lib_prefix=no if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`"; then need_version=no else need_version=yes fi library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix' finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes ;; os2*) libname_spec='$name' version_type=windows shrext_cmds=.dll need_version=no need_lib_prefix=no # OS/2 can only load a DLL with a base name of 8 characters or less. soname_spec='`test -n "$os2dllname" && libname="$os2dllname"; v=$($ECHO $release$versuffix | tr -d .-); n=$($ECHO $libname | cut -b -$((8 - ${#v})) | tr . _); $ECHO $n$v`$shared_ext' library_names_spec='${libname}_dll.$libext' dynamic_linker='OS/2 ld.exe' shlibpath_var=BEGINLIBPATH sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec postinstall_cmds='base_file=`basename \$file`~ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\$base_file'\''i; $ECHO \$dlname'\''`~ dldir=$destdir/`dirname \$dlpath`~ test -d \$dldir || mkdir -p \$dldir~ $install_prog $dir/$dlname \$dldir/$dlname~ chmod a+x \$dldir/$dlname~ if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then eval '\''$striplib \$dldir/$dlname'\'' || exit \$?; fi' postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; $ECHO \$dlname'\''`~ dlpath=$dir/\$dldll~ $RM \$dlpath' ;; osf3* | osf4* | osf5*) version_type=osf need_lib_prefix=no need_version=no soname_spec='$libname$release$shared_ext$major' library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' shlibpath_var=LD_LIBRARY_PATH sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib" sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec ;; rdos*) dynamic_linker=no ;; solaris*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes # ldd complains unless libraries are executable postinstall_cmds='chmod +x $lib' ;; sunos4*) version_type=sunos library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix' finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes if test yes = "$with_gnu_ld"; then need_lib_prefix=no fi need_version=yes ;; sysv4 | sysv4.3*) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' shlibpath_var=LD_LIBRARY_PATH case $host_vendor in sni) shlibpath_overrides_runpath=no need_lib_prefix=no runpath_var=LD_RUN_PATH ;; siemens) need_lib_prefix=no ;; motorola) need_lib_prefix=no need_version=no shlibpath_overrides_runpath=no sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib' ;; esac ;; sysv4*MP*) if test -d /usr/nec; then version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='$libname$shared_ext.$versuffix $libname$shared_ext.$major $libname$shared_ext' soname_spec='$libname$shared_ext.$major' shlibpath_var=LD_LIBRARY_PATH fi ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) version_type=sco need_lib_prefix=no need_version=no library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes if test yes = "$with_gnu_ld"; then sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib' else sys_lib_search_path_spec='/usr/ccs/lib /usr/lib' case $host_os in sco3.2v5*) sys_lib_search_path_spec="$sys_lib_search_path_spec /lib" ;; esac fi sys_lib_dlsearch_path_spec='/usr/lib' ;; tpf*) # TPF is a cross-target only. Preferred cross-host = GNU/Linux. version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; uts4*) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' shlibpath_var=LD_LIBRARY_PATH ;; *) dynamic_linker=no ;; esac { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $dynamic_linker" >&5 printf "%s\n" "$dynamic_linker" >&6; } test no = "$dynamic_linker" && can_build_shared=no variables_saved_for_relink="PATH $shlibpath_var $runpath_var" if test yes = "$GCC"; then variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" fi if test set = "${lt_cv_sys_lib_search_path_spec+set}"; then sys_lib_search_path_spec=$lt_cv_sys_lib_search_path_spec fi if test set = "${lt_cv_sys_lib_dlsearch_path_spec+set}"; then sys_lib_dlsearch_path_spec=$lt_cv_sys_lib_dlsearch_path_spec fi # remember unaugmented sys_lib_dlsearch_path content for libtool script decls... configure_time_dlsearch_path=$sys_lib_dlsearch_path_spec # ... but it needs LT_SYS_LIBRARY_PATH munging for other configure-time code func_munge_path_list sys_lib_dlsearch_path_spec "$LT_SYS_LIBRARY_PATH" # to be used as default LT_SYS_LIBRARY_PATH value in generated libtool configure_time_lt_sys_library_path=$LT_SYS_LIBRARY_PATH { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking how to hardcode library paths into programs" >&5 printf %s "checking how to hardcode library paths into programs... " >&6; } hardcode_action= if test -n "$hardcode_libdir_flag_spec" || test -n "$runpath_var" || test yes = "$hardcode_automatic"; then # We can hardcode non-existent directories. if test no != "$hardcode_direct" && # If the only mechanism to avoid hardcoding is shlibpath_var, we # have to relink, otherwise we might link with an installed library # when we should be linking with a yet-to-be-installed one ## test no != "$_LT_TAGVAR(hardcode_shlibpath_var, )" && test no != "$hardcode_minus_L"; then # Linking always hardcodes the temporary library directory. hardcode_action=relink else # We can link without hardcoding, and we can hardcode nonexisting dirs. hardcode_action=immediate fi else # We cannot hardcode anything, or else we can only hardcode existing # directories. hardcode_action=unsupported fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $hardcode_action" >&5 printf "%s\n" "$hardcode_action" >&6; } if test relink = "$hardcode_action" || test yes = "$inherit_rpath"; then # Fast installation is not supported enable_fast_install=no elif test yes = "$shlibpath_overrides_runpath" || test no = "$enable_shared"; then # Fast installation is not necessary enable_fast_install=needless fi if test yes != "$enable_dlopen"; then enable_dlopen=unknown enable_dlopen_self=unknown enable_dlopen_self_static=unknown else lt_cv_dlopen=no lt_cv_dlopen_libs= case $host_os in beos*) lt_cv_dlopen=load_add_on lt_cv_dlopen_libs= lt_cv_dlopen_self=yes ;; mingw* | pw32* | cegcc*) lt_cv_dlopen=LoadLibrary lt_cv_dlopen_libs= ;; cygwin*) lt_cv_dlopen=dlopen lt_cv_dlopen_libs= ;; darwin*) # if libdl is installed we need to link against it { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5 printf %s "checking for dlopen in -ldl... " >&6; } if test ${ac_cv_lib_dl_dlopen+y} then : printf %s "(cached) " >&6 else $as_nop ac_check_lib_save_LIBS=$LIBS LIBS="-ldl $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ char dlopen (); int main (void) { return dlopen (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : ac_cv_lib_dl_dlopen=yes else $as_nop ac_cv_lib_dl_dlopen=no fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlopen" >&5 printf "%s\n" "$ac_cv_lib_dl_dlopen" >&6; } if test "x$ac_cv_lib_dl_dlopen" = xyes then : lt_cv_dlopen=dlopen lt_cv_dlopen_libs=-ldl else $as_nop lt_cv_dlopen=dyld lt_cv_dlopen_libs= lt_cv_dlopen_self=yes fi ;; tpf*) # Don't try to run any link tests for TPF. We know it's impossible # because TPF is a cross-compiler, and we know how we open DSOs. lt_cv_dlopen=dlopen lt_cv_dlopen_libs= lt_cv_dlopen_self=no ;; *) ac_fn_c_check_func "$LINENO" "shl_load" "ac_cv_func_shl_load" if test "x$ac_cv_func_shl_load" = xyes then : lt_cv_dlopen=shl_load else $as_nop { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for shl_load in -ldld" >&5 printf %s "checking for shl_load in -ldld... " >&6; } if test ${ac_cv_lib_dld_shl_load+y} then : printf %s "(cached) " >&6 else $as_nop ac_check_lib_save_LIBS=$LIBS LIBS="-ldld $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ char shl_load (); int main (void) { return shl_load (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : ac_cv_lib_dld_shl_load=yes else $as_nop ac_cv_lib_dld_shl_load=no fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dld_shl_load" >&5 printf "%s\n" "$ac_cv_lib_dld_shl_load" >&6; } if test "x$ac_cv_lib_dld_shl_load" = xyes then : lt_cv_dlopen=shl_load lt_cv_dlopen_libs=-ldld else $as_nop ac_fn_c_check_func "$LINENO" "dlopen" "ac_cv_func_dlopen" if test "x$ac_cv_func_dlopen" = xyes then : lt_cv_dlopen=dlopen else $as_nop { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5 printf %s "checking for dlopen in -ldl... " >&6; } if test ${ac_cv_lib_dl_dlopen+y} then : printf %s "(cached) " >&6 else $as_nop ac_check_lib_save_LIBS=$LIBS LIBS="-ldl $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ char dlopen (); int main (void) { return dlopen (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : ac_cv_lib_dl_dlopen=yes else $as_nop ac_cv_lib_dl_dlopen=no fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlopen" >&5 printf "%s\n" "$ac_cv_lib_dl_dlopen" >&6; } if test "x$ac_cv_lib_dl_dlopen" = xyes then : lt_cv_dlopen=dlopen lt_cv_dlopen_libs=-ldl else $as_nop { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for dlopen in -lsvld" >&5 printf %s "checking for dlopen in -lsvld... " >&6; } if test ${ac_cv_lib_svld_dlopen+y} then : printf %s "(cached) " >&6 else $as_nop ac_check_lib_save_LIBS=$LIBS LIBS="-lsvld $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ char dlopen (); int main (void) { return dlopen (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : ac_cv_lib_svld_dlopen=yes else $as_nop ac_cv_lib_svld_dlopen=no fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_svld_dlopen" >&5 printf "%s\n" "$ac_cv_lib_svld_dlopen" >&6; } if test "x$ac_cv_lib_svld_dlopen" = xyes then : lt_cv_dlopen=dlopen lt_cv_dlopen_libs=-lsvld else $as_nop { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for dld_link in -ldld" >&5 printf %s "checking for dld_link in -ldld... " >&6; } if test ${ac_cv_lib_dld_dld_link+y} then : printf %s "(cached) " >&6 else $as_nop ac_check_lib_save_LIBS=$LIBS LIBS="-ldld $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ char dld_link (); int main (void) { return dld_link (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : ac_cv_lib_dld_dld_link=yes else $as_nop ac_cv_lib_dld_dld_link=no fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dld_dld_link" >&5 printf "%s\n" "$ac_cv_lib_dld_dld_link" >&6; } if test "x$ac_cv_lib_dld_dld_link" = xyes then : lt_cv_dlopen=dld_link lt_cv_dlopen_libs=-ldld fi fi fi fi fi fi ;; esac if test no = "$lt_cv_dlopen"; then enable_dlopen=no else enable_dlopen=yes fi case $lt_cv_dlopen in dlopen) save_CPPFLAGS=$CPPFLAGS test yes = "$ac_cv_header_dlfcn_h" && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H" save_LDFLAGS=$LDFLAGS wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\" save_LIBS=$LIBS LIBS="$lt_cv_dlopen_libs $LIBS" { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether a program can dlopen itself" >&5 printf %s "checking whether a program can dlopen itself... " >&6; } if test ${lt_cv_dlopen_self+y} then : printf %s "(cached) " >&6 else $as_nop if test yes = "$cross_compiling"; then : lt_cv_dlopen_self=cross else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext <<_LT_EOF #line $LINENO "configure" #include "confdefs.h" #if HAVE_DLFCN_H #include #endif #include #ifdef RTLD_GLOBAL # define LT_DLGLOBAL RTLD_GLOBAL #else # ifdef DL_GLOBAL # define LT_DLGLOBAL DL_GLOBAL # else # define LT_DLGLOBAL 0 # endif #endif /* We may have to define LT_DLLAZY_OR_NOW in the command line if we find out it does not work in some platform. */ #ifndef LT_DLLAZY_OR_NOW # ifdef RTLD_LAZY # define LT_DLLAZY_OR_NOW RTLD_LAZY # else # ifdef DL_LAZY # define LT_DLLAZY_OR_NOW DL_LAZY # else # ifdef RTLD_NOW # define LT_DLLAZY_OR_NOW RTLD_NOW # else # ifdef DL_NOW # define LT_DLLAZY_OR_NOW DL_NOW # else # define LT_DLLAZY_OR_NOW 0 # endif # endif # endif # endif #endif /* When -fvisibility=hidden is used, assume the code has been annotated correspondingly for the symbols needed. */ #if defined __GNUC__ && (((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3)) int fnord () __attribute__((visibility("default"))); #endif int fnord () { return 42; } int main () { void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); int status = $lt_dlunknown; if (self) { if (dlsym (self,"fnord")) status = $lt_dlno_uscore; else { if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; else puts (dlerror ()); } /* dlclose (self); */ } else puts (dlerror ()); return status; } _LT_EOF if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 (eval $ac_link) 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && test -s "conftest$ac_exeext" 2>/dev/null; then (./conftest; exit; ) >&5 2>/dev/null lt_status=$? case x$lt_status in x$lt_dlno_uscore) lt_cv_dlopen_self=yes ;; x$lt_dlneed_uscore) lt_cv_dlopen_self=yes ;; x$lt_dlunknown|x*) lt_cv_dlopen_self=no ;; esac else : # compilation failed lt_cv_dlopen_self=no fi fi rm -fr conftest* fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_dlopen_self" >&5 printf "%s\n" "$lt_cv_dlopen_self" >&6; } if test yes = "$lt_cv_dlopen_self"; then wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $lt_prog_compiler_static\" { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether a statically linked program can dlopen itself" >&5 printf %s "checking whether a statically linked program can dlopen itself... " >&6; } if test ${lt_cv_dlopen_self_static+y} then : printf %s "(cached) " >&6 else $as_nop if test yes = "$cross_compiling"; then : lt_cv_dlopen_self_static=cross else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext <<_LT_EOF #line $LINENO "configure" #include "confdefs.h" #if HAVE_DLFCN_H #include #endif #include #ifdef RTLD_GLOBAL # define LT_DLGLOBAL RTLD_GLOBAL #else # ifdef DL_GLOBAL # define LT_DLGLOBAL DL_GLOBAL # else # define LT_DLGLOBAL 0 # endif #endif /* We may have to define LT_DLLAZY_OR_NOW in the command line if we find out it does not work in some platform. */ #ifndef LT_DLLAZY_OR_NOW # ifdef RTLD_LAZY # define LT_DLLAZY_OR_NOW RTLD_LAZY # else # ifdef DL_LAZY # define LT_DLLAZY_OR_NOW DL_LAZY # else # ifdef RTLD_NOW # define LT_DLLAZY_OR_NOW RTLD_NOW # else # ifdef DL_NOW # define LT_DLLAZY_OR_NOW DL_NOW # else # define LT_DLLAZY_OR_NOW 0 # endif # endif # endif # endif #endif /* When -fvisibility=hidden is used, assume the code has been annotated correspondingly for the symbols needed. */ #if defined __GNUC__ && (((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3)) int fnord () __attribute__((visibility("default"))); #endif int fnord () { return 42; } int main () { void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); int status = $lt_dlunknown; if (self) { if (dlsym (self,"fnord")) status = $lt_dlno_uscore; else { if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; else puts (dlerror ()); } /* dlclose (self); */ } else puts (dlerror ()); return status; } _LT_EOF if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 (eval $ac_link) 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && test -s "conftest$ac_exeext" 2>/dev/null; then (./conftest; exit; ) >&5 2>/dev/null lt_status=$? case x$lt_status in x$lt_dlno_uscore) lt_cv_dlopen_self_static=yes ;; x$lt_dlneed_uscore) lt_cv_dlopen_self_static=yes ;; x$lt_dlunknown|x*) lt_cv_dlopen_self_static=no ;; esac else : # compilation failed lt_cv_dlopen_self_static=no fi fi rm -fr conftest* fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_dlopen_self_static" >&5 printf "%s\n" "$lt_cv_dlopen_self_static" >&6; } fi CPPFLAGS=$save_CPPFLAGS LDFLAGS=$save_LDFLAGS LIBS=$save_LIBS ;; esac case $lt_cv_dlopen_self in yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;; *) enable_dlopen_self=unknown ;; esac case $lt_cv_dlopen_self_static in yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;; *) enable_dlopen_self_static=unknown ;; esac fi striplib= old_striplib= { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether stripping libraries is possible" >&5 printf %s "checking whether stripping libraries is possible... " >&6; } if test -z "$STRIP"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } else if $STRIP -V 2>&1 | $GREP "GNU strip" >/dev/null; then old_striplib="$STRIP --strip-debug" striplib="$STRIP --strip-unneeded" { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 printf "%s\n" "yes" >&6; } else case $host_os in darwin*) # FIXME - insert some real tests, host_os isn't really good enough striplib="$STRIP -x" old_striplib="$STRIP -S" { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 printf "%s\n" "yes" >&6; } ;; freebsd*) if $STRIP -V 2>&1 | $GREP "elftoolchain" >/dev/null; then old_striplib="$STRIP --strip-debug" striplib="$STRIP --strip-unneeded" { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 printf "%s\n" "yes" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi ;; *) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } ;; esac fi fi # Report what library types will actually be built { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if libtool supports shared libraries" >&5 printf %s "checking if libtool supports shared libraries... " >&6; } { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $can_build_shared" >&5 printf "%s\n" "$can_build_shared" >&6; } { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether to build shared libraries" >&5 printf %s "checking whether to build shared libraries... " >&6; } test no = "$can_build_shared" && enable_shared=no # On AIX, shared libraries and static libraries use the same namespace, and # are all built from PIC. case $host_os in aix3*) test yes = "$enable_shared" && enable_static=no if test -n "$RANLIB"; then archive_cmds="$archive_cmds~\$RANLIB \$lib" postinstall_cmds='$RANLIB $lib' fi ;; aix[4-9]*) if test ia64 != "$host_cpu"; then case $enable_shared,$with_aix_soname,$aix_use_runtimelinking in yes,aix,yes) ;; # shared object as lib.so file only yes,svr4,*) ;; # shared object as lib.so archive member only yes,*) enable_static=no ;; # shared object in lib.a archive as well esac fi ;; esac { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $enable_shared" >&5 printf "%s\n" "$enable_shared" >&6; } { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether to build static libraries" >&5 printf %s "checking whether to build static libraries... " >&6; } # Make sure either enable_shared or enable_static is yes. test yes = "$enable_shared" || enable_static=yes { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $enable_static" >&5 printf "%s\n" "$enable_static" >&6; } fi ac_ext=cpp ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu CC=$lt_save_CC if test -n "$CXX" && ( test no != "$CXX" && ( (test g++ = "$CXX" && `g++ -v >/dev/null 2>&1` ) || (test g++ != "$CXX"))); then ac_ext=cpp ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking how to run the C++ preprocessor" >&5 printf %s "checking how to run the C++ preprocessor... " >&6; } if test -z "$CXXCPP"; then if test ${ac_cv_prog_CXXCPP+y} then : printf %s "(cached) " >&6 else $as_nop # Double quotes because $CXX needs to be expanded for CXXCPP in "$CXX -E" cpp /lib/cpp do ac_preproc_ok=false for ac_cxx_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include Syntax error _ACEOF if ac_fn_cxx_try_cpp "$LINENO" then : else $as_nop # Broken: fails on valid input. continue fi rm -f conftest.err conftest.i conftest.$ac_ext # OK, works on sane cases. Now check whether nonexistent headers # can be detected and how. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if ac_fn_cxx_try_cpp "$LINENO" then : # Broken: success on invalid input. continue else $as_nop # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.i conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.i conftest.err conftest.$ac_ext if $ac_preproc_ok then : break fi done ac_cv_prog_CXXCPP=$CXXCPP fi CXXCPP=$ac_cv_prog_CXXCPP else ac_cv_prog_CXXCPP=$CXXCPP fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CXXCPP" >&5 printf "%s\n" "$CXXCPP" >&6; } ac_preproc_ok=false for ac_cxx_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include Syntax error _ACEOF if ac_fn_cxx_try_cpp "$LINENO" then : else $as_nop # Broken: fails on valid input. continue fi rm -f conftest.err conftest.i conftest.$ac_ext # OK, works on sane cases. Now check whether nonexistent headers # can be detected and how. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if ac_fn_cxx_try_cpp "$LINENO" then : # Broken: success on invalid input. continue else $as_nop # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.i conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.i conftest.err conftest.$ac_ext if $ac_preproc_ok then : else $as_nop { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "C++ preprocessor \"$CXXCPP\" fails sanity check See \`config.log' for more details" "$LINENO" 5; } fi ac_ext=cpp ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu else _lt_caught_CXX_error=yes fi ac_ext=cpp ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu archive_cmds_need_lc_CXX=no allow_undefined_flag_CXX= always_export_symbols_CXX=no archive_expsym_cmds_CXX= compiler_needs_object_CXX=no export_dynamic_flag_spec_CXX= hardcode_direct_CXX=no hardcode_direct_absolute_CXX=no hardcode_libdir_flag_spec_CXX= hardcode_libdir_separator_CXX= hardcode_minus_L_CXX=no hardcode_shlibpath_var_CXX=unsupported hardcode_automatic_CXX=no inherit_rpath_CXX=no module_cmds_CXX= module_expsym_cmds_CXX= link_all_deplibs_CXX=unknown old_archive_cmds_CXX=$old_archive_cmds reload_flag_CXX=$reload_flag reload_cmds_CXX=$reload_cmds no_undefined_flag_CXX= whole_archive_flag_spec_CXX= enable_shared_with_static_runtimes_CXX=no # Source file extension for C++ test sources. ac_ext=cpp # Object file extension for compiled C++ test sources. objext=o objext_CXX=$objext # No sense in running all these tests if we already determined that # the CXX compiler isn't working. Some variables (like enable_shared) # are currently assumed to apply to all compilers on this platform, # and will be corrupted by setting them based on a non-working compiler. if test yes != "$_lt_caught_CXX_error"; then # Code to be used in simple compile tests lt_simple_compile_test_code="int some_variable = 0;" # Code to be used in simple link tests lt_simple_link_test_code='int main(int, char *[]) { return(0); }' # ltmain only uses $CC for tagged configurations so make sure $CC is set. # If no C compiler was specified, use CC. LTCC=${LTCC-"$CC"} # If no C compiler flags were specified, use CFLAGS. LTCFLAGS=${LTCFLAGS-"$CFLAGS"} # Allow CC to be a program name with arguments. compiler=$CC # save warnings/boilerplate of simple test code ac_outfile=conftest.$ac_objext echo "$lt_simple_compile_test_code" >conftest.$ac_ext eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err _lt_compiler_boilerplate=`cat conftest.err` $RM conftest* ac_outfile=conftest.$ac_objext echo "$lt_simple_link_test_code" >conftest.$ac_ext eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err _lt_linker_boilerplate=`cat conftest.err` $RM -r conftest* # Allow CC to be a program name with arguments. lt_save_CC=$CC lt_save_CFLAGS=$CFLAGS lt_save_LD=$LD lt_save_GCC=$GCC GCC=$GXX lt_save_with_gnu_ld=$with_gnu_ld lt_save_path_LD=$lt_cv_path_LD if test -n "${lt_cv_prog_gnu_ldcxx+set}"; then lt_cv_prog_gnu_ld=$lt_cv_prog_gnu_ldcxx else $as_unset lt_cv_prog_gnu_ld fi if test -n "${lt_cv_path_LDCXX+set}"; then lt_cv_path_LD=$lt_cv_path_LDCXX else $as_unset lt_cv_path_LD fi test -z "${LDCXX+set}" || LD=$LDCXX CC=${CXX-"c++"} CFLAGS=$CXXFLAGS compiler=$CC compiler_CXX=$CC func_cc_basename $compiler cc_basename=$func_cc_basename_result if test -n "$compiler"; then # We don't want -fno-exception when compiling C++ code, so set the # no_builtin_flag separately if test yes = "$GXX"; then lt_prog_compiler_no_builtin_flag_CXX=' -fno-builtin' else lt_prog_compiler_no_builtin_flag_CXX= fi if test yes = "$GXX"; then # Set up default GNU C++ configuration # Check whether --with-gnu-ld was given. if test ${with_gnu_ld+y} then : withval=$with_gnu_ld; test no = "$withval" || with_gnu_ld=yes else $as_nop with_gnu_ld=no fi ac_prog=ld if test yes = "$GCC"; then # Check if gcc -print-prog-name=ld gives a path. { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for ld used by $CC" >&5 printf %s "checking for ld used by $CC... " >&6; } case $host in *-*-mingw*) # gcc leaves a trailing carriage return, which upsets mingw ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; *) ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; esac case $ac_prog in # Accept absolute paths. [\\/]* | ?:[\\/]*) re_direlt='/[^/][^/]*/\.\./' # Canonicalize the pathname of ld ac_prog=`$ECHO "$ac_prog"| $SED 's%\\\\%/%g'` while $ECHO "$ac_prog" | $GREP "$re_direlt" > /dev/null 2>&1; do ac_prog=`$ECHO $ac_prog| $SED "s%$re_direlt%/%"` done test -z "$LD" && LD=$ac_prog ;; "") # If it fails, then pretend we aren't using GCC. ac_prog=ld ;; *) # If it is relative, then search for the first ld in PATH. with_gnu_ld=unknown ;; esac elif test yes = "$with_gnu_ld"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for GNU ld" >&5 printf %s "checking for GNU ld... " >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for non-GNU ld" >&5 printf %s "checking for non-GNU ld... " >&6; } fi if test ${lt_cv_path_LD+y} then : printf %s "(cached) " >&6 else $as_nop if test -z "$LD"; then lt_save_ifs=$IFS; IFS=$PATH_SEPARATOR for ac_dir in $PATH; do IFS=$lt_save_ifs test -z "$ac_dir" && ac_dir=. if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then lt_cv_path_LD=$ac_dir/$ac_prog # Check to see if the program is GNU ld. I'd rather use --version, # but apparently some variants of GNU ld only accept -v. # Break only if it was the GNU/non-GNU ld that we prefer. case `"$lt_cv_path_LD" -v 2>&1 &5 printf "%s\n" "$LD" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi test -z "$LD" && as_fn_error $? "no acceptable ld found in \$PATH" "$LINENO" 5 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if the linker ($LD) is GNU ld" >&5 printf %s "checking if the linker ($LD) is GNU ld... " >&6; } if test ${lt_cv_prog_gnu_ld+y} then : printf %s "(cached) " >&6 else $as_nop # I'd rather use --version here, but apparently some GNU lds only accept -v. case `$LD -v 2>&1 &5 printf "%s\n" "$lt_cv_prog_gnu_ld" >&6; } with_gnu_ld=$lt_cv_prog_gnu_ld # Check if GNU C++ uses GNU ld as the underlying linker, since the # archiving commands below assume that GNU ld is being used. if test yes = "$with_gnu_ld"; then archive_cmds_CXX='$CC $pic_flag -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname -o $lib' archive_expsym_cmds_CXX='$CC $pic_flag -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' hardcode_libdir_flag_spec_CXX='$wl-rpath $wl$libdir' export_dynamic_flag_spec_CXX='$wl--export-dynamic' # If archive_cmds runs LD, not CC, wlarc should be empty # XXX I think wlarc can be eliminated in ltcf-cxx, but I need to # investigate it a little bit more. (MM) wlarc='$wl' # ancient GNU ld didn't support --whole-archive et. al. if eval "`$CC -print-prog-name=ld` --help 2>&1" | $GREP 'no-whole-archive' > /dev/null; then whole_archive_flag_spec_CXX=$wlarc'--whole-archive$convenience '$wlarc'--no-whole-archive' else whole_archive_flag_spec_CXX= fi else with_gnu_ld=no wlarc= # A generic and very simple default shared library creation # command for GNU C++ for the case where it uses the native # linker, instead of GNU ld. If possible, this setting should # overridden to take advantage of the native linker features on # the platform it is being used on. archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib' fi # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP " \-L"' else GXX=no with_gnu_ld=no wlarc= fi # PORTME: fill in a description of your system's C++ link characteristics { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the $compiler linker ($LD) supports shared libraries" >&5 printf %s "checking whether the $compiler linker ($LD) supports shared libraries... " >&6; } ld_shlibs_CXX=yes case $host_os in aix3*) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; aix[4-9]*) if test ia64 = "$host_cpu"; then # On IA64, the linker does run time linking by default, so we don't # have to do anything special. aix_use_runtimelinking=no exp_sym_flag='-Bexport' no_entry_flag= else aix_use_runtimelinking=no # Test if we are trying to use run time linking or normal # AIX style linking. If -brtl is somewhere in LDFLAGS, we # have runtime linking enabled, and use it for executables. # For shared libraries, we enable/disable runtime linking # depending on the kind of the shared library created - # when "with_aix_soname,aix_use_runtimelinking" is: # "aix,no" lib.a(lib.so.V) shared, rtl:no, for executables # "aix,yes" lib.so shared, rtl:yes, for executables # lib.a static archive # "both,no" lib.so.V(shr.o) shared, rtl:yes # lib.a(lib.so.V) shared, rtl:no, for executables # "both,yes" lib.so.V(shr.o) shared, rtl:yes, for executables # lib.a(lib.so.V) shared, rtl:no # "svr4,*" lib.so.V(shr.o) shared, rtl:yes, for executables # lib.a static archive case $host_os in aix4.[23]|aix4.[23].*|aix[5-9]*) for ld_flag in $LDFLAGS; do case $ld_flag in *-brtl*) aix_use_runtimelinking=yes break ;; esac done if test svr4,no = "$with_aix_soname,$aix_use_runtimelinking"; then # With aix-soname=svr4, we create the lib.so.V shared archives only, # so we don't have lib.a shared libs to link our executables. # We have to force runtime linking in this case. aix_use_runtimelinking=yes LDFLAGS="$LDFLAGS -Wl,-brtl" fi ;; esac exp_sym_flag='-bexport' no_entry_flag='-bnoentry' fi # When large executables or shared objects are built, AIX ld can # have problems creating the table of contents. If linking a library # or program results in "error TOC overflow" add -mminimal-toc to # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. archive_cmds_CXX='' hardcode_direct_CXX=yes hardcode_direct_absolute_CXX=yes hardcode_libdir_separator_CXX=':' link_all_deplibs_CXX=yes file_list_spec_CXX='$wl-f,' case $with_aix_soname,$aix_use_runtimelinking in aix,*) ;; # no import file svr4,* | *,yes) # use import file # The Import File defines what to hardcode. hardcode_direct_CXX=no hardcode_direct_absolute_CXX=no ;; esac if test yes = "$GXX"; then case $host_os in aix4.[012]|aix4.[012].*) # We only want to do this on AIX 4.2 and lower, the check # below for broken collect2 doesn't work under 4.3+ collect2name=`$CC -print-prog-name=collect2` if test -f "$collect2name" && strings "$collect2name" | $GREP resolve_lib_name >/dev/null then # We have reworked collect2 : else # We have old collect2 hardcode_direct_CXX=unsupported # It fails to find uninstalled libraries when the uninstalled # path is not listed in the libpath. Setting hardcode_minus_L # to unsupported forces relinking hardcode_minus_L_CXX=yes hardcode_libdir_flag_spec_CXX='-L$libdir' hardcode_libdir_separator_CXX= fi esac shared_flag='-shared' if test yes = "$aix_use_runtimelinking"; then shared_flag=$shared_flag' $wl-G' fi # Need to ensure runtime linking is disabled for the traditional # shared library, or the linker may eventually find shared libraries # /with/ Import File - we do not want to mix them. shared_flag_aix='-shared' shared_flag_svr4='-shared $wl-G' else # not using gcc if test ia64 = "$host_cpu"; then # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release # chokes on -Wl,-G. The following line is correct: shared_flag='-G' else if test yes = "$aix_use_runtimelinking"; then shared_flag='$wl-G' else shared_flag='$wl-bM:SRE' fi shared_flag_aix='$wl-bM:SRE' shared_flag_svr4='$wl-G' fi fi export_dynamic_flag_spec_CXX='$wl-bexpall' # It seems that -bexpall does not export symbols beginning with # underscore (_), so it is better to generate a list of symbols to # export. always_export_symbols_CXX=yes if test aix,yes = "$with_aix_soname,$aix_use_runtimelinking"; then # Warning - without using the other runtime loading flags (-brtl), # -berok will link without error, but may produce a broken library. # The "-G" linker flag allows undefined symbols. no_undefined_flag_CXX='-bernotok' # Determine the default libpath from the value encoded in an empty # executable. if test set = "${lt_cv_aix_libpath+set}"; then aix_libpath=$lt_cv_aix_libpath else if test ${lt_cv_aix_libpath__CXX+y} then : printf %s "(cached) " >&6 else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { ; return 0; } _ACEOF if ac_fn_cxx_try_link "$LINENO" then : lt_aix_libpath_sed=' /Import File Strings/,/^$/ { /^0/ { s/^0 *\([^ ]*\) *$/\1/ p } }' lt_cv_aix_libpath__CXX=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` # Check for a 64-bit object if we didn't find anything. if test -z "$lt_cv_aix_libpath__CXX"; then lt_cv_aix_libpath__CXX=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` fi fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext if test -z "$lt_cv_aix_libpath__CXX"; then lt_cv_aix_libpath__CXX=/usr/lib:/lib fi fi aix_libpath=$lt_cv_aix_libpath__CXX fi hardcode_libdir_flag_spec_CXX='$wl-blibpath:$libdir:'"$aix_libpath" archive_expsym_cmds_CXX='$CC -o $output_objdir/$soname $libobjs $deplibs $wl'$no_entry_flag' $compiler_flags `if test -n "$allow_undefined_flag"; then func_echo_all "$wl$allow_undefined_flag"; else :; fi` $wl'$exp_sym_flag:\$export_symbols' '$shared_flag else if test ia64 = "$host_cpu"; then hardcode_libdir_flag_spec_CXX='$wl-R $libdir:/usr/lib:/lib' allow_undefined_flag_CXX="-z nodefs" archive_expsym_cmds_CXX="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\$wl$no_entry_flag"' $compiler_flags $wl$allow_undefined_flag '"\$wl$exp_sym_flag:\$export_symbols" else # Determine the default libpath from the value encoded in an # empty executable. if test set = "${lt_cv_aix_libpath+set}"; then aix_libpath=$lt_cv_aix_libpath else if test ${lt_cv_aix_libpath__CXX+y} then : printf %s "(cached) " >&6 else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { ; return 0; } _ACEOF if ac_fn_cxx_try_link "$LINENO" then : lt_aix_libpath_sed=' /Import File Strings/,/^$/ { /^0/ { s/^0 *\([^ ]*\) *$/\1/ p } }' lt_cv_aix_libpath__CXX=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` # Check for a 64-bit object if we didn't find anything. if test -z "$lt_cv_aix_libpath__CXX"; then lt_cv_aix_libpath__CXX=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` fi fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext if test -z "$lt_cv_aix_libpath__CXX"; then lt_cv_aix_libpath__CXX=/usr/lib:/lib fi fi aix_libpath=$lt_cv_aix_libpath__CXX fi hardcode_libdir_flag_spec_CXX='$wl-blibpath:$libdir:'"$aix_libpath" # Warning - without using the other run time loading flags, # -berok will link without error, but may produce a broken library. no_undefined_flag_CXX=' $wl-bernotok' allow_undefined_flag_CXX=' $wl-berok' if test yes = "$with_gnu_ld"; then # We only use this code for GNU lds that support --whole-archive. whole_archive_flag_spec_CXX='$wl--whole-archive$convenience $wl--no-whole-archive' else # Exported symbols can be pulled into shared objects from archives whole_archive_flag_spec_CXX='$convenience' fi archive_cmds_need_lc_CXX=yes archive_expsym_cmds_CXX='$RM -r $output_objdir/$realname.d~$MKDIR $output_objdir/$realname.d' # -brtl affects multiple linker settings, -berok does not and is overridden later compiler_flags_filtered='`func_echo_all "$compiler_flags " | $SED -e "s%-brtl\\([, ]\\)%-berok\\1%g"`' if test svr4 != "$with_aix_soname"; then # This is similar to how AIX traditionally builds its shared # libraries. Need -bnortl late, we may have -brtl in LDFLAGS. archive_expsym_cmds_CXX="$archive_expsym_cmds_CXX"'~$CC '$shared_flag_aix' -o $output_objdir/$realname.d/$soname $libobjs $deplibs $wl-bnoentry '$compiler_flags_filtered'$wl-bE:$export_symbols$allow_undefined_flag~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$realname.d/$soname' fi if test aix != "$with_aix_soname"; then archive_expsym_cmds_CXX="$archive_expsym_cmds_CXX"'~$CC '$shared_flag_svr4' -o $output_objdir/$realname.d/$shared_archive_member_spec.o $libobjs $deplibs $wl-bnoentry '$compiler_flags_filtered'$wl-bE:$export_symbols$allow_undefined_flag~$STRIP -e $output_objdir/$realname.d/$shared_archive_member_spec.o~( func_echo_all "#! $soname($shared_archive_member_spec.o)"; if test shr_64 = "$shared_archive_member_spec"; then func_echo_all "# 64"; else func_echo_all "# 32"; fi; cat $export_symbols ) > $output_objdir/$realname.d/$shared_archive_member_spec.imp~$AR $AR_FLAGS $output_objdir/$soname $output_objdir/$realname.d/$shared_archive_member_spec.o $output_objdir/$realname.d/$shared_archive_member_spec.imp' else # used by -dlpreopen to get the symbols archive_expsym_cmds_CXX="$archive_expsym_cmds_CXX"'~$MV $output_objdir/$realname.d/$soname $output_objdir' fi archive_expsym_cmds_CXX="$archive_expsym_cmds_CXX"'~$RM -r $output_objdir/$realname.d' fi fi ;; beos*) if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then allow_undefined_flag_CXX=unsupported # Joseph Beckenbach says some releases of gcc # support --undefined. This deserves some investigation. FIXME archive_cmds_CXX='$CC -nostart $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' else ld_shlibs_CXX=no fi ;; chorus*) case $cc_basename in *) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; esac ;; cygwin* | mingw* | pw32* | cegcc*) case $GXX,$cc_basename in ,cl* | no,cl* | ,icl* | no,icl*) # Native MSVC or ICC # hardcode_libdir_flag_spec is actually meaningless, as there is # no search path for DLLs. hardcode_libdir_flag_spec_CXX=' ' allow_undefined_flag_CXX=unsupported always_export_symbols_CXX=yes file_list_spec_CXX='@' # Tell ltmain to make .lib files, not .a files. libext=lib # Tell ltmain to make .dll files, not .so files. shrext_cmds=.dll # FIXME: Setting linknames here is a bad hack. archive_cmds_CXX='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~linknames=' archive_expsym_cmds_CXX='if test DEF = "`$SED -n -e '\''s/^[ ]*//'\'' -e '\''/^\(;.*\)*$/d'\'' -e '\''s/^\(EXPORTS\|LIBRARY\)\([ ].*\)*$/DEF/p'\'' -e q $export_symbols`" ; then cp "$export_symbols" "$output_objdir/$soname.def"; echo "$tool_output_objdir$soname.def" > "$output_objdir/$soname.exp"; else $SED -e '\''s/^/-link -EXPORT:/'\'' < $export_symbols > $output_objdir/$soname.exp; fi~ $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~ linknames=' # The linker will not automatically build a static lib if we build a DLL. # _LT_TAGVAR(old_archive_from_new_cmds, CXX)='true' enable_shared_with_static_runtimes_CXX=yes # Don't use ranlib old_postinstall_cmds_CXX='chmod 644 $oldlib' postlink_cmds_CXX='lt_outputfile="@OUTPUT@"~ lt_tool_outputfile="@TOOL_OUTPUT@"~ case $lt_outputfile in *.exe|*.EXE) ;; *) lt_outputfile=$lt_outputfile.exe lt_tool_outputfile=$lt_tool_outputfile.exe ;; esac~ func_to_tool_file "$lt_outputfile"~ if test : != "$MANIFEST_TOOL" && test -f "$lt_outputfile.manifest"; then $MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1; $RM "$lt_outputfile.manifest"; fi' ;; *) # g++ # _LT_TAGVAR(hardcode_libdir_flag_spec, CXX) is actually meaningless, # as there is no search path for DLLs. hardcode_libdir_flag_spec_CXX='-L$libdir' export_dynamic_flag_spec_CXX='$wl--export-all-symbols' allow_undefined_flag_CXX=unsupported always_export_symbols_CXX=no enable_shared_with_static_runtimes_CXX=yes if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname $wl--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' # If the export-symbols file already is a .def file, use it as # is; otherwise, prepend EXPORTS... archive_expsym_cmds_CXX='if test DEF = "`$SED -n -e '\''s/^[ ]*//'\'' -e '\''/^\(;.*\)*$/d'\'' -e '\''s/^\(EXPORTS\|LIBRARY\)\([ ].*\)*$/DEF/p'\'' -e q $export_symbols`" ; then cp $export_symbols $output_objdir/$soname.def; else echo EXPORTS > $output_objdir/$soname.def; cat $export_symbols >> $output_objdir/$soname.def; fi~ $CC -shared -nostdlib $output_objdir/$soname.def $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname $wl--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' else ld_shlibs_CXX=no fi ;; esac ;; darwin* | rhapsody*) archive_cmds_need_lc_CXX=no hardcode_direct_CXX=no hardcode_automatic_CXX=yes hardcode_shlibpath_var_CXX=unsupported if test yes = "$lt_cv_ld_force_load"; then whole_archive_flag_spec_CXX='`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience $wl-force_load,$conv\"; done; func_echo_all \"$new_convenience\"`' else whole_archive_flag_spec_CXX='' fi link_all_deplibs_CXX=yes allow_undefined_flag_CXX=$_lt_dar_allow_undefined case $cc_basename in ifort*|nagfor*) _lt_dar_can_shared=yes ;; *) _lt_dar_can_shared=$GCC ;; esac if test yes = "$_lt_dar_can_shared"; then output_verbose_link_cmd=func_echo_all archive_cmds_CXX="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod$_lt_dsymutil" module_cmds_CXX="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags$_lt_dsymutil" archive_expsym_cmds_CXX="$SED 's|^|_|' < \$export_symbols > \$output_objdir/\$libname-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod$_lt_dar_export_syms$_lt_dsymutil" module_expsym_cmds_CXX="$SED -e 's|^|_|' < \$export_symbols > \$output_objdir/\$libname-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags$_lt_dar_export_syms$_lt_dsymutil" if test yes != "$lt_cv_apple_cc_single_mod"; then archive_cmds_CXX="\$CC -r -keep_private_externs -nostdlib -o \$lib-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$lib-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring$_lt_dsymutil" archive_expsym_cmds_CXX="$SED 's|^|_|' < \$export_symbols > \$output_objdir/\$libname-symbols.expsym~\$CC -r -keep_private_externs -nostdlib -o \$lib-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$lib-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring$_lt_dar_export_syms$_lt_dsymutil" fi else ld_shlibs_CXX=no fi ;; os2*) hardcode_libdir_flag_spec_CXX='-L$libdir' hardcode_minus_L_CXX=yes allow_undefined_flag_CXX=unsupported shrext_cmds=.dll archive_cmds_CXX='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~ $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~ $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~ $ECHO EXPORTS >> $output_objdir/$libname.def~ emxexp $libobjs | $SED /"_DLL_InitTerm"/d >> $output_objdir/$libname.def~ $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~ emximp -o $lib $output_objdir/$libname.def' archive_expsym_cmds_CXX='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~ $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~ $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~ $ECHO EXPORTS >> $output_objdir/$libname.def~ prefix_cmds="$SED"~ if test EXPORTS = "`$SED 1q $export_symbols`"; then prefix_cmds="$prefix_cmds -e 1d"; fi~ prefix_cmds="$prefix_cmds -e \"s/^\(.*\)$/_\1/g\""~ cat $export_symbols | $prefix_cmds >> $output_objdir/$libname.def~ $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~ emximp -o $lib $output_objdir/$libname.def' old_archive_From_new_cmds_CXX='emximp -o $output_objdir/${libname}_dll.a $output_objdir/$libname.def' enable_shared_with_static_runtimes_CXX=yes file_list_spec_CXX='@' ;; dgux*) case $cc_basename in ec++*) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; ghcx*) # Green Hills C++ Compiler # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; *) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; esac ;; freebsd2.*) # C++ shared libraries reported to be fairly broken before # switch to ELF ld_shlibs_CXX=no ;; freebsd-elf*) archive_cmds_need_lc_CXX=no ;; freebsd* | dragonfly* | midnightbsd*) # FreeBSD 3 and later use GNU C++ and GNU ld with standard ELF # conventions ld_shlibs_CXX=yes ;; haiku*) archive_cmds_CXX='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' link_all_deplibs_CXX=yes ;; hpux9*) hardcode_libdir_flag_spec_CXX='$wl+b $wl$libdir' hardcode_libdir_separator_CXX=: export_dynamic_flag_spec_CXX='$wl-E' hardcode_direct_CXX=yes hardcode_minus_L_CXX=yes # Not in the search PATH, # but as the default # location of the library. case $cc_basename in CC*) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; aCC*) archive_cmds_CXX='$RM $output_objdir/$soname~$CC -b $wl+b $wl$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test "x$output_objdir/$soname" = "x$lib" || mv $output_objdir/$soname $lib' # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $EGREP " \-L"`; list= ; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' ;; *) if test yes = "$GXX"; then archive_cmds_CXX='$RM $output_objdir/$soname~$CC -shared -nostdlib $pic_flag $wl+b $wl$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test "x$output_objdir/$soname" = "x$lib" || mv $output_objdir/$soname $lib' else # FIXME: insert proper C++ library support ld_shlibs_CXX=no fi ;; esac ;; hpux10*|hpux11*) if test no = "$with_gnu_ld"; then hardcode_libdir_flag_spec_CXX='$wl+b $wl$libdir' hardcode_libdir_separator_CXX=: case $host_cpu in hppa*64*|ia64*) ;; *) export_dynamic_flag_spec_CXX='$wl-E' ;; esac fi case $host_cpu in hppa*64*|ia64*) hardcode_direct_CXX=no hardcode_shlibpath_var_CXX=no ;; *) hardcode_direct_CXX=yes hardcode_direct_absolute_CXX=yes hardcode_minus_L_CXX=yes # Not in the search PATH, # but as the default # location of the library. ;; esac case $cc_basename in CC*) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; aCC*) case $host_cpu in hppa*64*) archive_cmds_CXX='$CC -b $wl+h $wl$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; ia64*) archive_cmds_CXX='$CC -b $wl+h $wl$soname $wl+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; *) archive_cmds_CXX='$CC -b $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; esac # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $GREP " \-L"`; list= ; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' ;; *) if test yes = "$GXX"; then if test no = "$with_gnu_ld"; then case $host_cpu in hppa*64*) archive_cmds_CXX='$CC -shared -nostdlib -fPIC $wl+h $wl$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; ia64*) archive_cmds_CXX='$CC -shared -nostdlib $pic_flag $wl+h $wl$soname $wl+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; *) archive_cmds_CXX='$CC -shared -nostdlib $pic_flag $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; esac fi else # FIXME: insert proper C++ library support ld_shlibs_CXX=no fi ;; esac ;; interix[3-9]*) hardcode_direct_CXX=no hardcode_shlibpath_var_CXX=no hardcode_libdir_flag_spec_CXX='$wl-rpath,$libdir' export_dynamic_flag_spec_CXX='$wl-E' # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. # Instead, shared libraries are loaded at an image base (0x10000000 by # default) and relocated if they conflict, which is a slow very memory # consuming and fragmenting process. To avoid this, we pick a random, # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link # time. Moving up from 0x10000000 also allows more sbrk(2) space. archive_cmds_CXX='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-h,$soname $wl--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' archive_expsym_cmds_CXX='$SED "s|^|_|" $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-h,$soname $wl--retain-symbols-file,$output_objdir/$soname.expsym $wl--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' ;; irix5* | irix6*) case $cc_basename in CC*) # SGI C++ archive_cmds_CXX='$CC -shared -all -multigot $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib' # Archives containing C++ object files must be created using # "CC -ar", where "CC" is the IRIX C++ compiler. This is # necessary to make sure instantiated templates are included # in the archive. old_archive_cmds_CXX='$CC -ar -WR,-u -o $oldlib $oldobjs' ;; *) if test yes = "$GXX"; then if test no = "$with_gnu_ld"; then archive_cmds_CXX='$CC -shared $pic_flag -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib' else archive_cmds_CXX='$CC -shared $pic_flag -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` -o $lib' fi fi link_all_deplibs_CXX=yes ;; esac hardcode_libdir_flag_spec_CXX='$wl-rpath $wl$libdir' hardcode_libdir_separator_CXX=: inherit_rpath_CXX=yes ;; linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) case $cc_basename in KCC*) # Kuck and Associates, Inc. (KAI) C++ Compiler # KCC will only create a shared library if the output file # ends with ".so" (or ".sl" for HP-UX), so rename the library # to its proper name (with version) after linking. archive_cmds_CXX='tempext=`echo $shared_ext | $SED -e '\''s/\([^()0-9A-Za-z{}]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\$tempext\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' archive_expsym_cmds_CXX='tempext=`echo $shared_ext | $SED -e '\''s/\([^()0-9A-Za-z{}]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\$tempext\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib $wl-retain-symbols-file,$export_symbols; mv \$templib $lib' # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`$CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 | $GREP "ld"`; rm -f libconftest$shared_ext; list= ; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' hardcode_libdir_flag_spec_CXX='$wl-rpath,$libdir' export_dynamic_flag_spec_CXX='$wl--export-dynamic' # Archives containing C++ object files must be created using # "CC -Bstatic", where "CC" is the KAI C++ compiler. old_archive_cmds_CXX='$CC -Bstatic -o $oldlib $oldobjs' ;; icpc* | ecpc* ) # Intel C++ with_gnu_ld=yes # version 8.0 and above of icpc choke on multiply defined symbols # if we add $predep_objects and $postdep_objects, however 7.1 and # earlier do not add the objects themselves. case `$CC -V 2>&1` in *"Version 7."*) archive_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname -o $lib' archive_expsym_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' ;; *) # Version 8.0 or newer tmp_idyn= case $host_cpu in ia64*) tmp_idyn=' -i_dynamic';; esac archive_cmds_CXX='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' archive_expsym_cmds_CXX='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' ;; esac archive_cmds_need_lc_CXX=no hardcode_libdir_flag_spec_CXX='$wl-rpath,$libdir' export_dynamic_flag_spec_CXX='$wl--export-dynamic' whole_archive_flag_spec_CXX='$wl--whole-archive$convenience $wl--no-whole-archive' ;; pgCC* | pgcpp*) # Portland Group C++ compiler case `$CC -V` in *pgCC\ [1-5].* | *pgcpp\ [1-5].*) prelink_cmds_CXX='tpldir=Template.dir~ rm -rf $tpldir~ $CC --prelink_objects --instantiation_dir $tpldir $objs $libobjs $compile_deplibs~ compile_command="$compile_command `find $tpldir -name \*.o | sort | $NL2SP`"' old_archive_cmds_CXX='tpldir=Template.dir~ rm -rf $tpldir~ $CC --prelink_objects --instantiation_dir $tpldir $oldobjs$old_deplibs~ $AR $AR_FLAGS $oldlib$oldobjs$old_deplibs `find $tpldir -name \*.o | sort | $NL2SP`~ $RANLIB $oldlib' archive_cmds_CXX='tpldir=Template.dir~ rm -rf $tpldir~ $CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~ $CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | sort | $NL2SP` $postdep_objects $compiler_flags $wl-soname $wl$soname -o $lib' archive_expsym_cmds_CXX='tpldir=Template.dir~ rm -rf $tpldir~ $CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~ $CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | sort | $NL2SP` $postdep_objects $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' ;; *) # Version 6 and above use weak symbols archive_cmds_CXX='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname -o $lib' archive_expsym_cmds_CXX='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' ;; esac hardcode_libdir_flag_spec_CXX='$wl--rpath $wl$libdir' export_dynamic_flag_spec_CXX='$wl--export-dynamic' whole_archive_flag_spec_CXX='$wl--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive' ;; cxx*) # Compaq C++ archive_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname -o $lib' archive_expsym_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname -o $lib $wl-retain-symbols-file $wl$export_symbols' runpath_var=LD_RUN_PATH hardcode_libdir_flag_spec_CXX='-rpath $libdir' hardcode_libdir_separator_CXX=: # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld"`; templist=`func_echo_all "$templist" | $SED "s/\(^.*ld.*\)\( .*ld .*$\)/\1/"`; list= ; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "X$list" | $Xsed' ;; xl* | mpixl* | bgxl*) # IBM XL 8.0 on PPC, with GNU ld hardcode_libdir_flag_spec_CXX='$wl-rpath $wl$libdir' export_dynamic_flag_spec_CXX='$wl--export-dynamic' archive_cmds_CXX='$CC -qmkshrobj $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' if test yes = "$supports_anon_versioning"; then archive_expsym_cmds_CXX='echo "{ global:" > $output_objdir/$libname.ver~ cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ echo "local: *; };" >> $output_objdir/$libname.ver~ $CC -qmkshrobj $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-version-script $wl$output_objdir/$libname.ver -o $lib' fi ;; *) case `$CC -V 2>&1 | $SED 5q` in *Sun\ C*) # Sun C++ 5.9 no_undefined_flag_CXX=' -zdefs' archive_cmds_CXX='$CC -G$allow_undefined_flag -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' archive_expsym_cmds_CXX='$CC -G$allow_undefined_flag -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-retain-symbols-file $wl$export_symbols' hardcode_libdir_flag_spec_CXX='-R$libdir' whole_archive_flag_spec_CXX='$wl--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive' compiler_needs_object_CXX=yes # Not sure whether something based on # $CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 # would be better. output_verbose_link_cmd='func_echo_all' # Archives containing C++ object files must be created using # "CC -xar", where "CC" is the Sun C++ compiler. This is # necessary to make sure instantiated templates are included # in the archive. old_archive_cmds_CXX='$CC -xar -o $oldlib $oldobjs' ;; esac ;; esac ;; lynxos*) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; m88k*) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; mvs*) case $cc_basename in cxx*) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; *) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; esac ;; netbsd*) if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then archive_cmds_CXX='$LD -Bshareable -o $lib $predep_objects $libobjs $deplibs $postdep_objects $linker_flags' wlarc= hardcode_libdir_flag_spec_CXX='-R$libdir' hardcode_direct_CXX=yes hardcode_shlibpath_var_CXX=no fi # Workaround some broken pre-1.5 toolchains output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP conftest.$objext | $SED -e "s:-lgcc -lc -lgcc::"' ;; *nto* | *qnx*) ld_shlibs_CXX=yes ;; openbsd* | bitrig*) if test -f /usr/libexec/ld.so; then hardcode_direct_CXX=yes hardcode_shlibpath_var_CXX=no hardcode_direct_absolute_CXX=yes archive_cmds_CXX='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib' hardcode_libdir_flag_spec_CXX='$wl-rpath,$libdir' if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`"; then archive_expsym_cmds_CXX='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-retain-symbols-file,$export_symbols -o $lib' export_dynamic_flag_spec_CXX='$wl-E' whole_archive_flag_spec_CXX=$wlarc'--whole-archive$convenience '$wlarc'--no-whole-archive' fi output_verbose_link_cmd=func_echo_all else ld_shlibs_CXX=no fi ;; osf3* | osf4* | osf5*) case $cc_basename in KCC*) # Kuck and Associates, Inc. (KAI) C++ Compiler # KCC will only create a shared library if the output file # ends with ".so" (or ".sl" for HP-UX), so rename the library # to its proper name (with version) after linking. archive_cmds_CXX='tempext=`echo $shared_ext | $SED -e '\''s/\([^()0-9A-Za-z{}]\)/\\\\\1/g'\''`; templib=`echo "$lib" | $SED -e "s/\$tempext\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' hardcode_libdir_flag_spec_CXX='$wl-rpath,$libdir' hardcode_libdir_separator_CXX=: # Archives containing C++ object files must be created using # the KAI C++ compiler. case $host in osf3*) old_archive_cmds_CXX='$CC -Bstatic -o $oldlib $oldobjs' ;; *) old_archive_cmds_CXX='$CC -o $oldlib $oldobjs' ;; esac ;; RCC*) # Rational C++ 2.4.1 # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; cxx*) case $host in osf3*) allow_undefined_flag_CXX=' $wl-expect_unresolved $wl\*' archive_cmds_CXX='$CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $soname `test -n "$verstring" && func_echo_all "$wl-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib' hardcode_libdir_flag_spec_CXX='$wl-rpath $wl$libdir' ;; *) allow_undefined_flag_CXX=' -expect_unresolved \*' archive_cmds_CXX='$CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib' archive_expsym_cmds_CXX='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done~ echo "-hidden">> $lib.exp~ $CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname $wl-input $wl$lib.exp `test -n "$verstring" && $ECHO "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib~ $RM $lib.exp' hardcode_libdir_flag_spec_CXX='-rpath $libdir' ;; esac hardcode_libdir_separator_CXX=: # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld" | $GREP -v "ld:"`; templist=`func_echo_all "$templist" | $SED "s/\(^.*ld.*\)\( .*ld.*$\)/\1/"`; list= ; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' ;; *) if test yes,no = "$GXX,$with_gnu_ld"; then allow_undefined_flag_CXX=' $wl-expect_unresolved $wl\*' case $host in osf3*) archive_cmds_CXX='$CC -shared -nostdlib $allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib' ;; *) archive_cmds_CXX='$CC -shared $pic_flag -nostdlib $allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-msym $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib' ;; esac hardcode_libdir_flag_spec_CXX='$wl-rpath $wl$libdir' hardcode_libdir_separator_CXX=: # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP " \-L"' else # FIXME: insert proper C++ library support ld_shlibs_CXX=no fi ;; esac ;; psos*) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; sunos4*) case $cc_basename in CC*) # Sun C++ 4.x # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; lcc*) # Lucid # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; *) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; esac ;; solaris*) case $cc_basename in CC* | sunCC*) # Sun C++ 4.2, 5.x and Centerline C++ archive_cmds_need_lc_CXX=yes no_undefined_flag_CXX=' -zdefs' archive_cmds_CXX='$CC -G$allow_undefined_flag -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' archive_expsym_cmds_CXX='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -G$allow_undefined_flag $wl-M $wl$lib.exp -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' hardcode_libdir_flag_spec_CXX='-R$libdir' hardcode_shlibpath_var_CXX=no case $host_os in solaris2.[0-5] | solaris2.[0-5].*) ;; *) # The compiler driver will combine and reorder linker options, # but understands '-z linker_flag'. # Supported since Solaris 2.6 (maybe 2.5.1?) whole_archive_flag_spec_CXX='-z allextract$convenience -z defaultextract' ;; esac link_all_deplibs_CXX=yes output_verbose_link_cmd='func_echo_all' # Archives containing C++ object files must be created using # "CC -xar", where "CC" is the Sun C++ compiler. This is # necessary to make sure instantiated templates are included # in the archive. old_archive_cmds_CXX='$CC -xar -o $oldlib $oldobjs' ;; gcx*) # Green Hills C++ Compiler archive_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-h $wl$soname -o $lib' # The C++ compiler must be used to create the archive. old_archive_cmds_CXX='$CC $LDFLAGS -archive -o $oldlib $oldobjs' ;; *) # GNU C++ compiler with Solaris linker if test yes,no = "$GXX,$with_gnu_ld"; then no_undefined_flag_CXX=' $wl-z ${wl}defs' if $CC --version | $GREP -v '^2\.7' > /dev/null; then archive_cmds_CXX='$CC -shared $pic_flag -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-h $wl$soname -o $lib' archive_expsym_cmds_CXX='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -shared $pic_flag -nostdlib $wl-M $wl$lib.exp $wl-h $wl$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP " \-L"' else # g++ 2.7 appears to require '-G' NOT '-shared' on this # platform. archive_cmds_CXX='$CC -G -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-h $wl$soname -o $lib' archive_expsym_cmds_CXX='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -G -nostdlib $wl-M $wl$lib.exp $wl-h $wl$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. output_verbose_link_cmd='$CC -G $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP " \-L"' fi hardcode_libdir_flag_spec_CXX='$wl-R $wl$libdir' case $host_os in solaris2.[0-5] | solaris2.[0-5].*) ;; *) whole_archive_flag_spec_CXX='$wl-z ${wl}allextract$convenience $wl-z ${wl}defaultextract' ;; esac fi ;; esac ;; sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7* | sco3.2v5.0.[024]*) no_undefined_flag_CXX='$wl-z,text' archive_cmds_need_lc_CXX=no hardcode_shlibpath_var_CXX=no runpath_var='LD_RUN_PATH' case $cc_basename in CC*) archive_cmds_CXX='$CC -G $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds_CXX='$CC -G $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' ;; *) archive_cmds_CXX='$CC -shared $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds_CXX='$CC -shared $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' ;; esac ;; sysv5* | sco3.2v5* | sco5v6*) # Note: We CANNOT use -z defs as we might desire, because we do not # link with -lc, and that would cause any symbols used from libc to # always be unresolved, which means just about no library would # ever link correctly. If we're not using GNU ld we use -z text # though, which does catch some bad symbols but isn't as heavy-handed # as -z defs. no_undefined_flag_CXX='$wl-z,text' allow_undefined_flag_CXX='$wl-z,nodefs' archive_cmds_need_lc_CXX=no hardcode_shlibpath_var_CXX=no hardcode_libdir_flag_spec_CXX='$wl-R,$libdir' hardcode_libdir_separator_CXX=':' link_all_deplibs_CXX=yes export_dynamic_flag_spec_CXX='$wl-Bexport' runpath_var='LD_RUN_PATH' case $cc_basename in CC*) archive_cmds_CXX='$CC -G $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds_CXX='$CC -G $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' old_archive_cmds_CXX='$CC -Tprelink_objects $oldobjs~ '"$old_archive_cmds_CXX" reload_cmds_CXX='$CC -Tprelink_objects $reload_objs~ '"$reload_cmds_CXX" ;; *) archive_cmds_CXX='$CC -shared $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds_CXX='$CC -shared $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' ;; esac ;; tandem*) case $cc_basename in NCC*) # NonStop-UX NCC 3.20 # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; *) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; esac ;; vxworks*) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; *) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; esac { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ld_shlibs_CXX" >&5 printf "%s\n" "$ld_shlibs_CXX" >&6; } test no = "$ld_shlibs_CXX" && can_build_shared=no GCC_CXX=$GXX LD_CXX=$LD ## CAVEAT EMPTOR: ## There is no encapsulation within the following macros, do not change ## the running order or otherwise move them around unless you know exactly ## what you are doing... # Dependencies to place before and after the object being linked: predep_objects_CXX= postdep_objects_CXX= predeps_CXX= postdeps_CXX= compiler_lib_search_path_CXX= cat > conftest.$ac_ext <<_LT_EOF class Foo { public: Foo (void) { a = 0; } private: int a; }; _LT_EOF _lt_libdeps_save_CFLAGS=$CFLAGS case "$CC $CFLAGS " in #( *\ -flto*\ *) CFLAGS="$CFLAGS -fno-lto" ;; *\ -fwhopr*\ *) CFLAGS="$CFLAGS -fno-whopr" ;; *\ -fuse-linker-plugin*\ *) CFLAGS="$CFLAGS -fno-use-linker-plugin" ;; esac if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then # Parse the compiler output and extract the necessary # objects, libraries and library flags. # Sentinel used to keep track of whether or not we are before # the conftest object file. pre_test_object_deps_done=no for p in `eval "$output_verbose_link_cmd"`; do case $prev$p in -L* | -R* | -l*) # Some compilers place space between "-{L,R}" and the path. # Remove the space. if test x-L = "$p" || test x-R = "$p"; then prev=$p continue fi # Expand the sysroot to ease extracting the directories later. if test -z "$prev"; then case $p in -L*) func_stripname_cnf '-L' '' "$p"; prev=-L; p=$func_stripname_result ;; -R*) func_stripname_cnf '-R' '' "$p"; prev=-R; p=$func_stripname_result ;; -l*) func_stripname_cnf '-l' '' "$p"; prev=-l; p=$func_stripname_result ;; esac fi case $p in =*) func_stripname_cnf '=' '' "$p"; p=$lt_sysroot$func_stripname_result ;; esac if test no = "$pre_test_object_deps_done"; then case $prev in -L | -R) # Internal compiler library paths should come after those # provided the user. The postdeps already come after the # user supplied libs so there is no need to process them. if test -z "$compiler_lib_search_path_CXX"; then compiler_lib_search_path_CXX=$prev$p else compiler_lib_search_path_CXX="${compiler_lib_search_path_CXX} $prev$p" fi ;; # The "-l" case would never come before the object being # linked, so don't bother handling this case. esac else if test -z "$postdeps_CXX"; then postdeps_CXX=$prev$p else postdeps_CXX="${postdeps_CXX} $prev$p" fi fi prev= ;; *.lto.$objext) ;; # Ignore GCC LTO objects *.$objext) # This assumes that the test object file only shows up # once in the compiler output. if test "$p" = "conftest.$objext"; then pre_test_object_deps_done=yes continue fi if test no = "$pre_test_object_deps_done"; then if test -z "$predep_objects_CXX"; then predep_objects_CXX=$p else predep_objects_CXX="$predep_objects_CXX $p" fi else if test -z "$postdep_objects_CXX"; then postdep_objects_CXX=$p else postdep_objects_CXX="$postdep_objects_CXX $p" fi fi ;; *) ;; # Ignore the rest. esac done # Clean up. rm -f a.out a.exe else echo "libtool.m4: error: problem compiling CXX test program" fi $RM -f confest.$objext CFLAGS=$_lt_libdeps_save_CFLAGS # PORTME: override above test on systems where it is broken case $host_os in interix[3-9]*) # Interix 3.5 installs completely hosed .la files for C++, so rather than # hack all around it, let's just trust "g++" to DTRT. predep_objects_CXX= postdep_objects_CXX= postdeps_CXX= ;; esac case " $postdeps_CXX " in *" -lc "*) archive_cmds_need_lc_CXX=no ;; esac compiler_lib_search_dirs_CXX= if test -n "${compiler_lib_search_path_CXX}"; then compiler_lib_search_dirs_CXX=`echo " ${compiler_lib_search_path_CXX}" | $SED -e 's! -L! !g' -e 's!^ !!'` fi lt_prog_compiler_wl_CXX= lt_prog_compiler_pic_CXX= lt_prog_compiler_static_CXX= # C++ specific cases for pic, static, wl, etc. if test yes = "$GXX"; then lt_prog_compiler_wl_CXX='-Wl,' lt_prog_compiler_static_CXX='-static' case $host_os in aix*) # All AIX code is PIC. if test ia64 = "$host_cpu"; then # AIX 5 now supports IA64 processor lt_prog_compiler_static_CXX='-Bstatic' fi lt_prog_compiler_pic_CXX='-fPIC' ;; amigaos*) case $host_cpu in powerpc) # see comment about AmigaOS4 .so support lt_prog_compiler_pic_CXX='-fPIC' ;; m68k) # FIXME: we need at least 68020 code to build shared libraries, but # adding the '-m68020' flag to GCC prevents building anything better, # like '-m68040'. lt_prog_compiler_pic_CXX='-m68020 -resident32 -malways-restore-a4' ;; esac ;; beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) # PIC is the default for these OSes. ;; mingw* | cygwin* | os2* | pw32* | cegcc*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). # Although the cygwin gcc ignores -fPIC, still need this for old-style # (--disable-auto-import) libraries lt_prog_compiler_pic_CXX='-DDLL_EXPORT' case $host_os in os2*) lt_prog_compiler_static_CXX='$wl-static' ;; esac ;; darwin* | rhapsody*) # PIC is the default on this platform # Common symbols not allowed in MH_DYLIB files lt_prog_compiler_pic_CXX='-fno-common' ;; *djgpp*) # DJGPP does not support shared libraries at all lt_prog_compiler_pic_CXX= ;; haiku*) # PIC is the default for Haiku. # The "-static" flag exists, but is broken. lt_prog_compiler_static_CXX= ;; interix[3-9]*) # Interix 3.x gcc -fpic/-fPIC options generate broken code. # Instead, we relocate shared libraries at runtime. ;; sysv4*MP*) if test -d /usr/nec; then lt_prog_compiler_pic_CXX=-Kconform_pic fi ;; hpux*) # PIC is the default for 64-bit PA HP-UX, but not for 32-bit # PA HP-UX. On IA64 HP-UX, PIC is the default but the pic flag # sets the default TLS model and affects inlining. case $host_cpu in hppa*64*) ;; *) lt_prog_compiler_pic_CXX='-fPIC' ;; esac ;; *qnx* | *nto*) # QNX uses GNU C++, but need to define -shared option too, otherwise # it will coredump. lt_prog_compiler_pic_CXX='-fPIC -shared' ;; *) lt_prog_compiler_pic_CXX='-fPIC' ;; esac else case $host_os in aix[4-9]*) # All AIX code is PIC. if test ia64 = "$host_cpu"; then # AIX 5 now supports IA64 processor lt_prog_compiler_static_CXX='-Bstatic' else lt_prog_compiler_static_CXX='-bnso -bI:/lib/syscalls.exp' fi ;; chorus*) case $cc_basename in cxch68*) # Green Hills C++ Compiler # _LT_TAGVAR(lt_prog_compiler_static, CXX)="--no_auto_instantiation -u __main -u __premain -u _abort -r $COOL_DIR/lib/libOrb.a $MVME_DIR/lib/CC/libC.a $MVME_DIR/lib/classix/libcx.s.a" ;; esac ;; mingw* | cygwin* | os2* | pw32* | cegcc*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). lt_prog_compiler_pic_CXX='-DDLL_EXPORT' ;; dgux*) case $cc_basename in ec++*) lt_prog_compiler_pic_CXX='-KPIC' ;; ghcx*) # Green Hills C++ Compiler lt_prog_compiler_pic_CXX='-pic' ;; *) ;; esac ;; freebsd* | dragonfly* | midnightbsd*) # FreeBSD uses GNU C++ ;; hpux9* | hpux10* | hpux11*) case $cc_basename in CC*) lt_prog_compiler_wl_CXX='-Wl,' lt_prog_compiler_static_CXX='$wl-a ${wl}archive' if test ia64 != "$host_cpu"; then lt_prog_compiler_pic_CXX='+Z' fi ;; aCC*) lt_prog_compiler_wl_CXX='-Wl,' lt_prog_compiler_static_CXX='$wl-a ${wl}archive' case $host_cpu in hppa*64*|ia64*) # +Z the default ;; *) lt_prog_compiler_pic_CXX='+Z' ;; esac ;; *) ;; esac ;; interix*) # This is c89, which is MS Visual C++ (no shared libs) # Anyone wants to do a port? ;; irix5* | irix6* | nonstopux*) case $cc_basename in CC*) lt_prog_compiler_wl_CXX='-Wl,' lt_prog_compiler_static_CXX='-non_shared' # CC pic flag -KPIC is the default. ;; *) ;; esac ;; linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) case $cc_basename in KCC*) # KAI C++ Compiler lt_prog_compiler_wl_CXX='--backend -Wl,' lt_prog_compiler_pic_CXX='-fPIC' ;; ecpc* ) # old Intel C++ for x86_64, which still supported -KPIC. lt_prog_compiler_wl_CXX='-Wl,' lt_prog_compiler_pic_CXX='-KPIC' lt_prog_compiler_static_CXX='-static' ;; icpc* ) # Intel C++, used to be incompatible with GCC. # ICC 10 doesn't accept -KPIC any more. lt_prog_compiler_wl_CXX='-Wl,' lt_prog_compiler_pic_CXX='-fPIC' lt_prog_compiler_static_CXX='-static' ;; pgCC* | pgcpp*) # Portland Group C++ compiler lt_prog_compiler_wl_CXX='-Wl,' lt_prog_compiler_pic_CXX='-fpic' lt_prog_compiler_static_CXX='-Bstatic' ;; cxx*) # Compaq C++ # Make sure the PIC flag is empty. It appears that all Alpha # Linux and Compaq Tru64 Unix objects are PIC. lt_prog_compiler_pic_CXX= lt_prog_compiler_static_CXX='-non_shared' ;; xlc* | xlC* | bgxl[cC]* | mpixl[cC]*) # IBM XL 8.0, 9.0 on PPC and BlueGene lt_prog_compiler_wl_CXX='-Wl,' lt_prog_compiler_pic_CXX='-qpic' lt_prog_compiler_static_CXX='-qstaticlink' ;; *) case `$CC -V 2>&1 | $SED 5q` in *Sun\ C*) # Sun C++ 5.9 lt_prog_compiler_pic_CXX='-KPIC' lt_prog_compiler_static_CXX='-Bstatic' lt_prog_compiler_wl_CXX='-Qoption ld ' ;; esac ;; esac ;; lynxos*) ;; m88k*) ;; mvs*) case $cc_basename in cxx*) lt_prog_compiler_pic_CXX='-W c,exportall' ;; *) ;; esac ;; netbsd* | netbsdelf*-gnu) ;; *qnx* | *nto*) # QNX uses GNU C++, but need to define -shared option too, otherwise # it will coredump. lt_prog_compiler_pic_CXX='-fPIC -shared' ;; osf3* | osf4* | osf5*) case $cc_basename in KCC*) lt_prog_compiler_wl_CXX='--backend -Wl,' ;; RCC*) # Rational C++ 2.4.1 lt_prog_compiler_pic_CXX='-pic' ;; cxx*) # Digital/Compaq C++ lt_prog_compiler_wl_CXX='-Wl,' # Make sure the PIC flag is empty. It appears that all Alpha # Linux and Compaq Tru64 Unix objects are PIC. lt_prog_compiler_pic_CXX= lt_prog_compiler_static_CXX='-non_shared' ;; *) ;; esac ;; psos*) ;; solaris*) case $cc_basename in CC* | sunCC*) # Sun C++ 4.2, 5.x and Centerline C++ lt_prog_compiler_pic_CXX='-KPIC' lt_prog_compiler_static_CXX='-Bstatic' lt_prog_compiler_wl_CXX='-Qoption ld ' ;; gcx*) # Green Hills C++ Compiler lt_prog_compiler_pic_CXX='-PIC' ;; *) ;; esac ;; sunos4*) case $cc_basename in CC*) # Sun C++ 4.x lt_prog_compiler_pic_CXX='-pic' lt_prog_compiler_static_CXX='-Bstatic' ;; lcc*) # Lucid lt_prog_compiler_pic_CXX='-pic' ;; *) ;; esac ;; sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) case $cc_basename in CC*) lt_prog_compiler_wl_CXX='-Wl,' lt_prog_compiler_pic_CXX='-KPIC' lt_prog_compiler_static_CXX='-Bstatic' ;; esac ;; tandem*) case $cc_basename in NCC*) # NonStop-UX NCC 3.20 lt_prog_compiler_pic_CXX='-KPIC' ;; *) ;; esac ;; vxworks*) ;; *) lt_prog_compiler_can_build_shared_CXX=no ;; esac fi case $host_os in # For platforms that do not support PIC, -DPIC is meaningless: *djgpp*) lt_prog_compiler_pic_CXX= ;; *) lt_prog_compiler_pic_CXX="$lt_prog_compiler_pic_CXX -DPIC" ;; esac { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $compiler option to produce PIC" >&5 printf %s "checking for $compiler option to produce PIC... " >&6; } if test ${lt_cv_prog_compiler_pic_CXX+y} then : printf %s "(cached) " >&6 else $as_nop lt_cv_prog_compiler_pic_CXX=$lt_prog_compiler_pic_CXX fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic_CXX" >&5 printf "%s\n" "$lt_cv_prog_compiler_pic_CXX" >&6; } lt_prog_compiler_pic_CXX=$lt_cv_prog_compiler_pic_CXX # # Check to make sure the PIC flag actually works. # if test -n "$lt_prog_compiler_pic_CXX"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if $compiler PIC flag $lt_prog_compiler_pic_CXX works" >&5 printf %s "checking if $compiler PIC flag $lt_prog_compiler_pic_CXX works... " >&6; } if test ${lt_cv_prog_compiler_pic_works_CXX+y} then : printf %s "(cached) " >&6 else $as_nop lt_cv_prog_compiler_pic_works_CXX=no ac_outfile=conftest.$ac_objext echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="$lt_prog_compiler_pic_CXX -DPIC" ## exclude from sc_useless_quotes_in_assignment # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. # The option is referenced via a variable to avoid confusing sed. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 if (exit $ac_status) && test -s "$ac_outfile"; then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings other than the usual output. $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' >conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then lt_cv_prog_compiler_pic_works_CXX=yes fi fi $RM conftest* fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic_works_CXX" >&5 printf "%s\n" "$lt_cv_prog_compiler_pic_works_CXX" >&6; } if test yes = "$lt_cv_prog_compiler_pic_works_CXX"; then case $lt_prog_compiler_pic_CXX in "" | " "*) ;; *) lt_prog_compiler_pic_CXX=" $lt_prog_compiler_pic_CXX" ;; esac else lt_prog_compiler_pic_CXX= lt_prog_compiler_can_build_shared_CXX=no fi fi # # Check to make sure the static flag actually works. # wl=$lt_prog_compiler_wl_CXX eval lt_tmp_static_flag=\"$lt_prog_compiler_static_CXX\" { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if $compiler static flag $lt_tmp_static_flag works" >&5 printf %s "checking if $compiler static flag $lt_tmp_static_flag works... " >&6; } if test ${lt_cv_prog_compiler_static_works_CXX+y} then : printf %s "(cached) " >&6 else $as_nop lt_cv_prog_compiler_static_works_CXX=no save_LDFLAGS=$LDFLAGS LDFLAGS="$LDFLAGS $lt_tmp_static_flag" echo "$lt_simple_link_test_code" > conftest.$ac_ext if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then # The linker can only warn and ignore the option if not recognized # So say no if there are warnings if test -s conftest.err; then # Append any errors to the config.log. cat conftest.err 1>&5 $ECHO "$_lt_linker_boilerplate" | $SED '/^$/d' > conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if diff conftest.exp conftest.er2 >/dev/null; then lt_cv_prog_compiler_static_works_CXX=yes fi else lt_cv_prog_compiler_static_works_CXX=yes fi fi $RM -r conftest* LDFLAGS=$save_LDFLAGS fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_static_works_CXX" >&5 printf "%s\n" "$lt_cv_prog_compiler_static_works_CXX" >&6; } if test yes = "$lt_cv_prog_compiler_static_works_CXX"; then : else lt_prog_compiler_static_CXX= fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5 printf %s "checking if $compiler supports -c -o file.$ac_objext... " >&6; } if test ${lt_cv_prog_compiler_c_o_CXX+y} then : printf %s "(cached) " >&6 else $as_nop lt_cv_prog_compiler_c_o_CXX=no $RM -r conftest 2>/dev/null mkdir conftest cd conftest mkdir out echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="-o out/conftest2.$ac_objext" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) (eval "$lt_compile" 2>out/conftest.err) ac_status=$? cat out/conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 if (exit $ac_status) && test -s out/conftest2.$ac_objext then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then lt_cv_prog_compiler_c_o_CXX=yes fi fi chmod u+w . 2>&5 $RM conftest* # SGI C++ compiler will create directory out/ii_files/ for # template instantiation test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files $RM out/* && rmdir out cd .. $RM -r conftest $RM conftest* fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o_CXX" >&5 printf "%s\n" "$lt_cv_prog_compiler_c_o_CXX" >&6; } { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5 printf %s "checking if $compiler supports -c -o file.$ac_objext... " >&6; } if test ${lt_cv_prog_compiler_c_o_CXX+y} then : printf %s "(cached) " >&6 else $as_nop lt_cv_prog_compiler_c_o_CXX=no $RM -r conftest 2>/dev/null mkdir conftest cd conftest mkdir out echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="-o out/conftest2.$ac_objext" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) (eval "$lt_compile" 2>out/conftest.err) ac_status=$? cat out/conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 if (exit $ac_status) && test -s out/conftest2.$ac_objext then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then lt_cv_prog_compiler_c_o_CXX=yes fi fi chmod u+w . 2>&5 $RM conftest* # SGI C++ compiler will create directory out/ii_files/ for # template instantiation test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files $RM out/* && rmdir out cd .. $RM -r conftest $RM conftest* fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o_CXX" >&5 printf "%s\n" "$lt_cv_prog_compiler_c_o_CXX" >&6; } hard_links=nottested if test no = "$lt_cv_prog_compiler_c_o_CXX" && test no != "$need_locks"; then # do not overwrite the value of need_locks provided by the user { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if we can lock with hard links" >&5 printf %s "checking if we can lock with hard links... " >&6; } hard_links=yes $RM conftest* ln conftest.a conftest.b 2>/dev/null && hard_links=no touch conftest.a ln conftest.a conftest.b 2>&5 || hard_links=no ln conftest.a conftest.b 2>/dev/null && hard_links=no { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $hard_links" >&5 printf "%s\n" "$hard_links" >&6; } if test no = "$hard_links"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: '$CC' does not support '-c -o', so 'make -j' may be unsafe" >&5 printf "%s\n" "$as_me: WARNING: '$CC' does not support '-c -o', so 'make -j' may be unsafe" >&2;} need_locks=warn fi else need_locks=no fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the $compiler linker ($LD) supports shared libraries" >&5 printf %s "checking whether the $compiler linker ($LD) supports shared libraries... " >&6; } export_symbols_cmds_CXX='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' exclude_expsyms_CXX='_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*' case $host_os in aix[4-9]*) # If we're using GNU nm, then we don't want the "-C" option. # -C means demangle to GNU nm, but means don't demangle to AIX nm. # Without the "-l" option, or with the "-B" option, AIX nm treats # weak defined symbols like other global defined symbols, whereas # GNU nm marks them as "W". # While the 'weak' keyword is ignored in the Export File, we need # it in the Import File for the 'aix-soname' feature, so we have # to replace the "-B" option with "-P" for AIX nm. if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then export_symbols_cmds_CXX='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && (substr(\$ 3,1,1) != ".")) { if (\$ 2 == "W") { print \$ 3 " weak" } else { print \$ 3 } } }'\'' | sort -u > $export_symbols' else export_symbols_cmds_CXX='`func_echo_all $NM | $SED -e '\''s/B\([^B]*\)$/P\1/'\''` -PCpgl $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "L") || (\$ 2 == "W") || (\$ 2 == "V") || (\$ 2 == "Z")) && (substr(\$ 1,1,1) != ".")) { if ((\$ 2 == "W") || (\$ 2 == "V") || (\$ 2 == "Z")) { print \$ 1 " weak" } else { print \$ 1 } } }'\'' | sort -u > $export_symbols' fi ;; pw32*) export_symbols_cmds_CXX=$ltdll_cmds ;; cygwin* | mingw* | cegcc*) case $cc_basename in cl* | icl*) exclude_expsyms_CXX='_NULL_IMPORT_DESCRIPTOR|_IMPORT_DESCRIPTOR_.*' ;; *) export_symbols_cmds_CXX='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1 DATA/;s/^.*[ ]__nm__\([^ ]*\)[ ][^ ]*/\1 DATA/;/^I[ ]/d;/^[AITW][ ]/s/.* //'\'' | sort | uniq > $export_symbols' exclude_expsyms_CXX='[_]+GLOBAL_OFFSET_TABLE_|[_]+GLOBAL__[FID]_.*|[_]+head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname' ;; esac ;; linux* | k*bsd*-gnu | gnu*) link_all_deplibs_CXX=no ;; *) export_symbols_cmds_CXX='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' ;; esac { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ld_shlibs_CXX" >&5 printf "%s\n" "$ld_shlibs_CXX" >&6; } test no = "$ld_shlibs_CXX" && can_build_shared=no with_gnu_ld_CXX=$with_gnu_ld # # Do we need to explicitly link libc? # case "x$archive_cmds_need_lc_CXX" in x|xyes) # Assume -lc should be added archive_cmds_need_lc_CXX=yes if test yes,yes = "$GCC,$enable_shared"; then case $archive_cmds_CXX in *'~'*) # FIXME: we may have to deal with multi-command sequences. ;; '$CC '*) # Test whether the compiler implicitly links with -lc since on some # systems, -lgcc has to come before -lc. If gcc already passes -lc # to ld, don't add -lc before -lgcc. { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether -lc should be explicitly linked in" >&5 printf %s "checking whether -lc should be explicitly linked in... " >&6; } if test ${lt_cv_archive_cmds_need_lc_CXX+y} then : printf %s "(cached) " >&6 else $as_nop $RM conftest* echo "$lt_simple_compile_test_code" > conftest.$ac_ext if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } 2>conftest.err; then soname=conftest lib=conftest libobjs=conftest.$ac_objext deplibs= wl=$lt_prog_compiler_wl_CXX pic_flag=$lt_prog_compiler_pic_CXX compiler_flags=-v linker_flags=-v verstring= output_objdir=. libname=conftest lt_save_allow_undefined_flag=$allow_undefined_flag_CXX allow_undefined_flag_CXX= if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$archive_cmds_CXX 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1\""; } >&5 (eval $archive_cmds_CXX 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1) 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } then lt_cv_archive_cmds_need_lc_CXX=no else lt_cv_archive_cmds_need_lc_CXX=yes fi allow_undefined_flag_CXX=$lt_save_allow_undefined_flag else cat conftest.err 1>&5 fi $RM conftest* fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_archive_cmds_need_lc_CXX" >&5 printf "%s\n" "$lt_cv_archive_cmds_need_lc_CXX" >&6; } archive_cmds_need_lc_CXX=$lt_cv_archive_cmds_need_lc_CXX ;; esac fi ;; esac { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking dynamic linker characteristics" >&5 printf %s "checking dynamic linker characteristics... " >&6; } library_names_spec= libname_spec='lib$name' soname_spec= shrext_cmds=.so postinstall_cmds= postuninstall_cmds= finish_cmds= finish_eval= shlibpath_var= shlibpath_overrides_runpath=unknown version_type=none dynamic_linker="$host_os ld.so" sys_lib_dlsearch_path_spec="/lib /usr/lib" need_lib_prefix=unknown hardcode_into_libs=no # when you set need_version to no, make sure it does not cause -set_version # flags to be left without arguments need_version=unknown case $host_os in aix3*) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='$libname$release$shared_ext$versuffix $libname.a' shlibpath_var=LIBPATH # AIX 3 has no versioning support, so we append a major version to the name. soname_spec='$libname$release$shared_ext$major' ;; aix[4-9]*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no hardcode_into_libs=yes if test ia64 = "$host_cpu"; then # AIX 5 supports IA64 library_names_spec='$libname$release$shared_ext$major $libname$release$shared_ext$versuffix $libname$shared_ext' shlibpath_var=LD_LIBRARY_PATH else # With GCC up to 2.95.x, collect2 would create an import file # for dependence libraries. The import file would start with # the line '#! .'. This would cause the generated library to # depend on '.', always an invalid library. This was fixed in # development snapshots of GCC prior to 3.0. case $host_os in aix4 | aix4.[01] | aix4.[01].*) if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)' echo ' yes ' echo '#endif'; } | $CC -E - | $GREP yes > /dev/null; then : else can_build_shared=no fi ;; esac # Using Import Files as archive members, it is possible to support # filename-based versioning of shared library archives on AIX. While # this would work for both with and without runtime linking, it will # prevent static linking of such archives. So we do filename-based # shared library versioning with .so extension only, which is used # when both runtime linking and shared linking is enabled. # Unfortunately, runtime linking may impact performance, so we do # not want this to be the default eventually. Also, we use the # versioned .so libs for executables only if there is the -brtl # linker flag in LDFLAGS as well, or --with-aix-soname=svr4 only. # To allow for filename-based versioning support, we need to create # libNAME.so.V as an archive file, containing: # *) an Import File, referring to the versioned filename of the # archive as well as the shared archive member, telling the # bitwidth (32 or 64) of that shared object, and providing the # list of exported symbols of that shared object, eventually # decorated with the 'weak' keyword # *) the shared object with the F_LOADONLY flag set, to really avoid # it being seen by the linker. # At run time we better use the real file rather than another symlink, # but for link time we create the symlink libNAME.so -> libNAME.so.V case $with_aix_soname,$aix_use_runtimelinking in # AIX (on Power*) has no versioning support, so currently we cannot hardcode correct # soname into executable. Probably we can add versioning support to # collect2, so additional links can be useful in future. aix,yes) # traditional libtool dynamic_linker='AIX unversionable lib.so' # If using run time linking (on AIX 4.2 or later) use lib.so # instead of lib.a to let people know that these are not # typical AIX shared libraries. library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' ;; aix,no) # traditional AIX only dynamic_linker='AIX lib.a(lib.so.V)' # We preserve .a as extension for shared libraries through AIX4.2 # and later when we are not doing run time linking. library_names_spec='$libname$release.a $libname.a' soname_spec='$libname$release$shared_ext$major' ;; svr4,*) # full svr4 only dynamic_linker="AIX lib.so.V($shared_archive_member_spec.o)" library_names_spec='$libname$release$shared_ext$major $libname$shared_ext' # We do not specify a path in Import Files, so LIBPATH fires. shlibpath_overrides_runpath=yes ;; *,yes) # both, prefer svr4 dynamic_linker="AIX lib.so.V($shared_archive_member_spec.o), lib.a(lib.so.V)" library_names_spec='$libname$release$shared_ext$major $libname$shared_ext' # unpreferred sharedlib libNAME.a needs extra handling postinstall_cmds='test -n "$linkname" || linkname="$realname"~func_stripname "" ".so" "$linkname"~$install_shared_prog "$dir/$func_stripname_result.$libext" "$destdir/$func_stripname_result.$libext"~test -z "$tstripme" || test -z "$striplib" || $striplib "$destdir/$func_stripname_result.$libext"' postuninstall_cmds='for n in $library_names $old_library; do :; done~func_stripname "" ".so" "$n"~test "$func_stripname_result" = "$n" || func_append rmfiles " $odir/$func_stripname_result.$libext"' # We do not specify a path in Import Files, so LIBPATH fires. shlibpath_overrides_runpath=yes ;; *,no) # both, prefer aix dynamic_linker="AIX lib.a(lib.so.V), lib.so.V($shared_archive_member_spec.o)" library_names_spec='$libname$release.a $libname.a' soname_spec='$libname$release$shared_ext$major' # unpreferred sharedlib libNAME.so.V and symlink libNAME.so need extra handling postinstall_cmds='test -z "$dlname" || $install_shared_prog $dir/$dlname $destdir/$dlname~test -z "$tstripme" || test -z "$striplib" || $striplib $destdir/$dlname~test -n "$linkname" || linkname=$realname~func_stripname "" ".a" "$linkname"~(cd "$destdir" && $LN_S -f $dlname $func_stripname_result.so)' postuninstall_cmds='test -z "$dlname" || func_append rmfiles " $odir/$dlname"~for n in $old_library $library_names; do :; done~func_stripname "" ".a" "$n"~func_append rmfiles " $odir/$func_stripname_result.so"' ;; esac shlibpath_var=LIBPATH fi ;; amigaos*) case $host_cpu in powerpc) # Since July 2007 AmigaOS4 officially supports .so libraries. # When compiling the executable, add -use-dynld -Lsobjs: to the compileline. library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' ;; m68k) library_names_spec='$libname.ixlibrary $libname.a' # Create ${libname}_ixlibrary.a entries in /sys/libs. finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`func_echo_all "$lib" | $SED '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done' ;; esac ;; beos*) library_names_spec='$libname$shared_ext' dynamic_linker="$host_os ld.so" shlibpath_var=LIBRARY_PATH ;; bsdi[45]*) version_type=linux # correct to gnu/linux during the next big refactor need_version=no library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir' shlibpath_var=LD_LIBRARY_PATH sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib" sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib" # the default ld.so.conf also contains /usr/contrib/lib and # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow # libtool to hard-code these into programs ;; cygwin* | mingw* | pw32* | cegcc*) version_type=windows shrext_cmds=.dll need_version=no need_lib_prefix=no case $GCC,$cc_basename in yes,*) # gcc library_names_spec='$libname.dll.a' # DLL is installed to $(libdir)/../bin by postinstall_cmds postinstall_cmds='base_file=`basename \$file`~ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\$base_file'\''i; echo \$dlname'\''`~ dldir=$destdir/`dirname \$dlpath`~ test -d \$dldir || mkdir -p \$dldir~ $install_prog $dir/$dlname \$dldir/$dlname~ chmod a+x \$dldir/$dlname~ if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then eval '\''$striplib \$dldir/$dlname'\'' || exit \$?; fi' postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ dlpath=$dir/\$dldll~ $RM \$dlpath' shlibpath_overrides_runpath=yes case $host_os in cygwin*) # Cygwin DLLs use 'cyg' prefix rather than 'lib' soname_spec='`echo $libname | $SED -e 's/^lib/cyg/'``echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext' ;; mingw* | cegcc*) # MinGW DLLs use traditional 'lib' prefix soname_spec='$libname`echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext' ;; pw32*) # pw32 DLLs use 'pw' prefix rather than 'lib' library_names_spec='`echo $libname | $SED -e 's/^lib/pw/'``echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext' ;; esac dynamic_linker='Win32 ld.exe' ;; *,cl* | *,icl*) # Native MSVC or ICC libname_spec='$name' soname_spec='$libname`echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext' library_names_spec='$libname.dll.lib' case $build_os in mingw*) sys_lib_search_path_spec= lt_save_ifs=$IFS IFS=';' for lt_path in $LIB do IFS=$lt_save_ifs # Let DOS variable expansion print the short 8.3 style file name. lt_path=`cd "$lt_path" 2>/dev/null && cmd //C "for %i in (".") do @echo %~si"` sys_lib_search_path_spec="$sys_lib_search_path_spec $lt_path" done IFS=$lt_save_ifs # Convert to MSYS style. sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's|\\\\|/|g' -e 's| \\([a-zA-Z]\\):| /\\1|g' -e 's|^ ||'` ;; cygwin*) # Convert to unix form, then to dos form, then back to unix form # but this time dos style (no spaces!) so that the unix form looks # like /cygdrive/c/PROGRA~1:/cygdr... sys_lib_search_path_spec=`cygpath --path --unix "$LIB"` sys_lib_search_path_spec=`cygpath --path --dos "$sys_lib_search_path_spec" 2>/dev/null` sys_lib_search_path_spec=`cygpath --path --unix "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` ;; *) sys_lib_search_path_spec=$LIB if $ECHO "$sys_lib_search_path_spec" | $GREP ';[c-zC-Z]:/' >/dev/null; then # It is most probably a Windows format PATH. sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` else sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` fi # FIXME: find the short name or the path components, as spaces are # common. (e.g. "Program Files" -> "PROGRA~1") ;; esac # DLL is installed to $(libdir)/../bin by postinstall_cmds postinstall_cmds='base_file=`basename \$file`~ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\$base_file'\''i; echo \$dlname'\''`~ dldir=$destdir/`dirname \$dlpath`~ test -d \$dldir || mkdir -p \$dldir~ $install_prog $dir/$dlname \$dldir/$dlname' postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ dlpath=$dir/\$dldll~ $RM \$dlpath' shlibpath_overrides_runpath=yes dynamic_linker='Win32 link.exe' ;; *) # Assume MSVC and ICC wrapper library_names_spec='$libname`echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext $libname.lib' dynamic_linker='Win32 ld.exe' ;; esac # FIXME: first we should search . and the directory the executable is in shlibpath_var=PATH ;; darwin* | rhapsody*) dynamic_linker="$host_os dyld" version_type=darwin need_lib_prefix=no need_version=no library_names_spec='$libname$release$major$shared_ext $libname$shared_ext' soname_spec='$libname$release$major$shared_ext' shlibpath_overrides_runpath=yes shlibpath_var=DYLD_LIBRARY_PATH shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`' sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib' ;; dgux*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' shlibpath_var=LD_LIBRARY_PATH ;; freebsd* | dragonfly* | midnightbsd*) # DragonFly does not have aout. When/if they implement a new # versioning mechanism, adjust this. if test -x /usr/bin/objformat; then objformat=`/usr/bin/objformat` else case $host_os in freebsd[23].*) objformat=aout ;; *) objformat=elf ;; esac fi version_type=freebsd-$objformat case $version_type in freebsd-elf*) library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' need_version=no need_lib_prefix=no ;; freebsd-*) library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix' need_version=yes ;; esac shlibpath_var=LD_LIBRARY_PATH case $host_os in freebsd2.*) shlibpath_overrides_runpath=yes ;; freebsd3.[01]* | freebsdelf3.[01]*) shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; freebsd3.[2-9]* | freebsdelf3.[2-9]* | \ freebsd4.[0-5] | freebsdelf4.[0-5] | freebsd4.1.1 | freebsdelf4.1.1) shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; *) # from 4.6 on, and DragonFly shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; esac ;; haiku*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no dynamic_linker="$host_os runtime_loader" library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' shlibpath_var=LIBRARY_PATH shlibpath_overrides_runpath=no sys_lib_dlsearch_path_spec='/boot/home/config/lib /boot/common/lib /boot/system/lib' hardcode_into_libs=yes ;; hpux9* | hpux10* | hpux11*) # Give a soname corresponding to the major version so that dld.sl refuses to # link against other versions. version_type=sunos need_lib_prefix=no need_version=no case $host_cpu in ia64*) shrext_cmds='.so' hardcode_into_libs=yes dynamic_linker="$host_os dld.so" shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' if test 32 = "$HPUX_IA64_MODE"; then sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib" sys_lib_dlsearch_path_spec=/usr/lib/hpux32 else sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64" sys_lib_dlsearch_path_spec=/usr/lib/hpux64 fi ;; hppa*64*) shrext_cmds='.sl' hardcode_into_libs=yes dynamic_linker="$host_os dld.sl" shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64" sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec ;; *) shrext_cmds='.sl' dynamic_linker="$host_os dld.sl" shlibpath_var=SHLIB_PATH shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' ;; esac # HP-UX runs *really* slowly unless shared libraries are mode 555, ... postinstall_cmds='chmod 555 $lib' # or fails outright, so override atomically: install_override_mode=555 ;; interix[3-9]*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; irix5* | irix6* | nonstopux*) case $host_os in nonstopux*) version_type=nonstopux ;; *) if test yes = "$lt_cv_prog_gnu_ld"; then version_type=linux # correct to gnu/linux during the next big refactor else version_type=irix fi ;; esac need_lib_prefix=no need_version=no soname_spec='$libname$release$shared_ext$major' library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$release$shared_ext $libname$shared_ext' case $host_os in irix5* | nonstopux*) libsuff= shlibsuff= ;; *) case $LD in # libtool.m4 will add one of these switches to LD *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") libsuff= shlibsuff= libmagic=32-bit;; *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") libsuff=32 shlibsuff=N32 libmagic=N32;; *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") libsuff=64 shlibsuff=64 libmagic=64-bit;; *) libsuff= shlibsuff= libmagic=never-match;; esac ;; esac shlibpath_var=LD_LIBRARY${shlibsuff}_PATH shlibpath_overrides_runpath=no sys_lib_search_path_spec="/usr/lib$libsuff /lib$libsuff /usr/local/lib$libsuff" sys_lib_dlsearch_path_spec="/usr/lib$libsuff /lib$libsuff" hardcode_into_libs=yes ;; # No shared lib support for Linux oldld, aout, or coff. linux*oldld* | linux*aout* | linux*coff*) dynamic_linker=no ;; linux*android*) version_type=none # Android doesn't support versioned libraries. need_lib_prefix=no need_version=no library_names_spec='$libname$release$shared_ext' soname_spec='$libname$release$shared_ext' finish_cmds= shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes # This implies no fast_install, which is unacceptable. # Some rework will be needed to allow for fast_install # before this can be enabled. hardcode_into_libs=yes dynamic_linker='Android linker' # Don't embed -rpath directories since the linker doesn't support them. hardcode_libdir_flag_spec_CXX='-L$libdir' ;; # This must be glibc/ELF. linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no # Some binutils ld are patched to set DT_RUNPATH if test ${lt_cv_shlibpath_overrides_runpath+y} then : printf %s "(cached) " >&6 else $as_nop lt_cv_shlibpath_overrides_runpath=no save_LDFLAGS=$LDFLAGS save_libdir=$libdir eval "libdir=/foo; wl=\"$lt_prog_compiler_wl_CXX\"; \ LDFLAGS=\"\$LDFLAGS $hardcode_libdir_flag_spec_CXX\"" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { ; return 0; } _ACEOF if ac_fn_cxx_try_link "$LINENO" then : if ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null then : lt_cv_shlibpath_overrides_runpath=yes fi fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext LDFLAGS=$save_LDFLAGS libdir=$save_libdir fi shlibpath_overrides_runpath=$lt_cv_shlibpath_overrides_runpath # This implies no fast_install, which is unacceptable. # Some rework will be needed to allow for fast_install # before this can be enabled. hardcode_into_libs=yes # Ideally, we could use ldconfig to report *all* directores which are # searched for libraries, however this is still not possible. Aside from not # being certain /sbin/ldconfig is available, command # 'ldconfig -N -X -v | grep ^/' on 64bit Fedora does not report /usr/lib64, # even though it is searched at run-time. Try to do the best guess by # appending ld.so.conf contents (and includes) to the search path. if test -f /etc/ld.so.conf; then lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[ ]*hwcap[ ]/d;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;s/"//g;/^$/d' | tr '\n' ' '` sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra" fi # We used to test for /lib/ld.so.1 and disable shared libraries on # powerpc, because MkLinux only supported shared libraries with the # GNU dynamic linker. Since this was broken with cross compilers, # most powerpc-linux boxes support dynamic linking these days and # people can always --disable-shared, the test was removed, and we # assume the GNU/Linux dynamic linker is in use. dynamic_linker='GNU/Linux ld.so' ;; netbsdelf*-gnu) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes dynamic_linker='NetBSD ld.elf_so' ;; netbsd*) version_type=sunos need_lib_prefix=no need_version=no if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix' finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' dynamic_linker='NetBSD (a.out) ld.so' else library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' dynamic_linker='NetBSD ld.elf_so' fi shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; newsos6) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes ;; *nto* | *qnx*) version_type=qnx need_lib_prefix=no need_version=no library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes dynamic_linker='ldqnx.so' ;; openbsd* | bitrig*) version_type=sunos sys_lib_dlsearch_path_spec=/usr/lib need_lib_prefix=no if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`"; then need_version=no else need_version=yes fi library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix' finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes ;; os2*) libname_spec='$name' version_type=windows shrext_cmds=.dll need_version=no need_lib_prefix=no # OS/2 can only load a DLL with a base name of 8 characters or less. soname_spec='`test -n "$os2dllname" && libname="$os2dllname"; v=$($ECHO $release$versuffix | tr -d .-); n=$($ECHO $libname | cut -b -$((8 - ${#v})) | tr . _); $ECHO $n$v`$shared_ext' library_names_spec='${libname}_dll.$libext' dynamic_linker='OS/2 ld.exe' shlibpath_var=BEGINLIBPATH sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec postinstall_cmds='base_file=`basename \$file`~ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\$base_file'\''i; $ECHO \$dlname'\''`~ dldir=$destdir/`dirname \$dlpath`~ test -d \$dldir || mkdir -p \$dldir~ $install_prog $dir/$dlname \$dldir/$dlname~ chmod a+x \$dldir/$dlname~ if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then eval '\''$striplib \$dldir/$dlname'\'' || exit \$?; fi' postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; $ECHO \$dlname'\''`~ dlpath=$dir/\$dldll~ $RM \$dlpath' ;; osf3* | osf4* | osf5*) version_type=osf need_lib_prefix=no need_version=no soname_spec='$libname$release$shared_ext$major' library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' shlibpath_var=LD_LIBRARY_PATH sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib" sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec ;; rdos*) dynamic_linker=no ;; solaris*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes # ldd complains unless libraries are executable postinstall_cmds='chmod +x $lib' ;; sunos4*) version_type=sunos library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix' finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes if test yes = "$with_gnu_ld"; then need_lib_prefix=no fi need_version=yes ;; sysv4 | sysv4.3*) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' shlibpath_var=LD_LIBRARY_PATH case $host_vendor in sni) shlibpath_overrides_runpath=no need_lib_prefix=no runpath_var=LD_RUN_PATH ;; siemens) need_lib_prefix=no ;; motorola) need_lib_prefix=no need_version=no shlibpath_overrides_runpath=no sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib' ;; esac ;; sysv4*MP*) if test -d /usr/nec; then version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='$libname$shared_ext.$versuffix $libname$shared_ext.$major $libname$shared_ext' soname_spec='$libname$shared_ext.$major' shlibpath_var=LD_LIBRARY_PATH fi ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) version_type=sco need_lib_prefix=no need_version=no library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes if test yes = "$with_gnu_ld"; then sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib' else sys_lib_search_path_spec='/usr/ccs/lib /usr/lib' case $host_os in sco3.2v5*) sys_lib_search_path_spec="$sys_lib_search_path_spec /lib" ;; esac fi sys_lib_dlsearch_path_spec='/usr/lib' ;; tpf*) # TPF is a cross-target only. Preferred cross-host = GNU/Linux. version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; uts4*) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' shlibpath_var=LD_LIBRARY_PATH ;; *) dynamic_linker=no ;; esac { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $dynamic_linker" >&5 printf "%s\n" "$dynamic_linker" >&6; } test no = "$dynamic_linker" && can_build_shared=no variables_saved_for_relink="PATH $shlibpath_var $runpath_var" if test yes = "$GCC"; then variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" fi if test set = "${lt_cv_sys_lib_search_path_spec+set}"; then sys_lib_search_path_spec=$lt_cv_sys_lib_search_path_spec fi if test set = "${lt_cv_sys_lib_dlsearch_path_spec+set}"; then sys_lib_dlsearch_path_spec=$lt_cv_sys_lib_dlsearch_path_spec fi # remember unaugmented sys_lib_dlsearch_path content for libtool script decls... configure_time_dlsearch_path=$sys_lib_dlsearch_path_spec # ... but it needs LT_SYS_LIBRARY_PATH munging for other configure-time code func_munge_path_list sys_lib_dlsearch_path_spec "$LT_SYS_LIBRARY_PATH" # to be used as default LT_SYS_LIBRARY_PATH value in generated libtool configure_time_lt_sys_library_path=$LT_SYS_LIBRARY_PATH { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking how to hardcode library paths into programs" >&5 printf %s "checking how to hardcode library paths into programs... " >&6; } hardcode_action_CXX= if test -n "$hardcode_libdir_flag_spec_CXX" || test -n "$runpath_var_CXX" || test yes = "$hardcode_automatic_CXX"; then # We can hardcode non-existent directories. if test no != "$hardcode_direct_CXX" && # If the only mechanism to avoid hardcoding is shlibpath_var, we # have to relink, otherwise we might link with an installed library # when we should be linking with a yet-to-be-installed one ## test no != "$_LT_TAGVAR(hardcode_shlibpath_var, CXX)" && test no != "$hardcode_minus_L_CXX"; then # Linking always hardcodes the temporary library directory. hardcode_action_CXX=relink else # We can link without hardcoding, and we can hardcode nonexisting dirs. hardcode_action_CXX=immediate fi else # We cannot hardcode anything, or else we can only hardcode existing # directories. hardcode_action_CXX=unsupported fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $hardcode_action_CXX" >&5 printf "%s\n" "$hardcode_action_CXX" >&6; } if test relink = "$hardcode_action_CXX" || test yes = "$inherit_rpath_CXX"; then # Fast installation is not supported enable_fast_install=no elif test yes = "$shlibpath_overrides_runpath" || test no = "$enable_shared"; then # Fast installation is not necessary enable_fast_install=needless fi fi # test -n "$compiler" CC=$lt_save_CC CFLAGS=$lt_save_CFLAGS LDCXX=$LD LD=$lt_save_LD GCC=$lt_save_GCC with_gnu_ld=$lt_save_with_gnu_ld lt_cv_path_LDCXX=$lt_cv_path_LD lt_cv_path_LD=$lt_save_path_LD lt_cv_prog_gnu_ldcxx=$lt_cv_prog_gnu_ld lt_cv_prog_gnu_ld=$lt_save_with_gnu_ld fi # test yes != "$_lt_caught_CXX_error" ac_ext=cpp ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu ac_config_commands="$ac_config_commands libtool" # Only expand once: { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether ${MAKE-make} sets \$(MAKE)" >&5 printf %s "checking whether ${MAKE-make} sets \$(MAKE)... " >&6; } set x ${MAKE-make} ac_make=`printf "%s\n" "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'` if eval test \${ac_cv_prog_make_${ac_make}_set+y} then : printf %s "(cached) " >&6 else $as_nop cat >conftest.make <<\_ACEOF SHELL = /bin/sh all: @echo '@@@%%%=$(MAKE)=@@@%%%' _ACEOF # GNU make sometimes prints "make[1]: Entering ...", which would confuse us. case `${MAKE-make} -f conftest.make 2>/dev/null` in *@@@%%%=?*=@@@%%%*) eval ac_cv_prog_make_${ac_make}_set=yes;; *) eval ac_cv_prog_make_${ac_make}_set=no;; esac rm -f conftest.make fi if eval test \$ac_cv_prog_make_${ac_make}_set = yes; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 printf "%s\n" "yes" >&6; } SET_MAKE= else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } SET_MAKE="MAKE=${MAKE-make}" fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args. set dummy ${ac_tool_prefix}ranlib; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_RANLIB+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$RANLIB"; then ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi RANLIB=$ac_cv_prog_RANLIB if test -n "$RANLIB"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $RANLIB" >&5 printf "%s\n" "$RANLIB" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi fi if test -z "$ac_cv_prog_RANLIB"; then ac_ct_RANLIB=$RANLIB # Extract the first word of "ranlib", so it can be a program name with args. set dummy ranlib; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_ac_ct_RANLIB+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$ac_ct_RANLIB"; then ac_cv_prog_ac_ct_RANLIB="$ac_ct_RANLIB" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_RANLIB="ranlib" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB if test -n "$ac_ct_RANLIB"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_RANLIB" >&5 printf "%s\n" "$ac_ct_RANLIB" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi if test "x$ac_ct_RANLIB" = x; then RANLIB=":" else case $cross_compiling:$ac_tool_warned in yes:) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac RANLIB=$ac_ct_RANLIB fi else RANLIB="$ac_cv_prog_RANLIB" fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for C++ compiler usability" >&5 printf %s "checking for C++ compiler usability... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { class test { public: int test; }; ; return 0; } _ACEOF if ac_fn_cxx_try_compile "$LINENO" then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: ok" >&5 printf "%s\n" "ok" >&6; } else $as_nop as_fn_error $? "No C++ compiler found" "$LINENO" 5 fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext # Defining _XOPEN_SOURCE to get extra field in struct stat printf "%s\n" "#define _XOPEN_SOURCE 700" >>confdefs.h # Define _BSD_SOURCE in order to be able to call makedev(), minor() and major() under OpenBSD when _XOPEN_SOURCE is set printf "%s\n" "#define _BSD_SOURCE 1" >>confdefs.h printf "%s\n" "#define _DEFAULT_SOURCE 1" >>confdefs.h ########### ## THE FOLLOWING "DEFINE" USED TO RE-ENABLE FULL LIBC FEATURES ON DIFFERENT OPERATING SYSTEMS ## HAVE BEEN BORROWED FROM PYTHON's configure.in ## ## # The later defininition of _XOPEN_SOURCE disables certain features # on Linux, so we need _GNU_SOURCE to re-enable them (makedev, tm_zone). printf "%s\n" "#define _GNU_SOURCE 1" >>confdefs.h # The later defininition of _XOPEN_SOURCE and _POSIX_C_SOURCE disables # certain features on NetBSD, so we need _NETBSD_SOURCE to re-enable # them. printf "%s\n" "#define _NETBSD_SOURCE 1" >>confdefs.h # The later defininition of _XOPEN_SOURCE and _POSIX_C_SOURCE disables # certain features on FreeBSD, so we need __BSD_VISIBLE to re-enable # them. printf "%s\n" "#define __BSD_VISIBLE 1" >>confdefs.h # The later defininition of _XOPEN_SOURCE and _POSIX_C_SOURCE disables # certain features on Mac OS X, so we need _DARWIN_C_SOURCE to re-enable # them. printf "%s\n" "#define _DARWIN_C_SOURCE 1" >>confdefs.h ## ## ########### # Checks for header files. ac_header_dirent=no for ac_hdr in dirent.h sys/ndir.h sys/dir.h ndir.h; do as_ac_Header=`printf "%s\n" "ac_cv_header_dirent_$ac_hdr" | $as_tr_sh` { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_hdr that defines DIR" >&5 printf %s "checking for $ac_hdr that defines DIR... " >&6; } if eval test \${$as_ac_Header+y} then : printf %s "(cached) " >&6 else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include <$ac_hdr> int main (void) { if ((DIR *) 0) return 0; ; return 0; } _ACEOF if ac_fn_cxx_try_compile "$LINENO" then : eval "$as_ac_Header=yes" else $as_nop eval "$as_ac_Header=no" fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi eval ac_res=\$$as_ac_Header { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 printf "%s\n" "$ac_res" >&6; } if eval test \"x\$"$as_ac_Header"\" = x"yes" then : cat >>confdefs.h <<_ACEOF #define `printf "%s\n" "HAVE_$ac_hdr" | $as_tr_cpp` 1 _ACEOF ac_header_dirent=$ac_hdr; break fi done # Two versions of opendir et al. are in -ldir and -lx on SCO Xenix. if test $ac_header_dirent = dirent.h; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for library containing opendir" >&5 printf %s "checking for library containing opendir... " >&6; } if test ${ac_cv_search_opendir+y} then : printf %s "(cached) " >&6 else $as_nop ac_func_search_save_LIBS=$LIBS cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ namespace conftest { extern "C" int opendir (); } int main (void) { return conftest::opendir (); ; return 0; } _ACEOF for ac_lib in '' dir do if test -z "$ac_lib"; then ac_res="none required" else ac_res=-l$ac_lib LIBS="-l$ac_lib $ac_func_search_save_LIBS" fi if ac_fn_cxx_try_link "$LINENO" then : ac_cv_search_opendir=$ac_res fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext if test ${ac_cv_search_opendir+y} then : break fi done if test ${ac_cv_search_opendir+y} then : else $as_nop ac_cv_search_opendir=no fi rm conftest.$ac_ext LIBS=$ac_func_search_save_LIBS fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_opendir" >&5 printf "%s\n" "$ac_cv_search_opendir" >&6; } ac_res=$ac_cv_search_opendir if test "$ac_res" != no then : test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" fi else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for library containing opendir" >&5 printf %s "checking for library containing opendir... " >&6; } if test ${ac_cv_search_opendir+y} then : printf %s "(cached) " >&6 else $as_nop ac_func_search_save_LIBS=$LIBS cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ namespace conftest { extern "C" int opendir (); } int main (void) { return conftest::opendir (); ; return 0; } _ACEOF for ac_lib in '' x do if test -z "$ac_lib"; then ac_res="none required" else ac_res=-l$ac_lib LIBS="-l$ac_lib $ac_func_search_save_LIBS" fi if ac_fn_cxx_try_link "$LINENO" then : ac_cv_search_opendir=$ac_res fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext if test ${ac_cv_search_opendir+y} then : break fi done if test ${ac_cv_search_opendir+y} then : else $as_nop ac_cv_search_opendir=no fi rm conftest.$ac_ext LIBS=$ac_func_search_save_LIBS fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_opendir" >&5 printf "%s\n" "$ac_cv_search_opendir" >&6; } ac_res=$ac_cv_search_opendir if test "$ac_res" != no then : test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" fi fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for egrep" >&5 printf %s "checking for egrep... " >&6; } if test ${ac_cv_path_EGREP+y} then : printf %s "(cached) " >&6 else $as_nop if echo a | $GREP -E '(a|b)' >/dev/null 2>&1 then ac_cv_path_EGREP="$GREP -E" else if test -z "$EGREP"; then ac_path_EGREP_found=false # Loop through the user's path and test for each of PROGNAME-LIST as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_prog in egrep do for ac_exec_ext in '' $ac_executable_extensions; do ac_path_EGREP="$as_dir$ac_prog$ac_exec_ext" as_fn_executable_p "$ac_path_EGREP" || continue # Check for GNU ac_path_EGREP and select it if it is found. # Check for GNU $ac_path_EGREP case `"$ac_path_EGREP" --version 2>&1` in *GNU*) ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_found=:;; *) ac_count=0 printf %s 0123456789 >"conftest.in" while : do cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" printf "%s\n" 'EGREP' >> "conftest.nl" "$ac_path_EGREP" 'EGREP$' < "conftest.nl" >"conftest.out" 2>/dev/null || break diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break as_fn_arith $ac_count + 1 && ac_count=$as_val if test $ac_count -gt ${ac_path_EGREP_max-0}; then # Best one so far, save it but keep looking for a better one ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_max=$ac_count fi # 10*(2^10) chars as input seems more than enough test $ac_count -gt 10 && break done rm -f conftest.in conftest.tmp conftest.nl conftest.out;; esac $ac_path_EGREP_found && break 3 done done done IFS=$as_save_IFS if test -z "$ac_cv_path_EGREP"; then as_fn_error $? "no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 fi else ac_cv_path_EGREP=$EGREP fi fi fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_EGREP" >&5 printf "%s\n" "$ac_cv_path_EGREP" >&6; } EGREP="$ac_cv_path_EGREP" { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for sys/wait.h that is POSIX.1 compatible" >&5 printf %s "checking for sys/wait.h that is POSIX.1 compatible... " >&6; } if test ${ac_cv_header_sys_wait_h+y} then : printf %s "(cached) " >&6 else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #ifndef WEXITSTATUS # define WEXITSTATUS(stat_val) ((unsigned int) (stat_val) >> 8) #endif #ifndef WIFEXITED # define WIFEXITED(stat_val) (((stat_val) & 255) == 0) #endif int main (void) { int s; wait (&s); s = WIFEXITED (s) ? WEXITSTATUS (s) : 1; ; return 0; } _ACEOF if ac_fn_cxx_try_compile "$LINENO" then : ac_cv_header_sys_wait_h=yes else $as_nop ac_cv_header_sys_wait_h=no fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_sys_wait_h" >&5 printf "%s\n" "$ac_cv_header_sys_wait_h" >&6; } if test $ac_cv_header_sys_wait_h = yes; then printf "%s\n" "#define HAVE_SYS_WAIT_H 1" >>confdefs.h fi ac_fn_cxx_check_header_compile "$LINENO" "stdio.h" "ac_cv_header_stdio_h" "$ac_includes_default" if test "x$ac_cv_header_stdio_h" = xyes then : printf "%s\n" "#define HAVE_STDIO_H 1" >>confdefs.h fi ac_fn_cxx_check_header_compile "$LINENO" "stdlib.h" "ac_cv_header_stdlib_h" "$ac_includes_default" if test "x$ac_cv_header_stdlib_h" = xyes then : printf "%s\n" "#define HAVE_STDLIB_H 1" >>confdefs.h fi ac_fn_cxx_check_header_compile "$LINENO" "syslog.h" "ac_cv_header_syslog_h" "$ac_includes_default" if test "x$ac_cv_header_syslog_h" = xyes then : printf "%s\n" "#define HAVE_SYSLOG_H 1" >>confdefs.h fi ac_fn_cxx_check_header_compile "$LINENO" "pthread.h" "ac_cv_header_pthread_h" "$ac_includes_default" if test "x$ac_cv_header_pthread_h" = xyes then : printf "%s\n" "#define HAVE_PTHREAD_H 1" >>confdefs.h fi ac_fn_cxx_check_header_compile "$LINENO" "errno.h" "ac_cv_header_errno_h" "$ac_includes_default" if test "x$ac_cv_header_errno_h" = xyes then : printf "%s\n" "#define HAVE_ERRNO_H 1" >>confdefs.h fi ac_fn_cxx_check_header_compile "$LINENO" "limits.h" "ac_cv_header_limits_h" "$ac_includes_default" if test "x$ac_cv_header_limits_h" = xyes then : printf "%s\n" "#define HAVE_LIMITS_H 1" >>confdefs.h fi ac_fn_cxx_check_header_compile "$LINENO" "sys/types.h" "ac_cv_header_sys_types_h" "$ac_includes_default" if test "x$ac_cv_header_sys_types_h" = xyes then : printf "%s\n" "#define HAVE_SYS_TYPES_H 1" >>confdefs.h fi ac_fn_cxx_check_header_compile "$LINENO" "sys/stat.h" "ac_cv_header_sys_stat_h" "$ac_includes_default" if test "x$ac_cv_header_sys_stat_h" = xyes then : printf "%s\n" "#define HAVE_SYS_STAT_H 1" >>confdefs.h fi ac_fn_cxx_check_header_compile "$LINENO" "sys/socket.h" "ac_cv_header_sys_socket_h" "$ac_includes_default" if test "x$ac_cv_header_sys_socket_h" = xyes then : printf "%s\n" "#define HAVE_SYS_SOCKET_H 1" >>confdefs.h fi ac_fn_cxx_check_header_compile "$LINENO" "time.h" "ac_cv_header_time_h" "$ac_includes_default" if test "x$ac_cv_header_time_h" = xyes then : printf "%s\n" "#define HAVE_TIME_H 1" >>confdefs.h fi ac_fn_cxx_check_header_compile "$LINENO" "ctype.h" "ac_cv_header_ctype_h" "$ac_includes_default" if test "x$ac_cv_header_ctype_h" = xyes then : printf "%s\n" "#define HAVE_CTYPE_H 1" >>confdefs.h fi ac_fn_cxx_check_header_compile "$LINENO" "openssl/err.h" "ac_cv_header_openssl_err_h" "$ac_includes_default" if test "x$ac_cv_header_openssl_err_h" = xyes then : printf "%s\n" "#define HAVE_OPENSSL_ERR_H 1" >>confdefs.h fi ac_fn_cxx_check_header_compile "$LINENO" "openssl/ssl.h" "ac_cv_header_openssl_ssl_h" "$ac_includes_default" if test "x$ac_cv_header_openssl_ssl_h" = xyes then : printf "%s\n" "#define HAVE_OPENSSL_SSL_H 1" >>confdefs.h fi ac_fn_cxx_check_header_compile "$LINENO" "string.h" "ac_cv_header_string_h" "$ac_includes_default" if test "x$ac_cv_header_string_h" = xyes then : printf "%s\n" "#define HAVE_STRING_H 1" >>confdefs.h fi ac_fn_cxx_check_header_compile "$LINENO" "fnmatch.h" "ac_cv_header_fnmatch_h" "$ac_includes_default" if test "x$ac_cv_header_fnmatch_h" = xyes then : printf "%s\n" "#define HAVE_FNMATCH_H 1" >>confdefs.h fi ac_fn_cxx_check_header_compile "$LINENO" "netinet/ip.h" "ac_cv_header_netinet_ip_h" "$ac_includes_default" if test "x$ac_cv_header_netinet_ip_h" = xyes then : printf "%s\n" "#define HAVE_NETINET_IP_H 1" >>confdefs.h fi ac_fn_cxx_check_header_compile "$LINENO" "netinet/in.h" "ac_cv_header_netinet_in_h" "$ac_includes_default" if test "x$ac_cv_header_netinet_in_h" = xyes then : printf "%s\n" "#define HAVE_NETINET_IN_H 1" >>confdefs.h fi ac_fn_cxx_check_header_compile "$LINENO" "arpa/inet.h" "ac_cv_header_arpa_inet_h" "$ac_includes_default" if test "x$ac_cv_header_arpa_inet_h" = xyes then : printf "%s\n" "#define HAVE_ARPA_INET_H 1" >>confdefs.h fi ac_fn_cxx_check_header_compile "$LINENO" "strings.h" "ac_cv_header_strings_h" "$ac_includes_default" if test "x$ac_cv_header_strings_h" = xyes then : printf "%s\n" "#define HAVE_STRINGS_H 1" >>confdefs.h fi ac_fn_cxx_check_header_compile "$LINENO" "unistd.h" "ac_cv_header_unistd_h" "$ac_includes_default" if test "x$ac_cv_header_unistd_h" = xyes then : printf "%s\n" "#define HAVE_UNISTD_H 1" >>confdefs.h fi ac_fn_cxx_check_header_compile "$LINENO" "fcntl.h" "ac_cv_header_fcntl_h" "$ac_includes_default" if test "x$ac_cv_header_fcntl_h" = xyes then : printf "%s\n" "#define HAVE_FCNTL_H 1" >>confdefs.h fi ac_fn_cxx_check_header_compile "$LINENO" "signal.h" "ac_cv_header_signal_h" "$ac_includes_default" if test "x$ac_cv_header_signal_h" = xyes then : printf "%s\n" "#define HAVE_SIGNAL_H 1" >>confdefs.h fi ac_fn_cxx_check_header_compile "$LINENO" "sys/capability.h" "ac_cv_header_sys_capability_h" "$ac_includes_default" if test "x$ac_cv_header_sys_capability_h" = xyes then : printf "%s\n" "#define HAVE_SYS_CAPABILITY_H 1" >>confdefs.h fi ac_fn_cxx_check_header_compile "$LINENO" "linux/capability.h" "ac_cv_header_linux_capability_h" "$ac_includes_default" if test "x$ac_cv_header_linux_capability_h" = xyes then : printf "%s\n" "#define HAVE_LINUX_CAPABILITY_H 1" >>confdefs.h fi ac_fn_cxx_check_header_compile "$LINENO" "dar/libdar.hpp" "ac_cv_header_dar_libdar_hpp" "$ac_includes_default" if test "x$ac_cv_header_dar_libdar_hpp" = xyes then : printf "%s\n" "#define HAVE_DAR_LIBDAR_HPP 1" >>confdefs.h fi ac_fn_cxx_check_header_compile "$LINENO" "libthreadar/libthreadar.hpp" "ac_cv_header_libthreadar_libthreadar_hpp" "$ac_includes_default" if test "x$ac_cv_header_libthreadar_libthreadar_hpp" = xyes then : printf "%s\n" "#define HAVE_LIBTHREADAR_LIBTHREADAR_HPP 1" >>confdefs.h fi ac_fn_cxx_check_header_compile "$LINENO" "nlohmann/json.hpp" "ac_cv_header_nlohmann_json_hpp" "$ac_includes_default" if test "x$ac_cv_header_nlohmann_json_hpp" = xyes then : printf "%s\n" "#define HAVE_NLOHMANN_JSON_HPP 1" >>confdefs.h fi # mandatory headers ac_fn_cxx_check_header_compile "$LINENO" "openssl/ssl.h" "ac_cv_header_openssl_ssl_h" "$ac_includes_default" if test "x$ac_cv_header_openssl_ssl_h" = xyes then : else $as_nop as_fn_error $? "missing required included file" "$LINENO" 5 fi ac_fn_cxx_check_header_compile "$LINENO" "dar/libdar.hpp" "ac_cv_header_dar_libdar_hpp" "$ac_includes_default" if test "x$ac_cv_header_dar_libdar_hpp" = xyes then : else $as_nop as_fn_error $? "missing required included file" "$LINENO" 5 fi ac_fn_cxx_check_header_compile "$LINENO" "dar/tools.hpp" "ac_cv_header_dar_tools_hpp" "$ac_includes_default" if test "x$ac_cv_header_dar_tools_hpp" = xyes then : else $as_nop as_fn_error $? "missing required included file" "$LINENO" 5 fi ac_fn_cxx_check_header_compile "$LINENO" "libthreadar/libthreadar.hpp" "ac_cv_header_libthreadar_libthreadar_hpp" "$ac_includes_default" if test "x$ac_cv_header_libthreadar_libthreadar_hpp" = xyes then : else $as_nop as_fn_error $? "missing required included file" "$LINENO" 5 fi ac_fn_cxx_check_header_compile "$LINENO" "nlohmann/json.hpp" "ac_cv_header_nlohmann_json_hpp" "$ac_includes_default" if test "x$ac_cv_header_nlohmann_json_hpp" = xyes then : else $as_nop as_fn_error $? "missing required included file" "$LINENO" 5 fi # Check whether --enable-largefile was given. if test ${enable_largefile+y} then : enableval=$enable_largefile; fi if test "$enable_largefile" != no; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for special C compiler options needed for large files" >&5 printf %s "checking for special C compiler options needed for large files... " >&6; } if test ${ac_cv_sys_largefile_CC+y} then : printf %s "(cached) " >&6 else $as_nop ac_cv_sys_largefile_CC=no if test "$GCC" != yes; then ac_save_CC=$CC while :; do # IRIX 6.2 and later do not support large files by default, # so use the C compiler's -n32 option if that helps. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include /* Check that off_t can represent 2**63 - 1 correctly. We can't simply define LARGE_OFF_T to be 9223372036854775807, since some C++ compilers masquerading as C compilers incorrectly reject 9223372036854775807. */ #define LARGE_OFF_T (((off_t) 1 << 31 << 31) - 1 + ((off_t) 1 << 31 << 31)) int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 && LARGE_OFF_T % 2147483647 == 1) ? 1 : -1]; int main (void) { ; return 0; } _ACEOF if ac_fn_cxx_try_compile "$LINENO" then : break fi rm -f core conftest.err conftest.$ac_objext conftest.beam CC="$CC -n32" if ac_fn_cxx_try_compile "$LINENO" then : ac_cv_sys_largefile_CC=' -n32'; break fi rm -f core conftest.err conftest.$ac_objext conftest.beam break done CC=$ac_save_CC rm -f conftest.$ac_ext fi fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sys_largefile_CC" >&5 printf "%s\n" "$ac_cv_sys_largefile_CC" >&6; } if test "$ac_cv_sys_largefile_CC" != no; then CC=$CC$ac_cv_sys_largefile_CC fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for _FILE_OFFSET_BITS value needed for large files" >&5 printf %s "checking for _FILE_OFFSET_BITS value needed for large files... " >&6; } if test ${ac_cv_sys_file_offset_bits+y} then : printf %s "(cached) " >&6 else $as_nop while :; do cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include /* Check that off_t can represent 2**63 - 1 correctly. We can't simply define LARGE_OFF_T to be 9223372036854775807, since some C++ compilers masquerading as C compilers incorrectly reject 9223372036854775807. */ #define LARGE_OFF_T (((off_t) 1 << 31 << 31) - 1 + ((off_t) 1 << 31 << 31)) int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 && LARGE_OFF_T % 2147483647 == 1) ? 1 : -1]; int main (void) { ; return 0; } _ACEOF if ac_fn_cxx_try_compile "$LINENO" then : ac_cv_sys_file_offset_bits=no; break fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #define _FILE_OFFSET_BITS 64 #include /* Check that off_t can represent 2**63 - 1 correctly. We can't simply define LARGE_OFF_T to be 9223372036854775807, since some C++ compilers masquerading as C compilers incorrectly reject 9223372036854775807. */ #define LARGE_OFF_T (((off_t) 1 << 31 << 31) - 1 + ((off_t) 1 << 31 << 31)) int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 && LARGE_OFF_T % 2147483647 == 1) ? 1 : -1]; int main (void) { ; return 0; } _ACEOF if ac_fn_cxx_try_compile "$LINENO" then : ac_cv_sys_file_offset_bits=64; break fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ac_cv_sys_file_offset_bits=unknown break done fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sys_file_offset_bits" >&5 printf "%s\n" "$ac_cv_sys_file_offset_bits" >&6; } case $ac_cv_sys_file_offset_bits in #( no | unknown) ;; *) printf "%s\n" "#define _FILE_OFFSET_BITS $ac_cv_sys_file_offset_bits" >>confdefs.h ;; esac rm -rf conftest* if test $ac_cv_sys_file_offset_bits = unknown; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for _LARGE_FILES value needed for large files" >&5 printf %s "checking for _LARGE_FILES value needed for large files... " >&6; } if test ${ac_cv_sys_large_files+y} then : printf %s "(cached) " >&6 else $as_nop while :; do cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include /* Check that off_t can represent 2**63 - 1 correctly. We can't simply define LARGE_OFF_T to be 9223372036854775807, since some C++ compilers masquerading as C compilers incorrectly reject 9223372036854775807. */ #define LARGE_OFF_T (((off_t) 1 << 31 << 31) - 1 + ((off_t) 1 << 31 << 31)) int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 && LARGE_OFF_T % 2147483647 == 1) ? 1 : -1]; int main (void) { ; return 0; } _ACEOF if ac_fn_cxx_try_compile "$LINENO" then : ac_cv_sys_large_files=no; break fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #define _LARGE_FILES 1 #include /* Check that off_t can represent 2**63 - 1 correctly. We can't simply define LARGE_OFF_T to be 9223372036854775807, since some C++ compilers masquerading as C compilers incorrectly reject 9223372036854775807. */ #define LARGE_OFF_T (((off_t) 1 << 31 << 31) - 1 + ((off_t) 1 << 31 << 31)) int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 && LARGE_OFF_T % 2147483647 == 1) ? 1 : -1]; int main (void) { ; return 0; } _ACEOF if ac_fn_cxx_try_compile "$LINENO" then : ac_cv_sys_large_files=1; break fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ac_cv_sys_large_files=unknown break done fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sys_large_files" >&5 printf "%s\n" "$ac_cv_sys_large_files" >&6; } case $ac_cv_sys_large_files in #( no | unknown) ;; *) printf "%s\n" "#define _LARGE_FILES $ac_cv_sys_large_files" >>confdefs.h ;; esac rm -rf conftest* fi fi # Checks for typedefs, structures, and compiler characteristics. { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for an ANSI C-conforming const" >&5 printf %s "checking for an ANSI C-conforming const... " >&6; } if test ${ac_cv_c_const+y} then : printf %s "(cached) " >&6 else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { #ifndef __cplusplus /* Ultrix mips cc rejects this sort of thing. */ typedef int charset[2]; const charset cs = { 0, 0 }; /* SunOS 4.1.1 cc rejects this. */ char const *const *pcpcc; char **ppc; /* NEC SVR4.0.2 mips cc rejects this. */ struct point {int x, y;}; static struct point const zero = {0,0}; /* IBM XL C 1.02.0.0 rejects this. It does not let you subtract one const X* pointer from another in an arm of an if-expression whose if-part is not a constant expression */ const char *g = "string"; pcpcc = &g + (g ? g-g : 0); /* HPUX 7.0 cc rejects these. */ ++pcpcc; ppc = (char**) pcpcc; pcpcc = (char const *const *) ppc; { /* SCO 3.2v4 cc rejects this sort of thing. */ char tx; char *t = &tx; char const *s = 0 ? (char *) 0 : (char const *) 0; *t++ = 0; if (s) return 0; } { /* Someone thinks the Sun supposedly-ANSI compiler will reject this. */ int x[] = {25, 17}; const int *foo = &x[0]; ++foo; } { /* Sun SC1.0 ANSI compiler rejects this -- but not the above. */ typedef const int *iptr; iptr p = 0; ++p; } { /* IBM XL C 1.02.0.0 rejects this sort of thing, saying "k.c", line 2.27: 1506-025 (S) Operand must be a modifiable lvalue. */ struct s { int j; const int *ap[3]; } bx; struct s *b = &bx; b->j = 5; } { /* ULTRIX-32 V3.1 (Rev 9) vcc rejects this */ const int foo = 10; if (!foo) return 0; } return !cs[0] && !zero.x; #endif ; return 0; } _ACEOF if ac_fn_cxx_try_compile "$LINENO" then : ac_cv_c_const=yes else $as_nop ac_cv_c_const=no fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_const" >&5 printf "%s\n" "$ac_cv_c_const" >&6; } if test $ac_cv_c_const = no; then printf "%s\n" "#define const /**/" >>confdefs.h fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for inline" >&5 printf %s "checking for inline... " >&6; } if test ${ac_cv_c_inline+y} then : printf %s "(cached) " >&6 else $as_nop ac_cv_c_inline=no for ac_kw in inline __inline__ __inline; do cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifndef __cplusplus typedef int foo_t; static $ac_kw foo_t static_foo (void) {return 0; } $ac_kw foo_t foo (void) {return 0; } #endif _ACEOF if ac_fn_cxx_try_compile "$LINENO" then : ac_cv_c_inline=$ac_kw fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext test "$ac_cv_c_inline" != no && break done fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_inline" >&5 printf "%s\n" "$ac_cv_c_inline" >&6; } case $ac_cv_c_inline in inline | yes) ;; *) case $ac_cv_c_inline in no) ac_val=;; *) ac_val=$ac_cv_c_inline;; esac cat >>confdefs.h <<_ACEOF #ifndef __cplusplus #define inline $ac_val #endif _ACEOF ;; esac ac_fn_cxx_check_type "$LINENO" "off_t" "ac_cv_type_off_t" "$ac_includes_default" if test "x$ac_cv_type_off_t" = xyes then : else $as_nop printf "%s\n" "#define off_t long int" >>confdefs.h fi ac_fn_cxx_check_type "$LINENO" "pid_t" "ac_cv_type_pid_t" "$ac_includes_default " if test "x$ac_cv_type_pid_t" = xyes then : else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #if defined _WIN64 && !defined __CYGWIN__ LLP64 #endif int main (void) { ; return 0; } _ACEOF if ac_fn_cxx_try_compile "$LINENO" then : ac_pid_type='int' else $as_nop ac_pid_type='__int64' fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext printf "%s\n" "#define pid_t $ac_pid_type" >>confdefs.h fi ac_fn_cxx_check_type "$LINENO" "size_t" "ac_cv_type_size_t" "$ac_includes_default" if test "x$ac_cv_type_size_t" = xyes then : else $as_nop printf "%s\n" "#define size_t unsigned int" >>confdefs.h fi ac_fn_cxx_check_member "$LINENO" "struct stat" "st_rdev" "ac_cv_member_struct_stat_st_rdev" "$ac_includes_default" if test "x$ac_cv_member_struct_stat_st_rdev" = xyes then : printf "%s\n" "#define HAVE_STRUCT_STAT_ST_RDEV 1" >>confdefs.h fi ac_fn_cxx_check_type "$LINENO" "size_t" "ac_cv_type_size_t" "$ac_includes_default" if test "x$ac_cv_type_size_t" = xyes then : # The cast to long int works around a bug in the HP C Compiler # version HP92453-01 B.11.11.23709.GP, which incorrectly rejects # declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. # This bug is HP SR number 8606223364. { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking size of size_t" >&5 printf %s "checking size of size_t... " >&6; } if test ${ac_cv_sizeof_size_t+y} then : printf %s "(cached) " >&6 else $as_nop if ac_fn_cxx_compute_int "$LINENO" "(long int) (sizeof (size_t))" "ac_cv_sizeof_size_t" "$ac_includes_default" then : else $as_nop if test "$ac_cv_type_size_t" = yes; then { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error 77 "cannot compute sizeof (size_t) See \`config.log' for more details" "$LINENO" 5; } else ac_cv_sizeof_size_t=0 fi fi fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_size_t" >&5 printf "%s\n" "$ac_cv_sizeof_size_t" >&6; } printf "%s\n" "#define SIZEOF_SIZE_T $ac_cv_sizeof_size_t" >>confdefs.h else $as_nop as_fn_error $? "Cannot find size_t type" "$LINENO" 5 fi ac_fn_cxx_check_type "$LINENO" "time_t" "ac_cv_type_time_t" "$ac_includes_default" if test "x$ac_cv_type_time_t" = xyes then : # The cast to long int works around a bug in the HP C Compiler # version HP92453-01 B.11.11.23709.GP, which incorrectly rejects # declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. # This bug is HP SR number 8606223364. { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking size of time_t" >&5 printf %s "checking size of time_t... " >&6; } if test ${ac_cv_sizeof_time_t+y} then : printf %s "(cached) " >&6 else $as_nop if ac_fn_cxx_compute_int "$LINENO" "(long int) (sizeof (time_t))" "ac_cv_sizeof_time_t" "$ac_includes_default" then : else $as_nop if test "$ac_cv_type_time_t" = yes; then { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error 77 "cannot compute sizeof (time_t) See \`config.log' for more details" "$LINENO" 5; } else ac_cv_sizeof_time_t=0 fi fi fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_time_t" >&5 printf "%s\n" "$ac_cv_sizeof_time_t" >&6; } printf "%s\n" "#define SIZEOF_TIME_T $ac_cv_sizeof_time_t" >>confdefs.h else $as_nop as_fn_error $? "Cannot find time_t type" "$LINENO" 5 fi ac_fn_cxx_check_type "$LINENO" "off_t" "ac_cv_type_off_t" "$ac_includes_default" if test "x$ac_cv_type_off_t" = xyes then : # The cast to long int works around a bug in the HP C Compiler # version HP92453-01 B.11.11.23709.GP, which incorrectly rejects # declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. # This bug is HP SR number 8606223364. { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking size of off_t" >&5 printf %s "checking size of off_t... " >&6; } if test ${ac_cv_sizeof_off_t+y} then : printf %s "(cached) " >&6 else $as_nop if ac_fn_cxx_compute_int "$LINENO" "(long int) (sizeof (off_t))" "ac_cv_sizeof_off_t" "$ac_includes_default" then : else $as_nop if test "$ac_cv_type_off_t" = yes; then { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error 77 "cannot compute sizeof (off_t) See \`config.log' for more details" "$LINENO" 5; } else ac_cv_sizeof_off_t=0 fi fi fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_off_t" >&5 printf "%s\n" "$ac_cv_sizeof_off_t" >&6; } printf "%s\n" "#define SIZEOF_OFF_T $ac_cv_sizeof_off_t" >>confdefs.h else $as_nop as_fn_error $? "Cannot find off_t type" "$LINENO" 5 fi # Checks for library functions. { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for working POSIX fnmatch" >&5 printf %s "checking for working POSIX fnmatch... " >&6; } if test ${ac_cv_func_fnmatch_works+y} then : printf %s "(cached) " >&6 else $as_nop # Some versions of Solaris, SCO, and the GNU C Library # have a broken or incompatible fnmatch. # So we run a test program. If we are cross-compiling, take no chance. # Thanks to John Oleynick, Franc,ois Pinard, and Paul Eggert for this test. if test "$cross_compiling" = yes then : ac_cv_func_fnmatch_works=cross else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include # define y(a, b, c) (fnmatch (a, b, c) == 0) # define n(a, b, c) (fnmatch (a, b, c) == FNM_NOMATCH) int main (void) { return (!(y ("a*", "abc", 0) && n ("d*/*1", "d/s/1", FNM_PATHNAME) && y ("a\\\\bc", "abc", 0) && n ("a\\\\bc", "abc", FNM_NOESCAPE) && y ("*x", ".x", 0) && n ("*x", ".x", FNM_PERIOD) && 1)); ; return 0; } _ACEOF if ac_fn_cxx_try_run "$LINENO" then : ac_cv_func_fnmatch_works=yes else $as_nop ac_cv_func_fnmatch_works=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_fnmatch_works" >&5 printf "%s\n" "$ac_cv_func_fnmatch_works" >&6; } if test $ac_cv_func_fnmatch_works = yes then : printf "%s\n" "#define HAVE_FNMATCH 1" >>confdefs.h fi ac_header= ac_cache= for ac_item in $ac_header_cxx_list do if test $ac_cache; then ac_fn_cxx_check_header_compile "$LINENO" $ac_header ac_cv_header_$ac_cache "$ac_includes_default" if eval test \"x\$ac_cv_header_$ac_cache\" = xyes; then printf "%s\n" "#define $ac_item 1" >> confdefs.h fi ac_header= ac_cache= elif test $ac_header; then ac_cache=$ac_item else ac_header=$ac_item fi done ac_func= for ac_item in $ac_func_cxx_list do if test $ac_func; then ac_fn_cxx_check_func "$LINENO" $ac_func ac_cv_func_$ac_func if eval test \"x\$ac_cv_func_$ac_func\" = xyes; then echo "#define $ac_item 1" >> confdefs.h fi ac_func= else ac_func=$ac_item fi done if test "x$ac_cv_func_fork" = xyes; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for working fork" >&5 printf %s "checking for working fork... " >&6; } if test ${ac_cv_func_fork_works+y} then : printf %s "(cached) " >&6 else $as_nop if test "$cross_compiling" = yes then : ac_cv_func_fork_works=cross else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $ac_includes_default int main (void) { /* By Ruediger Kuhlmann. */ return fork () < 0; ; return 0; } _ACEOF if ac_fn_cxx_try_run "$LINENO" then : ac_cv_func_fork_works=yes else $as_nop ac_cv_func_fork_works=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_fork_works" >&5 printf "%s\n" "$ac_cv_func_fork_works" >&6; } else ac_cv_func_fork_works=$ac_cv_func_fork fi if test "x$ac_cv_func_fork_works" = xcross; then case $host in *-*-amigaos* | *-*-msdosdjgpp*) # Override, as these systems have only a dummy fork() stub ac_cv_func_fork_works=no ;; *) ac_cv_func_fork_works=yes ;; esac { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: result $ac_cv_func_fork_works guessed because of cross compilation" >&5 printf "%s\n" "$as_me: WARNING: result $ac_cv_func_fork_works guessed because of cross compilation" >&2;} fi ac_cv_func_vfork_works=$ac_cv_func_vfork if test "x$ac_cv_func_vfork" = xyes; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for working vfork" >&5 printf %s "checking for working vfork... " >&6; } if test ${ac_cv_func_vfork_works+y} then : printf %s "(cached) " >&6 else $as_nop if test "$cross_compiling" = yes then : ac_cv_func_vfork_works=cross else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Thanks to Paul Eggert for this test. */ $ac_includes_default #include #include #ifdef HAVE_VFORK_H # include #endif static void do_nothing (int sig) { (void) sig; } /* On some sparc systems, changes by the child to local and incoming argument registers are propagated back to the parent. The compiler is told about this with #include , but some compilers (e.g. gcc -O) don't grok . Test for this by using a static variable whose address is put into a register that is clobbered by the vfork. */ static void sparc_address_test (int arg) { static pid_t child; if (!child) { child = vfork (); if (child < 0) { perror ("vfork"); _exit(2); } if (!child) { arg = getpid(); write(-1, "", 0); _exit (arg); } } } int main (void) { pid_t parent = getpid (); pid_t child; sparc_address_test (0); /* On Solaris 2.4, changes by the child to the signal handler also munge signal handlers in the parent. To detect this, start by putting the parent's handler in a known state. */ signal (SIGTERM, SIG_DFL); child = vfork (); if (child == 0) { /* Here is another test for sparc vfork register problems. This test uses lots of local variables, at least as many local variables as main has allocated so far including compiler temporaries. 4 locals are enough for gcc 1.40.3 on a Solaris 4.1.3 sparc, but we use 8 to be safe. A buggy compiler should reuse the register of parent for one of the local variables, since it will think that parent can't possibly be used any more in this routine. Assigning to the local variable will thus munge parent in the parent process. */ pid_t p = getpid(), p1 = getpid(), p2 = getpid(), p3 = getpid(), p4 = getpid(), p5 = getpid(), p6 = getpid(), p7 = getpid(); /* Convince the compiler that p..p7 are live; otherwise, it might use the same hardware register for all 8 local variables. */ if (p != p1 || p != p2 || p != p3 || p != p4 || p != p5 || p != p6 || p != p7) _exit(1); /* Alter the child's signal handler. */ if (signal (SIGTERM, do_nothing) != SIG_DFL) _exit(1); /* On some systems (e.g. IRIX 3.3), vfork doesn't separate parent from child file descriptors. If the child closes a descriptor before it execs or exits, this munges the parent's descriptor as well. Test for this by closing stdout in the child. */ _exit(close(fileno(stdout)) != 0); } else { int status; struct stat st; while (wait(&status) != child) ; return ( /* Was there some problem with vforking? */ child < 0 /* Did the child munge the parent's signal handler? */ || signal (SIGTERM, SIG_DFL) != SIG_DFL /* Did the child fail? (This shouldn't happen.) */ || status /* Did the vfork/compiler bug occur? */ || parent != getpid() /* Did the file descriptor bug occur? */ || fstat(fileno(stdout), &st) != 0 ); } } _ACEOF if ac_fn_cxx_try_run "$LINENO" then : ac_cv_func_vfork_works=yes else $as_nop ac_cv_func_vfork_works=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_vfork_works" >&5 printf "%s\n" "$ac_cv_func_vfork_works" >&6; } fi; if test "x$ac_cv_func_fork_works" = xcross; then ac_cv_func_vfork_works=$ac_cv_func_vfork { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: result $ac_cv_func_vfork_works guessed because of cross compilation" >&5 printf "%s\n" "$as_me: WARNING: result $ac_cv_func_vfork_works guessed because of cross compilation" >&2;} fi if test "x$ac_cv_func_vfork_works" = xyes; then printf "%s\n" "#define HAVE_WORKING_VFORK 1" >>confdefs.h else printf "%s\n" "#define vfork fork" >>confdefs.h fi if test "x$ac_cv_func_fork_works" = xyes; then printf "%s\n" "#define HAVE_WORKING_FORK 1" >>confdefs.h fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether lstat correctly handles trailing slash" >&5 printf %s "checking whether lstat correctly handles trailing slash... " >&6; } if test ${ac_cv_func_lstat_dereferences_slashed_symlink+y} then : printf %s "(cached) " >&6 else $as_nop rm -f conftest.sym conftest.file echo >conftest.file if test "$as_ln_s" = "ln -s" && ln -s conftest.file conftest.sym; then if test "$cross_compiling" = yes then : case "$host_os" in # (( # Guess yes on glibc systems. *-gnu*) ac_cv_func_lstat_dereferences_slashed_symlink=yes ;; # If we don't know, assume the worst. *) ac_cv_func_lstat_dereferences_slashed_symlink=no ;; esac else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $ac_includes_default int main (void) { struct stat sbuf; /* Linux will dereference the symlink and fail, as required by POSIX. That is better in the sense that it means we will not have to compile and use the lstat wrapper. */ return lstat ("conftest.sym/", &sbuf) == 0; ; return 0; } _ACEOF if ac_fn_cxx_try_run "$LINENO" then : ac_cv_func_lstat_dereferences_slashed_symlink=yes else $as_nop ac_cv_func_lstat_dereferences_slashed_symlink=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi else # If the `ln -s' command failed, then we probably don't even # have an lstat function. ac_cv_func_lstat_dereferences_slashed_symlink=no fi rm -f conftest.sym conftest.file fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_lstat_dereferences_slashed_symlink" >&5 printf "%s\n" "$ac_cv_func_lstat_dereferences_slashed_symlink" >&6; } test $ac_cv_func_lstat_dereferences_slashed_symlink = yes && printf "%s\n" "#define LSTAT_FOLLOWS_SLASHED_SYMLINK 1" >>confdefs.h if test "x$ac_cv_func_lstat_dereferences_slashed_symlink" = xno; then case " $LIBOBJS " in *" lstat.$ac_objext "* ) ;; *) LIBOBJS="$LIBOBJS lstat.$ac_objext" ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether lstat accepts an empty string" >&5 printf %s "checking whether lstat accepts an empty string... " >&6; } if test ${ac_cv_func_lstat_empty_string_bug+y} then : printf %s "(cached) " >&6 else $as_nop if test "$cross_compiling" = yes then : ac_cv_func_lstat_empty_string_bug=yes else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $ac_includes_default int main (void) { struct stat sbuf; return lstat ("", &sbuf) == 0; ; return 0; } _ACEOF if ac_fn_cxx_try_run "$LINENO" then : ac_cv_func_lstat_empty_string_bug=no else $as_nop ac_cv_func_lstat_empty_string_bug=yes fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_lstat_empty_string_bug" >&5 printf "%s\n" "$ac_cv_func_lstat_empty_string_bug" >&6; } if test $ac_cv_func_lstat_empty_string_bug = yes; then case " $LIBOBJS " in *" lstat.$ac_objext "* ) ;; *) LIBOBJS="$LIBOBJS lstat.$ac_objext" ;; esac printf "%s\n" "#define HAVE_LSTAT_EMPTY_STRING_BUG 1" >>confdefs.h fi ac_fn_cxx_check_header_compile "$LINENO" "sys/mkdev.h" "ac_cv_header_sys_mkdev_h" "$ac_includes_default" if test "x$ac_cv_header_sys_mkdev_h" = xyes then : printf "%s\n" "#define MAJOR_IN_MKDEV 1" >>confdefs.h fi if test $ac_cv_header_sys_mkdev_h = no; then ac_fn_cxx_check_header_compile "$LINENO" "sys/sysmacros.h" "ac_cv_header_sys_sysmacros_h" "$ac_includes_default" if test "x$ac_cv_header_sys_sysmacros_h" = xyes then : printf "%s\n" "#define MAJOR_IN_SYSMACROS 1" >>confdefs.h fi fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for GNU libc compatible malloc" >&5 printf %s "checking for GNU libc compatible malloc... " >&6; } if test ${ac_cv_func_malloc_0_nonnull+y} then : printf %s "(cached) " >&6 else $as_nop if test "$cross_compiling" = yes then : case "$host_os" in # (( # Guess yes on platforms where we know the result. *-gnu* | freebsd* | netbsd* | openbsd* | bitrig* \ | hpux* | solaris* | cygwin* | mingw* | msys* ) ac_cv_func_malloc_0_nonnull=yes ;; # If we don't know, assume the worst. *) ac_cv_func_malloc_0_nonnull=no ;; esac else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main (void) { void *p = malloc (0); int result = !p; free (p); return result; ; return 0; } _ACEOF if ac_fn_cxx_try_run "$LINENO" then : ac_cv_func_malloc_0_nonnull=yes else $as_nop ac_cv_func_malloc_0_nonnull=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_malloc_0_nonnull" >&5 printf "%s\n" "$ac_cv_func_malloc_0_nonnull" >&6; } if test $ac_cv_func_malloc_0_nonnull = yes then : printf "%s\n" "#define HAVE_MALLOC 1" >>confdefs.h else $as_nop printf "%s\n" "#define HAVE_MALLOC 0" >>confdefs.h case " $LIBOBJS " in *" malloc.$ac_objext "* ) ;; *) LIBOBJS="$LIBOBJS malloc.$ac_objext" ;; esac printf "%s\n" "#define malloc rpl_malloc" >>confdefs.h fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether stat accepts an empty string" >&5 printf %s "checking whether stat accepts an empty string... " >&6; } if test ${ac_cv_func_stat_empty_string_bug+y} then : printf %s "(cached) " >&6 else $as_nop if test "$cross_compiling" = yes then : ac_cv_func_stat_empty_string_bug=yes else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $ac_includes_default int main (void) { struct stat sbuf; return stat ("", &sbuf) == 0; ; return 0; } _ACEOF if ac_fn_cxx_try_run "$LINENO" then : ac_cv_func_stat_empty_string_bug=no else $as_nop ac_cv_func_stat_empty_string_bug=yes fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_stat_empty_string_bug" >&5 printf "%s\n" "$ac_cv_func_stat_empty_string_bug" >&6; } if test $ac_cv_func_stat_empty_string_bug = yes; then case " $LIBOBJS " in *" stat.$ac_objext "* ) ;; *) LIBOBJS="$LIBOBJS stat.$ac_objext" ;; esac printf "%s\n" "#define HAVE_STAT_EMPTY_STRING_BUG 1" >>confdefs.h fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether utime accepts a null argument" >&5 printf %s "checking whether utime accepts a null argument... " >&6; } if test ${ac_cv_func_utime_null+y} then : printf %s "(cached) " >&6 else $as_nop rm -f conftest.data; >conftest.data # Sequent interprets utime(file, 0) to mean use start of epoch. Wrong. if test "$cross_compiling" = yes then : ac_cv_func_utime_null='guessing yes' else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $ac_includes_default #ifdef HAVE_UTIME_H # include #endif int main (void) { struct stat s, t; return ! (stat ("conftest.data", &s) == 0 && utime ("conftest.data", 0) == 0 && stat ("conftest.data", &t) == 0 && t.st_mtime >= s.st_mtime && t.st_mtime - s.st_mtime < 120); ; return 0; } _ACEOF if ac_fn_cxx_try_run "$LINENO" then : ac_cv_func_utime_null=yes else $as_nop ac_cv_func_utime_null=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_utime_null" >&5 printf "%s\n" "$ac_cv_func_utime_null" >&6; } if test "x$ac_cv_func_utime_null" != xno; then ac_cv_func_utime_null=yes printf "%s\n" "#define HAVE_UTIME_NULL 1" >>confdefs.h fi rm -f conftest.data ac_fn_cxx_check_func "$LINENO" "lchown" "ac_cv_func_lchown" if test "x$ac_cv_func_lchown" = xyes then : printf "%s\n" "#define HAVE_LCHOWN 1" >>confdefs.h fi ac_fn_cxx_check_func "$LINENO" "mkdir" "ac_cv_func_mkdir" if test "x$ac_cv_func_mkdir" = xyes then : printf "%s\n" "#define HAVE_MKDIR 1" >>confdefs.h fi ac_fn_cxx_check_func "$LINENO" "regcomp" "ac_cv_func_regcomp" if test "x$ac_cv_func_regcomp" = xyes then : printf "%s\n" "#define HAVE_REGCOMP 1" >>confdefs.h fi ac_fn_cxx_check_func "$LINENO" "rmdir" "ac_cv_func_rmdir" if test "x$ac_cv_func_rmdir" = xyes then : printf "%s\n" "#define HAVE_RMDIR 1" >>confdefs.h fi ac_fn_cxx_check_func "$LINENO" "strerror_r" "ac_cv_func_strerror_r" if test "x$ac_cv_func_strerror_r" = xyes then : printf "%s\n" "#define HAVE_STRERROR_R 1" >>confdefs.h fi ac_fn_cxx_check_func "$LINENO" "utime" "ac_cv_func_utime" if test "x$ac_cv_func_utime" = xyes then : printf "%s\n" "#define HAVE_UTIME 1" >>confdefs.h fi ac_fn_cxx_check_func "$LINENO" "fdopendir" "ac_cv_func_fdopendir" if test "x$ac_cv_func_fdopendir" = xyes then : printf "%s\n" "#define HAVE_FDOPENDIR 1" >>confdefs.h fi ac_fn_cxx_check_func "$LINENO" "readdir_r" "ac_cv_func_readdir_r" if test "x$ac_cv_func_readdir_r" = xyes then : printf "%s\n" "#define HAVE_READDIR_R 1" >>confdefs.h fi ac_fn_cxx_check_func "$LINENO" "ctime_r" "ac_cv_func_ctime_r" if test "x$ac_cv_func_ctime_r" = xyes then : printf "%s\n" "#define HAVE_CTIME_R 1" >>confdefs.h fi ac_fn_cxx_check_func "$LINENO" "getgrnam_r" "ac_cv_func_getgrnam_r" if test "x$ac_cv_func_getgrnam_r" = xyes then : printf "%s\n" "#define HAVE_GETGRNAM_R 1" >>confdefs.h fi ac_fn_cxx_check_func "$LINENO" "getpwnam_r" "ac_cv_func_getpwnam_r" if test "x$ac_cv_func_getpwnam_r" = xyes then : printf "%s\n" "#define HAVE_GETPWNAM_R 1" >>confdefs.h fi ac_fn_cxx_check_func "$LINENO" "localtime_r" "ac_cv_func_localtime_r" if test "x$ac_cv_func_localtime_r" = xyes then : printf "%s\n" "#define HAVE_LOCALTIME_R 1" >>confdefs.h fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for c++14 support" >&5 printf %s "checking for c++14 support... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main (void) { thread_local static int test = 0; std::unique_ptr x = std::make_unique(0); ; return 0; } _ACEOF if ac_fn_cxx_try_compile "$LINENO" then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 printf "%s\n" "yes" >&6; } else $as_nop { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for c++14 support with -std=c++14 option set" >&5 printf %s "checking for c++14 support with -std=c++14 option set... " >&6; } CXXSTDFLAGS="-std=c++14" CXXFLAGS="$CXXFLAGS $CXXSTDFLAGS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main (void) { thread_local static int test = 0; std::unique_ptr x = std::make_unique(0); ; return 0; } _ACEOF if ac_fn_cxx_try_compile "$LINENO" then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 printf "%s\n" "yes" >&6; } else $as_nop { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } as_fn_error $? "C++ compiler lack support for c++14 standard" "$LINENO" 5 fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for sed -r/-E option" >&5 printf %s "checking for sed -r/-E option... " >&6; } if sed -r -e 's/(c|o)+/\1/g' > /dev/null < /dev/null ; then local_sed="gnu" { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: GNU sed, using -r option for regex" >&5 printf "%s\n" "GNU sed, using -r option for regex" >&6; } else if sed -E -e 's/(c|o)+/\1/g' > /dev/null < /dev/null ; then local_sed="bsd" { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: BSD sed, using -E option for regex" >&5 printf "%s\n" "BSD sed, using -E option for regex" >&6; } else local_sed=unknown as_fn_error $? "unknown switch to use with sed to support regex" "$LINENO" 5 fi fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for Niels Lohmann's Json library for C++" >&5 printf %s "checking for Niels Lohmann's Json library for C++... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main (void) { using nljson = nlohmann::json; nljson j, k; j["one"] = 1; k.push_back("a"); k.push_back("b"); k.push_back("c"); j["two"] = k; ; return 0; } _ACEOF if ac_fn_cxx_try_compile "$LINENO" then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: Found" >&5 printf "%s\n" "Found" >&6; } else $as_nop { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: Not Found" >&5 printf "%s\n" "Not Found" >&6; } as_fn_error $? "Niels Lohmann's Json library for C++ is missing" "$LINENO" 5 fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for getopt() in " >&5 printf %s "checking for getopt() in ... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ extern "C" { #if HAVE_UNISTD_H #include #endif } int main (void) { getopt(0, 0, 0); ; return 0; } _ACEOF if ac_fn_cxx_try_compile "$LINENO" then : printf "%s\n" "#define HAVE_GETOPT_IN_UNISTD_H 1" >>confdefs.h { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: present" >&5 printf "%s\n" "present" >&6; } else $as_nop { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: absent" >&5 printf "%s\n" "absent" >&6; } fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for getopt_long() in " >&5 printf %s "checking for getopt_long() in ... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ extern "C" { #if HAVE_UNISTD_H #include #endif } int main (void) { getopt_long(0, 0, 0, 0, 0); ; return 0; } _ACEOF if ac_fn_cxx_try_compile "$LINENO" then : printf "%s\n" "#define HAVE_GETOPT_LONG_IN_UNISTD_H 1" >>confdefs.h { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: present" >&5 printf "%s\n" "present" >&6; } else $as_nop { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: absent" >&5 printf "%s\n" "absent" >&6; } fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for optreset presence" >&5 printf %s "checking for optreset presence... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ extern "C" { #if HAVE_STDIO_H #include #endif #if HAVE_GETOPT_H #include #else #if HAVE_UNISTD_H #include #endif #endif } int main (void) { int x = optreset; return 0; ; return 0; } _ACEOF if ac_fn_cxx_try_compile "$LINENO" then : printf "%s\n" "#define HAVE_OPTRESET 1" >>confdefs.h { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: available" >&5 printf "%s\n" "available" >&6; } else $as_nop { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: not available" >&5 printf "%s\n" "not available" >&6; } fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for POSIX sys/capability support" >&5 printf %s "checking for POSIX sys/capability support... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ extern "C" { #if HAVE_SYS_CAPABILITY_H #include #else #if HAVE_LINUX_CAPABILITY_H #include #endif #endif #if HAVE_SYS_TYPES_H #include #endif } int main (void) { cap_t capaset = cap_get_proc(); (void)cap_free((void *)capset); ; return 0; } _ACEOF if ac_fn_cxx_try_compile "$LINENO" then : printf "%s\n" "#define HAVE_CAPABILITIES 1" >>confdefs.h { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: available" >&5 printf "%s\n" "available" >&6; } else $as_nop { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: not available" >&5 printf "%s\n" "not available" >&6; } fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for strerror_r flavor" >&5 printf %s "checking for strerror_r flavor... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ extern "C" { #if HAVE_STRING_H #include #endif } // externe "C" int main (void) { char *ptr = strerror_r(0, 0, 0); ; return 0; } _ACEOF if ac_fn_cxx_try_compile "$LINENO" then : printf "%s\n" "#define HAVE_STRERROR_R_CHAR_PTR 1" >>confdefs.h { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: GNU specific" >&5 printf "%s\n" "GNU specific" >&6; } else $as_nop { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: XSI compliant" >&5 printf "%s\n" "XSI compliant" >&6; } fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext # Check whether --enable-mode was given. if test ${enable_mode+y} then : enableval=$enable_mode; build_mode=$enableval if test "$build_mode" != "32" -a "$build_mode" != "64" -a "$build_mode" != "infinint" ; then as_fn_error $? "Invalid argument given to --enable-mode option" "$LINENO" 5 fi else $as_nop build_mode=64 fi if test -z "$build_mode" ; then as_fn_error $? "build_mode has not been defined in configure script" "$LINENO" 5 else build_mode_suffix=$build_mode if test "$build_mode" = "infinint" ; then build_mode_suffix="" fi fi # Check whether --enable-upx was given. if test ${enable_upx+y} then : enableval=$enable_upx; explicit_upx=yes else $as_nop enable_upx=yes fi if test "x$enable_upx" != "xyes" then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: ignoring UPX" >&5 printf "%s\n" "$as_me: ignoring UPX" >&6;} upx="no" else $as_nop # Extract the first word of "upx", so it can be a program name with args. set dummy upx; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_upx+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$upx"; then ac_cv_prog_upx="$upx" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_upx="yes" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS test -z "$ac_cv_prog_upx" && ac_cv_prog_upx="no" fi fi upx=$ac_cv_prog_upx if test -n "$upx"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $upx" >&5 printf "%s\n" "$upx" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi if test "x$explicit_upx" = "xyes" -a "$upx" != "yes" then : as_fn_error $? "upx is missing" "$LINENO" 5 fi fi # Check whether --enable-build-html was given. if test ${enable_build_html+y} then : enableval=$enable_build_html; explicit_build_html=yes else $as_nop enable_build_html=yes fi if test "x$enable_build_html" != "xyes" then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: documentation no built per user request" >&5 printf "%s\n" "$as_me: WARNING: documentation no built per user request" >&2;} doxygen="no" groff="no" else $as_nop # Extract the first word of "doxygen", so it can be a program name with args. set dummy doxygen; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_doxygen+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$doxygen"; then ac_cv_prog_doxygen="$doxygen" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_doxygen="yes" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS test -z "$ac_cv_prog_doxygen" && ac_cv_prog_doxygen="no" fi fi doxygen=$ac_cv_prog_doxygen if test -n "$doxygen"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $doxygen" >&5 printf "%s\n" "$doxygen" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for doxygen version" >&5 printf %s "checking for doxygen version... " >&6; } if test "$doxygen" = "yes" ; then n1=`doxygen --version | cut -d '.' -f 1` n2=`doxygen --version | cut -d '.' -f 2` if test $n1 -gt 1 -o $n2 -ge 3 ; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: >= 1.3" >&5 printf "%s\n" " >= 1.3" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: too old (< 1.3) ignoring doxygen" >&5 printf "%s\n" " too old (< 1.3) ignoring doxygen" >&6; } doxygen="no" fi fi # Extract the first word of "dot", so it can be a program name with args. set dummy dot; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_dot+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$dot"; then ac_cv_prog_dot="$dot" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_dot="YES" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS test -z "$ac_cv_prog_dot" && ac_cv_prog_dot="NO" fi fi dot=$ac_cv_prog_dot if test -n "$dot"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $dot" >&5 printf "%s\n" "$dot" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi # upper case value for dot variable because it goes as is into doxyfile file # Extract the first word of "man", so it can be a program name with args. set dummy man; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_tmp+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$tmp"; then ac_cv_prog_tmp="$tmp" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_tmp="yes" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS test -z "$ac_cv_prog_tmp" && ac_cv_prog_tmp="no" fi fi tmp=$ac_cv_prog_tmp if test -n "$tmp"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $tmp" >&5 printf "%s\n" "$tmp" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi if test "$tmp" = "yes" ; then # Extract the first word of "groff", so it can be a program name with args. set dummy groff; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_groff+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$groff"; then ac_cv_prog_groff="$groff" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_groff="yes" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS test -z "$ac_cv_prog_groff" && ac_cv_prog_groff="no" fi fi groff=$ac_cv_prog_groff if test -n "$groff"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $groff" >&5 printf "%s\n" "$groff" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi else groff = "no"; fi if test "x$explicit_build_html" = "xyes" -a \( "$doxygen" != "yes" -o "$groff" != "yes" \) then : as_fn_error $? "lacking prerequisit to build documentation" "$LINENO" 5 fi fi # Check whether --enable-dev was given. if test ${enable_dev+y} then : enableval=$enable_dev; explicit_dev=yes else $as_nop enable_dev=no fi if test "x$enable_dev" != "xno" then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: WARNING! Using trivial password for development purposes" >&5 printf "%s\n" "$as_me: WARNING: WARNING! Using trivial password for development purposes" >&2;} printf "%s\n" "#define WEBDAR_DEV 1" >>confdefs.h else $as_nop # else we just keep silent fi # Check whether --enable-webdar-static was given. if test ${enable_webdar_static+y} then : enableval=$enable_webdar_static; fi if test "x$enable_webdar_static" = "xyes" then : build_static="yes" else $as_nop build_static="no" fi if test "x$ac_cv_env_PKG_CONFIG_set" != "xset"; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}pkg-config", so it can be a program name with args. set dummy ${ac_tool_prefix}pkg-config; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_path_PKG_CONFIG+y} then : printf %s "(cached) " >&6 else $as_nop case $PKG_CONFIG in [\\/]* | ?:[\\/]*) ac_cv_path_PKG_CONFIG="$PKG_CONFIG" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_path_PKG_CONFIG="$as_dir$ac_word$ac_exec_ext" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi PKG_CONFIG=$ac_cv_path_PKG_CONFIG if test -n "$PKG_CONFIG"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $PKG_CONFIG" >&5 printf "%s\n" "$PKG_CONFIG" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi fi if test -z "$ac_cv_path_PKG_CONFIG"; then ac_pt_PKG_CONFIG=$PKG_CONFIG # Extract the first word of "pkg-config", so it can be a program name with args. set dummy pkg-config; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_path_ac_pt_PKG_CONFIG+y} then : printf %s "(cached) " >&6 else $as_nop case $ac_pt_PKG_CONFIG in [\\/]* | ?:[\\/]*) ac_cv_path_ac_pt_PKG_CONFIG="$ac_pt_PKG_CONFIG" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_path_ac_pt_PKG_CONFIG="$as_dir$ac_word$ac_exec_ext" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi ac_pt_PKG_CONFIG=$ac_cv_path_ac_pt_PKG_CONFIG if test -n "$ac_pt_PKG_CONFIG"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_pt_PKG_CONFIG" >&5 printf "%s\n" "$ac_pt_PKG_CONFIG" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi if test "x$ac_pt_PKG_CONFIG" = x; then PKG_CONFIG="" else case $cross_compiling:$ac_tool_warned in yes:) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac PKG_CONFIG=$ac_pt_PKG_CONFIG fi else PKG_CONFIG="$ac_cv_path_PKG_CONFIG" fi fi if test -n "$PKG_CONFIG"; then _pkg_min_version=0.9.0 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking pkg-config is at least version $_pkg_min_version" >&5 printf %s "checking pkg-config is at least version $_pkg_min_version... " >&6; } if $PKG_CONFIG --atleast-pkgconfig-version $_pkg_min_version; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 printf "%s\n" "yes" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } PKG_CONFIG="" fi fi pkg_failed=no { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for openssl" >&5 printf %s "checking for openssl... " >&6; } if test -n "$OPENSSL_CFLAGS"; then pkg_cv_OPENSSL_CFLAGS="$OPENSSL_CFLAGS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"openssl\""; } >&5 ($PKG_CONFIG --exists --print-errors "openssl") 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_OPENSSL_CFLAGS=`$PKG_CONFIG --cflags "openssl" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test -n "$OPENSSL_LIBS"; then pkg_cv_OPENSSL_LIBS="$OPENSSL_LIBS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"openssl\""; } >&5 ($PKG_CONFIG --exists --print-errors "openssl") 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_OPENSSL_LIBS=`$PKG_CONFIG --libs "openssl" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test $pkg_failed = yes; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then _pkg_short_errors_supported=yes else _pkg_short_errors_supported=no fi if test $_pkg_short_errors_supported = yes; then OPENSSL_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "openssl" 2>&1` else OPENSSL_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "openssl" 2>&1` fi # Put the nasty error message in config.log where it belongs echo "$OPENSSL_PKG_ERRORS" >&5 as_fn_error $? "Package requirements (openssl) were not met: $OPENSSL_PKG_ERRORS Consider adjusting the PKG_CONFIG_PATH environment variable if you installed software in a non-standard prefix. Alternatively, you may set the environment variables OPENSSL_CFLAGS and OPENSSL_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details." "$LINENO" 5 elif test $pkg_failed = untried; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "The pkg-config script could not be found or is too old. Make sure it is in your PATH or set the PKG_CONFIG environment variable to the full path to pkg-config. Alternatively, you may set the environment variables OPENSSL_CFLAGS and OPENSSL_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details. To get pkg-config, see . See \`config.log' for more details" "$LINENO" 5; } else OPENSSL_CFLAGS=$pkg_cv_OPENSSL_CFLAGS OPENSSL_LIBS=$pkg_cv_OPENSSL_LIBS { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 printf "%s\n" "yes" >&6; } fi pkg_failed=no { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for libdar${build_mode_suffix}" >&5 printf %s "checking for libdar${build_mode_suffix}... " >&6; } if test -n "$LIBDAR_CFLAGS"; then pkg_cv_LIBDAR_CFLAGS="$LIBDAR_CFLAGS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libdar\${build_mode_suffix}\""; } >&5 ($PKG_CONFIG --exists --print-errors "libdar${build_mode_suffix}") 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_LIBDAR_CFLAGS=`$PKG_CONFIG --cflags "libdar${build_mode_suffix}" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test -n "$LIBDAR_LIBS"; then pkg_cv_LIBDAR_LIBS="$LIBDAR_LIBS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libdar\${build_mode_suffix}\""; } >&5 ($PKG_CONFIG --exists --print-errors "libdar${build_mode_suffix}") 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_LIBDAR_LIBS=`$PKG_CONFIG --libs "libdar${build_mode_suffix}" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test $pkg_failed = yes; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then _pkg_short_errors_supported=yes else _pkg_short_errors_supported=no fi if test $_pkg_short_errors_supported = yes; then LIBDAR_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "libdar${build_mode_suffix}" 2>&1` else LIBDAR_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "libdar${build_mode_suffix}" 2>&1` fi # Put the nasty error message in config.log where it belongs echo "$LIBDAR_PKG_ERRORS" >&5 as_fn_error $? "libdar${build_mod_suffix} was not found or pkg-config is not installed (see also PKG_CONFIG_PATH env variable, if libdar is installed in a non-standard place)" "$LINENO" 5 elif test $pkg_failed = untried; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } as_fn_error $? "libdar${build_mod_suffix} was not found or pkg-config is not installed (see also PKG_CONFIG_PATH env variable, if libdar is installed in a non-standard place)" "$LINENO" 5 else LIBDAR_CFLAGS=$pkg_cv_LIBDAR_CFLAGS LIBDAR_LIBS=$pkg_cv_LIBDAR_LIBS { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 printf "%s\n" "yes" >&6; } fi pkg_failed=no { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for libthreadar" >&5 printf %s "checking for libthreadar... " >&6; } if test -n "$LIBTHREADAR_CFLAGS"; then pkg_cv_LIBTHREADAR_CFLAGS="$LIBTHREADAR_CFLAGS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libthreadar\""; } >&5 ($PKG_CONFIG --exists --print-errors "libthreadar") 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_LIBTHREADAR_CFLAGS=`$PKG_CONFIG --cflags "libthreadar" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test -n "$LIBTHREADAR_LIBS"; then pkg_cv_LIBTHREADAR_LIBS="$LIBTHREADAR_LIBS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libthreadar\""; } >&5 ($PKG_CONFIG --exists --print-errors "libthreadar") 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_LIBTHREADAR_LIBS=`$PKG_CONFIG --libs "libthreadar" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test $pkg_failed = yes; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then _pkg_short_errors_supported=yes else _pkg_short_errors_supported=no fi if test $_pkg_short_errors_supported = yes; then LIBTHREADAR_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "libthreadar" 2>&1` else LIBTHREADAR_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "libthreadar" 2>&1` fi # Put the nasty error message in config.log where it belongs echo "$LIBTHREADAR_PKG_ERRORS" >&5 as_fn_error $? "libthreadar was not found or pkg-config is not installed (see also PKG_CONFIG_PATH env variable, if libthreadar is installed in a non-standard place)" "$LINENO" 5 elif test $pkg_failed = untried; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } as_fn_error $? "libthreadar was not found or pkg-config is not installed (see also PKG_CONFIG_PATH env variable, if libthreadar is installed in a non-standard place)" "$LINENO" 5 else LIBTHREADAR_CFLAGS=$pkg_cv_LIBTHREADAR_CFLAGS LIBTHREADAR_LIBS=$pkg_cv_LIBTHREADAR_LIBS { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 printf "%s\n" "yes" >&6; } { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for libthreadar_for_autoconf in -lthreadar" >&5 printf %s "checking for libthreadar_for_autoconf in -lthreadar... " >&6; } if test ${ac_cv_lib_threadar_libthreadar_for_autoconf+y} then : printf %s "(cached) " >&6 else $as_nop ac_check_lib_save_LIBS=$LIBS LIBS="-lthreadar $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ namespace conftest { extern "C" int libthreadar_for_autoconf (); } int main (void) { return conftest::libthreadar_for_autoconf (); ; return 0; } _ACEOF if ac_fn_cxx_try_link "$LINENO" then : ac_cv_lib_threadar_libthreadar_for_autoconf=yes else $as_nop ac_cv_lib_threadar_libthreadar_for_autoconf=no fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_threadar_libthreadar_for_autoconf" >&5 printf "%s\n" "$ac_cv_lib_threadar_libthreadar_for_autoconf" >&6; } if test "x$ac_cv_lib_threadar_libthreadar_for_autoconf" = xyes then : printf "%s\n" "#define HAVE_LIBTHREADAR 1" >>confdefs.h LIBS="-lthreadar $LIBS" fi fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking Stack setup methods for libthreadar::thread class" >&5 printf %s "checking Stack setup methods for libthreadar::thread class... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ extern "C" { #if HAVE_UNISTD_H #include #endif } #if HAVE_LIBTHREADAR_LIBTHREADAR_HPP #include #endif int main (void) { class my_thread: public libthreadar::thread { protected: virtual void inherited_run() override { sleep(10); }; }; my_thread t1; t1.set_stack_size(1024*1024); t1.run(); t1.join(); ; return 0; } _ACEOF if ac_fn_cxx_try_link "$LINENO" then : printf "%s\n" "#define LIBTHREADAR_STACK_FEATURE 1" >>confdefs.h printf "%s\n" "#define DEFAULT_STACK_SIZE 8*1024*1024" >>confdefs.h { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 printf "%s\n" "yes" >&6; } else $as_nop { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext ### specific handling of musl standard library { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for standard library" >&5 printf %s "checking for standard library... " >&6; } which_test=`which test` is_musl=`ldd "$which_test" | grep musl | wc -l` if test $is_musl -ne 0 ; then # to ask musl to provide larger stacks for non threads __webdar_stack_size="0x1000000" LDFLAGS="$LDFLAGS -DPT_GNU_STACK=-Wl,-z,stack-size=__webdar_stack_size" { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: musl library detected, increasing thread stack size to $__webdar_stack_size bytes" >&5 printf "%s\n" "musl library detected, increasing thread stack size to $__webdar_stack_size bytes" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: not musl, keeping default thread stack size" >&5 printf "%s\n" "not musl, keeping default thread stack size" >&6; } fi # Checks for libraries. # AC_CHECK_LIB(ssl, [SSL_new], [], [AC_MSG_ERROR([Cannot link with libssl library]) ], [ ${OPENSSL_LIBS} ${LIBTHREADAR_LIBS} ${LIBDAR_LIBS} ]) as_ac_Lib=`printf "%s\n" "ac_cv_lib_dar${build_mode_suffix}""_for_autoconf" | $as_tr_sh` { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for for_autoconf in -ldar${build_mode_suffix}" >&5 printf %s "checking for for_autoconf in -ldar${build_mode_suffix}... " >&6; } if eval test \${$as_ac_Lib+y} then : printf %s "(cached) " >&6 else $as_nop ac_check_lib_save_LIBS=$LIBS LIBS="-ldar${build_mode_suffix} ${OPENSSL_LIBS} ${LIBTHREADAR_LIBS} ${LIBDAR_LIBS} $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ namespace conftest { extern "C" int for_autoconf (); } int main (void) { return conftest::for_autoconf (); ; return 0; } _ACEOF if ac_fn_cxx_try_link "$LINENO" then : eval "$as_ac_Lib=yes" else $as_nop eval "$as_ac_Lib=no" fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi eval ac_res=\$$as_ac_Lib { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 printf "%s\n" "$ac_res" >&6; } if eval test \"x\$"$as_ac_Lib"\" = x"yes" then : cat >>confdefs.h <<_ACEOF #define `printf "%s\n" "HAVE_LIBdar${build_mode_suffix}" | $as_tr_cpp` 1 _ACEOF LIBS="-ldar${build_mode_suffix} $LIBS" else $as_nop as_fn_error $? "cannot link with libdar library" "$LINENO" 5 fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for for_autoconf in -lthreadar" >&5 printf %s "checking for for_autoconf in -lthreadar... " >&6; } if test ${ac_cv_lib_threadar_for_autoconf+y} then : printf %s "(cached) " >&6 else $as_nop ac_check_lib_save_LIBS=$LIBS LIBS="-lthreadar ${OPENSSL_LIBS} ${LIBTHREADAR_LIBS} ${LIBDAR_LIBS} $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ namespace conftest { extern "C" int for_autoconf (); } int main (void) { return conftest::for_autoconf (); ; return 0; } _ACEOF if ac_fn_cxx_try_link "$LINENO" then : ac_cv_lib_threadar_for_autoconf=yes else $as_nop ac_cv_lib_threadar_for_autoconf=no fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_threadar_for_autoconf" >&5 printf "%s\n" "$ac_cv_lib_threadar_for_autoconf" >&6; } if test "x$ac_cv_lib_threadar_for_autoconf" = xyes then : printf "%s\n" "#define HAVE_LIBTHREADAR 1" >>confdefs.h LIBS="-lthreadar $LIBS" else $as_nop as_fn_error $? "Cannot link with libthreadar library" "$LINENO" 5 fi if test $build_static = "yes" ; then BUILD_WEBDAR_STATIC_TRUE= BUILD_WEBDAR_STATIC_FALSE='#' else BUILD_WEBDAR_STATIC_TRUE='#' BUILD_WEBDAR_STATIC_FALSE= fi if test "$build_mode" = "32"; then BUILD_MODE32_TRUE= BUILD_MODE32_FALSE='#' else BUILD_MODE32_TRUE='#' BUILD_MODE32_FALSE= fi if test "$build_mode" = "64" -o -z "$build_mode"; then BUILD_MODE64_TRUE= BUILD_MODE64_FALSE='#' else BUILD_MODE64_TRUE='#' BUILD_MODE64_FALSE= fi if test "$upx" = "yes"; then USE_UPX_TRUE= USE_UPX_FALSE='#' else USE_UPX_TRUE='#' USE_UPX_FALSE= fi if test "$doxygen" = "yes"; then USE_DOXYGEN_TRUE= USE_DOXYGEN_FALSE='#' else USE_DOXYGEN_TRUE='#' USE_DOXYGEN_FALSE= fi if test "$groff" = "yes"; then USE_GROFF_TRUE= USE_GROFF_FALSE='#' else USE_GROFF_TRUE='#' USE_GROFF_FALSE= fi if test "$local_sed" = "bsd"; then BSD_SED_TRUE= BSD_SED_FALSE='#' else BSD_SED_TRUE='#' BSD_SED_FALSE= fi CXXSTDFLAGS=$CXXSTDFLAGS UPX_PROG=upx DOXYGEN_PROG=doxygen HAS_DOT=$dot # defaults # hack from libtool mailing-list to know from source point of view whether we are compiling for dynamic or static way ac_config_commands="$ac_config_commands hack-libtool" ac_config_files="$ac_config_files Makefile doc/Makefile src/Makefile misc/Makefile po/Makefile.in" cat >confcache <<\_ACEOF # This file is a shell script that caches the results of configure # tests run on this system so they can be shared between configure # scripts and configure runs, see configure's option --config-cache. # It is not useful on other systems. If it contains results you don't # want to keep, you may remove or edit it. # # config.status only pays attention to the cache file if you give it # the --recheck option to rerun configure. # # `ac_cv_env_foo' variables (set or unset) will be overridden when # loading this file, other *unset* `ac_cv_foo' will be assigned the # following values. _ACEOF # The following way of writing the cache mishandles newlines in values, # but we know of no workaround that is simple, portable, and efficient. # So, we kill variables containing newlines. # Ultrix sh set writes to stderr and can't be redirected directly, # and sets the high bit in the cache file unless we assign to the vars. ( for ac_var in `(set) 2>&1 | sed -n 's/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'`; do eval ac_val=\$$ac_var case $ac_val in #( *${as_nl}*) case $ac_var in #( *_cv_*) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 printf "%s\n" "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; esac case $ac_var in #( _ | IFS | as_nl) ;; #( BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( *) { eval $ac_var=; unset $ac_var;} ;; esac ;; esac done (set) 2>&1 | case $as_nl`(ac_space=' '; set) 2>&1` in #( *${as_nl}ac_space=\ *) # `set' does not quote correctly, so add quotes: double-quote # substitution turns \\\\ into \\, and sed turns \\ into \. sed -n \ "s/'/'\\\\''/g; s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p" ;; #( *) # `set' quotes correctly as required by POSIX, so do not add quotes. sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" ;; esac | sort ) | sed ' /^ac_cv_env_/b end t clear :clear s/^\([^=]*\)=\(.*[{}].*\)$/test ${\1+y} || &/ t end s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/ :end' >>confcache if diff "$cache_file" confcache >/dev/null 2>&1; then :; else if test -w "$cache_file"; then if test "x$cache_file" != "x/dev/null"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5 printf "%s\n" "$as_me: updating cache $cache_file" >&6;} if test ! -f "$cache_file" || test -h "$cache_file"; then cat confcache >"$cache_file" else case $cache_file in #( */* | ?:*) mv -f confcache "$cache_file"$$ && mv -f "$cache_file"$$ "$cache_file" ;; #( *) mv -f confcache "$cache_file" ;; esac fi fi else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5 printf "%s\n" "$as_me: not updating unwritable cache $cache_file" >&6;} fi fi rm -f confcache test "x$prefix" = xNONE && prefix=$ac_default_prefix # Let make expand exec_prefix. test "x$exec_prefix" = xNONE && exec_prefix='${prefix}' DEFS=-DHAVE_CONFIG_H ac_libobjs= ac_ltlibobjs= U= for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue # 1. Remove the extension, and $U if already installed. ac_script='s/\$U\././;s/\.o$//;s/\.obj$//' ac_i=`printf "%s\n" "$ac_i" | sed "$ac_script"` # 2. Prepend LIBOBJDIR. When used with automake>=1.10 LIBOBJDIR # will be set to the directory where LIBOBJS objects are built. as_fn_append ac_libobjs " \${LIBOBJDIR}$ac_i\$U.$ac_objext" as_fn_append ac_ltlibobjs " \${LIBOBJDIR}$ac_i"'$U.lo' done LIBOBJS=$ac_libobjs LTLIBOBJS=$ac_ltlibobjs { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking that generated files are newer than configure" >&5 printf %s "checking that generated files are newer than configure... " >&6; } if test -n "$am_sleep_pid"; then # Hide warnings about reused PIDs. wait $am_sleep_pid 2>/dev/null fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: done" >&5 printf "%s\n" "done" >&6; } if test -n "$EXEEXT"; then am__EXEEXT_TRUE= am__EXEEXT_FALSE='#' else am__EXEEXT_TRUE='#' am__EXEEXT_FALSE= fi if test -z "${AMDEP_TRUE}" && test -z "${AMDEP_FALSE}"; then as_fn_error $? "conditional \"AMDEP\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${am__fastdepCC_TRUE}" && test -z "${am__fastdepCC_FALSE}"; then as_fn_error $? "conditional \"am__fastdepCC\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${am__fastdepCXX_TRUE}" && test -z "${am__fastdepCXX_FALSE}"; then as_fn_error $? "conditional \"am__fastdepCXX\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${am__fastdepCXX_TRUE}" && test -z "${am__fastdepCXX_FALSE}"; then as_fn_error $? "conditional \"am__fastdepCXX\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${am__fastdepCC_TRUE}" && test -z "${am__fastdepCC_FALSE}"; then as_fn_error $? "conditional \"am__fastdepCC\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${BUILD_WEBDAR_STATIC_TRUE}" && test -z "${BUILD_WEBDAR_STATIC_FALSE}"; then as_fn_error $? "conditional \"BUILD_WEBDAR_STATIC\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${BUILD_MODE32_TRUE}" && test -z "${BUILD_MODE32_FALSE}"; then as_fn_error $? "conditional \"BUILD_MODE32\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${BUILD_MODE64_TRUE}" && test -z "${BUILD_MODE64_FALSE}"; then as_fn_error $? "conditional \"BUILD_MODE64\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${USE_UPX_TRUE}" && test -z "${USE_UPX_FALSE}"; then as_fn_error $? "conditional \"USE_UPX\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${USE_DOXYGEN_TRUE}" && test -z "${USE_DOXYGEN_FALSE}"; then as_fn_error $? "conditional \"USE_DOXYGEN\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${USE_GROFF_TRUE}" && test -z "${USE_GROFF_FALSE}"; then as_fn_error $? "conditional \"USE_GROFF\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${BSD_SED_TRUE}" && test -z "${BSD_SED_FALSE}"; then as_fn_error $? "conditional \"BSD_SED\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi : "${CONFIG_STATUS=./config.status}" ac_write_fail=0 ac_clean_files_save=$ac_clean_files ac_clean_files="$ac_clean_files $CONFIG_STATUS" { printf "%s\n" "$as_me:${as_lineno-$LINENO}: creating $CONFIG_STATUS" >&5 printf "%s\n" "$as_me: creating $CONFIG_STATUS" >&6;} as_write_fail=0 cat >$CONFIG_STATUS <<_ASEOF || as_write_fail=1 #! $SHELL # Generated by $as_me. # Run this file to recreate the current configuration. # Compiler output produced by configure, useful for debugging # configure, is in config.log if it exists. debug=false ac_cs_recheck=false ac_cs_silent=false SHELL=\${CONFIG_SHELL-$SHELL} export SHELL _ASEOF cat >>$CONFIG_STATUS <<\_ASEOF || as_write_fail=1 ## -------------------- ## ## M4sh Initialization. ## ## -------------------- ## # Be more Bourne compatible DUALCASE=1; export DUALCASE # for MKS sh as_nop=: if test ${ZSH_VERSION+y} && (emulate sh) >/dev/null 2>&1 then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST else $as_nop case `(set -o) 2>/dev/null` in #( *posix*) : set -o posix ;; #( *) : ;; esac fi # Reset variables that may have inherited troublesome values from # the environment. # IFS needs to be set, to space, tab, and newline, in precisely that order. # (If _AS_PATH_WALK were called with IFS unset, it would have the # side effect of setting IFS to empty, thus disabling word splitting.) # Quoting is to prevent editors from complaining about space-tab. as_nl=' ' export as_nl IFS=" "" $as_nl" PS1='$ ' PS2='> ' PS4='+ ' # Ensure predictable behavior from utilities with locale-dependent output. LC_ALL=C export LC_ALL LANGUAGE=C export LANGUAGE # We cannot yet rely on "unset" to work, but we need these variables # to be unset--not just set to an empty or harmless value--now, to # avoid bugs in old shells (e.g. pre-3.0 UWIN ksh). This construct # also avoids known problems related to "unset" and subshell syntax # in other old shells (e.g. bash 2.01 and pdksh 5.2.14). for as_var in BASH_ENV ENV MAIL MAILPATH CDPATH do eval test \${$as_var+y} \ && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : done # Ensure that fds 0, 1, and 2 are open. if (exec 3>&0) 2>/dev/null; then :; else exec 0&1) 2>/dev/null; then :; else exec 1>/dev/null; fi if (exec 3>&2) ; then :; else exec 2>/dev/null; fi # The user is always right. if ${PATH_SEPARATOR+false} :; then PATH_SEPARATOR=: (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || PATH_SEPARATOR=';' } fi # Find who we are. Look in the path if we contain no directory separator. as_myself= case $0 in #(( *[\\/]* ) as_myself=$0 ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac test -r "$as_dir$0" && as_myself=$as_dir$0 && break done IFS=$as_save_IFS ;; esac # We did not find ourselves, most probably we were run as `sh COMMAND' # in which case we are not to be found in the path. if test "x$as_myself" = x; then as_myself=$0 fi if test ! -f "$as_myself"; then printf "%s\n" "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 exit 1 fi # as_fn_error STATUS ERROR [LINENO LOG_FD] # ---------------------------------------- # Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are # provided, also output the error to LOG_FD, referencing LINENO. Then exit the # script with STATUS, using 1 if that was 0. as_fn_error () { as_status=$1; test $as_status -eq 0 && as_status=1 if test "$4"; then as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 fi printf "%s\n" "$as_me: error: $2" >&2 as_fn_exit $as_status } # as_fn_error # as_fn_set_status STATUS # ----------------------- # Set $? to STATUS, without forking. as_fn_set_status () { return $1 } # as_fn_set_status # as_fn_exit STATUS # ----------------- # Exit the shell with STATUS, even in a "trap 0" or "set -e" context. as_fn_exit () { set +e as_fn_set_status $1 exit $1 } # as_fn_exit # as_fn_unset VAR # --------------- # Portably unset VAR. as_fn_unset () { { eval $1=; unset $1;} } as_unset=as_fn_unset # as_fn_append VAR VALUE # ---------------------- # Append the text in VALUE to the end of the definition contained in VAR. Take # advantage of any shell optimizations that allow amortized linear growth over # repeated appends, instead of the typical quadratic growth present in naive # implementations. if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null then : eval 'as_fn_append () { eval $1+=\$2 }' else $as_nop as_fn_append () { eval $1=\$$1\$2 } fi # as_fn_append # as_fn_arith ARG... # ------------------ # Perform arithmetic evaluation on the ARGs, and store the result in the # global $as_val. Take advantage of shells that can avoid forks. The arguments # must be portable across $(()) and expr. if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null then : eval 'as_fn_arith () { as_val=$(( $* )) }' else $as_nop as_fn_arith () { as_val=`expr "$@" || test $? -eq 1` } fi # as_fn_arith if expr a : '\(a\)' >/dev/null 2>&1 && test "X`expr 00001 : '.*\(...\)'`" = X001; then as_expr=expr else as_expr=false fi if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then as_basename=basename else as_basename=false fi if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then as_dirname=dirname else as_dirname=false fi as_me=`$as_basename -- "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)' \| . 2>/dev/null || printf "%s\n" X/"$0" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/ q } /^X\/\(\/\/\)$/{ s//\1/ q } /^X\/\(\/\).*/{ s//\1/ q } s/.*/./; q'` # Avoid depending upon Character Ranges. as_cr_letters='abcdefghijklmnopqrstuvwxyz' as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' as_cr_Letters=$as_cr_letters$as_cr_LETTERS as_cr_digits='0123456789' as_cr_alnum=$as_cr_Letters$as_cr_digits # Determine whether it's possible to make 'echo' print without a newline. # These variables are no longer used directly by Autoconf, but are AC_SUBSTed # for compatibility with existing Makefiles. ECHO_C= ECHO_N= ECHO_T= case `echo -n x` in #((((( -n*) case `echo 'xy\c'` in *c*) ECHO_T=' ';; # ECHO_T is single tab character. xy) ECHO_C='\c';; *) echo `echo ksh88 bug on AIX 6.1` > /dev/null ECHO_T=' ';; esac;; *) ECHO_N='-n';; esac # For backward compatibility with old third-party macros, we provide # the shell variables $as_echo and $as_echo_n. New code should use # AS_ECHO(["message"]) and AS_ECHO_N(["message"]), respectively. as_echo='printf %s\n' as_echo_n='printf %s' rm -f conf$$ conf$$.exe conf$$.file if test -d conf$$.dir; then rm -f conf$$.dir/conf$$.file else rm -f conf$$.dir mkdir conf$$.dir 2>/dev/null fi if (echo >conf$$.file) 2>/dev/null; then if ln -s conf$$.file conf$$ 2>/dev/null; then as_ln_s='ln -s' # ... but there are two gotchas: # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. # In both cases, we have to default to `cp -pR'. ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || as_ln_s='cp -pR' elif ln conf$$.file conf$$ 2>/dev/null; then as_ln_s=ln else as_ln_s='cp -pR' fi else as_ln_s='cp -pR' fi rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file rmdir conf$$.dir 2>/dev/null # as_fn_mkdir_p # ------------- # Create "$as_dir" as a directory, including parents if necessary. as_fn_mkdir_p () { case $as_dir in #( -*) as_dir=./$as_dir;; esac test -d "$as_dir" || eval $as_mkdir_p || { as_dirs= while :; do case $as_dir in #( *\'*) as_qdir=`printf "%s\n" "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( *) as_qdir=$as_dir;; esac as_dirs="'$as_qdir' $as_dirs" as_dir=`$as_dirname -- "$as_dir" || $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || printf "%s\n" X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` test -d "$as_dir" && break done test -z "$as_dirs" || eval "mkdir $as_dirs" } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" } # as_fn_mkdir_p if mkdir -p . 2>/dev/null; then as_mkdir_p='mkdir -p "$as_dir"' else test -d ./-p && rmdir ./-p as_mkdir_p=false fi # as_fn_executable_p FILE # ----------------------- # Test if FILE is an executable regular file. as_fn_executable_p () { test -f "$1" && test -x "$1" } # as_fn_executable_p as_test_x='test -x' as_executable_p=as_fn_executable_p # Sed expression to map a string onto a valid CPP name. as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" # Sed expression to map a string onto a valid variable name. as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" exec 6>&1 ## ----------------------------------- ## ## Main body of $CONFIG_STATUS script. ## ## ----------------------------------- ## _ASEOF test $as_write_fail = 0 && chmod +x $CONFIG_STATUS || ac_write_fail=1 cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # Save the log message, to keep $0 and so on meaningful, and to # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. ac_log=" This file was extended by WEBDAR $as_me 1.0.0, which was generated by GNU Autoconf 2.71. Invocation command line was CONFIG_FILES = $CONFIG_FILES CONFIG_HEADERS = $CONFIG_HEADERS CONFIG_LINKS = $CONFIG_LINKS CONFIG_COMMANDS = $CONFIG_COMMANDS $ $0 $@ on `(hostname || uname -n) 2>/dev/null | sed 1q` " _ACEOF case $ac_config_files in *" "*) set x $ac_config_files; shift; ac_config_files=$*;; esac case $ac_config_headers in *" "*) set x $ac_config_headers; shift; ac_config_headers=$*;; esac cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 # Files that config.status was made for. config_files="$ac_config_files" config_headers="$ac_config_headers" config_commands="$ac_config_commands" _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 ac_cs_usage="\ \`$as_me' instantiates files and other configuration actions from templates according to the current configuration. Unless the files and actions are specified as TAGs, all are instantiated by default. Usage: $0 [OPTION]... [TAG]... -h, --help print this help, then exit -V, --version print version number and configuration settings, then exit --config print configuration, then exit -q, --quiet, --silent do not print progress messages -d, --debug don't remove temporary files --recheck update $as_me by reconfiguring in the same conditions --file=FILE[:TEMPLATE] instantiate the configuration file FILE --header=FILE[:TEMPLATE] instantiate the configuration header FILE Configuration files: $config_files Configuration headers: $config_headers Configuration commands: $config_commands Report bugs to ." _ACEOF ac_cs_config=`printf "%s\n" "$ac_configure_args" | sed "$ac_safe_unquote"` ac_cs_config_escaped=`printf "%s\n" "$ac_cs_config" | sed "s/^ //; s/'/'\\\\\\\\''/g"` cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_cs_config='$ac_cs_config_escaped' ac_cs_version="\\ WEBDAR config.status 1.0.0 configured by $0, generated by GNU Autoconf 2.71, with options \\"\$ac_cs_config\\" Copyright (C) 2021 Free Software Foundation, Inc. This config.status script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it." ac_pwd='$ac_pwd' srcdir='$srcdir' INSTALL='$INSTALL' MKDIR_P='$MKDIR_P' AWK='$AWK' test -n "\$AWK" || AWK=awk _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # The default lists apply if the user does not specify any file. ac_need_defaults=: while test $# != 0 do case $1 in --*=?*) ac_option=`expr "X$1" : 'X\([^=]*\)='` ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'` ac_shift=: ;; --*=) ac_option=`expr "X$1" : 'X\([^=]*\)='` ac_optarg= ac_shift=: ;; *) ac_option=$1 ac_optarg=$2 ac_shift=shift ;; esac case $ac_option in # Handling of the options. -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) ac_cs_recheck=: ;; --version | --versio | --versi | --vers | --ver | --ve | --v | -V ) printf "%s\n" "$ac_cs_version"; exit ;; --config | --confi | --conf | --con | --co | --c ) printf "%s\n" "$ac_cs_config"; exit ;; --debug | --debu | --deb | --de | --d | -d ) debug=: ;; --file | --fil | --fi | --f ) $ac_shift case $ac_optarg in *\'*) ac_optarg=`printf "%s\n" "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; '') as_fn_error $? "missing file argument" ;; esac as_fn_append CONFIG_FILES " '$ac_optarg'" ac_need_defaults=false;; --header | --heade | --head | --hea ) $ac_shift case $ac_optarg in *\'*) ac_optarg=`printf "%s\n" "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; esac as_fn_append CONFIG_HEADERS " '$ac_optarg'" ac_need_defaults=false;; --he | --h) # Conflict between --help and --header as_fn_error $? "ambiguous option: \`$1' Try \`$0 --help' for more information.";; --help | --hel | -h ) printf "%s\n" "$ac_cs_usage"; exit ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil | --si | --s) ac_cs_silent=: ;; # This is an error. -*) as_fn_error $? "unrecognized option: \`$1' Try \`$0 --help' for more information." ;; *) as_fn_append ac_config_targets " $1" ac_need_defaults=false ;; esac shift done ac_configure_extra_args= if $ac_cs_silent; then exec 6>/dev/null ac_configure_extra_args="$ac_configure_extra_args --silent" fi _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 if \$ac_cs_recheck; then set X $SHELL '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion shift \printf "%s\n" "running CONFIG_SHELL=$SHELL \$*" >&6 CONFIG_SHELL='$SHELL' export CONFIG_SHELL exec "\$@" fi _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 exec 5>>config.log { echo sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX ## Running $as_me. ## _ASBOX printf "%s\n" "$ac_log" } >&5 _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 # # INIT-COMMANDS # # Capture the value of obsolete ALL_LINGUAS because we need it to compute # POFILES, UPDATEPOFILES, DUMMYPOFILES, GMOFILES, CATALOGS. OBSOLETE_ALL_LINGUAS="$ALL_LINGUAS" # Capture the value of LINGUAS because we need it to compute CATALOGS. LINGUAS="${LINGUAS-%UNSET%}" AMDEP_TRUE="$AMDEP_TRUE" MAKE="${MAKE-make}" # The HP-UX ksh and POSIX shell print the target directory to stdout # if CDPATH is set. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH sed_quote_subst='$sed_quote_subst' double_quote_subst='$double_quote_subst' delay_variable_subst='$delay_variable_subst' macro_version='`$ECHO "$macro_version" | $SED "$delay_single_quote_subst"`' macro_revision='`$ECHO "$macro_revision" | $SED "$delay_single_quote_subst"`' enable_shared='`$ECHO "$enable_shared" | $SED "$delay_single_quote_subst"`' enable_static='`$ECHO "$enable_static" | $SED "$delay_single_quote_subst"`' pic_mode='`$ECHO "$pic_mode" | $SED "$delay_single_quote_subst"`' enable_fast_install='`$ECHO "$enable_fast_install" | $SED "$delay_single_quote_subst"`' shared_archive_member_spec='`$ECHO "$shared_archive_member_spec" | $SED "$delay_single_quote_subst"`' SHELL='`$ECHO "$SHELL" | $SED "$delay_single_quote_subst"`' ECHO='`$ECHO "$ECHO" | $SED "$delay_single_quote_subst"`' PATH_SEPARATOR='`$ECHO "$PATH_SEPARATOR" | $SED "$delay_single_quote_subst"`' host_alias='`$ECHO "$host_alias" | $SED "$delay_single_quote_subst"`' host='`$ECHO "$host" | $SED "$delay_single_quote_subst"`' host_os='`$ECHO "$host_os" | $SED "$delay_single_quote_subst"`' build_alias='`$ECHO "$build_alias" | $SED "$delay_single_quote_subst"`' build='`$ECHO "$build" | $SED "$delay_single_quote_subst"`' build_os='`$ECHO "$build_os" | $SED "$delay_single_quote_subst"`' SED='`$ECHO "$SED" | $SED "$delay_single_quote_subst"`' Xsed='`$ECHO "$Xsed" | $SED "$delay_single_quote_subst"`' GREP='`$ECHO "$GREP" | $SED "$delay_single_quote_subst"`' EGREP='`$ECHO "$EGREP" | $SED "$delay_single_quote_subst"`' FGREP='`$ECHO "$FGREP" | $SED "$delay_single_quote_subst"`' LD='`$ECHO "$LD" | $SED "$delay_single_quote_subst"`' NM='`$ECHO "$NM" | $SED "$delay_single_quote_subst"`' LN_S='`$ECHO "$LN_S" | $SED "$delay_single_quote_subst"`' max_cmd_len='`$ECHO "$max_cmd_len" | $SED "$delay_single_quote_subst"`' ac_objext='`$ECHO "$ac_objext" | $SED "$delay_single_quote_subst"`' exeext='`$ECHO "$exeext" | $SED "$delay_single_quote_subst"`' lt_unset='`$ECHO "$lt_unset" | $SED "$delay_single_quote_subst"`' lt_SP2NL='`$ECHO "$lt_SP2NL" | $SED "$delay_single_quote_subst"`' lt_NL2SP='`$ECHO "$lt_NL2SP" | $SED "$delay_single_quote_subst"`' lt_cv_to_host_file_cmd='`$ECHO "$lt_cv_to_host_file_cmd" | $SED "$delay_single_quote_subst"`' lt_cv_to_tool_file_cmd='`$ECHO "$lt_cv_to_tool_file_cmd" | $SED "$delay_single_quote_subst"`' reload_flag='`$ECHO "$reload_flag" | $SED "$delay_single_quote_subst"`' reload_cmds='`$ECHO "$reload_cmds" | $SED "$delay_single_quote_subst"`' FILECMD='`$ECHO "$FILECMD" | $SED "$delay_single_quote_subst"`' OBJDUMP='`$ECHO "$OBJDUMP" | $SED "$delay_single_quote_subst"`' deplibs_check_method='`$ECHO "$deplibs_check_method" | $SED "$delay_single_quote_subst"`' file_magic_cmd='`$ECHO "$file_magic_cmd" | $SED "$delay_single_quote_subst"`' file_magic_glob='`$ECHO "$file_magic_glob" | $SED "$delay_single_quote_subst"`' want_nocaseglob='`$ECHO "$want_nocaseglob" | $SED "$delay_single_quote_subst"`' DLLTOOL='`$ECHO "$DLLTOOL" | $SED "$delay_single_quote_subst"`' sharedlib_from_linklib_cmd='`$ECHO "$sharedlib_from_linklib_cmd" | $SED "$delay_single_quote_subst"`' AR='`$ECHO "$AR" | $SED "$delay_single_quote_subst"`' lt_ar_flags='`$ECHO "$lt_ar_flags" | $SED "$delay_single_quote_subst"`' AR_FLAGS='`$ECHO "$AR_FLAGS" | $SED "$delay_single_quote_subst"`' archiver_list_spec='`$ECHO "$archiver_list_spec" | $SED "$delay_single_quote_subst"`' STRIP='`$ECHO "$STRIP" | $SED "$delay_single_quote_subst"`' RANLIB='`$ECHO "$RANLIB" | $SED "$delay_single_quote_subst"`' old_postinstall_cmds='`$ECHO "$old_postinstall_cmds" | $SED "$delay_single_quote_subst"`' old_postuninstall_cmds='`$ECHO "$old_postuninstall_cmds" | $SED "$delay_single_quote_subst"`' old_archive_cmds='`$ECHO "$old_archive_cmds" | $SED "$delay_single_quote_subst"`' lock_old_archive_extraction='`$ECHO "$lock_old_archive_extraction" | $SED "$delay_single_quote_subst"`' CC='`$ECHO "$CC" | $SED "$delay_single_quote_subst"`' CFLAGS='`$ECHO "$CFLAGS" | $SED "$delay_single_quote_subst"`' compiler='`$ECHO "$compiler" | $SED "$delay_single_quote_subst"`' GCC='`$ECHO "$GCC" | $SED "$delay_single_quote_subst"`' lt_cv_sys_global_symbol_pipe='`$ECHO "$lt_cv_sys_global_symbol_pipe" | $SED "$delay_single_quote_subst"`' lt_cv_sys_global_symbol_to_cdecl='`$ECHO "$lt_cv_sys_global_symbol_to_cdecl" | $SED "$delay_single_quote_subst"`' lt_cv_sys_global_symbol_to_import='`$ECHO "$lt_cv_sys_global_symbol_to_import" | $SED "$delay_single_quote_subst"`' lt_cv_sys_global_symbol_to_c_name_address='`$ECHO "$lt_cv_sys_global_symbol_to_c_name_address" | $SED "$delay_single_quote_subst"`' lt_cv_sys_global_symbol_to_c_name_address_lib_prefix='`$ECHO "$lt_cv_sys_global_symbol_to_c_name_address_lib_prefix" | $SED "$delay_single_quote_subst"`' lt_cv_nm_interface='`$ECHO "$lt_cv_nm_interface" | $SED "$delay_single_quote_subst"`' nm_file_list_spec='`$ECHO "$nm_file_list_spec" | $SED "$delay_single_quote_subst"`' lt_sysroot='`$ECHO "$lt_sysroot" | $SED "$delay_single_quote_subst"`' lt_cv_truncate_bin='`$ECHO "$lt_cv_truncate_bin" | $SED "$delay_single_quote_subst"`' objdir='`$ECHO "$objdir" | $SED "$delay_single_quote_subst"`' MAGIC_CMD='`$ECHO "$MAGIC_CMD" | $SED "$delay_single_quote_subst"`' lt_prog_compiler_no_builtin_flag='`$ECHO "$lt_prog_compiler_no_builtin_flag" | $SED "$delay_single_quote_subst"`' lt_prog_compiler_pic='`$ECHO "$lt_prog_compiler_pic" | $SED "$delay_single_quote_subst"`' lt_prog_compiler_wl='`$ECHO "$lt_prog_compiler_wl" | $SED "$delay_single_quote_subst"`' lt_prog_compiler_static='`$ECHO "$lt_prog_compiler_static" | $SED "$delay_single_quote_subst"`' lt_cv_prog_compiler_c_o='`$ECHO "$lt_cv_prog_compiler_c_o" | $SED "$delay_single_quote_subst"`' need_locks='`$ECHO "$need_locks" | $SED "$delay_single_quote_subst"`' MANIFEST_TOOL='`$ECHO "$MANIFEST_TOOL" | $SED "$delay_single_quote_subst"`' DSYMUTIL='`$ECHO "$DSYMUTIL" | $SED "$delay_single_quote_subst"`' NMEDIT='`$ECHO "$NMEDIT" | $SED "$delay_single_quote_subst"`' LIPO='`$ECHO "$LIPO" | $SED "$delay_single_quote_subst"`' OTOOL='`$ECHO "$OTOOL" | $SED "$delay_single_quote_subst"`' OTOOL64='`$ECHO "$OTOOL64" | $SED "$delay_single_quote_subst"`' libext='`$ECHO "$libext" | $SED "$delay_single_quote_subst"`' shrext_cmds='`$ECHO "$shrext_cmds" | $SED "$delay_single_quote_subst"`' extract_expsyms_cmds='`$ECHO "$extract_expsyms_cmds" | $SED "$delay_single_quote_subst"`' archive_cmds_need_lc='`$ECHO "$archive_cmds_need_lc" | $SED "$delay_single_quote_subst"`' enable_shared_with_static_runtimes='`$ECHO "$enable_shared_with_static_runtimes" | $SED "$delay_single_quote_subst"`' export_dynamic_flag_spec='`$ECHO "$export_dynamic_flag_spec" | $SED "$delay_single_quote_subst"`' whole_archive_flag_spec='`$ECHO "$whole_archive_flag_spec" | $SED "$delay_single_quote_subst"`' compiler_needs_object='`$ECHO "$compiler_needs_object" | $SED "$delay_single_quote_subst"`' old_archive_from_new_cmds='`$ECHO "$old_archive_from_new_cmds" | $SED "$delay_single_quote_subst"`' old_archive_from_expsyms_cmds='`$ECHO "$old_archive_from_expsyms_cmds" | $SED "$delay_single_quote_subst"`' archive_cmds='`$ECHO "$archive_cmds" | $SED "$delay_single_quote_subst"`' archive_expsym_cmds='`$ECHO "$archive_expsym_cmds" | $SED "$delay_single_quote_subst"`' module_cmds='`$ECHO "$module_cmds" | $SED "$delay_single_quote_subst"`' module_expsym_cmds='`$ECHO "$module_expsym_cmds" | $SED "$delay_single_quote_subst"`' with_gnu_ld='`$ECHO "$with_gnu_ld" | $SED "$delay_single_quote_subst"`' allow_undefined_flag='`$ECHO "$allow_undefined_flag" | $SED "$delay_single_quote_subst"`' no_undefined_flag='`$ECHO "$no_undefined_flag" | $SED "$delay_single_quote_subst"`' hardcode_libdir_flag_spec='`$ECHO "$hardcode_libdir_flag_spec" | $SED "$delay_single_quote_subst"`' hardcode_libdir_separator='`$ECHO "$hardcode_libdir_separator" | $SED "$delay_single_quote_subst"`' hardcode_direct='`$ECHO "$hardcode_direct" | $SED "$delay_single_quote_subst"`' hardcode_direct_absolute='`$ECHO "$hardcode_direct_absolute" | $SED "$delay_single_quote_subst"`' hardcode_minus_L='`$ECHO "$hardcode_minus_L" | $SED "$delay_single_quote_subst"`' hardcode_shlibpath_var='`$ECHO "$hardcode_shlibpath_var" | $SED "$delay_single_quote_subst"`' hardcode_automatic='`$ECHO "$hardcode_automatic" | $SED "$delay_single_quote_subst"`' inherit_rpath='`$ECHO "$inherit_rpath" | $SED "$delay_single_quote_subst"`' link_all_deplibs='`$ECHO "$link_all_deplibs" | $SED "$delay_single_quote_subst"`' always_export_symbols='`$ECHO "$always_export_symbols" | $SED "$delay_single_quote_subst"`' export_symbols_cmds='`$ECHO "$export_symbols_cmds" | $SED "$delay_single_quote_subst"`' exclude_expsyms='`$ECHO "$exclude_expsyms" | $SED "$delay_single_quote_subst"`' include_expsyms='`$ECHO "$include_expsyms" | $SED "$delay_single_quote_subst"`' prelink_cmds='`$ECHO "$prelink_cmds" | $SED "$delay_single_quote_subst"`' postlink_cmds='`$ECHO "$postlink_cmds" | $SED "$delay_single_quote_subst"`' file_list_spec='`$ECHO "$file_list_spec" | $SED "$delay_single_quote_subst"`' variables_saved_for_relink='`$ECHO "$variables_saved_for_relink" | $SED "$delay_single_quote_subst"`' need_lib_prefix='`$ECHO "$need_lib_prefix" | $SED "$delay_single_quote_subst"`' need_version='`$ECHO "$need_version" | $SED "$delay_single_quote_subst"`' version_type='`$ECHO "$version_type" | $SED "$delay_single_quote_subst"`' runpath_var='`$ECHO "$runpath_var" | $SED "$delay_single_quote_subst"`' shlibpath_var='`$ECHO "$shlibpath_var" | $SED "$delay_single_quote_subst"`' shlibpath_overrides_runpath='`$ECHO "$shlibpath_overrides_runpath" | $SED "$delay_single_quote_subst"`' libname_spec='`$ECHO "$libname_spec" | $SED "$delay_single_quote_subst"`' library_names_spec='`$ECHO "$library_names_spec" | $SED "$delay_single_quote_subst"`' soname_spec='`$ECHO "$soname_spec" | $SED "$delay_single_quote_subst"`' install_override_mode='`$ECHO "$install_override_mode" | $SED "$delay_single_quote_subst"`' postinstall_cmds='`$ECHO "$postinstall_cmds" | $SED "$delay_single_quote_subst"`' postuninstall_cmds='`$ECHO "$postuninstall_cmds" | $SED "$delay_single_quote_subst"`' finish_cmds='`$ECHO "$finish_cmds" | $SED "$delay_single_quote_subst"`' finish_eval='`$ECHO "$finish_eval" | $SED "$delay_single_quote_subst"`' hardcode_into_libs='`$ECHO "$hardcode_into_libs" | $SED "$delay_single_quote_subst"`' sys_lib_search_path_spec='`$ECHO "$sys_lib_search_path_spec" | $SED "$delay_single_quote_subst"`' configure_time_dlsearch_path='`$ECHO "$configure_time_dlsearch_path" | $SED "$delay_single_quote_subst"`' configure_time_lt_sys_library_path='`$ECHO "$configure_time_lt_sys_library_path" | $SED "$delay_single_quote_subst"`' hardcode_action='`$ECHO "$hardcode_action" | $SED "$delay_single_quote_subst"`' enable_dlopen='`$ECHO "$enable_dlopen" | $SED "$delay_single_quote_subst"`' enable_dlopen_self='`$ECHO "$enable_dlopen_self" | $SED "$delay_single_quote_subst"`' enable_dlopen_self_static='`$ECHO "$enable_dlopen_self_static" | $SED "$delay_single_quote_subst"`' old_striplib='`$ECHO "$old_striplib" | $SED "$delay_single_quote_subst"`' striplib='`$ECHO "$striplib" | $SED "$delay_single_quote_subst"`' compiler_lib_search_dirs='`$ECHO "$compiler_lib_search_dirs" | $SED "$delay_single_quote_subst"`' predep_objects='`$ECHO "$predep_objects" | $SED "$delay_single_quote_subst"`' postdep_objects='`$ECHO "$postdep_objects" | $SED "$delay_single_quote_subst"`' predeps='`$ECHO "$predeps" | $SED "$delay_single_quote_subst"`' postdeps='`$ECHO "$postdeps" | $SED "$delay_single_quote_subst"`' compiler_lib_search_path='`$ECHO "$compiler_lib_search_path" | $SED "$delay_single_quote_subst"`' LD_CXX='`$ECHO "$LD_CXX" | $SED "$delay_single_quote_subst"`' reload_flag_CXX='`$ECHO "$reload_flag_CXX" | $SED "$delay_single_quote_subst"`' reload_cmds_CXX='`$ECHO "$reload_cmds_CXX" | $SED "$delay_single_quote_subst"`' old_archive_cmds_CXX='`$ECHO "$old_archive_cmds_CXX" | $SED "$delay_single_quote_subst"`' compiler_CXX='`$ECHO "$compiler_CXX" | $SED "$delay_single_quote_subst"`' GCC_CXX='`$ECHO "$GCC_CXX" | $SED "$delay_single_quote_subst"`' lt_prog_compiler_no_builtin_flag_CXX='`$ECHO "$lt_prog_compiler_no_builtin_flag_CXX" | $SED "$delay_single_quote_subst"`' lt_prog_compiler_pic_CXX='`$ECHO "$lt_prog_compiler_pic_CXX" | $SED "$delay_single_quote_subst"`' lt_prog_compiler_wl_CXX='`$ECHO "$lt_prog_compiler_wl_CXX" | $SED "$delay_single_quote_subst"`' lt_prog_compiler_static_CXX='`$ECHO "$lt_prog_compiler_static_CXX" | $SED "$delay_single_quote_subst"`' lt_cv_prog_compiler_c_o_CXX='`$ECHO "$lt_cv_prog_compiler_c_o_CXX" | $SED "$delay_single_quote_subst"`' archive_cmds_need_lc_CXX='`$ECHO "$archive_cmds_need_lc_CXX" | $SED "$delay_single_quote_subst"`' enable_shared_with_static_runtimes_CXX='`$ECHO "$enable_shared_with_static_runtimes_CXX" | $SED "$delay_single_quote_subst"`' export_dynamic_flag_spec_CXX='`$ECHO "$export_dynamic_flag_spec_CXX" | $SED "$delay_single_quote_subst"`' whole_archive_flag_spec_CXX='`$ECHO "$whole_archive_flag_spec_CXX" | $SED "$delay_single_quote_subst"`' compiler_needs_object_CXX='`$ECHO "$compiler_needs_object_CXX" | $SED "$delay_single_quote_subst"`' old_archive_from_new_cmds_CXX='`$ECHO "$old_archive_from_new_cmds_CXX" | $SED "$delay_single_quote_subst"`' old_archive_from_expsyms_cmds_CXX='`$ECHO "$old_archive_from_expsyms_cmds_CXX" | $SED "$delay_single_quote_subst"`' archive_cmds_CXX='`$ECHO "$archive_cmds_CXX" | $SED "$delay_single_quote_subst"`' archive_expsym_cmds_CXX='`$ECHO "$archive_expsym_cmds_CXX" | $SED "$delay_single_quote_subst"`' module_cmds_CXX='`$ECHO "$module_cmds_CXX" | $SED "$delay_single_quote_subst"`' module_expsym_cmds_CXX='`$ECHO "$module_expsym_cmds_CXX" | $SED "$delay_single_quote_subst"`' with_gnu_ld_CXX='`$ECHO "$with_gnu_ld_CXX" | $SED "$delay_single_quote_subst"`' allow_undefined_flag_CXX='`$ECHO "$allow_undefined_flag_CXX" | $SED "$delay_single_quote_subst"`' no_undefined_flag_CXX='`$ECHO "$no_undefined_flag_CXX" | $SED "$delay_single_quote_subst"`' hardcode_libdir_flag_spec_CXX='`$ECHO "$hardcode_libdir_flag_spec_CXX" | $SED "$delay_single_quote_subst"`' hardcode_libdir_separator_CXX='`$ECHO "$hardcode_libdir_separator_CXX" | $SED "$delay_single_quote_subst"`' hardcode_direct_CXX='`$ECHO "$hardcode_direct_CXX" | $SED "$delay_single_quote_subst"`' hardcode_direct_absolute_CXX='`$ECHO "$hardcode_direct_absolute_CXX" | $SED "$delay_single_quote_subst"`' hardcode_minus_L_CXX='`$ECHO "$hardcode_minus_L_CXX" | $SED "$delay_single_quote_subst"`' hardcode_shlibpath_var_CXX='`$ECHO "$hardcode_shlibpath_var_CXX" | $SED "$delay_single_quote_subst"`' hardcode_automatic_CXX='`$ECHO "$hardcode_automatic_CXX" | $SED "$delay_single_quote_subst"`' inherit_rpath_CXX='`$ECHO "$inherit_rpath_CXX" | $SED "$delay_single_quote_subst"`' link_all_deplibs_CXX='`$ECHO "$link_all_deplibs_CXX" | $SED "$delay_single_quote_subst"`' always_export_symbols_CXX='`$ECHO "$always_export_symbols_CXX" | $SED "$delay_single_quote_subst"`' export_symbols_cmds_CXX='`$ECHO "$export_symbols_cmds_CXX" | $SED "$delay_single_quote_subst"`' exclude_expsyms_CXX='`$ECHO "$exclude_expsyms_CXX" | $SED "$delay_single_quote_subst"`' include_expsyms_CXX='`$ECHO "$include_expsyms_CXX" | $SED "$delay_single_quote_subst"`' prelink_cmds_CXX='`$ECHO "$prelink_cmds_CXX" | $SED "$delay_single_quote_subst"`' postlink_cmds_CXX='`$ECHO "$postlink_cmds_CXX" | $SED "$delay_single_quote_subst"`' file_list_spec_CXX='`$ECHO "$file_list_spec_CXX" | $SED "$delay_single_quote_subst"`' hardcode_action_CXX='`$ECHO "$hardcode_action_CXX" | $SED "$delay_single_quote_subst"`' compiler_lib_search_dirs_CXX='`$ECHO "$compiler_lib_search_dirs_CXX" | $SED "$delay_single_quote_subst"`' predep_objects_CXX='`$ECHO "$predep_objects_CXX" | $SED "$delay_single_quote_subst"`' postdep_objects_CXX='`$ECHO "$postdep_objects_CXX" | $SED "$delay_single_quote_subst"`' predeps_CXX='`$ECHO "$predeps_CXX" | $SED "$delay_single_quote_subst"`' postdeps_CXX='`$ECHO "$postdeps_CXX" | $SED "$delay_single_quote_subst"`' compiler_lib_search_path_CXX='`$ECHO "$compiler_lib_search_path_CXX" | $SED "$delay_single_quote_subst"`' LTCC='$LTCC' LTCFLAGS='$LTCFLAGS' compiler='$compiler_DEFAULT' # A function that is used when there is no print builtin or printf. func_fallback_echo () { eval 'cat <<_LTECHO_EOF \$1 _LTECHO_EOF' } # Quote evaled strings. for var in SHELL \ ECHO \ PATH_SEPARATOR \ SED \ GREP \ EGREP \ FGREP \ LD \ NM \ LN_S \ lt_SP2NL \ lt_NL2SP \ reload_flag \ FILECMD \ OBJDUMP \ deplibs_check_method \ file_magic_cmd \ file_magic_glob \ want_nocaseglob \ DLLTOOL \ sharedlib_from_linklib_cmd \ AR \ archiver_list_spec \ STRIP \ RANLIB \ CC \ CFLAGS \ compiler \ lt_cv_sys_global_symbol_pipe \ lt_cv_sys_global_symbol_to_cdecl \ lt_cv_sys_global_symbol_to_import \ lt_cv_sys_global_symbol_to_c_name_address \ lt_cv_sys_global_symbol_to_c_name_address_lib_prefix \ lt_cv_nm_interface \ nm_file_list_spec \ lt_cv_truncate_bin \ lt_prog_compiler_no_builtin_flag \ lt_prog_compiler_pic \ lt_prog_compiler_wl \ lt_prog_compiler_static \ lt_cv_prog_compiler_c_o \ need_locks \ MANIFEST_TOOL \ DSYMUTIL \ NMEDIT \ LIPO \ OTOOL \ OTOOL64 \ shrext_cmds \ export_dynamic_flag_spec \ whole_archive_flag_spec \ compiler_needs_object \ with_gnu_ld \ allow_undefined_flag \ no_undefined_flag \ hardcode_libdir_flag_spec \ hardcode_libdir_separator \ exclude_expsyms \ include_expsyms \ file_list_spec \ variables_saved_for_relink \ libname_spec \ library_names_spec \ soname_spec \ install_override_mode \ finish_eval \ old_striplib \ striplib \ compiler_lib_search_dirs \ predep_objects \ postdep_objects \ predeps \ postdeps \ compiler_lib_search_path \ LD_CXX \ reload_flag_CXX \ compiler_CXX \ lt_prog_compiler_no_builtin_flag_CXX \ lt_prog_compiler_pic_CXX \ lt_prog_compiler_wl_CXX \ lt_prog_compiler_static_CXX \ lt_cv_prog_compiler_c_o_CXX \ export_dynamic_flag_spec_CXX \ whole_archive_flag_spec_CXX \ compiler_needs_object_CXX \ with_gnu_ld_CXX \ allow_undefined_flag_CXX \ no_undefined_flag_CXX \ hardcode_libdir_flag_spec_CXX \ hardcode_libdir_separator_CXX \ exclude_expsyms_CXX \ include_expsyms_CXX \ file_list_spec_CXX \ compiler_lib_search_dirs_CXX \ predep_objects_CXX \ postdep_objects_CXX \ predeps_CXX \ postdeps_CXX \ compiler_lib_search_path_CXX; do case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in *[\\\\\\\`\\"\\\$]*) eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED \\"\\\$sed_quote_subst\\"\\\`\\\\\\"" ## exclude from sc_prohibit_nested_quotes ;; *) eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" ;; esac done # Double-quote double-evaled strings. for var in reload_cmds \ old_postinstall_cmds \ old_postuninstall_cmds \ old_archive_cmds \ extract_expsyms_cmds \ old_archive_from_new_cmds \ old_archive_from_expsyms_cmds \ archive_cmds \ archive_expsym_cmds \ module_cmds \ module_expsym_cmds \ export_symbols_cmds \ prelink_cmds \ postlink_cmds \ postinstall_cmds \ postuninstall_cmds \ finish_cmds \ sys_lib_search_path_spec \ configure_time_dlsearch_path \ configure_time_lt_sys_library_path \ reload_cmds_CXX \ old_archive_cmds_CXX \ old_archive_from_new_cmds_CXX \ old_archive_from_expsyms_cmds_CXX \ archive_cmds_CXX \ archive_expsym_cmds_CXX \ module_cmds_CXX \ module_expsym_cmds_CXX \ export_symbols_cmds_CXX \ prelink_cmds_CXX \ postlink_cmds_CXX; do case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in *[\\\\\\\`\\"\\\$]*) eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED -e \\"\\\$double_quote_subst\\" -e \\"\\\$sed_quote_subst\\" -e \\"\\\$delay_variable_subst\\"\\\`\\\\\\"" ## exclude from sc_prohibit_nested_quotes ;; *) eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" ;; esac done ac_aux_dir='$ac_aux_dir' # See if we are running on zsh, and set the options that allow our # commands through without removal of \ escapes INIT. if test -n "\${ZSH_VERSION+set}"; then setopt NO_GLOB_SUBST fi PACKAGE='$PACKAGE' VERSION='$VERSION' RM='$RM' ofile='$ofile' _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # Handling of arguments. for ac_config_target in $ac_config_targets do case $ac_config_target in "config.h") CONFIG_HEADERS="$CONFIG_HEADERS config.h" ;; "po-directories") CONFIG_COMMANDS="$CONFIG_COMMANDS po-directories" ;; "depfiles") CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;; "libtool") CONFIG_COMMANDS="$CONFIG_COMMANDS libtool" ;; "hack-libtool") CONFIG_COMMANDS="$CONFIG_COMMANDS hack-libtool" ;; "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;; "doc/Makefile") CONFIG_FILES="$CONFIG_FILES doc/Makefile" ;; "src/Makefile") CONFIG_FILES="$CONFIG_FILES src/Makefile" ;; "misc/Makefile") CONFIG_FILES="$CONFIG_FILES misc/Makefile" ;; "po/Makefile.in") CONFIG_FILES="$CONFIG_FILES po/Makefile.in" ;; *) as_fn_error $? "invalid argument: \`$ac_config_target'" "$LINENO" 5;; esac done # If the user did not use the arguments to specify the items to instantiate, # then the envvar interface is used. Set only those that are not. # We use the long form for the default assignment because of an extremely # bizarre bug on SunOS 4.1.3. if $ac_need_defaults; then test ${CONFIG_FILES+y} || CONFIG_FILES=$config_files test ${CONFIG_HEADERS+y} || CONFIG_HEADERS=$config_headers test ${CONFIG_COMMANDS+y} || CONFIG_COMMANDS=$config_commands fi # Have a temporary directory for convenience. Make it in the build tree # simply because there is no reason against having it here, and in addition, # creating and moving files from /tmp can sometimes cause problems. # Hook for its removal unless debugging. # Note that there is a small window in which the directory will not be cleaned: # after its creation but before its name has been assigned to `$tmp'. $debug || { tmp= ac_tmp= trap 'exit_status=$? : "${ac_tmp:=$tmp}" { test ! -d "$ac_tmp" || rm -fr "$ac_tmp"; } && exit $exit_status ' 0 trap 'as_fn_exit 1' 1 2 13 15 } # Create a (secure) tmp directory for tmp files. { tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` && test -d "$tmp" } || { tmp=./conf$$-$RANDOM (umask 077 && mkdir "$tmp") } || as_fn_error $? "cannot create a temporary directory in ." "$LINENO" 5 ac_tmp=$tmp # Set up the scripts for CONFIG_FILES section. # No need to generate them if there are no CONFIG_FILES. # This happens for instance with `./config.status config.h'. if test -n "$CONFIG_FILES"; then ac_cr=`echo X | tr X '\015'` # On cygwin, bash can eat \r inside `` if the user requested igncr. # But we know of no other shell where ac_cr would be empty at this # point, so we can use a bashism as a fallback. if test "x$ac_cr" = x; then eval ac_cr=\$\'\\r\' fi ac_cs_awk_cr=`$AWK 'BEGIN { print "a\rb" }' /dev/null` if test "$ac_cs_awk_cr" = "a${ac_cr}b"; then ac_cs_awk_cr='\\r' else ac_cs_awk_cr=$ac_cr fi echo 'BEGIN {' >"$ac_tmp/subs1.awk" && _ACEOF { echo "cat >conf$$subs.awk <<_ACEOF" && echo "$ac_subst_vars" | sed 's/.*/&!$&$ac_delim/' && echo "_ACEOF" } >conf$$subs.sh || as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 ac_delim_num=`echo "$ac_subst_vars" | grep -c '^'` ac_delim='%!_!# ' for ac_last_try in false false false false false :; do . ./conf$$subs.sh || as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 ac_delim_n=`sed -n "s/.*$ac_delim\$/X/p" conf$$subs.awk | grep -c X` if test $ac_delim_n = $ac_delim_num; then break elif $ac_last_try; then as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 else ac_delim="$ac_delim!$ac_delim _$ac_delim!! " fi done rm -f conf$$subs.sh cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 cat >>"\$ac_tmp/subs1.awk" <<\\_ACAWK && _ACEOF sed -n ' h s/^/S["/; s/!.*/"]=/ p g s/^[^!]*!// :repl t repl s/'"$ac_delim"'$// t delim :nl h s/\(.\{148\}\)..*/\1/ t more1 s/["\\]/\\&/g; s/^/"/; s/$/\\n"\\/ p n b repl :more1 s/["\\]/\\&/g; s/^/"/; s/$/"\\/ p g s/.\{148\}// t nl :delim h s/\(.\{148\}\)..*/\1/ t more2 s/["\\]/\\&/g; s/^/"/; s/$/"/ p b :more2 s/["\\]/\\&/g; s/^/"/; s/$/"\\/ p g s/.\{148\}// t delim ' >$CONFIG_STATUS || ac_write_fail=1 rm -f conf$$subs.awk cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 _ACAWK cat >>"\$ac_tmp/subs1.awk" <<_ACAWK && for (key in S) S_is_set[key] = 1 FS = "" } { line = $ 0 nfields = split(line, field, "@") substed = 0 len = length(field[1]) for (i = 2; i < nfields; i++) { key = field[i] keylen = length(key) if (S_is_set[key]) { value = S[key] line = substr(line, 1, len) "" value "" substr(line, len + keylen + 3) len += length(value) + length(field[++i]) substed = 1 } else len += 1 + keylen } print line } _ACAWK _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 if sed "s/$ac_cr//" < /dev/null > /dev/null 2>&1; then sed "s/$ac_cr\$//; s/$ac_cr/$ac_cs_awk_cr/g" else cat fi < "$ac_tmp/subs1.awk" > "$ac_tmp/subs.awk" \ || as_fn_error $? "could not setup config files machinery" "$LINENO" 5 _ACEOF # VPATH may cause trouble with some makes, so we remove sole $(srcdir), # ${srcdir} and @srcdir@ entries from VPATH if srcdir is ".", strip leading and # trailing colons and then remove the whole line if VPATH becomes empty # (actually we leave an empty line to preserve line numbers). if test "x$srcdir" = x.; then ac_vpsub='/^[ ]*VPATH[ ]*=[ ]*/{ h s/// s/^/:/ s/[ ]*$/:/ s/:\$(srcdir):/:/g s/:\${srcdir}:/:/g s/:@srcdir@:/:/g s/^:*// s/:*$// x s/\(=[ ]*\).*/\1/ G s/\n// s/^[^=]*=[ ]*$// }' fi cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 fi # test -n "$CONFIG_FILES" # Set up the scripts for CONFIG_HEADERS section. # No need to generate them if there are no CONFIG_HEADERS. # This happens for instance with `./config.status Makefile'. if test -n "$CONFIG_HEADERS"; then cat >"$ac_tmp/defines.awk" <<\_ACAWK || BEGIN { _ACEOF # Transform confdefs.h into an awk script `defines.awk', embedded as # here-document in config.status, that substitutes the proper values into # config.h.in to produce config.h. # Create a delimiter string that does not exist in confdefs.h, to ease # handling of long lines. ac_delim='%!_!# ' for ac_last_try in false false :; do ac_tt=`sed -n "/$ac_delim/p" confdefs.h` if test -z "$ac_tt"; then break elif $ac_last_try; then as_fn_error $? "could not make $CONFIG_HEADERS" "$LINENO" 5 else ac_delim="$ac_delim!$ac_delim _$ac_delim!! " fi done # For the awk script, D is an array of macro values keyed by name, # likewise P contains macro parameters if any. Preserve backslash # newline sequences. ac_word_re=[_$as_cr_Letters][_$as_cr_alnum]* sed -n ' s/.\{148\}/&'"$ac_delim"'/g t rset :rset s/^[ ]*#[ ]*define[ ][ ]*/ / t def d :def s/\\$// t bsnl s/["\\]/\\&/g s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\ D["\1"]=" \3"/p s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2"/p d :bsnl s/["\\]/\\&/g s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\ D["\1"]=" \3\\\\\\n"\\/p t cont s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2\\\\\\n"\\/p t cont d :cont n s/.\{148\}/&'"$ac_delim"'/g t clear :clear s/\\$// t bsnlc s/["\\]/\\&/g; s/^/"/; s/$/"/p d :bsnlc s/["\\]/\\&/g; s/^/"/; s/$/\\\\\\n"\\/p b cont ' >$CONFIG_STATUS || ac_write_fail=1 cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 for (key in D) D_is_set[key] = 1 FS = "" } /^[\t ]*#[\t ]*(define|undef)[\t ]+$ac_word_re([\t (]|\$)/ { line = \$ 0 split(line, arg, " ") if (arg[1] == "#") { defundef = arg[2] mac1 = arg[3] } else { defundef = substr(arg[1], 2) mac1 = arg[2] } split(mac1, mac2, "(") #) macro = mac2[1] prefix = substr(line, 1, index(line, defundef) - 1) if (D_is_set[macro]) { # Preserve the white space surrounding the "#". print prefix "define", macro P[macro] D[macro] next } else { # Replace #undef with comments. This is necessary, for example, # in the case of _POSIX_SOURCE, which is predefined and required # on some systems where configure will not decide to define it. if (defundef == "undef") { print "/*", prefix defundef, macro, "*/" next } } } { print } _ACAWK _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 as_fn_error $? "could not setup config headers machinery" "$LINENO" 5 fi # test -n "$CONFIG_HEADERS" eval set X " :F $CONFIG_FILES :H $CONFIG_HEADERS :C $CONFIG_COMMANDS" shift for ac_tag do case $ac_tag in :[FHLC]) ac_mode=$ac_tag; continue;; esac case $ac_mode$ac_tag in :[FHL]*:*);; :L* | :C*:*) as_fn_error $? "invalid tag \`$ac_tag'" "$LINENO" 5;; :[FH]-) ac_tag=-:-;; :[FH]*) ac_tag=$ac_tag:$ac_tag.in;; esac ac_save_IFS=$IFS IFS=: set x $ac_tag IFS=$ac_save_IFS shift ac_file=$1 shift case $ac_mode in :L) ac_source=$1;; :[FH]) ac_file_inputs= for ac_f do case $ac_f in -) ac_f="$ac_tmp/stdin";; *) # Look for the file first in the build tree, then in the source tree # (if the path is not absolute). The absolute path cannot be DOS-style, # because $ac_f cannot contain `:'. test -f "$ac_f" || case $ac_f in [\\/$]*) false;; *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";; esac || as_fn_error 1 "cannot find input file: \`$ac_f'" "$LINENO" 5;; esac case $ac_f in *\'*) ac_f=`printf "%s\n" "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac as_fn_append ac_file_inputs " '$ac_f'" done # Let's still pretend it is `configure' which instantiates (i.e., don't # use $as_me), people would be surprised to read: # /* config.h. Generated by config.status. */ configure_input='Generated from '` printf "%s\n" "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g' `' by configure.' if test x"$ac_file" != x-; then configure_input="$ac_file. $configure_input" { printf "%s\n" "$as_me:${as_lineno-$LINENO}: creating $ac_file" >&5 printf "%s\n" "$as_me: creating $ac_file" >&6;} fi # Neutralize special characters interpreted by sed in replacement strings. case $configure_input in #( *\&* | *\|* | *\\* ) ac_sed_conf_input=`printf "%s\n" "$configure_input" | sed 's/[\\\\&|]/\\\\&/g'`;; #( *) ac_sed_conf_input=$configure_input;; esac case $ac_tag in *:-:* | *:-) cat >"$ac_tmp/stdin" \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;; esac ;; esac ac_dir=`$as_dirname -- "$ac_file" || $as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$ac_file" : 'X\(//\)[^/]' \| \ X"$ac_file" : 'X\(//\)$' \| \ X"$ac_file" : 'X\(/\)' \| . 2>/dev/null || printf "%s\n" X"$ac_file" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` as_dir="$ac_dir"; as_fn_mkdir_p ac_builddir=. case "$ac_dir" in .) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_dir_suffix=/`printf "%s\n" "$ac_dir" | sed 's|^\.[\\/]||'` # A ".." for each directory in $ac_dir_suffix. ac_top_builddir_sub=`printf "%s\n" "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` case $ac_top_builddir_sub in "") ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; esac ;; esac ac_abs_top_builddir=$ac_pwd ac_abs_builddir=$ac_pwd$ac_dir_suffix # for backward compatibility: ac_top_builddir=$ac_top_build_prefix case $srcdir in .) # We are building in place. ac_srcdir=. ac_top_srcdir=$ac_top_builddir_sub ac_abs_top_srcdir=$ac_pwd ;; [\\/]* | ?:[\\/]* ) # Absolute name. ac_srcdir=$srcdir$ac_dir_suffix; ac_top_srcdir=$srcdir ac_abs_top_srcdir=$srcdir ;; *) # Relative name. ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix ac_top_srcdir=$ac_top_build_prefix$srcdir ac_abs_top_srcdir=$ac_pwd/$srcdir ;; esac ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix case $ac_mode in :F) # # CONFIG_FILE # case $INSTALL in [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;; *) ac_INSTALL=$ac_top_build_prefix$INSTALL ;; esac ac_MKDIR_P=$MKDIR_P case $MKDIR_P in [\\/$]* | ?:[\\/]* ) ;; */*) ac_MKDIR_P=$ac_top_build_prefix$MKDIR_P ;; esac _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # If the template does not know about datarootdir, expand it. # FIXME: This hack should be removed a few years after 2.60. ac_datarootdir_hack=; ac_datarootdir_seen= ac_sed_dataroot=' /datarootdir/ { p q } /@datadir@/p /@docdir@/p /@infodir@/p /@localedir@/p /@mandir@/p' case `eval "sed -n \"\$ac_sed_dataroot\" $ac_file_inputs"` in *datarootdir*) ac_datarootdir_seen=yes;; *@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5 printf "%s\n" "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;} _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_datarootdir_hack=' s&@datadir@&$datadir&g s&@docdir@&$docdir&g s&@infodir@&$infodir&g s&@localedir@&$localedir&g s&@mandir@&$mandir&g s&\\\${datarootdir}&$datarootdir&g' ;; esac _ACEOF # Neutralize VPATH when `$srcdir' = `.'. # Shell code in configure.ac might set extrasub. # FIXME: do we really want to maintain this feature? cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_sed_extra="$ac_vpsub $extrasub _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 :t /@[a-zA-Z_][a-zA-Z_0-9]*@/!b s|@configure_input@|$ac_sed_conf_input|;t t s&@top_builddir@&$ac_top_builddir_sub&;t t s&@top_build_prefix@&$ac_top_build_prefix&;t t s&@srcdir@&$ac_srcdir&;t t s&@abs_srcdir@&$ac_abs_srcdir&;t t s&@top_srcdir@&$ac_top_srcdir&;t t s&@abs_top_srcdir@&$ac_abs_top_srcdir&;t t s&@builddir@&$ac_builddir&;t t s&@abs_builddir@&$ac_abs_builddir&;t t s&@abs_top_builddir@&$ac_abs_top_builddir&;t t s&@INSTALL@&$ac_INSTALL&;t t s&@MKDIR_P@&$ac_MKDIR_P&;t t $ac_datarootdir_hack " eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$ac_tmp/subs.awk" \ >$ac_tmp/out || as_fn_error $? "could not create $ac_file" "$LINENO" 5 test -z "$ac_datarootdir_hack$ac_datarootdir_seen" && { ac_out=`sed -n '/\${datarootdir}/p' "$ac_tmp/out"`; test -n "$ac_out"; } && { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' \ "$ac_tmp/out"`; test -z "$ac_out"; } && { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir' which seems to be undefined. Please make sure it is defined" >&5 printf "%s\n" "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir' which seems to be undefined. Please make sure it is defined" >&2;} rm -f "$ac_tmp/stdin" case $ac_file in -) cat "$ac_tmp/out" && rm -f "$ac_tmp/out";; *) rm -f "$ac_file" && mv "$ac_tmp/out" "$ac_file";; esac \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;; :H) # # CONFIG_HEADER # if test x"$ac_file" != x-; then { printf "%s\n" "/* $configure_input */" >&1 \ && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" } >"$ac_tmp/config.h" \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 if diff "$ac_file" "$ac_tmp/config.h" >/dev/null 2>&1; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: $ac_file is unchanged" >&5 printf "%s\n" "$as_me: $ac_file is unchanged" >&6;} else rm -f "$ac_file" mv "$ac_tmp/config.h" "$ac_file" \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 fi else printf "%s\n" "/* $configure_input */" >&1 \ && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" \ || as_fn_error $? "could not create -" "$LINENO" 5 fi # Compute "$ac_file"'s index in $config_headers. _am_arg="$ac_file" _am_stamp_count=1 for _am_header in $config_headers :; do case $_am_header in $_am_arg | $_am_arg:* ) break ;; * ) _am_stamp_count=`expr $_am_stamp_count + 1` ;; esac done echo "timestamp for $_am_arg" >`$as_dirname -- "$_am_arg" || $as_expr X"$_am_arg" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$_am_arg" : 'X\(//\)[^/]' \| \ X"$_am_arg" : 'X\(//\)$' \| \ X"$_am_arg" : 'X\(/\)' \| . 2>/dev/null || printf "%s\n" X"$_am_arg" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'`/stamp-h$_am_stamp_count ;; :C) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: executing $ac_file commands" >&5 printf "%s\n" "$as_me: executing $ac_file commands" >&6;} ;; esac case $ac_file$ac_mode in "po-directories":C) for ac_file in $CONFIG_FILES; do # Support "outfile[:infile[:infile...]]" case "$ac_file" in *:*) ac_file=`echo "$ac_file"|sed 's%:.*%%'` ;; esac # PO directories have a Makefile.in generated from Makefile.in.in. case "$ac_file" in */Makefile.in) # Adjust a relative srcdir. ac_dir=`echo "$ac_file"|sed 's%/[^/][^/]*$%%'` ac_dir_suffix=/`echo "$ac_dir"|sed 's%^\./%%'` ac_dots=`echo "$ac_dir_suffix"|sed 's%/[^/]*%../%g'` # In autoconf-2.13 it is called $ac_given_srcdir. # In autoconf-2.50 it is called $srcdir. test -n "$ac_given_srcdir" || ac_given_srcdir="$srcdir" case "$ac_given_srcdir" in .) top_srcdir=`echo $ac_dots|sed 's%/$%%'` ;; /*) top_srcdir="$ac_given_srcdir" ;; *) top_srcdir="$ac_dots$ac_given_srcdir" ;; esac # Treat a directory as a PO directory if and only if it has a # POTFILES.in file. This allows packages to have multiple PO # directories under different names or in different locations. if test -f "$ac_given_srcdir/$ac_dir/POTFILES.in"; then rm -f "$ac_dir/POTFILES" test -n "$as_me" && echo "$as_me: creating $ac_dir/POTFILES" || echo "creating $ac_dir/POTFILES" gt_tab=`printf '\t'` cat "$ac_given_srcdir/$ac_dir/POTFILES.in" | sed -e "/^#/d" -e "/^[ ${gt_tab}]*\$/d" -e "s,.*, $top_srcdir/& \\\\," | sed -e "\$s/\(.*\) \\\\/\1/" > "$ac_dir/POTFILES" POMAKEFILEDEPS="POTFILES.in" # ALL_LINGUAS, POFILES, UPDATEPOFILES, DUMMYPOFILES, GMOFILES depend # on $ac_dir but don't depend on user-specified configuration # parameters. if test -f "$ac_given_srcdir/$ac_dir/LINGUAS"; then # The LINGUAS file contains the set of available languages. if test -n "$OBSOLETE_ALL_LINGUAS"; then test -n "$as_me" && echo "$as_me: setting ALL_LINGUAS in configure.in is obsolete" || echo "setting ALL_LINGUAS in configure.in is obsolete" fi ALL_LINGUAS=`sed -e "/^#/d" -e "s/#.*//" "$ac_given_srcdir/$ac_dir/LINGUAS"` POMAKEFILEDEPS="$POMAKEFILEDEPS LINGUAS" else # The set of available languages was given in configure.in. ALL_LINGUAS=$OBSOLETE_ALL_LINGUAS fi # Compute POFILES # as $(foreach lang, $(ALL_LINGUAS), $(srcdir)/$(lang).po) # Compute UPDATEPOFILES # as $(foreach lang, $(ALL_LINGUAS), $(lang).po-update) # Compute DUMMYPOFILES # as $(foreach lang, $(ALL_LINGUAS), $(lang).nop) # Compute GMOFILES # as $(foreach lang, $(ALL_LINGUAS), $(srcdir)/$(lang).gmo) case "$ac_given_srcdir" in .) srcdirpre= ;; *) srcdirpre='$(srcdir)/' ;; esac POFILES= UPDATEPOFILES= DUMMYPOFILES= GMOFILES= for lang in $ALL_LINGUAS; do POFILES="$POFILES $srcdirpre$lang.po" UPDATEPOFILES="$UPDATEPOFILES $lang.po-update" DUMMYPOFILES="$DUMMYPOFILES $lang.nop" GMOFILES="$GMOFILES $srcdirpre$lang.gmo" done # CATALOGS depends on both $ac_dir and the user's LINGUAS # environment variable. INST_LINGUAS= if test -n "$ALL_LINGUAS"; then for presentlang in $ALL_LINGUAS; do useit=no if test "%UNSET%" != "$LINGUAS"; then desiredlanguages="$LINGUAS" else desiredlanguages="$ALL_LINGUAS" fi for desiredlang in $desiredlanguages; do # Use the presentlang catalog if desiredlang is # a. equal to presentlang, or # b. a variant of presentlang (because in this case, # presentlang can be used as a fallback for messages # which are not translated in the desiredlang catalog). case "$desiredlang" in "$presentlang"*) useit=yes;; esac done if test $useit = yes; then INST_LINGUAS="$INST_LINGUAS $presentlang" fi done fi CATALOGS= if test -n "$INST_LINGUAS"; then for lang in $INST_LINGUAS; do CATALOGS="$CATALOGS $lang.gmo" done fi test -n "$as_me" && echo "$as_me: creating $ac_dir/Makefile" || echo "creating $ac_dir/Makefile" sed -e "/^POTFILES =/r $ac_dir/POTFILES" -e "/^# Makevars/r $ac_given_srcdir/$ac_dir/Makevars" -e "s|@POFILES@|$POFILES|g" -e "s|@UPDATEPOFILES@|$UPDATEPOFILES|g" -e "s|@DUMMYPOFILES@|$DUMMYPOFILES|g" -e "s|@GMOFILES@|$GMOFILES|g" -e "s|@CATALOGS@|$CATALOGS|g" -e "s|@POMAKEFILEDEPS@|$POMAKEFILEDEPS|g" "$ac_dir/Makefile.in" > "$ac_dir/Makefile" for f in "$ac_given_srcdir/$ac_dir"/Rules-*; do if test -f "$f"; then case "$f" in *.orig | *.bak | *~) ;; *) cat "$f" >> "$ac_dir/Makefile" ;; esac fi done fi ;; esac done ;; "depfiles":C) test x"$AMDEP_TRUE" != x"" || { # Older Autoconf quotes --file arguments for eval, but not when files # are listed without --file. Let's play safe and only enable the eval # if we detect the quoting. # TODO: see whether this extra hack can be removed once we start # requiring Autoconf 2.70 or later. case $CONFIG_FILES in #( *\'*) : eval set x "$CONFIG_FILES" ;; #( *) : set x $CONFIG_FILES ;; #( *) : ;; esac shift # Used to flag and report bootstrapping failures. am_rc=0 for am_mf do # Strip MF so we end up with the name of the file. am_mf=`printf "%s\n" "$am_mf" | sed -e 's/:.*$//'` # Check whether this is an Automake generated Makefile which includes # dependency-tracking related rules and includes. # Grep'ing the whole file directly is not great: AIX grep has a line # limit of 2048, but all sed's we know have understand at least 4000. sed -n 's,^am--depfiles:.*,X,p' "$am_mf" | grep X >/dev/null 2>&1 \ || continue am_dirpart=`$as_dirname -- "$am_mf" || $as_expr X"$am_mf" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$am_mf" : 'X\(//\)[^/]' \| \ X"$am_mf" : 'X\(//\)$' \| \ X"$am_mf" : 'X\(/\)' \| . 2>/dev/null || printf "%s\n" X"$am_mf" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` am_filepart=`$as_basename -- "$am_mf" || $as_expr X/"$am_mf" : '.*/\([^/][^/]*\)/*$' \| \ X"$am_mf" : 'X\(//\)$' \| \ X"$am_mf" : 'X\(/\)' \| . 2>/dev/null || printf "%s\n" X/"$am_mf" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/ q } /^X\/\(\/\/\)$/{ s//\1/ q } /^X\/\(\/\).*/{ s//\1/ q } s/.*/./; q'` { echo "$as_me:$LINENO: cd "$am_dirpart" \ && sed -e '/# am--include-marker/d' "$am_filepart" \ | $MAKE -f - am--depfiles" >&5 (cd "$am_dirpart" \ && sed -e '/# am--include-marker/d' "$am_filepart" \ | $MAKE -f - am--depfiles) >&5 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } || am_rc=$? done if test $am_rc -ne 0; then { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "Something went wrong bootstrapping makefile fragments for automatic dependency tracking. If GNU make was not used, consider re-running the configure script with MAKE=\"gmake\" (or whatever is necessary). You can also try re-running configure with the '--disable-dependency-tracking' option to at least be able to build the package (albeit without support for automatic dependency tracking). See \`config.log' for more details" "$LINENO" 5; } fi { am_dirpart=; unset am_dirpart;} { am_filepart=; unset am_filepart;} { am_mf=; unset am_mf;} { am_rc=; unset am_rc;} rm -f conftest-deps.mk } ;; "libtool":C) # See if we are running on zsh, and set the options that allow our # commands through without removal of \ escapes. if test -n "${ZSH_VERSION+set}"; then setopt NO_GLOB_SUBST fi cfgfile=${ofile}T trap "$RM \"$cfgfile\"; exit 1" 1 2 15 $RM "$cfgfile" cat <<_LT_EOF >> "$cfgfile" #! $SHELL # Generated automatically by $as_me ($PACKAGE) $VERSION # NOTE: Changes made to this file will be lost: look at ltmain.sh. # Provide generalized library-building support services. # Written by Gordon Matzigkeit, 1996 # Copyright (C) 2014 Free Software Foundation, Inc. # This is free software; see the source for copying conditions. There is NO # warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. # GNU Libtool is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of of the License, or # (at your option) any later version. # # As a special exception to the GNU General Public License, if you # distribute this file as part of a program or library that is built # using GNU Libtool, you may include this file under the same # distribution terms that you use for the rest of that program. # # GNU Libtool is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see . # The names of the tagged configurations supported by this script. available_tags='CXX ' # Configured defaults for sys_lib_dlsearch_path munging. : \${LT_SYS_LIBRARY_PATH="$configure_time_lt_sys_library_path"} # ### BEGIN LIBTOOL CONFIG # Which release of libtool.m4 was used? macro_version=$macro_version macro_revision=$macro_revision # Whether or not to build shared libraries. build_libtool_libs=$enable_shared # Whether or not to build static libraries. build_old_libs=$enable_static # What type of objects to build. pic_mode=$pic_mode # Whether or not to optimize for fast installation. fast_install=$enable_fast_install # Shared archive member basename,for filename based shared library versioning on AIX. shared_archive_member_spec=$shared_archive_member_spec # Shell to use when invoking shell scripts. SHELL=$lt_SHELL # An echo program that protects backslashes. ECHO=$lt_ECHO # The PATH separator for the build system. PATH_SEPARATOR=$lt_PATH_SEPARATOR # The host system. host_alias=$host_alias host=$host host_os=$host_os # The build system. build_alias=$build_alias build=$build build_os=$build_os # A sed program that does not truncate output. SED=$lt_SED # Sed that helps us avoid accidentally triggering echo(1) options like -n. Xsed="\$SED -e 1s/^X//" # A grep program that handles long lines. GREP=$lt_GREP # An ERE matcher. EGREP=$lt_EGREP # A literal string matcher. FGREP=$lt_FGREP # A BSD- or MS-compatible name lister. NM=$lt_NM # Whether we need soft or hard links. LN_S=$lt_LN_S # What is the maximum length of a command? max_cmd_len=$max_cmd_len # Object file suffix (normally "o"). objext=$ac_objext # Executable file suffix (normally ""). exeext=$exeext # whether the shell understands "unset". lt_unset=$lt_unset # turn spaces into newlines. SP2NL=$lt_lt_SP2NL # turn newlines into spaces. NL2SP=$lt_lt_NL2SP # convert \$build file names to \$host format. to_host_file_cmd=$lt_cv_to_host_file_cmd # convert \$build files to toolchain format. to_tool_file_cmd=$lt_cv_to_tool_file_cmd # A file(cmd) program that detects file types. FILECMD=$lt_FILECMD # An object symbol dumper. OBJDUMP=$lt_OBJDUMP # Method to check whether dependent libraries are shared objects. deplibs_check_method=$lt_deplibs_check_method # Command to use when deplibs_check_method = "file_magic". file_magic_cmd=$lt_file_magic_cmd # How to find potential files when deplibs_check_method = "file_magic". file_magic_glob=$lt_file_magic_glob # Find potential files using nocaseglob when deplibs_check_method = "file_magic". want_nocaseglob=$lt_want_nocaseglob # DLL creation program. DLLTOOL=$lt_DLLTOOL # Command to associate shared and link libraries. sharedlib_from_linklib_cmd=$lt_sharedlib_from_linklib_cmd # The archiver. AR=$lt_AR # Flags to create an archive (by configure). lt_ar_flags=$lt_ar_flags # Flags to create an archive. AR_FLAGS=\${ARFLAGS-"\$lt_ar_flags"} # How to feed a file listing to the archiver. archiver_list_spec=$lt_archiver_list_spec # A symbol stripping program. STRIP=$lt_STRIP # Commands used to install an old-style archive. RANLIB=$lt_RANLIB old_postinstall_cmds=$lt_old_postinstall_cmds old_postuninstall_cmds=$lt_old_postuninstall_cmds # Whether to use a lock for old archive extraction. lock_old_archive_extraction=$lock_old_archive_extraction # A C compiler. LTCC=$lt_CC # LTCC compiler flags. LTCFLAGS=$lt_CFLAGS # Take the output of nm and produce a listing of raw symbols and C names. global_symbol_pipe=$lt_lt_cv_sys_global_symbol_pipe # Transform the output of nm in a proper C declaration. global_symbol_to_cdecl=$lt_lt_cv_sys_global_symbol_to_cdecl # Transform the output of nm into a list of symbols to manually relocate. global_symbol_to_import=$lt_lt_cv_sys_global_symbol_to_import # Transform the output of nm in a C name address pair. global_symbol_to_c_name_address=$lt_lt_cv_sys_global_symbol_to_c_name_address # Transform the output of nm in a C name address pair when lib prefix is needed. global_symbol_to_c_name_address_lib_prefix=$lt_lt_cv_sys_global_symbol_to_c_name_address_lib_prefix # The name lister interface. nm_interface=$lt_lt_cv_nm_interface # Specify filename containing input files for \$NM. nm_file_list_spec=$lt_nm_file_list_spec # The root where to search for dependent libraries,and where our libraries should be installed. lt_sysroot=$lt_sysroot # Command to truncate a binary pipe. lt_truncate_bin=$lt_lt_cv_truncate_bin # The name of the directory that contains temporary libtool files. objdir=$objdir # Used to examine libraries when file_magic_cmd begins with "file". MAGIC_CMD=$MAGIC_CMD # Must we lock files when doing compilation? need_locks=$lt_need_locks # Manifest tool. MANIFEST_TOOL=$lt_MANIFEST_TOOL # Tool to manipulate archived DWARF debug symbol files on Mac OS X. DSYMUTIL=$lt_DSYMUTIL # Tool to change global to local symbols on Mac OS X. NMEDIT=$lt_NMEDIT # Tool to manipulate fat objects and archives on Mac OS X. LIPO=$lt_LIPO # ldd/readelf like tool for Mach-O binaries on Mac OS X. OTOOL=$lt_OTOOL # ldd/readelf like tool for 64 bit Mach-O binaries on Mac OS X 10.4. OTOOL64=$lt_OTOOL64 # Old archive suffix (normally "a"). libext=$libext # Shared library suffix (normally ".so"). shrext_cmds=$lt_shrext_cmds # The commands to extract the exported symbol list from a shared archive. extract_expsyms_cmds=$lt_extract_expsyms_cmds # Variables whose values should be saved in libtool wrapper scripts and # restored at link time. variables_saved_for_relink=$lt_variables_saved_for_relink # Do we need the "lib" prefix for modules? need_lib_prefix=$need_lib_prefix # Do we need a version for libraries? need_version=$need_version # Library versioning type. version_type=$version_type # Shared library runtime path variable. runpath_var=$runpath_var # Shared library path variable. shlibpath_var=$shlibpath_var # Is shlibpath searched before the hard-coded library search path? shlibpath_overrides_runpath=$shlibpath_overrides_runpath # Format of library name prefix. libname_spec=$lt_libname_spec # List of archive names. First name is the real one, the rest are links. # The last name is the one that the linker finds with -lNAME library_names_spec=$lt_library_names_spec # The coded name of the library, if different from the real name. soname_spec=$lt_soname_spec # Permission mode override for installation of shared libraries. install_override_mode=$lt_install_override_mode # Command to use after installation of a shared archive. postinstall_cmds=$lt_postinstall_cmds # Command to use after uninstallation of a shared archive. postuninstall_cmds=$lt_postuninstall_cmds # Commands used to finish a libtool library installation in a directory. finish_cmds=$lt_finish_cmds # As "finish_cmds", except a single script fragment to be evaled but # not shown. finish_eval=$lt_finish_eval # Whether we should hardcode library paths into libraries. hardcode_into_libs=$hardcode_into_libs # Compile-time system search path for libraries. sys_lib_search_path_spec=$lt_sys_lib_search_path_spec # Detected run-time system search path for libraries. sys_lib_dlsearch_path_spec=$lt_configure_time_dlsearch_path # Explicit LT_SYS_LIBRARY_PATH set during ./configure time. configure_time_lt_sys_library_path=$lt_configure_time_lt_sys_library_path # Whether dlopen is supported. dlopen_support=$enable_dlopen # Whether dlopen of programs is supported. dlopen_self=$enable_dlopen_self # Whether dlopen of statically linked programs is supported. dlopen_self_static=$enable_dlopen_self_static # Commands to strip libraries. old_striplib=$lt_old_striplib striplib=$lt_striplib # The linker used to build libraries. LD=$lt_LD # How to create reloadable object files. reload_flag=$lt_reload_flag reload_cmds=$lt_reload_cmds # Commands used to build an old-style archive. old_archive_cmds=$lt_old_archive_cmds # A language specific compiler. CC=$lt_compiler # Is the compiler the GNU compiler? with_gcc=$GCC # Compiler flag to turn off builtin functions. no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag # Additional compiler flags for building library objects. pic_flag=$lt_lt_prog_compiler_pic # How to pass a linker flag through the compiler. wl=$lt_lt_prog_compiler_wl # Compiler flag to prevent dynamic linking. link_static_flag=$lt_lt_prog_compiler_static # Does compiler simultaneously support -c and -o options? compiler_c_o=$lt_lt_cv_prog_compiler_c_o # Whether or not to add -lc for building shared libraries. build_libtool_need_lc=$archive_cmds_need_lc # Whether or not to disallow shared libs when runtime libs are static. allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes # Compiler flag to allow reflexive dlopens. export_dynamic_flag_spec=$lt_export_dynamic_flag_spec # Compiler flag to generate shared objects directly from archives. whole_archive_flag_spec=$lt_whole_archive_flag_spec # Whether the compiler copes with passing no objects directly. compiler_needs_object=$lt_compiler_needs_object # Create an old-style archive from a shared archive. old_archive_from_new_cmds=$lt_old_archive_from_new_cmds # Create a temporary old-style archive to link instead of a shared archive. old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds # Commands used to build a shared archive. archive_cmds=$lt_archive_cmds archive_expsym_cmds=$lt_archive_expsym_cmds # Commands used to build a loadable module if different from building # a shared archive. module_cmds=$lt_module_cmds module_expsym_cmds=$lt_module_expsym_cmds # Whether we are building with GNU ld or not. with_gnu_ld=$lt_with_gnu_ld # Flag that allows shared libraries with undefined symbols to be built. allow_undefined_flag=$lt_allow_undefined_flag # Flag that enforces no undefined symbols. no_undefined_flag=$lt_no_undefined_flag # Flag to hardcode \$libdir into a binary during linking. # This must work even if \$libdir does not exist hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec # Whether we need a single "-rpath" flag with a separated argument. hardcode_libdir_separator=$lt_hardcode_libdir_separator # Set to "yes" if using DIR/libNAME\$shared_ext during linking hardcodes # DIR into the resulting binary. hardcode_direct=$hardcode_direct # Set to "yes" if using DIR/libNAME\$shared_ext during linking hardcodes # DIR into the resulting binary and the resulting library dependency is # "absolute",i.e impossible to change by setting \$shlibpath_var if the # library is relocated. hardcode_direct_absolute=$hardcode_direct_absolute # Set to "yes" if using the -LDIR flag during linking hardcodes DIR # into the resulting binary. hardcode_minus_L=$hardcode_minus_L # Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR # into the resulting binary. hardcode_shlibpath_var=$hardcode_shlibpath_var # Set to "yes" if building a shared library automatically hardcodes DIR # into the library and all subsequent libraries and executables linked # against it. hardcode_automatic=$hardcode_automatic # Set to yes if linker adds runtime paths of dependent libraries # to runtime path list. inherit_rpath=$inherit_rpath # Whether libtool must link a program against all its dependency libraries. link_all_deplibs=$link_all_deplibs # Set to "yes" if exported symbols are required. always_export_symbols=$always_export_symbols # The commands to list exported symbols. export_symbols_cmds=$lt_export_symbols_cmds # Symbols that should not be listed in the preloaded symbols. exclude_expsyms=$lt_exclude_expsyms # Symbols that must always be exported. include_expsyms=$lt_include_expsyms # Commands necessary for linking programs (against libraries) with templates. prelink_cmds=$lt_prelink_cmds # Commands necessary for finishing linking programs. postlink_cmds=$lt_postlink_cmds # Specify filename containing input files. file_list_spec=$lt_file_list_spec # How to hardcode a shared library path into an executable. hardcode_action=$hardcode_action # The directories searched by this compiler when creating a shared library. compiler_lib_search_dirs=$lt_compiler_lib_search_dirs # Dependencies to place before and after the objects being linked to # create a shared library. predep_objects=$lt_predep_objects postdep_objects=$lt_postdep_objects predeps=$lt_predeps postdeps=$lt_postdeps # The library search path used internally by the compiler when linking # a shared library. compiler_lib_search_path=$lt_compiler_lib_search_path # ### END LIBTOOL CONFIG _LT_EOF cat <<'_LT_EOF' >> "$cfgfile" # ### BEGIN FUNCTIONS SHARED WITH CONFIGURE # func_munge_path_list VARIABLE PATH # ----------------------------------- # VARIABLE is name of variable containing _space_ separated list of # directories to be munged by the contents of PATH, which is string # having a format: # "DIR[:DIR]:" # string "DIR[ DIR]" will be prepended to VARIABLE # ":DIR[:DIR]" # string "DIR[ DIR]" will be appended to VARIABLE # "DIRP[:DIRP]::[DIRA:]DIRA" # string "DIRP[ DIRP]" will be prepended to VARIABLE and string # "DIRA[ DIRA]" will be appended to VARIABLE # "DIR[:DIR]" # VARIABLE will be replaced by "DIR[ DIR]" func_munge_path_list () { case x$2 in x) ;; *:) eval $1=\"`$ECHO $2 | $SED 's/:/ /g'` \$$1\" ;; x:*) eval $1=\"\$$1 `$ECHO $2 | $SED 's/:/ /g'`\" ;; *::*) eval $1=\"\$$1\ `$ECHO $2 | $SED -e 's/.*:://' -e 's/:/ /g'`\" eval $1=\"`$ECHO $2 | $SED -e 's/::.*//' -e 's/:/ /g'`\ \$$1\" ;; *) eval $1=\"`$ECHO $2 | $SED 's/:/ /g'`\" ;; esac } # Calculate cc_basename. Skip known compiler wrappers and cross-prefix. func_cc_basename () { for cc_temp in $*""; do case $cc_temp in compile | *[\\/]compile | ccache | *[\\/]ccache ) ;; distcc | *[\\/]distcc | purify | *[\\/]purify ) ;; \-*) ;; *) break;; esac done func_cc_basename_result=`$ECHO "$cc_temp" | $SED "s%.*/%%; s%^$host_alias-%%"` } # ### END FUNCTIONS SHARED WITH CONFIGURE _LT_EOF case $host_os in aix3*) cat <<\_LT_EOF >> "$cfgfile" # AIX sometimes has problems with the GCC collect2 program. For some # reason, if we set the COLLECT_NAMES environment variable, the problems # vanish in a puff of smoke. if test set != "${COLLECT_NAMES+set}"; then COLLECT_NAMES= export COLLECT_NAMES fi _LT_EOF ;; esac ltmain=$ac_aux_dir/ltmain.sh # We use sed instead of cat because bash on DJGPP gets confused if # if finds mixed CR/LF and LF-only lines. Since sed operates in # text mode, it properly converts lines to CR/LF. This bash problem # is reportedly fixed, but why not run on old versions too? $SED '$q' "$ltmain" >> "$cfgfile" \ || (rm -f "$cfgfile"; exit 1) mv -f "$cfgfile" "$ofile" || (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile") chmod +x "$ofile" cat <<_LT_EOF >> "$ofile" # ### BEGIN LIBTOOL TAG CONFIG: CXX # The linker used to build libraries. LD=$lt_LD_CXX # How to create reloadable object files. reload_flag=$lt_reload_flag_CXX reload_cmds=$lt_reload_cmds_CXX # Commands used to build an old-style archive. old_archive_cmds=$lt_old_archive_cmds_CXX # A language specific compiler. CC=$lt_compiler_CXX # Is the compiler the GNU compiler? with_gcc=$GCC_CXX # Compiler flag to turn off builtin functions. no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag_CXX # Additional compiler flags for building library objects. pic_flag=$lt_lt_prog_compiler_pic_CXX # How to pass a linker flag through the compiler. wl=$lt_lt_prog_compiler_wl_CXX # Compiler flag to prevent dynamic linking. link_static_flag=$lt_lt_prog_compiler_static_CXX # Does compiler simultaneously support -c and -o options? compiler_c_o=$lt_lt_cv_prog_compiler_c_o_CXX # Whether or not to add -lc for building shared libraries. build_libtool_need_lc=$archive_cmds_need_lc_CXX # Whether or not to disallow shared libs when runtime libs are static. allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes_CXX # Compiler flag to allow reflexive dlopens. export_dynamic_flag_spec=$lt_export_dynamic_flag_spec_CXX # Compiler flag to generate shared objects directly from archives. whole_archive_flag_spec=$lt_whole_archive_flag_spec_CXX # Whether the compiler copes with passing no objects directly. compiler_needs_object=$lt_compiler_needs_object_CXX # Create an old-style archive from a shared archive. old_archive_from_new_cmds=$lt_old_archive_from_new_cmds_CXX # Create a temporary old-style archive to link instead of a shared archive. old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds_CXX # Commands used to build a shared archive. archive_cmds=$lt_archive_cmds_CXX archive_expsym_cmds=$lt_archive_expsym_cmds_CXX # Commands used to build a loadable module if different from building # a shared archive. module_cmds=$lt_module_cmds_CXX module_expsym_cmds=$lt_module_expsym_cmds_CXX # Whether we are building with GNU ld or not. with_gnu_ld=$lt_with_gnu_ld_CXX # Flag that allows shared libraries with undefined symbols to be built. allow_undefined_flag=$lt_allow_undefined_flag_CXX # Flag that enforces no undefined symbols. no_undefined_flag=$lt_no_undefined_flag_CXX # Flag to hardcode \$libdir into a binary during linking. # This must work even if \$libdir does not exist hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec_CXX # Whether we need a single "-rpath" flag with a separated argument. hardcode_libdir_separator=$lt_hardcode_libdir_separator_CXX # Set to "yes" if using DIR/libNAME\$shared_ext during linking hardcodes # DIR into the resulting binary. hardcode_direct=$hardcode_direct_CXX # Set to "yes" if using DIR/libNAME\$shared_ext during linking hardcodes # DIR into the resulting binary and the resulting library dependency is # "absolute",i.e impossible to change by setting \$shlibpath_var if the # library is relocated. hardcode_direct_absolute=$hardcode_direct_absolute_CXX # Set to "yes" if using the -LDIR flag during linking hardcodes DIR # into the resulting binary. hardcode_minus_L=$hardcode_minus_L_CXX # Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR # into the resulting binary. hardcode_shlibpath_var=$hardcode_shlibpath_var_CXX # Set to "yes" if building a shared library automatically hardcodes DIR # into the library and all subsequent libraries and executables linked # against it. hardcode_automatic=$hardcode_automatic_CXX # Set to yes if linker adds runtime paths of dependent libraries # to runtime path list. inherit_rpath=$inherit_rpath_CXX # Whether libtool must link a program against all its dependency libraries. link_all_deplibs=$link_all_deplibs_CXX # Set to "yes" if exported symbols are required. always_export_symbols=$always_export_symbols_CXX # The commands to list exported symbols. export_symbols_cmds=$lt_export_symbols_cmds_CXX # Symbols that should not be listed in the preloaded symbols. exclude_expsyms=$lt_exclude_expsyms_CXX # Symbols that must always be exported. include_expsyms=$lt_include_expsyms_CXX # Commands necessary for linking programs (against libraries) with templates. prelink_cmds=$lt_prelink_cmds_CXX # Commands necessary for finishing linking programs. postlink_cmds=$lt_postlink_cmds_CXX # Specify filename containing input files. file_list_spec=$lt_file_list_spec_CXX # How to hardcode a shared library path into an executable. hardcode_action=$hardcode_action_CXX # The directories searched by this compiler when creating a shared library. compiler_lib_search_dirs=$lt_compiler_lib_search_dirs_CXX # Dependencies to place before and after the objects being linked to # create a shared library. predep_objects=$lt_predep_objects_CXX postdep_objects=$lt_postdep_objects_CXX predeps=$lt_predeps_CXX postdeps=$lt_postdeps_CXX # The library search path used internally by the compiler when linking # a shared library. compiler_lib_search_path=$lt_compiler_lib_search_path_CXX # ### END LIBTOOL TAG CONFIG: CXX _LT_EOF ;; "hack-libtool":C) sed 's,^pic_flag=,pic_flag=" -D__DYNAMIC__ ",' libtool > libtoolT \ && mv -f libtoolT libtool && chmod 755 libtool ;; esac done # for ac_tag as_fn_exit 0 _ACEOF ac_clean_files=$ac_clean_files_save test $ac_write_fail = 0 || as_fn_error $? "write failure creating $CONFIG_STATUS" "$LINENO" 5 # configure is writing to config.log, and then calls config.status. # config.status does its own redirection, appending to config.log. # Unfortunately, on DOS this fails, as config.log is still kept open # by configure, so config.status won't be able to write to it; its # output is simply discarded. So we exec the FD to /dev/null, # effectively closing config.log, so it can be properly (re)opened and # appended to by config.status. When coming back to configure, we # need to make the FD available again. if test "$no_create" != yes; then ac_cs_success=: ac_config_status_args= test "$silent" = yes && ac_config_status_args="$ac_config_status_args --quiet" exec 5>/dev/null $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false exec 5>>config.log # Use ||, not &&, to avoid exiting from the if with $? = 1, which # would make configure fail if this is the last instruction. $ac_cs_success || as_fn_exit 1 fi if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: $ac_unrecognized_opts" >&5 printf "%s\n" "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;} fi webdar-1.0.0/depcomp0000755000175000017520000005602014215102164011253 00000000000000#! /bin/sh # depcomp - compile a program generating dependencies as side-effects scriptversion=2018-03-07.03; # UTC # Copyright (C) 1999-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2, or (at your option) # any later version. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # You should have received a copy of the GNU General Public License # along with this program. If not, see . # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. # Originally written by Alexandre Oliva . case $1 in '') echo "$0: No command. Try '$0 --help' for more information." 1>&2 exit 1; ;; -h | --h*) cat <<\EOF Usage: depcomp [--help] [--version] PROGRAM [ARGS] Run PROGRAMS ARGS to compile a file, generating dependencies as side-effects. Environment variables: depmode Dependency tracking mode. source Source file read by 'PROGRAMS ARGS'. object Object file output by 'PROGRAMS ARGS'. DEPDIR directory where to store dependencies. depfile Dependency file to output. tmpdepfile Temporary file to use when outputting dependencies. libtool Whether libtool is used (yes/no). Report bugs to . EOF exit $? ;; -v | --v*) echo "depcomp $scriptversion" exit $? ;; esac # Get the directory component of the given path, and save it in the # global variables '$dir'. Note that this directory component will # be either empty or ending with a '/' character. This is deliberate. set_dir_from () { case $1 in */*) dir=`echo "$1" | sed -e 's|/[^/]*$|/|'`;; *) dir=;; esac } # Get the suffix-stripped basename of the given path, and save it the # global variable '$base'. set_base_from () { base=`echo "$1" | sed -e 's|^.*/||' -e 's/\.[^.]*$//'` } # If no dependency file was actually created by the compiler invocation, # we still have to create a dummy depfile, to avoid errors with the # Makefile "include basename.Plo" scheme. make_dummy_depfile () { echo "#dummy" > "$depfile" } # Factor out some common post-processing of the generated depfile. # Requires the auxiliary global variable '$tmpdepfile' to be set. aix_post_process_depfile () { # If the compiler actually managed to produce a dependency file, # post-process it. if test -f "$tmpdepfile"; then # Each line is of the form 'foo.o: dependency.h'. # Do two passes, one to just change these to # $object: dependency.h # and one to simply output # dependency.h: # which is needed to avoid the deleted-header problem. { sed -e "s,^.*\.[$lower]*:,$object:," < "$tmpdepfile" sed -e "s,^.*\.[$lower]*:[$tab ]*,," -e 's,$,:,' < "$tmpdepfile" } > "$depfile" rm -f "$tmpdepfile" else make_dummy_depfile fi } # A tabulation character. tab=' ' # A newline character. nl=' ' # Character ranges might be problematic outside the C locale. # These definitions help. upper=ABCDEFGHIJKLMNOPQRSTUVWXYZ lower=abcdefghijklmnopqrstuvwxyz digits=0123456789 alpha=${upper}${lower} if test -z "$depmode" || test -z "$source" || test -z "$object"; then echo "depcomp: Variables source, object and depmode must be set" 1>&2 exit 1 fi # Dependencies for sub/bar.o or sub/bar.obj go into sub/.deps/bar.Po. depfile=${depfile-`echo "$object" | sed 's|[^\\/]*$|'${DEPDIR-.deps}'/&|;s|\.\([^.]*\)$|.P\1|;s|Pobj$|Po|'`} tmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`} rm -f "$tmpdepfile" # Avoid interferences from the environment. gccflag= dashmflag= # Some modes work just like other modes, but use different flags. We # parameterize here, but still list the modes in the big case below, # to make depend.m4 easier to write. Note that we *cannot* use a case # here, because this file can only contain one case statement. if test "$depmode" = hp; then # HP compiler uses -M and no extra arg. gccflag=-M depmode=gcc fi if test "$depmode" = dashXmstdout; then # This is just like dashmstdout with a different argument. dashmflag=-xM depmode=dashmstdout fi cygpath_u="cygpath -u -f -" if test "$depmode" = msvcmsys; then # This is just like msvisualcpp but w/o cygpath translation. # Just convert the backslash-escaped backslashes to single forward # slashes to satisfy depend.m4 cygpath_u='sed s,\\\\,/,g' depmode=msvisualcpp fi if test "$depmode" = msvc7msys; then # This is just like msvc7 but w/o cygpath translation. # Just convert the backslash-escaped backslashes to single forward # slashes to satisfy depend.m4 cygpath_u='sed s,\\\\,/,g' depmode=msvc7 fi if test "$depmode" = xlc; then # IBM C/C++ Compilers xlc/xlC can output gcc-like dependency information. gccflag=-qmakedep=gcc,-MF depmode=gcc fi case "$depmode" in gcc3) ## gcc 3 implements dependency tracking that does exactly what ## we want. Yay! Note: for some reason libtool 1.4 doesn't like ## it if -MD -MP comes after the -MF stuff. Hmm. ## Unfortunately, FreeBSD c89 acceptance of flags depends upon ## the command line argument order; so add the flags where they ## appear in depend2.am. Note that the slowdown incurred here ## affects only configure: in makefiles, %FASTDEP% shortcuts this. for arg do case $arg in -c) set fnord "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" "$arg" ;; *) set fnord "$@" "$arg" ;; esac shift # fnord shift # $arg done "$@" stat=$? if test $stat -ne 0; then rm -f "$tmpdepfile" exit $stat fi mv "$tmpdepfile" "$depfile" ;; gcc) ## Note that this doesn't just cater to obsosete pre-3.x GCC compilers. ## but also to in-use compilers like IMB xlc/xlC and the HP C compiler. ## (see the conditional assignment to $gccflag above). ## There are various ways to get dependency output from gcc. Here's ## why we pick this rather obscure method: ## - Don't want to use -MD because we'd like the dependencies to end ## up in a subdir. Having to rename by hand is ugly. ## (We might end up doing this anyway to support other compilers.) ## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like ## -MM, not -M (despite what the docs say). Also, it might not be ## supported by the other compilers which use the 'gcc' depmode. ## - Using -M directly means running the compiler twice (even worse ## than renaming). if test -z "$gccflag"; then gccflag=-MD, fi "$@" -Wp,"$gccflag$tmpdepfile" stat=$? if test $stat -ne 0; then rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" echo "$object : \\" > "$depfile" # The second -e expression handles DOS-style file names with drive # letters. sed -e 's/^[^:]*: / /' \ -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile" ## This next piece of magic avoids the "deleted header file" problem. ## The problem is that when a header file which appears in a .P file ## is deleted, the dependency causes make to die (because there is ## typically no way to rebuild the header). We avoid this by adding ## dummy dependencies for each header file. Too bad gcc doesn't do ## this for us directly. ## Some versions of gcc put a space before the ':'. On the theory ## that the space means something, we add a space to the output as ## well. hp depmode also adds that space, but also prefixes the VPATH ## to the object. Take care to not repeat it in the output. ## Some versions of the HPUX 10.20 sed can't process this invocation ## correctly. Breaking it into two sed invocations is a workaround. tr ' ' "$nl" < "$tmpdepfile" \ | sed -e 's/^\\$//' -e '/^$/d' -e "s|.*$object$||" -e '/:$/d' \ | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" ;; hp) # This case exists only to let depend.m4 do its work. It works by # looking at the text of this script. This case will never be run, # since it is checked for above. exit 1 ;; sgi) if test "$libtool" = yes; then "$@" "-Wp,-MDupdate,$tmpdepfile" else "$@" -MDupdate "$tmpdepfile" fi stat=$? if test $stat -ne 0; then rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" if test -f "$tmpdepfile"; then # yes, the sourcefile depend on other files echo "$object : \\" > "$depfile" # Clip off the initial element (the dependent). Don't try to be # clever and replace this with sed code, as IRIX sed won't handle # lines with more than a fixed number of characters (4096 in # IRIX 6.2 sed, 8192 in IRIX 6.5). We also remove comment lines; # the IRIX cc adds comments like '#:fec' to the end of the # dependency line. tr ' ' "$nl" < "$tmpdepfile" \ | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' \ | tr "$nl" ' ' >> "$depfile" echo >> "$depfile" # The second pass generates a dummy entry for each header file. tr ' ' "$nl" < "$tmpdepfile" \ | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \ >> "$depfile" else make_dummy_depfile fi rm -f "$tmpdepfile" ;; xlc) # This case exists only to let depend.m4 do its work. It works by # looking at the text of this script. This case will never be run, # since it is checked for above. exit 1 ;; aix) # The C for AIX Compiler uses -M and outputs the dependencies # in a .u file. In older versions, this file always lives in the # current directory. Also, the AIX compiler puts '$object:' at the # start of each line; $object doesn't have directory information. # Version 6 uses the directory in both cases. set_dir_from "$object" set_base_from "$object" if test "$libtool" = yes; then tmpdepfile1=$dir$base.u tmpdepfile2=$base.u tmpdepfile3=$dir.libs/$base.u "$@" -Wc,-M else tmpdepfile1=$dir$base.u tmpdepfile2=$dir$base.u tmpdepfile3=$dir$base.u "$@" -M fi stat=$? if test $stat -ne 0; then rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" exit $stat fi for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" do test -f "$tmpdepfile" && break done aix_post_process_depfile ;; tcc) # tcc (Tiny C Compiler) understand '-MD -MF file' since version 0.9.26 # FIXME: That version still under development at the moment of writing. # Make that this statement remains true also for stable, released # versions. # It will wrap lines (doesn't matter whether long or short) with a # trailing '\', as in: # # foo.o : \ # foo.c \ # foo.h \ # # It will put a trailing '\' even on the last line, and will use leading # spaces rather than leading tabs (at least since its commit 0394caf7 # "Emit spaces for -MD"). "$@" -MD -MF "$tmpdepfile" stat=$? if test $stat -ne 0; then rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" # Each non-empty line is of the form 'foo.o : \' or ' dep.h \'. # We have to change lines of the first kind to '$object: \'. sed -e "s|.*:|$object :|" < "$tmpdepfile" > "$depfile" # And for each line of the second kind, we have to emit a 'dep.h:' # dummy dependency, to avoid the deleted-header problem. sed -n -e 's|^ *\(.*\) *\\$|\1:|p' < "$tmpdepfile" >> "$depfile" rm -f "$tmpdepfile" ;; ## The order of this option in the case statement is important, since the ## shell code in configure will try each of these formats in the order ## listed in this file. A plain '-MD' option would be understood by many ## compilers, so we must ensure this comes after the gcc and icc options. pgcc) # Portland's C compiler understands '-MD'. # Will always output deps to 'file.d' where file is the root name of the # source file under compilation, even if file resides in a subdirectory. # The object file name does not affect the name of the '.d' file. # pgcc 10.2 will output # foo.o: sub/foo.c sub/foo.h # and will wrap long lines using '\' : # foo.o: sub/foo.c ... \ # sub/foo.h ... \ # ... set_dir_from "$object" # Use the source, not the object, to determine the base name, since # that's sadly what pgcc will do too. set_base_from "$source" tmpdepfile=$base.d # For projects that build the same source file twice into different object # files, the pgcc approach of using the *source* file root name can cause # problems in parallel builds. Use a locking strategy to avoid stomping on # the same $tmpdepfile. lockdir=$base.d-lock trap " echo '$0: caught signal, cleaning up...' >&2 rmdir '$lockdir' exit 1 " 1 2 13 15 numtries=100 i=$numtries while test $i -gt 0; do # mkdir is a portable test-and-set. if mkdir "$lockdir" 2>/dev/null; then # This process acquired the lock. "$@" -MD stat=$? # Release the lock. rmdir "$lockdir" break else # If the lock is being held by a different process, wait # until the winning process is done or we timeout. while test -d "$lockdir" && test $i -gt 0; do sleep 1 i=`expr $i - 1` done fi i=`expr $i - 1` done trap - 1 2 13 15 if test $i -le 0; then echo "$0: failed to acquire lock after $numtries attempts" >&2 echo "$0: check lockdir '$lockdir'" >&2 exit 1 fi if test $stat -ne 0; then rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" # Each line is of the form `foo.o: dependent.h', # or `foo.o: dep1.h dep2.h \', or ` dep3.h dep4.h \'. # Do two passes, one to just change these to # `$object: dependent.h' and one to simply `dependent.h:'. sed "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile" # Some versions of the HPUX 10.20 sed can't process this invocation # correctly. Breaking it into two sed invocations is a workaround. sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" \ | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" ;; hp2) # The "hp" stanza above does not work with aCC (C++) and HP's ia64 # compilers, which have integrated preprocessors. The correct option # to use with these is +Maked; it writes dependencies to a file named # 'foo.d', which lands next to the object file, wherever that # happens to be. # Much of this is similar to the tru64 case; see comments there. set_dir_from "$object" set_base_from "$object" if test "$libtool" = yes; then tmpdepfile1=$dir$base.d tmpdepfile2=$dir.libs/$base.d "$@" -Wc,+Maked else tmpdepfile1=$dir$base.d tmpdepfile2=$dir$base.d "$@" +Maked fi stat=$? if test $stat -ne 0; then rm -f "$tmpdepfile1" "$tmpdepfile2" exit $stat fi for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" do test -f "$tmpdepfile" && break done if test -f "$tmpdepfile"; then sed -e "s,^.*\.[$lower]*:,$object:," "$tmpdepfile" > "$depfile" # Add 'dependent.h:' lines. sed -ne '2,${ s/^ *// s/ \\*$// s/$/:/ p }' "$tmpdepfile" >> "$depfile" else make_dummy_depfile fi rm -f "$tmpdepfile" "$tmpdepfile2" ;; tru64) # The Tru64 compiler uses -MD to generate dependencies as a side # effect. 'cc -MD -o foo.o ...' puts the dependencies into 'foo.o.d'. # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put # dependencies in 'foo.d' instead, so we check for that too. # Subdirectories are respected. set_dir_from "$object" set_base_from "$object" if test "$libtool" = yes; then # Libtool generates 2 separate objects for the 2 libraries. These # two compilations output dependencies in $dir.libs/$base.o.d and # in $dir$base.o.d. We have to check for both files, because # one of the two compilations can be disabled. We should prefer # $dir$base.o.d over $dir.libs/$base.o.d because the latter is # automatically cleaned when .libs/ is deleted, while ignoring # the former would cause a distcleancheck panic. tmpdepfile1=$dir$base.o.d # libtool 1.5 tmpdepfile2=$dir.libs/$base.o.d # Likewise. tmpdepfile3=$dir.libs/$base.d # Compaq CCC V6.2-504 "$@" -Wc,-MD else tmpdepfile1=$dir$base.d tmpdepfile2=$dir$base.d tmpdepfile3=$dir$base.d "$@" -MD fi stat=$? if test $stat -ne 0; then rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" exit $stat fi for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" do test -f "$tmpdepfile" && break done # Same post-processing that is required for AIX mode. aix_post_process_depfile ;; msvc7) if test "$libtool" = yes; then showIncludes=-Wc,-showIncludes else showIncludes=-showIncludes fi "$@" $showIncludes > "$tmpdepfile" stat=$? grep -v '^Note: including file: ' "$tmpdepfile" if test $stat -ne 0; then rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" echo "$object : \\" > "$depfile" # The first sed program below extracts the file names and escapes # backslashes for cygpath. The second sed program outputs the file # name when reading, but also accumulates all include files in the # hold buffer in order to output them again at the end. This only # works with sed implementations that can handle large buffers. sed < "$tmpdepfile" -n ' /^Note: including file: *\(.*\)/ { s//\1/ s/\\/\\\\/g p }' | $cygpath_u | sort -u | sed -n ' s/ /\\ /g s/\(.*\)/'"$tab"'\1 \\/p s/.\(.*\) \\/\1:/ H $ { s/.*/'"$tab"'/ G p }' >> "$depfile" echo >> "$depfile" # make sure the fragment doesn't end with a backslash rm -f "$tmpdepfile" ;; msvc7msys) # This case exists only to let depend.m4 do its work. It works by # looking at the text of this script. This case will never be run, # since it is checked for above. exit 1 ;; #nosideeffect) # This comment above is used by automake to tell side-effect # dependency tracking mechanisms from slower ones. dashmstdout) # Important note: in order to support this mode, a compiler *must* # always write the preprocessed file to stdout, regardless of -o. "$@" || exit $? # Remove the call to Libtool. if test "$libtool" = yes; then while test "X$1" != 'X--mode=compile'; do shift done shift fi # Remove '-o $object'. IFS=" " for arg do case $arg in -o) shift ;; $object) shift ;; *) set fnord "$@" "$arg" shift # fnord shift # $arg ;; esac done test -z "$dashmflag" && dashmflag=-M # Require at least two characters before searching for ':' # in the target name. This is to cope with DOS-style filenames: # a dependency such as 'c:/foo/bar' could be seen as target 'c' otherwise. "$@" $dashmflag | sed "s|^[$tab ]*[^:$tab ][^:][^:]*:[$tab ]*|$object: |" > "$tmpdepfile" rm -f "$depfile" cat < "$tmpdepfile" > "$depfile" # Some versions of the HPUX 10.20 sed can't process this sed invocation # correctly. Breaking it into two sed invocations is a workaround. tr ' ' "$nl" < "$tmpdepfile" \ | sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' \ | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" ;; dashXmstdout) # This case only exists to satisfy depend.m4. It is never actually # run, as this mode is specially recognized in the preamble. exit 1 ;; makedepend) "$@" || exit $? # Remove any Libtool call if test "$libtool" = yes; then while test "X$1" != 'X--mode=compile'; do shift done shift fi # X makedepend shift cleared=no eat=no for arg do case $cleared in no) set ""; shift cleared=yes ;; esac if test $eat = yes; then eat=no continue fi case "$arg" in -D*|-I*) set fnord "$@" "$arg"; shift ;; # Strip any option that makedepend may not understand. Remove # the object too, otherwise makedepend will parse it as a source file. -arch) eat=yes ;; -*|$object) ;; *) set fnord "$@" "$arg"; shift ;; esac done obj_suffix=`echo "$object" | sed 's/^.*\././'` touch "$tmpdepfile" ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@" rm -f "$depfile" # makedepend may prepend the VPATH from the source file name to the object. # No need to regex-escape $object, excess matching of '.' is harmless. sed "s|^.*\($object *:\)|\1|" "$tmpdepfile" > "$depfile" # Some versions of the HPUX 10.20 sed can't process the last invocation # correctly. Breaking it into two sed invocations is a workaround. sed '1,2d' "$tmpdepfile" \ | tr ' ' "$nl" \ | sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' \ | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" "$tmpdepfile".bak ;; cpp) # Important note: in order to support this mode, a compiler *must* # always write the preprocessed file to stdout. "$@" || exit $? # Remove the call to Libtool. if test "$libtool" = yes; then while test "X$1" != 'X--mode=compile'; do shift done shift fi # Remove '-o $object'. IFS=" " for arg do case $arg in -o) shift ;; $object) shift ;; *) set fnord "$@" "$arg" shift # fnord shift # $arg ;; esac done "$@" -E \ | sed -n -e '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \ -e '/^#line [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \ | sed '$ s: \\$::' > "$tmpdepfile" rm -f "$depfile" echo "$object : \\" > "$depfile" cat < "$tmpdepfile" >> "$depfile" sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile" rm -f "$tmpdepfile" ;; msvisualcpp) # Important note: in order to support this mode, a compiler *must* # always write the preprocessed file to stdout. "$@" || exit $? # Remove the call to Libtool. if test "$libtool" = yes; then while test "X$1" != 'X--mode=compile'; do shift done shift fi IFS=" " for arg do case "$arg" in -o) shift ;; $object) shift ;; "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI") set fnord "$@" shift shift ;; *) set fnord "$@" "$arg" shift shift ;; esac done "$@" -E 2>/dev/null | sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::\1:p' | $cygpath_u | sort -u > "$tmpdepfile" rm -f "$depfile" echo "$object : \\" > "$depfile" sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::'"$tab"'\1 \\:p' >> "$depfile" echo "$tab" >> "$depfile" sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::\1\::p' >> "$depfile" rm -f "$tmpdepfile" ;; msvcmsys) # This case exists only to let depend.m4 do its work. It works by # looking at the text of this script. This case will never be run, # since it is checked for above. exit 1 ;; none) exec "$@" ;; *) echo "Unknown depmode $depmode" 1>&2 exit 1 ;; esac exit 0 # Local Variables: # mode: shell-script # sh-indentation: 2 # eval: (add-hook 'before-save-hook 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-time-zone: "UTC0" # time-stamp-end: "; # UTC" # End: webdar-1.0.0/mkinstalldirs0000755000175000017520000000653515045134062012516 00000000000000#! /bin/sh # mkinstalldirs --- make directory hierarchy scriptversion=2004-02-15.20 # Original author: Noah Friedman # Created: 1993-05-16 # Public domain. # # This file is maintained in Automake, please report # bugs to or send patches to # . errstatus=0 dirmode="" usage="\ Usage: mkinstalldirs [-h] [--help] [--version] [-m MODE] DIR ... Create each directory DIR (with mode MODE, if specified), including all leading file name components. Report bugs to ." # process command line arguments while test $# -gt 0 ; do case $1 in -h | --help | --h*) # -h for help echo "$usage" exit 0 ;; -m) # -m PERM arg shift test $# -eq 0 && { echo "$usage" 1>&2; exit 1; } dirmode=$1 shift ;; --version) echo "$0 $scriptversion" exit 0 ;; --) # stop option processing shift break ;; -*) # unknown option echo "$usage" 1>&2 exit 1 ;; *) # first non-opt arg break ;; esac done for file do if test -d "$file"; then shift else break fi done case $# in 0) exit 0 ;; esac # Solaris 8's mkdir -p isn't thread-safe. If you mkdir -p a/b and # mkdir -p a/c at the same time, both will detect that a is missing, # one will create a, then the other will try to create a and die with # a "File exists" error. This is a problem when calling mkinstalldirs # from a parallel make. We use --version in the probe to restrict # ourselves to GNU mkdir, which is thread-safe. case $dirmode in '') if mkdir -p --version . >/dev/null 2>&1 && test ! -d ./--version; then echo "mkdir -p -- $*" exec mkdir -p -- "$@" else # On NextStep and OpenStep, the `mkdir' command does not # recognize any option. It will interpret all options as # directories to create, and then abort because `.' already # exists. test -d ./-p && rmdir ./-p test -d ./--version && rmdir ./--version fi ;; *) if mkdir -m "$dirmode" -p --version . >/dev/null 2>&1 && test ! -d ./--version; then echo "mkdir -m $dirmode -p -- $*" exec mkdir -m "$dirmode" -p -- "$@" else # Clean up after NextStep and OpenStep mkdir. for d in ./-m ./-p ./--version "./$dirmode"; do test -d $d && rmdir $d done fi ;; esac for file do set fnord `echo ":$file" | sed -ne 's/^:\//#/;s/^://;s/\// /g;s/^#/\//;p'` shift pathcomp= for d do pathcomp="$pathcomp$d" case $pathcomp in -*) pathcomp=./$pathcomp ;; esac if test ! -d "$pathcomp"; then echo "mkdir $pathcomp" mkdir "$pathcomp" || lasterr=$? if test ! -d "$pathcomp"; then errstatus=$lasterr else if test ! -z "$dirmode"; then echo "chmod $dirmode $pathcomp" lasterr="" chmod "$dirmode" "$pathcomp" || lasterr=$? if test ! -z "$lasterr"; then errstatus=$lasterr fi fi fi fi pathcomp="$pathcomp/" done done exit $errstatus # Local Variables: # mode: shell-script # sh-indentation: 2 # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-end: "$" # End: webdar-1.0.0/aclocal.m40000644000175000017520000136567615045134060011565 00000000000000# generated automatically by aclocal 1.16.5 -*- Autoconf -*- # Copyright (C) 1996-2021 Free Software Foundation, Inc. # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. m4_ifndef([AC_CONFIG_MACRO_DIRS], [m4_defun([_AM_CONFIG_MACRO_DIRS], [])m4_defun([AC_CONFIG_MACRO_DIRS], [_AM_CONFIG_MACRO_DIRS($@)])]) m4_ifndef([AC_AUTOCONF_VERSION], [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl m4_if(m4_defn([AC_AUTOCONF_VERSION]), [2.71],, [m4_warning([this file was generated for autoconf 2.71. You have another version of autoconf. It may work, but is not guaranteed to. If you have problems, you may need to regenerate the build system entirely. To do so, use the procedure documented by the package, typically 'autoreconf'.])]) # libtool.m4 - Configure libtool for the host system. -*-Autoconf-*- # # Copyright (C) 1996-2001, 2003-2019, 2021-2022 Free Software # Foundation, Inc. # Written by Gordon Matzigkeit, 1996 # # This file is free software; the Free Software Foundation gives # unlimited permission to copy and/or distribute it, with or without # modifications, as long as this notice is preserved. m4_define([_LT_COPYING], [dnl # Copyright (C) 2014 Free Software Foundation, Inc. # This is free software; see the source for copying conditions. There is NO # warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. # GNU Libtool is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of of the License, or # (at your option) any later version. # # As a special exception to the GNU General Public License, if you # distribute this file as part of a program or library that is built # using GNU Libtool, you may include this file under the same # distribution terms that you use for the rest of that program. # # GNU Libtool is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see . ]) # serial 59 LT_INIT # LT_PREREQ(VERSION) # ------------------ # Complain and exit if this libtool version is less that VERSION. m4_defun([LT_PREREQ], [m4_if(m4_version_compare(m4_defn([LT_PACKAGE_VERSION]), [$1]), -1, [m4_default([$3], [m4_fatal([Libtool version $1 or higher is required], 63)])], [$2])]) # _LT_CHECK_BUILDDIR # ------------------ # Complain if the absolute build directory name contains unusual characters m4_defun([_LT_CHECK_BUILDDIR], [case `pwd` in *\ * | *\ *) AC_MSG_WARN([Libtool does not cope well with whitespace in `pwd`]) ;; esac ]) # LT_INIT([OPTIONS]) # ------------------ AC_DEFUN([LT_INIT], [AC_PREREQ([2.62])dnl We use AC_PATH_PROGS_FEATURE_CHECK AC_REQUIRE([AC_CONFIG_AUX_DIR_DEFAULT])dnl AC_BEFORE([$0], [LT_LANG])dnl AC_BEFORE([$0], [LT_OUTPUT])dnl AC_BEFORE([$0], [LTDL_INIT])dnl m4_require([_LT_CHECK_BUILDDIR])dnl dnl Autoconf doesn't catch unexpanded LT_ macros by default: m4_pattern_forbid([^_?LT_[A-Z_]+$])dnl m4_pattern_allow([^(_LT_EOF|LT_DLGLOBAL|LT_DLLAZY_OR_NOW|LT_MULTI_MODULE)$])dnl dnl aclocal doesn't pull ltoptions.m4, ltsugar.m4, or ltversion.m4 dnl unless we require an AC_DEFUNed macro: AC_REQUIRE([LTOPTIONS_VERSION])dnl AC_REQUIRE([LTSUGAR_VERSION])dnl AC_REQUIRE([LTVERSION_VERSION])dnl AC_REQUIRE([LTOBSOLETE_VERSION])dnl m4_require([_LT_PROG_LTMAIN])dnl _LT_SHELL_INIT([SHELL=${CONFIG_SHELL-/bin/sh}]) dnl Parse OPTIONS _LT_SET_OPTIONS([$0], [$1]) # This can be used to rebuild libtool when needed LIBTOOL_DEPS=$ltmain # Always use our own libtool. LIBTOOL='$(SHELL) $(top_builddir)/libtool' AC_SUBST(LIBTOOL)dnl _LT_SETUP # Only expand once: m4_define([LT_INIT]) ])# LT_INIT # Old names: AU_ALIAS([AC_PROG_LIBTOOL], [LT_INIT]) AU_ALIAS([AM_PROG_LIBTOOL], [LT_INIT]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_PROG_LIBTOOL], []) dnl AC_DEFUN([AM_PROG_LIBTOOL], []) # _LT_PREPARE_CC_BASENAME # ----------------------- m4_defun([_LT_PREPARE_CC_BASENAME], [ # Calculate cc_basename. Skip known compiler wrappers and cross-prefix. func_cc_basename () { for cc_temp in @S|@*""; do case $cc_temp in compile | *[[\\/]]compile | ccache | *[[\\/]]ccache ) ;; distcc | *[[\\/]]distcc | purify | *[[\\/]]purify ) ;; \-*) ;; *) break;; esac done func_cc_basename_result=`$ECHO "$cc_temp" | $SED "s%.*/%%; s%^$host_alias-%%"` } ])# _LT_PREPARE_CC_BASENAME # _LT_CC_BASENAME(CC) # ------------------- # It would be clearer to call AC_REQUIREs from _LT_PREPARE_CC_BASENAME, # but that macro is also expanded into generated libtool script, which # arranges for $SED and $ECHO to be set by different means. m4_defun([_LT_CC_BASENAME], [m4_require([_LT_PREPARE_CC_BASENAME])dnl AC_REQUIRE([_LT_DECL_SED])dnl AC_REQUIRE([_LT_PROG_ECHO_BACKSLASH])dnl func_cc_basename $1 cc_basename=$func_cc_basename_result ]) # _LT_FILEUTILS_DEFAULTS # ---------------------- # It is okay to use these file commands and assume they have been set # sensibly after 'm4_require([_LT_FILEUTILS_DEFAULTS])'. m4_defun([_LT_FILEUTILS_DEFAULTS], [: ${CP="cp -f"} : ${MV="mv -f"} : ${RM="rm -f"} ])# _LT_FILEUTILS_DEFAULTS # _LT_SETUP # --------- m4_defun([_LT_SETUP], [AC_REQUIRE([AC_CANONICAL_HOST])dnl AC_REQUIRE([AC_CANONICAL_BUILD])dnl AC_REQUIRE([_LT_PREPARE_SED_QUOTE_VARS])dnl AC_REQUIRE([_LT_PROG_ECHO_BACKSLASH])dnl _LT_DECL([], [PATH_SEPARATOR], [1], [The PATH separator for the build system])dnl dnl _LT_DECL([], [host_alias], [0], [The host system])dnl _LT_DECL([], [host], [0])dnl _LT_DECL([], [host_os], [0])dnl dnl _LT_DECL([], [build_alias], [0], [The build system])dnl _LT_DECL([], [build], [0])dnl _LT_DECL([], [build_os], [0])dnl dnl AC_REQUIRE([AC_PROG_CC])dnl AC_REQUIRE([LT_PATH_LD])dnl AC_REQUIRE([LT_PATH_NM])dnl dnl AC_REQUIRE([AC_PROG_LN_S])dnl test -z "$LN_S" && LN_S="ln -s" _LT_DECL([], [LN_S], [1], [Whether we need soft or hard links])dnl dnl AC_REQUIRE([LT_CMD_MAX_LEN])dnl _LT_DECL([objext], [ac_objext], [0], [Object file suffix (normally "o")])dnl _LT_DECL([], [exeext], [0], [Executable file suffix (normally "")])dnl dnl m4_require([_LT_FILEUTILS_DEFAULTS])dnl m4_require([_LT_CHECK_SHELL_FEATURES])dnl m4_require([_LT_PATH_CONVERSION_FUNCTIONS])dnl m4_require([_LT_CMD_RELOAD])dnl m4_require([_LT_DECL_FILECMD])dnl m4_require([_LT_CHECK_MAGIC_METHOD])dnl m4_require([_LT_CHECK_SHAREDLIB_FROM_LINKLIB])dnl m4_require([_LT_CMD_OLD_ARCHIVE])dnl m4_require([_LT_CMD_GLOBAL_SYMBOLS])dnl m4_require([_LT_WITH_SYSROOT])dnl m4_require([_LT_CMD_TRUNCATE])dnl _LT_CONFIG_LIBTOOL_INIT([ # See if we are running on zsh, and set the options that allow our # commands through without removal of \ escapes INIT. if test -n "\${ZSH_VERSION+set}"; then setopt NO_GLOB_SUBST fi ]) if test -n "${ZSH_VERSION+set}"; then setopt NO_GLOB_SUBST fi _LT_CHECK_OBJDIR m4_require([_LT_TAG_COMPILER])dnl case $host_os in aix3*) # AIX sometimes has problems with the GCC collect2 program. For some # reason, if we set the COLLECT_NAMES environment variable, the problems # vanish in a puff of smoke. if test set != "${COLLECT_NAMES+set}"; then COLLECT_NAMES= export COLLECT_NAMES fi ;; esac # Global variables: ofile=libtool can_build_shared=yes # All known linkers require a '.a' archive for static linking (except MSVC and # ICC, which need '.lib'). libext=a with_gnu_ld=$lt_cv_prog_gnu_ld old_CC=$CC old_CFLAGS=$CFLAGS # Set sane defaults for various variables test -z "$CC" && CC=cc test -z "$LTCC" && LTCC=$CC test -z "$LTCFLAGS" && LTCFLAGS=$CFLAGS test -z "$LD" && LD=ld test -z "$ac_objext" && ac_objext=o _LT_CC_BASENAME([$compiler]) # Only perform the check for file, if the check method requires it test -z "$MAGIC_CMD" && MAGIC_CMD=file case $deplibs_check_method in file_magic*) if test "$file_magic_cmd" = '$MAGIC_CMD'; then _LT_PATH_MAGIC fi ;; esac # Use C for the default configuration in the libtool script LT_SUPPORTED_TAG([CC]) _LT_LANG_C_CONFIG _LT_LANG_DEFAULT_CONFIG _LT_CONFIG_COMMANDS ])# _LT_SETUP # _LT_PREPARE_SED_QUOTE_VARS # -------------------------- # Define a few sed substitution that help us do robust quoting. m4_defun([_LT_PREPARE_SED_QUOTE_VARS], [# Backslashify metacharacters that are still active within # double-quoted strings. sed_quote_subst='s/\([["`$\\]]\)/\\\1/g' # Same as above, but do not quote variable references. double_quote_subst='s/\([["`\\]]\)/\\\1/g' # Sed substitution to delay expansion of an escaped shell variable in a # double_quote_subst'ed string. delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g' # Sed substitution to delay expansion of an escaped single quote. delay_single_quote_subst='s/'\''/'\'\\\\\\\'\''/g' # Sed substitution to avoid accidental globbing in evaled expressions no_glob_subst='s/\*/\\\*/g' ]) # _LT_PROG_LTMAIN # --------------- # Note that this code is called both from 'configure', and 'config.status' # now that we use AC_CONFIG_COMMANDS to generate libtool. Notably, # 'config.status' has no value for ac_aux_dir unless we are using Automake, # so we pass a copy along to make sure it has a sensible value anyway. m4_defun([_LT_PROG_LTMAIN], [m4_ifdef([AC_REQUIRE_AUX_FILE], [AC_REQUIRE_AUX_FILE([ltmain.sh])])dnl _LT_CONFIG_LIBTOOL_INIT([ac_aux_dir='$ac_aux_dir']) ltmain=$ac_aux_dir/ltmain.sh ])# _LT_PROG_LTMAIN # So that we can recreate a full libtool script including additional # tags, we accumulate the chunks of code to send to AC_CONFIG_COMMANDS # in macros and then make a single call at the end using the 'libtool' # label. # _LT_CONFIG_LIBTOOL_INIT([INIT-COMMANDS]) # ---------------------------------------- # Register INIT-COMMANDS to be passed to AC_CONFIG_COMMANDS later. m4_define([_LT_CONFIG_LIBTOOL_INIT], [m4_ifval([$1], [m4_append([_LT_OUTPUT_LIBTOOL_INIT], [$1 ])])]) # Initialize. m4_define([_LT_OUTPUT_LIBTOOL_INIT]) # _LT_CONFIG_LIBTOOL([COMMANDS]) # ------------------------------ # Register COMMANDS to be passed to AC_CONFIG_COMMANDS later. m4_define([_LT_CONFIG_LIBTOOL], [m4_ifval([$1], [m4_append([_LT_OUTPUT_LIBTOOL_COMMANDS], [$1 ])])]) # Initialize. m4_define([_LT_OUTPUT_LIBTOOL_COMMANDS]) # _LT_CONFIG_SAVE_COMMANDS([COMMANDS], [INIT_COMMANDS]) # ----------------------------------------------------- m4_defun([_LT_CONFIG_SAVE_COMMANDS], [_LT_CONFIG_LIBTOOL([$1]) _LT_CONFIG_LIBTOOL_INIT([$2]) ]) # _LT_FORMAT_COMMENT([COMMENT]) # ----------------------------- # Add leading comment marks to the start of each line, and a trailing # full-stop to the whole comment if one is not present already. m4_define([_LT_FORMAT_COMMENT], [m4_ifval([$1], [ m4_bpatsubst([m4_bpatsubst([$1], [^ *], [# ])], [['`$\]], [\\\&])]m4_bmatch([$1], [[!?.]$], [], [.]) )]) # _LT_DECL([CONFIGNAME], VARNAME, VALUE, [DESCRIPTION], [IS-TAGGED?]) # ------------------------------------------------------------------- # CONFIGNAME is the name given to the value in the libtool script. # VARNAME is the (base) name used in the configure script. # VALUE may be 0, 1 or 2 for a computed quote escaped value based on # VARNAME. Any other value will be used directly. m4_define([_LT_DECL], [lt_if_append_uniq([lt_decl_varnames], [$2], [, ], [lt_dict_add_subkey([lt_decl_dict], [$2], [libtool_name], [m4_ifval([$1], [$1], [$2])]) lt_dict_add_subkey([lt_decl_dict], [$2], [value], [$3]) m4_ifval([$4], [lt_dict_add_subkey([lt_decl_dict], [$2], [description], [$4])]) lt_dict_add_subkey([lt_decl_dict], [$2], [tagged?], [m4_ifval([$5], [yes], [no])])]) ]) # _LT_TAGDECL([CONFIGNAME], VARNAME, VALUE, [DESCRIPTION]) # -------------------------------------------------------- m4_define([_LT_TAGDECL], [_LT_DECL([$1], [$2], [$3], [$4], [yes])]) # lt_decl_tag_varnames([SEPARATOR], [VARNAME1...]) # ------------------------------------------------ m4_define([lt_decl_tag_varnames], [_lt_decl_filter([tagged?], [yes], $@)]) # _lt_decl_filter(SUBKEY, VALUE, [SEPARATOR], [VARNAME1..]) # --------------------------------------------------------- m4_define([_lt_decl_filter], [m4_case([$#], [0], [m4_fatal([$0: too few arguments: $#])], [1], [m4_fatal([$0: too few arguments: $#: $1])], [2], [lt_dict_filter([lt_decl_dict], [$1], [$2], [], lt_decl_varnames)], [3], [lt_dict_filter([lt_decl_dict], [$1], [$2], [$3], lt_decl_varnames)], [lt_dict_filter([lt_decl_dict], $@)])[]dnl ]) # lt_decl_quote_varnames([SEPARATOR], [VARNAME1...]) # -------------------------------------------------- m4_define([lt_decl_quote_varnames], [_lt_decl_filter([value], [1], $@)]) # lt_decl_dquote_varnames([SEPARATOR], [VARNAME1...]) # --------------------------------------------------- m4_define([lt_decl_dquote_varnames], [_lt_decl_filter([value], [2], $@)]) # lt_decl_varnames_tagged([SEPARATOR], [VARNAME1...]) # --------------------------------------------------- m4_define([lt_decl_varnames_tagged], [m4_assert([$# <= 2])dnl _$0(m4_quote(m4_default([$1], [[, ]])), m4_ifval([$2], [[$2]], [m4_dquote(lt_decl_tag_varnames)]), m4_split(m4_normalize(m4_quote(_LT_TAGS)), [ ]))]) m4_define([_lt_decl_varnames_tagged], [m4_ifval([$3], [lt_combine([$1], [$2], [_], $3)])]) # lt_decl_all_varnames([SEPARATOR], [VARNAME1...]) # ------------------------------------------------ m4_define([lt_decl_all_varnames], [_$0(m4_quote(m4_default([$1], [[, ]])), m4_if([$2], [], m4_quote(lt_decl_varnames), m4_quote(m4_shift($@))))[]dnl ]) m4_define([_lt_decl_all_varnames], [lt_join($@, lt_decl_varnames_tagged([$1], lt_decl_tag_varnames([[, ]], m4_shift($@))))dnl ]) # _LT_CONFIG_STATUS_DECLARE([VARNAME]) # ------------------------------------ # Quote a variable value, and forward it to 'config.status' so that its # declaration there will have the same value as in 'configure'. VARNAME # must have a single quote delimited value for this to work. m4_define([_LT_CONFIG_STATUS_DECLARE], [$1='`$ECHO "$][$1" | $SED "$delay_single_quote_subst"`']) # _LT_CONFIG_STATUS_DECLARATIONS # ------------------------------ # We delimit libtool config variables with single quotes, so when # we write them to config.status, we have to be sure to quote all # embedded single quotes properly. In configure, this macro expands # each variable declared with _LT_DECL (and _LT_TAGDECL) into: # # ='`$ECHO "$" | $SED "$delay_single_quote_subst"`' m4_defun([_LT_CONFIG_STATUS_DECLARATIONS], [m4_foreach([_lt_var], m4_quote(lt_decl_all_varnames), [m4_n([_LT_CONFIG_STATUS_DECLARE(_lt_var)])])]) # _LT_LIBTOOL_TAGS # ---------------- # Output comment and list of tags supported by the script m4_defun([_LT_LIBTOOL_TAGS], [_LT_FORMAT_COMMENT([The names of the tagged configurations supported by this script])dnl available_tags='_LT_TAGS'dnl ]) # _LT_LIBTOOL_DECLARE(VARNAME, [TAG]) # ----------------------------------- # Extract the dictionary values for VARNAME (optionally with TAG) and # expand to a commented shell variable setting: # # # Some comment about what VAR is for. # visible_name=$lt_internal_name m4_define([_LT_LIBTOOL_DECLARE], [_LT_FORMAT_COMMENT(m4_quote(lt_dict_fetch([lt_decl_dict], [$1], [description])))[]dnl m4_pushdef([_libtool_name], m4_quote(lt_dict_fetch([lt_decl_dict], [$1], [libtool_name])))[]dnl m4_case(m4_quote(lt_dict_fetch([lt_decl_dict], [$1], [value])), [0], [_libtool_name=[$]$1], [1], [_libtool_name=$lt_[]$1], [2], [_libtool_name=$lt_[]$1], [_libtool_name=lt_dict_fetch([lt_decl_dict], [$1], [value])])[]dnl m4_ifval([$2], [_$2])[]m4_popdef([_libtool_name])[]dnl ]) # _LT_LIBTOOL_CONFIG_VARS # ----------------------- # Produce commented declarations of non-tagged libtool config variables # suitable for insertion in the LIBTOOL CONFIG section of the 'libtool' # script. Tagged libtool config variables (even for the LIBTOOL CONFIG # section) are produced by _LT_LIBTOOL_TAG_VARS. m4_defun([_LT_LIBTOOL_CONFIG_VARS], [m4_foreach([_lt_var], m4_quote(_lt_decl_filter([tagged?], [no], [], lt_decl_varnames)), [m4_n([_LT_LIBTOOL_DECLARE(_lt_var)])])]) # _LT_LIBTOOL_TAG_VARS(TAG) # ------------------------- m4_define([_LT_LIBTOOL_TAG_VARS], [m4_foreach([_lt_var], m4_quote(lt_decl_tag_varnames), [m4_n([_LT_LIBTOOL_DECLARE(_lt_var, [$1])])])]) # _LT_TAGVAR(VARNAME, [TAGNAME]) # ------------------------------ m4_define([_LT_TAGVAR], [m4_ifval([$2], [$1_$2], [$1])]) # _LT_CONFIG_COMMANDS # ------------------- # Send accumulated output to $CONFIG_STATUS. Thanks to the lists of # variables for single and double quote escaping we saved from calls # to _LT_DECL, we can put quote escaped variables declarations # into 'config.status', and then the shell code to quote escape them in # for loops in 'config.status'. Finally, any additional code accumulated # from calls to _LT_CONFIG_LIBTOOL_INIT is expanded. m4_defun([_LT_CONFIG_COMMANDS], [AC_PROVIDE_IFELSE([LT_OUTPUT], dnl If the libtool generation code has been placed in $CONFIG_LT, dnl instead of duplicating it all over again into config.status, dnl then we will have config.status run $CONFIG_LT later, so it dnl needs to know what name is stored there: [AC_CONFIG_COMMANDS([libtool], [$SHELL $CONFIG_LT || AS_EXIT(1)], [CONFIG_LT='$CONFIG_LT'])], dnl If the libtool generation code is destined for config.status, dnl expand the accumulated commands and init code now: [AC_CONFIG_COMMANDS([libtool], [_LT_OUTPUT_LIBTOOL_COMMANDS], [_LT_OUTPUT_LIBTOOL_COMMANDS_INIT])]) ])#_LT_CONFIG_COMMANDS # Initialize. m4_define([_LT_OUTPUT_LIBTOOL_COMMANDS_INIT], [ # The HP-UX ksh and POSIX shell print the target directory to stdout # if CDPATH is set. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH sed_quote_subst='$sed_quote_subst' double_quote_subst='$double_quote_subst' delay_variable_subst='$delay_variable_subst' _LT_CONFIG_STATUS_DECLARATIONS LTCC='$LTCC' LTCFLAGS='$LTCFLAGS' compiler='$compiler_DEFAULT' # A function that is used when there is no print builtin or printf. func_fallback_echo () { eval 'cat <<_LTECHO_EOF \$[]1 _LTECHO_EOF' } # Quote evaled strings. for var in lt_decl_all_varnames([[ \ ]], lt_decl_quote_varnames); do case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in *[[\\\\\\\`\\"\\\$]]*) eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED \\"\\\$sed_quote_subst\\"\\\`\\\\\\"" ## exclude from sc_prohibit_nested_quotes ;; *) eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" ;; esac done # Double-quote double-evaled strings. for var in lt_decl_all_varnames([[ \ ]], lt_decl_dquote_varnames); do case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in *[[\\\\\\\`\\"\\\$]]*) eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED -e \\"\\\$double_quote_subst\\" -e \\"\\\$sed_quote_subst\\" -e \\"\\\$delay_variable_subst\\"\\\`\\\\\\"" ## exclude from sc_prohibit_nested_quotes ;; *) eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" ;; esac done _LT_OUTPUT_LIBTOOL_INIT ]) # _LT_GENERATED_FILE_INIT(FILE, [COMMENT]) # ------------------------------------ # Generate a child script FILE with all initialization necessary to # reuse the environment learned by the parent script, and make the # file executable. If COMMENT is supplied, it is inserted after the # '#!' sequence but before initialization text begins. After this # macro, additional text can be appended to FILE to form the body of # the child script. The macro ends with non-zero status if the # file could not be fully written (such as if the disk is full). m4_ifdef([AS_INIT_GENERATED], [m4_defun([_LT_GENERATED_FILE_INIT],[AS_INIT_GENERATED($@)])], [m4_defun([_LT_GENERATED_FILE_INIT], [m4_require([AS_PREPARE])]dnl [m4_pushdef([AS_MESSAGE_LOG_FD])]dnl [lt_write_fail=0 cat >$1 <<_ASEOF || lt_write_fail=1 #! $SHELL # Generated by $as_me. $2 SHELL=\${CONFIG_SHELL-$SHELL} export SHELL _ASEOF cat >>$1 <<\_ASEOF || lt_write_fail=1 AS_SHELL_SANITIZE _AS_PREPARE exec AS_MESSAGE_FD>&1 _ASEOF test 0 = "$lt_write_fail" && chmod +x $1[]dnl m4_popdef([AS_MESSAGE_LOG_FD])])])# _LT_GENERATED_FILE_INIT # LT_OUTPUT # --------- # This macro allows early generation of the libtool script (before # AC_OUTPUT is called), incase it is used in configure for compilation # tests. AC_DEFUN([LT_OUTPUT], [: ${CONFIG_LT=./config.lt} AC_MSG_NOTICE([creating $CONFIG_LT]) _LT_GENERATED_FILE_INIT(["$CONFIG_LT"], [# Run this file to recreate a libtool stub with the current configuration.]) cat >>"$CONFIG_LT" <<\_LTEOF lt_cl_silent=false exec AS_MESSAGE_LOG_FD>>config.log { echo AS_BOX([Running $as_me.]) } >&AS_MESSAGE_LOG_FD lt_cl_help="\ '$as_me' creates a local libtool stub from the current configuration, for use in further configure time tests before the real libtool is generated. Usage: $[0] [[OPTIONS]] -h, --help print this help, then exit -V, --version print version number, then exit -q, --quiet do not print progress messages -d, --debug don't remove temporary files Report bugs to ." lt_cl_version="\ m4_ifset([AC_PACKAGE_NAME], [AC_PACKAGE_NAME ])config.lt[]dnl m4_ifset([AC_PACKAGE_VERSION], [ AC_PACKAGE_VERSION]) configured by $[0], generated by m4_PACKAGE_STRING. Copyright (C) 2011 Free Software Foundation, Inc. This config.lt script is free software; the Free Software Foundation gives unlimited permision to copy, distribute and modify it." while test 0 != $[#] do case $[1] in --version | --v* | -V ) echo "$lt_cl_version"; exit 0 ;; --help | --h* | -h ) echo "$lt_cl_help"; exit 0 ;; --debug | --d* | -d ) debug=: ;; --quiet | --q* | --silent | --s* | -q ) lt_cl_silent=: ;; -*) AC_MSG_ERROR([unrecognized option: $[1] Try '$[0] --help' for more information.]) ;; *) AC_MSG_ERROR([unrecognized argument: $[1] Try '$[0] --help' for more information.]) ;; esac shift done if $lt_cl_silent; then exec AS_MESSAGE_FD>/dev/null fi _LTEOF cat >>"$CONFIG_LT" <<_LTEOF _LT_OUTPUT_LIBTOOL_COMMANDS_INIT _LTEOF cat >>"$CONFIG_LT" <<\_LTEOF AC_MSG_NOTICE([creating $ofile]) _LT_OUTPUT_LIBTOOL_COMMANDS AS_EXIT(0) _LTEOF chmod +x "$CONFIG_LT" # configure is writing to config.log, but config.lt does its own redirection, # appending to config.log, which fails on DOS, as config.log is still kept # open by configure. Here we exec the FD to /dev/null, effectively closing # config.log, so it can be properly (re)opened and appended to by config.lt. lt_cl_success=: test yes = "$silent" && lt_config_lt_args="$lt_config_lt_args --quiet" exec AS_MESSAGE_LOG_FD>/dev/null $SHELL "$CONFIG_LT" $lt_config_lt_args || lt_cl_success=false exec AS_MESSAGE_LOG_FD>>config.log $lt_cl_success || AS_EXIT(1) ])# LT_OUTPUT # _LT_CONFIG(TAG) # --------------- # If TAG is the built-in tag, create an initial libtool script with a # default configuration from the untagged config vars. Otherwise add code # to config.status for appending the configuration named by TAG from the # matching tagged config vars. m4_defun([_LT_CONFIG], [m4_require([_LT_FILEUTILS_DEFAULTS])dnl _LT_CONFIG_SAVE_COMMANDS([ m4_define([_LT_TAG], m4_if([$1], [], [C], [$1]))dnl m4_if(_LT_TAG, [C], [ # See if we are running on zsh, and set the options that allow our # commands through without removal of \ escapes. if test -n "${ZSH_VERSION+set}"; then setopt NO_GLOB_SUBST fi cfgfile=${ofile}T trap "$RM \"$cfgfile\"; exit 1" 1 2 15 $RM "$cfgfile" cat <<_LT_EOF >> "$cfgfile" #! $SHELL # Generated automatically by $as_me ($PACKAGE) $VERSION # NOTE: Changes made to this file will be lost: look at ltmain.sh. # Provide generalized library-building support services. # Written by Gordon Matzigkeit, 1996 _LT_COPYING _LT_LIBTOOL_TAGS # Configured defaults for sys_lib_dlsearch_path munging. : \${LT_SYS_LIBRARY_PATH="$configure_time_lt_sys_library_path"} # ### BEGIN LIBTOOL CONFIG _LT_LIBTOOL_CONFIG_VARS _LT_LIBTOOL_TAG_VARS # ### END LIBTOOL CONFIG _LT_EOF cat <<'_LT_EOF' >> "$cfgfile" # ### BEGIN FUNCTIONS SHARED WITH CONFIGURE _LT_PREPARE_MUNGE_PATH_LIST _LT_PREPARE_CC_BASENAME # ### END FUNCTIONS SHARED WITH CONFIGURE _LT_EOF case $host_os in aix3*) cat <<\_LT_EOF >> "$cfgfile" # AIX sometimes has problems with the GCC collect2 program. For some # reason, if we set the COLLECT_NAMES environment variable, the problems # vanish in a puff of smoke. if test set != "${COLLECT_NAMES+set}"; then COLLECT_NAMES= export COLLECT_NAMES fi _LT_EOF ;; esac _LT_PROG_LTMAIN # We use sed instead of cat because bash on DJGPP gets confused if # if finds mixed CR/LF and LF-only lines. Since sed operates in # text mode, it properly converts lines to CR/LF. This bash problem # is reportedly fixed, but why not run on old versions too? $SED '$q' "$ltmain" >> "$cfgfile" \ || (rm -f "$cfgfile"; exit 1) mv -f "$cfgfile" "$ofile" || (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile") chmod +x "$ofile" ], [cat <<_LT_EOF >> "$ofile" dnl Unfortunately we have to use $1 here, since _LT_TAG is not expanded dnl in a comment (ie after a #). # ### BEGIN LIBTOOL TAG CONFIG: $1 _LT_LIBTOOL_TAG_VARS(_LT_TAG) # ### END LIBTOOL TAG CONFIG: $1 _LT_EOF ])dnl /m4_if ], [m4_if([$1], [], [ PACKAGE='$PACKAGE' VERSION='$VERSION' RM='$RM' ofile='$ofile'], []) ])dnl /_LT_CONFIG_SAVE_COMMANDS ])# _LT_CONFIG # LT_SUPPORTED_TAG(TAG) # --------------------- # Trace this macro to discover what tags are supported by the libtool # --tag option, using: # autoconf --trace 'LT_SUPPORTED_TAG:$1' AC_DEFUN([LT_SUPPORTED_TAG], []) # C support is built-in for now m4_define([_LT_LANG_C_enabled], []) m4_define([_LT_TAGS], []) # LT_LANG(LANG) # ------------- # Enable libtool support for the given language if not already enabled. AC_DEFUN([LT_LANG], [AC_BEFORE([$0], [LT_OUTPUT])dnl m4_case([$1], [C], [_LT_LANG(C)], [C++], [_LT_LANG(CXX)], [Go], [_LT_LANG(GO)], [Java], [_LT_LANG(GCJ)], [Fortran 77], [_LT_LANG(F77)], [Fortran], [_LT_LANG(FC)], [Windows Resource], [_LT_LANG(RC)], [m4_ifdef([_LT_LANG_]$1[_CONFIG], [_LT_LANG($1)], [m4_fatal([$0: unsupported language: "$1"])])])dnl ])# LT_LANG # _LT_LANG(LANGNAME) # ------------------ m4_defun([_LT_LANG], [m4_ifdef([_LT_LANG_]$1[_enabled], [], [LT_SUPPORTED_TAG([$1])dnl m4_append([_LT_TAGS], [$1 ])dnl m4_define([_LT_LANG_]$1[_enabled], [])dnl _LT_LANG_$1_CONFIG($1)])dnl ])# _LT_LANG m4_ifndef([AC_PROG_GO], [ # NOTE: This macro has been submitted for inclusion into # # GNU Autoconf as AC_PROG_GO. When it is available in # # a released version of Autoconf we should remove this # # macro and use it instead. # m4_defun([AC_PROG_GO], [AC_LANG_PUSH(Go)dnl AC_ARG_VAR([GOC], [Go compiler command])dnl AC_ARG_VAR([GOFLAGS], [Go compiler flags])dnl _AC_ARG_VAR_LDFLAGS()dnl AC_CHECK_TOOL(GOC, gccgo) if test -z "$GOC"; then if test -n "$ac_tool_prefix"; then AC_CHECK_PROG(GOC, [${ac_tool_prefix}gccgo], [${ac_tool_prefix}gccgo]) fi fi if test -z "$GOC"; then AC_CHECK_PROG(GOC, gccgo, gccgo, false) fi ])#m4_defun ])#m4_ifndef # _LT_LANG_DEFAULT_CONFIG # ----------------------- m4_defun([_LT_LANG_DEFAULT_CONFIG], [AC_PROVIDE_IFELSE([AC_PROG_CXX], [LT_LANG(CXX)], [m4_define([AC_PROG_CXX], defn([AC_PROG_CXX])[LT_LANG(CXX)])]) AC_PROVIDE_IFELSE([AC_PROG_F77], [LT_LANG(F77)], [m4_define([AC_PROG_F77], defn([AC_PROG_F77])[LT_LANG(F77)])]) AC_PROVIDE_IFELSE([AC_PROG_FC], [LT_LANG(FC)], [m4_define([AC_PROG_FC], defn([AC_PROG_FC])[LT_LANG(FC)])]) dnl The call to [A][M_PROG_GCJ] is quoted like that to stop aclocal dnl pulling things in needlessly. AC_PROVIDE_IFELSE([AC_PROG_GCJ], [LT_LANG(GCJ)], [AC_PROVIDE_IFELSE([A][M_PROG_GCJ], [LT_LANG(GCJ)], [AC_PROVIDE_IFELSE([LT_PROG_GCJ], [LT_LANG(GCJ)], [m4_ifdef([AC_PROG_GCJ], [m4_define([AC_PROG_GCJ], defn([AC_PROG_GCJ])[LT_LANG(GCJ)])]) m4_ifdef([A][M_PROG_GCJ], [m4_define([A][M_PROG_GCJ], defn([A][M_PROG_GCJ])[LT_LANG(GCJ)])]) m4_ifdef([LT_PROG_GCJ], [m4_define([LT_PROG_GCJ], defn([LT_PROG_GCJ])[LT_LANG(GCJ)])])])])]) AC_PROVIDE_IFELSE([AC_PROG_GO], [LT_LANG(GO)], [m4_define([AC_PROG_GO], defn([AC_PROG_GO])[LT_LANG(GO)])]) AC_PROVIDE_IFELSE([LT_PROG_RC], [LT_LANG(RC)], [m4_define([LT_PROG_RC], defn([LT_PROG_RC])[LT_LANG(RC)])]) ])# _LT_LANG_DEFAULT_CONFIG # Obsolete macros: AU_DEFUN([AC_LIBTOOL_CXX], [LT_LANG(C++)]) AU_DEFUN([AC_LIBTOOL_F77], [LT_LANG(Fortran 77)]) AU_DEFUN([AC_LIBTOOL_FC], [LT_LANG(Fortran)]) AU_DEFUN([AC_LIBTOOL_GCJ], [LT_LANG(Java)]) AU_DEFUN([AC_LIBTOOL_RC], [LT_LANG(Windows Resource)]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_LIBTOOL_CXX], []) dnl AC_DEFUN([AC_LIBTOOL_F77], []) dnl AC_DEFUN([AC_LIBTOOL_FC], []) dnl AC_DEFUN([AC_LIBTOOL_GCJ], []) dnl AC_DEFUN([AC_LIBTOOL_RC], []) # _LT_TAG_COMPILER # ---------------- m4_defun([_LT_TAG_COMPILER], [AC_REQUIRE([AC_PROG_CC])dnl _LT_DECL([LTCC], [CC], [1], [A C compiler])dnl _LT_DECL([LTCFLAGS], [CFLAGS], [1], [LTCC compiler flags])dnl _LT_TAGDECL([CC], [compiler], [1], [A language specific compiler])dnl _LT_TAGDECL([with_gcc], [GCC], [0], [Is the compiler the GNU compiler?])dnl # If no C compiler was specified, use CC. LTCC=${LTCC-"$CC"} # If no C compiler flags were specified, use CFLAGS. LTCFLAGS=${LTCFLAGS-"$CFLAGS"} # Allow CC to be a program name with arguments. compiler=$CC ])# _LT_TAG_COMPILER # _LT_COMPILER_BOILERPLATE # ------------------------ # Check for compiler boilerplate output or warnings with # the simple compiler test code. m4_defun([_LT_COMPILER_BOILERPLATE], [m4_require([_LT_DECL_SED])dnl ac_outfile=conftest.$ac_objext echo "$lt_simple_compile_test_code" >conftest.$ac_ext eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err _lt_compiler_boilerplate=`cat conftest.err` $RM conftest* ])# _LT_COMPILER_BOILERPLATE # _LT_LINKER_BOILERPLATE # ---------------------- # Check for linker boilerplate output or warnings with # the simple link test code. m4_defun([_LT_LINKER_BOILERPLATE], [m4_require([_LT_DECL_SED])dnl ac_outfile=conftest.$ac_objext echo "$lt_simple_link_test_code" >conftest.$ac_ext eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err _lt_linker_boilerplate=`cat conftest.err` $RM -r conftest* ])# _LT_LINKER_BOILERPLATE # _LT_REQUIRED_DARWIN_CHECKS # ------------------------- m4_defun_once([_LT_REQUIRED_DARWIN_CHECKS],[ case $host_os in rhapsody* | darwin*) AC_CHECK_TOOL([DSYMUTIL], [dsymutil], [:]) AC_CHECK_TOOL([NMEDIT], [nmedit], [:]) AC_CHECK_TOOL([LIPO], [lipo], [:]) AC_CHECK_TOOL([OTOOL], [otool], [:]) AC_CHECK_TOOL([OTOOL64], [otool64], [:]) _LT_DECL([], [DSYMUTIL], [1], [Tool to manipulate archived DWARF debug symbol files on Mac OS X]) _LT_DECL([], [NMEDIT], [1], [Tool to change global to local symbols on Mac OS X]) _LT_DECL([], [LIPO], [1], [Tool to manipulate fat objects and archives on Mac OS X]) _LT_DECL([], [OTOOL], [1], [ldd/readelf like tool for Mach-O binaries on Mac OS X]) _LT_DECL([], [OTOOL64], [1], [ldd/readelf like tool for 64 bit Mach-O binaries on Mac OS X 10.4]) AC_CACHE_CHECK([for -single_module linker flag],[lt_cv_apple_cc_single_mod], [lt_cv_apple_cc_single_mod=no if test -z "$LT_MULTI_MODULE"; then # By default we will add the -single_module flag. You can override # by either setting the environment variable LT_MULTI_MODULE # non-empty at configure time, or by adding -multi_module to the # link flags. rm -rf libconftest.dylib* echo "int foo(void){return 1;}" > conftest.c echo "$LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ -dynamiclib -Wl,-single_module conftest.c" >&AS_MESSAGE_LOG_FD $LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ -dynamiclib -Wl,-single_module conftest.c 2>conftest.err _lt_result=$? # If there is a non-empty error log, and "single_module" # appears in it, assume the flag caused a linker warning if test -s conftest.err && $GREP single_module conftest.err; then cat conftest.err >&AS_MESSAGE_LOG_FD # Otherwise, if the output was created with a 0 exit code from # the compiler, it worked. elif test -f libconftest.dylib && test 0 = "$_lt_result"; then lt_cv_apple_cc_single_mod=yes else cat conftest.err >&AS_MESSAGE_LOG_FD fi rm -rf libconftest.dylib* rm -f conftest.* fi]) AC_CACHE_CHECK([for -exported_symbols_list linker flag], [lt_cv_ld_exported_symbols_list], [lt_cv_ld_exported_symbols_list=no save_LDFLAGS=$LDFLAGS echo "_main" > conftest.sym LDFLAGS="$LDFLAGS -Wl,-exported_symbols_list,conftest.sym" AC_LINK_IFELSE([AC_LANG_PROGRAM([],[])], [lt_cv_ld_exported_symbols_list=yes], [lt_cv_ld_exported_symbols_list=no]) LDFLAGS=$save_LDFLAGS ]) AC_CACHE_CHECK([for -force_load linker flag],[lt_cv_ld_force_load], [lt_cv_ld_force_load=no cat > conftest.c << _LT_EOF int forced_loaded() { return 2;} _LT_EOF echo "$LTCC $LTCFLAGS -c -o conftest.o conftest.c" >&AS_MESSAGE_LOG_FD $LTCC $LTCFLAGS -c -o conftest.o conftest.c 2>&AS_MESSAGE_LOG_FD echo "$AR $AR_FLAGS libconftest.a conftest.o" >&AS_MESSAGE_LOG_FD $AR $AR_FLAGS libconftest.a conftest.o 2>&AS_MESSAGE_LOG_FD echo "$RANLIB libconftest.a" >&AS_MESSAGE_LOG_FD $RANLIB libconftest.a 2>&AS_MESSAGE_LOG_FD cat > conftest.c << _LT_EOF int main() { return 0;} _LT_EOF echo "$LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a" >&AS_MESSAGE_LOG_FD $LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a 2>conftest.err _lt_result=$? if test -s conftest.err && $GREP force_load conftest.err; then cat conftest.err >&AS_MESSAGE_LOG_FD elif test -f conftest && test 0 = "$_lt_result" && $GREP forced_load conftest >/dev/null 2>&1; then lt_cv_ld_force_load=yes else cat conftest.err >&AS_MESSAGE_LOG_FD fi rm -f conftest.err libconftest.a conftest conftest.c rm -rf conftest.dSYM ]) case $host_os in rhapsody* | darwin1.[[012]]) _lt_dar_allow_undefined='$wl-undefined ${wl}suppress' ;; darwin1.*) _lt_dar_allow_undefined='$wl-flat_namespace $wl-undefined ${wl}suppress' ;; darwin*) case $MACOSX_DEPLOYMENT_TARGET,$host in 10.[[012]],*|,*powerpc*-darwin[[5-8]]*) _lt_dar_allow_undefined='$wl-flat_namespace $wl-undefined ${wl}suppress' ;; *) _lt_dar_allow_undefined='$wl-undefined ${wl}dynamic_lookup' ;; esac ;; esac if test yes = "$lt_cv_apple_cc_single_mod"; then _lt_dar_single_mod='$single_module' fi if test yes = "$lt_cv_ld_exported_symbols_list"; then _lt_dar_export_syms=' $wl-exported_symbols_list,$output_objdir/$libname-symbols.expsym' else _lt_dar_export_syms='~$NMEDIT -s $output_objdir/$libname-symbols.expsym $lib' fi if test : != "$DSYMUTIL" && test no = "$lt_cv_ld_force_load"; then _lt_dsymutil='~$DSYMUTIL $lib || :' else _lt_dsymutil= fi ;; esac ]) # _LT_DARWIN_LINKER_FEATURES([TAG]) # --------------------------------- # Checks for linker and compiler features on darwin m4_defun([_LT_DARWIN_LINKER_FEATURES], [ m4_require([_LT_REQUIRED_DARWIN_CHECKS]) _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_automatic, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported if test yes = "$lt_cv_ld_force_load"; then _LT_TAGVAR(whole_archive_flag_spec, $1)='`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience $wl-force_load,$conv\"; done; func_echo_all \"$new_convenience\"`' m4_case([$1], [F77], [_LT_TAGVAR(compiler_needs_object, $1)=yes], [FC], [_LT_TAGVAR(compiler_needs_object, $1)=yes]) else _LT_TAGVAR(whole_archive_flag_spec, $1)='' fi _LT_TAGVAR(link_all_deplibs, $1)=yes _LT_TAGVAR(allow_undefined_flag, $1)=$_lt_dar_allow_undefined case $cc_basename in ifort*|nagfor*) _lt_dar_can_shared=yes ;; *) _lt_dar_can_shared=$GCC ;; esac if test yes = "$_lt_dar_can_shared"; then output_verbose_link_cmd=func_echo_all _LT_TAGVAR(archive_cmds, $1)="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod$_lt_dsymutil" _LT_TAGVAR(module_cmds, $1)="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags$_lt_dsymutil" _LT_TAGVAR(archive_expsym_cmds, $1)="$SED 's|^|_|' < \$export_symbols > \$output_objdir/\$libname-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod$_lt_dar_export_syms$_lt_dsymutil" _LT_TAGVAR(module_expsym_cmds, $1)="$SED -e 's|^|_|' < \$export_symbols > \$output_objdir/\$libname-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags$_lt_dar_export_syms$_lt_dsymutil" m4_if([$1], [CXX], [ if test yes != "$lt_cv_apple_cc_single_mod"; then _LT_TAGVAR(archive_cmds, $1)="\$CC -r -keep_private_externs -nostdlib -o \$lib-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$lib-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring$_lt_dsymutil" _LT_TAGVAR(archive_expsym_cmds, $1)="$SED 's|^|_|' < \$export_symbols > \$output_objdir/\$libname-symbols.expsym~\$CC -r -keep_private_externs -nostdlib -o \$lib-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$lib-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring$_lt_dar_export_syms$_lt_dsymutil" fi ],[]) else _LT_TAGVAR(ld_shlibs, $1)=no fi ]) # _LT_SYS_MODULE_PATH_AIX([TAGNAME]) # ---------------------------------- # Links a minimal program and checks the executable # for the system default hardcoded library path. In most cases, # this is /usr/lib:/lib, but when the MPI compilers are used # the location of the communication and MPI libs are included too. # If we don't find anything, use the default library path according # to the aix ld manual. # Store the results from the different compilers for each TAGNAME. # Allow to override them for all tags through lt_cv_aix_libpath. m4_defun([_LT_SYS_MODULE_PATH_AIX], [m4_require([_LT_DECL_SED])dnl if test set = "${lt_cv_aix_libpath+set}"; then aix_libpath=$lt_cv_aix_libpath else AC_CACHE_VAL([_LT_TAGVAR([lt_cv_aix_libpath_], [$1])], [AC_LINK_IFELSE([AC_LANG_PROGRAM],[ lt_aix_libpath_sed='[ /Import File Strings/,/^$/ { /^0/ { s/^0 *\([^ ]*\) *$/\1/ p } }]' _LT_TAGVAR([lt_cv_aix_libpath_], [$1])=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` # Check for a 64-bit object if we didn't find anything. if test -z "$_LT_TAGVAR([lt_cv_aix_libpath_], [$1])"; then _LT_TAGVAR([lt_cv_aix_libpath_], [$1])=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` fi],[]) if test -z "$_LT_TAGVAR([lt_cv_aix_libpath_], [$1])"; then _LT_TAGVAR([lt_cv_aix_libpath_], [$1])=/usr/lib:/lib fi ]) aix_libpath=$_LT_TAGVAR([lt_cv_aix_libpath_], [$1]) fi ])# _LT_SYS_MODULE_PATH_AIX # _LT_SHELL_INIT(ARG) # ------------------- m4_define([_LT_SHELL_INIT], [m4_divert_text([M4SH-INIT], [$1 ])])# _LT_SHELL_INIT # _LT_PROG_ECHO_BACKSLASH # ----------------------- # Find how we can fake an echo command that does not interpret backslash. # In particular, with Autoconf 2.60 or later we add some code to the start # of the generated configure script that will find a shell with a builtin # printf (that we can use as an echo command). m4_defun([_LT_PROG_ECHO_BACKSLASH], [ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO$ECHO AC_MSG_CHECKING([how to print strings]) # Test print first, because it will be a builtin if present. if test "X`( print -r -- -n ) 2>/dev/null`" = X-n && \ test "X`print -r -- $ECHO 2>/dev/null`" = "X$ECHO"; then ECHO='print -r --' elif test "X`printf %s $ECHO 2>/dev/null`" = "X$ECHO"; then ECHO='printf %s\n' else # Use this function as a fallback that always works. func_fallback_echo () { eval 'cat <<_LTECHO_EOF $[]1 _LTECHO_EOF' } ECHO='func_fallback_echo' fi # func_echo_all arg... # Invoke $ECHO with all args, space-separated. func_echo_all () { $ECHO "$*" } case $ECHO in printf*) AC_MSG_RESULT([printf]) ;; print*) AC_MSG_RESULT([print -r]) ;; *) AC_MSG_RESULT([cat]) ;; esac m4_ifdef([_AS_DETECT_SUGGESTED], [_AS_DETECT_SUGGESTED([ test -n "${ZSH_VERSION+set}${BASH_VERSION+set}" || ( ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO$ECHO PATH=/empty FPATH=/empty; export PATH FPATH test "X`printf %s $ECHO`" = "X$ECHO" \ || test "X`print -r -- $ECHO`" = "X$ECHO" )])]) _LT_DECL([], [SHELL], [1], [Shell to use when invoking shell scripts]) _LT_DECL([], [ECHO], [1], [An echo program that protects backslashes]) ])# _LT_PROG_ECHO_BACKSLASH # _LT_WITH_SYSROOT # ---------------- AC_DEFUN([_LT_WITH_SYSROOT], [m4_require([_LT_DECL_SED])dnl AC_MSG_CHECKING([for sysroot]) AC_ARG_WITH([sysroot], [AS_HELP_STRING([--with-sysroot@<:@=DIR@:>@], [Search for dependent libraries within DIR (or the compiler's sysroot if not specified).])], [], [with_sysroot=no]) dnl lt_sysroot will always be passed unquoted. We quote it here dnl in case the user passed a directory name. lt_sysroot= case $with_sysroot in #( yes) if test yes = "$GCC"; then lt_sysroot=`$CC --print-sysroot 2>/dev/null` fi ;; #( /*) lt_sysroot=`echo "$with_sysroot" | $SED -e "$sed_quote_subst"` ;; #( no|'') ;; #( *) AC_MSG_RESULT([$with_sysroot]) AC_MSG_ERROR([The sysroot must be an absolute path.]) ;; esac AC_MSG_RESULT([${lt_sysroot:-no}]) _LT_DECL([], [lt_sysroot], [0], [The root where to search for ]dnl [dependent libraries, and where our libraries should be installed.])]) # _LT_ENABLE_LOCK # --------------- m4_defun([_LT_ENABLE_LOCK], [AC_ARG_ENABLE([libtool-lock], [AS_HELP_STRING([--disable-libtool-lock], [avoid locking (might break parallel builds)])]) test no = "$enable_libtool_lock" || enable_libtool_lock=yes # Some flags need to be propagated to the compiler or linker for good # libtool support. case $host in ia64-*-hpux*) # Find out what ABI is being produced by ac_compile, and set mode # options accordingly. echo 'int i;' > conftest.$ac_ext if AC_TRY_EVAL(ac_compile); then case `$FILECMD conftest.$ac_objext` in *ELF-32*) HPUX_IA64_MODE=32 ;; *ELF-64*) HPUX_IA64_MODE=64 ;; esac fi rm -rf conftest* ;; *-*-irix6*) # Find out what ABI is being produced by ac_compile, and set linker # options accordingly. echo '[#]line '$LINENO' "configure"' > conftest.$ac_ext if AC_TRY_EVAL(ac_compile); then if test yes = "$lt_cv_prog_gnu_ld"; then case `$FILECMD conftest.$ac_objext` in *32-bit*) LD="${LD-ld} -melf32bsmip" ;; *N32*) LD="${LD-ld} -melf32bmipn32" ;; *64-bit*) LD="${LD-ld} -melf64bmip" ;; esac else case `$FILECMD conftest.$ac_objext` in *32-bit*) LD="${LD-ld} -32" ;; *N32*) LD="${LD-ld} -n32" ;; *64-bit*) LD="${LD-ld} -64" ;; esac fi fi rm -rf conftest* ;; mips64*-*linux*) # Find out what ABI is being produced by ac_compile, and set linker # options accordingly. echo '[#]line '$LINENO' "configure"' > conftest.$ac_ext if AC_TRY_EVAL(ac_compile); then emul=elf case `$FILECMD conftest.$ac_objext` in *32-bit*) emul="${emul}32" ;; *64-bit*) emul="${emul}64" ;; esac case `$FILECMD conftest.$ac_objext` in *MSB*) emul="${emul}btsmip" ;; *LSB*) emul="${emul}ltsmip" ;; esac case `$FILECMD conftest.$ac_objext` in *N32*) emul="${emul}n32" ;; esac LD="${LD-ld} -m $emul" fi rm -rf conftest* ;; x86_64-*kfreebsd*-gnu|x86_64-*linux*|powerpc*-*linux*| \ s390*-*linux*|s390*-*tpf*|sparc*-*linux*) # Find out what ABI is being produced by ac_compile, and set linker # options accordingly. Note that the listed cases only cover the # situations where additional linker options are needed (such as when # doing 32-bit compilation for a host where ld defaults to 64-bit, or # vice versa); the common cases where no linker options are needed do # not appear in the list. echo 'int i;' > conftest.$ac_ext if AC_TRY_EVAL(ac_compile); then case `$FILECMD conftest.o` in *32-bit*) case $host in x86_64-*kfreebsd*-gnu) LD="${LD-ld} -m elf_i386_fbsd" ;; x86_64-*linux*) case `$FILECMD conftest.o` in *x86-64*) LD="${LD-ld} -m elf32_x86_64" ;; *) LD="${LD-ld} -m elf_i386" ;; esac ;; powerpc64le-*linux*) LD="${LD-ld} -m elf32lppclinux" ;; powerpc64-*linux*) LD="${LD-ld} -m elf32ppclinux" ;; s390x-*linux*) LD="${LD-ld} -m elf_s390" ;; sparc64-*linux*) LD="${LD-ld} -m elf32_sparc" ;; esac ;; *64-bit*) case $host in x86_64-*kfreebsd*-gnu) LD="${LD-ld} -m elf_x86_64_fbsd" ;; x86_64-*linux*) LD="${LD-ld} -m elf_x86_64" ;; powerpcle-*linux*) LD="${LD-ld} -m elf64lppc" ;; powerpc-*linux*) LD="${LD-ld} -m elf64ppc" ;; s390*-*linux*|s390*-*tpf*) LD="${LD-ld} -m elf64_s390" ;; sparc*-*linux*) LD="${LD-ld} -m elf64_sparc" ;; esac ;; esac fi rm -rf conftest* ;; *-*-sco3.2v5*) # On SCO OpenServer 5, we need -belf to get full-featured binaries. SAVE_CFLAGS=$CFLAGS CFLAGS="$CFLAGS -belf" AC_CACHE_CHECK([whether the C compiler needs -belf], lt_cv_cc_needs_belf, [AC_LANG_PUSH(C) AC_LINK_IFELSE([AC_LANG_PROGRAM([[]],[[]])],[lt_cv_cc_needs_belf=yes],[lt_cv_cc_needs_belf=no]) AC_LANG_POP]) if test yes != "$lt_cv_cc_needs_belf"; then # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf CFLAGS=$SAVE_CFLAGS fi ;; *-*solaris*) # Find out what ABI is being produced by ac_compile, and set linker # options accordingly. echo 'int i;' > conftest.$ac_ext if AC_TRY_EVAL(ac_compile); then case `$FILECMD conftest.o` in *64-bit*) case $lt_cv_prog_gnu_ld in yes*) case $host in i?86-*-solaris*|x86_64-*-solaris*) LD="${LD-ld} -m elf_x86_64" ;; sparc*-*-solaris*) LD="${LD-ld} -m elf64_sparc" ;; esac # GNU ld 2.21 introduced _sol2 emulations. Use them if available. if ${LD-ld} -V | grep _sol2 >/dev/null 2>&1; then LD=${LD-ld}_sol2 fi ;; *) if ${LD-ld} -64 -r -o conftest2.o conftest.o >/dev/null 2>&1; then LD="${LD-ld} -64" fi ;; esac ;; esac fi rm -rf conftest* ;; esac need_locks=$enable_libtool_lock ])# _LT_ENABLE_LOCK # _LT_PROG_AR # ----------- m4_defun([_LT_PROG_AR], [AC_CHECK_TOOLS(AR, [ar], false) : ${AR=ar} _LT_DECL([], [AR], [1], [The archiver]) # Use ARFLAGS variable as AR's operation code to sync the variable naming with # Automake. If both AR_FLAGS and ARFLAGS are specified, AR_FLAGS should have # higher priority because thats what people were doing historically (setting # ARFLAGS for automake and AR_FLAGS for libtool). FIXME: Make the AR_FLAGS # variable obsoleted/removed. test ${AR_FLAGS+y} || AR_FLAGS=${ARFLAGS-cr} lt_ar_flags=$AR_FLAGS _LT_DECL([], [lt_ar_flags], [0], [Flags to create an archive (by configure)]) # Make AR_FLAGS overridable by 'make ARFLAGS='. Don't try to run-time override # by AR_FLAGS because that was never working and AR_FLAGS is about to die. _LT_DECL([], [AR_FLAGS], [\@S|@{ARFLAGS-"\@S|@lt_ar_flags"}], [Flags to create an archive]) AC_CACHE_CHECK([for archiver @FILE support], [lt_cv_ar_at_file], [lt_cv_ar_at_file=no AC_COMPILE_IFELSE([AC_LANG_PROGRAM], [echo conftest.$ac_objext > conftest.lst lt_ar_try='$AR $AR_FLAGS libconftest.a @conftest.lst >&AS_MESSAGE_LOG_FD' AC_TRY_EVAL([lt_ar_try]) if test 0 -eq "$ac_status"; then # Ensure the archiver fails upon bogus file names. rm -f conftest.$ac_objext libconftest.a AC_TRY_EVAL([lt_ar_try]) if test 0 -ne "$ac_status"; then lt_cv_ar_at_file=@ fi fi rm -f conftest.* libconftest.a ]) ]) if test no = "$lt_cv_ar_at_file"; then archiver_list_spec= else archiver_list_spec=$lt_cv_ar_at_file fi _LT_DECL([], [archiver_list_spec], [1], [How to feed a file listing to the archiver]) ])# _LT_PROG_AR # _LT_CMD_OLD_ARCHIVE # ------------------- m4_defun([_LT_CMD_OLD_ARCHIVE], [_LT_PROG_AR AC_CHECK_TOOL(STRIP, strip, :) test -z "$STRIP" && STRIP=: _LT_DECL([], [STRIP], [1], [A symbol stripping program]) AC_CHECK_TOOL(RANLIB, ranlib, :) test -z "$RANLIB" && RANLIB=: _LT_DECL([], [RANLIB], [1], [Commands used to install an old-style archive]) # Determine commands to create old-style static archives. old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs' old_postinstall_cmds='chmod 644 $oldlib' old_postuninstall_cmds= if test -n "$RANLIB"; then case $host_os in bitrig* | openbsd*) old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB -t \$tool_oldlib" ;; *) old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB \$tool_oldlib" ;; esac old_archive_cmds="$old_archive_cmds~\$RANLIB \$tool_oldlib" fi case $host_os in darwin*) lock_old_archive_extraction=yes ;; *) lock_old_archive_extraction=no ;; esac _LT_DECL([], [old_postinstall_cmds], [2]) _LT_DECL([], [old_postuninstall_cmds], [2]) _LT_TAGDECL([], [old_archive_cmds], [2], [Commands used to build an old-style archive]) _LT_DECL([], [lock_old_archive_extraction], [0], [Whether to use a lock for old archive extraction]) ])# _LT_CMD_OLD_ARCHIVE # _LT_COMPILER_OPTION(MESSAGE, VARIABLE-NAME, FLAGS, # [OUTPUT-FILE], [ACTION-SUCCESS], [ACTION-FAILURE]) # ---------------------------------------------------------------- # Check whether the given compiler option works AC_DEFUN([_LT_COMPILER_OPTION], [m4_require([_LT_FILEUTILS_DEFAULTS])dnl m4_require([_LT_DECL_SED])dnl AC_CACHE_CHECK([$1], [$2], [$2=no m4_if([$4], , [ac_outfile=conftest.$ac_objext], [ac_outfile=$4]) echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="$3" ## exclude from sc_useless_quotes_in_assignment # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. # The option is referenced via a variable to avoid confusing sed. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [[^ ]]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&AS_MESSAGE_LOG_FD) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&AS_MESSAGE_LOG_FD echo "$as_me:$LINENO: \$? = $ac_status" >&AS_MESSAGE_LOG_FD if (exit $ac_status) && test -s "$ac_outfile"; then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings other than the usual output. $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' >conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then $2=yes fi fi $RM conftest* ]) if test yes = "[$]$2"; then m4_if([$5], , :, [$5]) else m4_if([$6], , :, [$6]) fi ])# _LT_COMPILER_OPTION # Old name: AU_ALIAS([AC_LIBTOOL_COMPILER_OPTION], [_LT_COMPILER_OPTION]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_LIBTOOL_COMPILER_OPTION], []) # _LT_LINKER_OPTION(MESSAGE, VARIABLE-NAME, FLAGS, # [ACTION-SUCCESS], [ACTION-FAILURE]) # ---------------------------------------------------- # Check whether the given linker option works AC_DEFUN([_LT_LINKER_OPTION], [m4_require([_LT_FILEUTILS_DEFAULTS])dnl m4_require([_LT_DECL_SED])dnl AC_CACHE_CHECK([$1], [$2], [$2=no save_LDFLAGS=$LDFLAGS LDFLAGS="$LDFLAGS $3" echo "$lt_simple_link_test_code" > conftest.$ac_ext if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then # The linker can only warn and ignore the option if not recognized # So say no if there are warnings if test -s conftest.err; then # Append any errors to the config.log. cat conftest.err 1>&AS_MESSAGE_LOG_FD $ECHO "$_lt_linker_boilerplate" | $SED '/^$/d' > conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if diff conftest.exp conftest.er2 >/dev/null; then $2=yes fi else $2=yes fi fi $RM -r conftest* LDFLAGS=$save_LDFLAGS ]) if test yes = "[$]$2"; then m4_if([$4], , :, [$4]) else m4_if([$5], , :, [$5]) fi ])# _LT_LINKER_OPTION # Old name: AU_ALIAS([AC_LIBTOOL_LINKER_OPTION], [_LT_LINKER_OPTION]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_LIBTOOL_LINKER_OPTION], []) # LT_CMD_MAX_LEN #--------------- AC_DEFUN([LT_CMD_MAX_LEN], [AC_REQUIRE([AC_CANONICAL_HOST])dnl # find the maximum length of command line arguments AC_MSG_CHECKING([the maximum length of command line arguments]) AC_CACHE_VAL([lt_cv_sys_max_cmd_len], [dnl i=0 teststring=ABCD case $build_os in msdosdjgpp*) # On DJGPP, this test can blow up pretty badly due to problems in libc # (any single argument exceeding 2000 bytes causes a buffer overrun # during glob expansion). Even if it were fixed, the result of this # check would be larger than it should be. lt_cv_sys_max_cmd_len=12288; # 12K is about right ;; gnu*) # Under GNU Hurd, this test is not required because there is # no limit to the length of command line arguments. # Libtool will interpret -1 as no limit whatsoever lt_cv_sys_max_cmd_len=-1; ;; cygwin* | mingw* | cegcc*) # On Win9x/ME, this test blows up -- it succeeds, but takes # about 5 minutes as the teststring grows exponentially. # Worse, since 9x/ME are not pre-emptively multitasking, # you end up with a "frozen" computer, even though with patience # the test eventually succeeds (with a max line length of 256k). # Instead, let's just punt: use the minimum linelength reported by # all of the supported platforms: 8192 (on NT/2K/XP). lt_cv_sys_max_cmd_len=8192; ;; mint*) # On MiNT this can take a long time and run out of memory. lt_cv_sys_max_cmd_len=8192; ;; amigaos*) # On AmigaOS with pdksh, this test takes hours, literally. # So we just punt and use a minimum line length of 8192. lt_cv_sys_max_cmd_len=8192; ;; bitrig* | darwin* | dragonfly* | freebsd* | midnightbsd* | netbsd* | openbsd*) # This has been around since 386BSD, at least. Likely further. if test -x /sbin/sysctl; then lt_cv_sys_max_cmd_len=`/sbin/sysctl -n kern.argmax` elif test -x /usr/sbin/sysctl; then lt_cv_sys_max_cmd_len=`/usr/sbin/sysctl -n kern.argmax` else lt_cv_sys_max_cmd_len=65536 # usable default for all BSDs fi # And add a safety zone lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` ;; interix*) # We know the value 262144 and hardcode it with a safety zone (like BSD) lt_cv_sys_max_cmd_len=196608 ;; os2*) # The test takes a long time on OS/2. lt_cv_sys_max_cmd_len=8192 ;; osf*) # Dr. Hans Ekkehard Plesser reports seeing a kernel panic running configure # due to this test when exec_disable_arg_limit is 1 on Tru64. It is not # nice to cause kernel panics so lets avoid the loop below. # First set a reasonable default. lt_cv_sys_max_cmd_len=16384 # if test -x /sbin/sysconfig; then case `/sbin/sysconfig -q proc exec_disable_arg_limit` in *1*) lt_cv_sys_max_cmd_len=-1 ;; esac fi ;; sco3.2v5*) lt_cv_sys_max_cmd_len=102400 ;; sysv5* | sco5v6* | sysv4.2uw2*) kargmax=`grep ARG_MAX /etc/conf/cf.d/stune 2>/dev/null` if test -n "$kargmax"; then lt_cv_sys_max_cmd_len=`echo $kargmax | $SED 's/.*[[ ]]//'` else lt_cv_sys_max_cmd_len=32768 fi ;; *) lt_cv_sys_max_cmd_len=`(getconf ARG_MAX) 2> /dev/null` if test -n "$lt_cv_sys_max_cmd_len" && \ test undefined != "$lt_cv_sys_max_cmd_len"; then lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` else # Make teststring a little bigger before we do anything with it. # a 1K string should be a reasonable start. for i in 1 2 3 4 5 6 7 8; do teststring=$teststring$teststring done SHELL=${SHELL-${CONFIG_SHELL-/bin/sh}} # If test is not a shell built-in, we'll probably end up computing a # maximum length that is only half of the actual maximum length, but # we can't tell. while { test X`env echo "$teststring$teststring" 2>/dev/null` \ = "X$teststring$teststring"; } >/dev/null 2>&1 && test 17 != "$i" # 1/2 MB should be enough do i=`expr $i + 1` teststring=$teststring$teststring done # Only check the string length outside the loop. lt_cv_sys_max_cmd_len=`expr "X$teststring" : ".*" 2>&1` teststring= # Add a significant safety factor because C++ compilers can tack on # massive amounts of additional arguments before passing them to the # linker. It appears as though 1/2 is a usable value. lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 2` fi ;; esac ]) if test -n "$lt_cv_sys_max_cmd_len"; then AC_MSG_RESULT($lt_cv_sys_max_cmd_len) else AC_MSG_RESULT(none) fi max_cmd_len=$lt_cv_sys_max_cmd_len _LT_DECL([], [max_cmd_len], [0], [What is the maximum length of a command?]) ])# LT_CMD_MAX_LEN # Old name: AU_ALIAS([AC_LIBTOOL_SYS_MAX_CMD_LEN], [LT_CMD_MAX_LEN]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_LIBTOOL_SYS_MAX_CMD_LEN], []) # _LT_HEADER_DLFCN # ---------------- m4_defun([_LT_HEADER_DLFCN], [AC_CHECK_HEADERS([dlfcn.h], [], [], [AC_INCLUDES_DEFAULT])dnl ])# _LT_HEADER_DLFCN # _LT_TRY_DLOPEN_SELF (ACTION-IF-TRUE, ACTION-IF-TRUE-W-USCORE, # ACTION-IF-FALSE, ACTION-IF-CROSS-COMPILING) # ---------------------------------------------------------------- m4_defun([_LT_TRY_DLOPEN_SELF], [m4_require([_LT_HEADER_DLFCN])dnl if test yes = "$cross_compiling"; then : [$4] else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext <<_LT_EOF [#line $LINENO "configure" #include "confdefs.h" #if HAVE_DLFCN_H #include #endif #include #ifdef RTLD_GLOBAL # define LT_DLGLOBAL RTLD_GLOBAL #else # ifdef DL_GLOBAL # define LT_DLGLOBAL DL_GLOBAL # else # define LT_DLGLOBAL 0 # endif #endif /* We may have to define LT_DLLAZY_OR_NOW in the command line if we find out it does not work in some platform. */ #ifndef LT_DLLAZY_OR_NOW # ifdef RTLD_LAZY # define LT_DLLAZY_OR_NOW RTLD_LAZY # else # ifdef DL_LAZY # define LT_DLLAZY_OR_NOW DL_LAZY # else # ifdef RTLD_NOW # define LT_DLLAZY_OR_NOW RTLD_NOW # else # ifdef DL_NOW # define LT_DLLAZY_OR_NOW DL_NOW # else # define LT_DLLAZY_OR_NOW 0 # endif # endif # endif # endif #endif /* When -fvisibility=hidden is used, assume the code has been annotated correspondingly for the symbols needed. */ #if defined __GNUC__ && (((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3)) int fnord () __attribute__((visibility("default"))); #endif int fnord () { return 42; } int main () { void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); int status = $lt_dlunknown; if (self) { if (dlsym (self,"fnord")) status = $lt_dlno_uscore; else { if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; else puts (dlerror ()); } /* dlclose (self); */ } else puts (dlerror ()); return status; }] _LT_EOF if AC_TRY_EVAL(ac_link) && test -s "conftest$ac_exeext" 2>/dev/null; then (./conftest; exit; ) >&AS_MESSAGE_LOG_FD 2>/dev/null lt_status=$? case x$lt_status in x$lt_dlno_uscore) $1 ;; x$lt_dlneed_uscore) $2 ;; x$lt_dlunknown|x*) $3 ;; esac else : # compilation failed $3 fi fi rm -fr conftest* ])# _LT_TRY_DLOPEN_SELF # LT_SYS_DLOPEN_SELF # ------------------ AC_DEFUN([LT_SYS_DLOPEN_SELF], [m4_require([_LT_HEADER_DLFCN])dnl if test yes != "$enable_dlopen"; then enable_dlopen=unknown enable_dlopen_self=unknown enable_dlopen_self_static=unknown else lt_cv_dlopen=no lt_cv_dlopen_libs= case $host_os in beos*) lt_cv_dlopen=load_add_on lt_cv_dlopen_libs= lt_cv_dlopen_self=yes ;; mingw* | pw32* | cegcc*) lt_cv_dlopen=LoadLibrary lt_cv_dlopen_libs= ;; cygwin*) lt_cv_dlopen=dlopen lt_cv_dlopen_libs= ;; darwin*) # if libdl is installed we need to link against it AC_CHECK_LIB([dl], [dlopen], [lt_cv_dlopen=dlopen lt_cv_dlopen_libs=-ldl],[ lt_cv_dlopen=dyld lt_cv_dlopen_libs= lt_cv_dlopen_self=yes ]) ;; tpf*) # Don't try to run any link tests for TPF. We know it's impossible # because TPF is a cross-compiler, and we know how we open DSOs. lt_cv_dlopen=dlopen lt_cv_dlopen_libs= lt_cv_dlopen_self=no ;; *) AC_CHECK_FUNC([shl_load], [lt_cv_dlopen=shl_load], [AC_CHECK_LIB([dld], [shl_load], [lt_cv_dlopen=shl_load lt_cv_dlopen_libs=-ldld], [AC_CHECK_FUNC([dlopen], [lt_cv_dlopen=dlopen], [AC_CHECK_LIB([dl], [dlopen], [lt_cv_dlopen=dlopen lt_cv_dlopen_libs=-ldl], [AC_CHECK_LIB([svld], [dlopen], [lt_cv_dlopen=dlopen lt_cv_dlopen_libs=-lsvld], [AC_CHECK_LIB([dld], [dld_link], [lt_cv_dlopen=dld_link lt_cv_dlopen_libs=-ldld]) ]) ]) ]) ]) ]) ;; esac if test no = "$lt_cv_dlopen"; then enable_dlopen=no else enable_dlopen=yes fi case $lt_cv_dlopen in dlopen) save_CPPFLAGS=$CPPFLAGS test yes = "$ac_cv_header_dlfcn_h" && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H" save_LDFLAGS=$LDFLAGS wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\" save_LIBS=$LIBS LIBS="$lt_cv_dlopen_libs $LIBS" AC_CACHE_CHECK([whether a program can dlopen itself], lt_cv_dlopen_self, [dnl _LT_TRY_DLOPEN_SELF( lt_cv_dlopen_self=yes, lt_cv_dlopen_self=yes, lt_cv_dlopen_self=no, lt_cv_dlopen_self=cross) ]) if test yes = "$lt_cv_dlopen_self"; then wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $lt_prog_compiler_static\" AC_CACHE_CHECK([whether a statically linked program can dlopen itself], lt_cv_dlopen_self_static, [dnl _LT_TRY_DLOPEN_SELF( lt_cv_dlopen_self_static=yes, lt_cv_dlopen_self_static=yes, lt_cv_dlopen_self_static=no, lt_cv_dlopen_self_static=cross) ]) fi CPPFLAGS=$save_CPPFLAGS LDFLAGS=$save_LDFLAGS LIBS=$save_LIBS ;; esac case $lt_cv_dlopen_self in yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;; *) enable_dlopen_self=unknown ;; esac case $lt_cv_dlopen_self_static in yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;; *) enable_dlopen_self_static=unknown ;; esac fi _LT_DECL([dlopen_support], [enable_dlopen], [0], [Whether dlopen is supported]) _LT_DECL([dlopen_self], [enable_dlopen_self], [0], [Whether dlopen of programs is supported]) _LT_DECL([dlopen_self_static], [enable_dlopen_self_static], [0], [Whether dlopen of statically linked programs is supported]) ])# LT_SYS_DLOPEN_SELF # Old name: AU_ALIAS([AC_LIBTOOL_DLOPEN_SELF], [LT_SYS_DLOPEN_SELF]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_LIBTOOL_DLOPEN_SELF], []) # _LT_COMPILER_C_O([TAGNAME]) # --------------------------- # Check to see if options -c and -o are simultaneously supported by compiler. # This macro does not hard code the compiler like AC_PROG_CC_C_O. m4_defun([_LT_COMPILER_C_O], [m4_require([_LT_DECL_SED])dnl m4_require([_LT_FILEUTILS_DEFAULTS])dnl m4_require([_LT_TAG_COMPILER])dnl AC_CACHE_CHECK([if $compiler supports -c -o file.$ac_objext], [_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)], [_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=no $RM -r conftest 2>/dev/null mkdir conftest cd conftest mkdir out echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="-o out/conftest2.$ac_objext" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [[^ ]]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&AS_MESSAGE_LOG_FD) (eval "$lt_compile" 2>out/conftest.err) ac_status=$? cat out/conftest.err >&AS_MESSAGE_LOG_FD echo "$as_me:$LINENO: \$? = $ac_status" >&AS_MESSAGE_LOG_FD if (exit $ac_status) && test -s out/conftest2.$ac_objext then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then _LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=yes fi fi chmod u+w . 2>&AS_MESSAGE_LOG_FD $RM conftest* # SGI C++ compiler will create directory out/ii_files/ for # template instantiation test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files $RM out/* && rmdir out cd .. $RM -r conftest $RM conftest* ]) _LT_TAGDECL([compiler_c_o], [lt_cv_prog_compiler_c_o], [1], [Does compiler simultaneously support -c and -o options?]) ])# _LT_COMPILER_C_O # _LT_COMPILER_FILE_LOCKS([TAGNAME]) # ---------------------------------- # Check to see if we can do hard links to lock some files if needed m4_defun([_LT_COMPILER_FILE_LOCKS], [m4_require([_LT_ENABLE_LOCK])dnl m4_require([_LT_FILEUTILS_DEFAULTS])dnl _LT_COMPILER_C_O([$1]) hard_links=nottested if test no = "$_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)" && test no != "$need_locks"; then # do not overwrite the value of need_locks provided by the user AC_MSG_CHECKING([if we can lock with hard links]) hard_links=yes $RM conftest* ln conftest.a conftest.b 2>/dev/null && hard_links=no touch conftest.a ln conftest.a conftest.b 2>&5 || hard_links=no ln conftest.a conftest.b 2>/dev/null && hard_links=no AC_MSG_RESULT([$hard_links]) if test no = "$hard_links"; then AC_MSG_WARN(['$CC' does not support '-c -o', so 'make -j' may be unsafe]) need_locks=warn fi else need_locks=no fi _LT_DECL([], [need_locks], [1], [Must we lock files when doing compilation?]) ])# _LT_COMPILER_FILE_LOCKS # _LT_CHECK_OBJDIR # ---------------- m4_defun([_LT_CHECK_OBJDIR], [AC_CACHE_CHECK([for objdir], [lt_cv_objdir], [rm -f .libs 2>/dev/null mkdir .libs 2>/dev/null if test -d .libs; then lt_cv_objdir=.libs else # MS-DOS does not allow filenames that begin with a dot. lt_cv_objdir=_libs fi rmdir .libs 2>/dev/null]) objdir=$lt_cv_objdir _LT_DECL([], [objdir], [0], [The name of the directory that contains temporary libtool files])dnl m4_pattern_allow([LT_OBJDIR])dnl AC_DEFINE_UNQUOTED([LT_OBJDIR], "$lt_cv_objdir/", [Define to the sub-directory where libtool stores uninstalled libraries.]) ])# _LT_CHECK_OBJDIR # _LT_LINKER_HARDCODE_LIBPATH([TAGNAME]) # -------------------------------------- # Check hardcoding attributes. m4_defun([_LT_LINKER_HARDCODE_LIBPATH], [AC_MSG_CHECKING([how to hardcode library paths into programs]) _LT_TAGVAR(hardcode_action, $1)= if test -n "$_LT_TAGVAR(hardcode_libdir_flag_spec, $1)" || test -n "$_LT_TAGVAR(runpath_var, $1)" || test yes = "$_LT_TAGVAR(hardcode_automatic, $1)"; then # We can hardcode non-existent directories. if test no != "$_LT_TAGVAR(hardcode_direct, $1)" && # If the only mechanism to avoid hardcoding is shlibpath_var, we # have to relink, otherwise we might link with an installed library # when we should be linking with a yet-to-be-installed one ## test no != "$_LT_TAGVAR(hardcode_shlibpath_var, $1)" && test no != "$_LT_TAGVAR(hardcode_minus_L, $1)"; then # Linking always hardcodes the temporary library directory. _LT_TAGVAR(hardcode_action, $1)=relink else # We can link without hardcoding, and we can hardcode nonexisting dirs. _LT_TAGVAR(hardcode_action, $1)=immediate fi else # We cannot hardcode anything, or else we can only hardcode existing # directories. _LT_TAGVAR(hardcode_action, $1)=unsupported fi AC_MSG_RESULT([$_LT_TAGVAR(hardcode_action, $1)]) if test relink = "$_LT_TAGVAR(hardcode_action, $1)" || test yes = "$_LT_TAGVAR(inherit_rpath, $1)"; then # Fast installation is not supported enable_fast_install=no elif test yes = "$shlibpath_overrides_runpath" || test no = "$enable_shared"; then # Fast installation is not necessary enable_fast_install=needless fi _LT_TAGDECL([], [hardcode_action], [0], [How to hardcode a shared library path into an executable]) ])# _LT_LINKER_HARDCODE_LIBPATH # _LT_CMD_STRIPLIB # ---------------- m4_defun([_LT_CMD_STRIPLIB], [m4_require([_LT_DECL_EGREP]) striplib= old_striplib= AC_MSG_CHECKING([whether stripping libraries is possible]) if test -z "$STRIP"; then AC_MSG_RESULT([no]) else if $STRIP -V 2>&1 | $GREP "GNU strip" >/dev/null; then old_striplib="$STRIP --strip-debug" striplib="$STRIP --strip-unneeded" AC_MSG_RESULT([yes]) else case $host_os in darwin*) # FIXME - insert some real tests, host_os isn't really good enough striplib="$STRIP -x" old_striplib="$STRIP -S" AC_MSG_RESULT([yes]) ;; freebsd*) if $STRIP -V 2>&1 | $GREP "elftoolchain" >/dev/null; then old_striplib="$STRIP --strip-debug" striplib="$STRIP --strip-unneeded" AC_MSG_RESULT([yes]) else AC_MSG_RESULT([no]) fi ;; *) AC_MSG_RESULT([no]) ;; esac fi fi _LT_DECL([], [old_striplib], [1], [Commands to strip libraries]) _LT_DECL([], [striplib], [1]) ])# _LT_CMD_STRIPLIB # _LT_PREPARE_MUNGE_PATH_LIST # --------------------------- # Make sure func_munge_path_list() is defined correctly. m4_defun([_LT_PREPARE_MUNGE_PATH_LIST], [[# func_munge_path_list VARIABLE PATH # ----------------------------------- # VARIABLE is name of variable containing _space_ separated list of # directories to be munged by the contents of PATH, which is string # having a format: # "DIR[:DIR]:" # string "DIR[ DIR]" will be prepended to VARIABLE # ":DIR[:DIR]" # string "DIR[ DIR]" will be appended to VARIABLE # "DIRP[:DIRP]::[DIRA:]DIRA" # string "DIRP[ DIRP]" will be prepended to VARIABLE and string # "DIRA[ DIRA]" will be appended to VARIABLE # "DIR[:DIR]" # VARIABLE will be replaced by "DIR[ DIR]" func_munge_path_list () { case x@S|@2 in x) ;; *:) eval @S|@1=\"`$ECHO @S|@2 | $SED 's/:/ /g'` \@S|@@S|@1\" ;; x:*) eval @S|@1=\"\@S|@@S|@1 `$ECHO @S|@2 | $SED 's/:/ /g'`\" ;; *::*) eval @S|@1=\"\@S|@@S|@1\ `$ECHO @S|@2 | $SED -e 's/.*:://' -e 's/:/ /g'`\" eval @S|@1=\"`$ECHO @S|@2 | $SED -e 's/::.*//' -e 's/:/ /g'`\ \@S|@@S|@1\" ;; *) eval @S|@1=\"`$ECHO @S|@2 | $SED 's/:/ /g'`\" ;; esac } ]])# _LT_PREPARE_PATH_LIST # _LT_SYS_DYNAMIC_LINKER([TAG]) # ----------------------------- # PORTME Fill in your ld.so characteristics m4_defun([_LT_SYS_DYNAMIC_LINKER], [AC_REQUIRE([AC_CANONICAL_HOST])dnl m4_require([_LT_DECL_EGREP])dnl m4_require([_LT_FILEUTILS_DEFAULTS])dnl m4_require([_LT_DECL_OBJDUMP])dnl m4_require([_LT_DECL_SED])dnl m4_require([_LT_CHECK_SHELL_FEATURES])dnl m4_require([_LT_PREPARE_MUNGE_PATH_LIST])dnl AC_MSG_CHECKING([dynamic linker characteristics]) m4_if([$1], [], [ if test yes = "$GCC"; then case $host_os in darwin*) lt_awk_arg='/^libraries:/,/LR/' ;; *) lt_awk_arg='/^libraries:/' ;; esac case $host_os in mingw* | cegcc*) lt_sed_strip_eq='s|=\([[A-Za-z]]:\)|\1|g' ;; *) lt_sed_strip_eq='s|=/|/|g' ;; esac lt_search_path_spec=`$CC -print-search-dirs | awk $lt_awk_arg | $SED -e "s/^libraries://" -e $lt_sed_strip_eq` case $lt_search_path_spec in *\;*) # if the path contains ";" then we assume it to be the separator # otherwise default to the standard path separator (i.e. ":") - it is # assumed that no part of a normal pathname contains ";" but that should # okay in the real world where ";" in dirpaths is itself problematic. lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED 's/;/ /g'` ;; *) lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED "s/$PATH_SEPARATOR/ /g"` ;; esac # Ok, now we have the path, separated by spaces, we can step through it # and add multilib dir if necessary... lt_tmp_lt_search_path_spec= lt_multi_os_dir=/`$CC $CPPFLAGS $CFLAGS $LDFLAGS -print-multi-os-directory 2>/dev/null` # ...but if some path component already ends with the multilib dir we assume # that all is fine and trust -print-search-dirs as is (GCC 4.2? or newer). case "$lt_multi_os_dir; $lt_search_path_spec " in "/; "* | "/.; "* | "/./; "* | *"$lt_multi_os_dir "* | *"$lt_multi_os_dir/ "*) lt_multi_os_dir= ;; esac for lt_sys_path in $lt_search_path_spec; do if test -d "$lt_sys_path$lt_multi_os_dir"; then lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path$lt_multi_os_dir" elif test -n "$lt_multi_os_dir"; then test -d "$lt_sys_path" && \ lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path" fi done lt_search_path_spec=`$ECHO "$lt_tmp_lt_search_path_spec" | awk ' BEGIN {RS = " "; FS = "/|\n";} { lt_foo = ""; lt_count = 0; for (lt_i = NF; lt_i > 0; lt_i--) { if ($lt_i != "" && $lt_i != ".") { if ($lt_i == "..") { lt_count++; } else { if (lt_count == 0) { lt_foo = "/" $lt_i lt_foo; } else { lt_count--; } } } } if (lt_foo != "") { lt_freq[[lt_foo]]++; } if (lt_freq[[lt_foo]] == 1) { print lt_foo; } }'` # AWK program above erroneously prepends '/' to C:/dos/paths # for these hosts. case $host_os in mingw* | cegcc*) lt_search_path_spec=`$ECHO "$lt_search_path_spec" |\ $SED 's|/\([[A-Za-z]]:\)|\1|g'` ;; esac sys_lib_search_path_spec=`$ECHO "$lt_search_path_spec" | $lt_NL2SP` else sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" fi]) library_names_spec= libname_spec='lib$name' soname_spec= shrext_cmds=.so postinstall_cmds= postuninstall_cmds= finish_cmds= finish_eval= shlibpath_var= shlibpath_overrides_runpath=unknown version_type=none dynamic_linker="$host_os ld.so" sys_lib_dlsearch_path_spec="/lib /usr/lib" need_lib_prefix=unknown hardcode_into_libs=no # when you set need_version to no, make sure it does not cause -set_version # flags to be left without arguments need_version=unknown AC_ARG_VAR([LT_SYS_LIBRARY_PATH], [User-defined run-time library search path.]) case $host_os in aix3*) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='$libname$release$shared_ext$versuffix $libname.a' shlibpath_var=LIBPATH # AIX 3 has no versioning support, so we append a major version to the name. soname_spec='$libname$release$shared_ext$major' ;; aix[[4-9]]*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no hardcode_into_libs=yes if test ia64 = "$host_cpu"; then # AIX 5 supports IA64 library_names_spec='$libname$release$shared_ext$major $libname$release$shared_ext$versuffix $libname$shared_ext' shlibpath_var=LD_LIBRARY_PATH else # With GCC up to 2.95.x, collect2 would create an import file # for dependence libraries. The import file would start with # the line '#! .'. This would cause the generated library to # depend on '.', always an invalid library. This was fixed in # development snapshots of GCC prior to 3.0. case $host_os in aix4 | aix4.[[01]] | aix4.[[01]].*) if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)' echo ' yes ' echo '#endif'; } | $CC -E - | $GREP yes > /dev/null; then : else can_build_shared=no fi ;; esac # Using Import Files as archive members, it is possible to support # filename-based versioning of shared library archives on AIX. While # this would work for both with and without runtime linking, it will # prevent static linking of such archives. So we do filename-based # shared library versioning with .so extension only, which is used # when both runtime linking and shared linking is enabled. # Unfortunately, runtime linking may impact performance, so we do # not want this to be the default eventually. Also, we use the # versioned .so libs for executables only if there is the -brtl # linker flag in LDFLAGS as well, or --with-aix-soname=svr4 only. # To allow for filename-based versioning support, we need to create # libNAME.so.V as an archive file, containing: # *) an Import File, referring to the versioned filename of the # archive as well as the shared archive member, telling the # bitwidth (32 or 64) of that shared object, and providing the # list of exported symbols of that shared object, eventually # decorated with the 'weak' keyword # *) the shared object with the F_LOADONLY flag set, to really avoid # it being seen by the linker. # At run time we better use the real file rather than another symlink, # but for link time we create the symlink libNAME.so -> libNAME.so.V case $with_aix_soname,$aix_use_runtimelinking in # AIX (on Power*) has no versioning support, so currently we cannot hardcode correct # soname into executable. Probably we can add versioning support to # collect2, so additional links can be useful in future. aix,yes) # traditional libtool dynamic_linker='AIX unversionable lib.so' # If using run time linking (on AIX 4.2 or later) use lib.so # instead of lib.a to let people know that these are not # typical AIX shared libraries. library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' ;; aix,no) # traditional AIX only dynamic_linker='AIX lib.a[(]lib.so.V[)]' # We preserve .a as extension for shared libraries through AIX4.2 # and later when we are not doing run time linking. library_names_spec='$libname$release.a $libname.a' soname_spec='$libname$release$shared_ext$major' ;; svr4,*) # full svr4 only dynamic_linker="AIX lib.so.V[(]$shared_archive_member_spec.o[)]" library_names_spec='$libname$release$shared_ext$major $libname$shared_ext' # We do not specify a path in Import Files, so LIBPATH fires. shlibpath_overrides_runpath=yes ;; *,yes) # both, prefer svr4 dynamic_linker="AIX lib.so.V[(]$shared_archive_member_spec.o[)], lib.a[(]lib.so.V[)]" library_names_spec='$libname$release$shared_ext$major $libname$shared_ext' # unpreferred sharedlib libNAME.a needs extra handling postinstall_cmds='test -n "$linkname" || linkname="$realname"~func_stripname "" ".so" "$linkname"~$install_shared_prog "$dir/$func_stripname_result.$libext" "$destdir/$func_stripname_result.$libext"~test -z "$tstripme" || test -z "$striplib" || $striplib "$destdir/$func_stripname_result.$libext"' postuninstall_cmds='for n in $library_names $old_library; do :; done~func_stripname "" ".so" "$n"~test "$func_stripname_result" = "$n" || func_append rmfiles " $odir/$func_stripname_result.$libext"' # We do not specify a path in Import Files, so LIBPATH fires. shlibpath_overrides_runpath=yes ;; *,no) # both, prefer aix dynamic_linker="AIX lib.a[(]lib.so.V[)], lib.so.V[(]$shared_archive_member_spec.o[)]" library_names_spec='$libname$release.a $libname.a' soname_spec='$libname$release$shared_ext$major' # unpreferred sharedlib libNAME.so.V and symlink libNAME.so need extra handling postinstall_cmds='test -z "$dlname" || $install_shared_prog $dir/$dlname $destdir/$dlname~test -z "$tstripme" || test -z "$striplib" || $striplib $destdir/$dlname~test -n "$linkname" || linkname=$realname~func_stripname "" ".a" "$linkname"~(cd "$destdir" && $LN_S -f $dlname $func_stripname_result.so)' postuninstall_cmds='test -z "$dlname" || func_append rmfiles " $odir/$dlname"~for n in $old_library $library_names; do :; done~func_stripname "" ".a" "$n"~func_append rmfiles " $odir/$func_stripname_result.so"' ;; esac shlibpath_var=LIBPATH fi ;; amigaos*) case $host_cpu in powerpc) # Since July 2007 AmigaOS4 officially supports .so libraries. # When compiling the executable, add -use-dynld -Lsobjs: to the compileline. library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' ;; m68k) library_names_spec='$libname.ixlibrary $libname.a' # Create ${libname}_ixlibrary.a entries in /sys/libs. finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`func_echo_all "$lib" | $SED '\''s%^.*/\([[^/]]*\)\.ixlibrary$%\1%'\''`; $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done' ;; esac ;; beos*) library_names_spec='$libname$shared_ext' dynamic_linker="$host_os ld.so" shlibpath_var=LIBRARY_PATH ;; bsdi[[45]]*) version_type=linux # correct to gnu/linux during the next big refactor need_version=no library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir' shlibpath_var=LD_LIBRARY_PATH sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib" sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib" # the default ld.so.conf also contains /usr/contrib/lib and # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow # libtool to hard-code these into programs ;; cygwin* | mingw* | pw32* | cegcc*) version_type=windows shrext_cmds=.dll need_version=no need_lib_prefix=no case $GCC,$cc_basename in yes,*) # gcc library_names_spec='$libname.dll.a' # DLL is installed to $(libdir)/../bin by postinstall_cmds postinstall_cmds='base_file=`basename \$file`~ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\$base_file'\''i; echo \$dlname'\''`~ dldir=$destdir/`dirname \$dlpath`~ test -d \$dldir || mkdir -p \$dldir~ $install_prog $dir/$dlname \$dldir/$dlname~ chmod a+x \$dldir/$dlname~ if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then eval '\''$striplib \$dldir/$dlname'\'' || exit \$?; fi' postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ dlpath=$dir/\$dldll~ $RM \$dlpath' shlibpath_overrides_runpath=yes case $host_os in cygwin*) # Cygwin DLLs use 'cyg' prefix rather than 'lib' soname_spec='`echo $libname | $SED -e 's/^lib/cyg/'``echo $release | $SED -e 's/[[.]]/-/g'`$versuffix$shared_ext' m4_if([$1], [],[ sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/lib/w32api"]) ;; mingw* | cegcc*) # MinGW DLLs use traditional 'lib' prefix soname_spec='$libname`echo $release | $SED -e 's/[[.]]/-/g'`$versuffix$shared_ext' ;; pw32*) # pw32 DLLs use 'pw' prefix rather than 'lib' library_names_spec='`echo $libname | $SED -e 's/^lib/pw/'``echo $release | $SED -e 's/[[.]]/-/g'`$versuffix$shared_ext' ;; esac dynamic_linker='Win32 ld.exe' ;; *,cl* | *,icl*) # Native MSVC or ICC libname_spec='$name' soname_spec='$libname`echo $release | $SED -e 's/[[.]]/-/g'`$versuffix$shared_ext' library_names_spec='$libname.dll.lib' case $build_os in mingw*) sys_lib_search_path_spec= lt_save_ifs=$IFS IFS=';' for lt_path in $LIB do IFS=$lt_save_ifs # Let DOS variable expansion print the short 8.3 style file name. lt_path=`cd "$lt_path" 2>/dev/null && cmd //C "for %i in (".") do @echo %~si"` sys_lib_search_path_spec="$sys_lib_search_path_spec $lt_path" done IFS=$lt_save_ifs # Convert to MSYS style. sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's|\\\\|/|g' -e 's| \\([[a-zA-Z]]\\):| /\\1|g' -e 's|^ ||'` ;; cygwin*) # Convert to unix form, then to dos form, then back to unix form # but this time dos style (no spaces!) so that the unix form looks # like /cygdrive/c/PROGRA~1:/cygdr... sys_lib_search_path_spec=`cygpath --path --unix "$LIB"` sys_lib_search_path_spec=`cygpath --path --dos "$sys_lib_search_path_spec" 2>/dev/null` sys_lib_search_path_spec=`cygpath --path --unix "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` ;; *) sys_lib_search_path_spec=$LIB if $ECHO "$sys_lib_search_path_spec" | [$GREP ';[c-zC-Z]:/' >/dev/null]; then # It is most probably a Windows format PATH. sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` else sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` fi # FIXME: find the short name or the path components, as spaces are # common. (e.g. "Program Files" -> "PROGRA~1") ;; esac # DLL is installed to $(libdir)/../bin by postinstall_cmds postinstall_cmds='base_file=`basename \$file`~ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\$base_file'\''i; echo \$dlname'\''`~ dldir=$destdir/`dirname \$dlpath`~ test -d \$dldir || mkdir -p \$dldir~ $install_prog $dir/$dlname \$dldir/$dlname' postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ dlpath=$dir/\$dldll~ $RM \$dlpath' shlibpath_overrides_runpath=yes dynamic_linker='Win32 link.exe' ;; *) # Assume MSVC and ICC wrapper library_names_spec='$libname`echo $release | $SED -e 's/[[.]]/-/g'`$versuffix$shared_ext $libname.lib' dynamic_linker='Win32 ld.exe' ;; esac # FIXME: first we should search . and the directory the executable is in shlibpath_var=PATH ;; darwin* | rhapsody*) dynamic_linker="$host_os dyld" version_type=darwin need_lib_prefix=no need_version=no library_names_spec='$libname$release$major$shared_ext $libname$shared_ext' soname_spec='$libname$release$major$shared_ext' shlibpath_overrides_runpath=yes shlibpath_var=DYLD_LIBRARY_PATH shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`' m4_if([$1], [],[ sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/local/lib"]) sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib' ;; dgux*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' shlibpath_var=LD_LIBRARY_PATH ;; freebsd* | dragonfly* | midnightbsd*) # DragonFly does not have aout. When/if they implement a new # versioning mechanism, adjust this. if test -x /usr/bin/objformat; then objformat=`/usr/bin/objformat` else case $host_os in freebsd[[23]].*) objformat=aout ;; *) objformat=elf ;; esac fi version_type=freebsd-$objformat case $version_type in freebsd-elf*) library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' need_version=no need_lib_prefix=no ;; freebsd-*) library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix' need_version=yes ;; esac shlibpath_var=LD_LIBRARY_PATH case $host_os in freebsd2.*) shlibpath_overrides_runpath=yes ;; freebsd3.[[01]]* | freebsdelf3.[[01]]*) shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; freebsd3.[[2-9]]* | freebsdelf3.[[2-9]]* | \ freebsd4.[[0-5]] | freebsdelf4.[[0-5]] | freebsd4.1.1 | freebsdelf4.1.1) shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; *) # from 4.6 on, and DragonFly shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; esac ;; haiku*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no dynamic_linker="$host_os runtime_loader" library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' shlibpath_var=LIBRARY_PATH shlibpath_overrides_runpath=no sys_lib_dlsearch_path_spec='/boot/home/config/lib /boot/common/lib /boot/system/lib' hardcode_into_libs=yes ;; hpux9* | hpux10* | hpux11*) # Give a soname corresponding to the major version so that dld.sl refuses to # link against other versions. version_type=sunos need_lib_prefix=no need_version=no case $host_cpu in ia64*) shrext_cmds='.so' hardcode_into_libs=yes dynamic_linker="$host_os dld.so" shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' if test 32 = "$HPUX_IA64_MODE"; then sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib" sys_lib_dlsearch_path_spec=/usr/lib/hpux32 else sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64" sys_lib_dlsearch_path_spec=/usr/lib/hpux64 fi ;; hppa*64*) shrext_cmds='.sl' hardcode_into_libs=yes dynamic_linker="$host_os dld.sl" shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64" sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec ;; *) shrext_cmds='.sl' dynamic_linker="$host_os dld.sl" shlibpath_var=SHLIB_PATH shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' ;; esac # HP-UX runs *really* slowly unless shared libraries are mode 555, ... postinstall_cmds='chmod 555 $lib' # or fails outright, so override atomically: install_override_mode=555 ;; interix[[3-9]]*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; irix5* | irix6* | nonstopux*) case $host_os in nonstopux*) version_type=nonstopux ;; *) if test yes = "$lt_cv_prog_gnu_ld"; then version_type=linux # correct to gnu/linux during the next big refactor else version_type=irix fi ;; esac need_lib_prefix=no need_version=no soname_spec='$libname$release$shared_ext$major' library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$release$shared_ext $libname$shared_ext' case $host_os in irix5* | nonstopux*) libsuff= shlibsuff= ;; *) case $LD in # libtool.m4 will add one of these switches to LD *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") libsuff= shlibsuff= libmagic=32-bit;; *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") libsuff=32 shlibsuff=N32 libmagic=N32;; *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") libsuff=64 shlibsuff=64 libmagic=64-bit;; *) libsuff= shlibsuff= libmagic=never-match;; esac ;; esac shlibpath_var=LD_LIBRARY${shlibsuff}_PATH shlibpath_overrides_runpath=no sys_lib_search_path_spec="/usr/lib$libsuff /lib$libsuff /usr/local/lib$libsuff" sys_lib_dlsearch_path_spec="/usr/lib$libsuff /lib$libsuff" hardcode_into_libs=yes ;; # No shared lib support for Linux oldld, aout, or coff. linux*oldld* | linux*aout* | linux*coff*) dynamic_linker=no ;; linux*android*) version_type=none # Android doesn't support versioned libraries. need_lib_prefix=no need_version=no library_names_spec='$libname$release$shared_ext' soname_spec='$libname$release$shared_ext' finish_cmds= shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes # This implies no fast_install, which is unacceptable. # Some rework will be needed to allow for fast_install # before this can be enabled. hardcode_into_libs=yes dynamic_linker='Android linker' # Don't embed -rpath directories since the linker doesn't support them. _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' ;; # This must be glibc/ELF. linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no # Some binutils ld are patched to set DT_RUNPATH AC_CACHE_VAL([lt_cv_shlibpath_overrides_runpath], [lt_cv_shlibpath_overrides_runpath=no save_LDFLAGS=$LDFLAGS save_libdir=$libdir eval "libdir=/foo; wl=\"$_LT_TAGVAR(lt_prog_compiler_wl, $1)\"; \ LDFLAGS=\"\$LDFLAGS $_LT_TAGVAR(hardcode_libdir_flag_spec, $1)\"" AC_LINK_IFELSE([AC_LANG_PROGRAM([],[])], [AS_IF([ ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null], [lt_cv_shlibpath_overrides_runpath=yes])]) LDFLAGS=$save_LDFLAGS libdir=$save_libdir ]) shlibpath_overrides_runpath=$lt_cv_shlibpath_overrides_runpath # This implies no fast_install, which is unacceptable. # Some rework will be needed to allow for fast_install # before this can be enabled. hardcode_into_libs=yes # Ideally, we could use ldconfig to report *all* directores which are # searched for libraries, however this is still not possible. Aside from not # being certain /sbin/ldconfig is available, command # 'ldconfig -N -X -v | grep ^/' on 64bit Fedora does not report /usr/lib64, # even though it is searched at run-time. Try to do the best guess by # appending ld.so.conf contents (and includes) to the search path. if test -f /etc/ld.so.conf; then lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \[$]2)); skip = 1; } { if (!skip) print \[$]0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[ ]*hwcap[ ]/d;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;s/"//g;/^$/d' | tr '\n' ' '` sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra" fi # We used to test for /lib/ld.so.1 and disable shared libraries on # powerpc, because MkLinux only supported shared libraries with the # GNU dynamic linker. Since this was broken with cross compilers, # most powerpc-linux boxes support dynamic linking these days and # people can always --disable-shared, the test was removed, and we # assume the GNU/Linux dynamic linker is in use. dynamic_linker='GNU/Linux ld.so' ;; netbsdelf*-gnu) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes dynamic_linker='NetBSD ld.elf_so' ;; netbsd*) version_type=sunos need_lib_prefix=no need_version=no if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix' finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' dynamic_linker='NetBSD (a.out) ld.so' else library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' dynamic_linker='NetBSD ld.elf_so' fi shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; newsos6) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes ;; *nto* | *qnx*) version_type=qnx need_lib_prefix=no need_version=no library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes dynamic_linker='ldqnx.so' ;; openbsd* | bitrig*) version_type=sunos sys_lib_dlsearch_path_spec=/usr/lib need_lib_prefix=no if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`"; then need_version=no else need_version=yes fi library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix' finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes ;; os2*) libname_spec='$name' version_type=windows shrext_cmds=.dll need_version=no need_lib_prefix=no # OS/2 can only load a DLL with a base name of 8 characters or less. soname_spec='`test -n "$os2dllname" && libname="$os2dllname"; v=$($ECHO $release$versuffix | tr -d .-); n=$($ECHO $libname | cut -b -$((8 - ${#v})) | tr . _); $ECHO $n$v`$shared_ext' library_names_spec='${libname}_dll.$libext' dynamic_linker='OS/2 ld.exe' shlibpath_var=BEGINLIBPATH sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec postinstall_cmds='base_file=`basename \$file`~ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\$base_file'\''i; $ECHO \$dlname'\''`~ dldir=$destdir/`dirname \$dlpath`~ test -d \$dldir || mkdir -p \$dldir~ $install_prog $dir/$dlname \$dldir/$dlname~ chmod a+x \$dldir/$dlname~ if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then eval '\''$striplib \$dldir/$dlname'\'' || exit \$?; fi' postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; $ECHO \$dlname'\''`~ dlpath=$dir/\$dldll~ $RM \$dlpath' ;; osf3* | osf4* | osf5*) version_type=osf need_lib_prefix=no need_version=no soname_spec='$libname$release$shared_ext$major' library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' shlibpath_var=LD_LIBRARY_PATH sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib" sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec ;; rdos*) dynamic_linker=no ;; solaris*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes # ldd complains unless libraries are executable postinstall_cmds='chmod +x $lib' ;; sunos4*) version_type=sunos library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix' finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes if test yes = "$with_gnu_ld"; then need_lib_prefix=no fi need_version=yes ;; sysv4 | sysv4.3*) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' shlibpath_var=LD_LIBRARY_PATH case $host_vendor in sni) shlibpath_overrides_runpath=no need_lib_prefix=no runpath_var=LD_RUN_PATH ;; siemens) need_lib_prefix=no ;; motorola) need_lib_prefix=no need_version=no shlibpath_overrides_runpath=no sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib' ;; esac ;; sysv4*MP*) if test -d /usr/nec; then version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='$libname$shared_ext.$versuffix $libname$shared_ext.$major $libname$shared_ext' soname_spec='$libname$shared_ext.$major' shlibpath_var=LD_LIBRARY_PATH fi ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) version_type=sco need_lib_prefix=no need_version=no library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes if test yes = "$with_gnu_ld"; then sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib' else sys_lib_search_path_spec='/usr/ccs/lib /usr/lib' case $host_os in sco3.2v5*) sys_lib_search_path_spec="$sys_lib_search_path_spec /lib" ;; esac fi sys_lib_dlsearch_path_spec='/usr/lib' ;; tpf*) # TPF is a cross-target only. Preferred cross-host = GNU/Linux. version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; uts4*) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' shlibpath_var=LD_LIBRARY_PATH ;; *) dynamic_linker=no ;; esac AC_MSG_RESULT([$dynamic_linker]) test no = "$dynamic_linker" && can_build_shared=no variables_saved_for_relink="PATH $shlibpath_var $runpath_var" if test yes = "$GCC"; then variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" fi if test set = "${lt_cv_sys_lib_search_path_spec+set}"; then sys_lib_search_path_spec=$lt_cv_sys_lib_search_path_spec fi if test set = "${lt_cv_sys_lib_dlsearch_path_spec+set}"; then sys_lib_dlsearch_path_spec=$lt_cv_sys_lib_dlsearch_path_spec fi # remember unaugmented sys_lib_dlsearch_path content for libtool script decls... configure_time_dlsearch_path=$sys_lib_dlsearch_path_spec # ... but it needs LT_SYS_LIBRARY_PATH munging for other configure-time code func_munge_path_list sys_lib_dlsearch_path_spec "$LT_SYS_LIBRARY_PATH" # to be used as default LT_SYS_LIBRARY_PATH value in generated libtool configure_time_lt_sys_library_path=$LT_SYS_LIBRARY_PATH _LT_DECL([], [variables_saved_for_relink], [1], [Variables whose values should be saved in libtool wrapper scripts and restored at link time]) _LT_DECL([], [need_lib_prefix], [0], [Do we need the "lib" prefix for modules?]) _LT_DECL([], [need_version], [0], [Do we need a version for libraries?]) _LT_DECL([], [version_type], [0], [Library versioning type]) _LT_DECL([], [runpath_var], [0], [Shared library runtime path variable]) _LT_DECL([], [shlibpath_var], [0],[Shared library path variable]) _LT_DECL([], [shlibpath_overrides_runpath], [0], [Is shlibpath searched before the hard-coded library search path?]) _LT_DECL([], [libname_spec], [1], [Format of library name prefix]) _LT_DECL([], [library_names_spec], [1], [[List of archive names. First name is the real one, the rest are links. The last name is the one that the linker finds with -lNAME]]) _LT_DECL([], [soname_spec], [1], [[The coded name of the library, if different from the real name]]) _LT_DECL([], [install_override_mode], [1], [Permission mode override for installation of shared libraries]) _LT_DECL([], [postinstall_cmds], [2], [Command to use after installation of a shared archive]) _LT_DECL([], [postuninstall_cmds], [2], [Command to use after uninstallation of a shared archive]) _LT_DECL([], [finish_cmds], [2], [Commands used to finish a libtool library installation in a directory]) _LT_DECL([], [finish_eval], [1], [[As "finish_cmds", except a single script fragment to be evaled but not shown]]) _LT_DECL([], [hardcode_into_libs], [0], [Whether we should hardcode library paths into libraries]) _LT_DECL([], [sys_lib_search_path_spec], [2], [Compile-time system search path for libraries]) _LT_DECL([sys_lib_dlsearch_path_spec], [configure_time_dlsearch_path], [2], [Detected run-time system search path for libraries]) _LT_DECL([], [configure_time_lt_sys_library_path], [2], [Explicit LT_SYS_LIBRARY_PATH set during ./configure time]) ])# _LT_SYS_DYNAMIC_LINKER # _LT_PATH_TOOL_PREFIX(TOOL) # -------------------------- # find a file program that can recognize shared library AC_DEFUN([_LT_PATH_TOOL_PREFIX], [m4_require([_LT_DECL_EGREP])dnl AC_MSG_CHECKING([for $1]) AC_CACHE_VAL(lt_cv_path_MAGIC_CMD, [case $MAGIC_CMD in [[\\/*] | ?:[\\/]*]) lt_cv_path_MAGIC_CMD=$MAGIC_CMD # Let the user override the test with a path. ;; *) lt_save_MAGIC_CMD=$MAGIC_CMD lt_save_ifs=$IFS; IFS=$PATH_SEPARATOR dnl $ac_dummy forces splitting on constant user-supplied paths. dnl POSIX.2 word splitting is done only on the output of word expansions, dnl not every word. This closes a longstanding sh security hole. ac_dummy="m4_if([$2], , $PATH, [$2])" for ac_dir in $ac_dummy; do IFS=$lt_save_ifs test -z "$ac_dir" && ac_dir=. if test -f "$ac_dir/$1"; then lt_cv_path_MAGIC_CMD=$ac_dir/"$1" if test -n "$file_magic_test_file"; then case $deplibs_check_method in "file_magic "*) file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"` MAGIC_CMD=$lt_cv_path_MAGIC_CMD if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null | $EGREP "$file_magic_regex" > /dev/null; then : else cat <<_LT_EOF 1>&2 *** Warning: the command libtool uses to detect shared libraries, *** $file_magic_cmd, produces output that libtool cannot recognize. *** The result is that libtool may fail to recognize shared libraries *** as such. This will affect the creation of libtool libraries that *** depend on shared libraries, but programs linked with such libtool *** libraries will work regardless of this problem. Nevertheless, you *** may want to report the problem to your system manager and/or to *** bug-libtool@gnu.org _LT_EOF fi ;; esac fi break fi done IFS=$lt_save_ifs MAGIC_CMD=$lt_save_MAGIC_CMD ;; esac]) MAGIC_CMD=$lt_cv_path_MAGIC_CMD if test -n "$MAGIC_CMD"; then AC_MSG_RESULT($MAGIC_CMD) else AC_MSG_RESULT(no) fi _LT_DECL([], [MAGIC_CMD], [0], [Used to examine libraries when file_magic_cmd begins with "file"])dnl ])# _LT_PATH_TOOL_PREFIX # Old name: AU_ALIAS([AC_PATH_TOOL_PREFIX], [_LT_PATH_TOOL_PREFIX]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_PATH_TOOL_PREFIX], []) # _LT_PATH_MAGIC # -------------- # find a file program that can recognize a shared library m4_defun([_LT_PATH_MAGIC], [_LT_PATH_TOOL_PREFIX(${ac_tool_prefix}file, /usr/bin$PATH_SEPARATOR$PATH) if test -z "$lt_cv_path_MAGIC_CMD"; then if test -n "$ac_tool_prefix"; then _LT_PATH_TOOL_PREFIX(file, /usr/bin$PATH_SEPARATOR$PATH) else MAGIC_CMD=: fi fi ])# _LT_PATH_MAGIC # LT_PATH_LD # ---------- # find the pathname to the GNU or non-GNU linker AC_DEFUN([LT_PATH_LD], [AC_REQUIRE([AC_PROG_CC])dnl AC_REQUIRE([AC_CANONICAL_HOST])dnl AC_REQUIRE([AC_CANONICAL_BUILD])dnl m4_require([_LT_DECL_SED])dnl m4_require([_LT_DECL_EGREP])dnl m4_require([_LT_PROG_ECHO_BACKSLASH])dnl AC_ARG_WITH([gnu-ld], [AS_HELP_STRING([--with-gnu-ld], [assume the C compiler uses GNU ld @<:@default=no@:>@])], [test no = "$withval" || with_gnu_ld=yes], [with_gnu_ld=no])dnl ac_prog=ld if test yes = "$GCC"; then # Check if gcc -print-prog-name=ld gives a path. AC_MSG_CHECKING([for ld used by $CC]) case $host in *-*-mingw*) # gcc leaves a trailing carriage return, which upsets mingw ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; *) ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; esac case $ac_prog in # Accept absolute paths. [[\\/]]* | ?:[[\\/]]*) re_direlt='/[[^/]][[^/]]*/\.\./' # Canonicalize the pathname of ld ac_prog=`$ECHO "$ac_prog"| $SED 's%\\\\%/%g'` while $ECHO "$ac_prog" | $GREP "$re_direlt" > /dev/null 2>&1; do ac_prog=`$ECHO $ac_prog| $SED "s%$re_direlt%/%"` done test -z "$LD" && LD=$ac_prog ;; "") # If it fails, then pretend we aren't using GCC. ac_prog=ld ;; *) # If it is relative, then search for the first ld in PATH. with_gnu_ld=unknown ;; esac elif test yes = "$with_gnu_ld"; then AC_MSG_CHECKING([for GNU ld]) else AC_MSG_CHECKING([for non-GNU ld]) fi AC_CACHE_VAL(lt_cv_path_LD, [if test -z "$LD"; then lt_save_ifs=$IFS; IFS=$PATH_SEPARATOR for ac_dir in $PATH; do IFS=$lt_save_ifs test -z "$ac_dir" && ac_dir=. if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then lt_cv_path_LD=$ac_dir/$ac_prog # Check to see if the program is GNU ld. I'd rather use --version, # but apparently some variants of GNU ld only accept -v. # Break only if it was the GNU/non-GNU ld that we prefer. case `"$lt_cv_path_LD" -v 2>&1 &1 conftest.i cat conftest.i conftest.i >conftest2.i : ${lt_DD:=$DD} AC_PATH_PROGS_FEATURE_CHECK([lt_DD], [dd], [if "$ac_path_lt_DD" bs=32 count=1 conftest.out 2>/dev/null; then cmp -s conftest.i conftest.out \ && ac_cv_path_lt_DD="$ac_path_lt_DD" ac_path_lt_DD_found=: fi]) rm -f conftest.i conftest2.i conftest.out]) ])# _LT_PATH_DD # _LT_CMD_TRUNCATE # ---------------- # find command to truncate a binary pipe m4_defun([_LT_CMD_TRUNCATE], [m4_require([_LT_PATH_DD]) AC_CACHE_CHECK([how to truncate binary pipes], [lt_cv_truncate_bin], [printf 0123456789abcdef0123456789abcdef >conftest.i cat conftest.i conftest.i >conftest2.i lt_cv_truncate_bin= if "$ac_cv_path_lt_DD" bs=32 count=1 conftest.out 2>/dev/null; then cmp -s conftest.i conftest.out \ && lt_cv_truncate_bin="$ac_cv_path_lt_DD bs=4096 count=1" fi rm -f conftest.i conftest2.i conftest.out test -z "$lt_cv_truncate_bin" && lt_cv_truncate_bin="$SED -e 4q"]) _LT_DECL([lt_truncate_bin], [lt_cv_truncate_bin], [1], [Command to truncate a binary pipe]) ])# _LT_CMD_TRUNCATE # _LT_CHECK_MAGIC_METHOD # ---------------------- # how to check for library dependencies # -- PORTME fill in with the dynamic library characteristics m4_defun([_LT_CHECK_MAGIC_METHOD], [m4_require([_LT_DECL_EGREP]) m4_require([_LT_DECL_OBJDUMP]) AC_CACHE_CHECK([how to recognize dependent libraries], lt_cv_deplibs_check_method, [lt_cv_file_magic_cmd='$MAGIC_CMD' lt_cv_file_magic_test_file= lt_cv_deplibs_check_method='unknown' # Need to set the preceding variable on all platforms that support # interlibrary dependencies. # 'none' -- dependencies not supported. # 'unknown' -- same as none, but documents that we really don't know. # 'pass_all' -- all dependencies passed with no checks. # 'test_compile' -- check by making test program. # 'file_magic [[regex]]' -- check by looking for files in library path # that responds to the $file_magic_cmd with a given extended regex. # If you have 'file' or equivalent on your system and you're not sure # whether 'pass_all' will *always* work, you probably want this one. case $host_os in aix[[4-9]]*) lt_cv_deplibs_check_method=pass_all ;; beos*) lt_cv_deplibs_check_method=pass_all ;; bsdi[[45]]*) lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (shared object|dynamic lib)' lt_cv_file_magic_cmd='$FILECMD -L' lt_cv_file_magic_test_file=/shlib/libc.so ;; cygwin*) # func_win32_libid is a shell function defined in ltmain.sh lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL' lt_cv_file_magic_cmd='func_win32_libid' ;; mingw* | pw32*) # Base MSYS/MinGW do not provide the 'file' command needed by # func_win32_libid shell function, so use a weaker test based on 'objdump', # unless we find 'file', for example because we are cross-compiling. if ( file / ) >/dev/null 2>&1; then lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL' lt_cv_file_magic_cmd='func_win32_libid' else # Keep this pattern in sync with the one in func_win32_libid. lt_cv_deplibs_check_method='file_magic file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)' lt_cv_file_magic_cmd='$OBJDUMP -f' fi ;; cegcc*) # use the weaker test based on 'objdump'. See mingw*. lt_cv_deplibs_check_method='file_magic file format pe-arm-.*little(.*architecture: arm)?' lt_cv_file_magic_cmd='$OBJDUMP -f' ;; darwin* | rhapsody*) lt_cv_deplibs_check_method=pass_all ;; freebsd* | dragonfly* | midnightbsd*) if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then case $host_cpu in i*86 ) # Not sure whether the presence of OpenBSD here was a mistake. # Let's accept both of them until this is cleared up. lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD|DragonFly)/i[[3-9]]86 (compact )?demand paged shared library' lt_cv_file_magic_cmd=$FILECMD lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*` ;; esac else lt_cv_deplibs_check_method=pass_all fi ;; haiku*) lt_cv_deplibs_check_method=pass_all ;; hpux10.20* | hpux11*) lt_cv_file_magic_cmd=$FILECMD case $host_cpu in ia64*) lt_cv_deplibs_check_method='file_magic (s[[0-9]][[0-9]][[0-9]]|ELF-[[0-9]][[0-9]]) shared object file - IA64' lt_cv_file_magic_test_file=/usr/lib/hpux32/libc.so ;; hppa*64*) [lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF[ -][0-9][0-9])(-bit)?( [LM]SB)? shared object( file)?[, -]* PA-RISC [0-9]\.[0-9]'] lt_cv_file_magic_test_file=/usr/lib/pa20_64/libc.sl ;; *) lt_cv_deplibs_check_method='file_magic (s[[0-9]][[0-9]][[0-9]]|PA-RISC[[0-9]]\.[[0-9]]) shared library' lt_cv_file_magic_test_file=/usr/lib/libc.sl ;; esac ;; interix[[3-9]]*) # PIC code is broken on Interix 3.x, that's why |\.a not |_pic\.a here lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so|\.a)$' ;; irix5* | irix6* | nonstopux*) case $LD in *-32|*"-32 ") libmagic=32-bit;; *-n32|*"-n32 ") libmagic=N32;; *-64|*"-64 ") libmagic=64-bit;; *) libmagic=never-match;; esac lt_cv_deplibs_check_method=pass_all ;; # This must be glibc/ELF. linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) lt_cv_deplibs_check_method=pass_all ;; netbsd* | netbsdelf*-gnu) if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|_pic\.a)$' else lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so|_pic\.a)$' fi ;; newos6*) lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (executable|dynamic lib)' lt_cv_file_magic_cmd=$FILECMD lt_cv_file_magic_test_file=/usr/lib/libnls.so ;; *nto* | *qnx*) lt_cv_deplibs_check_method=pass_all ;; openbsd* | bitrig*) if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`"; then lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|\.so|_pic\.a)$' else lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|_pic\.a)$' fi ;; osf3* | osf4* | osf5*) lt_cv_deplibs_check_method=pass_all ;; rdos*) lt_cv_deplibs_check_method=pass_all ;; solaris*) lt_cv_deplibs_check_method=pass_all ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) lt_cv_deplibs_check_method=pass_all ;; sysv4 | sysv4.3*) case $host_vendor in motorola) lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (shared object|dynamic lib) M[[0-9]][[0-9]]* Version [[0-9]]' lt_cv_file_magic_test_file=`echo /usr/lib/libc.so*` ;; ncr) lt_cv_deplibs_check_method=pass_all ;; sequent) lt_cv_file_magic_cmd='/bin/file' lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[LM]]SB (shared object|dynamic lib )' ;; sni) lt_cv_file_magic_cmd='/bin/file' lt_cv_deplibs_check_method="file_magic ELF [[0-9]][[0-9]]*-bit [[LM]]SB dynamic lib" lt_cv_file_magic_test_file=/lib/libc.so ;; siemens) lt_cv_deplibs_check_method=pass_all ;; pc) lt_cv_deplibs_check_method=pass_all ;; esac ;; tpf*) lt_cv_deplibs_check_method=pass_all ;; os2*) lt_cv_deplibs_check_method=pass_all ;; esac ]) file_magic_glob= want_nocaseglob=no if test "$build" = "$host"; then case $host_os in mingw* | pw32*) if ( shopt | grep nocaseglob ) >/dev/null 2>&1; then want_nocaseglob=yes else file_magic_glob=`echo aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZ | $SED -e "s/\(..\)/s\/[[\1]]\/[[\1]]\/g;/g"` fi ;; esac fi file_magic_cmd=$lt_cv_file_magic_cmd deplibs_check_method=$lt_cv_deplibs_check_method test -z "$deplibs_check_method" && deplibs_check_method=unknown _LT_DECL([], [deplibs_check_method], [1], [Method to check whether dependent libraries are shared objects]) _LT_DECL([], [file_magic_cmd], [1], [Command to use when deplibs_check_method = "file_magic"]) _LT_DECL([], [file_magic_glob], [1], [How to find potential files when deplibs_check_method = "file_magic"]) _LT_DECL([], [want_nocaseglob], [1], [Find potential files using nocaseglob when deplibs_check_method = "file_magic"]) ])# _LT_CHECK_MAGIC_METHOD # LT_PATH_NM # ---------- # find the pathname to a BSD- or MS-compatible name lister AC_DEFUN([LT_PATH_NM], [AC_REQUIRE([AC_PROG_CC])dnl AC_CACHE_CHECK([for BSD- or MS-compatible name lister (nm)], lt_cv_path_NM, [if test -n "$NM"; then # Let the user override the test. lt_cv_path_NM=$NM else lt_nm_to_check=${ac_tool_prefix}nm if test -n "$ac_tool_prefix" && test "$build" = "$host"; then lt_nm_to_check="$lt_nm_to_check nm" fi for lt_tmp_nm in $lt_nm_to_check; do lt_save_ifs=$IFS; IFS=$PATH_SEPARATOR for ac_dir in $PATH /usr/ccs/bin/elf /usr/ccs/bin /usr/ucb /bin; do IFS=$lt_save_ifs test -z "$ac_dir" && ac_dir=. tmp_nm=$ac_dir/$lt_tmp_nm if test -f "$tmp_nm" || test -f "$tmp_nm$ac_exeext"; then # Check to see if the nm accepts a BSD-compat flag. # Adding the 'sed 1q' prevents false positives on HP-UX, which says: # nm: unknown option "B" ignored # Tru64's nm complains that /dev/null is an invalid object file # MSYS converts /dev/null to NUL, MinGW nm treats NUL as empty case $build_os in mingw*) lt_bad_file=conftest.nm/nofile ;; *) lt_bad_file=/dev/null ;; esac case `"$tmp_nm" -B $lt_bad_file 2>&1 | $SED '1q'` in *$lt_bad_file* | *'Invalid file or object type'*) lt_cv_path_NM="$tmp_nm -B" break 2 ;; *) case `"$tmp_nm" -p /dev/null 2>&1 | $SED '1q'` in */dev/null*) lt_cv_path_NM="$tmp_nm -p" break 2 ;; *) lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but continue # so that we can try to find one that supports BSD flags ;; esac ;; esac fi done IFS=$lt_save_ifs done : ${lt_cv_path_NM=no} fi]) if test no != "$lt_cv_path_NM"; then NM=$lt_cv_path_NM else # Didn't find any BSD compatible name lister, look for dumpbin. if test -n "$DUMPBIN"; then : # Let the user override the test. else AC_CHECK_TOOLS(DUMPBIN, [dumpbin "link -dump"], :) case `$DUMPBIN -symbols -headers /dev/null 2>&1 | $SED '1q'` in *COFF*) DUMPBIN="$DUMPBIN -symbols -headers" ;; *) DUMPBIN=: ;; esac fi AC_SUBST([DUMPBIN]) if test : != "$DUMPBIN"; then NM=$DUMPBIN fi fi test -z "$NM" && NM=nm AC_SUBST([NM]) _LT_DECL([], [NM], [1], [A BSD- or MS-compatible name lister])dnl AC_CACHE_CHECK([the name lister ($NM) interface], [lt_cv_nm_interface], [lt_cv_nm_interface="BSD nm" echo "int some_variable = 0;" > conftest.$ac_ext (eval echo "\"\$as_me:$LINENO: $ac_compile\"" >&AS_MESSAGE_LOG_FD) (eval "$ac_compile" 2>conftest.err) cat conftest.err >&AS_MESSAGE_LOG_FD (eval echo "\"\$as_me:$LINENO: $NM \\\"conftest.$ac_objext\\\"\"" >&AS_MESSAGE_LOG_FD) (eval "$NM \"conftest.$ac_objext\"" 2>conftest.err > conftest.out) cat conftest.err >&AS_MESSAGE_LOG_FD (eval echo "\"\$as_me:$LINENO: output\"" >&AS_MESSAGE_LOG_FD) cat conftest.out >&AS_MESSAGE_LOG_FD if $GREP 'External.*some_variable' conftest.out > /dev/null; then lt_cv_nm_interface="MS dumpbin" fi rm -f conftest*]) ])# LT_PATH_NM # Old names: AU_ALIAS([AM_PROG_NM], [LT_PATH_NM]) AU_ALIAS([AC_PROG_NM], [LT_PATH_NM]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AM_PROG_NM], []) dnl AC_DEFUN([AC_PROG_NM], []) # _LT_CHECK_SHAREDLIB_FROM_LINKLIB # -------------------------------- # how to determine the name of the shared library # associated with a specific link library. # -- PORTME fill in with the dynamic library characteristics m4_defun([_LT_CHECK_SHAREDLIB_FROM_LINKLIB], [m4_require([_LT_DECL_EGREP]) m4_require([_LT_DECL_OBJDUMP]) m4_require([_LT_DECL_DLLTOOL]) AC_CACHE_CHECK([how to associate runtime and link libraries], lt_cv_sharedlib_from_linklib_cmd, [lt_cv_sharedlib_from_linklib_cmd='unknown' case $host_os in cygwin* | mingw* | pw32* | cegcc*) # two different shell functions defined in ltmain.sh; # decide which one to use based on capabilities of $DLLTOOL case `$DLLTOOL --help 2>&1` in *--identify-strict*) lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib ;; *) lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib_fallback ;; esac ;; *) # fallback: assume linklib IS sharedlib lt_cv_sharedlib_from_linklib_cmd=$ECHO ;; esac ]) sharedlib_from_linklib_cmd=$lt_cv_sharedlib_from_linklib_cmd test -z "$sharedlib_from_linklib_cmd" && sharedlib_from_linklib_cmd=$ECHO _LT_DECL([], [sharedlib_from_linklib_cmd], [1], [Command to associate shared and link libraries]) ])# _LT_CHECK_SHAREDLIB_FROM_LINKLIB # _LT_PATH_MANIFEST_TOOL # ---------------------- # locate the manifest tool m4_defun([_LT_PATH_MANIFEST_TOOL], [AC_CHECK_TOOL(MANIFEST_TOOL, mt, :) test -z "$MANIFEST_TOOL" && MANIFEST_TOOL=mt AC_CACHE_CHECK([if $MANIFEST_TOOL is a manifest tool], [lt_cv_path_mainfest_tool], [lt_cv_path_mainfest_tool=no echo "$as_me:$LINENO: $MANIFEST_TOOL '-?'" >&AS_MESSAGE_LOG_FD $MANIFEST_TOOL '-?' 2>conftest.err > conftest.out cat conftest.err >&AS_MESSAGE_LOG_FD if $GREP 'Manifest Tool' conftest.out > /dev/null; then lt_cv_path_mainfest_tool=yes fi rm -f conftest*]) if test yes != "$lt_cv_path_mainfest_tool"; then MANIFEST_TOOL=: fi _LT_DECL([], [MANIFEST_TOOL], [1], [Manifest tool])dnl ])# _LT_PATH_MANIFEST_TOOL # _LT_DLL_DEF_P([FILE]) # --------------------- # True iff FILE is a Windows DLL '.def' file. # Keep in sync with func_dll_def_p in the libtool script AC_DEFUN([_LT_DLL_DEF_P], [dnl test DEF = "`$SED -n dnl -e '\''s/^[[ ]]*//'\'' dnl Strip leading whitespace -e '\''/^\(;.*\)*$/d'\'' dnl Delete empty lines and comments -e '\''s/^\(EXPORTS\|LIBRARY\)\([[ ]].*\)*$/DEF/p'\'' dnl -e q dnl Only consider the first "real" line $1`" dnl ])# _LT_DLL_DEF_P # LT_LIB_M # -------- # check for math library AC_DEFUN([LT_LIB_M], [AC_REQUIRE([AC_CANONICAL_HOST])dnl LIBM= case $host in *-*-beos* | *-*-cegcc* | *-*-cygwin* | *-*-haiku* | *-*-pw32* | *-*-darwin*) # These system don't have libm, or don't need it ;; *-ncr-sysv4.3*) AC_CHECK_LIB(mw, _mwvalidcheckl, LIBM=-lmw) AC_CHECK_LIB(m, cos, LIBM="$LIBM -lm") ;; *) AC_CHECK_LIB(m, cos, LIBM=-lm) ;; esac AC_SUBST([LIBM]) ])# LT_LIB_M # Old name: AU_ALIAS([AC_CHECK_LIBM], [LT_LIB_M]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_CHECK_LIBM], []) # _LT_COMPILER_NO_RTTI([TAGNAME]) # ------------------------------- m4_defun([_LT_COMPILER_NO_RTTI], [m4_require([_LT_TAG_COMPILER])dnl _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)= if test yes = "$GCC"; then case $cc_basename in nvcc*) _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -Xcompiler -fno-builtin' ;; *) _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -fno-builtin' ;; esac _LT_COMPILER_OPTION([if $compiler supports -fno-rtti -fno-exceptions], lt_cv_prog_compiler_rtti_exceptions, [-fno-rtti -fno-exceptions], [], [_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)="$_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1) -fno-rtti -fno-exceptions"]) fi _LT_TAGDECL([no_builtin_flag], [lt_prog_compiler_no_builtin_flag], [1], [Compiler flag to turn off builtin functions]) ])# _LT_COMPILER_NO_RTTI # _LT_CMD_GLOBAL_SYMBOLS # ---------------------- m4_defun([_LT_CMD_GLOBAL_SYMBOLS], [AC_REQUIRE([AC_CANONICAL_HOST])dnl AC_REQUIRE([AC_PROG_CC])dnl AC_REQUIRE([AC_PROG_AWK])dnl AC_REQUIRE([LT_PATH_NM])dnl AC_REQUIRE([LT_PATH_LD])dnl m4_require([_LT_DECL_SED])dnl m4_require([_LT_DECL_EGREP])dnl m4_require([_LT_TAG_COMPILER])dnl # Check for command to grab the raw symbol name followed by C symbol from nm. AC_MSG_CHECKING([command to parse $NM output from $compiler object]) AC_CACHE_VAL([lt_cv_sys_global_symbol_pipe], [ # These are sane defaults that work on at least a few old systems. # [They come from Ultrix. What could be older than Ultrix?!! ;)] # Character class describing NM global symbol codes. symcode='[[BCDEGRST]]' # Regexp to match symbols that can be accessed directly from C. sympat='\([[_A-Za-z]][[_A-Za-z0-9]]*\)' # Define system-specific variables. case $host_os in aix*) symcode='[[BCDT]]' ;; cygwin* | mingw* | pw32* | cegcc*) symcode='[[ABCDGISTW]]' ;; hpux*) if test ia64 = "$host_cpu"; then symcode='[[ABCDEGRST]]' fi ;; irix* | nonstopux*) symcode='[[BCDEGRST]]' ;; osf*) symcode='[[BCDEGQRST]]' ;; solaris*) symcode='[[BDRT]]' ;; sco3.2v5*) symcode='[[DT]]' ;; sysv4.2uw2*) symcode='[[DT]]' ;; sysv5* | sco5v6* | unixware* | OpenUNIX*) symcode='[[ABDT]]' ;; sysv4) symcode='[[DFNSTU]]' ;; esac # If we're using GNU nm, then use its standard symbol codes. case `$NM -V 2>&1` in *GNU* | *'with BFD'*) symcode='[[ABCDGIRSTW]]' ;; esac if test "$lt_cv_nm_interface" = "MS dumpbin"; then # Gets list of data symbols to import. lt_cv_sys_global_symbol_to_import="$SED -n -e 's/^I .* \(.*\)$/\1/p'" # Adjust the below global symbol transforms to fixup imported variables. lt_cdecl_hook=" -e 's/^I .* \(.*\)$/extern __declspec(dllimport) char \1;/p'" lt_c_name_hook=" -e 's/^I .* \(.*\)$/ {\"\1\", (void *) 0},/p'" lt_c_name_lib_hook="\ -e 's/^I .* \(lib.*\)$/ {\"\1\", (void *) 0},/p'\ -e 's/^I .* \(.*\)$/ {\"lib\1\", (void *) 0},/p'" else # Disable hooks by default. lt_cv_sys_global_symbol_to_import= lt_cdecl_hook= lt_c_name_hook= lt_c_name_lib_hook= fi # Transform an extracted symbol line into a proper C declaration. # Some systems (esp. on ia64) link data and code symbols differently, # so use this general approach. lt_cv_sys_global_symbol_to_cdecl="$SED -n"\ $lt_cdecl_hook\ " -e 's/^T .* \(.*\)$/extern int \1();/p'"\ " -e 's/^$symcode$symcode* .* \(.*\)$/extern char \1;/p'" # Transform an extracted symbol line into symbol name and symbol address lt_cv_sys_global_symbol_to_c_name_address="$SED -n"\ $lt_c_name_hook\ " -e 's/^: \(.*\) .*$/ {\"\1\", (void *) 0},/p'"\ " -e 's/^$symcode$symcode* .* \(.*\)$/ {\"\1\", (void *) \&\1},/p'" # Transform an extracted symbol line into symbol name with lib prefix and # symbol address. lt_cv_sys_global_symbol_to_c_name_address_lib_prefix="$SED -n"\ $lt_c_name_lib_hook\ " -e 's/^: \(.*\) .*$/ {\"\1\", (void *) 0},/p'"\ " -e 's/^$symcode$symcode* .* \(lib.*\)$/ {\"\1\", (void *) \&\1},/p'"\ " -e 's/^$symcode$symcode* .* \(.*\)$/ {\"lib\1\", (void *) \&\1},/p'" # Handle CRLF in mingw tool chain opt_cr= case $build_os in mingw*) opt_cr=`$ECHO 'x\{0,1\}' | tr x '\015'` # option cr in regexp ;; esac # Try without a prefix underscore, then with it. for ac_symprfx in "" "_"; do # Transform symcode, sympat, and symprfx into a raw symbol and a C symbol. symxfrm="\\1 $ac_symprfx\\2 \\2" # Write the raw and C identifiers. if test "$lt_cv_nm_interface" = "MS dumpbin"; then # Fake it for dumpbin and say T for any non-static function, # D for any global variable and I for any imported variable. # Also find C++ and __fastcall symbols from MSVC++ or ICC, # which start with @ or ?. lt_cv_sys_global_symbol_pipe="$AWK ['"\ " {last_section=section; section=\$ 3};"\ " /^COFF SYMBOL TABLE/{for(i in hide) delete hide[i]};"\ " /Section length .*#relocs.*(pick any)/{hide[last_section]=1};"\ " /^ *Symbol name *: /{split(\$ 0,sn,\":\"); si=substr(sn[2],2)};"\ " /^ *Type *: code/{print \"T\",si,substr(si,length(prfx))};"\ " /^ *Type *: data/{print \"I\",si,substr(si,length(prfx))};"\ " \$ 0!~/External *\|/{next};"\ " / 0+ UNDEF /{next}; / UNDEF \([^|]\)*()/{next};"\ " {if(hide[section]) next};"\ " {f=\"D\"}; \$ 0~/\(\).*\|/{f=\"T\"};"\ " {split(\$ 0,a,/\||\r/); split(a[2],s)};"\ " s[1]~/^[@?]/{print f,s[1],s[1]; next};"\ " s[1]~prfx {split(s[1],t,\"@\"); print f,t[1],substr(t[1],length(prfx))}"\ " ' prfx=^$ac_symprfx]" else lt_cv_sys_global_symbol_pipe="$SED -n -e 's/^.*[[ ]]\($symcode$symcode*\)[[ ]][[ ]]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'" fi lt_cv_sys_global_symbol_pipe="$lt_cv_sys_global_symbol_pipe | $SED '/ __gnu_lto/d'" # Check to see that the pipe works correctly. pipe_works=no rm -f conftest* cat > conftest.$ac_ext <<_LT_EOF #ifdef __cplusplus extern "C" { #endif char nm_test_var; void nm_test_func(void); void nm_test_func(void){} #ifdef __cplusplus } #endif int main(){nm_test_var='a';nm_test_func();return(0);} _LT_EOF if AC_TRY_EVAL(ac_compile); then # Now try to grab the symbols. nlist=conftest.nm $ECHO "$as_me:$LINENO: $NM conftest.$ac_objext | $lt_cv_sys_global_symbol_pipe > $nlist" >&AS_MESSAGE_LOG_FD if eval "$NM" conftest.$ac_objext \| "$lt_cv_sys_global_symbol_pipe" \> $nlist 2>&AS_MESSAGE_LOG_FD && test -s "$nlist"; then # Try sorting and uniquifying the output. if sort "$nlist" | uniq > "$nlist"T; then mv -f "$nlist"T "$nlist" else rm -f "$nlist"T fi # Make sure that we snagged all the symbols we need. if $GREP ' nm_test_var$' "$nlist" >/dev/null; then if $GREP ' nm_test_func$' "$nlist" >/dev/null; then cat <<_LT_EOF > conftest.$ac_ext /* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and tests. */ #if defined _WIN32 || defined __CYGWIN__ || defined _WIN32_WCE /* DATA imports from DLLs on WIN32 can't be const, because runtime relocations are performed -- see ld's documentation on pseudo-relocs. */ # define LT@&t@_DLSYM_CONST #elif defined __osf__ /* This system does not cope well with relocations in const data. */ # define LT@&t@_DLSYM_CONST #else # define LT@&t@_DLSYM_CONST const #endif #ifdef __cplusplus extern "C" { #endif _LT_EOF # Now generate the symbol file. eval "$lt_cv_sys_global_symbol_to_cdecl"' < "$nlist" | $GREP -v main >> conftest.$ac_ext' cat <<_LT_EOF >> conftest.$ac_ext /* The mapping between symbol names and symbols. */ LT@&t@_DLSYM_CONST struct { const char *name; void *address; } lt__PROGRAM__LTX_preloaded_symbols[[]] = { { "@PROGRAM@", (void *) 0 }, _LT_EOF $SED "s/^$symcode$symcode* .* \(.*\)$/ {\"\1\", (void *) \&\1},/" < "$nlist" | $GREP -v main >> conftest.$ac_ext cat <<\_LT_EOF >> conftest.$ac_ext {0, (void *) 0} }; /* This works around a problem in FreeBSD linker */ #ifdef FREEBSD_WORKAROUND static const void *lt_preloaded_setup() { return lt__PROGRAM__LTX_preloaded_symbols; } #endif #ifdef __cplusplus } #endif _LT_EOF # Now try linking the two files. mv conftest.$ac_objext conftstm.$ac_objext lt_globsym_save_LIBS=$LIBS lt_globsym_save_CFLAGS=$CFLAGS LIBS=conftstm.$ac_objext CFLAGS="$CFLAGS$_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)" if AC_TRY_EVAL(ac_link) && test -s conftest$ac_exeext; then pipe_works=yes fi LIBS=$lt_globsym_save_LIBS CFLAGS=$lt_globsym_save_CFLAGS else echo "cannot find nm_test_func in $nlist" >&AS_MESSAGE_LOG_FD fi else echo "cannot find nm_test_var in $nlist" >&AS_MESSAGE_LOG_FD fi else echo "cannot run $lt_cv_sys_global_symbol_pipe" >&AS_MESSAGE_LOG_FD fi else echo "$progname: failed program was:" >&AS_MESSAGE_LOG_FD cat conftest.$ac_ext >&5 fi rm -rf conftest* conftst* # Do not use the global_symbol_pipe unless it works. if test yes = "$pipe_works"; then break else lt_cv_sys_global_symbol_pipe= fi done ]) if test -z "$lt_cv_sys_global_symbol_pipe"; then lt_cv_sys_global_symbol_to_cdecl= fi if test -z "$lt_cv_sys_global_symbol_pipe$lt_cv_sys_global_symbol_to_cdecl"; then AC_MSG_RESULT(failed) else AC_MSG_RESULT(ok) fi # Response file support. if test "$lt_cv_nm_interface" = "MS dumpbin"; then nm_file_list_spec='@' elif $NM --help 2>/dev/null | grep '[[@]]FILE' >/dev/null; then nm_file_list_spec='@' fi _LT_DECL([global_symbol_pipe], [lt_cv_sys_global_symbol_pipe], [1], [Take the output of nm and produce a listing of raw symbols and C names]) _LT_DECL([global_symbol_to_cdecl], [lt_cv_sys_global_symbol_to_cdecl], [1], [Transform the output of nm in a proper C declaration]) _LT_DECL([global_symbol_to_import], [lt_cv_sys_global_symbol_to_import], [1], [Transform the output of nm into a list of symbols to manually relocate]) _LT_DECL([global_symbol_to_c_name_address], [lt_cv_sys_global_symbol_to_c_name_address], [1], [Transform the output of nm in a C name address pair]) _LT_DECL([global_symbol_to_c_name_address_lib_prefix], [lt_cv_sys_global_symbol_to_c_name_address_lib_prefix], [1], [Transform the output of nm in a C name address pair when lib prefix is needed]) _LT_DECL([nm_interface], [lt_cv_nm_interface], [1], [The name lister interface]) _LT_DECL([], [nm_file_list_spec], [1], [Specify filename containing input files for $NM]) ]) # _LT_CMD_GLOBAL_SYMBOLS # _LT_COMPILER_PIC([TAGNAME]) # --------------------------- m4_defun([_LT_COMPILER_PIC], [m4_require([_LT_TAG_COMPILER])dnl _LT_TAGVAR(lt_prog_compiler_wl, $1)= _LT_TAGVAR(lt_prog_compiler_pic, $1)= _LT_TAGVAR(lt_prog_compiler_static, $1)= m4_if([$1], [CXX], [ # C++ specific cases for pic, static, wl, etc. if test yes = "$GXX"; then _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' case $host_os in aix*) # All AIX code is PIC. if test ia64 = "$host_cpu"; then # AIX 5 now supports IA64 processor _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' fi _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ;; amigaos*) case $host_cpu in powerpc) # see comment about AmigaOS4 .so support _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ;; m68k) # FIXME: we need at least 68020 code to build shared libraries, but # adding the '-m68020' flag to GCC prevents building anything better, # like '-m68040'. _LT_TAGVAR(lt_prog_compiler_pic, $1)='-m68020 -resident32 -malways-restore-a4' ;; esac ;; beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) # PIC is the default for these OSes. ;; mingw* | cygwin* | os2* | pw32* | cegcc*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). # Although the cygwin gcc ignores -fPIC, still need this for old-style # (--disable-auto-import) libraries m4_if([$1], [GCJ], [], [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT']) case $host_os in os2*) _LT_TAGVAR(lt_prog_compiler_static, $1)='$wl-static' ;; esac ;; darwin* | rhapsody*) # PIC is the default on this platform # Common symbols not allowed in MH_DYLIB files _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fno-common' ;; *djgpp*) # DJGPP does not support shared libraries at all _LT_TAGVAR(lt_prog_compiler_pic, $1)= ;; haiku*) # PIC is the default for Haiku. # The "-static" flag exists, but is broken. _LT_TAGVAR(lt_prog_compiler_static, $1)= ;; interix[[3-9]]*) # Interix 3.x gcc -fpic/-fPIC options generate broken code. # Instead, we relocate shared libraries at runtime. ;; sysv4*MP*) if test -d /usr/nec; then _LT_TAGVAR(lt_prog_compiler_pic, $1)=-Kconform_pic fi ;; hpux*) # PIC is the default for 64-bit PA HP-UX, but not for 32-bit # PA HP-UX. On IA64 HP-UX, PIC is the default but the pic flag # sets the default TLS model and affects inlining. case $host_cpu in hppa*64*) ;; *) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ;; esac ;; *qnx* | *nto*) # QNX uses GNU C++, but need to define -shared option too, otherwise # it will coredump. _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared' ;; *) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ;; esac else case $host_os in aix[[4-9]]*) # All AIX code is PIC. if test ia64 = "$host_cpu"; then # AIX 5 now supports IA64 processor _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' else _LT_TAGVAR(lt_prog_compiler_static, $1)='-bnso -bI:/lib/syscalls.exp' fi ;; chorus*) case $cc_basename in cxch68*) # Green Hills C++ Compiler # _LT_TAGVAR(lt_prog_compiler_static, $1)="--no_auto_instantiation -u __main -u __premain -u _abort -r $COOL_DIR/lib/libOrb.a $MVME_DIR/lib/CC/libC.a $MVME_DIR/lib/classix/libcx.s.a" ;; esac ;; mingw* | cygwin* | os2* | pw32* | cegcc*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). m4_if([$1], [GCJ], [], [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT']) ;; dgux*) case $cc_basename in ec++*) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' ;; ghcx*) # Green Hills C++ Compiler _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' ;; *) ;; esac ;; freebsd* | dragonfly* | midnightbsd*) # FreeBSD uses GNU C++ ;; hpux9* | hpux10* | hpux11*) case $cc_basename in CC*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_static, $1)='$wl-a ${wl}archive' if test ia64 != "$host_cpu"; then _LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z' fi ;; aCC*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_static, $1)='$wl-a ${wl}archive' case $host_cpu in hppa*64*|ia64*) # +Z the default ;; *) _LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z' ;; esac ;; *) ;; esac ;; interix*) # This is c89, which is MS Visual C++ (no shared libs) # Anyone wants to do a port? ;; irix5* | irix6* | nonstopux*) case $cc_basename in CC*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' # CC pic flag -KPIC is the default. ;; *) ;; esac ;; linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) case $cc_basename in KCC*) # KAI C++ Compiler _LT_TAGVAR(lt_prog_compiler_wl, $1)='--backend -Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ;; ecpc* ) # old Intel C++ for x86_64, which still supported -KPIC. _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' ;; icpc* ) # Intel C++, used to be incompatible with GCC. # ICC 10 doesn't accept -KPIC any more. _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' ;; pgCC* | pgcpp*) # Portland Group C++ compiler _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fpic' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; cxx*) # Compaq C++ # Make sure the PIC flag is empty. It appears that all Alpha # Linux and Compaq Tru64 Unix objects are PIC. _LT_TAGVAR(lt_prog_compiler_pic, $1)= _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' ;; xlc* | xlC* | bgxl[[cC]]* | mpixl[[cC]]*) # IBM XL 8.0, 9.0 on PPC and BlueGene _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-qpic' _LT_TAGVAR(lt_prog_compiler_static, $1)='-qstaticlink' ;; *) case `$CC -V 2>&1 | $SED 5q` in *Sun\ C*) # Sun C++ 5.9 _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ' ;; esac ;; esac ;; lynxos*) ;; m88k*) ;; mvs*) case $cc_basename in cxx*) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-W c,exportall' ;; *) ;; esac ;; netbsd* | netbsdelf*-gnu) ;; *qnx* | *nto*) # QNX uses GNU C++, but need to define -shared option too, otherwise # it will coredump. _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared' ;; osf3* | osf4* | osf5*) case $cc_basename in KCC*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='--backend -Wl,' ;; RCC*) # Rational C++ 2.4.1 _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' ;; cxx*) # Digital/Compaq C++ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' # Make sure the PIC flag is empty. It appears that all Alpha # Linux and Compaq Tru64 Unix objects are PIC. _LT_TAGVAR(lt_prog_compiler_pic, $1)= _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' ;; *) ;; esac ;; psos*) ;; solaris*) case $cc_basename in CC* | sunCC*) # Sun C++ 4.2, 5.x and Centerline C++ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ' ;; gcx*) # Green Hills C++ Compiler _LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC' ;; *) ;; esac ;; sunos4*) case $cc_basename in CC*) # Sun C++ 4.x _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; lcc*) # Lucid _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' ;; *) ;; esac ;; sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) case $cc_basename in CC*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; esac ;; tandem*) case $cc_basename in NCC*) # NonStop-UX NCC 3.20 _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' ;; *) ;; esac ;; vxworks*) ;; *) _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no ;; esac fi ], [ if test yes = "$GCC"; then _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' case $host_os in aix*) # All AIX code is PIC. if test ia64 = "$host_cpu"; then # AIX 5 now supports IA64 processor _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' fi _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ;; amigaos*) case $host_cpu in powerpc) # see comment about AmigaOS4 .so support _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ;; m68k) # FIXME: we need at least 68020 code to build shared libraries, but # adding the '-m68020' flag to GCC prevents building anything better, # like '-m68040'. _LT_TAGVAR(lt_prog_compiler_pic, $1)='-m68020 -resident32 -malways-restore-a4' ;; esac ;; beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) # PIC is the default for these OSes. ;; mingw* | cygwin* | pw32* | os2* | cegcc*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). # Although the cygwin gcc ignores -fPIC, still need this for old-style # (--disable-auto-import) libraries m4_if([$1], [GCJ], [], [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT']) case $host_os in os2*) _LT_TAGVAR(lt_prog_compiler_static, $1)='$wl-static' ;; esac ;; darwin* | rhapsody*) # PIC is the default on this platform # Common symbols not allowed in MH_DYLIB files _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fno-common' ;; haiku*) # PIC is the default for Haiku. # The "-static" flag exists, but is broken. _LT_TAGVAR(lt_prog_compiler_static, $1)= ;; hpux*) # PIC is the default for 64-bit PA HP-UX, but not for 32-bit # PA HP-UX. On IA64 HP-UX, PIC is the default but the pic flag # sets the default TLS model and affects inlining. case $host_cpu in hppa*64*) # +Z the default ;; *) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ;; esac ;; interix[[3-9]]*) # Interix 3.x gcc -fpic/-fPIC options generate broken code. # Instead, we relocate shared libraries at runtime. ;; msdosdjgpp*) # Just because we use GCC doesn't mean we suddenly get shared libraries # on systems that don't support them. _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no enable_shared=no ;; *nto* | *qnx*) # QNX uses GNU C++, but need to define -shared option too, otherwise # it will coredump. _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared' ;; sysv4*MP*) if test -d /usr/nec; then _LT_TAGVAR(lt_prog_compiler_pic, $1)=-Kconform_pic fi ;; *) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ;; esac case $cc_basename in nvcc*) # Cuda Compiler Driver 2.2 _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Xlinker ' if test -n "$_LT_TAGVAR(lt_prog_compiler_pic, $1)"; then _LT_TAGVAR(lt_prog_compiler_pic, $1)="-Xcompiler $_LT_TAGVAR(lt_prog_compiler_pic, $1)" fi ;; esac else # PORTME Check for flag to pass linker flags through the system compiler. case $host_os in aix*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' if test ia64 = "$host_cpu"; then # AIX 5 now supports IA64 processor _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' else _LT_TAGVAR(lt_prog_compiler_static, $1)='-bnso -bI:/lib/syscalls.exp' fi ;; darwin* | rhapsody*) # PIC is the default on this platform # Common symbols not allowed in MH_DYLIB files _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fno-common' case $cc_basename in nagfor*) # NAG Fortran compiler _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,-Wl,,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; esac ;; mingw* | cygwin* | pw32* | os2* | cegcc*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). m4_if([$1], [GCJ], [], [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT']) case $host_os in os2*) _LT_TAGVAR(lt_prog_compiler_static, $1)='$wl-static' ;; esac ;; hpux9* | hpux10* | hpux11*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but # not for PA HP-UX. case $host_cpu in hppa*64*|ia64*) # +Z the default ;; *) _LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z' ;; esac # Is there a better lt_prog_compiler_static that works with the bundled CC? _LT_TAGVAR(lt_prog_compiler_static, $1)='$wl-a ${wl}archive' ;; irix5* | irix6* | nonstopux*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' # PIC (with -KPIC) is the default. _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' ;; linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) case $cc_basename in # old Intel for x86_64, which still supported -KPIC. ecc*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' ;; # flang / f18. f95 an alias for gfortran or flang on Debian flang* | f18* | f95*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' ;; # icc used to be incompatible with GCC. # ICC 10 doesn't accept -KPIC any more. icc* | ifort*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' ;; # Lahey Fortran 8.1. lf95*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='--shared' _LT_TAGVAR(lt_prog_compiler_static, $1)='--static' ;; nagfor*) # NAG Fortran compiler _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,-Wl,,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; tcc*) # Fabrice Bellard et al's Tiny C Compiler _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' ;; pgcc* | pgf77* | pgf90* | pgf95* | pgfortran*) # Portland Group compilers (*not* the Pentium gcc compiler, # which looks to be a dead project) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fpic' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; ccc*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' # All Alpha code is PIC. _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' ;; xl* | bgxl* | bgf* | mpixl*) # IBM XL C 8.0/Fortran 10.1, 11.1 on PPC and BlueGene _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-qpic' _LT_TAGVAR(lt_prog_compiler_static, $1)='-qstaticlink' ;; *) case `$CC -V 2>&1 | $SED 5q` in *Sun\ Ceres\ Fortran* | *Sun*Fortran*\ [[1-7]].* | *Sun*Fortran*\ 8.[[0-3]]*) # Sun Fortran 8.3 passes all unrecognized flags to the linker _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' _LT_TAGVAR(lt_prog_compiler_wl, $1)='' ;; *Sun\ F* | *Sun*Fortran*) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ' ;; *Sun\ C*) # Sun C 5.9 _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' ;; *Intel*\ [[CF]]*Compiler*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' ;; *Portland\ Group*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fpic' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; esac ;; esac ;; newsos6) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; *nto* | *qnx*) # QNX uses GNU C++, but need to define -shared option too, otherwise # it will coredump. _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared' ;; osf3* | osf4* | osf5*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' # All OSF/1 code is PIC. _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' ;; rdos*) _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' ;; solaris*) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' case $cc_basename in f77* | f90* | f95* | sunf77* | sunf90* | sunf95*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ';; *) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,';; esac ;; sunos4*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; sysv4 | sysv4.2uw2* | sysv4.3*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; sysv4*MP*) if test -d /usr/nec; then _LT_TAGVAR(lt_prog_compiler_pic, $1)='-Kconform_pic' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' fi ;; sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; unicos*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no ;; uts4*) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; *) _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no ;; esac fi ]) case $host_os in # For platforms that do not support PIC, -DPIC is meaningless: *djgpp*) _LT_TAGVAR(lt_prog_compiler_pic, $1)= ;; *) _LT_TAGVAR(lt_prog_compiler_pic, $1)="$_LT_TAGVAR(lt_prog_compiler_pic, $1)@&t@m4_if([$1],[],[ -DPIC],[m4_if([$1],[CXX],[ -DPIC],[])])" ;; esac AC_CACHE_CHECK([for $compiler option to produce PIC], [_LT_TAGVAR(lt_cv_prog_compiler_pic, $1)], [_LT_TAGVAR(lt_cv_prog_compiler_pic, $1)=$_LT_TAGVAR(lt_prog_compiler_pic, $1)]) _LT_TAGVAR(lt_prog_compiler_pic, $1)=$_LT_TAGVAR(lt_cv_prog_compiler_pic, $1) # # Check to make sure the PIC flag actually works. # if test -n "$_LT_TAGVAR(lt_prog_compiler_pic, $1)"; then _LT_COMPILER_OPTION([if $compiler PIC flag $_LT_TAGVAR(lt_prog_compiler_pic, $1) works], [_LT_TAGVAR(lt_cv_prog_compiler_pic_works, $1)], [$_LT_TAGVAR(lt_prog_compiler_pic, $1)@&t@m4_if([$1],[],[ -DPIC],[m4_if([$1],[CXX],[ -DPIC],[])])], [], [case $_LT_TAGVAR(lt_prog_compiler_pic, $1) in "" | " "*) ;; *) _LT_TAGVAR(lt_prog_compiler_pic, $1)=" $_LT_TAGVAR(lt_prog_compiler_pic, $1)" ;; esac], [_LT_TAGVAR(lt_prog_compiler_pic, $1)= _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no]) fi _LT_TAGDECL([pic_flag], [lt_prog_compiler_pic], [1], [Additional compiler flags for building library objects]) _LT_TAGDECL([wl], [lt_prog_compiler_wl], [1], [How to pass a linker flag through the compiler]) # # Check to make sure the static flag actually works. # wl=$_LT_TAGVAR(lt_prog_compiler_wl, $1) eval lt_tmp_static_flag=\"$_LT_TAGVAR(lt_prog_compiler_static, $1)\" _LT_LINKER_OPTION([if $compiler static flag $lt_tmp_static_flag works], _LT_TAGVAR(lt_cv_prog_compiler_static_works, $1), $lt_tmp_static_flag, [], [_LT_TAGVAR(lt_prog_compiler_static, $1)=]) _LT_TAGDECL([link_static_flag], [lt_prog_compiler_static], [1], [Compiler flag to prevent dynamic linking]) ])# _LT_COMPILER_PIC # _LT_LINKER_SHLIBS([TAGNAME]) # ---------------------------- # See if the linker supports building shared libraries. m4_defun([_LT_LINKER_SHLIBS], [AC_REQUIRE([LT_PATH_LD])dnl AC_REQUIRE([LT_PATH_NM])dnl m4_require([_LT_PATH_MANIFEST_TOOL])dnl m4_require([_LT_FILEUTILS_DEFAULTS])dnl m4_require([_LT_DECL_EGREP])dnl m4_require([_LT_DECL_SED])dnl m4_require([_LT_CMD_GLOBAL_SYMBOLS])dnl m4_require([_LT_TAG_COMPILER])dnl AC_MSG_CHECKING([whether the $compiler linker ($LD) supports shared libraries]) m4_if([$1], [CXX], [ _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' _LT_TAGVAR(exclude_expsyms, $1)=['_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*'] case $host_os in aix[[4-9]]*) # If we're using GNU nm, then we don't want the "-C" option. # -C means demangle to GNU nm, but means don't demangle to AIX nm. # Without the "-l" option, or with the "-B" option, AIX nm treats # weak defined symbols like other global defined symbols, whereas # GNU nm marks them as "W". # While the 'weak' keyword is ignored in the Export File, we need # it in the Import File for the 'aix-soname' feature, so we have # to replace the "-B" option with "-P" for AIX nm. if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then _LT_TAGVAR(export_symbols_cmds, $1)='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && ([substr](\$ 3,1,1) != ".")) { if (\$ 2 == "W") { print \$ 3 " weak" } else { print \$ 3 } } }'\'' | sort -u > $export_symbols' else _LT_TAGVAR(export_symbols_cmds, $1)='`func_echo_all $NM | $SED -e '\''s/B\([[^B]]*\)$/P\1/'\''` -PCpgl $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "L") || (\$ 2 == "W") || (\$ 2 == "V") || (\$ 2 == "Z")) && ([substr](\$ 1,1,1) != ".")) { if ((\$ 2 == "W") || (\$ 2 == "V") || (\$ 2 == "Z")) { print \$ 1 " weak" } else { print \$ 1 } } }'\'' | sort -u > $export_symbols' fi ;; pw32*) _LT_TAGVAR(export_symbols_cmds, $1)=$ltdll_cmds ;; cygwin* | mingw* | cegcc*) case $cc_basename in cl* | icl*) _LT_TAGVAR(exclude_expsyms, $1)='_NULL_IMPORT_DESCRIPTOR|_IMPORT_DESCRIPTOR_.*' ;; *) _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1 DATA/;s/^.*[[ ]]__nm__\([[^ ]]*\)[[ ]][[^ ]]*/\1 DATA/;/^I[[ ]]/d;/^[[AITW]][[ ]]/s/.* //'\'' | sort | uniq > $export_symbols' _LT_TAGVAR(exclude_expsyms, $1)=['[_]+GLOBAL_OFFSET_TABLE_|[_]+GLOBAL__[FID]_.*|[_]+head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname'] ;; esac ;; linux* | k*bsd*-gnu | gnu*) _LT_TAGVAR(link_all_deplibs, $1)=no ;; *) _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' ;; esac ], [ runpath_var= _LT_TAGVAR(allow_undefined_flag, $1)= _LT_TAGVAR(always_export_symbols, $1)=no _LT_TAGVAR(archive_cmds, $1)= _LT_TAGVAR(archive_expsym_cmds, $1)= _LT_TAGVAR(compiler_needs_object, $1)=no _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no _LT_TAGVAR(export_dynamic_flag_spec, $1)= _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' _LT_TAGVAR(hardcode_automatic, $1)=no _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_direct_absolute, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)= _LT_TAGVAR(hardcode_libdir_separator, $1)= _LT_TAGVAR(hardcode_minus_L, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported _LT_TAGVAR(inherit_rpath, $1)=no _LT_TAGVAR(link_all_deplibs, $1)=unknown _LT_TAGVAR(module_cmds, $1)= _LT_TAGVAR(module_expsym_cmds, $1)= _LT_TAGVAR(old_archive_from_new_cmds, $1)= _LT_TAGVAR(old_archive_from_expsyms_cmds, $1)= _LT_TAGVAR(thread_safe_flag_spec, $1)= _LT_TAGVAR(whole_archive_flag_spec, $1)= # include_expsyms should be a list of space-separated symbols to be *always* # included in the symbol list _LT_TAGVAR(include_expsyms, $1)= # exclude_expsyms can be an extended regexp of symbols to exclude # it will be wrapped by ' (' and ')$', so one must not match beginning or # end of line. Example: 'a|bc|.*d.*' will exclude the symbols 'a' and 'bc', # as well as any symbol that contains 'd'. _LT_TAGVAR(exclude_expsyms, $1)=['_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*'] # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out # platforms (ab)use it in PIC code, but their linkers get confused if # the symbol is explicitly referenced. Since portable code cannot # rely on this symbol name, it's probably fine to never include it in # preloaded symbol tables. # Exclude shared library initialization/finalization symbols. dnl Note also adjust exclude_expsyms for C++ above. extract_expsyms_cmds= case $host_os in cygwin* | mingw* | pw32* | cegcc*) # FIXME: the MSVC++ and ICC port hasn't been tested in a loooong time # When not using gcc, we currently assume that we are using # Microsoft Visual C++ or Intel C++ Compiler. if test yes != "$GCC"; then with_gnu_ld=no fi ;; interix*) # we just hope/assume this is gcc and not c89 (= MSVC++ or ICC) with_gnu_ld=yes ;; openbsd* | bitrig*) with_gnu_ld=no ;; linux* | k*bsd*-gnu | gnu*) _LT_TAGVAR(link_all_deplibs, $1)=no ;; esac _LT_TAGVAR(ld_shlibs, $1)=yes # On some targets, GNU ld is compatible enough with the native linker # that we're better off using the native interface for both. lt_use_gnu_ld_interface=no if test yes = "$with_gnu_ld"; then case $host_os in aix*) # The AIX port of GNU ld has always aspired to compatibility # with the native linker. However, as the warning in the GNU ld # block says, versions before 2.19.5* couldn't really create working # shared libraries, regardless of the interface used. case `$LD -v 2>&1` in *\ \(GNU\ Binutils\)\ 2.19.5*) ;; *\ \(GNU\ Binutils\)\ 2.[[2-9]]*) ;; *\ \(GNU\ Binutils\)\ [[3-9]]*) ;; *) lt_use_gnu_ld_interface=yes ;; esac ;; *) lt_use_gnu_ld_interface=yes ;; esac fi if test yes = "$lt_use_gnu_ld_interface"; then # If archive_cmds runs LD, not CC, wlarc should be empty wlarc='$wl' # Set some defaults for GNU ld with shared library support. These # are reset later if shared libraries are not supported. Putting them # here allows them to be overridden if necessary. runpath_var=LD_RUN_PATH _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl--export-dynamic' # ancient GNU ld didn't support --whole-archive et. al. if $LD --help 2>&1 | $GREP 'no-whole-archive' > /dev/null; then _LT_TAGVAR(whole_archive_flag_spec, $1)=$wlarc'--whole-archive$convenience '$wlarc'--no-whole-archive' else _LT_TAGVAR(whole_archive_flag_spec, $1)= fi supports_anon_versioning=no case `$LD -v | $SED -e 's/([[^)]]\+)\s\+//' 2>&1` in *GNU\ gold*) supports_anon_versioning=yes ;; *\ [[01]].* | *\ 2.[[0-9]].* | *\ 2.10.*) ;; # catch versions < 2.11 *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ... *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ... *\ 2.11.*) ;; # other 2.11 versions *) supports_anon_versioning=yes ;; esac # See if GNU ld supports shared libraries. case $host_os in aix[[3-9]]*) # On AIX/PPC, the GNU linker is very broken if test ia64 != "$host_cpu"; then _LT_TAGVAR(ld_shlibs, $1)=no cat <<_LT_EOF 1>&2 *** Warning: the GNU linker, at least up to release 2.19, is reported *** to be unable to reliably create shared libraries on AIX. *** Therefore, libtool is disabling shared libraries support. If you *** really care for shared libraries, you may want to install binutils *** 2.20 or above, or modify your PATH so that a non-GNU linker is found. *** You will then need to restart the configuration process. _LT_EOF fi ;; amigaos*) case $host_cpu in powerpc) # see comment about AmigaOS4 .so support _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='' ;; m68k) _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_minus_L, $1)=yes ;; esac ;; beos*) if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then _LT_TAGVAR(allow_undefined_flag, $1)=unsupported # Joseph Beckenbach says some releases of gcc # support --undefined. This deserves some investigation. FIXME _LT_TAGVAR(archive_cmds, $1)='$CC -nostart $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; cygwin* | mingw* | pw32* | cegcc*) # _LT_TAGVAR(hardcode_libdir_flag_spec, $1) is actually meaningless, # as there is no search path for DLLs. _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl--export-all-symbols' _LT_TAGVAR(allow_undefined_flag, $1)=unsupported _LT_TAGVAR(always_export_symbols, $1)=no _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1 DATA/;s/^.*[[ ]]__nm__\([[^ ]]*\)[[ ]][[^ ]]*/\1 DATA/;/^I[[ ]]/d;/^[[AITW]][[ ]]/s/.* //'\'' | sort | uniq > $export_symbols' _LT_TAGVAR(exclude_expsyms, $1)=['[_]+GLOBAL_OFFSET_TABLE_|[_]+GLOBAL__[FID]_.*|[_]+head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname'] if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname $wl--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' # If the export-symbols file already is a .def file, use it as # is; otherwise, prepend EXPORTS... _LT_TAGVAR(archive_expsym_cmds, $1)='if _LT_DLL_DEF_P([$export_symbols]); then cp $export_symbols $output_objdir/$soname.def; else echo EXPORTS > $output_objdir/$soname.def; cat $export_symbols >> $output_objdir/$soname.def; fi~ $CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname $wl--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; haiku*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' _LT_TAGVAR(link_all_deplibs, $1)=yes ;; os2*) _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_minus_L, $1)=yes _LT_TAGVAR(allow_undefined_flag, $1)=unsupported shrext_cmds=.dll _LT_TAGVAR(archive_cmds, $1)='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~ $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~ $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~ $ECHO EXPORTS >> $output_objdir/$libname.def~ emxexp $libobjs | $SED /"_DLL_InitTerm"/d >> $output_objdir/$libname.def~ $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~ emximp -o $lib $output_objdir/$libname.def' _LT_TAGVAR(archive_expsym_cmds, $1)='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~ $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~ $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~ $ECHO EXPORTS >> $output_objdir/$libname.def~ prefix_cmds="$SED"~ if test EXPORTS = "`$SED 1q $export_symbols`"; then prefix_cmds="$prefix_cmds -e 1d"; fi~ prefix_cmds="$prefix_cmds -e \"s/^\(.*\)$/_\1/g\""~ cat $export_symbols | $prefix_cmds >> $output_objdir/$libname.def~ $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~ emximp -o $lib $output_objdir/$libname.def' _LT_TAGVAR(old_archive_From_new_cmds, $1)='emximp -o $output_objdir/${libname}_dll.a $output_objdir/$libname.def' _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes _LT_TAGVAR(file_list_spec, $1)='@' ;; interix[[3-9]]*) _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath,$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-E' # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. # Instead, shared libraries are loaded at an image base (0x10000000 by # default) and relocated if they conflict, which is a slow very memory # consuming and fragmenting process. To avoid this, we pick a random, # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link # time. Moving up from 0x10000000 also allows more sbrk(2) space. _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-h,$soname $wl--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$SED "s|^|_|" $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-h,$soname $wl--retain-symbols-file,$output_objdir/$soname.expsym $wl--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' ;; gnu* | linux* | tpf* | k*bsd*-gnu | kopensolaris*-gnu) tmp_diet=no if test linux-dietlibc = "$host_os"; then case $cc_basename in diet\ *) tmp_diet=yes;; # linux-dietlibc with static linking (!diet-dyn) esac fi if $LD --help 2>&1 | $EGREP ': supported targets:.* elf' > /dev/null \ && test no = "$tmp_diet" then tmp_addflag=' $pic_flag' tmp_sharedflag='-shared' case $cc_basename,$host_cpu in pgcc*) # Portland Group C compiler _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive' tmp_addflag=' $pic_flag' ;; pgf77* | pgf90* | pgf95* | pgfortran*) # Portland Group f77 and f90 compilers _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive' tmp_addflag=' $pic_flag -Mnomain' ;; ecc*,ia64* | icc*,ia64*) # Intel C compiler on ia64 tmp_addflag=' -i_dynamic' ;; efc*,ia64* | ifort*,ia64*) # Intel Fortran compiler on ia64 tmp_addflag=' -i_dynamic -nofor_main' ;; ifc* | ifort*) # Intel Fortran compiler tmp_addflag=' -nofor_main' ;; lf95*) # Lahey Fortran 8.1 _LT_TAGVAR(whole_archive_flag_spec, $1)= tmp_sharedflag='--shared' ;; nagfor*) # NAGFOR 5.3 tmp_sharedflag='-Wl,-shared' ;; xl[[cC]]* | bgxl[[cC]]* | mpixl[[cC]]*) # IBM XL C 8.0 on PPC (deal with xlf below) tmp_sharedflag='-qmkshrobj' tmp_addflag= ;; nvcc*) # Cuda Compiler Driver 2.2 _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive' _LT_TAGVAR(compiler_needs_object, $1)=yes ;; esac case `$CC -V 2>&1 | $SED 5q` in *Sun\ C*) # Sun C 5.9 _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive' _LT_TAGVAR(compiler_needs_object, $1)=yes tmp_sharedflag='-G' ;; *Sun\ F*) # Sun Fortran 8.3 tmp_sharedflag='-G' ;; esac _LT_TAGVAR(archive_cmds, $1)='$CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' if test yes = "$supports_anon_versioning"; then _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~ cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ echo "local: *; };" >> $output_objdir/$libname.ver~ $CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-version-script $wl$output_objdir/$libname.ver -o $lib' fi case $cc_basename in tcc*) _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='-rdynamic' ;; xlf* | bgf* | bgxlf* | mpixlf*) # IBM XL Fortran 10.1 on PPC cannot create shared libs itself _LT_TAGVAR(whole_archive_flag_spec, $1)='--whole-archive$convenience --no-whole-archive' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir' _LT_TAGVAR(archive_cmds, $1)='$LD -shared $libobjs $deplibs $linker_flags -soname $soname -o $lib' if test yes = "$supports_anon_versioning"; then _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~ cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ echo "local: *; };" >> $output_objdir/$libname.ver~ $LD -shared $libobjs $deplibs $linker_flags -soname $soname -version-script $output_objdir/$libname.ver -o $lib' fi ;; esac else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; netbsd* | netbsdelf*-gnu) if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib' wlarc= else _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' fi ;; solaris*) if $LD -v 2>&1 | $GREP 'BFD 2\.8' > /dev/null; then _LT_TAGVAR(ld_shlibs, $1)=no cat <<_LT_EOF 1>&2 *** Warning: The releases 2.8.* of the GNU linker cannot reliably *** create shared libraries on Solaris systems. Therefore, libtool *** is disabling shared libraries support. We urge you to upgrade GNU *** binutils to release 2.9.1 or newer. Another option is to modify *** your PATH or compiler configuration so that the native linker is *** used, and then restart. _LT_EOF elif $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*) case `$LD -v 2>&1` in *\ [[01]].* | *\ 2.[[0-9]].* | *\ 2.1[[0-5]].*) _LT_TAGVAR(ld_shlibs, $1)=no cat <<_LT_EOF 1>&2 *** Warning: Releases of the GNU linker prior to 2.16.91.0.3 cannot *** reliably create shared libraries on SCO systems. Therefore, libtool *** is disabling shared libraries support. We urge you to upgrade GNU *** binutils to release 2.16.91.0.3 or newer. Another option is to modify *** your PATH or compiler configuration so that the native linker is *** used, and then restart. _LT_EOF ;; *) # For security reasons, it is highly recommended that you always # use absolute paths for naming shared libraries, and exclude the # DT_RUNPATH tag from executables and libraries. But doing so # requires that you compile everything twice, which is a pain. if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir' _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; esac ;; sunos4*) _LT_TAGVAR(archive_cmds, $1)='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags' wlarc= _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; *) if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; esac if test no = "$_LT_TAGVAR(ld_shlibs, $1)"; then runpath_var= _LT_TAGVAR(hardcode_libdir_flag_spec, $1)= _LT_TAGVAR(export_dynamic_flag_spec, $1)= _LT_TAGVAR(whole_archive_flag_spec, $1)= fi else # PORTME fill in a description of your system's linker (not GNU ld) case $host_os in aix3*) _LT_TAGVAR(allow_undefined_flag, $1)=unsupported _LT_TAGVAR(always_export_symbols, $1)=yes _LT_TAGVAR(archive_expsym_cmds, $1)='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname' # Note: this linker hardcodes the directories in LIBPATH if there # are no directories specified by -L. _LT_TAGVAR(hardcode_minus_L, $1)=yes if test yes = "$GCC" && test -z "$lt_prog_compiler_static"; then # Neither direct hardcoding nor static linking is supported with a # broken collect2. _LT_TAGVAR(hardcode_direct, $1)=unsupported fi ;; aix[[4-9]]*) if test ia64 = "$host_cpu"; then # On IA64, the linker does run time linking by default, so we don't # have to do anything special. aix_use_runtimelinking=no exp_sym_flag='-Bexport' no_entry_flag= else # If we're using GNU nm, then we don't want the "-C" option. # -C means demangle to GNU nm, but means don't demangle to AIX nm. # Without the "-l" option, or with the "-B" option, AIX nm treats # weak defined symbols like other global defined symbols, whereas # GNU nm marks them as "W". # While the 'weak' keyword is ignored in the Export File, we need # it in the Import File for the 'aix-soname' feature, so we have # to replace the "-B" option with "-P" for AIX nm. if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then _LT_TAGVAR(export_symbols_cmds, $1)='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && ([substr](\$ 3,1,1) != ".")) { if (\$ 2 == "W") { print \$ 3 " weak" } else { print \$ 3 } } }'\'' | sort -u > $export_symbols' else _LT_TAGVAR(export_symbols_cmds, $1)='`func_echo_all $NM | $SED -e '\''s/B\([[^B]]*\)$/P\1/'\''` -PCpgl $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "L") || (\$ 2 == "W") || (\$ 2 == "V") || (\$ 2 == "Z")) && ([substr](\$ 1,1,1) != ".")) { if ((\$ 2 == "W") || (\$ 2 == "V") || (\$ 2 == "Z")) { print \$ 1 " weak" } else { print \$ 1 } } }'\'' | sort -u > $export_symbols' fi aix_use_runtimelinking=no # Test if we are trying to use run time linking or normal # AIX style linking. If -brtl is somewhere in LDFLAGS, we # have runtime linking enabled, and use it for executables. # For shared libraries, we enable/disable runtime linking # depending on the kind of the shared library created - # when "with_aix_soname,aix_use_runtimelinking" is: # "aix,no" lib.a(lib.so.V) shared, rtl:no, for executables # "aix,yes" lib.so shared, rtl:yes, for executables # lib.a static archive # "both,no" lib.so.V(shr.o) shared, rtl:yes # lib.a(lib.so.V) shared, rtl:no, for executables # "both,yes" lib.so.V(shr.o) shared, rtl:yes, for executables # lib.a(lib.so.V) shared, rtl:no # "svr4,*" lib.so.V(shr.o) shared, rtl:yes, for executables # lib.a static archive case $host_os in aix4.[[23]]|aix4.[[23]].*|aix[[5-9]]*) for ld_flag in $LDFLAGS; do if (test x-brtl = "x$ld_flag" || test x-Wl,-brtl = "x$ld_flag"); then aix_use_runtimelinking=yes break fi done if test svr4,no = "$with_aix_soname,$aix_use_runtimelinking"; then # With aix-soname=svr4, we create the lib.so.V shared archives only, # so we don't have lib.a shared libs to link our executables. # We have to force runtime linking in this case. aix_use_runtimelinking=yes LDFLAGS="$LDFLAGS -Wl,-brtl" fi ;; esac exp_sym_flag='-bexport' no_entry_flag='-bnoentry' fi # When large executables or shared objects are built, AIX ld can # have problems creating the table of contents. If linking a library # or program results in "error TOC overflow" add -mminimal-toc to # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. _LT_TAGVAR(archive_cmds, $1)='' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_direct_absolute, $1)=yes _LT_TAGVAR(hardcode_libdir_separator, $1)=':' _LT_TAGVAR(link_all_deplibs, $1)=yes _LT_TAGVAR(file_list_spec, $1)='$wl-f,' case $with_aix_soname,$aix_use_runtimelinking in aix,*) ;; # traditional, no import file svr4,* | *,yes) # use import file # The Import File defines what to hardcode. _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_direct_absolute, $1)=no ;; esac if test yes = "$GCC"; then case $host_os in aix4.[[012]]|aix4.[[012]].*) # We only want to do this on AIX 4.2 and lower, the check # below for broken collect2 doesn't work under 4.3+ collect2name=`$CC -print-prog-name=collect2` if test -f "$collect2name" && strings "$collect2name" | $GREP resolve_lib_name >/dev/null then # We have reworked collect2 : else # We have old collect2 _LT_TAGVAR(hardcode_direct, $1)=unsupported # It fails to find uninstalled libraries when the uninstalled # path is not listed in the libpath. Setting hardcode_minus_L # to unsupported forces relinking _LT_TAGVAR(hardcode_minus_L, $1)=yes _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)= fi ;; esac shared_flag='-shared' if test yes = "$aix_use_runtimelinking"; then shared_flag="$shared_flag "'$wl-G' fi # Need to ensure runtime linking is disabled for the traditional # shared library, or the linker may eventually find shared libraries # /with/ Import File - we do not want to mix them. shared_flag_aix='-shared' shared_flag_svr4='-shared $wl-G' else # not using gcc if test ia64 = "$host_cpu"; then # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release # chokes on -Wl,-G. The following line is correct: shared_flag='-G' else if test yes = "$aix_use_runtimelinking"; then shared_flag='$wl-G' else shared_flag='$wl-bM:SRE' fi shared_flag_aix='$wl-bM:SRE' shared_flag_svr4='$wl-G' fi fi _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-bexpall' # It seems that -bexpall does not export symbols beginning with # underscore (_), so it is better to generate a list of symbols to export. _LT_TAGVAR(always_export_symbols, $1)=yes if test aix,yes = "$with_aix_soname,$aix_use_runtimelinking"; then # Warning - without using the other runtime loading flags (-brtl), # -berok will link without error, but may produce a broken library. _LT_TAGVAR(allow_undefined_flag, $1)='-berok' # Determine the default libpath from the value encoded in an # empty executable. _LT_SYS_MODULE_PATH_AIX([$1]) _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-blibpath:$libdir:'"$aix_libpath" _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $deplibs $wl'$no_entry_flag' $compiler_flags `if test -n "$allow_undefined_flag"; then func_echo_all "$wl$allow_undefined_flag"; else :; fi` $wl'$exp_sym_flag:\$export_symbols' '$shared_flag else if test ia64 = "$host_cpu"; then _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-R $libdir:/usr/lib:/lib' _LT_TAGVAR(allow_undefined_flag, $1)="-z nodefs" _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\$wl$no_entry_flag"' $compiler_flags $wl$allow_undefined_flag '"\$wl$exp_sym_flag:\$export_symbols" else # Determine the default libpath from the value encoded in an # empty executable. _LT_SYS_MODULE_PATH_AIX([$1]) _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-blibpath:$libdir:'"$aix_libpath" # Warning - without using the other run time loading flags, # -berok will link without error, but may produce a broken library. _LT_TAGVAR(no_undefined_flag, $1)=' $wl-bernotok' _LT_TAGVAR(allow_undefined_flag, $1)=' $wl-berok' if test yes = "$with_gnu_ld"; then # We only use this code for GNU lds that support --whole-archive. _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl--whole-archive$convenience $wl--no-whole-archive' else # Exported symbols can be pulled into shared objects from archives _LT_TAGVAR(whole_archive_flag_spec, $1)='$convenience' fi _LT_TAGVAR(archive_cmds_need_lc, $1)=yes _LT_TAGVAR(archive_expsym_cmds, $1)='$RM -r $output_objdir/$realname.d~$MKDIR $output_objdir/$realname.d' # -brtl affects multiple linker settings, -berok does not and is overridden later compiler_flags_filtered='`func_echo_all "$compiler_flags " | $SED -e "s%-brtl\\([[, ]]\\)%-berok\\1%g"`' if test svr4 != "$with_aix_soname"; then # This is similar to how AIX traditionally builds its shared libraries. _LT_TAGVAR(archive_expsym_cmds, $1)="$_LT_TAGVAR(archive_expsym_cmds, $1)"'~$CC '$shared_flag_aix' -o $output_objdir/$realname.d/$soname $libobjs $deplibs $wl-bnoentry '$compiler_flags_filtered'$wl-bE:$export_symbols$allow_undefined_flag~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$realname.d/$soname' fi if test aix != "$with_aix_soname"; then _LT_TAGVAR(archive_expsym_cmds, $1)="$_LT_TAGVAR(archive_expsym_cmds, $1)"'~$CC '$shared_flag_svr4' -o $output_objdir/$realname.d/$shared_archive_member_spec.o $libobjs $deplibs $wl-bnoentry '$compiler_flags_filtered'$wl-bE:$export_symbols$allow_undefined_flag~$STRIP -e $output_objdir/$realname.d/$shared_archive_member_spec.o~( func_echo_all "#! $soname($shared_archive_member_spec.o)"; if test shr_64 = "$shared_archive_member_spec"; then func_echo_all "# 64"; else func_echo_all "# 32"; fi; cat $export_symbols ) > $output_objdir/$realname.d/$shared_archive_member_spec.imp~$AR $AR_FLAGS $output_objdir/$soname $output_objdir/$realname.d/$shared_archive_member_spec.o $output_objdir/$realname.d/$shared_archive_member_spec.imp' else # used by -dlpreopen to get the symbols _LT_TAGVAR(archive_expsym_cmds, $1)="$_LT_TAGVAR(archive_expsym_cmds, $1)"'~$MV $output_objdir/$realname.d/$soname $output_objdir' fi _LT_TAGVAR(archive_expsym_cmds, $1)="$_LT_TAGVAR(archive_expsym_cmds, $1)"'~$RM -r $output_objdir/$realname.d' fi fi ;; amigaos*) case $host_cpu in powerpc) # see comment about AmigaOS4 .so support _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='' ;; m68k) _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_minus_L, $1)=yes ;; esac ;; bsdi[[45]]*) _LT_TAGVAR(export_dynamic_flag_spec, $1)=-rdynamic ;; cygwin* | mingw* | pw32* | cegcc*) # When not using gcc, we currently assume that we are using # Microsoft Visual C++ or Intel C++ Compiler. # hardcode_libdir_flag_spec is actually meaningless, as there is # no search path for DLLs. case $cc_basename in cl* | icl*) # Native MSVC or ICC _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=' ' _LT_TAGVAR(allow_undefined_flag, $1)=unsupported _LT_TAGVAR(always_export_symbols, $1)=yes _LT_TAGVAR(file_list_spec, $1)='@' # Tell ltmain to make .lib files, not .a files. libext=lib # Tell ltmain to make .dll files, not .so files. shrext_cmds=.dll # FIXME: Setting linknames here is a bad hack. _LT_TAGVAR(archive_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~linknames=' _LT_TAGVAR(archive_expsym_cmds, $1)='if _LT_DLL_DEF_P([$export_symbols]); then cp "$export_symbols" "$output_objdir/$soname.def"; echo "$tool_output_objdir$soname.def" > "$output_objdir/$soname.exp"; else $SED -e '\''s/^/-link -EXPORT:/'\'' < $export_symbols > $output_objdir/$soname.exp; fi~ $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~ linknames=' # The linker will not automatically build a static lib if we build a DLL. # _LT_TAGVAR(old_archive_from_new_cmds, $1)='true' _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes _LT_TAGVAR(exclude_expsyms, $1)='_NULL_IMPORT_DESCRIPTOR|_IMPORT_DESCRIPTOR_.*' _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1,DATA/'\'' | $SED -e '\''/^[[AITW]][[ ]]/s/.*[[ ]]//'\'' | sort | uniq > $export_symbols' # Don't use ranlib _LT_TAGVAR(old_postinstall_cmds, $1)='chmod 644 $oldlib' _LT_TAGVAR(postlink_cmds, $1)='lt_outputfile="@OUTPUT@"~ lt_tool_outputfile="@TOOL_OUTPUT@"~ case $lt_outputfile in *.exe|*.EXE) ;; *) lt_outputfile=$lt_outputfile.exe lt_tool_outputfile=$lt_tool_outputfile.exe ;; esac~ if test : != "$MANIFEST_TOOL" && test -f "$lt_outputfile.manifest"; then $MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1; $RM "$lt_outputfile.manifest"; fi' ;; *) # Assume MSVC and ICC wrapper _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=' ' _LT_TAGVAR(allow_undefined_flag, $1)=unsupported # Tell ltmain to make .lib files, not .a files. libext=lib # Tell ltmain to make .dll files, not .so files. shrext_cmds=.dll # FIXME: Setting linknames here is a bad hack. _LT_TAGVAR(archive_cmds, $1)='$CC -o $lib $libobjs $compiler_flags `func_echo_all "$deplibs" | $SED '\''s/ -lc$//'\''` -link -dll~linknames=' # The linker will automatically build a .lib file if we build a DLL. _LT_TAGVAR(old_archive_from_new_cmds, $1)='true' # FIXME: Should let the user specify the lib program. _LT_TAGVAR(old_archive_cmds, $1)='lib -OUT:$oldlib$oldobjs$old_deplibs' _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes ;; esac ;; darwin* | rhapsody*) _LT_DARWIN_LINKER_FEATURES($1) ;; dgux*) _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor # support. Future versions do this automatically, but an explicit c++rt0.o # does not break anything, and helps significantly (at the cost of a little # extra space). freebsd2.2*) _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; # Unfortunately, older versions of FreeBSD 2 do not have this feature. freebsd2.*) _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_minus_L, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; # FreeBSD 3 and greater uses gcc -shared to do shared libraries. freebsd* | dragonfly* | midnightbsd*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; hpux9*) if test yes = "$GCC"; then _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -shared $pic_flag $wl+b $wl$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test "x$output_objdir/$soname" = "x$lib" || mv $output_objdir/$soname $lib' else _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test "x$output_objdir/$soname" = "x$lib" || mv $output_objdir/$soname $lib' fi _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl+b $wl$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: _LT_TAGVAR(hardcode_direct, $1)=yes # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. _LT_TAGVAR(hardcode_minus_L, $1)=yes _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-E' ;; hpux10*) if test yes,no = "$GCC,$with_gnu_ld"; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $libobjs $deplibs $compiler_flags' else _LT_TAGVAR(archive_cmds, $1)='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' fi if test no = "$with_gnu_ld"; then _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl+b $wl$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_direct_absolute, $1)=yes _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-E' # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. _LT_TAGVAR(hardcode_minus_L, $1)=yes fi ;; hpux11*) if test yes,no = "$GCC,$with_gnu_ld"; then case $host_cpu in hppa*64*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared $wl+h $wl$soname -o $lib $libobjs $deplibs $compiler_flags' ;; ia64*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $wl+h $wl$soname $wl+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' ;; *) _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $libobjs $deplibs $compiler_flags' ;; esac else case $host_cpu in hppa*64*) _LT_TAGVAR(archive_cmds, $1)='$CC -b $wl+h $wl$soname -o $lib $libobjs $deplibs $compiler_flags' ;; ia64*) _LT_TAGVAR(archive_cmds, $1)='$CC -b $wl+h $wl$soname $wl+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' ;; *) m4_if($1, [], [ # Older versions of the 11.00 compiler do not understand -b yet # (HP92453-01 A.11.01.20 doesn't, HP92453-01 B.11.X.35175-35176.GP does) _LT_LINKER_OPTION([if $CC understands -b], _LT_TAGVAR(lt_cv_prog_compiler__b, $1), [-b], [_LT_TAGVAR(archive_cmds, $1)='$CC -b $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $libobjs $deplibs $compiler_flags'], [_LT_TAGVAR(archive_cmds, $1)='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags'])], [_LT_TAGVAR(archive_cmds, $1)='$CC -b $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $libobjs $deplibs $compiler_flags']) ;; esac fi if test no = "$with_gnu_ld"; then _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl+b $wl$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: case $host_cpu in hppa*64*|ia64*) _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; *) _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_direct_absolute, $1)=yes _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-E' # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. _LT_TAGVAR(hardcode_minus_L, $1)=yes ;; esac fi ;; irix5* | irix6* | nonstopux*) if test yes = "$GCC"; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib' # Try to use the -exported_symbol ld option, if it does not # work, assume that -exports_file does not work either and # implicitly export all symbols. # This should be the same for all languages, so no per-tag cache variable. AC_CACHE_CHECK([whether the $host_os linker accepts -exported_symbol], [lt_cv_irix_exported_symbol], [save_LDFLAGS=$LDFLAGS LDFLAGS="$LDFLAGS -shared $wl-exported_symbol ${wl}foo $wl-update_registry $wl/dev/null" AC_LINK_IFELSE( [AC_LANG_SOURCE( [AC_LANG_CASE([C], [[int foo (void) { return 0; }]], [C++], [[int foo (void) { return 0; }]], [Fortran 77], [[ subroutine foo end]], [Fortran], [[ subroutine foo end]])])], [lt_cv_irix_exported_symbol=yes], [lt_cv_irix_exported_symbol=no]) LDFLAGS=$save_LDFLAGS]) if test yes = "$lt_cv_irix_exported_symbol"; then _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations $wl-exports_file $wl$export_symbols -o $lib' fi _LT_TAGVAR(link_all_deplibs, $1)=no else _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -exports_file $export_symbols -o $lib' fi _LT_TAGVAR(archive_cmds_need_lc, $1)='no' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: _LT_TAGVAR(inherit_rpath, $1)=yes _LT_TAGVAR(link_all_deplibs, $1)=yes ;; linux*) case $cc_basename in tcc*) # Fabrice Bellard et al's Tiny C Compiler _LT_TAGVAR(ld_shlibs, $1)=yes _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir' ;; esac ;; netbsd* | netbsdelf*-gnu) if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out else _LT_TAGVAR(archive_cmds, $1)='$LD -shared -o $lib $libobjs $deplibs $linker_flags' # ELF fi _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; newsos6) _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; *nto* | *qnx*) ;; openbsd* | bitrig*) if test -f /usr/libexec/ld.so; then _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no _LT_TAGVAR(hardcode_direct_absolute, $1)=yes if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`"; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags $wl-retain-symbols-file,$export_symbols' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath,$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-E' else _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath,$libdir' fi else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; os2*) _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_minus_L, $1)=yes _LT_TAGVAR(allow_undefined_flag, $1)=unsupported shrext_cmds=.dll _LT_TAGVAR(archive_cmds, $1)='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~ $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~ $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~ $ECHO EXPORTS >> $output_objdir/$libname.def~ emxexp $libobjs | $SED /"_DLL_InitTerm"/d >> $output_objdir/$libname.def~ $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~ emximp -o $lib $output_objdir/$libname.def' _LT_TAGVAR(archive_expsym_cmds, $1)='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~ $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~ $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~ $ECHO EXPORTS >> $output_objdir/$libname.def~ prefix_cmds="$SED"~ if test EXPORTS = "`$SED 1q $export_symbols`"; then prefix_cmds="$prefix_cmds -e 1d"; fi~ prefix_cmds="$prefix_cmds -e \"s/^\(.*\)$/_\1/g\""~ cat $export_symbols | $prefix_cmds >> $output_objdir/$libname.def~ $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~ emximp -o $lib $output_objdir/$libname.def' _LT_TAGVAR(old_archive_From_new_cmds, $1)='emximp -o $output_objdir/${libname}_dll.a $output_objdir/$libname.def' _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes _LT_TAGVAR(file_list_spec, $1)='@' ;; osf3*) if test yes = "$GCC"; then _LT_TAGVAR(allow_undefined_flag, $1)=' $wl-expect_unresolved $wl\*' _LT_TAGVAR(archive_cmds, $1)='$CC -shared$allow_undefined_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib' else _LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*' _LT_TAGVAR(archive_cmds, $1)='$CC -shared$allow_undefined_flag $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib' fi _LT_TAGVAR(archive_cmds_need_lc, $1)='no' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: ;; osf4* | osf5*) # as osf3* with the addition of -msym flag if test yes = "$GCC"; then _LT_TAGVAR(allow_undefined_flag, $1)=' $wl-expect_unresolved $wl\*' _LT_TAGVAR(archive_cmds, $1)='$CC -shared$allow_undefined_flag $pic_flag $libobjs $deplibs $compiler_flags $wl-msym $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir' else _LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*' _LT_TAGVAR(archive_cmds, $1)='$CC -shared$allow_undefined_flag $libobjs $deplibs $compiler_flags -msym -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; printf "%s\\n" "-hidden">> $lib.exp~ $CC -shared$allow_undefined_flag $wl-input $wl$lib.exp $compiler_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && $ECHO "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib~$RM $lib.exp' # Both c and cxx compiler support -rpath directly _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir' fi _LT_TAGVAR(archive_cmds_need_lc, $1)='no' _LT_TAGVAR(hardcode_libdir_separator, $1)=: ;; solaris*) _LT_TAGVAR(no_undefined_flag, $1)=' -z defs' if test yes = "$GCC"; then wlarc='$wl' _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $wl-z ${wl}text $wl-h $wl$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -shared $pic_flag $wl-z ${wl}text $wl-M $wl$lib.exp $wl-h $wl$soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' else case `$CC -V 2>&1` in *"Compilers 5.0"*) wlarc='' _LT_TAGVAR(archive_cmds, $1)='$LD -G$allow_undefined_flag -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $LD -G$allow_undefined_flag -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$RM $lib.exp' ;; *) wlarc='$wl' _LT_TAGVAR(archive_cmds, $1)='$CC -G$allow_undefined_flag -h $soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -G$allow_undefined_flag -M $lib.exp -h $soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' ;; esac fi _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' _LT_TAGVAR(hardcode_shlibpath_var, $1)=no case $host_os in solaris2.[[0-5]] | solaris2.[[0-5]].*) ;; *) # The compiler driver will combine and reorder linker options, # but understands '-z linker_flag'. GCC discards it without '$wl', # but is careful enough not to reorder. # Supported since Solaris 2.6 (maybe 2.5.1?) if test yes = "$GCC"; then _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl-z ${wl}allextract$convenience $wl-z ${wl}defaultextract' else _LT_TAGVAR(whole_archive_flag_spec, $1)='-z allextract$convenience -z defaultextract' fi ;; esac _LT_TAGVAR(link_all_deplibs, $1)=yes ;; sunos4*) if test sequent = "$host_vendor"; then # Use $CC to link under sequent, because it throws in some extra .o # files that make .init and .fini sections work. _LT_TAGVAR(archive_cmds, $1)='$CC -G $wl-h $soname -o $lib $libobjs $deplibs $compiler_flags' else _LT_TAGVAR(archive_cmds, $1)='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags' fi _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_minus_L, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; sysv4) case $host_vendor in sni) _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_direct, $1)=yes # is this really true??? ;; siemens) ## LD is ld it makes a PLAMLIB ## CC just makes a GrossModule. _LT_TAGVAR(archive_cmds, $1)='$LD -G -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(reload_cmds, $1)='$CC -r -o $output$reload_objs' _LT_TAGVAR(hardcode_direct, $1)=no ;; motorola) _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_direct, $1)=no #Motorola manual says yes, but my tests say they lie ;; esac runpath_var='LD_RUN_PATH' _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; sysv4.3*) _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_shlibpath_var, $1)=no _LT_TAGVAR(export_dynamic_flag_spec, $1)='-Bexport' ;; sysv4*MP*) if test -d /usr/nec; then _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_shlibpath_var, $1)=no runpath_var=LD_RUN_PATH hardcode_runpath_var=yes _LT_TAGVAR(ld_shlibs, $1)=yes fi ;; sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[[01]].[[10]]* | unixware7* | sco3.2v5.0.[[024]]*) _LT_TAGVAR(no_undefined_flag, $1)='$wl-z,text' _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=no runpath_var='LD_RUN_PATH' if test yes = "$GCC"; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' else _LT_TAGVAR(archive_cmds, $1)='$CC -G $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' fi ;; sysv5* | sco3.2v5* | sco5v6*) # Note: We CANNOT use -z defs as we might desire, because we do not # link with -lc, and that would cause any symbols used from libc to # always be unresolved, which means just about no library would # ever link correctly. If we're not using GNU ld we use -z text # though, which does catch some bad symbols but isn't as heavy-handed # as -z defs. _LT_TAGVAR(no_undefined_flag, $1)='$wl-z,text' _LT_TAGVAR(allow_undefined_flag, $1)='$wl-z,nodefs' _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-R,$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=':' _LT_TAGVAR(link_all_deplibs, $1)=yes _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-Bexport' runpath_var='LD_RUN_PATH' if test yes = "$GCC"; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' else _LT_TAGVAR(archive_cmds, $1)='$CC -G $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' fi ;; uts4*) _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; *) _LT_TAGVAR(ld_shlibs, $1)=no ;; esac if test sni = "$host_vendor"; then case $host in sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-Blargedynsym' ;; esac fi fi ]) AC_MSG_RESULT([$_LT_TAGVAR(ld_shlibs, $1)]) test no = "$_LT_TAGVAR(ld_shlibs, $1)" && can_build_shared=no _LT_TAGVAR(with_gnu_ld, $1)=$with_gnu_ld _LT_DECL([], [libext], [0], [Old archive suffix (normally "a")])dnl _LT_DECL([], [shrext_cmds], [1], [Shared library suffix (normally ".so")])dnl _LT_DECL([], [extract_expsyms_cmds], [2], [The commands to extract the exported symbol list from a shared archive]) # # Do we need to explicitly link libc? # case "x$_LT_TAGVAR(archive_cmds_need_lc, $1)" in x|xyes) # Assume -lc should be added _LT_TAGVAR(archive_cmds_need_lc, $1)=yes if test yes,yes = "$GCC,$enable_shared"; then case $_LT_TAGVAR(archive_cmds, $1) in *'~'*) # FIXME: we may have to deal with multi-command sequences. ;; '$CC '*) # Test whether the compiler implicitly links with -lc since on some # systems, -lgcc has to come before -lc. If gcc already passes -lc # to ld, don't add -lc before -lgcc. AC_CACHE_CHECK([whether -lc should be explicitly linked in], [lt_cv_]_LT_TAGVAR(archive_cmds_need_lc, $1), [$RM conftest* echo "$lt_simple_compile_test_code" > conftest.$ac_ext if AC_TRY_EVAL(ac_compile) 2>conftest.err; then soname=conftest lib=conftest libobjs=conftest.$ac_objext deplibs= wl=$_LT_TAGVAR(lt_prog_compiler_wl, $1) pic_flag=$_LT_TAGVAR(lt_prog_compiler_pic, $1) compiler_flags=-v linker_flags=-v verstring= output_objdir=. libname=conftest lt_save_allow_undefined_flag=$_LT_TAGVAR(allow_undefined_flag, $1) _LT_TAGVAR(allow_undefined_flag, $1)= if AC_TRY_EVAL(_LT_TAGVAR(archive_cmds, $1) 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1) then lt_cv_[]_LT_TAGVAR(archive_cmds_need_lc, $1)=no else lt_cv_[]_LT_TAGVAR(archive_cmds_need_lc, $1)=yes fi _LT_TAGVAR(allow_undefined_flag, $1)=$lt_save_allow_undefined_flag else cat conftest.err 1>&5 fi $RM conftest* ]) _LT_TAGVAR(archive_cmds_need_lc, $1)=$lt_cv_[]_LT_TAGVAR(archive_cmds_need_lc, $1) ;; esac fi ;; esac _LT_TAGDECL([build_libtool_need_lc], [archive_cmds_need_lc], [0], [Whether or not to add -lc for building shared libraries]) _LT_TAGDECL([allow_libtool_libs_with_static_runtimes], [enable_shared_with_static_runtimes], [0], [Whether or not to disallow shared libs when runtime libs are static]) _LT_TAGDECL([], [export_dynamic_flag_spec], [1], [Compiler flag to allow reflexive dlopens]) _LT_TAGDECL([], [whole_archive_flag_spec], [1], [Compiler flag to generate shared objects directly from archives]) _LT_TAGDECL([], [compiler_needs_object], [1], [Whether the compiler copes with passing no objects directly]) _LT_TAGDECL([], [old_archive_from_new_cmds], [2], [Create an old-style archive from a shared archive]) _LT_TAGDECL([], [old_archive_from_expsyms_cmds], [2], [Create a temporary old-style archive to link instead of a shared archive]) _LT_TAGDECL([], [archive_cmds], [2], [Commands used to build a shared archive]) _LT_TAGDECL([], [archive_expsym_cmds], [2]) _LT_TAGDECL([], [module_cmds], [2], [Commands used to build a loadable module if different from building a shared archive.]) _LT_TAGDECL([], [module_expsym_cmds], [2]) _LT_TAGDECL([], [with_gnu_ld], [1], [Whether we are building with GNU ld or not]) _LT_TAGDECL([], [allow_undefined_flag], [1], [Flag that allows shared libraries with undefined symbols to be built]) _LT_TAGDECL([], [no_undefined_flag], [1], [Flag that enforces no undefined symbols]) _LT_TAGDECL([], [hardcode_libdir_flag_spec], [1], [Flag to hardcode $libdir into a binary during linking. This must work even if $libdir does not exist]) _LT_TAGDECL([], [hardcode_libdir_separator], [1], [Whether we need a single "-rpath" flag with a separated argument]) _LT_TAGDECL([], [hardcode_direct], [0], [Set to "yes" if using DIR/libNAME$shared_ext during linking hardcodes DIR into the resulting binary]) _LT_TAGDECL([], [hardcode_direct_absolute], [0], [Set to "yes" if using DIR/libNAME$shared_ext during linking hardcodes DIR into the resulting binary and the resulting library dependency is "absolute", i.e impossible to change by setting $shlibpath_var if the library is relocated]) _LT_TAGDECL([], [hardcode_minus_L], [0], [Set to "yes" if using the -LDIR flag during linking hardcodes DIR into the resulting binary]) _LT_TAGDECL([], [hardcode_shlibpath_var], [0], [Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR into the resulting binary]) _LT_TAGDECL([], [hardcode_automatic], [0], [Set to "yes" if building a shared library automatically hardcodes DIR into the library and all subsequent libraries and executables linked against it]) _LT_TAGDECL([], [inherit_rpath], [0], [Set to yes if linker adds runtime paths of dependent libraries to runtime path list]) _LT_TAGDECL([], [link_all_deplibs], [0], [Whether libtool must link a program against all its dependency libraries]) _LT_TAGDECL([], [always_export_symbols], [0], [Set to "yes" if exported symbols are required]) _LT_TAGDECL([], [export_symbols_cmds], [2], [The commands to list exported symbols]) _LT_TAGDECL([], [exclude_expsyms], [1], [Symbols that should not be listed in the preloaded symbols]) _LT_TAGDECL([], [include_expsyms], [1], [Symbols that must always be exported]) _LT_TAGDECL([], [prelink_cmds], [2], [Commands necessary for linking programs (against libraries) with templates]) _LT_TAGDECL([], [postlink_cmds], [2], [Commands necessary for finishing linking programs]) _LT_TAGDECL([], [file_list_spec], [1], [Specify filename containing input files]) dnl FIXME: Not yet implemented dnl _LT_TAGDECL([], [thread_safe_flag_spec], [1], dnl [Compiler flag to generate thread safe objects]) ])# _LT_LINKER_SHLIBS # _LT_LANG_C_CONFIG([TAG]) # ------------------------ # Ensure that the configuration variables for a C compiler are suitably # defined. These variables are subsequently used by _LT_CONFIG to write # the compiler configuration to 'libtool'. m4_defun([_LT_LANG_C_CONFIG], [m4_require([_LT_DECL_EGREP])dnl lt_save_CC=$CC AC_LANG_PUSH(C) # Source file extension for C test sources. ac_ext=c # Object file extension for compiled C test sources. objext=o _LT_TAGVAR(objext, $1)=$objext # Code to be used in simple compile tests lt_simple_compile_test_code="int some_variable = 0;" # Code to be used in simple link tests lt_simple_link_test_code='int main(){return(0);}' _LT_TAG_COMPILER # Save the default compiler, since it gets overwritten when the other # tags are being tested, and _LT_TAGVAR(compiler, []) is a NOP. compiler_DEFAULT=$CC # save warnings/boilerplate of simple test code _LT_COMPILER_BOILERPLATE _LT_LINKER_BOILERPLATE if test -n "$compiler"; then _LT_COMPILER_NO_RTTI($1) _LT_COMPILER_PIC($1) _LT_COMPILER_C_O($1) _LT_COMPILER_FILE_LOCKS($1) _LT_LINKER_SHLIBS($1) _LT_SYS_DYNAMIC_LINKER($1) _LT_LINKER_HARDCODE_LIBPATH($1) LT_SYS_DLOPEN_SELF _LT_CMD_STRIPLIB # Report what library types will actually be built AC_MSG_CHECKING([if libtool supports shared libraries]) AC_MSG_RESULT([$can_build_shared]) AC_MSG_CHECKING([whether to build shared libraries]) test no = "$can_build_shared" && enable_shared=no # On AIX, shared libraries and static libraries use the same namespace, and # are all built from PIC. case $host_os in aix3*) test yes = "$enable_shared" && enable_static=no if test -n "$RANLIB"; then archive_cmds="$archive_cmds~\$RANLIB \$lib" postinstall_cmds='$RANLIB $lib' fi ;; aix[[4-9]]*) if test ia64 != "$host_cpu"; then case $enable_shared,$with_aix_soname,$aix_use_runtimelinking in yes,aix,yes) ;; # shared object as lib.so file only yes,svr4,*) ;; # shared object as lib.so archive member only yes,*) enable_static=no ;; # shared object in lib.a archive as well esac fi ;; esac AC_MSG_RESULT([$enable_shared]) AC_MSG_CHECKING([whether to build static libraries]) # Make sure either enable_shared or enable_static is yes. test yes = "$enable_shared" || enable_static=yes AC_MSG_RESULT([$enable_static]) _LT_CONFIG($1) fi AC_LANG_POP CC=$lt_save_CC ])# _LT_LANG_C_CONFIG # _LT_LANG_CXX_CONFIG([TAG]) # -------------------------- # Ensure that the configuration variables for a C++ compiler are suitably # defined. These variables are subsequently used by _LT_CONFIG to write # the compiler configuration to 'libtool'. m4_defun([_LT_LANG_CXX_CONFIG], [m4_require([_LT_FILEUTILS_DEFAULTS])dnl m4_require([_LT_DECL_EGREP])dnl m4_require([_LT_PATH_MANIFEST_TOOL])dnl if test -n "$CXX" && ( test no != "$CXX" && ( (test g++ = "$CXX" && `g++ -v >/dev/null 2>&1` ) || (test g++ != "$CXX"))); then AC_PROG_CXXCPP else _lt_caught_CXX_error=yes fi AC_LANG_PUSH(C++) _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(allow_undefined_flag, $1)= _LT_TAGVAR(always_export_symbols, $1)=no _LT_TAGVAR(archive_expsym_cmds, $1)= _LT_TAGVAR(compiler_needs_object, $1)=no _LT_TAGVAR(export_dynamic_flag_spec, $1)= _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_direct_absolute, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)= _LT_TAGVAR(hardcode_libdir_separator, $1)= _LT_TAGVAR(hardcode_minus_L, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported _LT_TAGVAR(hardcode_automatic, $1)=no _LT_TAGVAR(inherit_rpath, $1)=no _LT_TAGVAR(module_cmds, $1)= _LT_TAGVAR(module_expsym_cmds, $1)= _LT_TAGVAR(link_all_deplibs, $1)=unknown _LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds _LT_TAGVAR(reload_flag, $1)=$reload_flag _LT_TAGVAR(reload_cmds, $1)=$reload_cmds _LT_TAGVAR(no_undefined_flag, $1)= _LT_TAGVAR(whole_archive_flag_spec, $1)= _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no # Source file extension for C++ test sources. ac_ext=cpp # Object file extension for compiled C++ test sources. objext=o _LT_TAGVAR(objext, $1)=$objext # No sense in running all these tests if we already determined that # the CXX compiler isn't working. Some variables (like enable_shared) # are currently assumed to apply to all compilers on this platform, # and will be corrupted by setting them based on a non-working compiler. if test yes != "$_lt_caught_CXX_error"; then # Code to be used in simple compile tests lt_simple_compile_test_code="int some_variable = 0;" # Code to be used in simple link tests lt_simple_link_test_code='int main(int, char *[[]]) { return(0); }' # ltmain only uses $CC for tagged configurations so make sure $CC is set. _LT_TAG_COMPILER # save warnings/boilerplate of simple test code _LT_COMPILER_BOILERPLATE _LT_LINKER_BOILERPLATE # Allow CC to be a program name with arguments. lt_save_CC=$CC lt_save_CFLAGS=$CFLAGS lt_save_LD=$LD lt_save_GCC=$GCC GCC=$GXX lt_save_with_gnu_ld=$with_gnu_ld lt_save_path_LD=$lt_cv_path_LD if test -n "${lt_cv_prog_gnu_ldcxx+set}"; then lt_cv_prog_gnu_ld=$lt_cv_prog_gnu_ldcxx else $as_unset lt_cv_prog_gnu_ld fi if test -n "${lt_cv_path_LDCXX+set}"; then lt_cv_path_LD=$lt_cv_path_LDCXX else $as_unset lt_cv_path_LD fi test -z "${LDCXX+set}" || LD=$LDCXX CC=${CXX-"c++"} CFLAGS=$CXXFLAGS compiler=$CC _LT_TAGVAR(compiler, $1)=$CC _LT_CC_BASENAME([$compiler]) if test -n "$compiler"; then # We don't want -fno-exception when compiling C++ code, so set the # no_builtin_flag separately if test yes = "$GXX"; then _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -fno-builtin' else _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)= fi if test yes = "$GXX"; then # Set up default GNU C++ configuration LT_PATH_LD # Check if GNU C++ uses GNU ld as the underlying linker, since the # archiving commands below assume that GNU ld is being used. if test yes = "$with_gnu_ld"; then _LT_TAGVAR(archive_cmds, $1)='$CC $pic_flag -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC $pic_flag -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl--export-dynamic' # If archive_cmds runs LD, not CC, wlarc should be empty # XXX I think wlarc can be eliminated in ltcf-cxx, but I need to # investigate it a little bit more. (MM) wlarc='$wl' # ancient GNU ld didn't support --whole-archive et. al. if eval "`$CC -print-prog-name=ld` --help 2>&1" | $GREP 'no-whole-archive' > /dev/null; then _LT_TAGVAR(whole_archive_flag_spec, $1)=$wlarc'--whole-archive$convenience '$wlarc'--no-whole-archive' else _LT_TAGVAR(whole_archive_flag_spec, $1)= fi else with_gnu_ld=no wlarc= # A generic and very simple default shared library creation # command for GNU C++ for the case where it uses the native # linker, instead of GNU ld. If possible, this setting should # overridden to take advantage of the native linker features on # the platform it is being used on. _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib' fi # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP " \-L"' else GXX=no with_gnu_ld=no wlarc= fi # PORTME: fill in a description of your system's C++ link characteristics AC_MSG_CHECKING([whether the $compiler linker ($LD) supports shared libraries]) _LT_TAGVAR(ld_shlibs, $1)=yes case $host_os in aix3*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; aix[[4-9]]*) if test ia64 = "$host_cpu"; then # On IA64, the linker does run time linking by default, so we don't # have to do anything special. aix_use_runtimelinking=no exp_sym_flag='-Bexport' no_entry_flag= else aix_use_runtimelinking=no # Test if we are trying to use run time linking or normal # AIX style linking. If -brtl is somewhere in LDFLAGS, we # have runtime linking enabled, and use it for executables. # For shared libraries, we enable/disable runtime linking # depending on the kind of the shared library created - # when "with_aix_soname,aix_use_runtimelinking" is: # "aix,no" lib.a(lib.so.V) shared, rtl:no, for executables # "aix,yes" lib.so shared, rtl:yes, for executables # lib.a static archive # "both,no" lib.so.V(shr.o) shared, rtl:yes # lib.a(lib.so.V) shared, rtl:no, for executables # "both,yes" lib.so.V(shr.o) shared, rtl:yes, for executables # lib.a(lib.so.V) shared, rtl:no # "svr4,*" lib.so.V(shr.o) shared, rtl:yes, for executables # lib.a static archive case $host_os in aix4.[[23]]|aix4.[[23]].*|aix[[5-9]]*) for ld_flag in $LDFLAGS; do case $ld_flag in *-brtl*) aix_use_runtimelinking=yes break ;; esac done if test svr4,no = "$with_aix_soname,$aix_use_runtimelinking"; then # With aix-soname=svr4, we create the lib.so.V shared archives only, # so we don't have lib.a shared libs to link our executables. # We have to force runtime linking in this case. aix_use_runtimelinking=yes LDFLAGS="$LDFLAGS -Wl,-brtl" fi ;; esac exp_sym_flag='-bexport' no_entry_flag='-bnoentry' fi # When large executables or shared objects are built, AIX ld can # have problems creating the table of contents. If linking a library # or program results in "error TOC overflow" add -mminimal-toc to # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. _LT_TAGVAR(archive_cmds, $1)='' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_direct_absolute, $1)=yes _LT_TAGVAR(hardcode_libdir_separator, $1)=':' _LT_TAGVAR(link_all_deplibs, $1)=yes _LT_TAGVAR(file_list_spec, $1)='$wl-f,' case $with_aix_soname,$aix_use_runtimelinking in aix,*) ;; # no import file svr4,* | *,yes) # use import file # The Import File defines what to hardcode. _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_direct_absolute, $1)=no ;; esac if test yes = "$GXX"; then case $host_os in aix4.[[012]]|aix4.[[012]].*) # We only want to do this on AIX 4.2 and lower, the check # below for broken collect2 doesn't work under 4.3+ collect2name=`$CC -print-prog-name=collect2` if test -f "$collect2name" && strings "$collect2name" | $GREP resolve_lib_name >/dev/null then # We have reworked collect2 : else # We have old collect2 _LT_TAGVAR(hardcode_direct, $1)=unsupported # It fails to find uninstalled libraries when the uninstalled # path is not listed in the libpath. Setting hardcode_minus_L # to unsupported forces relinking _LT_TAGVAR(hardcode_minus_L, $1)=yes _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)= fi esac shared_flag='-shared' if test yes = "$aix_use_runtimelinking"; then shared_flag=$shared_flag' $wl-G' fi # Need to ensure runtime linking is disabled for the traditional # shared library, or the linker may eventually find shared libraries # /with/ Import File - we do not want to mix them. shared_flag_aix='-shared' shared_flag_svr4='-shared $wl-G' else # not using gcc if test ia64 = "$host_cpu"; then # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release # chokes on -Wl,-G. The following line is correct: shared_flag='-G' else if test yes = "$aix_use_runtimelinking"; then shared_flag='$wl-G' else shared_flag='$wl-bM:SRE' fi shared_flag_aix='$wl-bM:SRE' shared_flag_svr4='$wl-G' fi fi _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-bexpall' # It seems that -bexpall does not export symbols beginning with # underscore (_), so it is better to generate a list of symbols to # export. _LT_TAGVAR(always_export_symbols, $1)=yes if test aix,yes = "$with_aix_soname,$aix_use_runtimelinking"; then # Warning - without using the other runtime loading flags (-brtl), # -berok will link without error, but may produce a broken library. # The "-G" linker flag allows undefined symbols. _LT_TAGVAR(no_undefined_flag, $1)='-bernotok' # Determine the default libpath from the value encoded in an empty # executable. _LT_SYS_MODULE_PATH_AIX([$1]) _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-blibpath:$libdir:'"$aix_libpath" _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $deplibs $wl'$no_entry_flag' $compiler_flags `if test -n "$allow_undefined_flag"; then func_echo_all "$wl$allow_undefined_flag"; else :; fi` $wl'$exp_sym_flag:\$export_symbols' '$shared_flag else if test ia64 = "$host_cpu"; then _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-R $libdir:/usr/lib:/lib' _LT_TAGVAR(allow_undefined_flag, $1)="-z nodefs" _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\$wl$no_entry_flag"' $compiler_flags $wl$allow_undefined_flag '"\$wl$exp_sym_flag:\$export_symbols" else # Determine the default libpath from the value encoded in an # empty executable. _LT_SYS_MODULE_PATH_AIX([$1]) _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-blibpath:$libdir:'"$aix_libpath" # Warning - without using the other run time loading flags, # -berok will link without error, but may produce a broken library. _LT_TAGVAR(no_undefined_flag, $1)=' $wl-bernotok' _LT_TAGVAR(allow_undefined_flag, $1)=' $wl-berok' if test yes = "$with_gnu_ld"; then # We only use this code for GNU lds that support --whole-archive. _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl--whole-archive$convenience $wl--no-whole-archive' else # Exported symbols can be pulled into shared objects from archives _LT_TAGVAR(whole_archive_flag_spec, $1)='$convenience' fi _LT_TAGVAR(archive_cmds_need_lc, $1)=yes _LT_TAGVAR(archive_expsym_cmds, $1)='$RM -r $output_objdir/$realname.d~$MKDIR $output_objdir/$realname.d' # -brtl affects multiple linker settings, -berok does not and is overridden later compiler_flags_filtered='`func_echo_all "$compiler_flags " | $SED -e "s%-brtl\\([[, ]]\\)%-berok\\1%g"`' if test svr4 != "$with_aix_soname"; then # This is similar to how AIX traditionally builds its shared # libraries. Need -bnortl late, we may have -brtl in LDFLAGS. _LT_TAGVAR(archive_expsym_cmds, $1)="$_LT_TAGVAR(archive_expsym_cmds, $1)"'~$CC '$shared_flag_aix' -o $output_objdir/$realname.d/$soname $libobjs $deplibs $wl-bnoentry '$compiler_flags_filtered'$wl-bE:$export_symbols$allow_undefined_flag~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$realname.d/$soname' fi if test aix != "$with_aix_soname"; then _LT_TAGVAR(archive_expsym_cmds, $1)="$_LT_TAGVAR(archive_expsym_cmds, $1)"'~$CC '$shared_flag_svr4' -o $output_objdir/$realname.d/$shared_archive_member_spec.o $libobjs $deplibs $wl-bnoentry '$compiler_flags_filtered'$wl-bE:$export_symbols$allow_undefined_flag~$STRIP -e $output_objdir/$realname.d/$shared_archive_member_spec.o~( func_echo_all "#! $soname($shared_archive_member_spec.o)"; if test shr_64 = "$shared_archive_member_spec"; then func_echo_all "# 64"; else func_echo_all "# 32"; fi; cat $export_symbols ) > $output_objdir/$realname.d/$shared_archive_member_spec.imp~$AR $AR_FLAGS $output_objdir/$soname $output_objdir/$realname.d/$shared_archive_member_spec.o $output_objdir/$realname.d/$shared_archive_member_spec.imp' else # used by -dlpreopen to get the symbols _LT_TAGVAR(archive_expsym_cmds, $1)="$_LT_TAGVAR(archive_expsym_cmds, $1)"'~$MV $output_objdir/$realname.d/$soname $output_objdir' fi _LT_TAGVAR(archive_expsym_cmds, $1)="$_LT_TAGVAR(archive_expsym_cmds, $1)"'~$RM -r $output_objdir/$realname.d' fi fi ;; beos*) if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then _LT_TAGVAR(allow_undefined_flag, $1)=unsupported # Joseph Beckenbach says some releases of gcc # support --undefined. This deserves some investigation. FIXME _LT_TAGVAR(archive_cmds, $1)='$CC -nostart $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; chorus*) case $cc_basename in *) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; esac ;; cygwin* | mingw* | pw32* | cegcc*) case $GXX,$cc_basename in ,cl* | no,cl* | ,icl* | no,icl*) # Native MSVC or ICC # hardcode_libdir_flag_spec is actually meaningless, as there is # no search path for DLLs. _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=' ' _LT_TAGVAR(allow_undefined_flag, $1)=unsupported _LT_TAGVAR(always_export_symbols, $1)=yes _LT_TAGVAR(file_list_spec, $1)='@' # Tell ltmain to make .lib files, not .a files. libext=lib # Tell ltmain to make .dll files, not .so files. shrext_cmds=.dll # FIXME: Setting linknames here is a bad hack. _LT_TAGVAR(archive_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~linknames=' _LT_TAGVAR(archive_expsym_cmds, $1)='if _LT_DLL_DEF_P([$export_symbols]); then cp "$export_symbols" "$output_objdir/$soname.def"; echo "$tool_output_objdir$soname.def" > "$output_objdir/$soname.exp"; else $SED -e '\''s/^/-link -EXPORT:/'\'' < $export_symbols > $output_objdir/$soname.exp; fi~ $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~ linknames=' # The linker will not automatically build a static lib if we build a DLL. # _LT_TAGVAR(old_archive_from_new_cmds, $1)='true' _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes # Don't use ranlib _LT_TAGVAR(old_postinstall_cmds, $1)='chmod 644 $oldlib' _LT_TAGVAR(postlink_cmds, $1)='lt_outputfile="@OUTPUT@"~ lt_tool_outputfile="@TOOL_OUTPUT@"~ case $lt_outputfile in *.exe|*.EXE) ;; *) lt_outputfile=$lt_outputfile.exe lt_tool_outputfile=$lt_tool_outputfile.exe ;; esac~ func_to_tool_file "$lt_outputfile"~ if test : != "$MANIFEST_TOOL" && test -f "$lt_outputfile.manifest"; then $MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1; $RM "$lt_outputfile.manifest"; fi' ;; *) # g++ # _LT_TAGVAR(hardcode_libdir_flag_spec, $1) is actually meaningless, # as there is no search path for DLLs. _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl--export-all-symbols' _LT_TAGVAR(allow_undefined_flag, $1)=unsupported _LT_TAGVAR(always_export_symbols, $1)=no _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname $wl--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' # If the export-symbols file already is a .def file, use it as # is; otherwise, prepend EXPORTS... _LT_TAGVAR(archive_expsym_cmds, $1)='if _LT_DLL_DEF_P([$export_symbols]); then cp $export_symbols $output_objdir/$soname.def; else echo EXPORTS > $output_objdir/$soname.def; cat $export_symbols >> $output_objdir/$soname.def; fi~ $CC -shared -nostdlib $output_objdir/$soname.def $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname $wl--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; esac ;; darwin* | rhapsody*) _LT_DARWIN_LINKER_FEATURES($1) ;; os2*) _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_minus_L, $1)=yes _LT_TAGVAR(allow_undefined_flag, $1)=unsupported shrext_cmds=.dll _LT_TAGVAR(archive_cmds, $1)='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~ $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~ $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~ $ECHO EXPORTS >> $output_objdir/$libname.def~ emxexp $libobjs | $SED /"_DLL_InitTerm"/d >> $output_objdir/$libname.def~ $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~ emximp -o $lib $output_objdir/$libname.def' _LT_TAGVAR(archive_expsym_cmds, $1)='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~ $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~ $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~ $ECHO EXPORTS >> $output_objdir/$libname.def~ prefix_cmds="$SED"~ if test EXPORTS = "`$SED 1q $export_symbols`"; then prefix_cmds="$prefix_cmds -e 1d"; fi~ prefix_cmds="$prefix_cmds -e \"s/^\(.*\)$/_\1/g\""~ cat $export_symbols | $prefix_cmds >> $output_objdir/$libname.def~ $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~ emximp -o $lib $output_objdir/$libname.def' _LT_TAGVAR(old_archive_From_new_cmds, $1)='emximp -o $output_objdir/${libname}_dll.a $output_objdir/$libname.def' _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes _LT_TAGVAR(file_list_spec, $1)='@' ;; dgux*) case $cc_basename in ec++*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; ghcx*) # Green Hills C++ Compiler # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; *) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; esac ;; freebsd2.*) # C++ shared libraries reported to be fairly broken before # switch to ELF _LT_TAGVAR(ld_shlibs, $1)=no ;; freebsd-elf*) _LT_TAGVAR(archive_cmds_need_lc, $1)=no ;; freebsd* | dragonfly* | midnightbsd*) # FreeBSD 3 and later use GNU C++ and GNU ld with standard ELF # conventions _LT_TAGVAR(ld_shlibs, $1)=yes ;; haiku*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' _LT_TAGVAR(link_all_deplibs, $1)=yes ;; hpux9*) _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl+b $wl$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-E' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_minus_L, $1)=yes # Not in the search PATH, # but as the default # location of the library. case $cc_basename in CC*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; aCC*) _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -b $wl+b $wl$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test "x$output_objdir/$soname" = "x$lib" || mv $output_objdir/$soname $lib' # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $EGREP " \-L"`; list= ; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' ;; *) if test yes = "$GXX"; then _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -shared -nostdlib $pic_flag $wl+b $wl$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test "x$output_objdir/$soname" = "x$lib" || mv $output_objdir/$soname $lib' else # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no fi ;; esac ;; hpux10*|hpux11*) if test no = "$with_gnu_ld"; then _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl+b $wl$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: case $host_cpu in hppa*64*|ia64*) ;; *) _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-E' ;; esac fi case $host_cpu in hppa*64*|ia64*) _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; *) _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_direct_absolute, $1)=yes _LT_TAGVAR(hardcode_minus_L, $1)=yes # Not in the search PATH, # but as the default # location of the library. ;; esac case $cc_basename in CC*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; aCC*) case $host_cpu in hppa*64*) _LT_TAGVAR(archive_cmds, $1)='$CC -b $wl+h $wl$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; ia64*) _LT_TAGVAR(archive_cmds, $1)='$CC -b $wl+h $wl$soname $wl+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; *) _LT_TAGVAR(archive_cmds, $1)='$CC -b $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; esac # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $GREP " \-L"`; list= ; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' ;; *) if test yes = "$GXX"; then if test no = "$with_gnu_ld"; then case $host_cpu in hppa*64*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib -fPIC $wl+h $wl$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; ia64*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $pic_flag $wl+h $wl$soname $wl+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; *) _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $pic_flag $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; esac fi else # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no fi ;; esac ;; interix[[3-9]]*) _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath,$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-E' # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. # Instead, shared libraries are loaded at an image base (0x10000000 by # default) and relocated if they conflict, which is a slow very memory # consuming and fragmenting process. To avoid this, we pick a random, # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link # time. Moving up from 0x10000000 also allows more sbrk(2) space. _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-h,$soname $wl--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$SED "s|^|_|" $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-h,$soname $wl--retain-symbols-file,$output_objdir/$soname.expsym $wl--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' ;; irix5* | irix6*) case $cc_basename in CC*) # SGI C++ _LT_TAGVAR(archive_cmds, $1)='$CC -shared -all -multigot $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib' # Archives containing C++ object files must be created using # "CC -ar", where "CC" is the IRIX C++ compiler. This is # necessary to make sure instantiated templates are included # in the archive. _LT_TAGVAR(old_archive_cmds, $1)='$CC -ar -WR,-u -o $oldlib $oldobjs' ;; *) if test yes = "$GXX"; then if test no = "$with_gnu_ld"; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib' else _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` -o $lib' fi fi _LT_TAGVAR(link_all_deplibs, $1)=yes ;; esac _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: _LT_TAGVAR(inherit_rpath, $1)=yes ;; linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) case $cc_basename in KCC*) # Kuck and Associates, Inc. (KAI) C++ Compiler # KCC will only create a shared library if the output file # ends with ".so" (or ".sl" for HP-UX), so rename the library # to its proper name (with version) after linking. _LT_TAGVAR(archive_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\$tempext\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\$tempext\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib $wl-retain-symbols-file,$export_symbols; mv \$templib $lib' # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`$CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 | $GREP "ld"`; rm -f libconftest$shared_ext; list= ; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath,$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl--export-dynamic' # Archives containing C++ object files must be created using # "CC -Bstatic", where "CC" is the KAI C++ compiler. _LT_TAGVAR(old_archive_cmds, $1)='$CC -Bstatic -o $oldlib $oldobjs' ;; icpc* | ecpc* ) # Intel C++ with_gnu_ld=yes # version 8.0 and above of icpc choke on multiply defined symbols # if we add $predep_objects and $postdep_objects, however 7.1 and # earlier do not add the objects themselves. case `$CC -V 2>&1` in *"Version 7."*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' ;; *) # Version 8.0 or newer tmp_idyn= case $host_cpu in ia64*) tmp_idyn=' -i_dynamic';; esac _LT_TAGVAR(archive_cmds, $1)='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' ;; esac _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath,$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl--export-dynamic' _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl--whole-archive$convenience $wl--no-whole-archive' ;; pgCC* | pgcpp*) # Portland Group C++ compiler case `$CC -V` in *pgCC\ [[1-5]].* | *pgcpp\ [[1-5]].*) _LT_TAGVAR(prelink_cmds, $1)='tpldir=Template.dir~ rm -rf $tpldir~ $CC --prelink_objects --instantiation_dir $tpldir $objs $libobjs $compile_deplibs~ compile_command="$compile_command `find $tpldir -name \*.o | sort | $NL2SP`"' _LT_TAGVAR(old_archive_cmds, $1)='tpldir=Template.dir~ rm -rf $tpldir~ $CC --prelink_objects --instantiation_dir $tpldir $oldobjs$old_deplibs~ $AR $AR_FLAGS $oldlib$oldobjs$old_deplibs `find $tpldir -name \*.o | sort | $NL2SP`~ $RANLIB $oldlib' _LT_TAGVAR(archive_cmds, $1)='tpldir=Template.dir~ rm -rf $tpldir~ $CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~ $CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | sort | $NL2SP` $postdep_objects $compiler_flags $wl-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='tpldir=Template.dir~ rm -rf $tpldir~ $CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~ $CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | sort | $NL2SP` $postdep_objects $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' ;; *) # Version 6 and above use weak symbols _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' ;; esac _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl--rpath $wl$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl--export-dynamic' _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive' ;; cxx*) # Compaq C++ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname -o $lib $wl-retain-symbols-file $wl$export_symbols' runpath_var=LD_RUN_PATH _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld"`; templist=`func_echo_all "$templist" | $SED "s/\(^.*ld.*\)\( .*ld .*$\)/\1/"`; list= ; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "X$list" | $Xsed' ;; xl* | mpixl* | bgxl*) # IBM XL 8.0 on PPC, with GNU ld _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl--export-dynamic' _LT_TAGVAR(archive_cmds, $1)='$CC -qmkshrobj $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' if test yes = "$supports_anon_versioning"; then _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~ cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ echo "local: *; };" >> $output_objdir/$libname.ver~ $CC -qmkshrobj $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-version-script $wl$output_objdir/$libname.ver -o $lib' fi ;; *) case `$CC -V 2>&1 | $SED 5q` in *Sun\ C*) # Sun C++ 5.9 _LT_TAGVAR(no_undefined_flag, $1)=' -zdefs' _LT_TAGVAR(archive_cmds, $1)='$CC -G$allow_undefined_flag -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G$allow_undefined_flag -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-retain-symbols-file $wl$export_symbols' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive' _LT_TAGVAR(compiler_needs_object, $1)=yes # Not sure whether something based on # $CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 # would be better. output_verbose_link_cmd='func_echo_all' # Archives containing C++ object files must be created using # "CC -xar", where "CC" is the Sun C++ compiler. This is # necessary to make sure instantiated templates are included # in the archive. _LT_TAGVAR(old_archive_cmds, $1)='$CC -xar -o $oldlib $oldobjs' ;; esac ;; esac ;; lynxos*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; m88k*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; mvs*) case $cc_basename in cxx*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; *) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; esac ;; netbsd*) if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $predep_objects $libobjs $deplibs $postdep_objects $linker_flags' wlarc= _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no fi # Workaround some broken pre-1.5 toolchains output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP conftest.$objext | $SED -e "s:-lgcc -lc -lgcc::"' ;; *nto* | *qnx*) _LT_TAGVAR(ld_shlibs, $1)=yes ;; openbsd* | bitrig*) if test -f /usr/libexec/ld.so; then _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no _LT_TAGVAR(hardcode_direct_absolute, $1)=yes _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath,$libdir' if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`"; then _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-retain-symbols-file,$export_symbols -o $lib' _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-E' _LT_TAGVAR(whole_archive_flag_spec, $1)=$wlarc'--whole-archive$convenience '$wlarc'--no-whole-archive' fi output_verbose_link_cmd=func_echo_all else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; osf3* | osf4* | osf5*) case $cc_basename in KCC*) # Kuck and Associates, Inc. (KAI) C++ Compiler # KCC will only create a shared library if the output file # ends with ".so" (or ".sl" for HP-UX), so rename the library # to its proper name (with version) after linking. _LT_TAGVAR(archive_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo "$lib" | $SED -e "s/\$tempext\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath,$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: # Archives containing C++ object files must be created using # the KAI C++ compiler. case $host in osf3*) _LT_TAGVAR(old_archive_cmds, $1)='$CC -Bstatic -o $oldlib $oldobjs' ;; *) _LT_TAGVAR(old_archive_cmds, $1)='$CC -o $oldlib $oldobjs' ;; esac ;; RCC*) # Rational C++ 2.4.1 # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; cxx*) case $host in osf3*) _LT_TAGVAR(allow_undefined_flag, $1)=' $wl-expect_unresolved $wl\*' _LT_TAGVAR(archive_cmds, $1)='$CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $soname `test -n "$verstring" && func_echo_all "$wl-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir' ;; *) _LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*' _LT_TAGVAR(archive_cmds, $1)='$CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done~ echo "-hidden">> $lib.exp~ $CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname $wl-input $wl$lib.exp `test -n "$verstring" && $ECHO "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib~ $RM $lib.exp' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir' ;; esac _LT_TAGVAR(hardcode_libdir_separator, $1)=: # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld" | $GREP -v "ld:"`; templist=`func_echo_all "$templist" | $SED "s/\(^.*ld.*\)\( .*ld.*$\)/\1/"`; list= ; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' ;; *) if test yes,no = "$GXX,$with_gnu_ld"; then _LT_TAGVAR(allow_undefined_flag, $1)=' $wl-expect_unresolved $wl\*' case $host in osf3*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib' ;; *) _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib $allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-msym $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib' ;; esac _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP " \-L"' else # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no fi ;; esac ;; psos*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; sunos4*) case $cc_basename in CC*) # Sun C++ 4.x # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; lcc*) # Lucid # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; *) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; esac ;; solaris*) case $cc_basename in CC* | sunCC*) # Sun C++ 4.2, 5.x and Centerline C++ _LT_TAGVAR(archive_cmds_need_lc,$1)=yes _LT_TAGVAR(no_undefined_flag, $1)=' -zdefs' _LT_TAGVAR(archive_cmds, $1)='$CC -G$allow_undefined_flag -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -G$allow_undefined_flag $wl-M $wl$lib.exp -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' _LT_TAGVAR(hardcode_shlibpath_var, $1)=no case $host_os in solaris2.[[0-5]] | solaris2.[[0-5]].*) ;; *) # The compiler driver will combine and reorder linker options, # but understands '-z linker_flag'. # Supported since Solaris 2.6 (maybe 2.5.1?) _LT_TAGVAR(whole_archive_flag_spec, $1)='-z allextract$convenience -z defaultextract' ;; esac _LT_TAGVAR(link_all_deplibs, $1)=yes output_verbose_link_cmd='func_echo_all' # Archives containing C++ object files must be created using # "CC -xar", where "CC" is the Sun C++ compiler. This is # necessary to make sure instantiated templates are included # in the archive. _LT_TAGVAR(old_archive_cmds, $1)='$CC -xar -o $oldlib $oldobjs' ;; gcx*) # Green Hills C++ Compiler _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-h $wl$soname -o $lib' # The C++ compiler must be used to create the archive. _LT_TAGVAR(old_archive_cmds, $1)='$CC $LDFLAGS -archive -o $oldlib $oldobjs' ;; *) # GNU C++ compiler with Solaris linker if test yes,no = "$GXX,$with_gnu_ld"; then _LT_TAGVAR(no_undefined_flag, $1)=' $wl-z ${wl}defs' if $CC --version | $GREP -v '^2\.7' > /dev/null; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-h $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -shared $pic_flag -nostdlib $wl-M $wl$lib.exp $wl-h $wl$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP " \-L"' else # g++ 2.7 appears to require '-G' NOT '-shared' on this # platform. _LT_TAGVAR(archive_cmds, $1)='$CC -G -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-h $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -G -nostdlib $wl-M $wl$lib.exp $wl-h $wl$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. output_verbose_link_cmd='$CC -G $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP " \-L"' fi _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-R $wl$libdir' case $host_os in solaris2.[[0-5]] | solaris2.[[0-5]].*) ;; *) _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl-z ${wl}allextract$convenience $wl-z ${wl}defaultextract' ;; esac fi ;; esac ;; sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[[01]].[[10]]* | unixware7* | sco3.2v5.0.[[024]]*) _LT_TAGVAR(no_undefined_flag, $1)='$wl-z,text' _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=no runpath_var='LD_RUN_PATH' case $cc_basename in CC*) _LT_TAGVAR(archive_cmds, $1)='$CC -G $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' ;; *) _LT_TAGVAR(archive_cmds, $1)='$CC -shared $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' ;; esac ;; sysv5* | sco3.2v5* | sco5v6*) # Note: We CANNOT use -z defs as we might desire, because we do not # link with -lc, and that would cause any symbols used from libc to # always be unresolved, which means just about no library would # ever link correctly. If we're not using GNU ld we use -z text # though, which does catch some bad symbols but isn't as heavy-handed # as -z defs. _LT_TAGVAR(no_undefined_flag, $1)='$wl-z,text' _LT_TAGVAR(allow_undefined_flag, $1)='$wl-z,nodefs' _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-R,$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=':' _LT_TAGVAR(link_all_deplibs, $1)=yes _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-Bexport' runpath_var='LD_RUN_PATH' case $cc_basename in CC*) _LT_TAGVAR(archive_cmds, $1)='$CC -G $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(old_archive_cmds, $1)='$CC -Tprelink_objects $oldobjs~ '"$_LT_TAGVAR(old_archive_cmds, $1)" _LT_TAGVAR(reload_cmds, $1)='$CC -Tprelink_objects $reload_objs~ '"$_LT_TAGVAR(reload_cmds, $1)" ;; *) _LT_TAGVAR(archive_cmds, $1)='$CC -shared $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' ;; esac ;; tandem*) case $cc_basename in NCC*) # NonStop-UX NCC 3.20 # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; *) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; esac ;; vxworks*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; *) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; esac AC_MSG_RESULT([$_LT_TAGVAR(ld_shlibs, $1)]) test no = "$_LT_TAGVAR(ld_shlibs, $1)" && can_build_shared=no _LT_TAGVAR(GCC, $1)=$GXX _LT_TAGVAR(LD, $1)=$LD ## CAVEAT EMPTOR: ## There is no encapsulation within the following macros, do not change ## the running order or otherwise move them around unless you know exactly ## what you are doing... _LT_SYS_HIDDEN_LIBDEPS($1) _LT_COMPILER_PIC($1) _LT_COMPILER_C_O($1) _LT_COMPILER_FILE_LOCKS($1) _LT_LINKER_SHLIBS($1) _LT_SYS_DYNAMIC_LINKER($1) _LT_LINKER_HARDCODE_LIBPATH($1) _LT_CONFIG($1) fi # test -n "$compiler" CC=$lt_save_CC CFLAGS=$lt_save_CFLAGS LDCXX=$LD LD=$lt_save_LD GCC=$lt_save_GCC with_gnu_ld=$lt_save_with_gnu_ld lt_cv_path_LDCXX=$lt_cv_path_LD lt_cv_path_LD=$lt_save_path_LD lt_cv_prog_gnu_ldcxx=$lt_cv_prog_gnu_ld lt_cv_prog_gnu_ld=$lt_save_with_gnu_ld fi # test yes != "$_lt_caught_CXX_error" AC_LANG_POP ])# _LT_LANG_CXX_CONFIG # _LT_FUNC_STRIPNAME_CNF # ---------------------- # func_stripname_cnf prefix suffix name # strip PREFIX and SUFFIX off of NAME. # PREFIX and SUFFIX must not contain globbing or regex special # characters, hashes, percent signs, but SUFFIX may contain a leading # dot (in which case that matches only a dot). # # This function is identical to the (non-XSI) version of func_stripname, # except this one can be used by m4 code that may be executed by configure, # rather than the libtool script. m4_defun([_LT_FUNC_STRIPNAME_CNF],[dnl AC_REQUIRE([_LT_DECL_SED]) AC_REQUIRE([_LT_PROG_ECHO_BACKSLASH]) func_stripname_cnf () { case @S|@2 in .*) func_stripname_result=`$ECHO "@S|@3" | $SED "s%^@S|@1%%; s%\\\\@S|@2\$%%"`;; *) func_stripname_result=`$ECHO "@S|@3" | $SED "s%^@S|@1%%; s%@S|@2\$%%"`;; esac } # func_stripname_cnf ])# _LT_FUNC_STRIPNAME_CNF # _LT_SYS_HIDDEN_LIBDEPS([TAGNAME]) # --------------------------------- # Figure out "hidden" library dependencies from verbose # compiler output when linking a shared library. # Parse the compiler output and extract the necessary # objects, libraries and library flags. m4_defun([_LT_SYS_HIDDEN_LIBDEPS], [m4_require([_LT_FILEUTILS_DEFAULTS])dnl AC_REQUIRE([_LT_FUNC_STRIPNAME_CNF])dnl # Dependencies to place before and after the object being linked: _LT_TAGVAR(predep_objects, $1)= _LT_TAGVAR(postdep_objects, $1)= _LT_TAGVAR(predeps, $1)= _LT_TAGVAR(postdeps, $1)= _LT_TAGVAR(compiler_lib_search_path, $1)= dnl we can't use the lt_simple_compile_test_code here, dnl because it contains code intended for an executable, dnl not a library. It's possible we should let each dnl tag define a new lt_????_link_test_code variable, dnl but it's only used here... m4_if([$1], [], [cat > conftest.$ac_ext <<_LT_EOF int a; void foo (void) { a = 0; } _LT_EOF ], [$1], [CXX], [cat > conftest.$ac_ext <<_LT_EOF class Foo { public: Foo (void) { a = 0; } private: int a; }; _LT_EOF ], [$1], [F77], [cat > conftest.$ac_ext <<_LT_EOF subroutine foo implicit none integer*4 a a=0 return end _LT_EOF ], [$1], [FC], [cat > conftest.$ac_ext <<_LT_EOF subroutine foo implicit none integer a a=0 return end _LT_EOF ], [$1], [GCJ], [cat > conftest.$ac_ext <<_LT_EOF public class foo { private int a; public void bar (void) { a = 0; } }; _LT_EOF ], [$1], [GO], [cat > conftest.$ac_ext <<_LT_EOF package foo func foo() { } _LT_EOF ]) _lt_libdeps_save_CFLAGS=$CFLAGS case "$CC $CFLAGS " in #( *\ -flto*\ *) CFLAGS="$CFLAGS -fno-lto" ;; *\ -fwhopr*\ *) CFLAGS="$CFLAGS -fno-whopr" ;; *\ -fuse-linker-plugin*\ *) CFLAGS="$CFLAGS -fno-use-linker-plugin" ;; esac dnl Parse the compiler output and extract the necessary dnl objects, libraries and library flags. if AC_TRY_EVAL(ac_compile); then # Parse the compiler output and extract the necessary # objects, libraries and library flags. # Sentinel used to keep track of whether or not we are before # the conftest object file. pre_test_object_deps_done=no for p in `eval "$output_verbose_link_cmd"`; do case $prev$p in -L* | -R* | -l*) # Some compilers place space between "-{L,R}" and the path. # Remove the space. if test x-L = "$p" || test x-R = "$p"; then prev=$p continue fi # Expand the sysroot to ease extracting the directories later. if test -z "$prev"; then case $p in -L*) func_stripname_cnf '-L' '' "$p"; prev=-L; p=$func_stripname_result ;; -R*) func_stripname_cnf '-R' '' "$p"; prev=-R; p=$func_stripname_result ;; -l*) func_stripname_cnf '-l' '' "$p"; prev=-l; p=$func_stripname_result ;; esac fi case $p in =*) func_stripname_cnf '=' '' "$p"; p=$lt_sysroot$func_stripname_result ;; esac if test no = "$pre_test_object_deps_done"; then case $prev in -L | -R) # Internal compiler library paths should come after those # provided the user. The postdeps already come after the # user supplied libs so there is no need to process them. if test -z "$_LT_TAGVAR(compiler_lib_search_path, $1)"; then _LT_TAGVAR(compiler_lib_search_path, $1)=$prev$p else _LT_TAGVAR(compiler_lib_search_path, $1)="${_LT_TAGVAR(compiler_lib_search_path, $1)} $prev$p" fi ;; # The "-l" case would never come before the object being # linked, so don't bother handling this case. esac else if test -z "$_LT_TAGVAR(postdeps, $1)"; then _LT_TAGVAR(postdeps, $1)=$prev$p else _LT_TAGVAR(postdeps, $1)="${_LT_TAGVAR(postdeps, $1)} $prev$p" fi fi prev= ;; *.lto.$objext) ;; # Ignore GCC LTO objects *.$objext) # This assumes that the test object file only shows up # once in the compiler output. if test "$p" = "conftest.$objext"; then pre_test_object_deps_done=yes continue fi if test no = "$pre_test_object_deps_done"; then if test -z "$_LT_TAGVAR(predep_objects, $1)"; then _LT_TAGVAR(predep_objects, $1)=$p else _LT_TAGVAR(predep_objects, $1)="$_LT_TAGVAR(predep_objects, $1) $p" fi else if test -z "$_LT_TAGVAR(postdep_objects, $1)"; then _LT_TAGVAR(postdep_objects, $1)=$p else _LT_TAGVAR(postdep_objects, $1)="$_LT_TAGVAR(postdep_objects, $1) $p" fi fi ;; *) ;; # Ignore the rest. esac done # Clean up. rm -f a.out a.exe else echo "libtool.m4: error: problem compiling $1 test program" fi $RM -f confest.$objext CFLAGS=$_lt_libdeps_save_CFLAGS # PORTME: override above test on systems where it is broken m4_if([$1], [CXX], [case $host_os in interix[[3-9]]*) # Interix 3.5 installs completely hosed .la files for C++, so rather than # hack all around it, let's just trust "g++" to DTRT. _LT_TAGVAR(predep_objects,$1)= _LT_TAGVAR(postdep_objects,$1)= _LT_TAGVAR(postdeps,$1)= ;; esac ]) case " $_LT_TAGVAR(postdeps, $1) " in *" -lc "*) _LT_TAGVAR(archive_cmds_need_lc, $1)=no ;; esac _LT_TAGVAR(compiler_lib_search_dirs, $1)= if test -n "${_LT_TAGVAR(compiler_lib_search_path, $1)}"; then _LT_TAGVAR(compiler_lib_search_dirs, $1)=`echo " ${_LT_TAGVAR(compiler_lib_search_path, $1)}" | $SED -e 's! -L! !g' -e 's!^ !!'` fi _LT_TAGDECL([], [compiler_lib_search_dirs], [1], [The directories searched by this compiler when creating a shared library]) _LT_TAGDECL([], [predep_objects], [1], [Dependencies to place before and after the objects being linked to create a shared library]) _LT_TAGDECL([], [postdep_objects], [1]) _LT_TAGDECL([], [predeps], [1]) _LT_TAGDECL([], [postdeps], [1]) _LT_TAGDECL([], [compiler_lib_search_path], [1], [The library search path used internally by the compiler when linking a shared library]) ])# _LT_SYS_HIDDEN_LIBDEPS # _LT_LANG_F77_CONFIG([TAG]) # -------------------------- # Ensure that the configuration variables for a Fortran 77 compiler are # suitably defined. These variables are subsequently used by _LT_CONFIG # to write the compiler configuration to 'libtool'. m4_defun([_LT_LANG_F77_CONFIG], [AC_LANG_PUSH(Fortran 77) if test -z "$F77" || test no = "$F77"; then _lt_disable_F77=yes fi _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(allow_undefined_flag, $1)= _LT_TAGVAR(always_export_symbols, $1)=no _LT_TAGVAR(archive_expsym_cmds, $1)= _LT_TAGVAR(export_dynamic_flag_spec, $1)= _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_direct_absolute, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)= _LT_TAGVAR(hardcode_libdir_separator, $1)= _LT_TAGVAR(hardcode_minus_L, $1)=no _LT_TAGVAR(hardcode_automatic, $1)=no _LT_TAGVAR(inherit_rpath, $1)=no _LT_TAGVAR(module_cmds, $1)= _LT_TAGVAR(module_expsym_cmds, $1)= _LT_TAGVAR(link_all_deplibs, $1)=unknown _LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds _LT_TAGVAR(reload_flag, $1)=$reload_flag _LT_TAGVAR(reload_cmds, $1)=$reload_cmds _LT_TAGVAR(no_undefined_flag, $1)= _LT_TAGVAR(whole_archive_flag_spec, $1)= _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no # Source file extension for f77 test sources. ac_ext=f # Object file extension for compiled f77 test sources. objext=o _LT_TAGVAR(objext, $1)=$objext # No sense in running all these tests if we already determined that # the F77 compiler isn't working. Some variables (like enable_shared) # are currently assumed to apply to all compilers on this platform, # and will be corrupted by setting them based on a non-working compiler. if test yes != "$_lt_disable_F77"; then # Code to be used in simple compile tests lt_simple_compile_test_code="\ subroutine t return end " # Code to be used in simple link tests lt_simple_link_test_code="\ program t end " # ltmain only uses $CC for tagged configurations so make sure $CC is set. _LT_TAG_COMPILER # save warnings/boilerplate of simple test code _LT_COMPILER_BOILERPLATE _LT_LINKER_BOILERPLATE # Allow CC to be a program name with arguments. lt_save_CC=$CC lt_save_GCC=$GCC lt_save_CFLAGS=$CFLAGS CC=${F77-"f77"} CFLAGS=$FFLAGS compiler=$CC _LT_TAGVAR(compiler, $1)=$CC _LT_CC_BASENAME([$compiler]) GCC=$G77 if test -n "$compiler"; then AC_MSG_CHECKING([if libtool supports shared libraries]) AC_MSG_RESULT([$can_build_shared]) AC_MSG_CHECKING([whether to build shared libraries]) test no = "$can_build_shared" && enable_shared=no # On AIX, shared libraries and static libraries use the same namespace, and # are all built from PIC. case $host_os in aix3*) test yes = "$enable_shared" && enable_static=no if test -n "$RANLIB"; then archive_cmds="$archive_cmds~\$RANLIB \$lib" postinstall_cmds='$RANLIB $lib' fi ;; aix[[4-9]]*) if test ia64 != "$host_cpu"; then case $enable_shared,$with_aix_soname,$aix_use_runtimelinking in yes,aix,yes) ;; # shared object as lib.so file only yes,svr4,*) ;; # shared object as lib.so archive member only yes,*) enable_static=no ;; # shared object in lib.a archive as well esac fi ;; esac AC_MSG_RESULT([$enable_shared]) AC_MSG_CHECKING([whether to build static libraries]) # Make sure either enable_shared or enable_static is yes. test yes = "$enable_shared" || enable_static=yes AC_MSG_RESULT([$enable_static]) _LT_TAGVAR(GCC, $1)=$G77 _LT_TAGVAR(LD, $1)=$LD ## CAVEAT EMPTOR: ## There is no encapsulation within the following macros, do not change ## the running order or otherwise move them around unless you know exactly ## what you are doing... _LT_COMPILER_PIC($1) _LT_COMPILER_C_O($1) _LT_COMPILER_FILE_LOCKS($1) _LT_LINKER_SHLIBS($1) _LT_SYS_DYNAMIC_LINKER($1) _LT_LINKER_HARDCODE_LIBPATH($1) _LT_CONFIG($1) fi # test -n "$compiler" GCC=$lt_save_GCC CC=$lt_save_CC CFLAGS=$lt_save_CFLAGS fi # test yes != "$_lt_disable_F77" AC_LANG_POP ])# _LT_LANG_F77_CONFIG # _LT_LANG_FC_CONFIG([TAG]) # ------------------------- # Ensure that the configuration variables for a Fortran compiler are # suitably defined. These variables are subsequently used by _LT_CONFIG # to write the compiler configuration to 'libtool'. m4_defun([_LT_LANG_FC_CONFIG], [AC_LANG_PUSH(Fortran) if test -z "$FC" || test no = "$FC"; then _lt_disable_FC=yes fi _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(allow_undefined_flag, $1)= _LT_TAGVAR(always_export_symbols, $1)=no _LT_TAGVAR(archive_expsym_cmds, $1)= _LT_TAGVAR(export_dynamic_flag_spec, $1)= _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_direct_absolute, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)= _LT_TAGVAR(hardcode_libdir_separator, $1)= _LT_TAGVAR(hardcode_minus_L, $1)=no _LT_TAGVAR(hardcode_automatic, $1)=no _LT_TAGVAR(inherit_rpath, $1)=no _LT_TAGVAR(module_cmds, $1)= _LT_TAGVAR(module_expsym_cmds, $1)= _LT_TAGVAR(link_all_deplibs, $1)=unknown _LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds _LT_TAGVAR(reload_flag, $1)=$reload_flag _LT_TAGVAR(reload_cmds, $1)=$reload_cmds _LT_TAGVAR(no_undefined_flag, $1)= _LT_TAGVAR(whole_archive_flag_spec, $1)= _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no # Source file extension for fc test sources. ac_ext=${ac_fc_srcext-f} # Object file extension for compiled fc test sources. objext=o _LT_TAGVAR(objext, $1)=$objext # No sense in running all these tests if we already determined that # the FC compiler isn't working. Some variables (like enable_shared) # are currently assumed to apply to all compilers on this platform, # and will be corrupted by setting them based on a non-working compiler. if test yes != "$_lt_disable_FC"; then # Code to be used in simple compile tests lt_simple_compile_test_code="\ subroutine t return end " # Code to be used in simple link tests lt_simple_link_test_code="\ program t end " # ltmain only uses $CC for tagged configurations so make sure $CC is set. _LT_TAG_COMPILER # save warnings/boilerplate of simple test code _LT_COMPILER_BOILERPLATE _LT_LINKER_BOILERPLATE # Allow CC to be a program name with arguments. lt_save_CC=$CC lt_save_GCC=$GCC lt_save_CFLAGS=$CFLAGS CC=${FC-"f95"} CFLAGS=$FCFLAGS compiler=$CC GCC=$ac_cv_fc_compiler_gnu _LT_TAGVAR(compiler, $1)=$CC _LT_CC_BASENAME([$compiler]) if test -n "$compiler"; then AC_MSG_CHECKING([if libtool supports shared libraries]) AC_MSG_RESULT([$can_build_shared]) AC_MSG_CHECKING([whether to build shared libraries]) test no = "$can_build_shared" && enable_shared=no # On AIX, shared libraries and static libraries use the same namespace, and # are all built from PIC. case $host_os in aix3*) test yes = "$enable_shared" && enable_static=no if test -n "$RANLIB"; then archive_cmds="$archive_cmds~\$RANLIB \$lib" postinstall_cmds='$RANLIB $lib' fi ;; aix[[4-9]]*) if test ia64 != "$host_cpu"; then case $enable_shared,$with_aix_soname,$aix_use_runtimelinking in yes,aix,yes) ;; # shared object as lib.so file only yes,svr4,*) ;; # shared object as lib.so archive member only yes,*) enable_static=no ;; # shared object in lib.a archive as well esac fi ;; esac AC_MSG_RESULT([$enable_shared]) AC_MSG_CHECKING([whether to build static libraries]) # Make sure either enable_shared or enable_static is yes. test yes = "$enable_shared" || enable_static=yes AC_MSG_RESULT([$enable_static]) _LT_TAGVAR(GCC, $1)=$ac_cv_fc_compiler_gnu _LT_TAGVAR(LD, $1)=$LD ## CAVEAT EMPTOR: ## There is no encapsulation within the following macros, do not change ## the running order or otherwise move them around unless you know exactly ## what you are doing... _LT_SYS_HIDDEN_LIBDEPS($1) _LT_COMPILER_PIC($1) _LT_COMPILER_C_O($1) _LT_COMPILER_FILE_LOCKS($1) _LT_LINKER_SHLIBS($1) _LT_SYS_DYNAMIC_LINKER($1) _LT_LINKER_HARDCODE_LIBPATH($1) _LT_CONFIG($1) fi # test -n "$compiler" GCC=$lt_save_GCC CC=$lt_save_CC CFLAGS=$lt_save_CFLAGS fi # test yes != "$_lt_disable_FC" AC_LANG_POP ])# _LT_LANG_FC_CONFIG # _LT_LANG_GCJ_CONFIG([TAG]) # -------------------------- # Ensure that the configuration variables for the GNU Java Compiler compiler # are suitably defined. These variables are subsequently used by _LT_CONFIG # to write the compiler configuration to 'libtool'. m4_defun([_LT_LANG_GCJ_CONFIG], [AC_REQUIRE([LT_PROG_GCJ])dnl AC_LANG_SAVE # Source file extension for Java test sources. ac_ext=java # Object file extension for compiled Java test sources. objext=o _LT_TAGVAR(objext, $1)=$objext # Code to be used in simple compile tests lt_simple_compile_test_code="class foo {}" # Code to be used in simple link tests lt_simple_link_test_code='public class conftest { public static void main(String[[]] argv) {}; }' # ltmain only uses $CC for tagged configurations so make sure $CC is set. _LT_TAG_COMPILER # save warnings/boilerplate of simple test code _LT_COMPILER_BOILERPLATE _LT_LINKER_BOILERPLATE # Allow CC to be a program name with arguments. lt_save_CC=$CC lt_save_CFLAGS=$CFLAGS lt_save_GCC=$GCC GCC=yes CC=${GCJ-"gcj"} CFLAGS=$GCJFLAGS compiler=$CC _LT_TAGVAR(compiler, $1)=$CC _LT_TAGVAR(LD, $1)=$LD _LT_CC_BASENAME([$compiler]) # GCJ did not exist at the time GCC didn't implicitly link libc in. _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds _LT_TAGVAR(reload_flag, $1)=$reload_flag _LT_TAGVAR(reload_cmds, $1)=$reload_cmds if test -n "$compiler"; then _LT_COMPILER_NO_RTTI($1) _LT_COMPILER_PIC($1) _LT_COMPILER_C_O($1) _LT_COMPILER_FILE_LOCKS($1) _LT_LINKER_SHLIBS($1) _LT_LINKER_HARDCODE_LIBPATH($1) _LT_CONFIG($1) fi AC_LANG_RESTORE GCC=$lt_save_GCC CC=$lt_save_CC CFLAGS=$lt_save_CFLAGS ])# _LT_LANG_GCJ_CONFIG # _LT_LANG_GO_CONFIG([TAG]) # -------------------------- # Ensure that the configuration variables for the GNU Go compiler # are suitably defined. These variables are subsequently used by _LT_CONFIG # to write the compiler configuration to 'libtool'. m4_defun([_LT_LANG_GO_CONFIG], [AC_REQUIRE([LT_PROG_GO])dnl AC_LANG_SAVE # Source file extension for Go test sources. ac_ext=go # Object file extension for compiled Go test sources. objext=o _LT_TAGVAR(objext, $1)=$objext # Code to be used in simple compile tests lt_simple_compile_test_code="package main; func main() { }" # Code to be used in simple link tests lt_simple_link_test_code='package main; func main() { }' # ltmain only uses $CC for tagged configurations so make sure $CC is set. _LT_TAG_COMPILER # save warnings/boilerplate of simple test code _LT_COMPILER_BOILERPLATE _LT_LINKER_BOILERPLATE # Allow CC to be a program name with arguments. lt_save_CC=$CC lt_save_CFLAGS=$CFLAGS lt_save_GCC=$GCC GCC=yes CC=${GOC-"gccgo"} CFLAGS=$GOFLAGS compiler=$CC _LT_TAGVAR(compiler, $1)=$CC _LT_TAGVAR(LD, $1)=$LD _LT_CC_BASENAME([$compiler]) # Go did not exist at the time GCC didn't implicitly link libc in. _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds _LT_TAGVAR(reload_flag, $1)=$reload_flag _LT_TAGVAR(reload_cmds, $1)=$reload_cmds if test -n "$compiler"; then _LT_COMPILER_NO_RTTI($1) _LT_COMPILER_PIC($1) _LT_COMPILER_C_O($1) _LT_COMPILER_FILE_LOCKS($1) _LT_LINKER_SHLIBS($1) _LT_LINKER_HARDCODE_LIBPATH($1) _LT_CONFIG($1) fi AC_LANG_RESTORE GCC=$lt_save_GCC CC=$lt_save_CC CFLAGS=$lt_save_CFLAGS ])# _LT_LANG_GO_CONFIG # _LT_LANG_RC_CONFIG([TAG]) # ------------------------- # Ensure that the configuration variables for the Windows resource compiler # are suitably defined. These variables are subsequently used by _LT_CONFIG # to write the compiler configuration to 'libtool'. m4_defun([_LT_LANG_RC_CONFIG], [AC_REQUIRE([LT_PROG_RC])dnl AC_LANG_SAVE # Source file extension for RC test sources. ac_ext=rc # Object file extension for compiled RC test sources. objext=o _LT_TAGVAR(objext, $1)=$objext # Code to be used in simple compile tests lt_simple_compile_test_code='sample MENU { MENUITEM "&Soup", 100, CHECKED }' # Code to be used in simple link tests lt_simple_link_test_code=$lt_simple_compile_test_code # ltmain only uses $CC for tagged configurations so make sure $CC is set. _LT_TAG_COMPILER # save warnings/boilerplate of simple test code _LT_COMPILER_BOILERPLATE _LT_LINKER_BOILERPLATE # Allow CC to be a program name with arguments. lt_save_CC=$CC lt_save_CFLAGS=$CFLAGS lt_save_GCC=$GCC GCC= CC=${RC-"windres"} CFLAGS= compiler=$CC _LT_TAGVAR(compiler, $1)=$CC _LT_CC_BASENAME([$compiler]) _LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=yes if test -n "$compiler"; then : _LT_CONFIG($1) fi GCC=$lt_save_GCC AC_LANG_RESTORE CC=$lt_save_CC CFLAGS=$lt_save_CFLAGS ])# _LT_LANG_RC_CONFIG # LT_PROG_GCJ # ----------- AC_DEFUN([LT_PROG_GCJ], [m4_ifdef([AC_PROG_GCJ], [AC_PROG_GCJ], [m4_ifdef([A][M_PROG_GCJ], [A][M_PROG_GCJ], [AC_CHECK_TOOL(GCJ, gcj,) test set = "${GCJFLAGS+set}" || GCJFLAGS="-g -O2" AC_SUBST(GCJFLAGS)])])[]dnl ]) # Old name: AU_ALIAS([LT_AC_PROG_GCJ], [LT_PROG_GCJ]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([LT_AC_PROG_GCJ], []) # LT_PROG_GO # ---------- AC_DEFUN([LT_PROG_GO], [AC_CHECK_TOOL(GOC, gccgo,) ]) # LT_PROG_RC # ---------- AC_DEFUN([LT_PROG_RC], [AC_CHECK_TOOL(RC, windres,) ]) # Old name: AU_ALIAS([LT_AC_PROG_RC], [LT_PROG_RC]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([LT_AC_PROG_RC], []) # _LT_DECL_EGREP # -------------- # If we don't have a new enough Autoconf to choose the best grep # available, choose the one first in the user's PATH. m4_defun([_LT_DECL_EGREP], [AC_REQUIRE([AC_PROG_EGREP])dnl AC_REQUIRE([AC_PROG_FGREP])dnl test -z "$GREP" && GREP=grep _LT_DECL([], [GREP], [1], [A grep program that handles long lines]) _LT_DECL([], [EGREP], [1], [An ERE matcher]) _LT_DECL([], [FGREP], [1], [A literal string matcher]) dnl Non-bleeding-edge autoconf doesn't subst GREP, so do it here too AC_SUBST([GREP]) ]) # _LT_DECL_OBJDUMP # -------------- # If we don't have a new enough Autoconf to choose the best objdump # available, choose the one first in the user's PATH. m4_defun([_LT_DECL_OBJDUMP], [AC_CHECK_TOOL(OBJDUMP, objdump, false) test -z "$OBJDUMP" && OBJDUMP=objdump _LT_DECL([], [OBJDUMP], [1], [An object symbol dumper]) AC_SUBST([OBJDUMP]) ]) # _LT_DECL_DLLTOOL # ---------------- # Ensure DLLTOOL variable is set. m4_defun([_LT_DECL_DLLTOOL], [AC_CHECK_TOOL(DLLTOOL, dlltool, false) test -z "$DLLTOOL" && DLLTOOL=dlltool _LT_DECL([], [DLLTOOL], [1], [DLL creation program]) AC_SUBST([DLLTOOL]) ]) # _LT_DECL_FILECMD # ---------------- # Check for a file(cmd) program that can be used to detect file type and magic m4_defun([_LT_DECL_FILECMD], [AC_CHECK_TOOL([FILECMD], [file], [:]) _LT_DECL([], [FILECMD], [1], [A file(cmd) program that detects file types]) ])# _LD_DECL_FILECMD # _LT_DECL_SED # ------------ # Check for a fully-functional sed program, that truncates # as few characters as possible. Prefer GNU sed if found. m4_defun([_LT_DECL_SED], [AC_PROG_SED test -z "$SED" && SED=sed Xsed="$SED -e 1s/^X//" _LT_DECL([], [SED], [1], [A sed program that does not truncate output]) _LT_DECL([], [Xsed], ["\$SED -e 1s/^X//"], [Sed that helps us avoid accidentally triggering echo(1) options like -n]) ])# _LT_DECL_SED m4_ifndef([AC_PROG_SED], [ # NOTE: This macro has been submitted for inclusion into # # GNU Autoconf as AC_PROG_SED. When it is available in # # a released version of Autoconf we should remove this # # macro and use it instead. # m4_defun([AC_PROG_SED], [AC_MSG_CHECKING([for a sed that does not truncate output]) AC_CACHE_VAL(lt_cv_path_SED, [# Loop through the user's path and test for sed and gsed. # Then use that list of sed's as ones to test for truncation. as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for lt_ac_prog in sed gsed; do for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$lt_ac_prog$ac_exec_ext"; then lt_ac_sed_list="$lt_ac_sed_list $as_dir/$lt_ac_prog$ac_exec_ext" fi done done done IFS=$as_save_IFS lt_ac_max=0 lt_ac_count=0 # Add /usr/xpg4/bin/sed as it is typically found on Solaris # along with /bin/sed that truncates output. for lt_ac_sed in $lt_ac_sed_list /usr/xpg4/bin/sed; do test ! -f "$lt_ac_sed" && continue cat /dev/null > conftest.in lt_ac_count=0 echo $ECHO_N "0123456789$ECHO_C" >conftest.in # Check for GNU sed and select it if it is found. if "$lt_ac_sed" --version 2>&1 < /dev/null | grep 'GNU' > /dev/null; then lt_cv_path_SED=$lt_ac_sed break fi while true; do cat conftest.in conftest.in >conftest.tmp mv conftest.tmp conftest.in cp conftest.in conftest.nl echo >>conftest.nl $lt_ac_sed -e 's/a$//' < conftest.nl >conftest.out || break cmp -s conftest.out conftest.nl || break # 10000 chars as input seems more than enough test 10 -lt "$lt_ac_count" && break lt_ac_count=`expr $lt_ac_count + 1` if test "$lt_ac_count" -gt "$lt_ac_max"; then lt_ac_max=$lt_ac_count lt_cv_path_SED=$lt_ac_sed fi done done ]) SED=$lt_cv_path_SED AC_SUBST([SED]) AC_MSG_RESULT([$SED]) ])#AC_PROG_SED ])#m4_ifndef # Old name: AU_ALIAS([LT_AC_PROG_SED], [AC_PROG_SED]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([LT_AC_PROG_SED], []) # _LT_CHECK_SHELL_FEATURES # ------------------------ # Find out whether the shell is Bourne or XSI compatible, # or has some other useful features. m4_defun([_LT_CHECK_SHELL_FEATURES], [if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then lt_unset=unset else lt_unset=false fi _LT_DECL([], [lt_unset], [0], [whether the shell understands "unset"])dnl # test EBCDIC or ASCII case `echo X|tr X '\101'` in A) # ASCII based system # \n is not interpreted correctly by Solaris 8 /usr/ucb/tr lt_SP2NL='tr \040 \012' lt_NL2SP='tr \015\012 \040\040' ;; *) # EBCDIC based system lt_SP2NL='tr \100 \n' lt_NL2SP='tr \r\n \100\100' ;; esac _LT_DECL([SP2NL], [lt_SP2NL], [1], [turn spaces into newlines])dnl _LT_DECL([NL2SP], [lt_NL2SP], [1], [turn newlines into spaces])dnl ])# _LT_CHECK_SHELL_FEATURES # _LT_PATH_CONVERSION_FUNCTIONS # ----------------------------- # Determine what file name conversion functions should be used by # func_to_host_file (and, implicitly, by func_to_host_path). These are needed # for certain cross-compile configurations and native mingw. m4_defun([_LT_PATH_CONVERSION_FUNCTIONS], [AC_REQUIRE([AC_CANONICAL_HOST])dnl AC_REQUIRE([AC_CANONICAL_BUILD])dnl AC_MSG_CHECKING([how to convert $build file names to $host format]) AC_CACHE_VAL(lt_cv_to_host_file_cmd, [case $host in *-*-mingw* ) case $build in *-*-mingw* ) # actually msys lt_cv_to_host_file_cmd=func_convert_file_msys_to_w32 ;; *-*-cygwin* ) lt_cv_to_host_file_cmd=func_convert_file_cygwin_to_w32 ;; * ) # otherwise, assume *nix lt_cv_to_host_file_cmd=func_convert_file_nix_to_w32 ;; esac ;; *-*-cygwin* ) case $build in *-*-mingw* ) # actually msys lt_cv_to_host_file_cmd=func_convert_file_msys_to_cygwin ;; *-*-cygwin* ) lt_cv_to_host_file_cmd=func_convert_file_noop ;; * ) # otherwise, assume *nix lt_cv_to_host_file_cmd=func_convert_file_nix_to_cygwin ;; esac ;; * ) # unhandled hosts (and "normal" native builds) lt_cv_to_host_file_cmd=func_convert_file_noop ;; esac ]) to_host_file_cmd=$lt_cv_to_host_file_cmd AC_MSG_RESULT([$lt_cv_to_host_file_cmd]) _LT_DECL([to_host_file_cmd], [lt_cv_to_host_file_cmd], [0], [convert $build file names to $host format])dnl AC_MSG_CHECKING([how to convert $build file names to toolchain format]) AC_CACHE_VAL(lt_cv_to_tool_file_cmd, [#assume ordinary cross tools, or native build. lt_cv_to_tool_file_cmd=func_convert_file_noop case $host in *-*-mingw* ) case $build in *-*-mingw* ) # actually msys lt_cv_to_tool_file_cmd=func_convert_file_msys_to_w32 ;; esac ;; esac ]) to_tool_file_cmd=$lt_cv_to_tool_file_cmd AC_MSG_RESULT([$lt_cv_to_tool_file_cmd]) _LT_DECL([to_tool_file_cmd], [lt_cv_to_tool_file_cmd], [0], [convert $build files to toolchain format])dnl ])# _LT_PATH_CONVERSION_FUNCTIONS # Helper functions for option handling. -*- Autoconf -*- # # Copyright (C) 2004-2005, 2007-2009, 2011-2019, 2021-2022 Free # Software Foundation, Inc. # Written by Gary V. Vaughan, 2004 # # This file is free software; the Free Software Foundation gives # unlimited permission to copy and/or distribute it, with or without # modifications, as long as this notice is preserved. # serial 8 ltoptions.m4 # This is to help aclocal find these macros, as it can't see m4_define. AC_DEFUN([LTOPTIONS_VERSION], [m4_if([1])]) # _LT_MANGLE_OPTION(MACRO-NAME, OPTION-NAME) # ------------------------------------------ m4_define([_LT_MANGLE_OPTION], [[_LT_OPTION_]m4_bpatsubst($1__$2, [[^a-zA-Z0-9_]], [_])]) # _LT_SET_OPTION(MACRO-NAME, OPTION-NAME) # --------------------------------------- # Set option OPTION-NAME for macro MACRO-NAME, and if there is a # matching handler defined, dispatch to it. Other OPTION-NAMEs are # saved as a flag. m4_define([_LT_SET_OPTION], [m4_define(_LT_MANGLE_OPTION([$1], [$2]))dnl m4_ifdef(_LT_MANGLE_DEFUN([$1], [$2]), _LT_MANGLE_DEFUN([$1], [$2]), [m4_warning([Unknown $1 option '$2'])])[]dnl ]) # _LT_IF_OPTION(MACRO-NAME, OPTION-NAME, IF-SET, [IF-NOT-SET]) # ------------------------------------------------------------ # Execute IF-SET if OPTION is set, IF-NOT-SET otherwise. m4_define([_LT_IF_OPTION], [m4_ifdef(_LT_MANGLE_OPTION([$1], [$2]), [$3], [$4])]) # _LT_UNLESS_OPTIONS(MACRO-NAME, OPTION-LIST, IF-NOT-SET) # ------------------------------------------------------- # Execute IF-NOT-SET unless all options in OPTION-LIST for MACRO-NAME # are set. m4_define([_LT_UNLESS_OPTIONS], [m4_foreach([_LT_Option], m4_split(m4_normalize([$2])), [m4_ifdef(_LT_MANGLE_OPTION([$1], _LT_Option), [m4_define([$0_found])])])[]dnl m4_ifdef([$0_found], [m4_undefine([$0_found])], [$3 ])[]dnl ]) # _LT_SET_OPTIONS(MACRO-NAME, OPTION-LIST) # ---------------------------------------- # OPTION-LIST is a space-separated list of Libtool options associated # with MACRO-NAME. If any OPTION has a matching handler declared with # LT_OPTION_DEFINE, dispatch to that macro; otherwise complain about # the unknown option and exit. m4_defun([_LT_SET_OPTIONS], [# Set options m4_foreach([_LT_Option], m4_split(m4_normalize([$2])), [_LT_SET_OPTION([$1], _LT_Option)]) m4_if([$1],[LT_INIT],[ dnl dnl Simply set some default values (i.e off) if boolean options were not dnl specified: _LT_UNLESS_OPTIONS([LT_INIT], [dlopen], [enable_dlopen=no ]) _LT_UNLESS_OPTIONS([LT_INIT], [win32-dll], [enable_win32_dll=no ]) dnl dnl If no reference was made to various pairs of opposing options, then dnl we run the default mode handler for the pair. For example, if neither dnl 'shared' nor 'disable-shared' was passed, we enable building of shared dnl archives by default: _LT_UNLESS_OPTIONS([LT_INIT], [shared disable-shared], [_LT_ENABLE_SHARED]) _LT_UNLESS_OPTIONS([LT_INIT], [static disable-static], [_LT_ENABLE_STATIC]) _LT_UNLESS_OPTIONS([LT_INIT], [pic-only no-pic], [_LT_WITH_PIC]) _LT_UNLESS_OPTIONS([LT_INIT], [fast-install disable-fast-install], [_LT_ENABLE_FAST_INSTALL]) _LT_UNLESS_OPTIONS([LT_INIT], [aix-soname=aix aix-soname=both aix-soname=svr4], [_LT_WITH_AIX_SONAME([aix])]) ]) ])# _LT_SET_OPTIONS # _LT_MANGLE_DEFUN(MACRO-NAME, OPTION-NAME) # ----------------------------------------- m4_define([_LT_MANGLE_DEFUN], [[_LT_OPTION_DEFUN_]m4_bpatsubst(m4_toupper([$1__$2]), [[^A-Z0-9_]], [_])]) # LT_OPTION_DEFINE(MACRO-NAME, OPTION-NAME, CODE) # ----------------------------------------------- m4_define([LT_OPTION_DEFINE], [m4_define(_LT_MANGLE_DEFUN([$1], [$2]), [$3])[]dnl ])# LT_OPTION_DEFINE # dlopen # ------ LT_OPTION_DEFINE([LT_INIT], [dlopen], [enable_dlopen=yes ]) AU_DEFUN([AC_LIBTOOL_DLOPEN], [_LT_SET_OPTION([LT_INIT], [dlopen]) AC_DIAGNOSE([obsolete], [$0: Remove this warning and the call to _LT_SET_OPTION when you put the 'dlopen' option into LT_INIT's first parameter.]) ]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_LIBTOOL_DLOPEN], []) # win32-dll # --------- # Declare package support for building win32 dll's. LT_OPTION_DEFINE([LT_INIT], [win32-dll], [enable_win32_dll=yes case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-cegcc*) AC_CHECK_TOOL(AS, as, false) AC_CHECK_TOOL(DLLTOOL, dlltool, false) AC_CHECK_TOOL(OBJDUMP, objdump, false) ;; esac test -z "$AS" && AS=as _LT_DECL([], [AS], [1], [Assembler program])dnl test -z "$DLLTOOL" && DLLTOOL=dlltool _LT_DECL([], [DLLTOOL], [1], [DLL creation program])dnl test -z "$OBJDUMP" && OBJDUMP=objdump _LT_DECL([], [OBJDUMP], [1], [Object dumper program])dnl ])# win32-dll AU_DEFUN([AC_LIBTOOL_WIN32_DLL], [AC_REQUIRE([AC_CANONICAL_HOST])dnl _LT_SET_OPTION([LT_INIT], [win32-dll]) AC_DIAGNOSE([obsolete], [$0: Remove this warning and the call to _LT_SET_OPTION when you put the 'win32-dll' option into LT_INIT's first parameter.]) ]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_LIBTOOL_WIN32_DLL], []) # _LT_ENABLE_SHARED([DEFAULT]) # ---------------------------- # implement the --enable-shared flag, and supports the 'shared' and # 'disable-shared' LT_INIT options. # DEFAULT is either 'yes' or 'no'. If omitted, it defaults to 'yes'. m4_define([_LT_ENABLE_SHARED], [m4_define([_LT_ENABLE_SHARED_DEFAULT], [m4_if($1, no, no, yes)])dnl AC_ARG_ENABLE([shared], [AS_HELP_STRING([--enable-shared@<:@=PKGS@:>@], [build shared libraries @<:@default=]_LT_ENABLE_SHARED_DEFAULT[@:>@])], [p=${PACKAGE-default} case $enableval in yes) enable_shared=yes ;; no) enable_shared=no ;; *) enable_shared=no # Look at the argument we got. We use all the common list separators. lt_save_ifs=$IFS; IFS=$IFS$PATH_SEPARATOR, for pkg in $enableval; do IFS=$lt_save_ifs if test "X$pkg" = "X$p"; then enable_shared=yes fi done IFS=$lt_save_ifs ;; esac], [enable_shared=]_LT_ENABLE_SHARED_DEFAULT) _LT_DECL([build_libtool_libs], [enable_shared], [0], [Whether or not to build shared libraries]) ])# _LT_ENABLE_SHARED LT_OPTION_DEFINE([LT_INIT], [shared], [_LT_ENABLE_SHARED([yes])]) LT_OPTION_DEFINE([LT_INIT], [disable-shared], [_LT_ENABLE_SHARED([no])]) # Old names: AC_DEFUN([AC_ENABLE_SHARED], [_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[shared]) ]) AC_DEFUN([AC_DISABLE_SHARED], [_LT_SET_OPTION([LT_INIT], [disable-shared]) ]) AU_DEFUN([AM_ENABLE_SHARED], [AC_ENABLE_SHARED($@)]) AU_DEFUN([AM_DISABLE_SHARED], [AC_DISABLE_SHARED($@)]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AM_ENABLE_SHARED], []) dnl AC_DEFUN([AM_DISABLE_SHARED], []) # _LT_ENABLE_STATIC([DEFAULT]) # ---------------------------- # implement the --enable-static flag, and support the 'static' and # 'disable-static' LT_INIT options. # DEFAULT is either 'yes' or 'no'. If omitted, it defaults to 'yes'. m4_define([_LT_ENABLE_STATIC], [m4_define([_LT_ENABLE_STATIC_DEFAULT], [m4_if($1, no, no, yes)])dnl AC_ARG_ENABLE([static], [AS_HELP_STRING([--enable-static@<:@=PKGS@:>@], [build static libraries @<:@default=]_LT_ENABLE_STATIC_DEFAULT[@:>@])], [p=${PACKAGE-default} case $enableval in yes) enable_static=yes ;; no) enable_static=no ;; *) enable_static=no # Look at the argument we got. We use all the common list separators. lt_save_ifs=$IFS; IFS=$IFS$PATH_SEPARATOR, for pkg in $enableval; do IFS=$lt_save_ifs if test "X$pkg" = "X$p"; then enable_static=yes fi done IFS=$lt_save_ifs ;; esac], [enable_static=]_LT_ENABLE_STATIC_DEFAULT) _LT_DECL([build_old_libs], [enable_static], [0], [Whether or not to build static libraries]) ])# _LT_ENABLE_STATIC LT_OPTION_DEFINE([LT_INIT], [static], [_LT_ENABLE_STATIC([yes])]) LT_OPTION_DEFINE([LT_INIT], [disable-static], [_LT_ENABLE_STATIC([no])]) # Old names: AC_DEFUN([AC_ENABLE_STATIC], [_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[static]) ]) AC_DEFUN([AC_DISABLE_STATIC], [_LT_SET_OPTION([LT_INIT], [disable-static]) ]) AU_DEFUN([AM_ENABLE_STATIC], [AC_ENABLE_STATIC($@)]) AU_DEFUN([AM_DISABLE_STATIC], [AC_DISABLE_STATIC($@)]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AM_ENABLE_STATIC], []) dnl AC_DEFUN([AM_DISABLE_STATIC], []) # _LT_ENABLE_FAST_INSTALL([DEFAULT]) # ---------------------------------- # implement the --enable-fast-install flag, and support the 'fast-install' # and 'disable-fast-install' LT_INIT options. # DEFAULT is either 'yes' or 'no'. If omitted, it defaults to 'yes'. m4_define([_LT_ENABLE_FAST_INSTALL], [m4_define([_LT_ENABLE_FAST_INSTALL_DEFAULT], [m4_if($1, no, no, yes)])dnl AC_ARG_ENABLE([fast-install], [AS_HELP_STRING([--enable-fast-install@<:@=PKGS@:>@], [optimize for fast installation @<:@default=]_LT_ENABLE_FAST_INSTALL_DEFAULT[@:>@])], [p=${PACKAGE-default} case $enableval in yes) enable_fast_install=yes ;; no) enable_fast_install=no ;; *) enable_fast_install=no # Look at the argument we got. We use all the common list separators. lt_save_ifs=$IFS; IFS=$IFS$PATH_SEPARATOR, for pkg in $enableval; do IFS=$lt_save_ifs if test "X$pkg" = "X$p"; then enable_fast_install=yes fi done IFS=$lt_save_ifs ;; esac], [enable_fast_install=]_LT_ENABLE_FAST_INSTALL_DEFAULT) _LT_DECL([fast_install], [enable_fast_install], [0], [Whether or not to optimize for fast installation])dnl ])# _LT_ENABLE_FAST_INSTALL LT_OPTION_DEFINE([LT_INIT], [fast-install], [_LT_ENABLE_FAST_INSTALL([yes])]) LT_OPTION_DEFINE([LT_INIT], [disable-fast-install], [_LT_ENABLE_FAST_INSTALL([no])]) # Old names: AU_DEFUN([AC_ENABLE_FAST_INSTALL], [_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[fast-install]) AC_DIAGNOSE([obsolete], [$0: Remove this warning and the call to _LT_SET_OPTION when you put the 'fast-install' option into LT_INIT's first parameter.]) ]) AU_DEFUN([AC_DISABLE_FAST_INSTALL], [_LT_SET_OPTION([LT_INIT], [disable-fast-install]) AC_DIAGNOSE([obsolete], [$0: Remove this warning and the call to _LT_SET_OPTION when you put the 'disable-fast-install' option into LT_INIT's first parameter.]) ]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_ENABLE_FAST_INSTALL], []) dnl AC_DEFUN([AM_DISABLE_FAST_INSTALL], []) # _LT_WITH_AIX_SONAME([DEFAULT]) # ---------------------------------- # implement the --with-aix-soname flag, and support the `aix-soname=aix' # and `aix-soname=both' and `aix-soname=svr4' LT_INIT options. DEFAULT # is either `aix', `both' or `svr4'. If omitted, it defaults to `aix'. m4_define([_LT_WITH_AIX_SONAME], [m4_define([_LT_WITH_AIX_SONAME_DEFAULT], [m4_if($1, svr4, svr4, m4_if($1, both, both, aix))])dnl shared_archive_member_spec= case $host,$enable_shared in power*-*-aix[[5-9]]*,yes) AC_MSG_CHECKING([which variant of shared library versioning to provide]) AC_ARG_WITH([aix-soname], [AS_HELP_STRING([--with-aix-soname=aix|svr4|both], [shared library versioning (aka "SONAME") variant to provide on AIX, @<:@default=]_LT_WITH_AIX_SONAME_DEFAULT[@:>@.])], [case $withval in aix|svr4|both) ;; *) AC_MSG_ERROR([Unknown argument to --with-aix-soname]) ;; esac lt_cv_with_aix_soname=$with_aix_soname], [AC_CACHE_VAL([lt_cv_with_aix_soname], [lt_cv_with_aix_soname=]_LT_WITH_AIX_SONAME_DEFAULT) with_aix_soname=$lt_cv_with_aix_soname]) AC_MSG_RESULT([$with_aix_soname]) if test aix != "$with_aix_soname"; then # For the AIX way of multilib, we name the shared archive member # based on the bitwidth used, traditionally 'shr.o' or 'shr_64.o', # and 'shr.imp' or 'shr_64.imp', respectively, for the Import File. # Even when GNU compilers ignore OBJECT_MODE but need '-maix64' flag, # the AIX toolchain works better with OBJECT_MODE set (default 32). if test 64 = "${OBJECT_MODE-32}"; then shared_archive_member_spec=shr_64 else shared_archive_member_spec=shr fi fi ;; *) with_aix_soname=aix ;; esac _LT_DECL([], [shared_archive_member_spec], [0], [Shared archive member basename, for filename based shared library versioning on AIX])dnl ])# _LT_WITH_AIX_SONAME LT_OPTION_DEFINE([LT_INIT], [aix-soname=aix], [_LT_WITH_AIX_SONAME([aix])]) LT_OPTION_DEFINE([LT_INIT], [aix-soname=both], [_LT_WITH_AIX_SONAME([both])]) LT_OPTION_DEFINE([LT_INIT], [aix-soname=svr4], [_LT_WITH_AIX_SONAME([svr4])]) # _LT_WITH_PIC([MODE]) # -------------------- # implement the --with-pic flag, and support the 'pic-only' and 'no-pic' # LT_INIT options. # MODE is either 'yes' or 'no'. If omitted, it defaults to 'both'. m4_define([_LT_WITH_PIC], [AC_ARG_WITH([pic], [AS_HELP_STRING([--with-pic@<:@=PKGS@:>@], [try to use only PIC/non-PIC objects @<:@default=use both@:>@])], [lt_p=${PACKAGE-default} case $withval in yes|no) pic_mode=$withval ;; *) pic_mode=default # Look at the argument we got. We use all the common list separators. lt_save_ifs=$IFS; IFS=$IFS$PATH_SEPARATOR, for lt_pkg in $withval; do IFS=$lt_save_ifs if test "X$lt_pkg" = "X$lt_p"; then pic_mode=yes fi done IFS=$lt_save_ifs ;; esac], [pic_mode=m4_default([$1], [default])]) _LT_DECL([], [pic_mode], [0], [What type of objects to build])dnl ])# _LT_WITH_PIC LT_OPTION_DEFINE([LT_INIT], [pic-only], [_LT_WITH_PIC([yes])]) LT_OPTION_DEFINE([LT_INIT], [no-pic], [_LT_WITH_PIC([no])]) # Old name: AU_DEFUN([AC_LIBTOOL_PICMODE], [_LT_SET_OPTION([LT_INIT], [pic-only]) AC_DIAGNOSE([obsolete], [$0: Remove this warning and the call to _LT_SET_OPTION when you put the 'pic-only' option into LT_INIT's first parameter.]) ]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_LIBTOOL_PICMODE], []) m4_define([_LTDL_MODE], []) LT_OPTION_DEFINE([LTDL_INIT], [nonrecursive], [m4_define([_LTDL_MODE], [nonrecursive])]) LT_OPTION_DEFINE([LTDL_INIT], [recursive], [m4_define([_LTDL_MODE], [recursive])]) LT_OPTION_DEFINE([LTDL_INIT], [subproject], [m4_define([_LTDL_MODE], [subproject])]) m4_define([_LTDL_TYPE], []) LT_OPTION_DEFINE([LTDL_INIT], [installable], [m4_define([_LTDL_TYPE], [installable])]) LT_OPTION_DEFINE([LTDL_INIT], [convenience], [m4_define([_LTDL_TYPE], [convenience])]) # ltsugar.m4 -- libtool m4 base layer. -*-Autoconf-*- # # Copyright (C) 2004-2005, 2007-2008, 2011-2019, 2021-2022 Free Software # Foundation, Inc. # Written by Gary V. Vaughan, 2004 # # This file is free software; the Free Software Foundation gives # unlimited permission to copy and/or distribute it, with or without # modifications, as long as this notice is preserved. # serial 6 ltsugar.m4 # This is to help aclocal find these macros, as it can't see m4_define. AC_DEFUN([LTSUGAR_VERSION], [m4_if([0.1])]) # lt_join(SEP, ARG1, [ARG2...]) # ----------------------------- # Produce ARG1SEPARG2...SEPARGn, omitting [] arguments and their # associated separator. # Needed until we can rely on m4_join from Autoconf 2.62, since all earlier # versions in m4sugar had bugs. m4_define([lt_join], [m4_if([$#], [1], [], [$#], [2], [[$2]], [m4_if([$2], [], [], [[$2]_])$0([$1], m4_shift(m4_shift($@)))])]) m4_define([_lt_join], [m4_if([$#$2], [2], [], [m4_if([$2], [], [], [[$1$2]])$0([$1], m4_shift(m4_shift($@)))])]) # lt_car(LIST) # lt_cdr(LIST) # ------------ # Manipulate m4 lists. # These macros are necessary as long as will still need to support # Autoconf-2.59, which quotes differently. m4_define([lt_car], [[$1]]) m4_define([lt_cdr], [m4_if([$#], 0, [m4_fatal([$0: cannot be called without arguments])], [$#], 1, [], [m4_dquote(m4_shift($@))])]) m4_define([lt_unquote], $1) # lt_append(MACRO-NAME, STRING, [SEPARATOR]) # ------------------------------------------ # Redefine MACRO-NAME to hold its former content plus 'SEPARATOR''STRING'. # Note that neither SEPARATOR nor STRING are expanded; they are appended # to MACRO-NAME as is (leaving the expansion for when MACRO-NAME is invoked). # No SEPARATOR is output if MACRO-NAME was previously undefined (different # than defined and empty). # # This macro is needed until we can rely on Autoconf 2.62, since earlier # versions of m4sugar mistakenly expanded SEPARATOR but not STRING. m4_define([lt_append], [m4_define([$1], m4_ifdef([$1], [m4_defn([$1])[$3]])[$2])]) # lt_combine(SEP, PREFIX-LIST, INFIX, SUFFIX1, [SUFFIX2...]) # ---------------------------------------------------------- # Produce a SEP delimited list of all paired combinations of elements of # PREFIX-LIST with SUFFIX1 through SUFFIXn. Each element of the list # has the form PREFIXmINFIXSUFFIXn. # Needed until we can rely on m4_combine added in Autoconf 2.62. m4_define([lt_combine], [m4_if(m4_eval([$# > 3]), [1], [m4_pushdef([_Lt_sep], [m4_define([_Lt_sep], m4_defn([lt_car]))])]]dnl [[m4_foreach([_Lt_prefix], [$2], [m4_foreach([_Lt_suffix], ]m4_dquote(m4_dquote(m4_shift(m4_shift(m4_shift($@)))))[, [_Lt_sep([$1])[]m4_defn([_Lt_prefix])[$3]m4_defn([_Lt_suffix])])])])]) # lt_if_append_uniq(MACRO-NAME, VARNAME, [SEPARATOR], [UNIQ], [NOT-UNIQ]) # ----------------------------------------------------------------------- # Iff MACRO-NAME does not yet contain VARNAME, then append it (delimited # by SEPARATOR if supplied) and expand UNIQ, else NOT-UNIQ. m4_define([lt_if_append_uniq], [m4_ifdef([$1], [m4_if(m4_index([$3]m4_defn([$1])[$3], [$3$2$3]), [-1], [lt_append([$1], [$2], [$3])$4], [$5])], [lt_append([$1], [$2], [$3])$4])]) # lt_dict_add(DICT, KEY, VALUE) # ----------------------------- m4_define([lt_dict_add], [m4_define([$1($2)], [$3])]) # lt_dict_add_subkey(DICT, KEY, SUBKEY, VALUE) # -------------------------------------------- m4_define([lt_dict_add_subkey], [m4_define([$1($2:$3)], [$4])]) # lt_dict_fetch(DICT, KEY, [SUBKEY]) # ---------------------------------- m4_define([lt_dict_fetch], [m4_ifval([$3], m4_ifdef([$1($2:$3)], [m4_defn([$1($2:$3)])]), m4_ifdef([$1($2)], [m4_defn([$1($2)])]))]) # lt_if_dict_fetch(DICT, KEY, [SUBKEY], VALUE, IF-TRUE, [IF-FALSE]) # ----------------------------------------------------------------- m4_define([lt_if_dict_fetch], [m4_if(lt_dict_fetch([$1], [$2], [$3]), [$4], [$5], [$6])]) # lt_dict_filter(DICT, [SUBKEY], VALUE, [SEPARATOR], KEY, [...]) # -------------------------------------------------------------- m4_define([lt_dict_filter], [m4_if([$5], [], [], [lt_join(m4_quote(m4_default([$4], [[, ]])), lt_unquote(m4_split(m4_normalize(m4_foreach(_Lt_key, lt_car([m4_shiftn(4, $@)]), [lt_if_dict_fetch([$1], _Lt_key, [$2], [$3], [_Lt_key ])])))))])[]dnl ]) # ltversion.m4 -- version numbers -*- Autoconf -*- # # Copyright (C) 2004, 2011-2019, 2021-2022 Free Software Foundation, # Inc. # Written by Scott James Remnant, 2004 # # This file is free software; the Free Software Foundation gives # unlimited permission to copy and/or distribute it, with or without # modifications, as long as this notice is preserved. # @configure_input@ # serial 4245 ltversion.m4 # This file is part of GNU Libtool m4_define([LT_PACKAGE_VERSION], [2.4.7]) m4_define([LT_PACKAGE_REVISION], [2.4.7]) AC_DEFUN([LTVERSION_VERSION], [macro_version='2.4.7' macro_revision='2.4.7' _LT_DECL(, macro_version, 0, [Which release of libtool.m4 was used?]) _LT_DECL(, macro_revision, 0) ]) # lt~obsolete.m4 -- aclocal satisfying obsolete definitions. -*-Autoconf-*- # # Copyright (C) 2004-2005, 2007, 2009, 2011-2019, 2021-2022 Free # Software Foundation, Inc. # Written by Scott James Remnant, 2004. # # This file is free software; the Free Software Foundation gives # unlimited permission to copy and/or distribute it, with or without # modifications, as long as this notice is preserved. # serial 5 lt~obsolete.m4 # These exist entirely to fool aclocal when bootstrapping libtool. # # In the past libtool.m4 has provided macros via AC_DEFUN (or AU_DEFUN), # which have later been changed to m4_define as they aren't part of the # exported API, or moved to Autoconf or Automake where they belong. # # The trouble is, aclocal is a bit thick. It'll see the old AC_DEFUN # in /usr/share/aclocal/libtool.m4 and remember it, then when it sees us # using a macro with the same name in our local m4/libtool.m4 it'll # pull the old libtool.m4 in (it doesn't see our shiny new m4_define # and doesn't know about Autoconf macros at all.) # # So we provide this file, which has a silly filename so it's always # included after everything else. This provides aclocal with the # AC_DEFUNs it wants, but when m4 processes it, it doesn't do anything # because those macros already exist, or will be overwritten later. # We use AC_DEFUN over AU_DEFUN for compatibility with aclocal-1.6. # # Anytime we withdraw an AC_DEFUN or AU_DEFUN, remember to add it here. # Yes, that means every name once taken will need to remain here until # we give up compatibility with versions before 1.7, at which point # we need to keep only those names which we still refer to. # This is to help aclocal find these macros, as it can't see m4_define. AC_DEFUN([LTOBSOLETE_VERSION], [m4_if([1])]) m4_ifndef([AC_LIBTOOL_LINKER_OPTION], [AC_DEFUN([AC_LIBTOOL_LINKER_OPTION])]) m4_ifndef([AC_PROG_EGREP], [AC_DEFUN([AC_PROG_EGREP])]) m4_ifndef([_LT_AC_PROG_ECHO_BACKSLASH], [AC_DEFUN([_LT_AC_PROG_ECHO_BACKSLASH])]) m4_ifndef([_LT_AC_SHELL_INIT], [AC_DEFUN([_LT_AC_SHELL_INIT])]) m4_ifndef([_LT_AC_SYS_LIBPATH_AIX], [AC_DEFUN([_LT_AC_SYS_LIBPATH_AIX])]) m4_ifndef([_LT_PROG_LTMAIN], [AC_DEFUN([_LT_PROG_LTMAIN])]) m4_ifndef([_LT_AC_TAGVAR], [AC_DEFUN([_LT_AC_TAGVAR])]) m4_ifndef([AC_LTDL_ENABLE_INSTALL], [AC_DEFUN([AC_LTDL_ENABLE_INSTALL])]) m4_ifndef([AC_LTDL_PREOPEN], [AC_DEFUN([AC_LTDL_PREOPEN])]) m4_ifndef([_LT_AC_SYS_COMPILER], [AC_DEFUN([_LT_AC_SYS_COMPILER])]) m4_ifndef([_LT_AC_LOCK], [AC_DEFUN([_LT_AC_LOCK])]) m4_ifndef([AC_LIBTOOL_SYS_OLD_ARCHIVE], [AC_DEFUN([AC_LIBTOOL_SYS_OLD_ARCHIVE])]) m4_ifndef([_LT_AC_TRY_DLOPEN_SELF], [AC_DEFUN([_LT_AC_TRY_DLOPEN_SELF])]) m4_ifndef([AC_LIBTOOL_PROG_CC_C_O], [AC_DEFUN([AC_LIBTOOL_PROG_CC_C_O])]) m4_ifndef([AC_LIBTOOL_SYS_HARD_LINK_LOCKS], [AC_DEFUN([AC_LIBTOOL_SYS_HARD_LINK_LOCKS])]) m4_ifndef([AC_LIBTOOL_OBJDIR], [AC_DEFUN([AC_LIBTOOL_OBJDIR])]) m4_ifndef([AC_LTDL_OBJDIR], [AC_DEFUN([AC_LTDL_OBJDIR])]) m4_ifndef([AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH], [AC_DEFUN([AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH])]) m4_ifndef([AC_LIBTOOL_SYS_LIB_STRIP], [AC_DEFUN([AC_LIBTOOL_SYS_LIB_STRIP])]) m4_ifndef([AC_PATH_MAGIC], [AC_DEFUN([AC_PATH_MAGIC])]) m4_ifndef([AC_PROG_LD_GNU], [AC_DEFUN([AC_PROG_LD_GNU])]) m4_ifndef([AC_PROG_LD_RELOAD_FLAG], [AC_DEFUN([AC_PROG_LD_RELOAD_FLAG])]) m4_ifndef([AC_DEPLIBS_CHECK_METHOD], [AC_DEFUN([AC_DEPLIBS_CHECK_METHOD])]) m4_ifndef([AC_LIBTOOL_PROG_COMPILER_NO_RTTI], [AC_DEFUN([AC_LIBTOOL_PROG_COMPILER_NO_RTTI])]) m4_ifndef([AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE], [AC_DEFUN([AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE])]) m4_ifndef([AC_LIBTOOL_PROG_COMPILER_PIC], [AC_DEFUN([AC_LIBTOOL_PROG_COMPILER_PIC])]) m4_ifndef([AC_LIBTOOL_PROG_LD_SHLIBS], [AC_DEFUN([AC_LIBTOOL_PROG_LD_SHLIBS])]) m4_ifndef([AC_LIBTOOL_POSTDEP_PREDEP], [AC_DEFUN([AC_LIBTOOL_POSTDEP_PREDEP])]) m4_ifndef([LT_AC_PROG_EGREP], [AC_DEFUN([LT_AC_PROG_EGREP])]) m4_ifndef([LT_AC_PROG_SED], [AC_DEFUN([LT_AC_PROG_SED])]) m4_ifndef([_LT_CC_BASENAME], [AC_DEFUN([_LT_CC_BASENAME])]) m4_ifndef([_LT_COMPILER_BOILERPLATE], [AC_DEFUN([_LT_COMPILER_BOILERPLATE])]) m4_ifndef([_LT_LINKER_BOILERPLATE], [AC_DEFUN([_LT_LINKER_BOILERPLATE])]) m4_ifndef([_AC_PROG_LIBTOOL], [AC_DEFUN([_AC_PROG_LIBTOOL])]) m4_ifndef([AC_LIBTOOL_SETUP], [AC_DEFUN([AC_LIBTOOL_SETUP])]) m4_ifndef([_LT_AC_CHECK_DLFCN], [AC_DEFUN([_LT_AC_CHECK_DLFCN])]) m4_ifndef([AC_LIBTOOL_SYS_DYNAMIC_LINKER], [AC_DEFUN([AC_LIBTOOL_SYS_DYNAMIC_LINKER])]) m4_ifndef([_LT_AC_TAGCONFIG], [AC_DEFUN([_LT_AC_TAGCONFIG])]) m4_ifndef([AC_DISABLE_FAST_INSTALL], [AC_DEFUN([AC_DISABLE_FAST_INSTALL])]) m4_ifndef([_LT_AC_LANG_CXX], [AC_DEFUN([_LT_AC_LANG_CXX])]) m4_ifndef([_LT_AC_LANG_F77], [AC_DEFUN([_LT_AC_LANG_F77])]) m4_ifndef([_LT_AC_LANG_GCJ], [AC_DEFUN([_LT_AC_LANG_GCJ])]) m4_ifndef([AC_LIBTOOL_LANG_C_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_C_CONFIG])]) m4_ifndef([_LT_AC_LANG_C_CONFIG], [AC_DEFUN([_LT_AC_LANG_C_CONFIG])]) m4_ifndef([AC_LIBTOOL_LANG_CXX_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_CXX_CONFIG])]) m4_ifndef([_LT_AC_LANG_CXX_CONFIG], [AC_DEFUN([_LT_AC_LANG_CXX_CONFIG])]) m4_ifndef([AC_LIBTOOL_LANG_F77_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_F77_CONFIG])]) m4_ifndef([_LT_AC_LANG_F77_CONFIG], [AC_DEFUN([_LT_AC_LANG_F77_CONFIG])]) m4_ifndef([AC_LIBTOOL_LANG_GCJ_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_GCJ_CONFIG])]) m4_ifndef([_LT_AC_LANG_GCJ_CONFIG], [AC_DEFUN([_LT_AC_LANG_GCJ_CONFIG])]) m4_ifndef([AC_LIBTOOL_LANG_RC_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_RC_CONFIG])]) m4_ifndef([_LT_AC_LANG_RC_CONFIG], [AC_DEFUN([_LT_AC_LANG_RC_CONFIG])]) m4_ifndef([AC_LIBTOOL_CONFIG], [AC_DEFUN([AC_LIBTOOL_CONFIG])]) m4_ifndef([_LT_AC_FILE_LTDLL_C], [AC_DEFUN([_LT_AC_FILE_LTDLL_C])]) m4_ifndef([_LT_REQUIRED_DARWIN_CHECKS], [AC_DEFUN([_LT_REQUIRED_DARWIN_CHECKS])]) m4_ifndef([_LT_AC_PROG_CXXCPP], [AC_DEFUN([_LT_AC_PROG_CXXCPP])]) m4_ifndef([_LT_PREPARE_SED_QUOTE_VARS], [AC_DEFUN([_LT_PREPARE_SED_QUOTE_VARS])]) m4_ifndef([_LT_PROG_ECHO_BACKSLASH], [AC_DEFUN([_LT_PROG_ECHO_BACKSLASH])]) m4_ifndef([_LT_PROG_F77], [AC_DEFUN([_LT_PROG_F77])]) m4_ifndef([_LT_PROG_FC], [AC_DEFUN([_LT_PROG_FC])]) m4_ifndef([_LT_PROG_CXX], [AC_DEFUN([_LT_PROG_CXX])]) # pkg.m4 - Macros to locate and use pkg-config. -*- Autoconf -*- # serial 12 (pkg-config-0.29.2) dnl Copyright © 2004 Scott James Remnant . dnl Copyright © 2012-2015 Dan Nicholson dnl dnl This program is free software; you can redistribute it and/or modify dnl it under the terms of the GNU General Public License as published by dnl the Free Software Foundation; either version 2 of the License, or dnl (at your option) any later version. dnl dnl This program is distributed in the hope that it will be useful, but dnl WITHOUT ANY WARRANTY; without even the implied warranty of dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU dnl General Public License for more details. dnl dnl You should have received a copy of the GNU General Public License dnl along with this program; if not, write to the Free Software dnl Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA dnl 02111-1307, USA. dnl dnl As a special exception to the GNU General Public License, if you dnl distribute this file as part of a program that contains a dnl configuration script generated by Autoconf, you may include it under dnl the same distribution terms that you use for the rest of that dnl program. dnl PKG_PREREQ(MIN-VERSION) dnl ----------------------- dnl Since: 0.29 dnl dnl Verify that the version of the pkg-config macros are at least dnl MIN-VERSION. Unlike PKG_PROG_PKG_CONFIG, which checks the user's dnl installed version of pkg-config, this checks the developer's version dnl of pkg.m4 when generating configure. dnl dnl To ensure that this macro is defined, also add: dnl m4_ifndef([PKG_PREREQ], dnl [m4_fatal([must install pkg-config 0.29 or later before running autoconf/autogen])]) dnl dnl See the "Since" comment for each macro you use to see what version dnl of the macros you require. m4_defun([PKG_PREREQ], [m4_define([PKG_MACROS_VERSION], [0.29.2]) m4_if(m4_version_compare(PKG_MACROS_VERSION, [$1]), -1, [m4_fatal([pkg.m4 version $1 or higher is required but ]PKG_MACROS_VERSION[ found])]) ])dnl PKG_PREREQ dnl PKG_PROG_PKG_CONFIG([MIN-VERSION]) dnl ---------------------------------- dnl Since: 0.16 dnl dnl Search for the pkg-config tool and set the PKG_CONFIG variable to dnl first found in the path. Checks that the version of pkg-config found dnl is at least MIN-VERSION. If MIN-VERSION is not specified, 0.9.0 is dnl used since that's the first version where most current features of dnl pkg-config existed. AC_DEFUN([PKG_PROG_PKG_CONFIG], [m4_pattern_forbid([^_?PKG_[A-Z_]+$]) m4_pattern_allow([^PKG_CONFIG(_(PATH|LIBDIR|SYSROOT_DIR|ALLOW_SYSTEM_(CFLAGS|LIBS)))?$]) m4_pattern_allow([^PKG_CONFIG_(DISABLE_UNINSTALLED|TOP_BUILD_DIR|DEBUG_SPEW)$]) AC_ARG_VAR([PKG_CONFIG], [path to pkg-config utility]) AC_ARG_VAR([PKG_CONFIG_PATH], [directories to add to pkg-config's search path]) AC_ARG_VAR([PKG_CONFIG_LIBDIR], [path overriding pkg-config's built-in search path]) if test "x$ac_cv_env_PKG_CONFIG_set" != "xset"; then AC_PATH_TOOL([PKG_CONFIG], [pkg-config]) fi if test -n "$PKG_CONFIG"; then _pkg_min_version=m4_default([$1], [0.9.0]) AC_MSG_CHECKING([pkg-config is at least version $_pkg_min_version]) if $PKG_CONFIG --atleast-pkgconfig-version $_pkg_min_version; then AC_MSG_RESULT([yes]) else AC_MSG_RESULT([no]) PKG_CONFIG="" fi fi[]dnl ])dnl PKG_PROG_PKG_CONFIG dnl PKG_CHECK_EXISTS(MODULES, [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND]) dnl ------------------------------------------------------------------- dnl Since: 0.18 dnl dnl Check to see whether a particular set of modules exists. Similar to dnl PKG_CHECK_MODULES(), but does not set variables or print errors. dnl dnl Please remember that m4 expands AC_REQUIRE([PKG_PROG_PKG_CONFIG]) dnl only at the first occurrence in configure.ac, so if the first place dnl it's called might be skipped (such as if it is within an "if", you dnl have to call PKG_CHECK_EXISTS manually AC_DEFUN([PKG_CHECK_EXISTS], [AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl if test -n "$PKG_CONFIG" && \ AC_RUN_LOG([$PKG_CONFIG --exists --print-errors "$1"]); then m4_default([$2], [:]) m4_ifvaln([$3], [else $3])dnl fi]) dnl _PKG_CONFIG([VARIABLE], [COMMAND], [MODULES]) dnl --------------------------------------------- dnl Internal wrapper calling pkg-config via PKG_CONFIG and setting dnl pkg_failed based on the result. m4_define([_PKG_CONFIG], [if test -n "$$1"; then pkg_cv_[]$1="$$1" elif test -n "$PKG_CONFIG"; then PKG_CHECK_EXISTS([$3], [pkg_cv_[]$1=`$PKG_CONFIG --[]$2 "$3" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes ], [pkg_failed=yes]) else pkg_failed=untried fi[]dnl ])dnl _PKG_CONFIG dnl _PKG_SHORT_ERRORS_SUPPORTED dnl --------------------------- dnl Internal check to see if pkg-config supports short errors. AC_DEFUN([_PKG_SHORT_ERRORS_SUPPORTED], [AC_REQUIRE([PKG_PROG_PKG_CONFIG]) if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then _pkg_short_errors_supported=yes else _pkg_short_errors_supported=no fi[]dnl ])dnl _PKG_SHORT_ERRORS_SUPPORTED dnl PKG_CHECK_MODULES(VARIABLE-PREFIX, MODULES, [ACTION-IF-FOUND], dnl [ACTION-IF-NOT-FOUND]) dnl -------------------------------------------------------------- dnl Since: 0.4.0 dnl dnl Note that if there is a possibility the first call to dnl PKG_CHECK_MODULES might not happen, you should be sure to include an dnl explicit call to PKG_PROG_PKG_CONFIG in your configure.ac AC_DEFUN([PKG_CHECK_MODULES], [AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl AC_ARG_VAR([$1][_CFLAGS], [C compiler flags for $1, overriding pkg-config])dnl AC_ARG_VAR([$1][_LIBS], [linker flags for $1, overriding pkg-config])dnl pkg_failed=no AC_MSG_CHECKING([for $2]) _PKG_CONFIG([$1][_CFLAGS], [cflags], [$2]) _PKG_CONFIG([$1][_LIBS], [libs], [$2]) m4_define([_PKG_TEXT], [Alternatively, you may set the environment variables $1[]_CFLAGS and $1[]_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details.]) if test $pkg_failed = yes; then AC_MSG_RESULT([no]) _PKG_SHORT_ERRORS_SUPPORTED if test $_pkg_short_errors_supported = yes; then $1[]_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "$2" 2>&1` else $1[]_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "$2" 2>&1` fi # Put the nasty error message in config.log where it belongs echo "$$1[]_PKG_ERRORS" >&AS_MESSAGE_LOG_FD m4_default([$4], [AC_MSG_ERROR( [Package requirements ($2) were not met: $$1_PKG_ERRORS Consider adjusting the PKG_CONFIG_PATH environment variable if you installed software in a non-standard prefix. _PKG_TEXT])[]dnl ]) elif test $pkg_failed = untried; then AC_MSG_RESULT([no]) m4_default([$4], [AC_MSG_FAILURE( [The pkg-config script could not be found or is too old. Make sure it is in your PATH or set the PKG_CONFIG environment variable to the full path to pkg-config. _PKG_TEXT To get pkg-config, see .])[]dnl ]) else $1[]_CFLAGS=$pkg_cv_[]$1[]_CFLAGS $1[]_LIBS=$pkg_cv_[]$1[]_LIBS AC_MSG_RESULT([yes]) $3 fi[]dnl ])dnl PKG_CHECK_MODULES dnl PKG_CHECK_MODULES_STATIC(VARIABLE-PREFIX, MODULES, [ACTION-IF-FOUND], dnl [ACTION-IF-NOT-FOUND]) dnl --------------------------------------------------------------------- dnl Since: 0.29 dnl dnl Checks for existence of MODULES and gathers its build flags with dnl static libraries enabled. Sets VARIABLE-PREFIX_CFLAGS from --cflags dnl and VARIABLE-PREFIX_LIBS from --libs. dnl dnl Note that if there is a possibility the first call to dnl PKG_CHECK_MODULES_STATIC might not happen, you should be sure to dnl include an explicit call to PKG_PROG_PKG_CONFIG in your dnl configure.ac. AC_DEFUN([PKG_CHECK_MODULES_STATIC], [AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl _save_PKG_CONFIG=$PKG_CONFIG PKG_CONFIG="$PKG_CONFIG --static" PKG_CHECK_MODULES($@) PKG_CONFIG=$_save_PKG_CONFIG[]dnl ])dnl PKG_CHECK_MODULES_STATIC dnl PKG_INSTALLDIR([DIRECTORY]) dnl ------------------------- dnl Since: 0.27 dnl dnl Substitutes the variable pkgconfigdir as the location where a module dnl should install pkg-config .pc files. By default the directory is dnl $libdir/pkgconfig, but the default can be changed by passing dnl DIRECTORY. The user can override through the --with-pkgconfigdir dnl parameter. AC_DEFUN([PKG_INSTALLDIR], [m4_pushdef([pkg_default], [m4_default([$1], ['${libdir}/pkgconfig'])]) m4_pushdef([pkg_description], [pkg-config installation directory @<:@]pkg_default[@:>@]) AC_ARG_WITH([pkgconfigdir], [AS_HELP_STRING([--with-pkgconfigdir], pkg_description)],, [with_pkgconfigdir=]pkg_default) AC_SUBST([pkgconfigdir], [$with_pkgconfigdir]) m4_popdef([pkg_default]) m4_popdef([pkg_description]) ])dnl PKG_INSTALLDIR dnl PKG_NOARCH_INSTALLDIR([DIRECTORY]) dnl -------------------------------- dnl Since: 0.27 dnl dnl Substitutes the variable noarch_pkgconfigdir as the location where a dnl module should install arch-independent pkg-config .pc files. By dnl default the directory is $datadir/pkgconfig, but the default can be dnl changed by passing DIRECTORY. The user can override through the dnl --with-noarch-pkgconfigdir parameter. AC_DEFUN([PKG_NOARCH_INSTALLDIR], [m4_pushdef([pkg_default], [m4_default([$1], ['${datadir}/pkgconfig'])]) m4_pushdef([pkg_description], [pkg-config arch-independent installation directory @<:@]pkg_default[@:>@]) AC_ARG_WITH([noarch-pkgconfigdir], [AS_HELP_STRING([--with-noarch-pkgconfigdir], pkg_description)],, [with_noarch_pkgconfigdir=]pkg_default) AC_SUBST([noarch_pkgconfigdir], [$with_noarch_pkgconfigdir]) m4_popdef([pkg_default]) m4_popdef([pkg_description]) ])dnl PKG_NOARCH_INSTALLDIR dnl PKG_CHECK_VAR(VARIABLE, MODULE, CONFIG-VARIABLE, dnl [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND]) dnl ------------------------------------------- dnl Since: 0.28 dnl dnl Retrieves the value of the pkg-config variable for the given module. AC_DEFUN([PKG_CHECK_VAR], [AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl AC_ARG_VAR([$1], [value of $3 for $2, overriding pkg-config])dnl _PKG_CONFIG([$1], [variable="][$3]["], [$2]) AS_VAR_COPY([$1], [pkg_cv_][$1]) AS_VAR_IF([$1], [""], [$5], [$4])dnl ])dnl PKG_CHECK_VAR dnl PKG_WITH_MODULES(VARIABLE-PREFIX, MODULES, dnl [ACTION-IF-FOUND],[ACTION-IF-NOT-FOUND], dnl [DESCRIPTION], [DEFAULT]) dnl ------------------------------------------ dnl dnl Prepare a "--with-" configure option using the lowercase dnl [VARIABLE-PREFIX] name, merging the behaviour of AC_ARG_WITH and dnl PKG_CHECK_MODULES in a single macro. AC_DEFUN([PKG_WITH_MODULES], [ m4_pushdef([with_arg], m4_tolower([$1])) m4_pushdef([description], [m4_default([$5], [build with ]with_arg[ support])]) m4_pushdef([def_arg], [m4_default([$6], [auto])]) m4_pushdef([def_action_if_found], [AS_TR_SH([with_]with_arg)=yes]) m4_pushdef([def_action_if_not_found], [AS_TR_SH([with_]with_arg)=no]) m4_case(def_arg, [yes],[m4_pushdef([with_without], [--without-]with_arg)], [m4_pushdef([with_without],[--with-]with_arg)]) AC_ARG_WITH(with_arg, AS_HELP_STRING(with_without, description[ @<:@default=]def_arg[@:>@]),, [AS_TR_SH([with_]with_arg)=def_arg]) AS_CASE([$AS_TR_SH([with_]with_arg)], [yes],[PKG_CHECK_MODULES([$1],[$2],$3,$4)], [auto],[PKG_CHECK_MODULES([$1],[$2], [m4_n([def_action_if_found]) $3], [m4_n([def_action_if_not_found]) $4])]) m4_popdef([with_arg]) m4_popdef([description]) m4_popdef([def_arg]) ])dnl PKG_WITH_MODULES dnl PKG_HAVE_WITH_MODULES(VARIABLE-PREFIX, MODULES, dnl [DESCRIPTION], [DEFAULT]) dnl ----------------------------------------------- dnl dnl Convenience macro to trigger AM_CONDITIONAL after PKG_WITH_MODULES dnl check._[VARIABLE-PREFIX] is exported as make variable. AC_DEFUN([PKG_HAVE_WITH_MODULES], [ PKG_WITH_MODULES([$1],[$2],,,[$3],[$4]) AM_CONDITIONAL([HAVE_][$1], [test "$AS_TR_SH([with_]m4_tolower([$1]))" = "yes"]) ])dnl PKG_HAVE_WITH_MODULES dnl PKG_HAVE_DEFINE_WITH_MODULES(VARIABLE-PREFIX, MODULES, dnl [DESCRIPTION], [DEFAULT]) dnl ------------------------------------------------------ dnl dnl Convenience macro to run AM_CONDITIONAL and AC_DEFINE after dnl PKG_WITH_MODULES check. HAVE_[VARIABLE-PREFIX] is exported as make dnl and preprocessor variable. AC_DEFUN([PKG_HAVE_DEFINE_WITH_MODULES], [ PKG_HAVE_WITH_MODULES([$1],[$2],[$3],[$4]) AS_IF([test "$AS_TR_SH([with_]m4_tolower([$1]))" = "yes"], [AC_DEFINE([HAVE_][$1], 1, [Enable ]m4_tolower([$1])[ support])]) ])dnl PKG_HAVE_DEFINE_WITH_MODULES # Copyright (C) 2002-2021 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_AUTOMAKE_VERSION(VERSION) # ---------------------------- # Automake X.Y traces this macro to ensure aclocal.m4 has been # generated from the m4 files accompanying Automake X.Y. # (This private macro should not be called outside this file.) AC_DEFUN([AM_AUTOMAKE_VERSION], [am__api_version='1.16' dnl Some users find AM_AUTOMAKE_VERSION and mistake it for a way to dnl require some minimum version. Point them to the right macro. m4_if([$1], [1.16.5], [], [AC_FATAL([Do not call $0, use AM_INIT_AUTOMAKE([$1]).])])dnl ]) # _AM_AUTOCONF_VERSION(VERSION) # ----------------------------- # aclocal traces this macro to find the Autoconf version. # This is a private macro too. Using m4_define simplifies # the logic in aclocal, which can simply ignore this definition. m4_define([_AM_AUTOCONF_VERSION], []) # AM_SET_CURRENT_AUTOMAKE_VERSION # ------------------------------- # Call AM_AUTOMAKE_VERSION and AM_AUTOMAKE_VERSION so they can be traced. # This function is AC_REQUIREd by AM_INIT_AUTOMAKE. AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION], [AM_AUTOMAKE_VERSION([1.16.5])dnl m4_ifndef([AC_AUTOCONF_VERSION], [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl _AM_AUTOCONF_VERSION(m4_defn([AC_AUTOCONF_VERSION]))]) # AM_AUX_DIR_EXPAND -*- Autoconf -*- # Copyright (C) 2001-2021 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # For projects using AC_CONFIG_AUX_DIR([foo]), Autoconf sets # $ac_aux_dir to '$srcdir/foo'. In other projects, it is set to # '$srcdir', '$srcdir/..', or '$srcdir/../..'. # # Of course, Automake must honor this variable whenever it calls a # tool from the auxiliary directory. The problem is that $srcdir (and # therefore $ac_aux_dir as well) can be either absolute or relative, # depending on how configure is run. This is pretty annoying, since # it makes $ac_aux_dir quite unusable in subdirectories: in the top # source directory, any form will work fine, but in subdirectories a # relative path needs to be adjusted first. # # $ac_aux_dir/missing # fails when called from a subdirectory if $ac_aux_dir is relative # $top_srcdir/$ac_aux_dir/missing # fails if $ac_aux_dir is absolute, # fails when called from a subdirectory in a VPATH build with # a relative $ac_aux_dir # # The reason of the latter failure is that $top_srcdir and $ac_aux_dir # are both prefixed by $srcdir. In an in-source build this is usually # harmless because $srcdir is '.', but things will broke when you # start a VPATH build or use an absolute $srcdir. # # So we could use something similar to $top_srcdir/$ac_aux_dir/missing, # iff we strip the leading $srcdir from $ac_aux_dir. That would be: # am_aux_dir='\$(top_srcdir)/'`expr "$ac_aux_dir" : "$srcdir//*\(.*\)"` # and then we would define $MISSING as # MISSING="\${SHELL} $am_aux_dir/missing" # This will work as long as MISSING is not called from configure, because # unfortunately $(top_srcdir) has no meaning in configure. # However there are other variables, like CC, which are often used in # configure, and could therefore not use this "fixed" $ac_aux_dir. # # Another solution, used here, is to always expand $ac_aux_dir to an # absolute PATH. The drawback is that using absolute paths prevent a # configured tree to be moved without reconfiguration. AC_DEFUN([AM_AUX_DIR_EXPAND], [AC_REQUIRE([AC_CONFIG_AUX_DIR_DEFAULT])dnl # Expand $ac_aux_dir to an absolute path. am_aux_dir=`cd "$ac_aux_dir" && pwd` ]) # AM_CONDITIONAL -*- Autoconf -*- # Copyright (C) 1997-2021 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_CONDITIONAL(NAME, SHELL-CONDITION) # ------------------------------------- # Define a conditional. AC_DEFUN([AM_CONDITIONAL], [AC_PREREQ([2.52])dnl m4_if([$1], [TRUE], [AC_FATAL([$0: invalid condition: $1])], [$1], [FALSE], [AC_FATAL([$0: invalid condition: $1])])dnl AC_SUBST([$1_TRUE])dnl AC_SUBST([$1_FALSE])dnl _AM_SUBST_NOTMAKE([$1_TRUE])dnl _AM_SUBST_NOTMAKE([$1_FALSE])dnl m4_define([_AM_COND_VALUE_$1], [$2])dnl if $2; then $1_TRUE= $1_FALSE='#' else $1_TRUE='#' $1_FALSE= fi AC_CONFIG_COMMANDS_PRE( [if test -z "${$1_TRUE}" && test -z "${$1_FALSE}"; then AC_MSG_ERROR([[conditional "$1" was never defined. Usually this means the macro was only invoked conditionally.]]) fi])]) # Copyright (C) 1999-2021 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # There are a few dirty hacks below to avoid letting 'AC_PROG_CC' be # written in clear, in which case automake, when reading aclocal.m4, # will think it sees a *use*, and therefore will trigger all it's # C support machinery. Also note that it means that autoscan, seeing # CC etc. in the Makefile, will ask for an AC_PROG_CC use... # _AM_DEPENDENCIES(NAME) # ---------------------- # See how the compiler implements dependency checking. # NAME is "CC", "CXX", "OBJC", "OBJCXX", "UPC", or "GJC". # We try a few techniques and use that to set a single cache variable. # # We don't AC_REQUIRE the corresponding AC_PROG_CC since the latter was # modified to invoke _AM_DEPENDENCIES(CC); we would have a circular # dependency, and given that the user is not expected to run this macro, # just rely on AC_PROG_CC. AC_DEFUN([_AM_DEPENDENCIES], [AC_REQUIRE([AM_SET_DEPDIR])dnl AC_REQUIRE([AM_OUTPUT_DEPENDENCY_COMMANDS])dnl AC_REQUIRE([AM_MAKE_INCLUDE])dnl AC_REQUIRE([AM_DEP_TRACK])dnl m4_if([$1], [CC], [depcc="$CC" am_compiler_list=], [$1], [CXX], [depcc="$CXX" am_compiler_list=], [$1], [OBJC], [depcc="$OBJC" am_compiler_list='gcc3 gcc'], [$1], [OBJCXX], [depcc="$OBJCXX" am_compiler_list='gcc3 gcc'], [$1], [UPC], [depcc="$UPC" am_compiler_list=], [$1], [GCJ], [depcc="$GCJ" am_compiler_list='gcc3 gcc'], [depcc="$$1" am_compiler_list=]) AC_CACHE_CHECK([dependency style of $depcc], [am_cv_$1_dependencies_compiler_type], [if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then # We make a subdir and do the tests there. Otherwise we can end up # making bogus files that we don't know about and never remove. For # instance it was reported that on HP-UX the gcc test will end up # making a dummy file named 'D' -- because '-MD' means "put the output # in D". rm -rf conftest.dir mkdir conftest.dir # Copy depcomp to subdir because otherwise we won't find it if we're # using a relative directory. cp "$am_depcomp" conftest.dir cd conftest.dir # We will build objects and dependencies in a subdirectory because # it helps to detect inapplicable dependency modes. For instance # both Tru64's cc and ICC support -MD to output dependencies as a # side effect of compilation, but ICC will put the dependencies in # the current directory while Tru64 will put them in the object # directory. mkdir sub am_cv_$1_dependencies_compiler_type=none if test "$am_compiler_list" = ""; then am_compiler_list=`sed -n ['s/^#*\([a-zA-Z0-9]*\))$/\1/p'] < ./depcomp` fi am__universal=false m4_case([$1], [CC], [case " $depcc " in #( *\ -arch\ *\ -arch\ *) am__universal=true ;; esac], [CXX], [case " $depcc " in #( *\ -arch\ *\ -arch\ *) am__universal=true ;; esac]) for depmode in $am_compiler_list; do # Setup a source with many dependencies, because some compilers # like to wrap large dependency lists on column 80 (with \), and # we should not choose a depcomp mode which is confused by this. # # We need to recreate these files for each test, as the compiler may # overwrite some of them when testing with obscure command lines. # This happens at least with the AIX C compiler. : > sub/conftest.c for i in 1 2 3 4 5 6; do echo '#include "conftst'$i'.h"' >> sub/conftest.c # Using ": > sub/conftst$i.h" creates only sub/conftst1.h with # Solaris 10 /bin/sh. echo '/* dummy */' > sub/conftst$i.h done echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf # We check with '-c' and '-o' for the sake of the "dashmstdout" # mode. It turns out that the SunPro C++ compiler does not properly # handle '-M -o', and we need to detect this. Also, some Intel # versions had trouble with output in subdirs. am__obj=sub/conftest.${OBJEXT-o} am__minus_obj="-o $am__obj" case $depmode in gcc) # This depmode causes a compiler race in universal mode. test "$am__universal" = false || continue ;; nosideeffect) # After this tag, mechanisms are not by side-effect, so they'll # only be used when explicitly requested. if test "x$enable_dependency_tracking" = xyes; then continue else break fi ;; msvc7 | msvc7msys | msvisualcpp | msvcmsys) # This compiler won't grok '-c -o', but also, the minuso test has # not run yet. These depmodes are late enough in the game, and # so weak that their functioning should not be impacted. am__obj=conftest.${OBJEXT-o} am__minus_obj= ;; none) break ;; esac if depmode=$depmode \ source=sub/conftest.c object=$am__obj \ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ >/dev/null 2>conftest.err && grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && grep $am__obj sub/conftest.Po > /dev/null 2>&1 && ${MAKE-make} -s -f confmf > /dev/null 2>&1; then # icc doesn't choke on unknown options, it will just issue warnings # or remarks (even with -Werror). So we grep stderr for any message # that says an option was ignored or not supported. # When given -MP, icc 7.0 and 7.1 complain thusly: # icc: Command line warning: ignoring option '-M'; no argument required # The diagnosis changed in icc 8.0: # icc: Command line remark: option '-MP' not supported if (grep 'ignoring option' conftest.err || grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else am_cv_$1_dependencies_compiler_type=$depmode break fi fi done cd .. rm -rf conftest.dir else am_cv_$1_dependencies_compiler_type=none fi ]) AC_SUBST([$1DEPMODE], [depmode=$am_cv_$1_dependencies_compiler_type]) AM_CONDITIONAL([am__fastdep$1], [ test "x$enable_dependency_tracking" != xno \ && test "$am_cv_$1_dependencies_compiler_type" = gcc3]) ]) # AM_SET_DEPDIR # ------------- # Choose a directory name for dependency files. # This macro is AC_REQUIREd in _AM_DEPENDENCIES. AC_DEFUN([AM_SET_DEPDIR], [AC_REQUIRE([AM_SET_LEADING_DOT])dnl AC_SUBST([DEPDIR], ["${am__leading_dot}deps"])dnl ]) # AM_DEP_TRACK # ------------ AC_DEFUN([AM_DEP_TRACK], [AC_ARG_ENABLE([dependency-tracking], [dnl AS_HELP_STRING( [--enable-dependency-tracking], [do not reject slow dependency extractors]) AS_HELP_STRING( [--disable-dependency-tracking], [speeds up one-time build])]) if test "x$enable_dependency_tracking" != xno; then am_depcomp="$ac_aux_dir/depcomp" AMDEPBACKSLASH='\' am__nodep='_no' fi AM_CONDITIONAL([AMDEP], [test "x$enable_dependency_tracking" != xno]) AC_SUBST([AMDEPBACKSLASH])dnl _AM_SUBST_NOTMAKE([AMDEPBACKSLASH])dnl AC_SUBST([am__nodep])dnl _AM_SUBST_NOTMAKE([am__nodep])dnl ]) # Generate code to set up dependency tracking. -*- Autoconf -*- # Copyright (C) 1999-2021 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # _AM_OUTPUT_DEPENDENCY_COMMANDS # ------------------------------ AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS], [{ # Older Autoconf quotes --file arguments for eval, but not when files # are listed without --file. Let's play safe and only enable the eval # if we detect the quoting. # TODO: see whether this extra hack can be removed once we start # requiring Autoconf 2.70 or later. AS_CASE([$CONFIG_FILES], [*\'*], [eval set x "$CONFIG_FILES"], [*], [set x $CONFIG_FILES]) shift # Used to flag and report bootstrapping failures. am_rc=0 for am_mf do # Strip MF so we end up with the name of the file. am_mf=`AS_ECHO(["$am_mf"]) | sed -e 's/:.*$//'` # Check whether this is an Automake generated Makefile which includes # dependency-tracking related rules and includes. # Grep'ing the whole file directly is not great: AIX grep has a line # limit of 2048, but all sed's we know have understand at least 4000. sed -n 's,^am--depfiles:.*,X,p' "$am_mf" | grep X >/dev/null 2>&1 \ || continue am_dirpart=`AS_DIRNAME(["$am_mf"])` am_filepart=`AS_BASENAME(["$am_mf"])` AM_RUN_LOG([cd "$am_dirpart" \ && sed -e '/# am--include-marker/d' "$am_filepart" \ | $MAKE -f - am--depfiles]) || am_rc=$? done if test $am_rc -ne 0; then AC_MSG_FAILURE([Something went wrong bootstrapping makefile fragments for automatic dependency tracking. If GNU make was not used, consider re-running the configure script with MAKE="gmake" (or whatever is necessary). You can also try re-running configure with the '--disable-dependency-tracking' option to at least be able to build the package (albeit without support for automatic dependency tracking).]) fi AS_UNSET([am_dirpart]) AS_UNSET([am_filepart]) AS_UNSET([am_mf]) AS_UNSET([am_rc]) rm -f conftest-deps.mk } ])# _AM_OUTPUT_DEPENDENCY_COMMANDS # AM_OUTPUT_DEPENDENCY_COMMANDS # ----------------------------- # This macro should only be invoked once -- use via AC_REQUIRE. # # This code is only required when automatic dependency tracking is enabled. # This creates each '.Po' and '.Plo' makefile fragment that we'll need in # order to bootstrap the dependency handling code. AC_DEFUN([AM_OUTPUT_DEPENDENCY_COMMANDS], [AC_CONFIG_COMMANDS([depfiles], [test x"$AMDEP_TRUE" != x"" || _AM_OUTPUT_DEPENDENCY_COMMANDS], [AMDEP_TRUE="$AMDEP_TRUE" MAKE="${MAKE-make}"])]) # Do all the work for Automake. -*- Autoconf -*- # Copyright (C) 1996-2021 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This macro actually does too much. Some checks are only needed if # your package does certain things. But this isn't really a big deal. dnl Redefine AC_PROG_CC to automatically invoke _AM_PROG_CC_C_O. m4_define([AC_PROG_CC], m4_defn([AC_PROG_CC]) [_AM_PROG_CC_C_O ]) # AM_INIT_AUTOMAKE(PACKAGE, VERSION, [NO-DEFINE]) # AM_INIT_AUTOMAKE([OPTIONS]) # ----------------------------------------------- # The call with PACKAGE and VERSION arguments is the old style # call (pre autoconf-2.50), which is being phased out. PACKAGE # and VERSION should now be passed to AC_INIT and removed from # the call to AM_INIT_AUTOMAKE. # We support both call styles for the transition. After # the next Automake release, Autoconf can make the AC_INIT # arguments mandatory, and then we can depend on a new Autoconf # release and drop the old call support. AC_DEFUN([AM_INIT_AUTOMAKE], [AC_PREREQ([2.65])dnl m4_ifdef([_$0_ALREADY_INIT], [m4_fatal([$0 expanded multiple times ]m4_defn([_$0_ALREADY_INIT]))], [m4_define([_$0_ALREADY_INIT], m4_expansion_stack)])dnl dnl Autoconf wants to disallow AM_ names. We explicitly allow dnl the ones we care about. m4_pattern_allow([^AM_[A-Z]+FLAGS$])dnl AC_REQUIRE([AM_SET_CURRENT_AUTOMAKE_VERSION])dnl AC_REQUIRE([AC_PROG_INSTALL])dnl if test "`cd $srcdir && pwd`" != "`pwd`"; then # Use -I$(srcdir) only when $(srcdir) != ., so that make's output # is not polluted with repeated "-I." AC_SUBST([am__isrc], [' -I$(srcdir)'])_AM_SUBST_NOTMAKE([am__isrc])dnl # test to see if srcdir already configured if test -f $srcdir/config.status; then AC_MSG_ERROR([source directory already configured; run "make distclean" there first]) fi fi # test whether we have cygpath if test -z "$CYGPATH_W"; then if (cygpath --version) >/dev/null 2>/dev/null; then CYGPATH_W='cygpath -w' else CYGPATH_W=echo fi fi AC_SUBST([CYGPATH_W]) # Define the identity of the package. dnl Distinguish between old-style and new-style calls. m4_ifval([$2], [AC_DIAGNOSE([obsolete], [$0: two- and three-arguments forms are deprecated.]) m4_ifval([$3], [_AM_SET_OPTION([no-define])])dnl AC_SUBST([PACKAGE], [$1])dnl AC_SUBST([VERSION], [$2])], [_AM_SET_OPTIONS([$1])dnl dnl Diagnose old-style AC_INIT with new-style AM_AUTOMAKE_INIT. m4_if( m4_ifset([AC_PACKAGE_NAME], [ok]):m4_ifset([AC_PACKAGE_VERSION], [ok]), [ok:ok],, [m4_fatal([AC_INIT should be called with package and version arguments])])dnl AC_SUBST([PACKAGE], ['AC_PACKAGE_TARNAME'])dnl AC_SUBST([VERSION], ['AC_PACKAGE_VERSION'])])dnl _AM_IF_OPTION([no-define],, [AC_DEFINE_UNQUOTED([PACKAGE], ["$PACKAGE"], [Name of package]) AC_DEFINE_UNQUOTED([VERSION], ["$VERSION"], [Version number of package])])dnl # Some tools Automake needs. AC_REQUIRE([AM_SANITY_CHECK])dnl AC_REQUIRE([AC_ARG_PROGRAM])dnl AM_MISSING_PROG([ACLOCAL], [aclocal-${am__api_version}]) AM_MISSING_PROG([AUTOCONF], [autoconf]) AM_MISSING_PROG([AUTOMAKE], [automake-${am__api_version}]) AM_MISSING_PROG([AUTOHEADER], [autoheader]) AM_MISSING_PROG([MAKEINFO], [makeinfo]) AC_REQUIRE([AM_PROG_INSTALL_SH])dnl AC_REQUIRE([AM_PROG_INSTALL_STRIP])dnl AC_REQUIRE([AC_PROG_MKDIR_P])dnl # For better backward compatibility. To be removed once Automake 1.9.x # dies out for good. For more background, see: # # AC_SUBST([mkdir_p], ['$(MKDIR_P)']) # We need awk for the "check" target (and possibly the TAP driver). The # system "awk" is bad on some platforms. AC_REQUIRE([AC_PROG_AWK])dnl AC_REQUIRE([AC_PROG_MAKE_SET])dnl AC_REQUIRE([AM_SET_LEADING_DOT])dnl _AM_IF_OPTION([tar-ustar], [_AM_PROG_TAR([ustar])], [_AM_IF_OPTION([tar-pax], [_AM_PROG_TAR([pax])], [_AM_PROG_TAR([v7])])]) _AM_IF_OPTION([no-dependencies],, [AC_PROVIDE_IFELSE([AC_PROG_CC], [_AM_DEPENDENCIES([CC])], [m4_define([AC_PROG_CC], m4_defn([AC_PROG_CC])[_AM_DEPENDENCIES([CC])])])dnl AC_PROVIDE_IFELSE([AC_PROG_CXX], [_AM_DEPENDENCIES([CXX])], [m4_define([AC_PROG_CXX], m4_defn([AC_PROG_CXX])[_AM_DEPENDENCIES([CXX])])])dnl AC_PROVIDE_IFELSE([AC_PROG_OBJC], [_AM_DEPENDENCIES([OBJC])], [m4_define([AC_PROG_OBJC], m4_defn([AC_PROG_OBJC])[_AM_DEPENDENCIES([OBJC])])])dnl AC_PROVIDE_IFELSE([AC_PROG_OBJCXX], [_AM_DEPENDENCIES([OBJCXX])], [m4_define([AC_PROG_OBJCXX], m4_defn([AC_PROG_OBJCXX])[_AM_DEPENDENCIES([OBJCXX])])])dnl ]) # Variables for tags utilities; see am/tags.am if test -z "$CTAGS"; then CTAGS=ctags fi AC_SUBST([CTAGS]) if test -z "$ETAGS"; then ETAGS=etags fi AC_SUBST([ETAGS]) if test -z "$CSCOPE"; then CSCOPE=cscope fi AC_SUBST([CSCOPE]) AC_REQUIRE([AM_SILENT_RULES])dnl dnl The testsuite driver may need to know about EXEEXT, so add the dnl 'am__EXEEXT' conditional if _AM_COMPILER_EXEEXT was seen. This dnl macro is hooked onto _AC_COMPILER_EXEEXT early, see below. AC_CONFIG_COMMANDS_PRE(dnl [m4_provide_if([_AM_COMPILER_EXEEXT], [AM_CONDITIONAL([am__EXEEXT], [test -n "$EXEEXT"])])])dnl # POSIX will say in a future version that running "rm -f" with no argument # is OK; and we want to be able to make that assumption in our Makefile # recipes. So use an aggressive probe to check that the usage we want is # actually supported "in the wild" to an acceptable degree. # See automake bug#10828. # To make any issue more visible, cause the running configure to be aborted # by default if the 'rm' program in use doesn't match our expectations; the # user can still override this though. if rm -f && rm -fr && rm -rf; then : OK; else cat >&2 <<'END' Oops! Your 'rm' program seems unable to run without file operands specified on the command line, even when the '-f' option is present. This is contrary to the behaviour of most rm programs out there, and not conforming with the upcoming POSIX standard: Please tell bug-automake@gnu.org about your system, including the value of your $PATH and any error possibly output before this message. This can help us improve future automake versions. END if test x"$ACCEPT_INFERIOR_RM_PROGRAM" = x"yes"; then echo 'Configuration will proceed anyway, since you have set the' >&2 echo 'ACCEPT_INFERIOR_RM_PROGRAM variable to "yes"' >&2 echo >&2 else cat >&2 <<'END' Aborting the configuration process, to ensure you take notice of the issue. You can download and install GNU coreutils to get an 'rm' implementation that behaves properly: . If you want to complete the configuration process using your problematic 'rm' anyway, export the environment variable ACCEPT_INFERIOR_RM_PROGRAM to "yes", and re-run configure. END AC_MSG_ERROR([Your 'rm' program is bad, sorry.]) fi fi dnl The trailing newline in this macro's definition is deliberate, for dnl backward compatibility and to allow trailing 'dnl'-style comments dnl after the AM_INIT_AUTOMAKE invocation. See automake bug#16841. ]) dnl Hook into '_AC_COMPILER_EXEEXT' early to learn its expansion. Do not dnl add the conditional right here, as _AC_COMPILER_EXEEXT may be further dnl mangled by Autoconf and run in a shell conditional statement. m4_define([_AC_COMPILER_EXEEXT], m4_defn([_AC_COMPILER_EXEEXT])[m4_provide([_AM_COMPILER_EXEEXT])]) # When config.status generates a header, we must update the stamp-h file. # This file resides in the same directory as the config header # that is generated. The stamp files are numbered to have different names. # Autoconf calls _AC_AM_CONFIG_HEADER_HOOK (when defined) in the # loop where config.status creates the headers, so we can generate # our stamp files there. AC_DEFUN([_AC_AM_CONFIG_HEADER_HOOK], [# Compute $1's index in $config_headers. _am_arg=$1 _am_stamp_count=1 for _am_header in $config_headers :; do case $_am_header in $_am_arg | $_am_arg:* ) break ;; * ) _am_stamp_count=`expr $_am_stamp_count + 1` ;; esac done echo "timestamp for $_am_arg" >`AS_DIRNAME(["$_am_arg"])`/stamp-h[]$_am_stamp_count]) # Copyright (C) 2001-2021 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_PROG_INSTALL_SH # ------------------ # Define $install_sh. AC_DEFUN([AM_PROG_INSTALL_SH], [AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl if test x"${install_sh+set}" != xset; then case $am_aux_dir in *\ * | *\ *) install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;; *) install_sh="\${SHELL} $am_aux_dir/install-sh" esac fi AC_SUBST([install_sh])]) # Copyright (C) 2003-2021 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # Check whether the underlying file-system supports filenames # with a leading dot. For instance MS-DOS doesn't. AC_DEFUN([AM_SET_LEADING_DOT], [rm -rf .tst 2>/dev/null mkdir .tst 2>/dev/null if test -d .tst; then am__leading_dot=. else am__leading_dot=_ fi rmdir .tst 2>/dev/null AC_SUBST([am__leading_dot])]) # Check to see how 'make' treats includes. -*- Autoconf -*- # Copyright (C) 2001-2021 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_MAKE_INCLUDE() # ----------------- # Check whether make has an 'include' directive that can support all # the idioms we need for our automatic dependency tracking code. AC_DEFUN([AM_MAKE_INCLUDE], [AC_MSG_CHECKING([whether ${MAKE-make} supports the include directive]) cat > confinc.mk << 'END' am__doit: @echo this is the am__doit target >confinc.out .PHONY: am__doit END am__include="#" am__quote= # BSD make does it like this. echo '.include "confinc.mk" # ignored' > confmf.BSD # Other make implementations (GNU, Solaris 10, AIX) do it like this. echo 'include confinc.mk # ignored' > confmf.GNU _am_result=no for s in GNU BSD; do AM_RUN_LOG([${MAKE-make} -f confmf.$s && cat confinc.out]) AS_CASE([$?:`cat confinc.out 2>/dev/null`], ['0:this is the am__doit target'], [AS_CASE([$s], [BSD], [am__include='.include' am__quote='"'], [am__include='include' am__quote=''])]) if test "$am__include" != "#"; then _am_result="yes ($s style)" break fi done rm -f confinc.* confmf.* AC_MSG_RESULT([${_am_result}]) AC_SUBST([am__include])]) AC_SUBST([am__quote])]) # Fake the existence of programs that GNU maintainers use. -*- Autoconf -*- # Copyright (C) 1997-2021 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_MISSING_PROG(NAME, PROGRAM) # ------------------------------ AC_DEFUN([AM_MISSING_PROG], [AC_REQUIRE([AM_MISSING_HAS_RUN]) $1=${$1-"${am_missing_run}$2"} AC_SUBST($1)]) # AM_MISSING_HAS_RUN # ------------------ # Define MISSING if not defined so far and test if it is modern enough. # If it is, set am_missing_run to use it, otherwise, to nothing. AC_DEFUN([AM_MISSING_HAS_RUN], [AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl AC_REQUIRE_AUX_FILE([missing])dnl if test x"${MISSING+set}" != xset; then MISSING="\${SHELL} '$am_aux_dir/missing'" fi # Use eval to expand $SHELL if eval "$MISSING --is-lightweight"; then am_missing_run="$MISSING " else am_missing_run= AC_MSG_WARN(['missing' script is too old or missing]) fi ]) # Helper functions for option handling. -*- Autoconf -*- # Copyright (C) 2001-2021 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # _AM_MANGLE_OPTION(NAME) # ----------------------- AC_DEFUN([_AM_MANGLE_OPTION], [[_AM_OPTION_]m4_bpatsubst($1, [[^a-zA-Z0-9_]], [_])]) # _AM_SET_OPTION(NAME) # -------------------- # Set option NAME. Presently that only means defining a flag for this option. AC_DEFUN([_AM_SET_OPTION], [m4_define(_AM_MANGLE_OPTION([$1]), [1])]) # _AM_SET_OPTIONS(OPTIONS) # ------------------------ # OPTIONS is a space-separated list of Automake options. AC_DEFUN([_AM_SET_OPTIONS], [m4_foreach_w([_AM_Option], [$1], [_AM_SET_OPTION(_AM_Option)])]) # _AM_IF_OPTION(OPTION, IF-SET, [IF-NOT-SET]) # ------------------------------------------- # Execute IF-SET if OPTION is set, IF-NOT-SET otherwise. AC_DEFUN([_AM_IF_OPTION], [m4_ifset(_AM_MANGLE_OPTION([$1]), [$2], [$3])]) # Copyright (C) 1999-2021 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # _AM_PROG_CC_C_O # --------------- # Like AC_PROG_CC_C_O, but changed for automake. We rewrite AC_PROG_CC # to automatically call this. AC_DEFUN([_AM_PROG_CC_C_O], [AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl AC_REQUIRE_AUX_FILE([compile])dnl AC_LANG_PUSH([C])dnl AC_CACHE_CHECK( [whether $CC understands -c and -o together], [am_cv_prog_cc_c_o], [AC_LANG_CONFTEST([AC_LANG_PROGRAM([])]) # Make sure it works both with $CC and with simple cc. # Following AC_PROG_CC_C_O, we do the test twice because some # compilers refuse to overwrite an existing .o file with -o, # though they will create one. am_cv_prog_cc_c_o=yes for am_i in 1 2; do if AM_RUN_LOG([$CC -c conftest.$ac_ext -o conftest2.$ac_objext]) \ && test -f conftest2.$ac_objext; then : OK else am_cv_prog_cc_c_o=no break fi done rm -f core conftest* unset am_i]) if test "$am_cv_prog_cc_c_o" != yes; then # Losing compiler, so override with the script. # FIXME: It is wrong to rewrite CC. # But if we don't then we get into trouble of one sort or another. # A longer-term fix would be to have automake use am__CC in this case, # and then we could set am__CC="\$(top_srcdir)/compile \$(CC)" CC="$am_aux_dir/compile $CC" fi AC_LANG_POP([C])]) # For backward compatibility. AC_DEFUN_ONCE([AM_PROG_CC_C_O], [AC_REQUIRE([AC_PROG_CC])]) # Copyright (C) 2001-2021 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_RUN_LOG(COMMAND) # ------------------- # Run COMMAND, save the exit status in ac_status, and log it. # (This has been adapted from Autoconf's _AC_RUN_LOG macro.) AC_DEFUN([AM_RUN_LOG], [{ echo "$as_me:$LINENO: $1" >&AS_MESSAGE_LOG_FD ($1) >&AS_MESSAGE_LOG_FD 2>&AS_MESSAGE_LOG_FD ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&AS_MESSAGE_LOG_FD (exit $ac_status); }]) # Check to make sure that the build environment is sane. -*- Autoconf -*- # Copyright (C) 1996-2021 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_SANITY_CHECK # --------------- AC_DEFUN([AM_SANITY_CHECK], [AC_MSG_CHECKING([whether build environment is sane]) # Reject unsafe characters in $srcdir or the absolute working directory # name. Accept space and tab only in the latter. am_lf=' ' case `pwd` in *[[\\\"\#\$\&\'\`$am_lf]]*) AC_MSG_ERROR([unsafe absolute working directory name]);; esac case $srcdir in *[[\\\"\#\$\&\'\`$am_lf\ \ ]]*) AC_MSG_ERROR([unsafe srcdir value: '$srcdir']);; esac # Do 'set' in a subshell so we don't clobber the current shell's # arguments. Must try -L first in case configure is actually a # symlink; some systems play weird games with the mod time of symlinks # (eg FreeBSD returns the mod time of the symlink's containing # directory). if ( am_has_slept=no for am_try in 1 2; do echo "timestamp, slept: $am_has_slept" > conftest.file set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null` if test "$[*]" = "X"; then # -L didn't work. set X `ls -t "$srcdir/configure" conftest.file` fi if test "$[*]" != "X $srcdir/configure conftest.file" \ && test "$[*]" != "X conftest.file $srcdir/configure"; then # If neither matched, then we have a broken ls. This can happen # if, for instance, CONFIG_SHELL is bash and it inherits a # broken ls alias from the environment. This has actually # happened. Such a system could not be considered "sane". AC_MSG_ERROR([ls -t appears to fail. Make sure there is not a broken alias in your environment]) fi if test "$[2]" = conftest.file || test $am_try -eq 2; then break fi # Just in case. sleep 1 am_has_slept=yes done test "$[2]" = conftest.file ) then # Ok. : else AC_MSG_ERROR([newly created file is older than distributed files! Check your system clock]) fi AC_MSG_RESULT([yes]) # If we didn't sleep, we still need to ensure time stamps of config.status and # generated files are strictly newer. am_sleep_pid= if grep 'slept: no' conftest.file >/dev/null 2>&1; then ( sleep 1 ) & am_sleep_pid=$! fi AC_CONFIG_COMMANDS_PRE( [AC_MSG_CHECKING([that generated files are newer than configure]) if test -n "$am_sleep_pid"; then # Hide warnings about reused PIDs. wait $am_sleep_pid 2>/dev/null fi AC_MSG_RESULT([done])]) rm -f conftest.file ]) # Copyright (C) 2009-2021 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_SILENT_RULES([DEFAULT]) # -------------------------- # Enable less verbose build rules; with the default set to DEFAULT # ("yes" being less verbose, "no" or empty being verbose). AC_DEFUN([AM_SILENT_RULES], [AC_ARG_ENABLE([silent-rules], [dnl AS_HELP_STRING( [--enable-silent-rules], [less verbose build output (undo: "make V=1")]) AS_HELP_STRING( [--disable-silent-rules], [verbose build output (undo: "make V=0")])dnl ]) case $enable_silent_rules in @%:@ ((( yes) AM_DEFAULT_VERBOSITY=0;; no) AM_DEFAULT_VERBOSITY=1;; *) AM_DEFAULT_VERBOSITY=m4_if([$1], [yes], [0], [1]);; esac dnl dnl A few 'make' implementations (e.g., NonStop OS and NextStep) dnl do not support nested variable expansions. dnl See automake bug#9928 and bug#10237. am_make=${MAKE-make} AC_CACHE_CHECK([whether $am_make supports nested variables], [am_cv_make_support_nested_variables], [if AS_ECHO([['TRUE=$(BAR$(V)) BAR0=false BAR1=true V=1 am__doit: @$(TRUE) .PHONY: am__doit']]) | $am_make -f - >/dev/null 2>&1; then am_cv_make_support_nested_variables=yes else am_cv_make_support_nested_variables=no fi]) if test $am_cv_make_support_nested_variables = yes; then dnl Using '$V' instead of '$(V)' breaks IRIX make. AM_V='$(V)' AM_DEFAULT_V='$(AM_DEFAULT_VERBOSITY)' else AM_V=$AM_DEFAULT_VERBOSITY AM_DEFAULT_V=$AM_DEFAULT_VERBOSITY fi AC_SUBST([AM_V])dnl AM_SUBST_NOTMAKE([AM_V])dnl AC_SUBST([AM_DEFAULT_V])dnl AM_SUBST_NOTMAKE([AM_DEFAULT_V])dnl AC_SUBST([AM_DEFAULT_VERBOSITY])dnl AM_BACKSLASH='\' AC_SUBST([AM_BACKSLASH])dnl _AM_SUBST_NOTMAKE([AM_BACKSLASH])dnl ]) # Copyright (C) 2001-2021 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_PROG_INSTALL_STRIP # --------------------- # One issue with vendor 'install' (even GNU) is that you can't # specify the program used to strip binaries. This is especially # annoying in cross-compiling environments, where the build's strip # is unlikely to handle the host's binaries. # Fortunately install-sh will honor a STRIPPROG variable, so we # always use install-sh in "make install-strip", and initialize # STRIPPROG with the value of the STRIP variable (set by the user). AC_DEFUN([AM_PROG_INSTALL_STRIP], [AC_REQUIRE([AM_PROG_INSTALL_SH])dnl # Installed binaries are usually stripped using 'strip' when the user # run "make install-strip". However 'strip' might not be the right # tool to use in cross-compilation environments, therefore Automake # will honor the 'STRIP' environment variable to overrule this program. dnl Don't test for $cross_compiling = yes, because it might be 'maybe'. if test "$cross_compiling" != no; then AC_CHECK_TOOL([STRIP], [strip], :) fi INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" AC_SUBST([INSTALL_STRIP_PROGRAM])]) # Copyright (C) 2006-2021 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # _AM_SUBST_NOTMAKE(VARIABLE) # --------------------------- # Prevent Automake from outputting VARIABLE = @VARIABLE@ in Makefile.in. # This macro is traced by Automake. AC_DEFUN([_AM_SUBST_NOTMAKE]) # AM_SUBST_NOTMAKE(VARIABLE) # -------------------------- # Public sister of _AM_SUBST_NOTMAKE. AC_DEFUN([AM_SUBST_NOTMAKE], [_AM_SUBST_NOTMAKE($@)]) # Check how to create a tarball. -*- Autoconf -*- # Copyright (C) 2004-2021 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # _AM_PROG_TAR(FORMAT) # -------------------- # Check how to create a tarball in format FORMAT. # FORMAT should be one of 'v7', 'ustar', or 'pax'. # # Substitute a variable $(am__tar) that is a command # writing to stdout a FORMAT-tarball containing the directory # $tardir. # tardir=directory && $(am__tar) > result.tar # # Substitute a variable $(am__untar) that extract such # a tarball read from stdin. # $(am__untar) < result.tar # AC_DEFUN([_AM_PROG_TAR], [# Always define AMTAR for backward compatibility. Yes, it's still used # in the wild :-( We should find a proper way to deprecate it ... AC_SUBST([AMTAR], ['$${TAR-tar}']) # We'll loop over all known methods to create a tar archive until one works. _am_tools='gnutar m4_if([$1], [ustar], [plaintar]) pax cpio none' m4_if([$1], [v7], [am__tar='$${TAR-tar} chof - "$$tardir"' am__untar='$${TAR-tar} xf -'], [m4_case([$1], [ustar], [# The POSIX 1988 'ustar' format is defined with fixed-size fields. # There is notably a 21 bits limit for the UID and the GID. In fact, # the 'pax' utility can hang on bigger UID/GID (see automake bug#8343 # and bug#13588). am_max_uid=2097151 # 2^21 - 1 am_max_gid=$am_max_uid # The $UID and $GID variables are not portable, so we need to resort # to the POSIX-mandated id(1) utility. Errors in the 'id' calls # below are definitely unexpected, so allow the users to see them # (that is, avoid stderr redirection). am_uid=`id -u || echo unknown` am_gid=`id -g || echo unknown` AC_MSG_CHECKING([whether UID '$am_uid' is supported by ustar format]) if test $am_uid -le $am_max_uid; then AC_MSG_RESULT([yes]) else AC_MSG_RESULT([no]) _am_tools=none fi AC_MSG_CHECKING([whether GID '$am_gid' is supported by ustar format]) if test $am_gid -le $am_max_gid; then AC_MSG_RESULT([yes]) else AC_MSG_RESULT([no]) _am_tools=none fi], [pax], [], [m4_fatal([Unknown tar format])]) AC_MSG_CHECKING([how to create a $1 tar archive]) # Go ahead even if we have the value already cached. We do so because we # need to set the values for the 'am__tar' and 'am__untar' variables. _am_tools=${am_cv_prog_tar_$1-$_am_tools} for _am_tool in $_am_tools; do case $_am_tool in gnutar) for _am_tar in tar gnutar gtar; do AM_RUN_LOG([$_am_tar --version]) && break done am__tar="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$$tardir"' am__tar_="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$tardir"' am__untar="$_am_tar -xf -" ;; plaintar) # Must skip GNU tar: if it does not support --format= it doesn't create # ustar tarball either. (tar --version) >/dev/null 2>&1 && continue am__tar='tar chf - "$$tardir"' am__tar_='tar chf - "$tardir"' am__untar='tar xf -' ;; pax) am__tar='pax -L -x $1 -w "$$tardir"' am__tar_='pax -L -x $1 -w "$tardir"' am__untar='pax -r' ;; cpio) am__tar='find "$$tardir" -print | cpio -o -H $1 -L' am__tar_='find "$tardir" -print | cpio -o -H $1 -L' am__untar='cpio -i -H $1 -d' ;; none) am__tar=false am__tar_=false am__untar=false ;; esac # If the value was cached, stop now. We just wanted to have am__tar # and am__untar set. test -n "${am_cv_prog_tar_$1}" && break # tar/untar a dummy directory, and stop if the command works. rm -rf conftest.dir mkdir conftest.dir echo GrepMe > conftest.dir/file AM_RUN_LOG([tardir=conftest.dir && eval $am__tar_ >conftest.tar]) rm -rf conftest.dir if test -s conftest.tar; then AM_RUN_LOG([$am__untar /dev/null 2>&1 && break fi done rm -rf conftest.dir AC_CACHE_VAL([am_cv_prog_tar_$1], [am_cv_prog_tar_$1=$_am_tool]) AC_MSG_RESULT([$am_cv_prog_tar_$1])]) AC_SUBST([am__tar]) AC_SUBST([am__untar]) ]) # _AM_PROG_TAR m4_include([m4/gettext.m4]) m4_include([m4/host-cpu-c-abi.m4]) m4_include([m4/iconv.m4]) m4_include([m4/intlmacosx.m4]) m4_include([m4/lib-ld.m4]) m4_include([m4/lib-link.m4]) m4_include([m4/lib-prefix.m4]) m4_include([m4/nls.m4]) m4_include([m4/po.m4]) m4_include([m4/progtest.m4]) webdar-1.0.0/ltmain.sh0000755000175000017520000121240114605317530011527 00000000000000#! /usr/bin/env sh ## DO NOT EDIT - This file generated from ./build-aux/ltmain.in ## by inline-source v2019-02-19.15 # libtool (GNU libtool) 2.4.7 # Provide generalized library-building support services. # Written by Gordon Matzigkeit , 1996 # Copyright (C) 1996-2019, 2021-2022 Free Software Foundation, Inc. # This is free software; see the source for copying conditions. There is NO # warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. # GNU Libtool is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # As a special exception to the GNU General Public License, # if you distribute this file as part of a program or library that # is built using GNU Libtool, you may include this file under the # same distribution terms that you use for the rest of that program. # # GNU Libtool is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see . PROGRAM=libtool PACKAGE=libtool VERSION="2.4.7 Debian-2.4.7-7~deb12u1" package_revision=2.4.7 ## ------ ## ## Usage. ## ## ------ ## # Run './libtool --help' for help with using this script from the # command line. ## ------------------------------- ## ## User overridable command paths. ## ## ------------------------------- ## # After configure completes, it has a better idea of some of the # shell tools we need than the defaults used by the functions shared # with bootstrap, so set those here where they can still be over- # ridden by the user, but otherwise take precedence. : ${AUTOCONF="autoconf"} : ${AUTOMAKE="automake"} ## -------------------------- ## ## Source external libraries. ## ## -------------------------- ## # Much of our low-level functionality needs to be sourced from external # libraries, which are installed to $pkgauxdir. # Set a version string for this script. scriptversion=2019-02-19.15; # UTC # General shell script boiler plate, and helper functions. # Written by Gary V. Vaughan, 2004 # This is free software. There is NO warranty; not even for # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. # # Copyright (C) 2004-2019, 2021 Bootstrap Authors # # This file is dual licensed under the terms of the MIT license # , and GPL version 2 or later # . You must apply one of # these licenses when using or redistributing this software or any of # the files within it. See the URLs above, or the file `LICENSE` # included in the Bootstrap distribution for the full license texts. # Please report bugs or propose patches to: # ## ------ ## ## Usage. ## ## ------ ## # Evaluate this file near the top of your script to gain access to # the functions and variables defined here: # # . `echo "$0" | ${SED-sed} 's|[^/]*$||'`/build-aux/funclib.sh # # If you need to override any of the default environment variable # settings, do that before evaluating this file. ## -------------------- ## ## Shell normalisation. ## ## -------------------- ## # Some shells need a little help to be as Bourne compatible as possible. # Before doing anything else, make sure all that help has been provided! DUALCASE=1; export DUALCASE # for MKS sh if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST else case `(set -o) 2>/dev/null` in *posix*) set -o posix ;; esac fi # NLS nuisances: We save the old values in case they are required later. _G_user_locale= _G_safe_locale= for _G_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES do eval "if test set = \"\${$_G_var+set}\"; then save_$_G_var=\$$_G_var $_G_var=C export $_G_var _G_user_locale=\"$_G_var=\\\$save_\$_G_var; \$_G_user_locale\" _G_safe_locale=\"$_G_var=C; \$_G_safe_locale\" fi" done # These NLS vars are set unconditionally (bootstrap issue #24). Unset those # in case the environment reset is needed later and the $save_* variant is not # defined (see the code above). LC_ALL=C LANGUAGE=C export LANGUAGE LC_ALL # Make sure IFS has a sensible default sp=' ' nl=' ' IFS="$sp $nl" # There are apparently some retarded systems that use ';' as a PATH separator! if test "${PATH_SEPARATOR+set}" != set; then PATH_SEPARATOR=: (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || PATH_SEPARATOR=';' } fi # func_unset VAR # -------------- # Portably unset VAR. # In some shells, an 'unset VAR' statement leaves a non-zero return # status if VAR is already unset, which might be problematic if the # statement is used at the end of a function (thus poisoning its return # value) or when 'set -e' is active (causing even a spurious abort of # the script in this case). func_unset () { { eval $1=; (eval unset $1) >/dev/null 2>&1 && eval unset $1 || : ; } } # Make sure CDPATH doesn't cause `cd` commands to output the target dir. func_unset CDPATH # Make sure ${,E,F}GREP behave sanely. func_unset GREP_OPTIONS ## ------------------------- ## ## Locate command utilities. ## ## ------------------------- ## # func_executable_p FILE # ---------------------- # Check that FILE is an executable regular file. func_executable_p () { test -f "$1" && test -x "$1" } # func_path_progs PROGS_LIST CHECK_FUNC [PATH] # -------------------------------------------- # Search for either a program that responds to --version with output # containing "GNU", or else returned by CHECK_FUNC otherwise, by # trying all the directories in PATH with each of the elements of # PROGS_LIST. # # CHECK_FUNC should accept the path to a candidate program, and # set $func_check_prog_result if it truncates its output less than # $_G_path_prog_max characters. func_path_progs () { _G_progs_list=$1 _G_check_func=$2 _G_PATH=${3-"$PATH"} _G_path_prog_max=0 _G_path_prog_found=false _G_save_IFS=$IFS; IFS=${PATH_SEPARATOR-:} for _G_dir in $_G_PATH; do IFS=$_G_save_IFS test -z "$_G_dir" && _G_dir=. for _G_prog_name in $_G_progs_list; do for _exeext in '' .EXE; do _G_path_prog=$_G_dir/$_G_prog_name$_exeext func_executable_p "$_G_path_prog" || continue case `"$_G_path_prog" --version 2>&1` in *GNU*) func_path_progs_result=$_G_path_prog _G_path_prog_found=: ;; *) $_G_check_func $_G_path_prog func_path_progs_result=$func_check_prog_result ;; esac $_G_path_prog_found && break 3 done done done IFS=$_G_save_IFS test -z "$func_path_progs_result" && { echo "no acceptable sed could be found in \$PATH" >&2 exit 1 } } # We want to be able to use the functions in this file before configure # has figured out where the best binaries are kept, which means we have # to search for them ourselves - except when the results are already set # where we skip the searches. # Unless the user overrides by setting SED, search the path for either GNU # sed, or the sed that truncates its output the least. test -z "$SED" && { _G_sed_script=s/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb/ for _G_i in 1 2 3 4 5 6 7; do _G_sed_script=$_G_sed_script$nl$_G_sed_script done echo "$_G_sed_script" 2>/dev/null | sed 99q >conftest.sed _G_sed_script= func_check_prog_sed () { _G_path_prog=$1 _G_count=0 printf 0123456789 >conftest.in while : do cat conftest.in conftest.in >conftest.tmp mv conftest.tmp conftest.in cp conftest.in conftest.nl echo '' >> conftest.nl "$_G_path_prog" -f conftest.sed conftest.out 2>/dev/null || break diff conftest.out conftest.nl >/dev/null 2>&1 || break _G_count=`expr $_G_count + 1` if test "$_G_count" -gt "$_G_path_prog_max"; then # Best one so far, save it but keep looking for a better one func_check_prog_result=$_G_path_prog _G_path_prog_max=$_G_count fi # 10*(2^10) chars as input seems more than enough test 10 -lt "$_G_count" && break done rm -f conftest.in conftest.tmp conftest.nl conftest.out } func_path_progs "sed gsed" func_check_prog_sed "$PATH:/usr/xpg4/bin" rm -f conftest.sed SED=$func_path_progs_result } # Unless the user overrides by setting GREP, search the path for either GNU # grep, or the grep that truncates its output the least. test -z "$GREP" && { func_check_prog_grep () { _G_path_prog=$1 _G_count=0 _G_path_prog_max=0 printf 0123456789 >conftest.in while : do cat conftest.in conftest.in >conftest.tmp mv conftest.tmp conftest.in cp conftest.in conftest.nl echo 'GREP' >> conftest.nl "$_G_path_prog" -e 'GREP$' -e '-(cannot match)-' conftest.out 2>/dev/null || break diff conftest.out conftest.nl >/dev/null 2>&1 || break _G_count=`expr $_G_count + 1` if test "$_G_count" -gt "$_G_path_prog_max"; then # Best one so far, save it but keep looking for a better one func_check_prog_result=$_G_path_prog _G_path_prog_max=$_G_count fi # 10*(2^10) chars as input seems more than enough test 10 -lt "$_G_count" && break done rm -f conftest.in conftest.tmp conftest.nl conftest.out } func_path_progs "grep ggrep" func_check_prog_grep "$PATH:/usr/xpg4/bin" GREP=$func_path_progs_result } ## ------------------------------- ## ## User overridable command paths. ## ## ------------------------------- ## # All uppercase variable names are used for environment variables. These # variables can be overridden by the user before calling a script that # uses them if a suitable command of that name is not already available # in the command search PATH. : ${CP="cp -f"} : ${ECHO="printf %s\n"} : ${EGREP="$GREP -E"} : ${FGREP="$GREP -F"} : ${LN_S="ln -s"} : ${MAKE="make"} : ${MKDIR="mkdir"} : ${MV="mv -f"} : ${RM="rm -f"} : ${SHELL="${CONFIG_SHELL-/bin/sh}"} ## -------------------- ## ## Useful sed snippets. ## ## -------------------- ## sed_dirname='s|/[^/]*$||' sed_basename='s|^.*/||' # Sed substitution that helps us do robust quoting. It backslashifies # metacharacters that are still active within double-quoted strings. sed_quote_subst='s|\([`"$\\]\)|\\\1|g' # Same as above, but do not quote variable references. sed_double_quote_subst='s/\(["`\\]\)/\\\1/g' # Sed substitution that turns a string into a regex matching for the # string literally. sed_make_literal_regex='s|[].[^$\\*\/]|\\&|g' # Sed substitution that converts a w32 file name or path # that contains forward slashes, into one that contains # (escaped) backslashes. A very naive implementation. sed_naive_backslashify='s|\\\\*|\\|g;s|/|\\|g;s|\\|\\\\|g' # Re-'\' parameter expansions in output of sed_double_quote_subst that # were '\'-ed in input to the same. If an odd number of '\' preceded a # '$' in input to sed_double_quote_subst, that '$' was protected from # expansion. Since each input '\' is now two '\'s, look for any number # of runs of four '\'s followed by two '\'s and then a '$'. '\' that '$'. _G_bs='\\' _G_bs2='\\\\' _G_bs4='\\\\\\\\' _G_dollar='\$' sed_double_backslash="\ s/$_G_bs4/&\\ /g s/^$_G_bs2$_G_dollar/$_G_bs&/ s/\\([^$_G_bs]\\)$_G_bs2$_G_dollar/\\1$_G_bs2$_G_bs$_G_dollar/g s/\n//g" # require_check_ifs_backslash # --------------------------- # Check if we can use backslash as IFS='\' separator, and set # $check_ifs_backshlash_broken to ':' or 'false'. require_check_ifs_backslash=func_require_check_ifs_backslash func_require_check_ifs_backslash () { _G_save_IFS=$IFS IFS='\' _G_check_ifs_backshlash='a\\b' for _G_i in $_G_check_ifs_backshlash do case $_G_i in a) check_ifs_backshlash_broken=false ;; '') break ;; *) check_ifs_backshlash_broken=: break ;; esac done IFS=$_G_save_IFS require_check_ifs_backslash=: } ## ----------------- ## ## Global variables. ## ## ----------------- ## # Except for the global variables explicitly listed below, the following # functions in the '^func_' namespace, and the '^require_' namespace # variables initialised in the 'Resource management' section, sourcing # this file will not pollute your global namespace with anything # else. There's no portable way to scope variables in Bourne shell # though, so actually running these functions will sometimes place # results into a variable named after the function, and often use # temporary variables in the '^_G_' namespace. If you are careful to # avoid using those namespaces casually in your sourcing script, things # should continue to work as you expect. And, of course, you can freely # overwrite any of the functions or variables defined here before # calling anything to customize them. EXIT_SUCCESS=0 EXIT_FAILURE=1 EXIT_MISMATCH=63 # $? = 63 is used to indicate version mismatch to missing. EXIT_SKIP=77 # $? = 77 is used to indicate a skipped test to automake. # Allow overriding, eg assuming that you follow the convention of # putting '$debug_cmd' at the start of all your functions, you can get # bash to show function call trace with: # # debug_cmd='echo "${FUNCNAME[0]} $*" >&2' bash your-script-name debug_cmd=${debug_cmd-":"} exit_cmd=: # By convention, finish your script with: # # exit $exit_status # # so that you can set exit_status to non-zero if you want to indicate # something went wrong during execution without actually bailing out at # the point of failure. exit_status=$EXIT_SUCCESS # Work around backward compatibility issue on IRIX 6.5. On IRIX 6.4+, sh # is ksh but when the shell is invoked as "sh" and the current value of # the _XPG environment variable is not equal to 1 (one), the special # positional parameter $0, within a function call, is the name of the # function. progpath=$0 # The name of this program. progname=`$ECHO "$progpath" |$SED "$sed_basename"` # Make sure we have an absolute progpath for reexecution: case $progpath in [\\/]*|[A-Za-z]:\\*) ;; *[\\/]*) progdir=`$ECHO "$progpath" |$SED "$sed_dirname"` progdir=`cd "$progdir" && pwd` progpath=$progdir/$progname ;; *) _G_IFS=$IFS IFS=${PATH_SEPARATOR-:} for progdir in $PATH; do IFS=$_G_IFS test -x "$progdir/$progname" && break done IFS=$_G_IFS test -n "$progdir" || progdir=`pwd` progpath=$progdir/$progname ;; esac ## ----------------- ## ## Standard options. ## ## ----------------- ## # The following options affect the operation of the functions defined # below, and should be set appropriately depending on run-time para- # meters passed on the command line. opt_dry_run=false opt_quiet=false opt_verbose=false # Categories 'all' and 'none' are always available. Append any others # you will pass as the first argument to func_warning from your own # code. warning_categories= # By default, display warnings according to 'opt_warning_types'. Set # 'warning_func' to ':' to elide all warnings, or func_fatal_error to # treat the next displayed warning as a fatal error. warning_func=func_warn_and_continue # Set to 'all' to display all warnings, 'none' to suppress all # warnings, or a space delimited list of some subset of # 'warning_categories' to display only the listed warnings. opt_warning_types=all ## -------------------- ## ## Resource management. ## ## -------------------- ## # This section contains definitions for functions that each ensure a # particular resource (a file, or a non-empty configuration variable for # example) is available, and if appropriate to extract default values # from pertinent package files. Call them using their associated # 'require_*' variable to ensure that they are executed, at most, once. # # It's entirely deliberate that calling these functions can set # variables that don't obey the namespace limitations obeyed by the rest # of this file, in order that that they be as useful as possible to # callers. # require_term_colors # ------------------- # Allow display of bold text on terminals that support it. require_term_colors=func_require_term_colors func_require_term_colors () { $debug_cmd test -t 1 && { # COLORTERM and USE_ANSI_COLORS environment variables take # precedence, because most terminfo databases neglect to describe # whether color sequences are supported. test -n "${COLORTERM+set}" && : ${USE_ANSI_COLORS="1"} if test 1 = "$USE_ANSI_COLORS"; then # Standard ANSI escape sequences tc_reset='' tc_bold=''; tc_standout='' tc_red=''; tc_green='' tc_blue=''; tc_cyan='' else # Otherwise trust the terminfo database after all. test -n "`tput sgr0 2>/dev/null`" && { tc_reset=`tput sgr0` test -n "`tput bold 2>/dev/null`" && tc_bold=`tput bold` tc_standout=$tc_bold test -n "`tput smso 2>/dev/null`" && tc_standout=`tput smso` test -n "`tput setaf 1 2>/dev/null`" && tc_red=`tput setaf 1` test -n "`tput setaf 2 2>/dev/null`" && tc_green=`tput setaf 2` test -n "`tput setaf 4 2>/dev/null`" && tc_blue=`tput setaf 4` test -n "`tput setaf 5 2>/dev/null`" && tc_cyan=`tput setaf 5` } fi } require_term_colors=: } ## ----------------- ## ## Function library. ## ## ----------------- ## # This section contains a variety of useful functions to call in your # scripts. Take note of the portable wrappers for features provided by # some modern shells, which will fall back to slower equivalents on # less featureful shells. # func_append VAR VALUE # --------------------- # Append VALUE onto the existing contents of VAR. # _G_HAVE_PLUSEQ_OP # Can be empty, in which case the shell is probed, "yes" if += is # useable or anything else if it does not work. if test -z "$_G_HAVE_PLUSEQ_OP" && \ __PLUSEQ_TEST="a" && \ __PLUSEQ_TEST+=" b" 2>/dev/null && \ test "a b" = "$__PLUSEQ_TEST"; then _G_HAVE_PLUSEQ_OP=yes fi if test yes = "$_G_HAVE_PLUSEQ_OP" then # This is an XSI compatible shell, allowing a faster implementation... eval 'func_append () { $debug_cmd eval "$1+=\$2" }' else # ...otherwise fall back to using expr, which is often a shell builtin. func_append () { $debug_cmd eval "$1=\$$1\$2" } fi # func_append_quoted VAR VALUE # ---------------------------- # Quote VALUE and append to the end of shell variable VAR, separated # by a space. if test yes = "$_G_HAVE_PLUSEQ_OP"; then eval 'func_append_quoted () { $debug_cmd func_quote_arg pretty "$2" eval "$1+=\\ \$func_quote_arg_result" }' else func_append_quoted () { $debug_cmd func_quote_arg pretty "$2" eval "$1=\$$1\\ \$func_quote_arg_result" } fi # func_append_uniq VAR VALUE # -------------------------- # Append unique VALUE onto the existing contents of VAR, assuming # entries are delimited by the first character of VALUE. For example: # # func_append_uniq options " --another-option option-argument" # # will only append to $options if " --another-option option-argument " # is not already present somewhere in $options already (note spaces at # each end implied by leading space in second argument). func_append_uniq () { $debug_cmd eval _G_current_value='`$ECHO $'$1'`' _G_delim=`expr "$2" : '\(.\)'` case $_G_delim$_G_current_value$_G_delim in *"$2$_G_delim"*) ;; *) func_append "$@" ;; esac } # func_arith TERM... # ------------------ # Set func_arith_result to the result of evaluating TERMs. test -z "$_G_HAVE_ARITH_OP" \ && (eval 'test 2 = $(( 1 + 1 ))') 2>/dev/null \ && _G_HAVE_ARITH_OP=yes if test yes = "$_G_HAVE_ARITH_OP"; then eval 'func_arith () { $debug_cmd func_arith_result=$(( $* )) }' else func_arith () { $debug_cmd func_arith_result=`expr "$@"` } fi # func_basename FILE # ------------------ # Set func_basename_result to FILE with everything up to and including # the last / stripped. if test yes = "$_G_HAVE_XSI_OPS"; then # If this shell supports suffix pattern removal, then use it to avoid # forking. Hide the definitions single quotes in case the shell chokes # on unsupported syntax... _b='func_basename_result=${1##*/}' _d='case $1 in */*) func_dirname_result=${1%/*}$2 ;; * ) func_dirname_result=$3 ;; esac' else # ...otherwise fall back to using sed. _b='func_basename_result=`$ECHO "$1" |$SED "$sed_basename"`' _d='func_dirname_result=`$ECHO "$1" |$SED "$sed_dirname"` if test "X$func_dirname_result" = "X$1"; then func_dirname_result=$3 else func_append func_dirname_result "$2" fi' fi eval 'func_basename () { $debug_cmd '"$_b"' }' # func_dirname FILE APPEND NONDIR_REPLACEMENT # ------------------------------------------- # Compute the dirname of FILE. If nonempty, add APPEND to the result, # otherwise set result to NONDIR_REPLACEMENT. eval 'func_dirname () { $debug_cmd '"$_d"' }' # func_dirname_and_basename FILE APPEND NONDIR_REPLACEMENT # -------------------------------------------------------- # Perform func_basename and func_dirname in a single function # call: # dirname: Compute the dirname of FILE. If nonempty, # add APPEND to the result, otherwise set result # to NONDIR_REPLACEMENT. # value returned in "$func_dirname_result" # basename: Compute filename of FILE. # value retuned in "$func_basename_result" # For efficiency, we do not delegate to the functions above but instead # duplicate the functionality here. eval 'func_dirname_and_basename () { $debug_cmd '"$_b"' '"$_d"' }' # func_echo ARG... # ---------------- # Echo program name prefixed message. func_echo () { $debug_cmd _G_message=$* func_echo_IFS=$IFS IFS=$nl for _G_line in $_G_message; do IFS=$func_echo_IFS $ECHO "$progname: $_G_line" done IFS=$func_echo_IFS } # func_echo_all ARG... # -------------------- # Invoke $ECHO with all args, space-separated. func_echo_all () { $ECHO "$*" } # func_echo_infix_1 INFIX ARG... # ------------------------------ # Echo program name, followed by INFIX on the first line, with any # additional lines not showing INFIX. func_echo_infix_1 () { $debug_cmd $require_term_colors _G_infix=$1; shift _G_indent=$_G_infix _G_prefix="$progname: $_G_infix: " _G_message=$* # Strip color escape sequences before counting printable length for _G_tc in "$tc_reset" "$tc_bold" "$tc_standout" "$tc_red" "$tc_green" "$tc_blue" "$tc_cyan" do test -n "$_G_tc" && { _G_esc_tc=`$ECHO "$_G_tc" | $SED "$sed_make_literal_regex"` _G_indent=`$ECHO "$_G_indent" | $SED "s|$_G_esc_tc||g"` } done _G_indent="$progname: "`echo "$_G_indent" | $SED 's|.| |g'`" " ## exclude from sc_prohibit_nested_quotes func_echo_infix_1_IFS=$IFS IFS=$nl for _G_line in $_G_message; do IFS=$func_echo_infix_1_IFS $ECHO "$_G_prefix$tc_bold$_G_line$tc_reset" >&2 _G_prefix=$_G_indent done IFS=$func_echo_infix_1_IFS } # func_error ARG... # ----------------- # Echo program name prefixed message to standard error. func_error () { $debug_cmd $require_term_colors func_echo_infix_1 " $tc_standout${tc_red}error$tc_reset" "$*" >&2 } # func_fatal_error ARG... # ----------------------- # Echo program name prefixed message to standard error, and exit. func_fatal_error () { $debug_cmd func_error "$*" exit $EXIT_FAILURE } # func_grep EXPRESSION FILENAME # ----------------------------- # Check whether EXPRESSION matches any line of FILENAME, without output. func_grep () { $debug_cmd $GREP "$1" "$2" >/dev/null 2>&1 } # func_len STRING # --------------- # Set func_len_result to the length of STRING. STRING may not # start with a hyphen. test -z "$_G_HAVE_XSI_OPS" \ && (eval 'x=a/b/c; test 5aa/bb/cc = "${#x}${x%%/*}${x%/*}${x#*/}${x##*/}"') 2>/dev/null \ && _G_HAVE_XSI_OPS=yes if test yes = "$_G_HAVE_XSI_OPS"; then eval 'func_len () { $debug_cmd func_len_result=${#1} }' else func_len () { $debug_cmd func_len_result=`expr "$1" : ".*" 2>/dev/null || echo $max_cmd_len` } fi # func_mkdir_p DIRECTORY-PATH # --------------------------- # Make sure the entire path to DIRECTORY-PATH is available. func_mkdir_p () { $debug_cmd _G_directory_path=$1 _G_dir_list= if test -n "$_G_directory_path" && test : != "$opt_dry_run"; then # Protect directory names starting with '-' case $_G_directory_path in -*) _G_directory_path=./$_G_directory_path ;; esac # While some portion of DIR does not yet exist... while test ! -d "$_G_directory_path"; do # ...make a list in topmost first order. Use a colon delimited # list incase some portion of path contains whitespace. _G_dir_list=$_G_directory_path:$_G_dir_list # If the last portion added has no slash in it, the list is done case $_G_directory_path in */*) ;; *) break ;; esac # ...otherwise throw away the child directory and loop _G_directory_path=`$ECHO "$_G_directory_path" | $SED -e "$sed_dirname"` done _G_dir_list=`$ECHO "$_G_dir_list" | $SED 's|:*$||'` func_mkdir_p_IFS=$IFS; IFS=: for _G_dir in $_G_dir_list; do IFS=$func_mkdir_p_IFS # mkdir can fail with a 'File exist' error if two processes # try to create one of the directories concurrently. Don't # stop in that case! $MKDIR "$_G_dir" 2>/dev/null || : done IFS=$func_mkdir_p_IFS # Bail out if we (or some other process) failed to create a directory. test -d "$_G_directory_path" || \ func_fatal_error "Failed to create '$1'" fi } # func_mktempdir [BASENAME] # ------------------------- # Make a temporary directory that won't clash with other running # libtool processes, and avoids race conditions if possible. If # given, BASENAME is the basename for that directory. func_mktempdir () { $debug_cmd _G_template=${TMPDIR-/tmp}/${1-$progname} if test : = "$opt_dry_run"; then # Return a directory name, but don't create it in dry-run mode _G_tmpdir=$_G_template-$$ else # If mktemp works, use that first and foremost _G_tmpdir=`mktemp -d "$_G_template-XXXXXXXX" 2>/dev/null` if test ! -d "$_G_tmpdir"; then # Failing that, at least try and use $RANDOM to avoid a race _G_tmpdir=$_G_template-${RANDOM-0}$$ func_mktempdir_umask=`umask` umask 0077 $MKDIR "$_G_tmpdir" umask $func_mktempdir_umask fi # If we're not in dry-run mode, bomb out on failure test -d "$_G_tmpdir" || \ func_fatal_error "cannot create temporary directory '$_G_tmpdir'" fi $ECHO "$_G_tmpdir" } # func_normal_abspath PATH # ------------------------ # Remove doubled-up and trailing slashes, "." path components, # and cancel out any ".." path components in PATH after making # it an absolute path. func_normal_abspath () { $debug_cmd # These SED scripts presuppose an absolute path with a trailing slash. _G_pathcar='s|^/\([^/]*\).*$|\1|' _G_pathcdr='s|^/[^/]*||' _G_removedotparts=':dotsl s|/\./|/|g t dotsl s|/\.$|/|' _G_collapseslashes='s|/\{1,\}|/|g' _G_finalslash='s|/*$|/|' # Start from root dir and reassemble the path. func_normal_abspath_result= func_normal_abspath_tpath=$1 func_normal_abspath_altnamespace= case $func_normal_abspath_tpath in "") # Empty path, that just means $cwd. func_stripname '' '/' "`pwd`" func_normal_abspath_result=$func_stripname_result return ;; # The next three entries are used to spot a run of precisely # two leading slashes without using negated character classes; # we take advantage of case's first-match behaviour. ///*) # Unusual form of absolute path, do nothing. ;; //*) # Not necessarily an ordinary path; POSIX reserves leading '//' # and for example Cygwin uses it to access remote file shares # over CIFS/SMB, so we conserve a leading double slash if found. func_normal_abspath_altnamespace=/ ;; /*) # Absolute path, do nothing. ;; *) # Relative path, prepend $cwd. func_normal_abspath_tpath=`pwd`/$func_normal_abspath_tpath ;; esac # Cancel out all the simple stuff to save iterations. We also want # the path to end with a slash for ease of parsing, so make sure # there is one (and only one) here. func_normal_abspath_tpath=`$ECHO "$func_normal_abspath_tpath" | $SED \ -e "$_G_removedotparts" -e "$_G_collapseslashes" -e "$_G_finalslash"` while :; do # Processed it all yet? if test / = "$func_normal_abspath_tpath"; then # If we ascended to the root using ".." the result may be empty now. if test -z "$func_normal_abspath_result"; then func_normal_abspath_result=/ fi break fi func_normal_abspath_tcomponent=`$ECHO "$func_normal_abspath_tpath" | $SED \ -e "$_G_pathcar"` func_normal_abspath_tpath=`$ECHO "$func_normal_abspath_tpath" | $SED \ -e "$_G_pathcdr"` # Figure out what to do with it case $func_normal_abspath_tcomponent in "") # Trailing empty path component, ignore it. ;; ..) # Parent dir; strip last assembled component from result. func_dirname "$func_normal_abspath_result" func_normal_abspath_result=$func_dirname_result ;; *) # Actual path component, append it. func_append func_normal_abspath_result "/$func_normal_abspath_tcomponent" ;; esac done # Restore leading double-slash if one was found on entry. func_normal_abspath_result=$func_normal_abspath_altnamespace$func_normal_abspath_result } # func_notquiet ARG... # -------------------- # Echo program name prefixed message only when not in quiet mode. func_notquiet () { $debug_cmd $opt_quiet || func_echo ${1+"$@"} # A bug in bash halts the script if the last line of a function # fails when set -e is in force, so we need another command to # work around that: : } # func_relative_path SRCDIR DSTDIR # -------------------------------- # Set func_relative_path_result to the relative path from SRCDIR to DSTDIR. func_relative_path () { $debug_cmd func_relative_path_result= func_normal_abspath "$1" func_relative_path_tlibdir=$func_normal_abspath_result func_normal_abspath "$2" func_relative_path_tbindir=$func_normal_abspath_result # Ascend the tree starting from libdir while :; do # check if we have found a prefix of bindir case $func_relative_path_tbindir in $func_relative_path_tlibdir) # found an exact match func_relative_path_tcancelled= break ;; $func_relative_path_tlibdir*) # found a matching prefix func_stripname "$func_relative_path_tlibdir" '' "$func_relative_path_tbindir" func_relative_path_tcancelled=$func_stripname_result if test -z "$func_relative_path_result"; then func_relative_path_result=. fi break ;; *) func_dirname $func_relative_path_tlibdir func_relative_path_tlibdir=$func_dirname_result if test -z "$func_relative_path_tlibdir"; then # Have to descend all the way to the root! func_relative_path_result=../$func_relative_path_result func_relative_path_tcancelled=$func_relative_path_tbindir break fi func_relative_path_result=../$func_relative_path_result ;; esac done # Now calculate path; take care to avoid doubling-up slashes. func_stripname '' '/' "$func_relative_path_result" func_relative_path_result=$func_stripname_result func_stripname '/' '/' "$func_relative_path_tcancelled" if test -n "$func_stripname_result"; then func_append func_relative_path_result "/$func_stripname_result" fi # Normalisation. If bindir is libdir, return '.' else relative path. if test -n "$func_relative_path_result"; then func_stripname './' '' "$func_relative_path_result" func_relative_path_result=$func_stripname_result fi test -n "$func_relative_path_result" || func_relative_path_result=. : } # func_quote_portable EVAL ARG # ---------------------------- # Internal function to portably implement func_quote_arg. Note that we still # keep attention to performance here so we as much as possible try to avoid # calling sed binary (so far O(N) complexity as long as func_append is O(1)). func_quote_portable () { $debug_cmd $require_check_ifs_backslash func_quote_portable_result=$2 # one-time-loop (easy break) while true do if $1; then func_quote_portable_result=`$ECHO "$2" | $SED \ -e "$sed_double_quote_subst" -e "$sed_double_backslash"` break fi # Quote for eval. case $func_quote_portable_result in *[\\\`\"\$]*) # Fallback to sed for $func_check_bs_ifs_broken=:, or when the string # contains the shell wildcard characters. case $check_ifs_backshlash_broken$func_quote_portable_result in :*|*[\[\*\?]*) func_quote_portable_result=`$ECHO "$func_quote_portable_result" \ | $SED "$sed_quote_subst"` break ;; esac func_quote_portable_old_IFS=$IFS for _G_char in '\' '`' '"' '$' do # STATE($1) PREV($2) SEPARATOR($3) set start "" "" func_quote_portable_result=dummy"$_G_char$func_quote_portable_result$_G_char"dummy IFS=$_G_char for _G_part in $func_quote_portable_result do case $1 in quote) func_append func_quote_portable_result "$3$2" set quote "$_G_part" "\\$_G_char" ;; start) set first "" "" func_quote_portable_result= ;; first) set quote "$_G_part" "" ;; esac done done IFS=$func_quote_portable_old_IFS ;; *) ;; esac break done func_quote_portable_unquoted_result=$func_quote_portable_result case $func_quote_portable_result in # double-quote args containing shell metacharacters to delay # word splitting, command substitution and variable expansion # for a subsequent eval. # many bourne shells cannot handle close brackets correctly # in scan sets, so we specify it separately. *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") func_quote_portable_result=\"$func_quote_portable_result\" ;; esac } # func_quotefast_eval ARG # ----------------------- # Quote one ARG (internal). This is equivalent to 'func_quote_arg eval ARG', # but optimized for speed. Result is stored in $func_quotefast_eval. if test xyes = `(x=; printf -v x %q yes; echo x"$x") 2>/dev/null`; then printf -v _GL_test_printf_tilde %q '~' if test '\~' = "$_GL_test_printf_tilde"; then func_quotefast_eval () { printf -v func_quotefast_eval_result %q "$1" } else # Broken older Bash implementations. Make those faster too if possible. func_quotefast_eval () { case $1 in '~'*) func_quote_portable false "$1" func_quotefast_eval_result=$func_quote_portable_result ;; *) printf -v func_quotefast_eval_result %q "$1" ;; esac } fi else func_quotefast_eval () { func_quote_portable false "$1" func_quotefast_eval_result=$func_quote_portable_result } fi # func_quote_arg MODEs ARG # ------------------------ # Quote one ARG to be evaled later. MODEs argument may contain zero or more # specifiers listed below separated by ',' character. This function returns two # values: # i) func_quote_arg_result # double-quoted (when needed), suitable for a subsequent eval # ii) func_quote_arg_unquoted_result # has all characters that are still active within double # quotes backslashified. Available only if 'unquoted' is specified. # # Available modes: # ---------------- # 'eval' (default) # - escape shell special characters # 'expand' # - the same as 'eval'; but do not quote variable references # 'pretty' # - request aesthetic output, i.e. '"a b"' instead of 'a\ b'. This might # be used later in func_quote to get output like: 'echo "a b"' instead # of 'echo a\ b'. This is slower than default on some shells. # 'unquoted' # - produce also $func_quote_arg_unquoted_result which does not contain # wrapping double-quotes. # # Examples for 'func_quote_arg pretty,unquoted string': # # string | *_result | *_unquoted_result # ------------+-----------------------+------------------- # " | \" | \" # a b | "a b" | a b # "a b" | "\"a b\"" | \"a b\" # * | "*" | * # z="${x-$y}" | "z=\"\${x-\$y}\"" | z=\"\${x-\$y}\" # # Examples for 'func_quote_arg pretty,unquoted,expand string': # # string | *_result | *_unquoted_result # --------------+---------------------+-------------------- # z="${x-$y}" | "z=\"${x-$y}\"" | z=\"${x-$y}\" func_quote_arg () { _G_quote_expand=false case ,$1, in *,expand,*) _G_quote_expand=: ;; esac case ,$1, in *,pretty,*|*,expand,*|*,unquoted,*) func_quote_portable $_G_quote_expand "$2" func_quote_arg_result=$func_quote_portable_result func_quote_arg_unquoted_result=$func_quote_portable_unquoted_result ;; *) # Faster quote-for-eval for some shells. func_quotefast_eval "$2" func_quote_arg_result=$func_quotefast_eval_result ;; esac } # func_quote MODEs ARGs... # ------------------------ # Quote all ARGs to be evaled later and join them into single command. See # func_quote_arg's description for more info. func_quote () { $debug_cmd _G_func_quote_mode=$1 ; shift func_quote_result= while test 0 -lt $#; do func_quote_arg "$_G_func_quote_mode" "$1" if test -n "$func_quote_result"; then func_append func_quote_result " $func_quote_arg_result" else func_append func_quote_result "$func_quote_arg_result" fi shift done } # func_stripname PREFIX SUFFIX NAME # --------------------------------- # strip PREFIX and SUFFIX from NAME, and store in func_stripname_result. # PREFIX and SUFFIX must not contain globbing or regex special # characters, hashes, percent signs, but SUFFIX may contain a leading # dot (in which case that matches only a dot). if test yes = "$_G_HAVE_XSI_OPS"; then eval 'func_stripname () { $debug_cmd # pdksh 5.2.14 does not do ${X%$Y} correctly if both X and Y are # positional parameters, so assign one to ordinary variable first. func_stripname_result=$3 func_stripname_result=${func_stripname_result#"$1"} func_stripname_result=${func_stripname_result%"$2"} }' else func_stripname () { $debug_cmd case $2 in .*) func_stripname_result=`$ECHO "$3" | $SED -e "s%^$1%%" -e "s%\\\\$2\$%%"`;; *) func_stripname_result=`$ECHO "$3" | $SED -e "s%^$1%%" -e "s%$2\$%%"`;; esac } fi # func_show_eval CMD [FAIL_EXP] # ----------------------------- # Unless opt_quiet is true, then output CMD. Then, if opt_dryrun is # not true, evaluate CMD. If the evaluation of CMD fails, and FAIL_EXP # is given, then evaluate it. func_show_eval () { $debug_cmd _G_cmd=$1 _G_fail_exp=${2-':'} func_quote_arg pretty,expand "$_G_cmd" eval "func_notquiet $func_quote_arg_result" $opt_dry_run || { eval "$_G_cmd" _G_status=$? if test 0 -ne "$_G_status"; then eval "(exit $_G_status); $_G_fail_exp" fi } } # func_show_eval_locale CMD [FAIL_EXP] # ------------------------------------ # Unless opt_quiet is true, then output CMD. Then, if opt_dryrun is # not true, evaluate CMD. If the evaluation of CMD fails, and FAIL_EXP # is given, then evaluate it. Use the saved locale for evaluation. func_show_eval_locale () { $debug_cmd _G_cmd=$1 _G_fail_exp=${2-':'} $opt_quiet || { func_quote_arg expand,pretty "$_G_cmd" eval "func_echo $func_quote_arg_result" } $opt_dry_run || { eval "$_G_user_locale $_G_cmd" _G_status=$? eval "$_G_safe_locale" if test 0 -ne "$_G_status"; then eval "(exit $_G_status); $_G_fail_exp" fi } } # func_tr_sh # ---------- # Turn $1 into a string suitable for a shell variable name. # Result is stored in $func_tr_sh_result. All characters # not in the set a-zA-Z0-9_ are replaced with '_'. Further, # if $1 begins with a digit, a '_' is prepended as well. func_tr_sh () { $debug_cmd case $1 in [0-9]* | *[!a-zA-Z0-9_]*) func_tr_sh_result=`$ECHO "$1" | $SED -e 's/^\([0-9]\)/_\1/' -e 's/[^a-zA-Z0-9_]/_/g'` ;; * ) func_tr_sh_result=$1 ;; esac } # func_verbose ARG... # ------------------- # Echo program name prefixed message in verbose mode only. func_verbose () { $debug_cmd $opt_verbose && func_echo "$*" : } # func_warn_and_continue ARG... # ----------------------------- # Echo program name prefixed warning message to standard error. func_warn_and_continue () { $debug_cmd $require_term_colors func_echo_infix_1 "${tc_red}warning$tc_reset" "$*" >&2 } # func_warning CATEGORY ARG... # ---------------------------- # Echo program name prefixed warning message to standard error. Warning # messages can be filtered according to CATEGORY, where this function # elides messages where CATEGORY is not listed in the global variable # 'opt_warning_types'. func_warning () { $debug_cmd # CATEGORY must be in the warning_categories list! case " $warning_categories " in *" $1 "*) ;; *) func_internal_error "invalid warning category '$1'" ;; esac _G_category=$1 shift case " $opt_warning_types " in *" $_G_category "*) $warning_func ${1+"$@"} ;; esac } # func_sort_ver VER1 VER2 # ----------------------- # 'sort -V' is not generally available. # Note this deviates from the version comparison in automake # in that it treats 1.5 < 1.5.0, and treats 1.4.4a < 1.4-p3a # but this should suffice as we won't be specifying old # version formats or redundant trailing .0 in bootstrap.conf. # If we did want full compatibility then we should probably # use m4_version_compare from autoconf. func_sort_ver () { $debug_cmd printf '%s\n%s\n' "$1" "$2" \ | sort -t. -k 1,1n -k 2,2n -k 3,3n -k 4,4n -k 5,5n -k 6,6n -k 7,7n -k 8,8n -k 9,9n } # func_lt_ver PREV CURR # --------------------- # Return true if PREV and CURR are in the correct order according to # func_sort_ver, otherwise false. Use it like this: # # func_lt_ver "$prev_ver" "$proposed_ver" || func_fatal_error "..." func_lt_ver () { $debug_cmd test "x$1" = x`func_sort_ver "$1" "$2" | $SED 1q` } # Local variables: # mode: shell-script # sh-indentation: 2 # eval: (add-hook 'before-save-hook 'time-stamp) # time-stamp-pattern: "10/scriptversion=%:y-%02m-%02d.%02H; # UTC" # time-stamp-time-zone: "UTC" # End: #! /bin/sh # A portable, pluggable option parser for Bourne shell. # Written by Gary V. Vaughan, 2010 # This is free software. There is NO warranty; not even for # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. # # Copyright (C) 2010-2019, 2021 Bootstrap Authors # # This file is dual licensed under the terms of the MIT license # , and GPL version 2 or later # . You must apply one of # these licenses when using or redistributing this software or any of # the files within it. See the URLs above, or the file `LICENSE` # included in the Bootstrap distribution for the full license texts. # Please report bugs or propose patches to: # # Set a version string for this script. scriptversion=2019-02-19.15; # UTC ## ------ ## ## Usage. ## ## ------ ## # This file is a library for parsing options in your shell scripts along # with assorted other useful supporting features that you can make use # of too. # # For the simplest scripts you might need only: # # #!/bin/sh # . relative/path/to/funclib.sh # . relative/path/to/options-parser # scriptversion=1.0 # func_options ${1+"$@"} # eval set dummy "$func_options_result"; shift # ...rest of your script... # # In order for the '--version' option to work, you will need to have a # suitably formatted comment like the one at the top of this file # starting with '# Written by ' and ending with '# Copyright'. # # For '-h' and '--help' to work, you will also need a one line # description of your script's purpose in a comment directly above the # '# Written by ' line, like the one at the top of this file. # # The default options also support '--debug', which will turn on shell # execution tracing (see the comment above debug_cmd below for another # use), and '--verbose' and the func_verbose function to allow your script # to display verbose messages only when your user has specified # '--verbose'. # # After sourcing this file, you can plug in processing for additional # options by amending the variables from the 'Configuration' section # below, and following the instructions in the 'Option parsing' # section further down. ## -------------- ## ## Configuration. ## ## -------------- ## # You should override these variables in your script after sourcing this # file so that they reflect the customisations you have added to the # option parser. # The usage line for option parsing errors and the start of '-h' and # '--help' output messages. You can embed shell variables for delayed # expansion at the time the message is displayed, but you will need to # quote other shell meta-characters carefully to prevent them being # expanded when the contents are evaled. usage='$progpath [OPTION]...' # Short help message in response to '-h' and '--help'. Add to this or # override it after sourcing this library to reflect the full set of # options your script accepts. usage_message="\ --debug enable verbose shell tracing -W, --warnings=CATEGORY report the warnings falling in CATEGORY [all] -v, --verbose verbosely report processing --version print version information and exit -h, --help print short or long help message and exit " # Additional text appended to 'usage_message' in response to '--help'. long_help_message=" Warning categories include: 'all' show all warnings 'none' turn off all the warnings 'error' warnings are treated as fatal errors" # Help message printed before fatal option parsing errors. fatal_help="Try '\$progname --help' for more information." ## ------------------------- ## ## Hook function management. ## ## ------------------------- ## # This section contains functions for adding, removing, and running hooks # in the main code. A hook is just a list of function names that can be # run in order later on. # func_hookable FUNC_NAME # ----------------------- # Declare that FUNC_NAME will run hooks added with # 'func_add_hook FUNC_NAME ...'. func_hookable () { $debug_cmd func_append hookable_fns " $1" } # func_add_hook FUNC_NAME HOOK_FUNC # --------------------------------- # Request that FUNC_NAME call HOOK_FUNC before it returns. FUNC_NAME must # first have been declared "hookable" by a call to 'func_hookable'. func_add_hook () { $debug_cmd case " $hookable_fns " in *" $1 "*) ;; *) func_fatal_error "'$1' does not accept hook functions." ;; esac eval func_append ${1}_hooks '" $2"' } # func_remove_hook FUNC_NAME HOOK_FUNC # ------------------------------------ # Remove HOOK_FUNC from the list of hook functions to be called by # FUNC_NAME. func_remove_hook () { $debug_cmd eval ${1}_hooks='`$ECHO "\$'$1'_hooks" |$SED "s| '$2'||"`' } # func_propagate_result FUNC_NAME_A FUNC_NAME_B # --------------------------------------------- # If the *_result variable of FUNC_NAME_A _is set_, assign its value to # *_result variable of FUNC_NAME_B. func_propagate_result () { $debug_cmd func_propagate_result_result=: if eval "test \"\${${1}_result+set}\" = set" then eval "${2}_result=\$${1}_result" else func_propagate_result_result=false fi } # func_run_hooks FUNC_NAME [ARG]... # --------------------------------- # Run all hook functions registered to FUNC_NAME. # It's assumed that the list of hook functions contains nothing more # than a whitespace-delimited list of legal shell function names, and # no effort is wasted trying to catch shell meta-characters or preserve # whitespace. func_run_hooks () { $debug_cmd _G_rc_run_hooks=false case " $hookable_fns " in *" $1 "*) ;; *) func_fatal_error "'$1' does not support hook functions." ;; esac eval _G_hook_fns=\$$1_hooks; shift for _G_hook in $_G_hook_fns; do func_unset "${_G_hook}_result" eval $_G_hook '${1+"$@"}' func_propagate_result $_G_hook func_run_hooks if $func_propagate_result_result; then eval set dummy "$func_run_hooks_result"; shift fi done } ## --------------- ## ## Option parsing. ## ## --------------- ## # In order to add your own option parsing hooks, you must accept the # full positional parameter list from your hook function. You may remove # or edit any options that you action, and then pass back the remaining # unprocessed options in '_result', escaped # suitably for 'eval'. # # The '_result' variable is automatically unset # before your hook gets called; for best performance, only set the # *_result variable when necessary (i.e. don't call the 'func_quote' # function unnecessarily because it can be an expensive operation on some # machines). # # Like this: # # my_options_prep () # { # $debug_cmd # # # Extend the existing usage message. # usage_message=$usage_message' # -s, --silent don'\''t print informational messages # ' # # No change in '$@' (ignored completely by this hook). Leave # # my_options_prep_result variable intact. # } # func_add_hook func_options_prep my_options_prep # # # my_silent_option () # { # $debug_cmd # # args_changed=false # # # Note that, for efficiency, we parse as many options as we can # # recognise in a loop before passing the remainder back to the # # caller on the first unrecognised argument we encounter. # while test $# -gt 0; do # opt=$1; shift # case $opt in # --silent|-s) opt_silent=: # args_changed=: # ;; # # Separate non-argument short options: # -s*) func_split_short_opt "$_G_opt" # set dummy "$func_split_short_opt_name" \ # "-$func_split_short_opt_arg" ${1+"$@"} # shift # args_changed=: # ;; # *) # Make sure the first unrecognised option "$_G_opt" # # is added back to "$@" in case we need it later, # # if $args_changed was set to 'true'. # set dummy "$_G_opt" ${1+"$@"}; shift; break ;; # esac # done # # # Only call 'func_quote' here if we processed at least one argument. # if $args_changed; then # func_quote eval ${1+"$@"} # my_silent_option_result=$func_quote_result # fi # } # func_add_hook func_parse_options my_silent_option # # # my_option_validation () # { # $debug_cmd # # $opt_silent && $opt_verbose && func_fatal_help "\ # '--silent' and '--verbose' options are mutually exclusive." # } # func_add_hook func_validate_options my_option_validation # # You'll also need to manually amend $usage_message to reflect the extra # options you parse. It's preferable to append if you can, so that # multiple option parsing hooks can be added safely. # func_options_finish [ARG]... # ---------------------------- # Finishing the option parse loop (call 'func_options' hooks ATM). func_options_finish () { $debug_cmd func_run_hooks func_options ${1+"$@"} func_propagate_result func_run_hooks func_options_finish } # func_options [ARG]... # --------------------- # All the functions called inside func_options are hookable. See the # individual implementations for details. func_hookable func_options func_options () { $debug_cmd _G_options_quoted=false for my_func in options_prep parse_options validate_options options_finish do func_unset func_${my_func}_result func_unset func_run_hooks_result eval func_$my_func '${1+"$@"}' func_propagate_result func_$my_func func_options if $func_propagate_result_result; then eval set dummy "$func_options_result"; shift _G_options_quoted=: fi done $_G_options_quoted || { # As we (func_options) are top-level options-parser function and # nobody quoted "$@" for us yet, we need to do it explicitly for # caller. func_quote eval ${1+"$@"} func_options_result=$func_quote_result } } # func_options_prep [ARG]... # -------------------------- # All initialisations required before starting the option parse loop. # Note that when calling hook functions, we pass through the list of # positional parameters. If a hook function modifies that list, and # needs to propagate that back to rest of this script, then the complete # modified list must be put in 'func_run_hooks_result' before returning. func_hookable func_options_prep func_options_prep () { $debug_cmd # Option defaults: opt_verbose=false opt_warning_types= func_run_hooks func_options_prep ${1+"$@"} func_propagate_result func_run_hooks func_options_prep } # func_parse_options [ARG]... # --------------------------- # The main option parsing loop. func_hookable func_parse_options func_parse_options () { $debug_cmd _G_parse_options_requote=false # this just eases exit handling while test $# -gt 0; do # Defer to hook functions for initial option parsing, so they # get priority in the event of reusing an option name. func_run_hooks func_parse_options ${1+"$@"} func_propagate_result func_run_hooks func_parse_options if $func_propagate_result_result; then eval set dummy "$func_parse_options_result"; shift # Even though we may have changed "$@", we passed the "$@" array # down into the hook and it quoted it for us (because we are in # this if-branch). No need to quote it again. _G_parse_options_requote=false fi # Break out of the loop if we already parsed every option. test $# -gt 0 || break # We expect that one of the options parsed in this function matches # and thus we remove _G_opt from "$@" and need to re-quote. _G_match_parse_options=: _G_opt=$1 shift case $_G_opt in --debug|-x) debug_cmd='set -x' func_echo "enabling shell trace mode" >&2 $debug_cmd ;; --no-warnings|--no-warning|--no-warn) set dummy --warnings none ${1+"$@"} shift ;; --warnings|--warning|-W) if test $# = 0 && func_missing_arg $_G_opt; then _G_parse_options_requote=: break fi case " $warning_categories $1" in *" $1 "*) # trailing space prevents matching last $1 above func_append_uniq opt_warning_types " $1" ;; *all) opt_warning_types=$warning_categories ;; *none) opt_warning_types=none warning_func=: ;; *error) opt_warning_types=$warning_categories warning_func=func_fatal_error ;; *) func_fatal_error \ "unsupported warning category: '$1'" ;; esac shift ;; --verbose|-v) opt_verbose=: ;; --version) func_version ;; -\?|-h) func_usage ;; --help) func_help ;; # Separate optargs to long options (plugins may need this): --*=*) func_split_equals "$_G_opt" set dummy "$func_split_equals_lhs" \ "$func_split_equals_rhs" ${1+"$@"} shift ;; # Separate optargs to short options: -W*) func_split_short_opt "$_G_opt" set dummy "$func_split_short_opt_name" \ "$func_split_short_opt_arg" ${1+"$@"} shift ;; # Separate non-argument short options: -\?*|-h*|-v*|-x*) func_split_short_opt "$_G_opt" set dummy "$func_split_short_opt_name" \ "-$func_split_short_opt_arg" ${1+"$@"} shift ;; --) _G_parse_options_requote=: ; break ;; -*) func_fatal_help "unrecognised option: '$_G_opt'" ;; *) set dummy "$_G_opt" ${1+"$@"}; shift _G_match_parse_options=false break ;; esac if $_G_match_parse_options; then _G_parse_options_requote=: fi done if $_G_parse_options_requote; then # save modified positional parameters for caller func_quote eval ${1+"$@"} func_parse_options_result=$func_quote_result fi } # func_validate_options [ARG]... # ------------------------------ # Perform any sanity checks on option settings and/or unconsumed # arguments. func_hookable func_validate_options func_validate_options () { $debug_cmd # Display all warnings if -W was not given. test -n "$opt_warning_types" || opt_warning_types=" $warning_categories" func_run_hooks func_validate_options ${1+"$@"} func_propagate_result func_run_hooks func_validate_options # Bail if the options were screwed! $exit_cmd $EXIT_FAILURE } ## ----------------- ## ## Helper functions. ## ## ----------------- ## # This section contains the helper functions used by the rest of the # hookable option parser framework in ascii-betical order. # func_fatal_help ARG... # ---------------------- # Echo program name prefixed message to standard error, followed by # a help hint, and exit. func_fatal_help () { $debug_cmd eval \$ECHO \""Usage: $usage"\" eval \$ECHO \""$fatal_help"\" func_error ${1+"$@"} exit $EXIT_FAILURE } # func_help # --------- # Echo long help message to standard output and exit. func_help () { $debug_cmd func_usage_message $ECHO "$long_help_message" exit 0 } # func_missing_arg ARGNAME # ------------------------ # Echo program name prefixed message to standard error and set global # exit_cmd. func_missing_arg () { $debug_cmd func_error "Missing argument for '$1'." exit_cmd=exit } # func_split_equals STRING # ------------------------ # Set func_split_equals_lhs and func_split_equals_rhs shell variables # after splitting STRING at the '=' sign. test -z "$_G_HAVE_XSI_OPS" \ && (eval 'x=a/b/c; test 5aa/bb/cc = "${#x}${x%%/*}${x%/*}${x#*/}${x##*/}"') 2>/dev/null \ && _G_HAVE_XSI_OPS=yes if test yes = "$_G_HAVE_XSI_OPS" then # This is an XSI compatible shell, allowing a faster implementation... eval 'func_split_equals () { $debug_cmd func_split_equals_lhs=${1%%=*} func_split_equals_rhs=${1#*=} if test "x$func_split_equals_lhs" = "x$1"; then func_split_equals_rhs= fi }' else # ...otherwise fall back to using expr, which is often a shell builtin. func_split_equals () { $debug_cmd func_split_equals_lhs=`expr "x$1" : 'x\([^=]*\)'` func_split_equals_rhs= test "x$func_split_equals_lhs=" = "x$1" \ || func_split_equals_rhs=`expr "x$1" : 'x[^=]*=\(.*\)$'` } fi #func_split_equals # func_split_short_opt SHORTOPT # ----------------------------- # Set func_split_short_opt_name and func_split_short_opt_arg shell # variables after splitting SHORTOPT after the 2nd character. if test yes = "$_G_HAVE_XSI_OPS" then # This is an XSI compatible shell, allowing a faster implementation... eval 'func_split_short_opt () { $debug_cmd func_split_short_opt_arg=${1#??} func_split_short_opt_name=${1%"$func_split_short_opt_arg"} }' else # ...otherwise fall back to using expr, which is often a shell builtin. func_split_short_opt () { $debug_cmd func_split_short_opt_name=`expr "x$1" : 'x\(-.\)'` func_split_short_opt_arg=`expr "x$1" : 'x-.\(.*\)$'` } fi #func_split_short_opt # func_usage # ---------- # Echo short help message to standard output and exit. func_usage () { $debug_cmd func_usage_message $ECHO "Run '$progname --help |${PAGER-more}' for full usage" exit 0 } # func_usage_message # ------------------ # Echo short help message to standard output. func_usage_message () { $debug_cmd eval \$ECHO \""Usage: $usage"\" echo $SED -n 's|^# || /^Written by/{ x;p;x } h /^Written by/q' < "$progpath" echo eval \$ECHO \""$usage_message"\" } # func_version # ------------ # Echo version message to standard output and exit. # The version message is extracted from the calling file's header # comments, with leading '# ' stripped: # 1. First display the progname and version # 2. Followed by the header comment line matching /^# Written by / # 3. Then a blank line followed by the first following line matching # /^# Copyright / # 4. Immediately followed by any lines between the previous matches, # except lines preceding the intervening completely blank line. # For example, see the header comments of this file. func_version () { $debug_cmd printf '%s\n' "$progname $scriptversion" $SED -n ' /^# Written by /!b s|^# ||; p; n :fwd2blnk /./ { n b fwd2blnk } p; n :holdwrnt s|^# || s|^# *$|| /^Copyright /!{ /./H n b holdwrnt } s|\((C)\)[ 0-9,-]*[ ,-]\([1-9][0-9]* \)|\1 \2| G s|\(\n\)\n*|\1|g p; q' < "$progpath" exit $? } # Local variables: # mode: shell-script # sh-indentation: 2 # eval: (add-hook 'before-save-hook 'time-stamp) # time-stamp-pattern: "30/scriptversion=%:y-%02m-%02d.%02H; # UTC" # time-stamp-time-zone: "UTC" # End: # Set a version string. scriptversion='(GNU libtool) 2.4.7' # func_echo ARG... # ---------------- # Libtool also displays the current mode in messages, so override # funclib.sh func_echo with this custom definition. func_echo () { $debug_cmd _G_message=$* func_echo_IFS=$IFS IFS=$nl for _G_line in $_G_message; do IFS=$func_echo_IFS $ECHO "$progname${opt_mode+: $opt_mode}: $_G_line" done IFS=$func_echo_IFS } # func_warning ARG... # ------------------- # Libtool warnings are not categorized, so override funclib.sh # func_warning with this simpler definition. func_warning () { $debug_cmd $warning_func ${1+"$@"} } ## ---------------- ## ## Options parsing. ## ## ---------------- ## # Hook in the functions to make sure our own options are parsed during # the option parsing loop. usage='$progpath [OPTION]... [MODE-ARG]...' # Short help message in response to '-h'. usage_message="Options: --config show all configuration variables --debug enable verbose shell tracing -n, --dry-run display commands without modifying any files --features display basic configuration information and exit --mode=MODE use operation mode MODE --no-warnings equivalent to '-Wnone' --preserve-dup-deps don't remove duplicate dependency libraries --quiet, --silent don't print informational messages --tag=TAG use configuration variables from tag TAG -v, --verbose print more informational messages than default --version print version information -W, --warnings=CATEGORY report the warnings falling in CATEGORY [all] -h, --help, --help-all print short, long, or detailed help message " # Additional text appended to 'usage_message' in response to '--help'. func_help () { $debug_cmd func_usage_message $ECHO "$long_help_message MODE must be one of the following: clean remove files from the build directory compile compile a source file into a libtool object execute automatically set library path, then run a program finish complete the installation of libtool libraries install install libraries or executables link create a library or an executable uninstall remove libraries from an installed directory MODE-ARGS vary depending on the MODE. When passed as first option, '--mode=MODE' may be abbreviated as 'MODE' or a unique abbreviation of that. Try '$progname --help --mode=MODE' for a more detailed description of MODE. When reporting a bug, please describe a test case to reproduce it and include the following information: host-triplet: $host shell: $SHELL compiler: $LTCC compiler flags: $LTCFLAGS linker: $LD (gnu? $with_gnu_ld) version: $progname $scriptversion Debian-2.4.7-7~deb12u1 automake: `($AUTOMAKE --version) 2>/dev/null |$SED 1q` autoconf: `($AUTOCONF --version) 2>/dev/null |$SED 1q` Report bugs to . GNU libtool home page: . General help using GNU software: ." exit 0 } # func_lo2o OBJECT-NAME # --------------------- # Transform OBJECT-NAME from a '.lo' suffix to the platform specific # object suffix. lo2o=s/\\.lo\$/.$objext/ o2lo=s/\\.$objext\$/.lo/ if test yes = "$_G_HAVE_XSI_OPS"; then eval 'func_lo2o () { case $1 in *.lo) func_lo2o_result=${1%.lo}.$objext ;; * ) func_lo2o_result=$1 ;; esac }' # func_xform LIBOBJ-OR-SOURCE # --------------------------- # Transform LIBOBJ-OR-SOURCE from a '.o' or '.c' (or otherwise) # suffix to a '.lo' libtool-object suffix. eval 'func_xform () { func_xform_result=${1%.*}.lo }' else # ...otherwise fall back to using sed. func_lo2o () { func_lo2o_result=`$ECHO "$1" | $SED "$lo2o"` } func_xform () { func_xform_result=`$ECHO "$1" | $SED 's|\.[^.]*$|.lo|'` } fi # func_fatal_configuration ARG... # ------------------------------- # Echo program name prefixed message to standard error, followed by # a configuration failure hint, and exit. func_fatal_configuration () { func_fatal_error ${1+"$@"} \ "See the $PACKAGE documentation for more information." \ "Fatal configuration error." } # func_config # ----------- # Display the configuration for all the tags in this script. func_config () { re_begincf='^# ### BEGIN LIBTOOL' re_endcf='^# ### END LIBTOOL' # Default configuration. $SED "1,/$re_begincf CONFIG/d;/$re_endcf CONFIG/,\$d" < "$progpath" # Now print the configurations for the tags. for tagname in $taglist; do $SED -n "/$re_begincf TAG CONFIG: $tagname\$/,/$re_endcf TAG CONFIG: $tagname\$/p" < "$progpath" done exit $? } # func_features # ------------- # Display the features supported by this script. func_features () { echo "host: $host" if test yes = "$build_libtool_libs"; then echo "enable shared libraries" else echo "disable shared libraries" fi if test yes = "$build_old_libs"; then echo "enable static libraries" else echo "disable static libraries" fi exit $? } # func_enable_tag TAGNAME # ----------------------- # Verify that TAGNAME is valid, and either flag an error and exit, or # enable the TAGNAME tag. We also add TAGNAME to the global $taglist # variable here. func_enable_tag () { # Global variable: tagname=$1 re_begincf="^# ### BEGIN LIBTOOL TAG CONFIG: $tagname\$" re_endcf="^# ### END LIBTOOL TAG CONFIG: $tagname\$" sed_extractcf=/$re_begincf/,/$re_endcf/p # Validate tagname. case $tagname in *[!-_A-Za-z0-9,/]*) func_fatal_error "invalid tag name: $tagname" ;; esac # Don't test for the "default" C tag, as we know it's # there but not specially marked. case $tagname in CC) ;; *) if $GREP "$re_begincf" "$progpath" >/dev/null 2>&1; then taglist="$taglist $tagname" # Evaluate the configuration. Be careful to quote the path # and the sed script, to avoid splitting on whitespace, but # also don't use non-portable quotes within backquotes within # quotes we have to do it in 2 steps: extractedcf=`$SED -n -e "$sed_extractcf" < "$progpath"` eval "$extractedcf" else func_error "ignoring unknown tag $tagname" fi ;; esac } # func_check_version_match # ------------------------ # Ensure that we are using m4 macros, and libtool script from the same # release of libtool. func_check_version_match () { if test "$package_revision" != "$macro_revision"; then if test "$VERSION" != "$macro_version"; then if test -z "$macro_version"; then cat >&2 <<_LT_EOF $progname: Version mismatch error. This is $PACKAGE $VERSION, but the $progname: definition of this LT_INIT comes from an older release. $progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION $progname: and run autoconf again. _LT_EOF else cat >&2 <<_LT_EOF $progname: Version mismatch error. This is $PACKAGE $VERSION, but the $progname: definition of this LT_INIT comes from $PACKAGE $macro_version. $progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION $progname: and run autoconf again. _LT_EOF fi else cat >&2 <<_LT_EOF $progname: Version mismatch error. This is $PACKAGE $VERSION, revision $package_revision, $progname: but the definition of this LT_INIT comes from revision $macro_revision. $progname: You should recreate aclocal.m4 with macros from revision $package_revision $progname: of $PACKAGE $VERSION and run autoconf again. _LT_EOF fi exit $EXIT_MISMATCH fi } # libtool_options_prep [ARG]... # ----------------------------- # Preparation for options parsed by libtool. libtool_options_prep () { $debug_mode # Option defaults: opt_config=false opt_dlopen= opt_dry_run=false opt_help=false opt_mode= opt_preserve_dup_deps=false opt_quiet=false nonopt= preserve_args= _G_rc_lt_options_prep=: _G_rc_lt_options_prep=: # Shorthand for --mode=foo, only valid as the first argument case $1 in clean|clea|cle|cl) shift; set dummy --mode clean ${1+"$@"}; shift ;; compile|compil|compi|comp|com|co|c) shift; set dummy --mode compile ${1+"$@"}; shift ;; execute|execut|execu|exec|exe|ex|e) shift; set dummy --mode execute ${1+"$@"}; shift ;; finish|finis|fini|fin|fi|f) shift; set dummy --mode finish ${1+"$@"}; shift ;; install|instal|insta|inst|ins|in|i) shift; set dummy --mode install ${1+"$@"}; shift ;; link|lin|li|l) shift; set dummy --mode link ${1+"$@"}; shift ;; uninstall|uninstal|uninsta|uninst|unins|unin|uni|un|u) shift; set dummy --mode uninstall ${1+"$@"}; shift ;; *) _G_rc_lt_options_prep=false ;; esac if $_G_rc_lt_options_prep; then # Pass back the list of options. func_quote eval ${1+"$@"} libtool_options_prep_result=$func_quote_result fi } func_add_hook func_options_prep libtool_options_prep # libtool_parse_options [ARG]... # --------------------------------- # Provide handling for libtool specific options. libtool_parse_options () { $debug_cmd _G_rc_lt_parse_options=false # Perform our own loop to consume as many options as possible in # each iteration. while test $# -gt 0; do _G_match_lt_parse_options=: _G_opt=$1 shift case $_G_opt in --dry-run|--dryrun|-n) opt_dry_run=: ;; --config) func_config ;; --dlopen|-dlopen) opt_dlopen="${opt_dlopen+$opt_dlopen }$1" shift ;; --preserve-dup-deps) opt_preserve_dup_deps=: ;; --features) func_features ;; --finish) set dummy --mode finish ${1+"$@"}; shift ;; --help) opt_help=: ;; --help-all) opt_help=': help-all' ;; --mode) test $# = 0 && func_missing_arg $_G_opt && break opt_mode=$1 case $1 in # Valid mode arguments: clean|compile|execute|finish|install|link|relink|uninstall) ;; # Catch anything else as an error *) func_error "invalid argument for $_G_opt" exit_cmd=exit break ;; esac shift ;; --no-silent|--no-quiet) opt_quiet=false func_append preserve_args " $_G_opt" ;; --no-warnings|--no-warning|--no-warn) opt_warning=false func_append preserve_args " $_G_opt" ;; --no-verbose) opt_verbose=false func_append preserve_args " $_G_opt" ;; --silent|--quiet) opt_quiet=: opt_verbose=false func_append preserve_args " $_G_opt" ;; --tag) test $# = 0 && func_missing_arg $_G_opt && break opt_tag=$1 func_append preserve_args " $_G_opt $1" func_enable_tag "$1" shift ;; --verbose|-v) opt_quiet=false opt_verbose=: func_append preserve_args " $_G_opt" ;; # An option not handled by this hook function: *) set dummy "$_G_opt" ${1+"$@"} ; shift _G_match_lt_parse_options=false break ;; esac $_G_match_lt_parse_options && _G_rc_lt_parse_options=: done if $_G_rc_lt_parse_options; then # save modified positional parameters for caller func_quote eval ${1+"$@"} libtool_parse_options_result=$func_quote_result fi } func_add_hook func_parse_options libtool_parse_options # libtool_validate_options [ARG]... # --------------------------------- # Perform any sanity checks on option settings and/or unconsumed # arguments. libtool_validate_options () { # save first non-option argument if test 0 -lt $#; then nonopt=$1 shift fi # preserve --debug test : = "$debug_cmd" || func_append preserve_args " --debug" case $host in # Solaris2 added to fix http://debbugs.gnu.org/cgi/bugreport.cgi?bug=16452 # see also: http://gcc.gnu.org/bugzilla/show_bug.cgi?id=59788 *cygwin* | *mingw* | *pw32* | *cegcc* | *solaris2* | *os2*) # don't eliminate duplications in $postdeps and $predeps opt_duplicate_compiler_generated_deps=: ;; *) opt_duplicate_compiler_generated_deps=$opt_preserve_dup_deps ;; esac $opt_help || { # Sanity checks first: func_check_version_match test yes != "$build_libtool_libs" \ && test yes != "$build_old_libs" \ && func_fatal_configuration "not configured to build any kind of library" # Darwin sucks eval std_shrext=\"$shrext_cmds\" # Only execute mode is allowed to have -dlopen flags. if test -n "$opt_dlopen" && test execute != "$opt_mode"; then func_error "unrecognized option '-dlopen'" $ECHO "$help" 1>&2 exit $EXIT_FAILURE fi # Change the help message to a mode-specific one. generic_help=$help help="Try '$progname --help --mode=$opt_mode' for more information." } # Pass back the unparsed argument list func_quote eval ${1+"$@"} libtool_validate_options_result=$func_quote_result } func_add_hook func_validate_options libtool_validate_options # Process options as early as possible so that --help and --version # can return quickly. func_options ${1+"$@"} eval set dummy "$func_options_result"; shift ## ----------- ## ## Main. ## ## ----------- ## magic='%%%MAGIC variable%%%' magic_exe='%%%MAGIC EXE variable%%%' # Global variables. extracted_archives= extracted_serial=0 # If this variable is set in any of the actions, the command in it # will be execed at the end. This prevents here-documents from being # left over by shells. exec_cmd= # A function that is used when there is no print builtin or printf. func_fallback_echo () { eval 'cat <<_LTECHO_EOF $1 _LTECHO_EOF' } # func_generated_by_libtool # True iff stdin has been generated by Libtool. This function is only # a basic sanity check; it will hardly flush out determined imposters. func_generated_by_libtool_p () { $GREP "^# Generated by .*$PACKAGE" > /dev/null 2>&1 } # func_lalib_p file # True iff FILE is a libtool '.la' library or '.lo' object file. # This function is only a basic sanity check; it will hardly flush out # determined imposters. func_lalib_p () { test -f "$1" && $SED -e 4q "$1" 2>/dev/null | func_generated_by_libtool_p } # func_lalib_unsafe_p file # True iff FILE is a libtool '.la' library or '.lo' object file. # This function implements the same check as func_lalib_p without # resorting to external programs. To this end, it redirects stdin and # closes it afterwards, without saving the original file descriptor. # As a safety measure, use it only where a negative result would be # fatal anyway. Works if 'file' does not exist. func_lalib_unsafe_p () { lalib_p=no if test -f "$1" && test -r "$1" && exec 5<&0 <"$1"; then for lalib_p_l in 1 2 3 4 do read lalib_p_line case $lalib_p_line in \#\ Generated\ by\ *$PACKAGE* ) lalib_p=yes; break;; esac done exec 0<&5 5<&- fi test yes = "$lalib_p" } # func_ltwrapper_script_p file # True iff FILE is a libtool wrapper script # This function is only a basic sanity check; it will hardly flush out # determined imposters. func_ltwrapper_script_p () { test -f "$1" && $lt_truncate_bin < "$1" 2>/dev/null | func_generated_by_libtool_p } # func_ltwrapper_executable_p file # True iff FILE is a libtool wrapper executable # This function is only a basic sanity check; it will hardly flush out # determined imposters. func_ltwrapper_executable_p () { func_ltwrapper_exec_suffix= case $1 in *.exe) ;; *) func_ltwrapper_exec_suffix=.exe ;; esac $GREP "$magic_exe" "$1$func_ltwrapper_exec_suffix" >/dev/null 2>&1 } # func_ltwrapper_scriptname file # Assumes file is an ltwrapper_executable # uses $file to determine the appropriate filename for a # temporary ltwrapper_script. func_ltwrapper_scriptname () { func_dirname_and_basename "$1" "" "." func_stripname '' '.exe' "$func_basename_result" func_ltwrapper_scriptname_result=$func_dirname_result/$objdir/${func_stripname_result}_ltshwrapper } # func_ltwrapper_p file # True iff FILE is a libtool wrapper script or wrapper executable # This function is only a basic sanity check; it will hardly flush out # determined imposters. func_ltwrapper_p () { func_ltwrapper_script_p "$1" || func_ltwrapper_executable_p "$1" } # func_execute_cmds commands fail_cmd # Execute tilde-delimited COMMANDS. # If FAIL_CMD is given, eval that upon failure. # FAIL_CMD may read-access the current command in variable CMD! func_execute_cmds () { $debug_cmd save_ifs=$IFS; IFS='~' for cmd in $1; do IFS=$sp$nl eval cmd=\"$cmd\" IFS=$save_ifs func_show_eval "$cmd" "${2-:}" done IFS=$save_ifs } # func_source file # Source FILE, adding directory component if necessary. # Note that it is not necessary on cygwin/mingw to append a dot to # FILE even if both FILE and FILE.exe exist: automatic-append-.exe # behavior happens only for exec(3), not for open(2)! Also, sourcing # 'FILE.' does not work on cygwin managed mounts. func_source () { $debug_cmd case $1 in */* | *\\*) . "$1" ;; *) . "./$1" ;; esac } # func_resolve_sysroot PATH # Replace a leading = in PATH with a sysroot. Store the result into # func_resolve_sysroot_result func_resolve_sysroot () { func_resolve_sysroot_result=$1 case $func_resolve_sysroot_result in =*) func_stripname '=' '' "$func_resolve_sysroot_result" func_resolve_sysroot_result=$lt_sysroot$func_stripname_result ;; esac } # func_replace_sysroot PATH # If PATH begins with the sysroot, replace it with = and # store the result into func_replace_sysroot_result. func_replace_sysroot () { case $lt_sysroot:$1 in ?*:"$lt_sysroot"*) func_stripname "$lt_sysroot" '' "$1" func_replace_sysroot_result='='$func_stripname_result ;; *) # Including no sysroot. func_replace_sysroot_result=$1 ;; esac } # func_infer_tag arg # Infer tagged configuration to use if any are available and # if one wasn't chosen via the "--tag" command line option. # Only attempt this if the compiler in the base compile # command doesn't match the default compiler. # arg is usually of the form 'gcc ...' func_infer_tag () { $debug_cmd if test -n "$available_tags" && test -z "$tagname"; then CC_quoted= for arg in $CC; do func_append_quoted CC_quoted "$arg" done CC_expanded=`func_echo_all $CC` CC_quoted_expanded=`func_echo_all $CC_quoted` case $@ in # Blanks in the command may have been stripped by the calling shell, # but not from the CC environment variable when configure was run. " $CC "* | "$CC "* | " $CC_expanded "* | "$CC_expanded "* | \ " $CC_quoted"* | "$CC_quoted "* | " $CC_quoted_expanded "* | "$CC_quoted_expanded "*) ;; # Blanks at the start of $base_compile will cause this to fail # if we don't check for them as well. *) for z in $available_tags; do if $GREP "^# ### BEGIN LIBTOOL TAG CONFIG: $z$" < "$progpath" > /dev/null; then # Evaluate the configuration. eval "`$SED -n -e '/^# ### BEGIN LIBTOOL TAG CONFIG: '$z'$/,/^# ### END LIBTOOL TAG CONFIG: '$z'$/p' < $progpath`" CC_quoted= for arg in $CC; do # Double-quote args containing other shell metacharacters. func_append_quoted CC_quoted "$arg" done CC_expanded=`func_echo_all $CC` CC_quoted_expanded=`func_echo_all $CC_quoted` case "$@ " in " $CC "* | "$CC "* | " $CC_expanded "* | "$CC_expanded "* | \ " $CC_quoted"* | "$CC_quoted "* | " $CC_quoted_expanded "* | "$CC_quoted_expanded "*) # The compiler in the base compile command matches # the one in the tagged configuration. # Assume this is the tagged configuration we want. tagname=$z break ;; esac fi done # If $tagname still isn't set, then no tagged configuration # was found and let the user know that the "--tag" command # line option must be used. if test -z "$tagname"; then func_echo "unable to infer tagged configuration" func_fatal_error "specify a tag with '--tag'" # else # func_verbose "using $tagname tagged configuration" fi ;; esac fi } # func_write_libtool_object output_name pic_name nonpic_name # Create a libtool object file (analogous to a ".la" file), # but don't create it if we're doing a dry run. func_write_libtool_object () { write_libobj=$1 if test yes = "$build_libtool_libs"; then write_lobj=\'$2\' else write_lobj=none fi if test yes = "$build_old_libs"; then write_oldobj=\'$3\' else write_oldobj=none fi $opt_dry_run || { cat >${write_libobj}T </dev/null` if test "$?" -eq 0 && test -n "$func_convert_core_file_wine_to_w32_tmp"; then func_convert_core_file_wine_to_w32_result=`$ECHO "$func_convert_core_file_wine_to_w32_tmp" | $SED -e "$sed_naive_backslashify"` else func_convert_core_file_wine_to_w32_result= fi fi } # end: func_convert_core_file_wine_to_w32 # func_convert_core_path_wine_to_w32 ARG # Helper function used by path conversion functions when $build is *nix, and # $host is mingw, cygwin, or some other w32 environment. Relies on a correctly # configured wine environment available, with the winepath program in $build's # $PATH. Assumes ARG has no leading or trailing path separator characters. # # ARG is path to be converted from $build format to win32. # Result is available in $func_convert_core_path_wine_to_w32_result. # Unconvertible file (directory) names in ARG are skipped; if no directory names # are convertible, then the result may be empty. func_convert_core_path_wine_to_w32 () { $debug_cmd # unfortunately, winepath doesn't convert paths, only file names func_convert_core_path_wine_to_w32_result= if test -n "$1"; then oldIFS=$IFS IFS=: for func_convert_core_path_wine_to_w32_f in $1; do IFS=$oldIFS func_convert_core_file_wine_to_w32 "$func_convert_core_path_wine_to_w32_f" if test -n "$func_convert_core_file_wine_to_w32_result"; then if test -z "$func_convert_core_path_wine_to_w32_result"; then func_convert_core_path_wine_to_w32_result=$func_convert_core_file_wine_to_w32_result else func_append func_convert_core_path_wine_to_w32_result ";$func_convert_core_file_wine_to_w32_result" fi fi done IFS=$oldIFS fi } # end: func_convert_core_path_wine_to_w32 # func_cygpath ARGS... # Wrapper around calling the cygpath program via LT_CYGPATH. This is used when # when (1) $build is *nix and Cygwin is hosted via a wine environment; or (2) # $build is MSYS and $host is Cygwin, or (3) $build is Cygwin. In case (1) or # (2), returns the Cygwin file name or path in func_cygpath_result (input # file name or path is assumed to be in w32 format, as previously converted # from $build's *nix or MSYS format). In case (3), returns the w32 file name # or path in func_cygpath_result (input file name or path is assumed to be in # Cygwin format). Returns an empty string on error. # # ARGS are passed to cygpath, with the last one being the file name or path to # be converted. # # Specify the absolute *nix (or w32) name to cygpath in the LT_CYGPATH # environment variable; do not put it in $PATH. func_cygpath () { $debug_cmd if test -n "$LT_CYGPATH" && test -f "$LT_CYGPATH"; then func_cygpath_result=`$LT_CYGPATH "$@" 2>/dev/null` if test "$?" -ne 0; then # on failure, ensure result is empty func_cygpath_result= fi else func_cygpath_result= func_error "LT_CYGPATH is empty or specifies non-existent file: '$LT_CYGPATH'" fi } #end: func_cygpath # func_convert_core_msys_to_w32 ARG # Convert file name or path ARG from MSYS format to w32 format. Return # result in func_convert_core_msys_to_w32_result. func_convert_core_msys_to_w32 () { $debug_cmd # awkward: cmd appends spaces to result func_convert_core_msys_to_w32_result=`( cmd //c echo "$1" ) 2>/dev/null | $SED -e 's/[ ]*$//' -e "$sed_naive_backslashify"` } #end: func_convert_core_msys_to_w32 # func_convert_file_check ARG1 ARG2 # Verify that ARG1 (a file name in $build format) was converted to $host # format in ARG2. Otherwise, emit an error message, but continue (resetting # func_to_host_file_result to ARG1). func_convert_file_check () { $debug_cmd if test -z "$2" && test -n "$1"; then func_error "Could not determine host file name corresponding to" func_error " '$1'" func_error "Continuing, but uninstalled executables may not work." # Fallback: func_to_host_file_result=$1 fi } # end func_convert_file_check # func_convert_path_check FROM_PATHSEP TO_PATHSEP FROM_PATH TO_PATH # Verify that FROM_PATH (a path in $build format) was converted to $host # format in TO_PATH. Otherwise, emit an error message, but continue, resetting # func_to_host_file_result to a simplistic fallback value (see below). func_convert_path_check () { $debug_cmd if test -z "$4" && test -n "$3"; then func_error "Could not determine the host path corresponding to" func_error " '$3'" func_error "Continuing, but uninstalled executables may not work." # Fallback. This is a deliberately simplistic "conversion" and # should not be "improved". See libtool.info. if test "x$1" != "x$2"; then lt_replace_pathsep_chars="s|$1|$2|g" func_to_host_path_result=`echo "$3" | $SED -e "$lt_replace_pathsep_chars"` else func_to_host_path_result=$3 fi fi } # end func_convert_path_check # func_convert_path_front_back_pathsep FRONTPAT BACKPAT REPL ORIG # Modifies func_to_host_path_result by prepending REPL if ORIG matches FRONTPAT # and appending REPL if ORIG matches BACKPAT. func_convert_path_front_back_pathsep () { $debug_cmd case $4 in $1 ) func_to_host_path_result=$3$func_to_host_path_result ;; esac case $4 in $2 ) func_append func_to_host_path_result "$3" ;; esac } # end func_convert_path_front_back_pathsep ################################################## # $build to $host FILE NAME CONVERSION FUNCTIONS # ################################################## # invoked via '$to_host_file_cmd ARG' # # In each case, ARG is the path to be converted from $build to $host format. # Result will be available in $func_to_host_file_result. # func_to_host_file ARG # Converts the file name ARG from $build format to $host format. Return result # in func_to_host_file_result. func_to_host_file () { $debug_cmd $to_host_file_cmd "$1" } # end func_to_host_file # func_to_tool_file ARG LAZY # converts the file name ARG from $build format to toolchain format. Return # result in func_to_tool_file_result. If the conversion in use is listed # in (the comma separated) LAZY, no conversion takes place. func_to_tool_file () { $debug_cmd case ,$2, in *,"$to_tool_file_cmd",*) func_to_tool_file_result=$1 ;; *) $to_tool_file_cmd "$1" func_to_tool_file_result=$func_to_host_file_result ;; esac } # end func_to_tool_file # func_convert_file_noop ARG # Copy ARG to func_to_host_file_result. func_convert_file_noop () { func_to_host_file_result=$1 } # end func_convert_file_noop # func_convert_file_msys_to_w32 ARG # Convert file name ARG from (mingw) MSYS to (mingw) w32 format; automatic # conversion to w32 is not available inside the cwrapper. Returns result in # func_to_host_file_result. func_convert_file_msys_to_w32 () { $debug_cmd func_to_host_file_result=$1 if test -n "$1"; then func_convert_core_msys_to_w32 "$1" func_to_host_file_result=$func_convert_core_msys_to_w32_result fi func_convert_file_check "$1" "$func_to_host_file_result" } # end func_convert_file_msys_to_w32 # func_convert_file_cygwin_to_w32 ARG # Convert file name ARG from Cygwin to w32 format. Returns result in # func_to_host_file_result. func_convert_file_cygwin_to_w32 () { $debug_cmd func_to_host_file_result=$1 if test -n "$1"; then # because $build is cygwin, we call "the" cygpath in $PATH; no need to use # LT_CYGPATH in this case. func_to_host_file_result=`cygpath -m "$1"` fi func_convert_file_check "$1" "$func_to_host_file_result" } # end func_convert_file_cygwin_to_w32 # func_convert_file_nix_to_w32 ARG # Convert file name ARG from *nix to w32 format. Requires a wine environment # and a working winepath. Returns result in func_to_host_file_result. func_convert_file_nix_to_w32 () { $debug_cmd func_to_host_file_result=$1 if test -n "$1"; then func_convert_core_file_wine_to_w32 "$1" func_to_host_file_result=$func_convert_core_file_wine_to_w32_result fi func_convert_file_check "$1" "$func_to_host_file_result" } # end func_convert_file_nix_to_w32 # func_convert_file_msys_to_cygwin ARG # Convert file name ARG from MSYS to Cygwin format. Requires LT_CYGPATH set. # Returns result in func_to_host_file_result. func_convert_file_msys_to_cygwin () { $debug_cmd func_to_host_file_result=$1 if test -n "$1"; then func_convert_core_msys_to_w32 "$1" func_cygpath -u "$func_convert_core_msys_to_w32_result" func_to_host_file_result=$func_cygpath_result fi func_convert_file_check "$1" "$func_to_host_file_result" } # end func_convert_file_msys_to_cygwin # func_convert_file_nix_to_cygwin ARG # Convert file name ARG from *nix to Cygwin format. Requires Cygwin installed # in a wine environment, working winepath, and LT_CYGPATH set. Returns result # in func_to_host_file_result. func_convert_file_nix_to_cygwin () { $debug_cmd func_to_host_file_result=$1 if test -n "$1"; then # convert from *nix to w32, then use cygpath to convert from w32 to cygwin. func_convert_core_file_wine_to_w32 "$1" func_cygpath -u "$func_convert_core_file_wine_to_w32_result" func_to_host_file_result=$func_cygpath_result fi func_convert_file_check "$1" "$func_to_host_file_result" } # end func_convert_file_nix_to_cygwin ############################################# # $build to $host PATH CONVERSION FUNCTIONS # ############################################# # invoked via '$to_host_path_cmd ARG' # # In each case, ARG is the path to be converted from $build to $host format. # The result will be available in $func_to_host_path_result. # # Path separators are also converted from $build format to $host format. If # ARG begins or ends with a path separator character, it is preserved (but # converted to $host format) on output. # # All path conversion functions are named using the following convention: # file name conversion function : func_convert_file_X_to_Y () # path conversion function : func_convert_path_X_to_Y () # where, for any given $build/$host combination the 'X_to_Y' value is the # same. If conversion functions are added for new $build/$host combinations, # the two new functions must follow this pattern, or func_init_to_host_path_cmd # will break. # func_init_to_host_path_cmd # Ensures that function "pointer" variable $to_host_path_cmd is set to the # appropriate value, based on the value of $to_host_file_cmd. to_host_path_cmd= func_init_to_host_path_cmd () { $debug_cmd if test -z "$to_host_path_cmd"; then func_stripname 'func_convert_file_' '' "$to_host_file_cmd" to_host_path_cmd=func_convert_path_$func_stripname_result fi } # func_to_host_path ARG # Converts the path ARG from $build format to $host format. Return result # in func_to_host_path_result. func_to_host_path () { $debug_cmd func_init_to_host_path_cmd $to_host_path_cmd "$1" } # end func_to_host_path # func_convert_path_noop ARG # Copy ARG to func_to_host_path_result. func_convert_path_noop () { func_to_host_path_result=$1 } # end func_convert_path_noop # func_convert_path_msys_to_w32 ARG # Convert path ARG from (mingw) MSYS to (mingw) w32 format; automatic # conversion to w32 is not available inside the cwrapper. Returns result in # func_to_host_path_result. func_convert_path_msys_to_w32 () { $debug_cmd func_to_host_path_result=$1 if test -n "$1"; then # Remove leading and trailing path separator characters from ARG. MSYS # behavior is inconsistent here; cygpath turns them into '.;' and ';.'; # and winepath ignores them completely. func_stripname : : "$1" func_to_host_path_tmp1=$func_stripname_result func_convert_core_msys_to_w32 "$func_to_host_path_tmp1" func_to_host_path_result=$func_convert_core_msys_to_w32_result func_convert_path_check : ";" \ "$func_to_host_path_tmp1" "$func_to_host_path_result" func_convert_path_front_back_pathsep ":*" "*:" ";" "$1" fi } # end func_convert_path_msys_to_w32 # func_convert_path_cygwin_to_w32 ARG # Convert path ARG from Cygwin to w32 format. Returns result in # func_to_host_file_result. func_convert_path_cygwin_to_w32 () { $debug_cmd func_to_host_path_result=$1 if test -n "$1"; then # See func_convert_path_msys_to_w32: func_stripname : : "$1" func_to_host_path_tmp1=$func_stripname_result func_to_host_path_result=`cygpath -m -p "$func_to_host_path_tmp1"` func_convert_path_check : ";" \ "$func_to_host_path_tmp1" "$func_to_host_path_result" func_convert_path_front_back_pathsep ":*" "*:" ";" "$1" fi } # end func_convert_path_cygwin_to_w32 # func_convert_path_nix_to_w32 ARG # Convert path ARG from *nix to w32 format. Requires a wine environment and # a working winepath. Returns result in func_to_host_file_result. func_convert_path_nix_to_w32 () { $debug_cmd func_to_host_path_result=$1 if test -n "$1"; then # See func_convert_path_msys_to_w32: func_stripname : : "$1" func_to_host_path_tmp1=$func_stripname_result func_convert_core_path_wine_to_w32 "$func_to_host_path_tmp1" func_to_host_path_result=$func_convert_core_path_wine_to_w32_result func_convert_path_check : ";" \ "$func_to_host_path_tmp1" "$func_to_host_path_result" func_convert_path_front_back_pathsep ":*" "*:" ";" "$1" fi } # end func_convert_path_nix_to_w32 # func_convert_path_msys_to_cygwin ARG # Convert path ARG from MSYS to Cygwin format. Requires LT_CYGPATH set. # Returns result in func_to_host_file_result. func_convert_path_msys_to_cygwin () { $debug_cmd func_to_host_path_result=$1 if test -n "$1"; then # See func_convert_path_msys_to_w32: func_stripname : : "$1" func_to_host_path_tmp1=$func_stripname_result func_convert_core_msys_to_w32 "$func_to_host_path_tmp1" func_cygpath -u -p "$func_convert_core_msys_to_w32_result" func_to_host_path_result=$func_cygpath_result func_convert_path_check : : \ "$func_to_host_path_tmp1" "$func_to_host_path_result" func_convert_path_front_back_pathsep ":*" "*:" : "$1" fi } # end func_convert_path_msys_to_cygwin # func_convert_path_nix_to_cygwin ARG # Convert path ARG from *nix to Cygwin format. Requires Cygwin installed in a # a wine environment, working winepath, and LT_CYGPATH set. Returns result in # func_to_host_file_result. func_convert_path_nix_to_cygwin () { $debug_cmd func_to_host_path_result=$1 if test -n "$1"; then # Remove leading and trailing path separator characters from # ARG. msys behavior is inconsistent here, cygpath turns them # into '.;' and ';.', and winepath ignores them completely. func_stripname : : "$1" func_to_host_path_tmp1=$func_stripname_result func_convert_core_path_wine_to_w32 "$func_to_host_path_tmp1" func_cygpath -u -p "$func_convert_core_path_wine_to_w32_result" func_to_host_path_result=$func_cygpath_result func_convert_path_check : : \ "$func_to_host_path_tmp1" "$func_to_host_path_result" func_convert_path_front_back_pathsep ":*" "*:" : "$1" fi } # end func_convert_path_nix_to_cygwin # func_dll_def_p FILE # True iff FILE is a Windows DLL '.def' file. # Keep in sync with _LT_DLL_DEF_P in libtool.m4 func_dll_def_p () { $debug_cmd func_dll_def_p_tmp=`$SED -n \ -e 's/^[ ]*//' \ -e '/^\(;.*\)*$/d' \ -e 's/^\(EXPORTS\|LIBRARY\)\([ ].*\)*$/DEF/p' \ -e q \ "$1"` test DEF = "$func_dll_def_p_tmp" } # func_mode_compile arg... func_mode_compile () { $debug_cmd # Get the compilation command and the source file. base_compile= srcfile=$nonopt # always keep a non-empty value in "srcfile" suppress_opt=yes suppress_output= arg_mode=normal libobj= later= pie_flag= for arg do case $arg_mode in arg ) # do not "continue". Instead, add this to base_compile lastarg=$arg arg_mode=normal ;; target ) libobj=$arg arg_mode=normal continue ;; normal ) # Accept any command-line options. case $arg in -o) test -n "$libobj" && \ func_fatal_error "you cannot specify '-o' more than once" arg_mode=target continue ;; -pie | -fpie | -fPIE) func_append pie_flag " $arg" continue ;; -shared | -static | -prefer-pic | -prefer-non-pic) func_append later " $arg" continue ;; -no-suppress) suppress_opt=no continue ;; -Xcompiler) arg_mode=arg # the next one goes into the "base_compile" arg list continue # The current "srcfile" will either be retained or ;; # replaced later. I would guess that would be a bug. -Wc,*) func_stripname '-Wc,' '' "$arg" args=$func_stripname_result lastarg= save_ifs=$IFS; IFS=, for arg in $args; do IFS=$save_ifs func_append_quoted lastarg "$arg" done IFS=$save_ifs func_stripname ' ' '' "$lastarg" lastarg=$func_stripname_result # Add the arguments to base_compile. func_append base_compile " $lastarg" continue ;; *) # Accept the current argument as the source file. # The previous "srcfile" becomes the current argument. # lastarg=$srcfile srcfile=$arg ;; esac # case $arg ;; esac # case $arg_mode # Aesthetically quote the previous argument. func_append_quoted base_compile "$lastarg" done # for arg case $arg_mode in arg) func_fatal_error "you must specify an argument for -Xcompile" ;; target) func_fatal_error "you must specify a target with '-o'" ;; *) # Get the name of the library object. test -z "$libobj" && { func_basename "$srcfile" libobj=$func_basename_result } ;; esac # Recognize several different file suffixes. # If the user specifies -o file.o, it is replaced with file.lo case $libobj in *.[cCFSifmso] | \ *.ada | *.adb | *.ads | *.asm | \ *.c++ | *.cc | *.ii | *.class | *.cpp | *.cxx | \ *.[fF][09]? | *.for | *.java | *.go | *.obj | *.sx | *.cu | *.cup) func_xform "$libobj" libobj=$func_xform_result ;; esac case $libobj in *.lo) func_lo2o "$libobj"; obj=$func_lo2o_result ;; *) func_fatal_error "cannot determine name of library object from '$libobj'" ;; esac func_infer_tag $base_compile for arg in $later; do case $arg in -shared) test yes = "$build_libtool_libs" \ || func_fatal_configuration "cannot build a shared library" build_old_libs=no continue ;; -static) build_libtool_libs=no build_old_libs=yes continue ;; -prefer-pic) pic_mode=yes continue ;; -prefer-non-pic) pic_mode=no continue ;; esac done func_quote_arg pretty "$libobj" test "X$libobj" != "X$func_quote_arg_result" \ && $ECHO "X$libobj" | $GREP '[]~#^*{};<>?"'"'"' &()|`$[]' \ && func_warning "libobj name '$libobj' may not contain shell special characters." func_dirname_and_basename "$obj" "/" "" objname=$func_basename_result xdir=$func_dirname_result lobj=$xdir$objdir/$objname test -z "$base_compile" && \ func_fatal_help "you must specify a compilation command" # Delete any leftover library objects. if test yes = "$build_old_libs"; then removelist="$obj $lobj $libobj ${libobj}T" else removelist="$lobj $libobj ${libobj}T" fi # On Cygwin there's no "real" PIC flag so we must build both object types case $host_os in cygwin* | mingw* | pw32* | os2* | cegcc*) pic_mode=default ;; esac if test no = "$pic_mode" && test pass_all != "$deplibs_check_method"; then # non-PIC code in shared libraries is not supported pic_mode=default fi # Calculate the filename of the output object if compiler does # not support -o with -c if test no = "$compiler_c_o"; then output_obj=`$ECHO "$srcfile" | $SED 's%^.*/%%; s%\.[^.]*$%%'`.$objext lockfile=$output_obj.lock else output_obj= need_locks=no lockfile= fi # Lock this critical section if it is needed # We use this script file to make the link, it avoids creating a new file if test yes = "$need_locks"; then until $opt_dry_run || ln "$progpath" "$lockfile" 2>/dev/null; do func_echo "Waiting for $lockfile to be removed" sleep 2 done elif test warn = "$need_locks"; then if test -f "$lockfile"; then $ECHO "\ *** ERROR, $lockfile exists and contains: `cat $lockfile 2>/dev/null` This indicates that another process is trying to use the same temporary object file, and libtool could not work around it because your compiler does not support '-c' and '-o' together. If you repeat this compilation, it may succeed, by chance, but you had better avoid parallel builds (make -j) in this platform, or get a better compiler." $opt_dry_run || $RM $removelist exit $EXIT_FAILURE fi func_append removelist " $output_obj" $ECHO "$srcfile" > "$lockfile" fi $opt_dry_run || $RM $removelist func_append removelist " $lockfile" trap '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE' 1 2 15 func_to_tool_file "$srcfile" func_convert_file_msys_to_w32 srcfile=$func_to_tool_file_result func_quote_arg pretty "$srcfile" qsrcfile=$func_quote_arg_result # Only build a PIC object if we are building libtool libraries. if test yes = "$build_libtool_libs"; then # Without this assignment, base_compile gets emptied. fbsd_hideous_sh_bug=$base_compile if test no != "$pic_mode"; then command="$base_compile $qsrcfile $pic_flag" else # Don't build PIC code command="$base_compile $qsrcfile" fi func_mkdir_p "$xdir$objdir" if test -z "$output_obj"; then # Place PIC objects in $objdir func_append command " -o $lobj" fi func_show_eval_locale "$command" \ 'test -n "$output_obj" && $RM $removelist; exit $EXIT_FAILURE' if test warn = "$need_locks" && test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then $ECHO "\ *** ERROR, $lockfile contains: `cat $lockfile 2>/dev/null` but it should contain: $srcfile This indicates that another process is trying to use the same temporary object file, and libtool could not work around it because your compiler does not support '-c' and '-o' together. If you repeat this compilation, it may succeed, by chance, but you had better avoid parallel builds (make -j) in this platform, or get a better compiler." $opt_dry_run || $RM $removelist exit $EXIT_FAILURE fi # Just move the object if needed, then go on to compile the next one if test -n "$output_obj" && test "X$output_obj" != "X$lobj"; then func_show_eval '$MV "$output_obj" "$lobj"' \ 'error=$?; $opt_dry_run || $RM $removelist; exit $error' fi # Allow error messages only from the first compilation. if test yes = "$suppress_opt"; then suppress_output=' >/dev/null 2>&1' fi fi # Only build a position-dependent object if we build old libraries. if test yes = "$build_old_libs"; then if test yes != "$pic_mode"; then # Don't build PIC code command="$base_compile $qsrcfile$pie_flag" else command="$base_compile $qsrcfile $pic_flag" fi if test yes = "$compiler_c_o"; then func_append command " -o $obj" fi # Suppress compiler output if we already did a PIC compilation. func_append command "$suppress_output" func_show_eval_locale "$command" \ '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE' if test warn = "$need_locks" && test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then $ECHO "\ *** ERROR, $lockfile contains: `cat $lockfile 2>/dev/null` but it should contain: $srcfile This indicates that another process is trying to use the same temporary object file, and libtool could not work around it because your compiler does not support '-c' and '-o' together. If you repeat this compilation, it may succeed, by chance, but you had better avoid parallel builds (make -j) in this platform, or get a better compiler." $opt_dry_run || $RM $removelist exit $EXIT_FAILURE fi # Just move the object if needed if test -n "$output_obj" && test "X$output_obj" != "X$obj"; then func_show_eval '$MV "$output_obj" "$obj"' \ 'error=$?; $opt_dry_run || $RM $removelist; exit $error' fi fi $opt_dry_run || { func_write_libtool_object "$libobj" "$objdir/$objname" "$objname" # Unlock the critical section if it was locked if test no != "$need_locks"; then removelist=$lockfile $RM "$lockfile" fi } exit $EXIT_SUCCESS } $opt_help || { test compile = "$opt_mode" && func_mode_compile ${1+"$@"} } func_mode_help () { # We need to display help for each of the modes. case $opt_mode in "") # Generic help is extracted from the usage comments # at the start of this file. func_help ;; clean) $ECHO \ "Usage: $progname [OPTION]... --mode=clean RM [RM-OPTION]... FILE... Remove files from the build directory. RM is the name of the program to use to delete files associated with each FILE (typically '/bin/rm'). RM-OPTIONS are options (such as '-f') to be passed to RM. If FILE is a libtool library, object or program, all the files associated with it are deleted. Otherwise, only FILE itself is deleted using RM." ;; compile) $ECHO \ "Usage: $progname [OPTION]... --mode=compile COMPILE-COMMAND... SOURCEFILE Compile a source file into a libtool library object. This mode accepts the following additional options: -o OUTPUT-FILE set the output file name to OUTPUT-FILE -no-suppress do not suppress compiler output for multiple passes -prefer-pic try to build PIC objects only -prefer-non-pic try to build non-PIC objects only -shared do not build a '.o' file suitable for static linking -static only build a '.o' file suitable for static linking -Wc,FLAG -Xcompiler FLAG pass FLAG directly to the compiler COMPILE-COMMAND is a command to be used in creating a 'standard' object file from the given SOURCEFILE. The output file name is determined by removing the directory component from SOURCEFILE, then substituting the C source code suffix '.c' with the library object suffix, '.lo'." ;; execute) $ECHO \ "Usage: $progname [OPTION]... --mode=execute COMMAND [ARGS]... Automatically set library path, then run a program. This mode accepts the following additional options: -dlopen FILE add the directory containing FILE to the library path This mode sets the library path environment variable according to '-dlopen' flags. If any of the ARGS are libtool executable wrappers, then they are translated into their corresponding uninstalled binary, and any of their required library directories are added to the library path. Then, COMMAND is executed, with ARGS as arguments." ;; finish) $ECHO \ "Usage: $progname [OPTION]... --mode=finish [LIBDIR]... Complete the installation of libtool libraries. Each LIBDIR is a directory that contains libtool libraries. The commands that this mode executes may require superuser privileges. Use the '--dry-run' option if you just want to see what would be executed." ;; install) $ECHO \ "Usage: $progname [OPTION]... --mode=install INSTALL-COMMAND... Install executables or libraries. INSTALL-COMMAND is the installation command. The first component should be either the 'install' or 'cp' program. The following components of INSTALL-COMMAND are treated specially: -inst-prefix-dir PREFIX-DIR Use PREFIX-DIR as a staging area for installation The rest of the components are interpreted as arguments to that command (only BSD-compatible install options are recognized)." ;; link) $ECHO \ "Usage: $progname [OPTION]... --mode=link LINK-COMMAND... Link object files or libraries together to form another library, or to create an executable program. LINK-COMMAND is a command using the C compiler that you would use to create a program from several object files. The following components of LINK-COMMAND are treated specially: -all-static do not do any dynamic linking at all -avoid-version do not add a version suffix if possible -bindir BINDIR specify path to binaries directory (for systems where libraries must be found in the PATH setting at runtime) -dlopen FILE '-dlpreopen' FILE if it cannot be dlopened at runtime -dlpreopen FILE link in FILE and add its symbols to lt_preloaded_symbols -export-dynamic allow symbols from OUTPUT-FILE to be resolved with dlsym(3) -export-symbols SYMFILE try to export only the symbols listed in SYMFILE -export-symbols-regex REGEX try to export only the symbols matching REGEX -LLIBDIR search LIBDIR for required installed libraries -lNAME OUTPUT-FILE requires the installed library libNAME -module build a library that can dlopened -no-fast-install disable the fast-install mode -no-install link a not-installable executable -no-undefined declare that a library does not refer to external symbols -o OUTPUT-FILE create OUTPUT-FILE from the specified objects -objectlist FILE use a list of object files found in FILE to specify objects -os2dllname NAME force a short DLL name on OS/2 (no effect on other OSes) -precious-files-regex REGEX don't remove output files matching REGEX -release RELEASE specify package release information -rpath LIBDIR the created library will eventually be installed in LIBDIR -R[ ]LIBDIR add LIBDIR to the runtime path of programs and libraries -shared only do dynamic linking of libtool libraries -shrext SUFFIX override the standard shared library file extension -static do not do any dynamic linking of uninstalled libtool libraries -static-libtool-libs do not do any dynamic linking of libtool libraries -version-info CURRENT[:REVISION[:AGE]] specify library version info [each variable defaults to 0] -weak LIBNAME declare that the target provides the LIBNAME interface -Wc,FLAG -Xcompiler FLAG pass linker-specific FLAG directly to the compiler -Wa,FLAG -Xassembler FLAG pass linker-specific FLAG directly to the assembler -Wl,FLAG -Xlinker FLAG pass linker-specific FLAG directly to the linker -XCClinker FLAG pass link-specific FLAG to the compiler driver (CC) All other options (arguments beginning with '-') are ignored. Every other argument is treated as a filename. Files ending in '.la' are treated as uninstalled libtool libraries, other files are standard or library object files. If the OUTPUT-FILE ends in '.la', then a libtool library is created, only library objects ('.lo' files) may be specified, and '-rpath' is required, except when creating a convenience library. If OUTPUT-FILE ends in '.a' or '.lib', then a standard library is created using 'ar' and 'ranlib', or on Windows using 'lib'. If OUTPUT-FILE ends in '.lo' or '.$objext', then a reloadable object file is created, otherwise an executable program is created." ;; uninstall) $ECHO \ "Usage: $progname [OPTION]... --mode=uninstall RM [RM-OPTION]... FILE... Remove libraries from an installation directory. RM is the name of the program to use to delete files associated with each FILE (typically '/bin/rm'). RM-OPTIONS are options (such as '-f') to be passed to RM. If FILE is a libtool library, all the files associated with it are deleted. Otherwise, only FILE itself is deleted using RM." ;; *) func_fatal_help "invalid operation mode '$opt_mode'" ;; esac echo $ECHO "Try '$progname --help' for more information about other modes." } # Now that we've collected a possible --mode arg, show help if necessary if $opt_help; then if test : = "$opt_help"; then func_mode_help else { func_help noexit for opt_mode in compile link execute install finish uninstall clean; do func_mode_help done } | $SED -n '1p; 2,$s/^Usage:/ or: /p' { func_help noexit for opt_mode in compile link execute install finish uninstall clean; do echo func_mode_help done } | $SED '1d /^When reporting/,/^Report/{ H d } $x /information about other modes/d /more detailed .*MODE/d s/^Usage:.*--mode=\([^ ]*\) .*/Description of \1 mode:/' fi exit $? fi # func_mode_execute arg... func_mode_execute () { $debug_cmd # The first argument is the command name. cmd=$nonopt test -z "$cmd" && \ func_fatal_help "you must specify a COMMAND" # Handle -dlopen flags immediately. for file in $opt_dlopen; do test -f "$file" \ || func_fatal_help "'$file' is not a file" dir= case $file in *.la) func_resolve_sysroot "$file" file=$func_resolve_sysroot_result # Check to see that this really is a libtool archive. func_lalib_unsafe_p "$file" \ || func_fatal_help "'$lib' is not a valid libtool archive" # Read the libtool library. dlname= library_names= func_source "$file" # Skip this library if it cannot be dlopened. if test -z "$dlname"; then # Warn if it was a shared library. test -n "$library_names" && \ func_warning "'$file' was not linked with '-export-dynamic'" continue fi func_dirname "$file" "" "." dir=$func_dirname_result if test -f "$dir/$objdir/$dlname"; then func_append dir "/$objdir" else if test ! -f "$dir/$dlname"; then func_fatal_error "cannot find '$dlname' in '$dir' or '$dir/$objdir'" fi fi ;; *.lo) # Just add the directory containing the .lo file. func_dirname "$file" "" "." dir=$func_dirname_result ;; *) func_warning "'-dlopen' is ignored for non-libtool libraries and objects" continue ;; esac # Get the absolute pathname. absdir=`cd "$dir" && pwd` test -n "$absdir" && dir=$absdir # Now add the directory to shlibpath_var. if eval "test -z \"\$$shlibpath_var\""; then eval "$shlibpath_var=\"\$dir\"" else eval "$shlibpath_var=\"\$dir:\$$shlibpath_var\"" fi done # This variable tells wrapper scripts just to set shlibpath_var # rather than running their programs. libtool_execute_magic=$magic # Check if any of the arguments is a wrapper script. args= for file do case $file in -* | *.la | *.lo ) ;; *) # Do a test to see if this is really a libtool program. if func_ltwrapper_script_p "$file"; then func_source "$file" # Transform arg to wrapped name. file=$progdir/$program elif func_ltwrapper_executable_p "$file"; then func_ltwrapper_scriptname "$file" func_source "$func_ltwrapper_scriptname_result" # Transform arg to wrapped name. file=$progdir/$program fi ;; esac # Quote arguments (to preserve shell metacharacters). func_append_quoted args "$file" done if $opt_dry_run; then # Display what would be done. if test -n "$shlibpath_var"; then eval "\$ECHO \"\$shlibpath_var=\$$shlibpath_var\"" echo "export $shlibpath_var" fi $ECHO "$cmd$args" exit $EXIT_SUCCESS else if test -n "$shlibpath_var"; then # Export the shlibpath_var. eval "export $shlibpath_var" fi # Restore saved environment variables for lt_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES do eval "if test \"\${save_$lt_var+set}\" = set; then $lt_var=\$save_$lt_var; export $lt_var else $lt_unset $lt_var fi" done # Now prepare to actually exec the command. exec_cmd=\$cmd$args fi } test execute = "$opt_mode" && func_mode_execute ${1+"$@"} # func_mode_finish arg... func_mode_finish () { $debug_cmd libs= libdirs= admincmds= for opt in "$nonopt" ${1+"$@"} do if test -d "$opt"; then func_append libdirs " $opt" elif test -f "$opt"; then if func_lalib_unsafe_p "$opt"; then func_append libs " $opt" else func_warning "'$opt' is not a valid libtool archive" fi else func_fatal_error "invalid argument '$opt'" fi done if test -n "$libs"; then if test -n "$lt_sysroot"; then sysroot_regex=`$ECHO "$lt_sysroot" | $SED "$sed_make_literal_regex"` sysroot_cmd="s/\([ ']\)$sysroot_regex/\1/g;" else sysroot_cmd= fi # Remove sysroot references if $opt_dry_run; then for lib in $libs; do echo "removing references to $lt_sysroot and '=' prefixes from $lib" done else tmpdir=`func_mktempdir` for lib in $libs; do $SED -e "$sysroot_cmd s/\([ ']-[LR]\)=/\1/g; s/\([ ']\)=/\1/g" $lib \ > $tmpdir/tmp-la mv -f $tmpdir/tmp-la $lib done ${RM}r "$tmpdir" fi fi if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then for libdir in $libdirs; do if test -n "$finish_cmds"; then # Do each command in the finish commands. func_execute_cmds "$finish_cmds" 'admincmds="$admincmds '"$cmd"'"' fi if test -n "$finish_eval"; then # Do the single finish_eval. eval cmds=\"$finish_eval\" $opt_dry_run || eval "$cmds" || func_append admincmds " $cmds" fi done fi # Exit here if they wanted silent mode. $opt_quiet && exit $EXIT_SUCCESS if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then echo "----------------------------------------------------------------------" echo "Libraries have been installed in:" for libdir in $libdirs; do $ECHO " $libdir" done echo echo "If you ever happen to want to link against installed libraries" echo "in a given directory, LIBDIR, you must either use libtool, and" echo "specify the full pathname of the library, or use the '-LLIBDIR'" echo "flag during linking and do at least one of the following:" if test -n "$shlibpath_var"; then echo " - add LIBDIR to the '$shlibpath_var' environment variable" echo " during execution" fi if test -n "$runpath_var"; then echo " - add LIBDIR to the '$runpath_var' environment variable" echo " during linking" fi if test -n "$hardcode_libdir_flag_spec"; then libdir=LIBDIR eval flag=\"$hardcode_libdir_flag_spec\" $ECHO " - use the '$flag' linker flag" fi if test -n "$admincmds"; then $ECHO " - have your system administrator run these commands:$admincmds" fi if test -f /etc/ld.so.conf; then echo " - have your system administrator add LIBDIR to '/etc/ld.so.conf'" fi echo echo "See any operating system documentation about shared libraries for" case $host in solaris2.[6789]|solaris2.1[0-9]) echo "more information, such as the ld(1), crle(1) and ld.so(8) manual" echo "pages." ;; *) echo "more information, such as the ld(1) and ld.so(8) manual pages." ;; esac echo "----------------------------------------------------------------------" fi exit $EXIT_SUCCESS } test finish = "$opt_mode" && func_mode_finish ${1+"$@"} # func_mode_install arg... func_mode_install () { $debug_cmd # There may be an optional sh(1) argument at the beginning of # install_prog (especially on Windows NT). if test "$SHELL" = "$nonopt" || test /bin/sh = "$nonopt" || # Allow the use of GNU shtool's install command. case $nonopt in *shtool*) :;; *) false;; esac then # Aesthetically quote it. func_quote_arg pretty "$nonopt" install_prog="$func_quote_arg_result " arg=$1 shift else install_prog= arg=$nonopt fi # The real first argument should be the name of the installation program. # Aesthetically quote it. func_quote_arg pretty "$arg" func_append install_prog "$func_quote_arg_result" install_shared_prog=$install_prog case " $install_prog " in *[\\\ /]cp\ *) install_cp=: ;; *) install_cp=false ;; esac # We need to accept at least all the BSD install flags. dest= files= opts= prev= install_type= isdir=false stripme= no_mode=: for arg do arg2= if test -n "$dest"; then func_append files " $dest" dest=$arg continue fi case $arg in -d) isdir=: ;; -f) if $install_cp; then :; else prev=$arg fi ;; -g | -m | -o) prev=$arg ;; -s) stripme=" -s" continue ;; -*) ;; *) # If the previous option needed an argument, then skip it. if test -n "$prev"; then if test X-m = "X$prev" && test -n "$install_override_mode"; then arg2=$install_override_mode no_mode=false fi prev= else dest=$arg continue fi ;; esac # Aesthetically quote the argument. func_quote_arg pretty "$arg" func_append install_prog " $func_quote_arg_result" if test -n "$arg2"; then func_quote_arg pretty "$arg2" fi func_append install_shared_prog " $func_quote_arg_result" done test -z "$install_prog" && \ func_fatal_help "you must specify an install program" test -n "$prev" && \ func_fatal_help "the '$prev' option requires an argument" if test -n "$install_override_mode" && $no_mode; then if $install_cp; then :; else func_quote_arg pretty "$install_override_mode" func_append install_shared_prog " -m $func_quote_arg_result" fi fi if test -z "$files"; then if test -z "$dest"; then func_fatal_help "no file or destination specified" else func_fatal_help "you must specify a destination" fi fi # Strip any trailing slash from the destination. func_stripname '' '/' "$dest" dest=$func_stripname_result # Check to see that the destination is a directory. test -d "$dest" && isdir=: if $isdir; then destdir=$dest destname= else func_dirname_and_basename "$dest" "" "." destdir=$func_dirname_result destname=$func_basename_result # Not a directory, so check to see that there is only one file specified. set dummy $files; shift test "$#" -gt 1 && \ func_fatal_help "'$dest' is not a directory" fi case $destdir in [\\/]* | [A-Za-z]:[\\/]*) ;; *) for file in $files; do case $file in *.lo) ;; *) func_fatal_help "'$destdir' must be an absolute directory name" ;; esac done ;; esac # This variable tells wrapper scripts just to set variables rather # than running their programs. libtool_install_magic=$magic staticlibs= future_libdirs= current_libdirs= for file in $files; do # Do each installation. case $file in *.$libext) # Do the static libraries later. func_append staticlibs " $file" ;; *.la) func_resolve_sysroot "$file" file=$func_resolve_sysroot_result # Check to see that this really is a libtool archive. func_lalib_unsafe_p "$file" \ || func_fatal_help "'$file' is not a valid libtool archive" library_names= old_library= relink_command= func_source "$file" # Add the libdir to current_libdirs if it is the destination. if test "X$destdir" = "X$libdir"; then case "$current_libdirs " in *" $libdir "*) ;; *) func_append current_libdirs " $libdir" ;; esac else # Note the libdir as a future libdir. case "$future_libdirs " in *" $libdir "*) ;; *) func_append future_libdirs " $libdir" ;; esac fi func_dirname "$file" "/" "" dir=$func_dirname_result func_append dir "$objdir" if test -n "$relink_command"; then # Determine the prefix the user has applied to our future dir. inst_prefix_dir=`$ECHO "$destdir" | $SED -e "s%$libdir\$%%"` # Don't allow the user to place us outside of our expected # location b/c this prevents finding dependent libraries that # are installed to the same prefix. # At present, this check doesn't affect windows .dll's that # are installed into $libdir/../bin (currently, that works fine) # but it's something to keep an eye on. test "$inst_prefix_dir" = "$destdir" && \ func_fatal_error "error: cannot install '$file' to a directory not ending in $libdir" if test -n "$inst_prefix_dir"; then # Stick the inst_prefix_dir data into the link command. relink_command=`$ECHO "$relink_command" | $SED "s%@inst_prefix_dir@%-inst-prefix-dir $inst_prefix_dir%"` else relink_command=`$ECHO "$relink_command" | $SED "s%@inst_prefix_dir@%%"` fi func_warning "relinking '$file'" func_show_eval "$relink_command" \ 'func_fatal_error "error: relink '\''$file'\'' with the above command before installing it"' fi # See the names of the shared library. set dummy $library_names; shift if test -n "$1"; then realname=$1 shift srcname=$realname test -n "$relink_command" && srcname=${realname}T # Install the shared library and build the symlinks. func_show_eval "$install_shared_prog $dir/$srcname $destdir/$realname" \ 'exit $?' tstripme=$stripme case $host_os in cygwin* | mingw* | pw32* | cegcc*) case $realname in *.dll.a) tstripme= ;; esac ;; os2*) case $realname in *_dll.a) tstripme= ;; esac ;; esac if test -n "$tstripme" && test -n "$striplib"; then func_show_eval "$striplib $destdir/$realname" 'exit $?' fi if test "$#" -gt 0; then # Delete the old symlinks, and create new ones. # Try 'ln -sf' first, because the 'ln' binary might depend on # the symlink we replace! Solaris /bin/ln does not understand -f, # so we also need to try rm && ln -s. for linkname do test "$linkname" != "$realname" \ && func_show_eval "(cd $destdir && { $LN_S -f $realname $linkname || { $RM $linkname && $LN_S $realname $linkname; }; })" done fi # Do each command in the postinstall commands. lib=$destdir/$realname func_execute_cmds "$postinstall_cmds" 'exit $?' fi # Install the pseudo-library for information purposes. func_basename "$file" name=$func_basename_result instname=$dir/${name}i func_show_eval "$install_prog $instname $destdir/$name" 'exit $?' # Maybe install the static library, too. test -n "$old_library" && func_append staticlibs " $dir/$old_library" ;; *.lo) # Install (i.e. copy) a libtool object. # Figure out destination file name, if it wasn't already specified. if test -n "$destname"; then destfile=$destdir/$destname else func_basename "$file" destfile=$func_basename_result destfile=$destdir/$destfile fi # Deduce the name of the destination old-style object file. case $destfile in *.lo) func_lo2o "$destfile" staticdest=$func_lo2o_result ;; *.$objext) staticdest=$destfile destfile= ;; *) func_fatal_help "cannot copy a libtool object to '$destfile'" ;; esac # Install the libtool object if requested. test -n "$destfile" && \ func_show_eval "$install_prog $file $destfile" 'exit $?' # Install the old object if enabled. if test yes = "$build_old_libs"; then # Deduce the name of the old-style object file. func_lo2o "$file" staticobj=$func_lo2o_result func_show_eval "$install_prog \$staticobj \$staticdest" 'exit $?' fi exit $EXIT_SUCCESS ;; *) # Figure out destination file name, if it wasn't already specified. if test -n "$destname"; then destfile=$destdir/$destname else func_basename "$file" destfile=$func_basename_result destfile=$destdir/$destfile fi # If the file is missing, and there is a .exe on the end, strip it # because it is most likely a libtool script we actually want to # install stripped_ext= case $file in *.exe) if test ! -f "$file"; then func_stripname '' '.exe' "$file" file=$func_stripname_result stripped_ext=.exe fi ;; esac # Do a test to see if this is really a libtool program. case $host in *cygwin* | *mingw*) if func_ltwrapper_executable_p "$file"; then func_ltwrapper_scriptname "$file" wrapper=$func_ltwrapper_scriptname_result else func_stripname '' '.exe' "$file" wrapper=$func_stripname_result fi ;; *) wrapper=$file ;; esac if func_ltwrapper_script_p "$wrapper"; then notinst_deplibs= relink_command= func_source "$wrapper" # Check the variables that should have been set. test -z "$generated_by_libtool_version" && \ func_fatal_error "invalid libtool wrapper script '$wrapper'" finalize=: for lib in $notinst_deplibs; do # Check to see that each library is installed. libdir= if test -f "$lib"; then func_source "$lib" fi libfile=$libdir/`$ECHO "$lib" | $SED 's%^.*/%%g'` if test -n "$libdir" && test ! -f "$libfile"; then func_warning "'$lib' has not been installed in '$libdir'" finalize=false fi done relink_command= func_source "$wrapper" outputname= if test no = "$fast_install" && test -n "$relink_command"; then $opt_dry_run || { if $finalize; then tmpdir=`func_mktempdir` func_basename "$file$stripped_ext" file=$func_basename_result outputname=$tmpdir/$file # Replace the output file specification. relink_command=`$ECHO "$relink_command" | $SED 's%@OUTPUT@%'"$outputname"'%g'` $opt_quiet || { func_quote_arg expand,pretty "$relink_command" eval "func_echo $func_quote_arg_result" } if eval "$relink_command"; then : else func_error "error: relink '$file' with the above command before installing it" $opt_dry_run || ${RM}r "$tmpdir" continue fi file=$outputname else func_warning "cannot relink '$file'" fi } else # Install the binary that we compiled earlier. file=`$ECHO "$file$stripped_ext" | $SED "s%\([^/]*\)$%$objdir/\1%"` fi fi # remove .exe since cygwin /usr/bin/install will append another # one anyway case $install_prog,$host in */usr/bin/install*,*cygwin*) case $file:$destfile in *.exe:*.exe) # this is ok ;; *.exe:*) destfile=$destfile.exe ;; *:*.exe) func_stripname '' '.exe' "$destfile" destfile=$func_stripname_result ;; esac ;; esac func_show_eval "$install_prog\$stripme \$file \$destfile" 'exit $?' $opt_dry_run || if test -n "$outputname"; then ${RM}r "$tmpdir" fi ;; esac done for file in $staticlibs; do func_basename "$file" name=$func_basename_result # Set up the ranlib parameters. oldlib=$destdir/$name func_to_tool_file "$oldlib" func_convert_file_msys_to_w32 tool_oldlib=$func_to_tool_file_result func_show_eval "$install_prog \$file \$oldlib" 'exit $?' if test -n "$stripme" && test -n "$old_striplib"; then func_show_eval "$old_striplib $tool_oldlib" 'exit $?' fi # Do each command in the postinstall commands. func_execute_cmds "$old_postinstall_cmds" 'exit $?' done test -n "$future_libdirs" && \ func_warning "remember to run '$progname --finish$future_libdirs'" if test -n "$current_libdirs"; then # Maybe just do a dry run. $opt_dry_run && current_libdirs=" -n$current_libdirs" exec_cmd='$SHELL "$progpath" $preserve_args --finish$current_libdirs' else exit $EXIT_SUCCESS fi } test install = "$opt_mode" && func_mode_install ${1+"$@"} # func_generate_dlsyms outputname originator pic_p # Extract symbols from dlprefiles and create ${outputname}S.o with # a dlpreopen symbol table. func_generate_dlsyms () { $debug_cmd my_outputname=$1 my_originator=$2 my_pic_p=${3-false} my_prefix=`$ECHO "$my_originator" | $SED 's%[^a-zA-Z0-9]%_%g'` my_dlsyms= if test -n "$dlfiles$dlprefiles" || test no != "$dlself"; then if test -n "$NM" && test -n "$global_symbol_pipe"; then my_dlsyms=${my_outputname}S.c else func_error "not configured to extract global symbols from dlpreopened files" fi fi if test -n "$my_dlsyms"; then case $my_dlsyms in "") ;; *.c) # Discover the nlist of each of the dlfiles. nlist=$output_objdir/$my_outputname.nm func_show_eval "$RM $nlist ${nlist}S ${nlist}T" # Parse the name list into a source file. func_verbose "creating $output_objdir/$my_dlsyms" $opt_dry_run || $ECHO > "$output_objdir/$my_dlsyms" "\ /* $my_dlsyms - symbol resolution table for '$my_outputname' dlsym emulation. */ /* Generated by $PROGRAM (GNU $PACKAGE) $VERSION */ #ifdef __cplusplus extern \"C\" { #endif #if defined __GNUC__ && (((__GNUC__ == 4) && (__GNUC_MINOR__ >= 4)) || (__GNUC__ > 4)) #pragma GCC diagnostic ignored \"-Wstrict-prototypes\" #endif /* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and tests. */ #if defined _WIN32 || defined __CYGWIN__ || defined _WIN32_WCE /* DATA imports from DLLs on WIN32 can't be const, because runtime relocations are performed -- see ld's documentation on pseudo-relocs. */ # define LT_DLSYM_CONST #elif defined __osf__ /* This system does not cope well with relocations in const data. */ # define LT_DLSYM_CONST #else # define LT_DLSYM_CONST const #endif #define STREQ(s1, s2) (strcmp ((s1), (s2)) == 0) /* External symbol declarations for the compiler. */\ " if test yes = "$dlself"; then func_verbose "generating symbol list for '$output'" $opt_dry_run || echo ': @PROGRAM@ ' > "$nlist" # Add our own program objects to the symbol list. progfiles=`$ECHO "$objs$old_deplibs" | $SP2NL | $SED "$lo2o" | $NL2SP` for progfile in $progfiles; do func_to_tool_file "$progfile" func_convert_file_msys_to_w32 func_verbose "extracting global C symbols from '$func_to_tool_file_result'" $opt_dry_run || eval "$NM $func_to_tool_file_result | $global_symbol_pipe >> '$nlist'" done if test -n "$exclude_expsyms"; then $opt_dry_run || { eval '$EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T' eval '$MV "$nlist"T "$nlist"' } fi if test -n "$export_symbols_regex"; then $opt_dry_run || { eval '$EGREP -e "$export_symbols_regex" "$nlist" > "$nlist"T' eval '$MV "$nlist"T "$nlist"' } fi # Prepare the list of exported symbols if test -z "$export_symbols"; then export_symbols=$output_objdir/$outputname.exp $opt_dry_run || { $RM $export_symbols eval "$SED -n -e '/^: @PROGRAM@ $/d' -e 's/^.* \(.*\)$/\1/p' "'< "$nlist" > "$export_symbols"' case $host in *cygwin* | *mingw* | *cegcc* ) eval "echo EXPORTS "'> "$output_objdir/$outputname.def"' eval 'cat "$export_symbols" >> "$output_objdir/$outputname.def"' ;; esac } else $opt_dry_run || { eval "$SED -e 's/\([].[*^$]\)/\\\\\1/g' -e 's/^/ /' -e 's/$/$/'"' < "$export_symbols" > "$output_objdir/$outputname.exp"' eval '$GREP -f "$output_objdir/$outputname.exp" < "$nlist" > "$nlist"T' eval '$MV "$nlist"T "$nlist"' case $host in *cygwin* | *mingw* | *cegcc* ) eval "echo EXPORTS "'> "$output_objdir/$outputname.def"' eval 'cat "$nlist" >> "$output_objdir/$outputname.def"' ;; esac } fi fi for dlprefile in $dlprefiles; do func_verbose "extracting global C symbols from '$dlprefile'" func_basename "$dlprefile" name=$func_basename_result case $host in *cygwin* | *mingw* | *cegcc* ) # if an import library, we need to obtain dlname if func_win32_import_lib_p "$dlprefile"; then func_tr_sh "$dlprefile" eval "curr_lafile=\$libfile_$func_tr_sh_result" dlprefile_dlbasename= if test -n "$curr_lafile" && func_lalib_p "$curr_lafile"; then # Use subshell, to avoid clobbering current variable values dlprefile_dlname=`source "$curr_lafile" && echo "$dlname"` if test -n "$dlprefile_dlname"; then func_basename "$dlprefile_dlname" dlprefile_dlbasename=$func_basename_result else # no lafile. user explicitly requested -dlpreopen . $sharedlib_from_linklib_cmd "$dlprefile" dlprefile_dlbasename=$sharedlib_from_linklib_result fi fi $opt_dry_run || { if test -n "$dlprefile_dlbasename"; then eval '$ECHO ": $dlprefile_dlbasename" >> "$nlist"' else func_warning "Could not compute DLL name from $name" eval '$ECHO ": $name " >> "$nlist"' fi func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32 eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe | $SED -e '/I __imp/d' -e 's/I __nm_/D /;s/_nm__//' >> '$nlist'" } else # not an import lib $opt_dry_run || { eval '$ECHO ": $name " >> "$nlist"' func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32 eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe >> '$nlist'" } fi ;; *) $opt_dry_run || { eval '$ECHO ": $name " >> "$nlist"' func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32 eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe >> '$nlist'" } ;; esac done $opt_dry_run || { # Make sure we have at least an empty file. test -f "$nlist" || : > "$nlist" if test -n "$exclude_expsyms"; then $EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T $MV "$nlist"T "$nlist" fi # Try sorting and uniquifying the output. if $GREP -v "^: " < "$nlist" | if sort -k 3 /dev/null 2>&1; then sort -k 3 else sort +2 fi | uniq > "$nlist"S; then : else $GREP -v "^: " < "$nlist" > "$nlist"S fi if test -f "$nlist"S; then eval "$global_symbol_to_cdecl"' < "$nlist"S >> "$output_objdir/$my_dlsyms"' else echo '/* NONE */' >> "$output_objdir/$my_dlsyms" fi func_show_eval '$RM "${nlist}I"' if test -n "$global_symbol_to_import"; then eval "$global_symbol_to_import"' < "$nlist"S > "$nlist"I' fi echo >> "$output_objdir/$my_dlsyms" "\ /* The mapping between symbol names and symbols. */ typedef struct { const char *name; void *address; } lt_dlsymlist; extern LT_DLSYM_CONST lt_dlsymlist lt_${my_prefix}_LTX_preloaded_symbols[];\ " if test -s "$nlist"I; then echo >> "$output_objdir/$my_dlsyms" "\ static void lt_syminit(void) { LT_DLSYM_CONST lt_dlsymlist *symbol = lt_${my_prefix}_LTX_preloaded_symbols; for (; symbol->name; ++symbol) {" $SED 's/.*/ if (STREQ (symbol->name, \"&\")) symbol->address = (void *) \&&;/' < "$nlist"I >> "$output_objdir/$my_dlsyms" echo >> "$output_objdir/$my_dlsyms" "\ } }" fi echo >> "$output_objdir/$my_dlsyms" "\ LT_DLSYM_CONST lt_dlsymlist lt_${my_prefix}_LTX_preloaded_symbols[] = { {\"$my_originator\", (void *) 0}," if test -s "$nlist"I; then echo >> "$output_objdir/$my_dlsyms" "\ {\"@INIT@\", (void *) <_syminit}," fi case $need_lib_prefix in no) eval "$global_symbol_to_c_name_address" < "$nlist" >> "$output_objdir/$my_dlsyms" ;; *) eval "$global_symbol_to_c_name_address_lib_prefix" < "$nlist" >> "$output_objdir/$my_dlsyms" ;; esac echo >> "$output_objdir/$my_dlsyms" "\ {0, (void *) 0} }; /* This works around a problem in FreeBSD linker */ #ifdef FREEBSD_WORKAROUND static const void *lt_preloaded_setup() { return lt_${my_prefix}_LTX_preloaded_symbols; } #endif #ifdef __cplusplus } #endif\ " } # !$opt_dry_run pic_flag_for_symtable= case "$compile_command " in *" -static "*) ;; *) case $host in # compiling the symbol table file with pic_flag works around # a FreeBSD bug that causes programs to crash when -lm is # linked before any other PIC object. But we must not use # pic_flag when linking with -static. The problem exists in # FreeBSD 2.2.6 and is fixed in FreeBSD 3.1. *-*-freebsd2.*|*-*-freebsd3.0*|*-*-freebsdelf3.0*) pic_flag_for_symtable=" $pic_flag -DFREEBSD_WORKAROUND" ;; *-*-hpux*) pic_flag_for_symtable=" $pic_flag" ;; *) $my_pic_p && pic_flag_for_symtable=" $pic_flag" ;; esac ;; esac symtab_cflags= for arg in $LTCFLAGS; do case $arg in -pie | -fpie | -fPIE) ;; *) func_append symtab_cflags " $arg" ;; esac done # Now compile the dynamic symbol file. func_show_eval '(cd $output_objdir && $LTCC$symtab_cflags -c$no_builtin_flag$pic_flag_for_symtable "$my_dlsyms")' 'exit $?' # Clean up the generated files. func_show_eval '$RM "$output_objdir/$my_dlsyms" "$nlist" "${nlist}S" "${nlist}T" "${nlist}I"' # Transform the symbol file into the correct name. symfileobj=$output_objdir/${my_outputname}S.$objext case $host in *cygwin* | *mingw* | *cegcc* ) if test -f "$output_objdir/$my_outputname.def"; then compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"` finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"` else compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$symfileobj%"` finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$symfileobj%"` fi ;; *) compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$symfileobj%"` finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$symfileobj%"` ;; esac ;; *) func_fatal_error "unknown suffix for '$my_dlsyms'" ;; esac else # We keep going just in case the user didn't refer to # lt_preloaded_symbols. The linker will fail if global_symbol_pipe # really was required. # Nullify the symbol file. compile_command=`$ECHO "$compile_command" | $SED "s% @SYMFILE@%%"` finalize_command=`$ECHO "$finalize_command" | $SED "s% @SYMFILE@%%"` fi } # func_cygming_gnu_implib_p ARG # This predicate returns with zero status (TRUE) if # ARG is a GNU/binutils-style import library. Returns # with nonzero status (FALSE) otherwise. func_cygming_gnu_implib_p () { $debug_cmd func_to_tool_file "$1" func_convert_file_msys_to_w32 func_cygming_gnu_implib_tmp=`$NM "$func_to_tool_file_result" | eval "$global_symbol_pipe" | $EGREP ' (_head_[A-Za-z0-9_]+_[ad]l*|[A-Za-z0-9_]+_[ad]l*_iname)$'` test -n "$func_cygming_gnu_implib_tmp" } # func_cygming_ms_implib_p ARG # This predicate returns with zero status (TRUE) if # ARG is an MS-style import library. Returns # with nonzero status (FALSE) otherwise. func_cygming_ms_implib_p () { $debug_cmd func_to_tool_file "$1" func_convert_file_msys_to_w32 func_cygming_ms_implib_tmp=`$NM "$func_to_tool_file_result" | eval "$global_symbol_pipe" | $GREP '_NULL_IMPORT_DESCRIPTOR'` test -n "$func_cygming_ms_implib_tmp" } # func_win32_libid arg # return the library type of file 'arg' # # Need a lot of goo to handle *both* DLLs and import libs # Has to be a shell function in order to 'eat' the argument # that is supplied when $file_magic_command is called. # Despite the name, also deal with 64 bit binaries. func_win32_libid () { $debug_cmd win32_libid_type=unknown win32_fileres=`file -L $1 2>/dev/null` case $win32_fileres in *ar\ archive\ import\ library*) # definitely import win32_libid_type="x86 archive import" ;; *ar\ archive*) # could be an import, or static # Keep the egrep pattern in sync with the one in _LT_CHECK_MAGIC_METHOD. if eval $OBJDUMP -f $1 | $SED -e '10q' 2>/dev/null | $EGREP 'file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)' >/dev/null; then case $nm_interface in "MS dumpbin") if func_cygming_ms_implib_p "$1" || func_cygming_gnu_implib_p "$1" then win32_nmres=import else win32_nmres= fi ;; *) func_to_tool_file "$1" func_convert_file_msys_to_w32 win32_nmres=`eval $NM -f posix -A \"$func_to_tool_file_result\" | $SED -n -e ' 1,100{ / I /{ s|.*|import| p q } }'` ;; esac case $win32_nmres in import*) win32_libid_type="x86 archive import";; *) win32_libid_type="x86 archive static";; esac fi ;; *DLL*) win32_libid_type="x86 DLL" ;; *executable*) # but shell scripts are "executable" too... case $win32_fileres in *MS\ Windows\ PE\ Intel*) win32_libid_type="x86 DLL" ;; esac ;; esac $ECHO "$win32_libid_type" } # func_cygming_dll_for_implib ARG # # Platform-specific function to extract the # name of the DLL associated with the specified # import library ARG. # Invoked by eval'ing the libtool variable # $sharedlib_from_linklib_cmd # Result is available in the variable # $sharedlib_from_linklib_result func_cygming_dll_for_implib () { $debug_cmd sharedlib_from_linklib_result=`$DLLTOOL --identify-strict --identify "$1"` } # func_cygming_dll_for_implib_fallback_core SECTION_NAME LIBNAMEs # # The is the core of a fallback implementation of a # platform-specific function to extract the name of the # DLL associated with the specified import library LIBNAME. # # SECTION_NAME is either .idata$6 or .idata$7, depending # on the platform and compiler that created the implib. # # Echos the name of the DLL associated with the # specified import library. func_cygming_dll_for_implib_fallback_core () { $debug_cmd match_literal=`$ECHO "$1" | $SED "$sed_make_literal_regex"` $OBJDUMP -s --section "$1" "$2" 2>/dev/null | $SED '/^Contents of section '"$match_literal"':/{ # Place marker at beginning of archive member dllname section s/.*/====MARK====/ p d } # These lines can sometimes be longer than 43 characters, but # are always uninteresting /:[ ]*file format pe[i]\{,1\}-/d /^In archive [^:]*:/d # Ensure marker is printed /^====MARK====/p # Remove all lines with less than 43 characters /^.\{43\}/!d # From remaining lines, remove first 43 characters s/^.\{43\}//' | $SED -n ' # Join marker and all lines until next marker into a single line /^====MARK====/ b para H $ b para b :para x s/\n//g # Remove the marker s/^====MARK====// # Remove trailing dots and whitespace s/[\. \t]*$// # Print /./p' | # we now have a list, one entry per line, of the stringified # contents of the appropriate section of all members of the # archive that possess that section. Heuristic: eliminate # all those that have a first or second character that is # a '.' (that is, objdump's representation of an unprintable # character.) This should work for all archives with less than # 0x302f exports -- but will fail for DLLs whose name actually # begins with a literal '.' or a single character followed by # a '.'. # # Of those that remain, print the first one. $SED -e '/^\./d;/^.\./d;q' } # func_cygming_dll_for_implib_fallback ARG # Platform-specific function to extract the # name of the DLL associated with the specified # import library ARG. # # This fallback implementation is for use when $DLLTOOL # does not support the --identify-strict option. # Invoked by eval'ing the libtool variable # $sharedlib_from_linklib_cmd # Result is available in the variable # $sharedlib_from_linklib_result func_cygming_dll_for_implib_fallback () { $debug_cmd if func_cygming_gnu_implib_p "$1"; then # binutils import library sharedlib_from_linklib_result=`func_cygming_dll_for_implib_fallback_core '.idata$7' "$1"` elif func_cygming_ms_implib_p "$1"; then # ms-generated import library sharedlib_from_linklib_result=`func_cygming_dll_for_implib_fallback_core '.idata$6' "$1"` else # unknown sharedlib_from_linklib_result= fi } # func_extract_an_archive dir oldlib func_extract_an_archive () { $debug_cmd f_ex_an_ar_dir=$1; shift f_ex_an_ar_oldlib=$1 if test yes = "$lock_old_archive_extraction"; then lockfile=$f_ex_an_ar_oldlib.lock until $opt_dry_run || ln "$progpath" "$lockfile" 2>/dev/null; do func_echo "Waiting for $lockfile to be removed" sleep 2 done fi func_show_eval "(cd \$f_ex_an_ar_dir && $AR x \"\$f_ex_an_ar_oldlib\")" \ 'stat=$?; rm -f "$lockfile"; exit $stat' if test yes = "$lock_old_archive_extraction"; then $opt_dry_run || rm -f "$lockfile" fi if ($AR t "$f_ex_an_ar_oldlib" | sort | sort -uc >/dev/null 2>&1); then : else func_fatal_error "object name conflicts in archive: $f_ex_an_ar_dir/$f_ex_an_ar_oldlib" fi } # func_extract_archives gentop oldlib ... func_extract_archives () { $debug_cmd my_gentop=$1; shift my_oldlibs=${1+"$@"} my_oldobjs= my_xlib= my_xabs= my_xdir= for my_xlib in $my_oldlibs; do # Extract the objects. case $my_xlib in [\\/]* | [A-Za-z]:[\\/]*) my_xabs=$my_xlib ;; *) my_xabs=`pwd`"/$my_xlib" ;; esac func_basename "$my_xlib" my_xlib=$func_basename_result my_xlib_u=$my_xlib while :; do case " $extracted_archives " in *" $my_xlib_u "*) func_arith $extracted_serial + 1 extracted_serial=$func_arith_result my_xlib_u=lt$extracted_serial-$my_xlib ;; *) break ;; esac done extracted_archives="$extracted_archives $my_xlib_u" my_xdir=$my_gentop/$my_xlib_u func_mkdir_p "$my_xdir" case $host in *-darwin*) func_verbose "Extracting $my_xabs" # Do not bother doing anything if just a dry run $opt_dry_run || { darwin_orig_dir=`pwd` cd $my_xdir || exit $? darwin_archive=$my_xabs darwin_curdir=`pwd` func_basename "$darwin_archive" darwin_base_archive=$func_basename_result darwin_arches=`$LIPO -info "$darwin_archive" 2>/dev/null | $GREP Architectures 2>/dev/null || true` if test -n "$darwin_arches"; then darwin_arches=`$ECHO "$darwin_arches" | $SED -e 's/.*are://'` darwin_arch= func_verbose "$darwin_base_archive has multiple architectures $darwin_arches" for darwin_arch in $darwin_arches; do func_mkdir_p "unfat-$$/$darwin_base_archive-$darwin_arch" $LIPO -thin $darwin_arch -output "unfat-$$/$darwin_base_archive-$darwin_arch/$darwin_base_archive" "$darwin_archive" cd "unfat-$$/$darwin_base_archive-$darwin_arch" func_extract_an_archive "`pwd`" "$darwin_base_archive" cd "$darwin_curdir" $RM "unfat-$$/$darwin_base_archive-$darwin_arch/$darwin_base_archive" done # $darwin_arches ## Okay now we've a bunch of thin objects, gotta fatten them up :) darwin_filelist=`find unfat-$$ -type f -name \*.o -print -o -name \*.lo -print | $SED -e "$sed_basename" | sort -u` darwin_file= darwin_files= for darwin_file in $darwin_filelist; do darwin_files=`find unfat-$$ -name $darwin_file -print | sort | $NL2SP` $LIPO -create -output "$darwin_file" $darwin_files done # $darwin_filelist $RM -rf unfat-$$ cd "$darwin_orig_dir" else cd $darwin_orig_dir func_extract_an_archive "$my_xdir" "$my_xabs" fi # $darwin_arches } # !$opt_dry_run ;; *) func_extract_an_archive "$my_xdir" "$my_xabs" ;; esac my_oldobjs="$my_oldobjs "`find $my_xdir -name \*.$objext -print -o -name \*.lo -print | sort | $NL2SP` done func_extract_archives_result=$my_oldobjs } # func_emit_wrapper [arg=no] # # Emit a libtool wrapper script on stdout. # Don't directly open a file because we may want to # incorporate the script contents within a cygwin/mingw # wrapper executable. Must ONLY be called from within # func_mode_link because it depends on a number of variables # set therein. # # ARG is the value that the WRAPPER_SCRIPT_BELONGS_IN_OBJDIR # variable will take. If 'yes', then the emitted script # will assume that the directory where it is stored is # the $objdir directory. This is a cygwin/mingw-specific # behavior. func_emit_wrapper () { func_emit_wrapper_arg1=${1-no} $ECHO "\ #! $SHELL # $output - temporary wrapper script for $objdir/$outputname # Generated by $PROGRAM (GNU $PACKAGE) $VERSION # # The $output program cannot be directly executed until all the libtool # libraries that it depends on are installed. # # This wrapper script should never be moved out of the build directory. # If it is, it will not operate correctly. # Sed substitution that helps us do robust quoting. It backslashifies # metacharacters that are still active within double-quoted strings. sed_quote_subst='$sed_quote_subst' # Be Bourne compatible if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then emulate sh NULLCMD=: # Zsh 3.x and 4.x performs word splitting on \${1+\"\$@\"}, which # is contrary to our usage. Disable this feature. alias -g '\${1+\"\$@\"}'='\"\$@\"' setopt NO_GLOB_SUBST else case \`(set -o) 2>/dev/null\` in *posix*) set -o posix;; esac fi BIN_SH=xpg4; export BIN_SH # for Tru64 DUALCASE=1; export DUALCASE # for MKS sh # The HP-UX ksh and POSIX shell print the target directory to stdout # if CDPATH is set. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH relink_command=\"$relink_command\" # This environment variable determines our operation mode. if test \"\$libtool_install_magic\" = \"$magic\"; then # install mode needs the following variables: generated_by_libtool_version='$macro_version' notinst_deplibs='$notinst_deplibs' else # When we are sourced in execute mode, \$file and \$ECHO are already set. if test \"\$libtool_execute_magic\" != \"$magic\"; then file=\"\$0\"" func_quote_arg pretty "$ECHO" qECHO=$func_quote_arg_result $ECHO "\ # A function that is used when there is no print builtin or printf. func_fallback_echo () { eval 'cat <<_LTECHO_EOF \$1 _LTECHO_EOF' } ECHO=$qECHO fi # Very basic option parsing. These options are (a) specific to # the libtool wrapper, (b) are identical between the wrapper # /script/ and the wrapper /executable/ that is used only on # windows platforms, and (c) all begin with the string "--lt-" # (application programs are unlikely to have options that match # this pattern). # # There are only two supported options: --lt-debug and # --lt-dump-script. There is, deliberately, no --lt-help. # # The first argument to this parsing function should be the # script's $0 value, followed by "$@". lt_option_debug= func_parse_lt_options () { lt_script_arg0=\$0 shift for lt_opt do case \"\$lt_opt\" in --lt-debug) lt_option_debug=1 ;; --lt-dump-script) lt_dump_D=\`\$ECHO \"X\$lt_script_arg0\" | $SED -e 's/^X//' -e 's%/[^/]*$%%'\` test \"X\$lt_dump_D\" = \"X\$lt_script_arg0\" && lt_dump_D=. lt_dump_F=\`\$ECHO \"X\$lt_script_arg0\" | $SED -e 's/^X//' -e 's%^.*/%%'\` cat \"\$lt_dump_D/\$lt_dump_F\" exit 0 ;; --lt-*) \$ECHO \"Unrecognized --lt- option: '\$lt_opt'\" 1>&2 exit 1 ;; esac done # Print the debug banner immediately: if test -n \"\$lt_option_debug\"; then echo \"$outputname:$output:\$LINENO: libtool wrapper (GNU $PACKAGE) $VERSION\" 1>&2 fi } # Used when --lt-debug. Prints its arguments to stdout # (redirection is the responsibility of the caller) func_lt_dump_args () { lt_dump_args_N=1; for lt_arg do \$ECHO \"$outputname:$output:\$LINENO: newargv[\$lt_dump_args_N]: \$lt_arg\" lt_dump_args_N=\`expr \$lt_dump_args_N + 1\` done } # Core function for launching the target application func_exec_program_core () { " case $host in # Backslashes separate directories on plain windows *-*-mingw | *-*-os2* | *-cegcc*) $ECHO "\ if test -n \"\$lt_option_debug\"; then \$ECHO \"$outputname:$output:\$LINENO: newargv[0]: \$progdir\\\\\$program\" 1>&2 func_lt_dump_args \${1+\"\$@\"} 1>&2 fi exec \"\$progdir\\\\\$program\" \${1+\"\$@\"} " ;; *) $ECHO "\ if test -n \"\$lt_option_debug\"; then \$ECHO \"$outputname:$output:\$LINENO: newargv[0]: \$progdir/\$program\" 1>&2 func_lt_dump_args \${1+\"\$@\"} 1>&2 fi exec \"\$progdir/\$program\" \${1+\"\$@\"} " ;; esac $ECHO "\ \$ECHO \"\$0: cannot exec \$program \$*\" 1>&2 exit 1 } # A function to encapsulate launching the target application # Strips options in the --lt-* namespace from \$@ and # launches target application with the remaining arguments. func_exec_program () { case \" \$* \" in *\\ --lt-*) for lt_wr_arg do case \$lt_wr_arg in --lt-*) ;; *) set x \"\$@\" \"\$lt_wr_arg\"; shift;; esac shift done ;; esac func_exec_program_core \${1+\"\$@\"} } # Parse options func_parse_lt_options \"\$0\" \${1+\"\$@\"} # Find the directory that this script lives in. thisdir=\`\$ECHO \"\$file\" | $SED 's%/[^/]*$%%'\` test \"x\$thisdir\" = \"x\$file\" && thisdir=. # Follow symbolic links until we get to the real thisdir. file=\`ls -ld \"\$file\" | $SED -n 's/.*-> //p'\` while test -n \"\$file\"; do destdir=\`\$ECHO \"\$file\" | $SED 's%/[^/]*\$%%'\` # If there was a directory component, then change thisdir. if test \"x\$destdir\" != \"x\$file\"; then case \"\$destdir\" in [\\\\/]* | [A-Za-z]:[\\\\/]*) thisdir=\"\$destdir\" ;; *) thisdir=\"\$thisdir/\$destdir\" ;; esac fi file=\`\$ECHO \"\$file\" | $SED 's%^.*/%%'\` file=\`ls -ld \"\$thisdir/\$file\" | $SED -n 's/.*-> //p'\` done # Usually 'no', except on cygwin/mingw when embedded into # the cwrapper. WRAPPER_SCRIPT_BELONGS_IN_OBJDIR=$func_emit_wrapper_arg1 if test \"\$WRAPPER_SCRIPT_BELONGS_IN_OBJDIR\" = \"yes\"; then # special case for '.' if test \"\$thisdir\" = \".\"; then thisdir=\`pwd\` fi # remove .libs from thisdir case \"\$thisdir\" in *[\\\\/]$objdir ) thisdir=\`\$ECHO \"\$thisdir\" | $SED 's%[\\\\/][^\\\\/]*$%%'\` ;; $objdir ) thisdir=. ;; esac fi # Try to get the absolute directory name. absdir=\`cd \"\$thisdir\" && pwd\` test -n \"\$absdir\" && thisdir=\"\$absdir\" " if test yes = "$fast_install"; then $ECHO "\ program=lt-'$outputname'$exeext progdir=\"\$thisdir/$objdir\" if test ! -f \"\$progdir/\$program\" || { file=\`ls -1dt \"\$progdir/\$program\" \"\$progdir/../\$program\" 2>/dev/null | $SED 1q\`; \\ test \"X\$file\" != \"X\$progdir/\$program\"; }; then file=\"\$\$-\$program\" if test ! -d \"\$progdir\"; then $MKDIR \"\$progdir\" else $RM \"\$progdir/\$file\" fi" $ECHO "\ # relink executable if necessary if test -n \"\$relink_command\"; then if relink_command_output=\`eval \$relink_command 2>&1\`; then : else \$ECHO \"\$relink_command_output\" >&2 $RM \"\$progdir/\$file\" exit 1 fi fi $MV \"\$progdir/\$file\" \"\$progdir/\$program\" 2>/dev/null || { $RM \"\$progdir/\$program\"; $MV \"\$progdir/\$file\" \"\$progdir/\$program\"; } $RM \"\$progdir/\$file\" fi" else $ECHO "\ program='$outputname' progdir=\"\$thisdir/$objdir\" " fi $ECHO "\ if test -f \"\$progdir/\$program\"; then" # fixup the dll searchpath if we need to. # # Fix the DLL searchpath if we need to. Do this before prepending # to shlibpath, because on Windows, both are PATH and uninstalled # libraries must come first. if test -n "$dllsearchpath"; then $ECHO "\ # Add the dll search path components to the executable PATH PATH=$dllsearchpath:\$PATH " fi # Export our shlibpath_var if we have one. if test yes = "$shlibpath_overrides_runpath" && test -n "$shlibpath_var" && test -n "$temp_rpath"; then $ECHO "\ # Add our own library path to $shlibpath_var $shlibpath_var=\"$temp_rpath\$$shlibpath_var\" # Some systems cannot cope with colon-terminated $shlibpath_var # The second colon is a workaround for a bug in BeOS R4 sed $shlibpath_var=\`\$ECHO \"\$$shlibpath_var\" | $SED 's/::*\$//'\` export $shlibpath_var " fi $ECHO "\ if test \"\$libtool_execute_magic\" != \"$magic\"; then # Run the actual program with our arguments. func_exec_program \${1+\"\$@\"} fi else # The program doesn't exist. \$ECHO \"\$0: error: '\$progdir/\$program' does not exist\" 1>&2 \$ECHO \"This script is just a wrapper for \$program.\" 1>&2 \$ECHO \"See the $PACKAGE documentation for more information.\" 1>&2 exit 1 fi fi\ " } # func_emit_cwrapperexe_src # emit the source code for a wrapper executable on stdout # Must ONLY be called from within func_mode_link because # it depends on a number of variable set therein. func_emit_cwrapperexe_src () { cat < #include #ifdef _MSC_VER # include # include # include #else # include # include # ifdef __CYGWIN__ # include # endif #endif #include #include #include #include #include #include #include #include #define STREQ(s1, s2) (strcmp ((s1), (s2)) == 0) /* declarations of non-ANSI functions */ #if defined __MINGW32__ # ifdef __STRICT_ANSI__ int _putenv (const char *); # endif #elif defined __CYGWIN__ # ifdef __STRICT_ANSI__ char *realpath (const char *, char *); int putenv (char *); int setenv (const char *, const char *, int); # endif /* #elif defined other_platform || defined ... */ #endif /* portability defines, excluding path handling macros */ #if defined _MSC_VER # define setmode _setmode # define stat _stat # define chmod _chmod # define getcwd _getcwd # define putenv _putenv # define S_IXUSR _S_IEXEC #elif defined __MINGW32__ # define setmode _setmode # define stat _stat # define chmod _chmod # define getcwd _getcwd # define putenv _putenv #elif defined __CYGWIN__ # define HAVE_SETENV # define FOPEN_WB "wb" /* #elif defined other platforms ... */ #endif #if defined PATH_MAX # define LT_PATHMAX PATH_MAX #elif defined MAXPATHLEN # define LT_PATHMAX MAXPATHLEN #else # define LT_PATHMAX 1024 #endif #ifndef S_IXOTH # define S_IXOTH 0 #endif #ifndef S_IXGRP # define S_IXGRP 0 #endif /* path handling portability macros */ #ifndef DIR_SEPARATOR # define DIR_SEPARATOR '/' # define PATH_SEPARATOR ':' #endif #if defined _WIN32 || defined __MSDOS__ || defined __DJGPP__ || \ defined __OS2__ # define HAVE_DOS_BASED_FILE_SYSTEM # define FOPEN_WB "wb" # ifndef DIR_SEPARATOR_2 # define DIR_SEPARATOR_2 '\\' # endif # ifndef PATH_SEPARATOR_2 # define PATH_SEPARATOR_2 ';' # endif #endif #ifndef DIR_SEPARATOR_2 # define IS_DIR_SEPARATOR(ch) ((ch) == DIR_SEPARATOR) #else /* DIR_SEPARATOR_2 */ # define IS_DIR_SEPARATOR(ch) \ (((ch) == DIR_SEPARATOR) || ((ch) == DIR_SEPARATOR_2)) #endif /* DIR_SEPARATOR_2 */ #ifndef PATH_SEPARATOR_2 # define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR) #else /* PATH_SEPARATOR_2 */ # define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR_2) #endif /* PATH_SEPARATOR_2 */ #ifndef FOPEN_WB # define FOPEN_WB "w" #endif #ifndef _O_BINARY # define _O_BINARY 0 #endif #define XMALLOC(type, num) ((type *) xmalloc ((num) * sizeof(type))) #define XFREE(stale) do { \ if (stale) { free (stale); stale = 0; } \ } while (0) #if defined LT_DEBUGWRAPPER static int lt_debug = 1; #else static int lt_debug = 0; #endif const char *program_name = "libtool-wrapper"; /* in case xstrdup fails */ void *xmalloc (size_t num); char *xstrdup (const char *string); const char *base_name (const char *name); char *find_executable (const char *wrapper); char *chase_symlinks (const char *pathspec); int make_executable (const char *path); int check_executable (const char *path); char *strendzap (char *str, const char *pat); void lt_debugprintf (const char *file, int line, const char *fmt, ...); void lt_fatal (const char *file, int line, const char *message, ...); static const char *nonnull (const char *s); static const char *nonempty (const char *s); void lt_setenv (const char *name, const char *value); char *lt_extend_str (const char *orig_value, const char *add, int to_end); void lt_update_exe_path (const char *name, const char *value); void lt_update_lib_path (const char *name, const char *value); char **prepare_spawn (char **argv); void lt_dump_script (FILE *f); EOF cat <= 0) && (st.st_mode & (S_IXUSR | S_IXGRP | S_IXOTH))) return 1; else return 0; } int make_executable (const char *path) { int rval = 0; struct stat st; lt_debugprintf (__FILE__, __LINE__, "(make_executable): %s\n", nonempty (path)); if ((!path) || (!*path)) return 0; if (stat (path, &st) >= 0) { rval = chmod (path, st.st_mode | S_IXOTH | S_IXGRP | S_IXUSR); } return rval; } /* Searches for the full path of the wrapper. Returns newly allocated full path name if found, NULL otherwise Does not chase symlinks, even on platforms that support them. */ char * find_executable (const char *wrapper) { int has_slash = 0; const char *p; const char *p_next; /* static buffer for getcwd */ char tmp[LT_PATHMAX + 1]; size_t tmp_len; char *concat_name; lt_debugprintf (__FILE__, __LINE__, "(find_executable): %s\n", nonempty (wrapper)); if ((wrapper == NULL) || (*wrapper == '\0')) return NULL; /* Absolute path? */ #if defined HAVE_DOS_BASED_FILE_SYSTEM if (isalpha ((unsigned char) wrapper[0]) && wrapper[1] == ':') { concat_name = xstrdup (wrapper); if (check_executable (concat_name)) return concat_name; XFREE (concat_name); } else { #endif if (IS_DIR_SEPARATOR (wrapper[0])) { concat_name = xstrdup (wrapper); if (check_executable (concat_name)) return concat_name; XFREE (concat_name); } #if defined HAVE_DOS_BASED_FILE_SYSTEM } #endif for (p = wrapper; *p; p++) if (*p == '/') { has_slash = 1; break; } if (!has_slash) { /* no slashes; search PATH */ const char *path = getenv ("PATH"); if (path != NULL) { for (p = path; *p; p = p_next) { const char *q; size_t p_len; for (q = p; *q; q++) if (IS_PATH_SEPARATOR (*q)) break; p_len = (size_t) (q - p); p_next = (*q == '\0' ? q : q + 1); if (p_len == 0) { /* empty path: current directory */ if (getcwd (tmp, LT_PATHMAX) == NULL) lt_fatal (__FILE__, __LINE__, "getcwd failed: %s", nonnull (strerror (errno))); tmp_len = strlen (tmp); concat_name = XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1); memcpy (concat_name, tmp, tmp_len); concat_name[tmp_len] = '/'; strcpy (concat_name + tmp_len + 1, wrapper); } else { concat_name = XMALLOC (char, p_len + 1 + strlen (wrapper) + 1); memcpy (concat_name, p, p_len); concat_name[p_len] = '/'; strcpy (concat_name + p_len + 1, wrapper); } if (check_executable (concat_name)) return concat_name; XFREE (concat_name); } } /* not found in PATH; assume curdir */ } /* Relative path | not found in path: prepend cwd */ if (getcwd (tmp, LT_PATHMAX) == NULL) lt_fatal (__FILE__, __LINE__, "getcwd failed: %s", nonnull (strerror (errno))); tmp_len = strlen (tmp); concat_name = XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1); memcpy (concat_name, tmp, tmp_len); concat_name[tmp_len] = '/'; strcpy (concat_name + tmp_len + 1, wrapper); if (check_executable (concat_name)) return concat_name; XFREE (concat_name); return NULL; } char * chase_symlinks (const char *pathspec) { #ifndef S_ISLNK return xstrdup (pathspec); #else char buf[LT_PATHMAX]; struct stat s; char *tmp_pathspec = xstrdup (pathspec); char *p; int has_symlinks = 0; while (strlen (tmp_pathspec) && !has_symlinks) { lt_debugprintf (__FILE__, __LINE__, "checking path component for symlinks: %s\n", tmp_pathspec); if (lstat (tmp_pathspec, &s) == 0) { if (S_ISLNK (s.st_mode) != 0) { has_symlinks = 1; break; } /* search backwards for last DIR_SEPARATOR */ p = tmp_pathspec + strlen (tmp_pathspec) - 1; while ((p > tmp_pathspec) && (!IS_DIR_SEPARATOR (*p))) p--; if ((p == tmp_pathspec) && (!IS_DIR_SEPARATOR (*p))) { /* no more DIR_SEPARATORS left */ break; } *p = '\0'; } else { lt_fatal (__FILE__, __LINE__, "error accessing file \"%s\": %s", tmp_pathspec, nonnull (strerror (errno))); } } XFREE (tmp_pathspec); if (!has_symlinks) { return xstrdup (pathspec); } tmp_pathspec = realpath (pathspec, buf); if (tmp_pathspec == 0) { lt_fatal (__FILE__, __LINE__, "could not follow symlinks for %s", pathspec); } return xstrdup (tmp_pathspec); #endif } char * strendzap (char *str, const char *pat) { size_t len, patlen; assert (str != NULL); assert (pat != NULL); len = strlen (str); patlen = strlen (pat); if (patlen <= len) { str += len - patlen; if (STREQ (str, pat)) *str = '\0'; } return str; } void lt_debugprintf (const char *file, int line, const char *fmt, ...) { va_list args; if (lt_debug) { (void) fprintf (stderr, "%s:%s:%d: ", program_name, file, line); va_start (args, fmt); (void) vfprintf (stderr, fmt, args); va_end (args); } } static void lt_error_core (int exit_status, const char *file, int line, const char *mode, const char *message, va_list ap) { fprintf (stderr, "%s:%s:%d: %s: ", program_name, file, line, mode); vfprintf (stderr, message, ap); fprintf (stderr, ".\n"); if (exit_status >= 0) exit (exit_status); } void lt_fatal (const char *file, int line, const char *message, ...) { va_list ap; va_start (ap, message); lt_error_core (EXIT_FAILURE, file, line, "FATAL", message, ap); va_end (ap); } static const char * nonnull (const char *s) { return s ? s : "(null)"; } static const char * nonempty (const char *s) { return (s && !*s) ? "(empty)" : nonnull (s); } void lt_setenv (const char *name, const char *value) { lt_debugprintf (__FILE__, __LINE__, "(lt_setenv) setting '%s' to '%s'\n", nonnull (name), nonnull (value)); { #ifdef HAVE_SETENV /* always make a copy, for consistency with !HAVE_SETENV */ char *str = xstrdup (value); setenv (name, str, 1); #else size_t len = strlen (name) + 1 + strlen (value) + 1; char *str = XMALLOC (char, len); sprintf (str, "%s=%s", name, value); if (putenv (str) != EXIT_SUCCESS) { XFREE (str); } #endif } } char * lt_extend_str (const char *orig_value, const char *add, int to_end) { char *new_value; if (orig_value && *orig_value) { size_t orig_value_len = strlen (orig_value); size_t add_len = strlen (add); new_value = XMALLOC (char, add_len + orig_value_len + 1); if (to_end) { strcpy (new_value, orig_value); strcpy (new_value + orig_value_len, add); } else { strcpy (new_value, add); strcpy (new_value + add_len, orig_value); } } else { new_value = xstrdup (add); } return new_value; } void lt_update_exe_path (const char *name, const char *value) { lt_debugprintf (__FILE__, __LINE__, "(lt_update_exe_path) modifying '%s' by prepending '%s'\n", nonnull (name), nonnull (value)); if (name && *name && value && *value) { char *new_value = lt_extend_str (getenv (name), value, 0); /* some systems can't cope with a ':'-terminated path #' */ size_t len = strlen (new_value); while ((len > 0) && IS_PATH_SEPARATOR (new_value[len-1])) { new_value[--len] = '\0'; } lt_setenv (name, new_value); XFREE (new_value); } } void lt_update_lib_path (const char *name, const char *value) { lt_debugprintf (__FILE__, __LINE__, "(lt_update_lib_path) modifying '%s' by prepending '%s'\n", nonnull (name), nonnull (value)); if (name && *name && value && *value) { char *new_value = lt_extend_str (getenv (name), value, 0); lt_setenv (name, new_value); XFREE (new_value); } } EOF case $host_os in mingw*) cat <<"EOF" /* Prepares an argument vector before calling spawn(). Note that spawn() does not by itself call the command interpreter (getenv ("COMSPEC") != NULL ? getenv ("COMSPEC") : ({ OSVERSIONINFO v; v.dwOSVersionInfoSize = sizeof(OSVERSIONINFO); GetVersionEx(&v); v.dwPlatformId == VER_PLATFORM_WIN32_NT; }) ? "cmd.exe" : "command.com"). Instead it simply concatenates the arguments, separated by ' ', and calls CreateProcess(). We must quote the arguments since Win32 CreateProcess() interprets characters like ' ', '\t', '\\', '"' (but not '<' and '>') in a special way: - Space and tab are interpreted as delimiters. They are not treated as delimiters if they are surrounded by double quotes: "...". - Unescaped double quotes are removed from the input. Their only effect is that within double quotes, space and tab are treated like normal characters. - Backslashes not followed by double quotes are not special. - But 2*n+1 backslashes followed by a double quote become n backslashes followed by a double quote (n >= 0): \" -> " \\\" -> \" \\\\\" -> \\" */ #define SHELL_SPECIAL_CHARS "\"\\ \001\002\003\004\005\006\007\010\011\012\013\014\015\016\017\020\021\022\023\024\025\026\027\030\031\032\033\034\035\036\037" #define SHELL_SPACE_CHARS " \001\002\003\004\005\006\007\010\011\012\013\014\015\016\017\020\021\022\023\024\025\026\027\030\031\032\033\034\035\036\037" char ** prepare_spawn (char **argv) { size_t argc; char **new_argv; size_t i; /* Count number of arguments. */ for (argc = 0; argv[argc] != NULL; argc++) ; /* Allocate new argument vector. */ new_argv = XMALLOC (char *, argc + 1); /* Put quoted arguments into the new argument vector. */ for (i = 0; i < argc; i++) { const char *string = argv[i]; if (string[0] == '\0') new_argv[i] = xstrdup ("\"\""); else if (strpbrk (string, SHELL_SPECIAL_CHARS) != NULL) { int quote_around = (strpbrk (string, SHELL_SPACE_CHARS) != NULL); size_t length; unsigned int backslashes; const char *s; char *quoted_string; char *p; length = 0; backslashes = 0; if (quote_around) length++; for (s = string; *s != '\0'; s++) { char c = *s; if (c == '"') length += backslashes + 1; length++; if (c == '\\') backslashes++; else backslashes = 0; } if (quote_around) length += backslashes + 1; quoted_string = XMALLOC (char, length + 1); p = quoted_string; backslashes = 0; if (quote_around) *p++ = '"'; for (s = string; *s != '\0'; s++) { char c = *s; if (c == '"') { unsigned int j; for (j = backslashes + 1; j > 0; j--) *p++ = '\\'; } *p++ = c; if (c == '\\') backslashes++; else backslashes = 0; } if (quote_around) { unsigned int j; for (j = backslashes; j > 0; j--) *p++ = '\\'; *p++ = '"'; } *p = '\0'; new_argv[i] = quoted_string; } else new_argv[i] = (char *) string; } new_argv[argc] = NULL; return new_argv; } EOF ;; esac cat <<"EOF" void lt_dump_script (FILE* f) { EOF func_emit_wrapper yes | $SED -n -e ' s/^\(.\{79\}\)\(..*\)/\1\ \2/ h s/\([\\"]\)/\\\1/g s/$/\\n/ s/\([^\n]*\).*/ fputs ("\1", f);/p g D' cat <<"EOF" } EOF } # end: func_emit_cwrapperexe_src # func_win32_import_lib_p ARG # True if ARG is an import lib, as indicated by $file_magic_cmd func_win32_import_lib_p () { $debug_cmd case `eval $file_magic_cmd \"\$1\" 2>/dev/null | $SED -e 10q` in *import*) : ;; *) false ;; esac } # func_suncc_cstd_abi # !!ONLY CALL THIS FOR SUN CC AFTER $compile_command IS FULLY EXPANDED!! # Several compiler flags select an ABI that is incompatible with the # Cstd library. Avoid specifying it if any are in CXXFLAGS. func_suncc_cstd_abi () { $debug_cmd case " $compile_command " in *" -compat=g "*|*\ -std=c++[0-9][0-9]\ *|*" -library=stdcxx4 "*|*" -library=stlport4 "*) suncc_use_cstd_abi=no ;; *) suncc_use_cstd_abi=yes ;; esac } # func_mode_link arg... func_mode_link () { $debug_cmd case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) # It is impossible to link a dll without this setting, and # we shouldn't force the makefile maintainer to figure out # what system we are compiling for in order to pass an extra # flag for every libtool invocation. # allow_undefined=no # FIXME: Unfortunately, there are problems with the above when trying # to make a dll that has undefined symbols, in which case not # even a static library is built. For now, we need to specify # -no-undefined on the libtool link line when we can be certain # that all symbols are satisfied, otherwise we get a static library. allow_undefined=yes ;; *) allow_undefined=yes ;; esac libtool_args=$nonopt base_compile="$nonopt $@" compile_command=$nonopt finalize_command=$nonopt compile_rpath= finalize_rpath= compile_shlibpath= finalize_shlibpath= convenience= old_convenience= deplibs= old_deplibs= compiler_flags= linker_flags= dllsearchpath= lib_search_path=`pwd` inst_prefix_dir= new_inherited_linker_flags= avoid_version=no bindir= dlfiles= dlprefiles= dlself=no export_dynamic=no export_symbols= export_symbols_regex= generated= libobjs= ltlibs= module=no no_install=no objs= os2dllname= non_pic_objects= precious_files_regex= prefer_static_libs=no preload=false prev= prevarg= release= rpath= xrpath= perm_rpath= temp_rpath= thread_safe=no vinfo= vinfo_number=no weak_libs= single_module=$wl-single_module func_infer_tag $base_compile # We need to know -static, to get the right output filenames. for arg do case $arg in -shared) test yes != "$build_libtool_libs" \ && func_fatal_configuration "cannot build a shared library" build_old_libs=no break ;; -all-static | -static | -static-libtool-libs) case $arg in -all-static) if test yes = "$build_libtool_libs" && test -z "$link_static_flag"; then func_warning "complete static linking is impossible in this configuration" fi if test -n "$link_static_flag"; then dlopen_self=$dlopen_self_static fi prefer_static_libs=yes ;; -static) if test -z "$pic_flag" && test -n "$link_static_flag"; then dlopen_self=$dlopen_self_static fi prefer_static_libs=built ;; -static-libtool-libs) if test -z "$pic_flag" && test -n "$link_static_flag"; then dlopen_self=$dlopen_self_static fi prefer_static_libs=yes ;; esac build_libtool_libs=no build_old_libs=yes break ;; esac done # See if our shared archives depend on static archives. test -n "$old_archive_from_new_cmds" && build_old_libs=yes # Go through the arguments, transforming them on the way. while test "$#" -gt 0; do arg=$1 shift func_quote_arg pretty,unquoted "$arg" qarg=$func_quote_arg_unquoted_result func_append libtool_args " $func_quote_arg_result" # If the previous option needs an argument, assign it. if test -n "$prev"; then case $prev in output) func_append compile_command " @OUTPUT@" func_append finalize_command " @OUTPUT@" ;; esac case $prev in bindir) bindir=$arg prev= continue ;; dlfiles|dlprefiles) $preload || { # Add the symbol object into the linking commands. func_append compile_command " @SYMFILE@" func_append finalize_command " @SYMFILE@" preload=: } case $arg in *.la | *.lo) ;; # We handle these cases below. force) if test no = "$dlself"; then dlself=needless export_dynamic=yes fi prev= continue ;; self) if test dlprefiles = "$prev"; then dlself=yes elif test dlfiles = "$prev" && test yes != "$dlopen_self"; then dlself=yes else dlself=needless export_dynamic=yes fi prev= continue ;; *) if test dlfiles = "$prev"; then func_append dlfiles " $arg" else func_append dlprefiles " $arg" fi prev= continue ;; esac ;; expsyms) export_symbols=$arg test -f "$arg" \ || func_fatal_error "symbol file '$arg' does not exist" prev= continue ;; expsyms_regex) export_symbols_regex=$arg prev= continue ;; framework) case $host in *-*-darwin*) case "$deplibs " in *" $qarg.ltframework "*) ;; *) func_append deplibs " $qarg.ltframework" # this is fixed later ;; esac ;; esac prev= continue ;; inst_prefix) inst_prefix_dir=$arg prev= continue ;; mllvm) # Clang does not use LLVM to link, so we can simply discard any # '-mllvm $arg' options when doing the link step. prev= continue ;; objectlist) if test -f "$arg"; then save_arg=$arg moreargs= for fil in `cat "$save_arg"` do # func_append moreargs " $fil" arg=$fil # A libtool-controlled object. # Check to see that this really is a libtool object. if func_lalib_unsafe_p "$arg"; then pic_object= non_pic_object= # Read the .lo file func_source "$arg" if test -z "$pic_object" || test -z "$non_pic_object" || test none = "$pic_object" && test none = "$non_pic_object"; then func_fatal_error "cannot find name of object for '$arg'" fi # Extract subdirectory from the argument. func_dirname "$arg" "/" "" xdir=$func_dirname_result if test none != "$pic_object"; then # Prepend the subdirectory the object is found in. pic_object=$xdir$pic_object if test dlfiles = "$prev"; then if test yes = "$build_libtool_libs" && test yes = "$dlopen_support"; then func_append dlfiles " $pic_object" prev= continue else # If libtool objects are unsupported, then we need to preload. prev=dlprefiles fi fi # CHECK ME: I think I busted this. -Ossama if test dlprefiles = "$prev"; then # Preload the old-style object. func_append dlprefiles " $pic_object" prev= fi # A PIC object. func_append libobjs " $pic_object" arg=$pic_object fi # Non-PIC object. if test none != "$non_pic_object"; then # Prepend the subdirectory the object is found in. non_pic_object=$xdir$non_pic_object # A standard non-PIC object func_append non_pic_objects " $non_pic_object" if test -z "$pic_object" || test none = "$pic_object"; then arg=$non_pic_object fi else # If the PIC object exists, use it instead. # $xdir was prepended to $pic_object above. non_pic_object=$pic_object func_append non_pic_objects " $non_pic_object" fi else # Only an error if not doing a dry-run. if $opt_dry_run; then # Extract subdirectory from the argument. func_dirname "$arg" "/" "" xdir=$func_dirname_result func_lo2o "$arg" pic_object=$xdir$objdir/$func_lo2o_result non_pic_object=$xdir$func_lo2o_result func_append libobjs " $pic_object" func_append non_pic_objects " $non_pic_object" else func_fatal_error "'$arg' is not a valid libtool object" fi fi done else func_fatal_error "link input file '$arg' does not exist" fi arg=$save_arg prev= continue ;; os2dllname) os2dllname=$arg prev= continue ;; precious_regex) precious_files_regex=$arg prev= continue ;; release) release=-$arg prev= continue ;; rpath | xrpath) # We need an absolute path. case $arg in [\\/]* | [A-Za-z]:[\\/]*) ;; *) func_fatal_error "only absolute run-paths are allowed" ;; esac if test rpath = "$prev"; then case "$rpath " in *" $arg "*) ;; *) func_append rpath " $arg" ;; esac else case "$xrpath " in *" $arg "*) ;; *) func_append xrpath " $arg" ;; esac fi prev= continue ;; shrext) shrext_cmds=$arg prev= continue ;; weak) func_append weak_libs " $arg" prev= continue ;; xassembler) func_append compiler_flags " -Xassembler $qarg" prev= func_append compile_command " -Xassembler $qarg" func_append finalize_command " -Xassembler $qarg" continue ;; xcclinker) func_append linker_flags " $qarg" func_append compiler_flags " $qarg" prev= func_append compile_command " $qarg" func_append finalize_command " $qarg" continue ;; xcompiler) func_append compiler_flags " $qarg" prev= func_append compile_command " $qarg" func_append finalize_command " $qarg" continue ;; xlinker) func_append linker_flags " $qarg" func_append compiler_flags " $wl$qarg" prev= func_append compile_command " $wl$qarg" func_append finalize_command " $wl$qarg" continue ;; *) eval "$prev=\"\$arg\"" prev= continue ;; esac fi # test -n "$prev" prevarg=$arg case $arg in -all-static) if test -n "$link_static_flag"; then # See comment for -static flag below, for more details. func_append compile_command " $link_static_flag" func_append finalize_command " $link_static_flag" fi continue ;; -allow-undefined) # FIXME: remove this flag sometime in the future. func_fatal_error "'-allow-undefined' must not be used because it is the default" ;; -avoid-version) avoid_version=yes continue ;; -bindir) prev=bindir continue ;; -dlopen) prev=dlfiles continue ;; -dlpreopen) prev=dlprefiles continue ;; -export-dynamic) export_dynamic=yes continue ;; -export-symbols | -export-symbols-regex) if test -n "$export_symbols" || test -n "$export_symbols_regex"; then func_fatal_error "more than one -exported-symbols argument is not allowed" fi if test X-export-symbols = "X$arg"; then prev=expsyms else prev=expsyms_regex fi continue ;; -framework) prev=framework continue ;; -inst-prefix-dir) prev=inst_prefix continue ;; # The native IRIX linker understands -LANG:*, -LIST:* and -LNO:* # so, if we see these flags be careful not to treat them like -L -L[A-Z][A-Z]*:*) case $with_gcc/$host in no/*-*-irix* | /*-*-irix*) func_append compile_command " $arg" func_append finalize_command " $arg" ;; esac continue ;; -L*) func_stripname "-L" '' "$arg" if test -z "$func_stripname_result"; then if test "$#" -gt 0; then func_fatal_error "require no space between '-L' and '$1'" else func_fatal_error "need path for '-L' option" fi fi func_resolve_sysroot "$func_stripname_result" dir=$func_resolve_sysroot_result # We need an absolute path. case $dir in [\\/]* | [A-Za-z]:[\\/]*) ;; *) absdir=`cd "$dir" && pwd` test -z "$absdir" && \ func_fatal_error "cannot determine absolute directory name of '$dir'" dir=$absdir ;; esac case "$deplibs " in *" -L$dir "* | *" $arg "*) # Will only happen for absolute or sysroot arguments ;; *) # Preserve sysroot, but never include relative directories case $dir in [\\/]* | [A-Za-z]:[\\/]* | =*) func_append deplibs " $arg" ;; *) func_append deplibs " -L$dir" ;; esac func_append lib_search_path " $dir" ;; esac case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) testbindir=`$ECHO "$dir" | $SED 's*/lib$*/bin*'` case :$dllsearchpath: in *":$dir:"*) ;; ::) dllsearchpath=$dir;; *) func_append dllsearchpath ":$dir";; esac case :$dllsearchpath: in *":$testbindir:"*) ;; ::) dllsearchpath=$testbindir;; *) func_append dllsearchpath ":$testbindir";; esac ;; esac continue ;; -l*) if test X-lc = "X$arg" || test X-lm = "X$arg"; then case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-beos* | *-cegcc* | *-*-haiku*) # These systems don't actually have a C or math library (as such) continue ;; *-*-os2*) # These systems don't actually have a C library (as such) test X-lc = "X$arg" && continue ;; *-*-openbsd* | *-*-freebsd* | *-*-dragonfly* | *-*-bitrig* | *-*-midnightbsd*) # Do not include libc due to us having libc/libc_r. test X-lc = "X$arg" && continue ;; *-*-rhapsody* | *-*-darwin1.[012]) # Rhapsody C and math libraries are in the System framework func_append deplibs " System.ltframework" continue ;; *-*-sco3.2v5* | *-*-sco5v6*) # Causes problems with __ctype test X-lc = "X$arg" && continue ;; *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*) # Compiler inserts libc in the correct place for threads to work test X-lc = "X$arg" && continue ;; esac elif test X-lc_r = "X$arg"; then case $host in *-*-openbsd* | *-*-freebsd* | *-*-dragonfly* | *-*-bitrig* | *-*-midnightbsd*) # Do not include libc_r directly, use -pthread flag. continue ;; esac fi func_append deplibs " $arg" continue ;; -mllvm) prev=mllvm continue ;; -module) module=yes continue ;; # Tru64 UNIX uses -model [arg] to determine the layout of C++ # classes, name mangling, and exception handling. # Darwin uses the -arch flag to determine output architecture. -model|-arch|-isysroot|--sysroot) func_append compiler_flags " $arg" func_append compile_command " $arg" func_append finalize_command " $arg" prev=xcompiler continue ;; # Solaris ld rejects as of 11.4. Refer to Oracle bug 22985199. -pthread) case $host in *solaris2*) ;; *) case "$new_inherited_linker_flags " in *" $arg "*) ;; * ) func_append new_inherited_linker_flags " $arg" ;; esac ;; esac continue ;; -mt|-mthreads|-kthread|-Kthread|-pthreads|--thread-safe \ |-threads|-fopenmp|-openmp|-mp|-xopenmp|-omp|-qsmp=*) func_append compiler_flags " $arg" func_append compile_command " $arg" func_append finalize_command " $arg" case "$new_inherited_linker_flags " in *" $arg "*) ;; * ) func_append new_inherited_linker_flags " $arg" ;; esac continue ;; -multi_module) single_module=$wl-multi_module continue ;; -no-fast-install) fast_install=no continue ;; -no-install) case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-darwin* | *-cegcc*) # The PATH hackery in wrapper scripts is required on Windows # and Darwin in order for the loader to find any dlls it needs. func_warning "'-no-install' is ignored for $host" func_warning "assuming '-no-fast-install' instead" fast_install=no ;; *) no_install=yes ;; esac continue ;; -no-undefined) allow_undefined=no continue ;; -objectlist) prev=objectlist continue ;; -os2dllname) prev=os2dllname continue ;; -o) prev=output ;; -precious-files-regex) prev=precious_regex continue ;; -release) prev=release continue ;; -rpath) prev=rpath continue ;; -R) prev=xrpath continue ;; -R*) func_stripname '-R' '' "$arg" dir=$func_stripname_result # We need an absolute path. case $dir in [\\/]* | [A-Za-z]:[\\/]*) ;; =*) func_stripname '=' '' "$dir" dir=$lt_sysroot$func_stripname_result ;; *) func_fatal_error "only absolute run-paths are allowed" ;; esac case "$xrpath " in *" $dir "*) ;; *) func_append xrpath " $dir" ;; esac continue ;; -shared) # The effects of -shared are defined in a previous loop. continue ;; -shrext) prev=shrext continue ;; -static | -static-libtool-libs) # The effects of -static are defined in a previous loop. # We used to do the same as -all-static on platforms that # didn't have a PIC flag, but the assumption that the effects # would be equivalent was wrong. It would break on at least # Digital Unix and AIX. continue ;; -thread-safe) thread_safe=yes continue ;; -version-info) prev=vinfo continue ;; -version-number) prev=vinfo vinfo_number=yes continue ;; -weak) prev=weak continue ;; -Wc,*) func_stripname '-Wc,' '' "$arg" args=$func_stripname_result arg= save_ifs=$IFS; IFS=, for flag in $args; do IFS=$save_ifs func_quote_arg pretty "$flag" func_append arg " $func_quote_arg_result" func_append compiler_flags " $func_quote_arg_result" done IFS=$save_ifs func_stripname ' ' '' "$arg" arg=$func_stripname_result ;; -Wl,*) func_stripname '-Wl,' '' "$arg" args=$func_stripname_result arg= save_ifs=$IFS; IFS=, for flag in $args; do IFS=$save_ifs func_quote_arg pretty "$flag" func_append arg " $wl$func_quote_arg_result" func_append compiler_flags " $wl$func_quote_arg_result" func_append linker_flags " $func_quote_arg_result" done IFS=$save_ifs func_stripname ' ' '' "$arg" arg=$func_stripname_result ;; -Xassembler) prev=xassembler continue ;; -Xcompiler) prev=xcompiler continue ;; -Xlinker) prev=xlinker continue ;; -XCClinker) prev=xcclinker continue ;; # -msg_* for osf cc -msg_*) func_quote_arg pretty "$arg" arg=$func_quote_arg_result ;; # Flags to be passed through unchanged, with rationale: # -64, -mips[0-9] enable 64-bit mode for the SGI compiler # -r[0-9][0-9]* specify processor for the SGI compiler # -xarch=*, -xtarget=* enable 64-bit mode for the Sun compiler # +DA*, +DD* enable 64-bit mode for the HP compiler # -q* compiler args for the IBM compiler # -m*, -t[45]*, -txscale* architecture-specific flags for GCC # -F/path path to uninstalled frameworks, gcc on darwin # -p, -pg, --coverage, -fprofile-* profiling flags for GCC # -fstack-protector* stack protector flags for GCC # @file GCC response files # -tp=* Portland pgcc target processor selection # --sysroot=* for sysroot support # -O*, -g*, -flto*, -fwhopr*, -fuse-linker-plugin GCC link-time optimization # -specs=* GCC specs files # -stdlib=* select c++ std lib with clang # -fsanitize=* Clang/GCC memory and address sanitizer # -fuse-ld=* Linker select flags for GCC # -static-* direct GCC to link specific libraries statically # -fcilkplus Cilk Plus language extension features for C/C++ # -Wa,* Pass flags directly to the assembler -64|-mips[0-9]|-r[0-9][0-9]*|-xarch=*|-xtarget=*|+DA*|+DD*|-q*|-m*| \ -t[45]*|-txscale*|-p|-pg|--coverage|-fprofile-*|-F*|@*|-tp=*|--sysroot=*| \ -O*|-g*|-flto*|-fwhopr*|-fuse-linker-plugin|-fstack-protector*|-stdlib=*| \ -specs=*|-fsanitize=*|-fuse-ld=*|-static-*|-fcilkplus|-Wa,*) func_quote_arg pretty "$arg" arg=$func_quote_arg_result func_append compile_command " $arg" func_append finalize_command " $arg" func_append compiler_flags " $arg" continue ;; -Z*) if test os2 = "`expr $host : '.*\(os2\)'`"; then # OS/2 uses -Zxxx to specify OS/2-specific options compiler_flags="$compiler_flags $arg" func_append compile_command " $arg" func_append finalize_command " $arg" case $arg in -Zlinker | -Zstack) prev=xcompiler ;; esac continue else # Otherwise treat like 'Some other compiler flag' below func_quote_arg pretty "$arg" arg=$func_quote_arg_result fi ;; # Some other compiler flag. -* | +*) func_quote_arg pretty "$arg" arg=$func_quote_arg_result ;; *.$objext) # A standard object. func_append objs " $arg" ;; *.lo) # A libtool-controlled object. # Check to see that this really is a libtool object. if func_lalib_unsafe_p "$arg"; then pic_object= non_pic_object= # Read the .lo file func_source "$arg" if test -z "$pic_object" || test -z "$non_pic_object" || test none = "$pic_object" && test none = "$non_pic_object"; then func_fatal_error "cannot find name of object for '$arg'" fi # Extract subdirectory from the argument. func_dirname "$arg" "/" "" xdir=$func_dirname_result test none = "$pic_object" || { # Prepend the subdirectory the object is found in. pic_object=$xdir$pic_object if test dlfiles = "$prev"; then if test yes = "$build_libtool_libs" && test yes = "$dlopen_support"; then func_append dlfiles " $pic_object" prev= continue else # If libtool objects are unsupported, then we need to preload. prev=dlprefiles fi fi # CHECK ME: I think I busted this. -Ossama if test dlprefiles = "$prev"; then # Preload the old-style object. func_append dlprefiles " $pic_object" prev= fi # A PIC object. func_append libobjs " $pic_object" arg=$pic_object } # Non-PIC object. if test none != "$non_pic_object"; then # Prepend the subdirectory the object is found in. non_pic_object=$xdir$non_pic_object # A standard non-PIC object func_append non_pic_objects " $non_pic_object" if test -z "$pic_object" || test none = "$pic_object"; then arg=$non_pic_object fi else # If the PIC object exists, use it instead. # $xdir was prepended to $pic_object above. non_pic_object=$pic_object func_append non_pic_objects " $non_pic_object" fi else # Only an error if not doing a dry-run. if $opt_dry_run; then # Extract subdirectory from the argument. func_dirname "$arg" "/" "" xdir=$func_dirname_result func_lo2o "$arg" pic_object=$xdir$objdir/$func_lo2o_result non_pic_object=$xdir$func_lo2o_result func_append libobjs " $pic_object" func_append non_pic_objects " $non_pic_object" else func_fatal_error "'$arg' is not a valid libtool object" fi fi ;; *.$libext) # An archive. func_append deplibs " $arg" func_append old_deplibs " $arg" continue ;; *.la) # A libtool-controlled library. func_resolve_sysroot "$arg" if test dlfiles = "$prev"; then # This library was specified with -dlopen. func_append dlfiles " $func_resolve_sysroot_result" prev= elif test dlprefiles = "$prev"; then # The library was specified with -dlpreopen. func_append dlprefiles " $func_resolve_sysroot_result" prev= else func_append deplibs " $func_resolve_sysroot_result" fi continue ;; # Some other compiler argument. *) # Unknown arguments in both finalize_command and compile_command need # to be aesthetically quoted because they are evaled later. func_quote_arg pretty "$arg" arg=$func_quote_arg_result ;; esac # arg # Now actually substitute the argument into the commands. if test -n "$arg"; then func_append compile_command " $arg" func_append finalize_command " $arg" fi done # argument parsing loop test -n "$prev" && \ func_fatal_help "the '$prevarg' option requires an argument" if test yes = "$export_dynamic" && test -n "$export_dynamic_flag_spec"; then eval arg=\"$export_dynamic_flag_spec\" func_append compile_command " $arg" func_append finalize_command " $arg" fi oldlibs= # calculate the name of the file, without its directory func_basename "$output" outputname=$func_basename_result libobjs_save=$libobjs if test -n "$shlibpath_var"; then # get the directories listed in $shlibpath_var eval shlib_search_path=\`\$ECHO \"\$$shlibpath_var\" \| \$SED \'s/:/ /g\'\` else shlib_search_path= fi eval sys_lib_search_path=\"$sys_lib_search_path_spec\" eval sys_lib_dlsearch_path=\"$sys_lib_dlsearch_path_spec\" # Definition is injected by LT_CONFIG during libtool generation. func_munge_path_list sys_lib_dlsearch_path "$LT_SYS_LIBRARY_PATH" func_dirname "$output" "/" "" output_objdir=$func_dirname_result$objdir func_to_tool_file "$output_objdir/" tool_output_objdir=$func_to_tool_file_result # Create the object directory. func_mkdir_p "$output_objdir" # Determine the type of output case $output in "") func_fatal_help "you must specify an output file" ;; *.$libext) linkmode=oldlib ;; *.lo | *.$objext) linkmode=obj ;; *.la) linkmode=lib ;; *) linkmode=prog ;; # Anything else should be a program. esac specialdeplibs= libs= # Find all interdependent deplibs by searching for libraries # that are linked more than once (e.g. -la -lb -la) for deplib in $deplibs; do if $opt_preserve_dup_deps; then case "$libs " in *" $deplib "*) func_append specialdeplibs " $deplib" ;; esac fi func_append libs " $deplib" done if test lib = "$linkmode"; then libs="$predeps $libs $compiler_lib_search_path $postdeps" # Compute libraries that are listed more than once in $predeps # $postdeps and mark them as special (i.e., whose duplicates are # not to be eliminated). pre_post_deps= if $opt_duplicate_compiler_generated_deps; then for pre_post_dep in $predeps $postdeps; do case "$pre_post_deps " in *" $pre_post_dep "*) func_append specialdeplibs " $pre_post_deps" ;; esac func_append pre_post_deps " $pre_post_dep" done fi pre_post_deps= fi deplibs= newdependency_libs= newlib_search_path= need_relink=no # whether we're linking any uninstalled libtool libraries notinst_deplibs= # not-installed libtool libraries notinst_path= # paths that contain not-installed libtool libraries case $linkmode in lib) passes="conv dlpreopen link" for file in $dlfiles $dlprefiles; do case $file in *.la) ;; *) func_fatal_help "libraries can '-dlopen' only libtool libraries: $file" ;; esac done ;; prog) compile_deplibs= finalize_deplibs= alldeplibs=false newdlfiles= newdlprefiles= passes="conv scan dlopen dlpreopen link" ;; *) passes="conv" ;; esac for pass in $passes; do # The preopen pass in lib mode reverses $deplibs; put it back here # so that -L comes before libs that need it for instance... if test lib,link = "$linkmode,$pass"; then ## FIXME: Find the place where the list is rebuilt in the wrong ## order, and fix it there properly tmp_deplibs= for deplib in $deplibs; do tmp_deplibs="$deplib $tmp_deplibs" done deplibs=$tmp_deplibs fi if test lib,link = "$linkmode,$pass" || test prog,scan = "$linkmode,$pass"; then libs=$deplibs deplibs= fi if test prog = "$linkmode"; then case $pass in dlopen) libs=$dlfiles ;; dlpreopen) libs=$dlprefiles ;; link) libs="$deplibs %DEPLIBS%" test "X$link_all_deplibs" != Xno && libs="$libs $dependency_libs" ;; esac fi if test lib,dlpreopen = "$linkmode,$pass"; then # Collect and forward deplibs of preopened libtool libs for lib in $dlprefiles; do # Ignore non-libtool-libs dependency_libs= func_resolve_sysroot "$lib" case $lib in *.la) func_source "$func_resolve_sysroot_result" ;; esac # Collect preopened libtool deplibs, except any this library # has declared as weak libs for deplib in $dependency_libs; do func_basename "$deplib" deplib_base=$func_basename_result case " $weak_libs " in *" $deplib_base "*) ;; *) func_append deplibs " $deplib" ;; esac done done libs=$dlprefiles fi if test dlopen = "$pass"; then # Collect dlpreopened libraries save_deplibs=$deplibs deplibs= fi for deplib in $libs; do lib= found=false case $deplib in -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe \ |-threads|-fopenmp|-openmp|-mp|-xopenmp|-omp|-qsmp=*) if test prog,link = "$linkmode,$pass"; then compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" else func_append compiler_flags " $deplib" if test lib = "$linkmode"; then case "$new_inherited_linker_flags " in *" $deplib "*) ;; * ) func_append new_inherited_linker_flags " $deplib" ;; esac fi fi continue ;; -l*) if test lib != "$linkmode" && test prog != "$linkmode"; then func_warning "'-l' is ignored for archives/objects" continue fi func_stripname '-l' '' "$deplib" name=$func_stripname_result if test lib = "$linkmode"; then searchdirs="$newlib_search_path $lib_search_path $compiler_lib_search_dirs $sys_lib_search_path $shlib_search_path" else searchdirs="$newlib_search_path $lib_search_path $sys_lib_search_path $shlib_search_path" fi for searchdir in $searchdirs; do for search_ext in .la $std_shrext .so .a; do # Search the libtool library lib=$searchdir/lib$name$search_ext if test -f "$lib"; then if test .la = "$search_ext"; then found=: else found=false fi break 2 fi done done if $found; then # deplib is a libtool library # If $allow_libtool_libs_with_static_runtimes && $deplib is a stdlib, # We need to do some special things here, and not later. if test yes = "$allow_libtool_libs_with_static_runtimes"; then case " $predeps $postdeps " in *" $deplib "*) if func_lalib_p "$lib"; then library_names= old_library= func_source "$lib" for l in $old_library $library_names; do ll=$l done if test "X$ll" = "X$old_library"; then # only static version available found=false func_dirname "$lib" "" "." ladir=$func_dirname_result lib=$ladir/$old_library if test prog,link = "$linkmode,$pass"; then compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" else deplibs="$deplib $deplibs" test lib = "$linkmode" && newdependency_libs="$deplib $newdependency_libs" fi continue fi fi ;; *) ;; esac fi else # deplib doesn't seem to be a libtool library if test prog,link = "$linkmode,$pass"; then compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" else deplibs="$deplib $deplibs" test lib = "$linkmode" && newdependency_libs="$deplib $newdependency_libs" fi continue fi ;; # -l *.ltframework) if test prog,link = "$linkmode,$pass"; then compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" else deplibs="$deplib $deplibs" if test lib = "$linkmode"; then case "$new_inherited_linker_flags " in *" $deplib "*) ;; * ) func_append new_inherited_linker_flags " $deplib" ;; esac fi fi continue ;; -L*) case $linkmode in lib) deplibs="$deplib $deplibs" test conv = "$pass" && continue newdependency_libs="$deplib $newdependency_libs" func_stripname '-L' '' "$deplib" func_resolve_sysroot "$func_stripname_result" func_append newlib_search_path " $func_resolve_sysroot_result" ;; prog) if test conv = "$pass"; then deplibs="$deplib $deplibs" continue fi if test scan = "$pass"; then deplibs="$deplib $deplibs" else compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" fi func_stripname '-L' '' "$deplib" func_resolve_sysroot "$func_stripname_result" func_append newlib_search_path " $func_resolve_sysroot_result" ;; *) func_warning "'-L' is ignored for archives/objects" ;; esac # linkmode continue ;; # -L -R*) if test link = "$pass"; then func_stripname '-R' '' "$deplib" func_resolve_sysroot "$func_stripname_result" dir=$func_resolve_sysroot_result # Make sure the xrpath contains only unique directories. case "$xrpath " in *" $dir "*) ;; *) func_append xrpath " $dir" ;; esac fi deplibs="$deplib $deplibs" continue ;; *.la) func_resolve_sysroot "$deplib" lib=$func_resolve_sysroot_result ;; *.$libext) if test conv = "$pass"; then deplibs="$deplib $deplibs" continue fi case $linkmode in lib) # Linking convenience modules into shared libraries is allowed, # but linking other static libraries is non-portable. case " $dlpreconveniencelibs " in *" $deplib "*) ;; *) valid_a_lib=false case $deplibs_check_method in match_pattern*) set dummy $deplibs_check_method; shift match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"` if eval "\$ECHO \"$deplib\"" 2>/dev/null | $SED 10q \ | $EGREP "$match_pattern_regex" > /dev/null; then valid_a_lib=: fi ;; pass_all) valid_a_lib=: ;; esac if $valid_a_lib; then echo $ECHO "*** Warning: Linking the shared library $output against the" $ECHO "*** static library $deplib is not portable!" deplibs="$deplib $deplibs" else echo $ECHO "*** Warning: Trying to link with static lib archive $deplib." echo "*** I have the capability to make that library automatically link in when" echo "*** you link to this library. But I can only do this if you have a" echo "*** shared version of the library, which you do not appear to have" echo "*** because the file extensions .$libext of this argument makes me believe" echo "*** that it is just a static archive that I should not use here." fi ;; esac continue ;; prog) if test link != "$pass"; then deplibs="$deplib $deplibs" else compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" fi continue ;; esac # linkmode ;; # *.$libext *.lo | *.$objext) if test conv = "$pass"; then deplibs="$deplib $deplibs" elif test prog = "$linkmode"; then if test dlpreopen = "$pass" || test yes != "$dlopen_support" || test no = "$build_libtool_libs"; then # If there is no dlopen support or we're linking statically, # we need to preload. func_append newdlprefiles " $deplib" compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" else func_append newdlfiles " $deplib" fi fi continue ;; %DEPLIBS%) alldeplibs=: continue ;; esac # case $deplib $found || test -f "$lib" \ || func_fatal_error "cannot find the library '$lib' or unhandled argument '$deplib'" # Check to see that this really is a libtool archive. func_lalib_unsafe_p "$lib" \ || func_fatal_error "'$lib' is not a valid libtool archive" func_dirname "$lib" "" "." ladir=$func_dirname_result dlname= dlopen= dlpreopen= libdir= library_names= old_library= inherited_linker_flags= # If the library was installed with an old release of libtool, # it will not redefine variables installed, or shouldnotlink installed=yes shouldnotlink=no avoidtemprpath= # Read the .la file func_source "$lib" # Convert "-framework foo" to "foo.ltframework" if test -n "$inherited_linker_flags"; then tmp_inherited_linker_flags=`$ECHO "$inherited_linker_flags" | $SED 's/-framework \([^ $]*\)/\1.ltframework/g'` for tmp_inherited_linker_flag in $tmp_inherited_linker_flags; do case " $new_inherited_linker_flags " in *" $tmp_inherited_linker_flag "*) ;; *) func_append new_inherited_linker_flags " $tmp_inherited_linker_flag";; esac done fi dependency_libs=`$ECHO " $dependency_libs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` if test lib,link = "$linkmode,$pass" || test prog,scan = "$linkmode,$pass" || { test prog != "$linkmode" && test lib != "$linkmode"; }; then test -n "$dlopen" && func_append dlfiles " $dlopen" test -n "$dlpreopen" && func_append dlprefiles " $dlpreopen" fi if test conv = "$pass"; then # Only check for convenience libraries deplibs="$lib $deplibs" if test -z "$libdir"; then if test -z "$old_library"; then func_fatal_error "cannot find name of link library for '$lib'" fi # It is a libtool convenience library, so add in its objects. func_append convenience " $ladir/$objdir/$old_library" func_append old_convenience " $ladir/$objdir/$old_library" tmp_libs= for deplib in $dependency_libs; do deplibs="$deplib $deplibs" if $opt_preserve_dup_deps; then case "$tmp_libs " in *" $deplib "*) func_append specialdeplibs " $deplib" ;; esac fi func_append tmp_libs " $deplib" done elif test prog != "$linkmode" && test lib != "$linkmode"; then func_fatal_error "'$lib' is not a convenience library" fi continue fi # $pass = conv # Get the name of the library we link against. linklib= if test -n "$old_library" && { test yes = "$prefer_static_libs" || test built,no = "$prefer_static_libs,$installed"; }; then linklib=$old_library else for l in $old_library $library_names; do linklib=$l done fi if test -z "$linklib"; then func_fatal_error "cannot find name of link library for '$lib'" fi # This library was specified with -dlopen. if test dlopen = "$pass"; then test -z "$libdir" \ && func_fatal_error "cannot -dlopen a convenience library: '$lib'" if test -z "$dlname" || test yes != "$dlopen_support" || test no = "$build_libtool_libs" then # If there is no dlname, no dlopen support or we're linking # statically, we need to preload. We also need to preload any # dependent libraries so libltdl's deplib preloader doesn't # bomb out in the load deplibs phase. func_append dlprefiles " $lib $dependency_libs" else func_append newdlfiles " $lib" fi continue fi # $pass = dlopen # We need an absolute path. case $ladir in [\\/]* | [A-Za-z]:[\\/]*) abs_ladir=$ladir ;; *) abs_ladir=`cd "$ladir" && pwd` if test -z "$abs_ladir"; then func_warning "cannot determine absolute directory name of '$ladir'" func_warning "passing it literally to the linker, although it might fail" abs_ladir=$ladir fi ;; esac func_basename "$lib" laname=$func_basename_result # Find the relevant object directory and library name. if test yes = "$installed"; then if test ! -f "$lt_sysroot$libdir/$linklib" && test -f "$abs_ladir/$linklib"; then func_warning "library '$lib' was moved." dir=$ladir absdir=$abs_ladir libdir=$abs_ladir else dir=$lt_sysroot$libdir absdir=$lt_sysroot$libdir fi test yes = "$hardcode_automatic" && avoidtemprpath=yes else if test ! -f "$ladir/$objdir/$linklib" && test -f "$abs_ladir/$linklib"; then dir=$ladir absdir=$abs_ladir # Remove this search path later func_append notinst_path " $abs_ladir" else dir=$ladir/$objdir absdir=$abs_ladir/$objdir # Remove this search path later func_append notinst_path " $abs_ladir" fi fi # $installed = yes func_stripname 'lib' '.la' "$laname" name=$func_stripname_result # This library was specified with -dlpreopen. if test dlpreopen = "$pass"; then if test -z "$libdir" && test prog = "$linkmode"; then func_fatal_error "only libraries may -dlpreopen a convenience library: '$lib'" fi case $host in # special handling for platforms with PE-DLLs. *cygwin* | *mingw* | *cegcc* ) # Linker will automatically link against shared library if both # static and shared are present. Therefore, ensure we extract # symbols from the import library if a shared library is present # (otherwise, the dlopen module name will be incorrect). We do # this by putting the import library name into $newdlprefiles. # We recover the dlopen module name by 'saving' the la file # name in a special purpose variable, and (later) extracting the # dlname from the la file. if test -n "$dlname"; then func_tr_sh "$dir/$linklib" eval "libfile_$func_tr_sh_result=\$abs_ladir/\$laname" func_append newdlprefiles " $dir/$linklib" else func_append newdlprefiles " $dir/$old_library" # Keep a list of preopened convenience libraries to check # that they are being used correctly in the link pass. test -z "$libdir" && \ func_append dlpreconveniencelibs " $dir/$old_library" fi ;; * ) # Prefer using a static library (so that no silly _DYNAMIC symbols # are required to link). if test -n "$old_library"; then func_append newdlprefiles " $dir/$old_library" # Keep a list of preopened convenience libraries to check # that they are being used correctly in the link pass. test -z "$libdir" && \ func_append dlpreconveniencelibs " $dir/$old_library" # Otherwise, use the dlname, so that lt_dlopen finds it. elif test -n "$dlname"; then func_append newdlprefiles " $dir/$dlname" else func_append newdlprefiles " $dir/$linklib" fi ;; esac fi # $pass = dlpreopen if test -z "$libdir"; then # Link the convenience library if test lib = "$linkmode"; then deplibs="$dir/$old_library $deplibs" elif test prog,link = "$linkmode,$pass"; then compile_deplibs="$dir/$old_library $compile_deplibs" finalize_deplibs="$dir/$old_library $finalize_deplibs" else deplibs="$lib $deplibs" # used for prog,scan pass fi continue fi if test prog = "$linkmode" && test link != "$pass"; then func_append newlib_search_path " $ladir" deplibs="$lib $deplibs" linkalldeplibs=false if test no != "$link_all_deplibs" || test -z "$library_names" || test no = "$build_libtool_libs"; then linkalldeplibs=: fi tmp_libs= for deplib in $dependency_libs; do case $deplib in -L*) func_stripname '-L' '' "$deplib" func_resolve_sysroot "$func_stripname_result" func_append newlib_search_path " $func_resolve_sysroot_result" ;; esac # Need to link against all dependency_libs? if $linkalldeplibs; then deplibs="$deplib $deplibs" else # Need to hardcode shared library paths # or/and link against static libraries newdependency_libs="$deplib $newdependency_libs" fi if $opt_preserve_dup_deps; then case "$tmp_libs " in *" $deplib "*) func_append specialdeplibs " $deplib" ;; esac fi func_append tmp_libs " $deplib" done # for deplib continue fi # $linkmode = prog... if test prog,link = "$linkmode,$pass"; then if test -n "$library_names" && { { test no = "$prefer_static_libs" || test built,yes = "$prefer_static_libs,$installed"; } || test -z "$old_library"; }; then # We need to hardcode the library path if test -n "$shlibpath_var" && test -z "$avoidtemprpath"; then # Make sure the rpath contains only unique directories. case $temp_rpath: in *"$absdir:"*) ;; *) func_append temp_rpath "$absdir:" ;; esac fi # Hardcode the library path. # Skip directories that are in the system default run-time # search path. case " $sys_lib_dlsearch_path " in *" $absdir "*) ;; *) case "$compile_rpath " in *" $absdir "*) ;; *) func_append compile_rpath " $absdir" ;; esac ;; esac case " $sys_lib_dlsearch_path " in *" $libdir "*) ;; *) case "$finalize_rpath " in *" $libdir "*) ;; *) func_append finalize_rpath " $libdir" ;; esac ;; esac fi # $linkmode,$pass = prog,link... if $alldeplibs && { test pass_all = "$deplibs_check_method" || { test yes = "$build_libtool_libs" && test -n "$library_names"; }; }; then # We only need to search for static libraries continue fi fi link_static=no # Whether the deplib will be linked statically use_static_libs=$prefer_static_libs if test built = "$use_static_libs" && test yes = "$installed"; then use_static_libs=no fi if test -n "$library_names" && { test no = "$use_static_libs" || test -z "$old_library"; }; then case $host in *cygwin* | *mingw* | *cegcc* | *os2*) # No point in relinking DLLs because paths are not encoded func_append notinst_deplibs " $lib" need_relink=no ;; *) if test no = "$installed"; then func_append notinst_deplibs " $lib" need_relink=yes fi ;; esac # This is a shared library # Warn about portability, can't link against -module's on some # systems (darwin). Don't bleat about dlopened modules though! dlopenmodule= for dlpremoduletest in $dlprefiles; do if test "X$dlpremoduletest" = "X$lib"; then dlopenmodule=$dlpremoduletest break fi done if test -z "$dlopenmodule" && test yes = "$shouldnotlink" && test link = "$pass"; then echo if test prog = "$linkmode"; then $ECHO "*** Warning: Linking the executable $output against the loadable module" else $ECHO "*** Warning: Linking the shared library $output against the loadable module" fi $ECHO "*** $linklib is not portable!" fi if test lib = "$linkmode" && test yes = "$hardcode_into_libs"; then # Hardcode the library path. # Skip directories that are in the system default run-time # search path. case " $sys_lib_dlsearch_path " in *" $absdir "*) ;; *) case "$compile_rpath " in *" $absdir "*) ;; *) func_append compile_rpath " $absdir" ;; esac ;; esac case " $sys_lib_dlsearch_path " in *" $libdir "*) ;; *) case "$finalize_rpath " in *" $libdir "*) ;; *) func_append finalize_rpath " $libdir" ;; esac ;; esac fi if test -n "$old_archive_from_expsyms_cmds"; then # figure out the soname set dummy $library_names shift realname=$1 shift libname=`eval "\\$ECHO \"$libname_spec\""` # use dlname if we got it. it's perfectly good, no? if test -n "$dlname"; then soname=$dlname elif test -n "$soname_spec"; then # bleh windows case $host in *cygwin* | mingw* | *cegcc* | *os2*) func_arith $current - $age major=$func_arith_result versuffix=-$major ;; esac eval soname=\"$soname_spec\" else soname=$realname fi # Make a new name for the extract_expsyms_cmds to use soroot=$soname func_basename "$soroot" soname=$func_basename_result func_stripname 'lib' '.dll' "$soname" newlib=libimp-$func_stripname_result.a # If the library has no export list, then create one now if test -f "$output_objdir/$soname-def"; then : else func_verbose "extracting exported symbol list from '$soname'" func_execute_cmds "$extract_expsyms_cmds" 'exit $?' fi # Create $newlib if test -f "$output_objdir/$newlib"; then :; else func_verbose "generating import library for '$soname'" func_execute_cmds "$old_archive_from_expsyms_cmds" 'exit $?' fi # make sure the library variables are pointing to the new library dir=$output_objdir linklib=$newlib fi # test -n "$old_archive_from_expsyms_cmds" if test prog = "$linkmode" || test relink != "$opt_mode"; then add_shlibpath= add_dir= add= lib_linked=yes case $hardcode_action in immediate | unsupported) if test no = "$hardcode_direct"; then add=$dir/$linklib case $host in *-*-sco3.2v5.0.[024]*) add_dir=-L$dir ;; *-*-sysv4*uw2*) add_dir=-L$dir ;; *-*-sysv5OpenUNIX* | *-*-sysv5UnixWare7.[01].[10]* | \ *-*-unixware7*) add_dir=-L$dir ;; *-*-darwin* ) # if the lib is a (non-dlopened) module then we cannot # link against it, someone is ignoring the earlier warnings if /usr/bin/file -L $add 2> /dev/null | $GREP ": [^:]* bundle" >/dev/null; then if test "X$dlopenmodule" != "X$lib"; then $ECHO "*** Warning: lib $linklib is a module, not a shared library" if test -z "$old_library"; then echo echo "*** And there doesn't seem to be a static archive available" echo "*** The link will probably fail, sorry" else add=$dir/$old_library fi elif test -n "$old_library"; then add=$dir/$old_library fi fi esac elif test no = "$hardcode_minus_L"; then case $host in *-*-sunos*) add_shlibpath=$dir ;; esac add_dir=-L$dir add=-l$name elif test no = "$hardcode_shlibpath_var"; then add_shlibpath=$dir add=-l$name else lib_linked=no fi ;; relink) if test yes = "$hardcode_direct" && test no = "$hardcode_direct_absolute"; then add=$dir/$linklib elif test yes = "$hardcode_minus_L"; then add_dir=-L$absdir # Try looking first in the location we're being installed to. if test -n "$inst_prefix_dir"; then case $libdir in [\\/]*) func_append add_dir " -L$inst_prefix_dir$libdir" ;; esac fi add=-l$name elif test yes = "$hardcode_shlibpath_var"; then add_shlibpath=$dir add=-l$name else lib_linked=no fi ;; *) lib_linked=no ;; esac if test yes != "$lib_linked"; then func_fatal_configuration "unsupported hardcode properties" fi if test -n "$add_shlibpath"; then case :$compile_shlibpath: in *":$add_shlibpath:"*) ;; *) func_append compile_shlibpath "$add_shlibpath:" ;; esac fi if test prog = "$linkmode"; then test -n "$add_dir" && compile_deplibs="$add_dir $compile_deplibs" test -n "$add" && compile_deplibs="$add $compile_deplibs" else test -n "$add_dir" && deplibs="$add_dir $deplibs" test -n "$add" && deplibs="$add $deplibs" if test yes != "$hardcode_direct" && test yes != "$hardcode_minus_L" && test yes = "$hardcode_shlibpath_var"; then case :$finalize_shlibpath: in *":$libdir:"*) ;; *) func_append finalize_shlibpath "$libdir:" ;; esac fi fi fi if test prog = "$linkmode" || test relink = "$opt_mode"; then add_shlibpath= add_dir= add= # Finalize command for both is simple: just hardcode it. if test yes = "$hardcode_direct" && test no = "$hardcode_direct_absolute"; then add=$libdir/$linklib elif test yes = "$hardcode_minus_L"; then add_dir=-L$libdir add=-l$name elif test yes = "$hardcode_shlibpath_var"; then case :$finalize_shlibpath: in *":$libdir:"*) ;; *) func_append finalize_shlibpath "$libdir:" ;; esac add=-l$name elif test yes = "$hardcode_automatic"; then if test -n "$inst_prefix_dir" && test -f "$inst_prefix_dir$libdir/$linklib"; then add=$inst_prefix_dir$libdir/$linklib else add=$libdir/$linklib fi else # We cannot seem to hardcode it, guess we'll fake it. add_dir=-L$libdir # Try looking first in the location we're being installed to. if test -n "$inst_prefix_dir"; then case $libdir in [\\/]*) func_append add_dir " -L$inst_prefix_dir$libdir" ;; esac fi add=-l$name fi if test prog = "$linkmode"; then test -n "$add_dir" && finalize_deplibs="$add_dir $finalize_deplibs" test -n "$add" && finalize_deplibs="$add $finalize_deplibs" else test -n "$add_dir" && deplibs="$add_dir $deplibs" test -n "$add" && deplibs="$add $deplibs" fi fi elif test prog = "$linkmode"; then # Here we assume that one of hardcode_direct or hardcode_minus_L # is not unsupported. This is valid on all known static and # shared platforms. if test unsupported != "$hardcode_direct"; then test -n "$old_library" && linklib=$old_library compile_deplibs="$dir/$linklib $compile_deplibs" finalize_deplibs="$dir/$linklib $finalize_deplibs" else compile_deplibs="-l$name -L$dir $compile_deplibs" finalize_deplibs="-l$name -L$dir $finalize_deplibs" fi elif test yes = "$build_libtool_libs"; then # Not a shared library if test pass_all != "$deplibs_check_method"; then # We're trying link a shared library against a static one # but the system doesn't support it. # Just print a warning and add the library to dependency_libs so # that the program can be linked against the static library. echo $ECHO "*** Warning: This system cannot link to static lib archive $lib." echo "*** I have the capability to make that library automatically link in when" echo "*** you link to this library. But I can only do this if you have a" echo "*** shared version of the library, which you do not appear to have." if test yes = "$module"; then echo "*** But as you try to build a module library, libtool will still create " echo "*** a static module, that should work as long as the dlopening application" echo "*** is linked with the -dlopen flag to resolve symbols at runtime." if test -z "$global_symbol_pipe"; then echo echo "*** However, this would only work if libtool was able to extract symbol" echo "*** lists from a program, using 'nm' or equivalent, but libtool could" echo "*** not find such a program. So, this module is probably useless." echo "*** 'nm' from GNU binutils and a full rebuild may help." fi if test no = "$build_old_libs"; then build_libtool_libs=module build_old_libs=yes else build_libtool_libs=no fi fi else deplibs="$dir/$old_library $deplibs" link_static=yes fi fi # link shared/static library? if test lib = "$linkmode"; then if test -n "$dependency_libs" && { test yes != "$hardcode_into_libs" || test yes = "$build_old_libs" || test yes = "$link_static"; }; then # Extract -R from dependency_libs temp_deplibs= for libdir in $dependency_libs; do case $libdir in -R*) func_stripname '-R' '' "$libdir" temp_xrpath=$func_stripname_result case " $xrpath " in *" $temp_xrpath "*) ;; *) func_append xrpath " $temp_xrpath";; esac;; *) func_append temp_deplibs " $libdir";; esac done dependency_libs=$temp_deplibs fi func_append newlib_search_path " $absdir" # Link against this library test no = "$link_static" && newdependency_libs="$abs_ladir/$laname $newdependency_libs" # ... and its dependency_libs tmp_libs= for deplib in $dependency_libs; do newdependency_libs="$deplib $newdependency_libs" case $deplib in -L*) func_stripname '-L' '' "$deplib" func_resolve_sysroot "$func_stripname_result";; *) func_resolve_sysroot "$deplib" ;; esac if $opt_preserve_dup_deps; then case "$tmp_libs " in *" $func_resolve_sysroot_result "*) func_append specialdeplibs " $func_resolve_sysroot_result" ;; esac fi func_append tmp_libs " $func_resolve_sysroot_result" done if test no != "$link_all_deplibs"; then # Add the search paths of all dependency libraries for deplib in $dependency_libs; do path= case $deplib in -L*) path=$deplib ;; *.la) func_resolve_sysroot "$deplib" deplib=$func_resolve_sysroot_result func_dirname "$deplib" "" "." dir=$func_dirname_result # We need an absolute path. case $dir in [\\/]* | [A-Za-z]:[\\/]*) absdir=$dir ;; *) absdir=`cd "$dir" && pwd` if test -z "$absdir"; then func_warning "cannot determine absolute directory name of '$dir'" absdir=$dir fi ;; esac if $GREP "^installed=no" $deplib > /dev/null; then case $host in *-*-darwin*) depdepl= eval deplibrary_names=`$SED -n -e 's/^library_names=\(.*\)$/\1/p' $deplib` if test -n "$deplibrary_names"; then for tmp in $deplibrary_names; do depdepl=$tmp done if test -f "$absdir/$objdir/$depdepl"; then depdepl=$absdir/$objdir/$depdepl darwin_install_name=`$OTOOL -L $depdepl | awk '{if (NR == 2) {print $1;exit}}'` if test -z "$darwin_install_name"; then darwin_install_name=`$OTOOL64 -L $depdepl | awk '{if (NR == 2) {print $1;exit}}'` fi func_append compiler_flags " $wl-dylib_file $wl$darwin_install_name:$depdepl" func_append linker_flags " -dylib_file $darwin_install_name:$depdepl" path= fi fi ;; *) path=-L$absdir/$objdir ;; esac else eval libdir=`$SED -n -e 's/^libdir=\(.*\)$/\1/p' $deplib` test -z "$libdir" && \ func_fatal_error "'$deplib' is not a valid libtool archive" test "$absdir" != "$libdir" && \ func_warning "'$deplib' seems to be moved" path=-L$absdir fi ;; esac case " $deplibs " in *" $path "*) ;; *) deplibs="$path $deplibs" ;; esac done fi # link_all_deplibs != no fi # linkmode = lib done # for deplib in $libs if test link = "$pass"; then if test prog = "$linkmode"; then compile_deplibs="$new_inherited_linker_flags $compile_deplibs" finalize_deplibs="$new_inherited_linker_flags $finalize_deplibs" else compiler_flags="$compiler_flags "`$ECHO " $new_inherited_linker_flags" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` fi fi dependency_libs=$newdependency_libs if test dlpreopen = "$pass"; then # Link the dlpreopened libraries before other libraries for deplib in $save_deplibs; do deplibs="$deplib $deplibs" done fi if test dlopen != "$pass"; then test conv = "$pass" || { # Make sure lib_search_path contains only unique directories. lib_search_path= for dir in $newlib_search_path; do case "$lib_search_path " in *" $dir "*) ;; *) func_append lib_search_path " $dir" ;; esac done newlib_search_path= } if test prog,link = "$linkmode,$pass"; then vars="compile_deplibs finalize_deplibs" else vars=deplibs fi for var in $vars dependency_libs; do # Add libraries to $var in reverse order eval tmp_libs=\"\$$var\" new_libs= for deplib in $tmp_libs; do # FIXME: Pedantically, this is the right thing to do, so # that some nasty dependency loop isn't accidentally # broken: #new_libs="$deplib $new_libs" # Pragmatically, this seems to cause very few problems in # practice: case $deplib in -L*) new_libs="$deplib $new_libs" ;; -R*) ;; *) # And here is the reason: when a library appears more # than once as an explicit dependence of a library, or # is implicitly linked in more than once by the # compiler, it is considered special, and multiple # occurrences thereof are not removed. Compare this # with having the same library being listed as a # dependency of multiple other libraries: in this case, # we know (pedantically, we assume) the library does not # need to be listed more than once, so we keep only the # last copy. This is not always right, but it is rare # enough that we require users that really mean to play # such unportable linking tricks to link the library # using -Wl,-lname, so that libtool does not consider it # for duplicate removal. case " $specialdeplibs " in *" $deplib "*) new_libs="$deplib $new_libs" ;; *) case " $new_libs " in *" $deplib "*) ;; *) new_libs="$deplib $new_libs" ;; esac ;; esac ;; esac done tmp_libs= for deplib in $new_libs; do case $deplib in -L*) case " $tmp_libs " in *" $deplib "*) ;; *) func_append tmp_libs " $deplib" ;; esac ;; *) func_append tmp_libs " $deplib" ;; esac done eval $var=\"$tmp_libs\" done # for var fi # Add Sun CC postdeps if required: test CXX = "$tagname" && { case $host_os in linux*) case `$CC -V 2>&1 | $SED 5q` in *Sun\ C*) # Sun C++ 5.9 func_suncc_cstd_abi if test no != "$suncc_use_cstd_abi"; then func_append postdeps ' -library=Cstd -library=Crun' fi ;; esac ;; solaris*) func_cc_basename "$CC" case $func_cc_basename_result in CC* | sunCC*) func_suncc_cstd_abi if test no != "$suncc_use_cstd_abi"; then func_append postdeps ' -library=Cstd -library=Crun' fi ;; esac ;; esac } # Last step: remove runtime libs from dependency_libs # (they stay in deplibs) tmp_libs= for i in $dependency_libs; do case " $predeps $postdeps $compiler_lib_search_path " in *" $i "*) i= ;; esac if test -n "$i"; then func_append tmp_libs " $i" fi done dependency_libs=$tmp_libs done # for pass if test prog = "$linkmode"; then dlfiles=$newdlfiles fi if test prog = "$linkmode" || test lib = "$linkmode"; then dlprefiles=$newdlprefiles fi case $linkmode in oldlib) if test -n "$dlfiles$dlprefiles" || test no != "$dlself"; then func_warning "'-dlopen' is ignored for archives" fi case " $deplibs" in *\ -l* | *\ -L*) func_warning "'-l' and '-L' are ignored for archives" ;; esac test -n "$rpath" && \ func_warning "'-rpath' is ignored for archives" test -n "$xrpath" && \ func_warning "'-R' is ignored for archives" test -n "$vinfo" && \ func_warning "'-version-info/-version-number' is ignored for archives" test -n "$release" && \ func_warning "'-release' is ignored for archives" test -n "$export_symbols$export_symbols_regex" && \ func_warning "'-export-symbols' is ignored for archives" # Now set the variables for building old libraries. build_libtool_libs=no oldlibs=$output func_append objs "$old_deplibs" ;; lib) # Make sure we only generate libraries of the form 'libNAME.la'. case $outputname in lib*) func_stripname 'lib' '.la' "$outputname" name=$func_stripname_result eval shared_ext=\"$shrext_cmds\" eval libname=\"$libname_spec\" ;; *) test no = "$module" \ && func_fatal_help "libtool library '$output' must begin with 'lib'" if test no != "$need_lib_prefix"; then # Add the "lib" prefix for modules if required func_stripname '' '.la' "$outputname" name=$func_stripname_result eval shared_ext=\"$shrext_cmds\" eval libname=\"$libname_spec\" else func_stripname '' '.la' "$outputname" libname=$func_stripname_result fi ;; esac if test -n "$objs"; then if test pass_all != "$deplibs_check_method"; then func_fatal_error "cannot build libtool library '$output' from non-libtool objects on this host:$objs" else echo $ECHO "*** Warning: Linking the shared library $output against the non-libtool" $ECHO "*** objects $objs is not portable!" func_append libobjs " $objs" fi fi test no = "$dlself" \ || func_warning "'-dlopen self' is ignored for libtool libraries" set dummy $rpath shift test 1 -lt "$#" \ && func_warning "ignoring multiple '-rpath's for a libtool library" install_libdir=$1 oldlibs= if test -z "$rpath"; then if test yes = "$build_libtool_libs"; then # Building a libtool convenience library. # Some compilers have problems with a '.al' extension so # convenience libraries should have the same extension an # archive normally would. oldlibs="$output_objdir/$libname.$libext $oldlibs" build_libtool_libs=convenience build_old_libs=yes fi test -n "$vinfo" && \ func_warning "'-version-info/-version-number' is ignored for convenience libraries" test -n "$release" && \ func_warning "'-release' is ignored for convenience libraries" else # Parse the version information argument. save_ifs=$IFS; IFS=: set dummy $vinfo 0 0 0 shift IFS=$save_ifs test -n "$7" && \ func_fatal_help "too many parameters to '-version-info'" # convert absolute version numbers to libtool ages # this retains compatibility with .la files and attempts # to make the code below a bit more comprehensible case $vinfo_number in yes) number_major=$1 number_minor=$2 number_revision=$3 # # There are really only two kinds -- those that # use the current revision as the major version # and those that subtract age and use age as # a minor version. But, then there is irix # that has an extra 1 added just for fun # case $version_type in # correct linux to gnu/linux during the next big refactor darwin|freebsd-elf|linux|midnightbsd-elf|osf|windows|none) func_arith $number_major + $number_minor current=$func_arith_result age=$number_minor revision=$number_revision ;; freebsd-aout|qnx|sunos) current=$number_major revision=$number_minor age=0 ;; irix|nonstopux) func_arith $number_major + $number_minor current=$func_arith_result age=$number_minor revision=$number_minor lt_irix_increment=no ;; *) func_fatal_configuration "$modename: unknown library version type '$version_type'" ;; esac ;; no) current=$1 revision=$2 age=$3 ;; esac # Check that each of the things are valid numbers. case $current in 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;; *) func_error "CURRENT '$current' must be a nonnegative integer" func_fatal_error "'$vinfo' is not valid version information" ;; esac case $revision in 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;; *) func_error "REVISION '$revision' must be a nonnegative integer" func_fatal_error "'$vinfo' is not valid version information" ;; esac case $age in 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;; *) func_error "AGE '$age' must be a nonnegative integer" func_fatal_error "'$vinfo' is not valid version information" ;; esac if test "$age" -gt "$current"; then func_error "AGE '$age' is greater than the current interface number '$current'" func_fatal_error "'$vinfo' is not valid version information" fi # Calculate the version variables. major= versuffix= verstring= case $version_type in none) ;; darwin) # Like Linux, but with the current version available in # verstring for coding it into the library header func_arith $current - $age major=.$func_arith_result versuffix=$major.$age.$revision # Darwin ld doesn't like 0 for these options... func_arith $current + 1 minor_current=$func_arith_result xlcverstring="$wl-compatibility_version $wl$minor_current $wl-current_version $wl$minor_current.$revision" verstring="-compatibility_version $minor_current -current_version $minor_current.$revision" # On Darwin other compilers case $CC in nagfor*) verstring="$wl-compatibility_version $wl$minor_current $wl-current_version $wl$minor_current.$revision" ;; *) verstring="-compatibility_version $minor_current -current_version $minor_current.$revision" ;; esac ;; freebsd-aout) major=.$current versuffix=.$current.$revision ;; freebsd-elf | midnightbsd-elf) func_arith $current - $age major=.$func_arith_result versuffix=$major.$age.$revision ;; irix | nonstopux) if test no = "$lt_irix_increment"; then func_arith $current - $age else func_arith $current - $age + 1 fi major=$func_arith_result case $version_type in nonstopux) verstring_prefix=nonstopux ;; *) verstring_prefix=sgi ;; esac verstring=$verstring_prefix$major.$revision # Add in all the interfaces that we are compatible with. loop=$revision while test 0 -ne "$loop"; do func_arith $revision - $loop iface=$func_arith_result func_arith $loop - 1 loop=$func_arith_result verstring=$verstring_prefix$major.$iface:$verstring done # Before this point, $major must not contain '.'. major=.$major versuffix=$major.$revision ;; linux) # correct to gnu/linux during the next big refactor func_arith $current - $age major=.$func_arith_result versuffix=$major.$age.$revision ;; osf) func_arith $current - $age major=.$func_arith_result versuffix=.$current.$age.$revision verstring=$current.$age.$revision # Add in all the interfaces that we are compatible with. loop=$age while test 0 -ne "$loop"; do func_arith $current - $loop iface=$func_arith_result func_arith $loop - 1 loop=$func_arith_result verstring=$verstring:$iface.0 done # Make executables depend on our current version. func_append verstring ":$current.0" ;; qnx) major=.$current versuffix=.$current ;; sco) major=.$current versuffix=.$current ;; sunos) major=.$current versuffix=.$current.$revision ;; windows) # Use '-' rather than '.', since we only want one # extension on DOS 8.3 file systems. func_arith $current - $age major=$func_arith_result versuffix=-$major ;; *) func_fatal_configuration "unknown library version type '$version_type'" ;; esac # Clear the version info if we defaulted, and they specified a release. if test -z "$vinfo" && test -n "$release"; then major= case $version_type in darwin) # we can't check for "0.0" in archive_cmds due to quoting # problems, so we reset it completely verstring= ;; *) verstring=0.0 ;; esac if test no = "$need_version"; then versuffix= else versuffix=.0.0 fi fi # Remove version info from name if versioning should be avoided if test yes,no = "$avoid_version,$need_version"; then major= versuffix= verstring= fi # Check to see if the archive will have undefined symbols. if test yes = "$allow_undefined"; then if test unsupported = "$allow_undefined_flag"; then if test yes = "$build_old_libs"; then func_warning "undefined symbols not allowed in $host shared libraries; building static only" build_libtool_libs=no else func_fatal_error "can't build $host shared library unless -no-undefined is specified" fi fi else # Don't allow undefined symbols. allow_undefined_flag=$no_undefined_flag fi fi func_generate_dlsyms "$libname" "$libname" : func_append libobjs " $symfileobj" test " " = "$libobjs" && libobjs= if test relink != "$opt_mode"; then # Remove our outputs, but don't remove object files since they # may have been created when compiling PIC objects. removelist= tempremovelist=`$ECHO "$output_objdir/*"` for p in $tempremovelist; do case $p in *.$objext | *.gcno) ;; $output_objdir/$outputname | $output_objdir/$libname.* | $output_objdir/$libname$release.*) if test -n "$precious_files_regex"; then if $ECHO "$p" | $EGREP -e "$precious_files_regex" >/dev/null 2>&1 then continue fi fi func_append removelist " $p" ;; *) ;; esac done test -n "$removelist" && \ func_show_eval "${RM}r \$removelist" fi # Now set the variables for building old libraries. if test yes = "$build_old_libs" && test convenience != "$build_libtool_libs"; then func_append oldlibs " $output_objdir/$libname.$libext" # Transform .lo files to .o files. oldobjs="$objs "`$ECHO "$libobjs" | $SP2NL | $SED "/\.$libext$/d; $lo2o" | $NL2SP` fi # Eliminate all temporary directories. #for path in $notinst_path; do # lib_search_path=`$ECHO "$lib_search_path " | $SED "s% $path % %g"` # deplibs=`$ECHO "$deplibs " | $SED "s% -L$path % %g"` # dependency_libs=`$ECHO "$dependency_libs " | $SED "s% -L$path % %g"` #done if test -n "$xrpath"; then # If the user specified any rpath flags, then add them. temp_xrpath= for libdir in $xrpath; do func_replace_sysroot "$libdir" func_append temp_xrpath " -R$func_replace_sysroot_result" case "$finalize_rpath " in *" $libdir "*) ;; *) func_append finalize_rpath " $libdir" ;; esac done if test yes != "$hardcode_into_libs" || test yes = "$build_old_libs"; then dependency_libs="$temp_xrpath $dependency_libs" fi fi # Make sure dlfiles contains only unique files that won't be dlpreopened old_dlfiles=$dlfiles dlfiles= for lib in $old_dlfiles; do case " $dlprefiles $dlfiles " in *" $lib "*) ;; *) func_append dlfiles " $lib" ;; esac done # Make sure dlprefiles contains only unique files old_dlprefiles=$dlprefiles dlprefiles= for lib in $old_dlprefiles; do case "$dlprefiles " in *" $lib "*) ;; *) func_append dlprefiles " $lib" ;; esac done if test yes = "$build_libtool_libs"; then if test -n "$rpath"; then case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-beos* | *-cegcc* | *-*-haiku*) # these systems don't actually have a c library (as such)! ;; *-*-rhapsody* | *-*-darwin1.[012]) # Rhapsody C library is in the System framework func_append deplibs " System.ltframework" ;; *-*-netbsd*) # Don't link with libc until the a.out ld.so is fixed. ;; *-*-openbsd* | *-*-freebsd* | *-*-dragonfly* | *-*-midnightbsd*) # Do not include libc due to us having libc/libc_r. ;; *-*-sco3.2v5* | *-*-sco5v6*) # Causes problems with __ctype ;; *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*) # Compiler inserts libc in the correct place for threads to work ;; *) # Add libc to deplibs on all other systems if necessary. if test yes = "$build_libtool_need_lc"; then func_append deplibs " -lc" fi ;; esac fi # Transform deplibs into only deplibs that can be linked in shared. name_save=$name libname_save=$libname release_save=$release versuffix_save=$versuffix major_save=$major # I'm not sure if I'm treating the release correctly. I think # release should show up in the -l (ie -lgmp5) so we don't want to # add it in twice. Is that correct? release= versuffix= major= newdeplibs= droppeddeps=no case $deplibs_check_method in pass_all) # Don't check for shared/static. Everything works. # This might be a little naive. We might want to check # whether the library exists or not. But this is on # osf3 & osf4 and I'm not really sure... Just # implementing what was already the behavior. newdeplibs=$deplibs ;; test_compile) # This code stresses the "libraries are programs" paradigm to its # limits. Maybe even breaks it. We compile a program, linking it # against the deplibs as a proxy for the library. Then we can check # whether they linked in statically or dynamically with ldd. $opt_dry_run || $RM conftest.c cat > conftest.c </dev/null` $nocaseglob else potential_libs=`ls $i/$libnameglob[.-]* 2>/dev/null` fi for potent_lib in $potential_libs; do # Follow soft links. if ls -lLd "$potent_lib" 2>/dev/null | $GREP " -> " >/dev/null; then continue fi # The statement above tries to avoid entering an # endless loop below, in case of cyclic links. # We might still enter an endless loop, since a link # loop can be closed while we follow links, # but so what? potlib=$potent_lib while test -h "$potlib" 2>/dev/null; do potliblink=`ls -ld $potlib | $SED 's/.* -> //'` case $potliblink in [\\/]* | [A-Za-z]:[\\/]*) potlib=$potliblink;; *) potlib=`$ECHO "$potlib" | $SED 's|[^/]*$||'`"$potliblink";; esac done if eval $file_magic_cmd \"\$potlib\" 2>/dev/null | $SED -e 10q | $EGREP "$file_magic_regex" > /dev/null; then func_append newdeplibs " $a_deplib" a_deplib= break 2 fi done done fi if test -n "$a_deplib"; then droppeddeps=yes echo $ECHO "*** Warning: linker path does not have real file for library $a_deplib." echo "*** I have the capability to make that library automatically link in when" echo "*** you link to this library. But I can only do this if you have a" echo "*** shared version of the library, which you do not appear to have" echo "*** because I did check the linker path looking for a file starting" if test -z "$potlib"; then $ECHO "*** with $libname but no candidates were found. (...for file magic test)" else $ECHO "*** with $libname and none of the candidates passed a file format test" $ECHO "*** using a file magic. Last file checked: $potlib" fi fi ;; *) # Add a -L argument. func_append newdeplibs " $a_deplib" ;; esac done # Gone through all deplibs. ;; match_pattern*) set dummy $deplibs_check_method; shift match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"` for a_deplib in $deplibs; do case $a_deplib in -l*) func_stripname -l '' "$a_deplib" name=$func_stripname_result if test yes = "$allow_libtool_libs_with_static_runtimes"; then case " $predeps $postdeps " in *" $a_deplib "*) func_append newdeplibs " $a_deplib" a_deplib= ;; esac fi if test -n "$a_deplib"; then libname=`eval "\\$ECHO \"$libname_spec\""` for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do potential_libs=`ls $i/$libname[.-]* 2>/dev/null` for potent_lib in $potential_libs; do potlib=$potent_lib # see symlink-check above in file_magic test if eval "\$ECHO \"$potent_lib\"" 2>/dev/null | $SED 10q | \ $EGREP "$match_pattern_regex" > /dev/null; then func_append newdeplibs " $a_deplib" a_deplib= break 2 fi done done fi if test -n "$a_deplib"; then droppeddeps=yes echo $ECHO "*** Warning: linker path does not have real file for library $a_deplib." echo "*** I have the capability to make that library automatically link in when" echo "*** you link to this library. But I can only do this if you have a" echo "*** shared version of the library, which you do not appear to have" echo "*** because I did check the linker path looking for a file starting" if test -z "$potlib"; then $ECHO "*** with $libname but no candidates were found. (...for regex pattern test)" else $ECHO "*** with $libname and none of the candidates passed a file format test" $ECHO "*** using a regex pattern. Last file checked: $potlib" fi fi ;; *) # Add a -L argument. func_append newdeplibs " $a_deplib" ;; esac done # Gone through all deplibs. ;; none | unknown | *) newdeplibs= tmp_deplibs=`$ECHO " $deplibs" | $SED 's/ -lc$//; s/ -[LR][^ ]*//g'` if test yes = "$allow_libtool_libs_with_static_runtimes"; then for i in $predeps $postdeps; do # can't use Xsed below, because $i might contain '/' tmp_deplibs=`$ECHO " $tmp_deplibs" | $SED "s|$i||"` done fi case $tmp_deplibs in *[!\ \ ]*) echo if test none = "$deplibs_check_method"; then echo "*** Warning: inter-library dependencies are not supported in this platform." else echo "*** Warning: inter-library dependencies are not known to be supported." fi echo "*** All declared inter-library dependencies are being dropped." droppeddeps=yes ;; esac ;; esac versuffix=$versuffix_save major=$major_save release=$release_save libname=$libname_save name=$name_save case $host in *-*-rhapsody* | *-*-darwin1.[012]) # On Rhapsody replace the C library with the System framework newdeplibs=`$ECHO " $newdeplibs" | $SED 's/ -lc / System.ltframework /'` ;; esac if test yes = "$droppeddeps"; then if test yes = "$module"; then echo echo "*** Warning: libtool could not satisfy all declared inter-library" $ECHO "*** dependencies of module $libname. Therefore, libtool will create" echo "*** a static module, that should work as long as the dlopening" echo "*** application is linked with the -dlopen flag." if test -z "$global_symbol_pipe"; then echo echo "*** However, this would only work if libtool was able to extract symbol" echo "*** lists from a program, using 'nm' or equivalent, but libtool could" echo "*** not find such a program. So, this module is probably useless." echo "*** 'nm' from GNU binutils and a full rebuild may help." fi if test no = "$build_old_libs"; then oldlibs=$output_objdir/$libname.$libext build_libtool_libs=module build_old_libs=yes else build_libtool_libs=no fi else echo "*** The inter-library dependencies that have been dropped here will be" echo "*** automatically added whenever a program is linked with this library" echo "*** or is declared to -dlopen it." if test no = "$allow_undefined"; then echo echo "*** Since this library must not contain undefined symbols," echo "*** because either the platform does not support them or" echo "*** it was explicitly requested with -no-undefined," echo "*** libtool will only create a static version of it." if test no = "$build_old_libs"; then oldlibs=$output_objdir/$libname.$libext build_libtool_libs=module build_old_libs=yes else build_libtool_libs=no fi fi fi fi # Done checking deplibs! deplibs=$newdeplibs fi # Time to change all our "foo.ltframework" stuff back to "-framework foo" case $host in *-*-darwin*) newdeplibs=`$ECHO " $newdeplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` new_inherited_linker_flags=`$ECHO " $new_inherited_linker_flags" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` deplibs=`$ECHO " $deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` ;; esac # move library search paths that coincide with paths to not yet # installed libraries to the beginning of the library search list new_libs= for path in $notinst_path; do case " $new_libs " in *" -L$path/$objdir "*) ;; *) case " $deplibs " in *" -L$path/$objdir "*) func_append new_libs " -L$path/$objdir" ;; esac ;; esac done for deplib in $deplibs; do case $deplib in -L*) case " $new_libs " in *" $deplib "*) ;; *) func_append new_libs " $deplib" ;; esac ;; *) func_append new_libs " $deplib" ;; esac done deplibs=$new_libs # All the library-specific variables (install_libdir is set above). library_names= old_library= dlname= # Test again, we may have decided not to build it any more if test yes = "$build_libtool_libs"; then # Remove $wl instances when linking with ld. # FIXME: should test the right _cmds variable. case $archive_cmds in *\$LD\ *) wl= ;; esac if test yes = "$hardcode_into_libs"; then # Hardcode the library paths hardcode_libdirs= dep_rpath= rpath=$finalize_rpath test relink = "$opt_mode" || rpath=$compile_rpath$rpath for libdir in $rpath; do if test -n "$hardcode_libdir_flag_spec"; then if test -n "$hardcode_libdir_separator"; then func_replace_sysroot "$libdir" libdir=$func_replace_sysroot_result if test -z "$hardcode_libdirs"; then hardcode_libdirs=$libdir else # Just accumulate the unique libdirs. case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) ;; *) func_append hardcode_libdirs "$hardcode_libdir_separator$libdir" ;; esac fi else eval flag=\"$hardcode_libdir_flag_spec\" func_append dep_rpath " $flag" fi elif test -n "$runpath_var"; then case "$perm_rpath " in *" $libdir "*) ;; *) func_append perm_rpath " $libdir" ;; esac fi done # Substitute the hardcoded libdirs into the rpath. if test -n "$hardcode_libdir_separator" && test -n "$hardcode_libdirs"; then libdir=$hardcode_libdirs eval "dep_rpath=\"$hardcode_libdir_flag_spec\"" fi if test -n "$runpath_var" && test -n "$perm_rpath"; then # We should set the runpath_var. rpath= for dir in $perm_rpath; do func_append rpath "$dir:" done eval "$runpath_var='$rpath\$$runpath_var'; export $runpath_var" fi test -n "$dep_rpath" && deplibs="$dep_rpath $deplibs" fi shlibpath=$finalize_shlibpath test relink = "$opt_mode" || shlibpath=$compile_shlibpath$shlibpath if test -n "$shlibpath"; then eval "$shlibpath_var='$shlibpath\$$shlibpath_var'; export $shlibpath_var" fi # Get the real and link names of the library. eval shared_ext=\"$shrext_cmds\" eval library_names=\"$library_names_spec\" set dummy $library_names shift realname=$1 shift if test -n "$soname_spec"; then eval soname=\"$soname_spec\" else soname=$realname fi if test -z "$dlname"; then dlname=$soname fi lib=$output_objdir/$realname linknames= for link do func_append linknames " $link" done # Use standard objects if they are pic test -z "$pic_flag" && libobjs=`$ECHO "$libobjs" | $SP2NL | $SED "$lo2o" | $NL2SP` test "X$libobjs" = "X " && libobjs= delfiles= if test -n "$export_symbols" && test -n "$include_expsyms"; then $opt_dry_run || cp "$export_symbols" "$output_objdir/$libname.uexp" export_symbols=$output_objdir/$libname.uexp func_append delfiles " $export_symbols" fi orig_export_symbols= case $host_os in cygwin* | mingw* | cegcc*) if test -n "$export_symbols" && test -z "$export_symbols_regex"; then # exporting using user supplied symfile func_dll_def_p "$export_symbols" || { # and it's NOT already a .def file. Must figure out # which of the given symbols are data symbols and tag # them as such. So, trigger use of export_symbols_cmds. # export_symbols gets reassigned inside the "prepare # the list of exported symbols" if statement, so the # include_expsyms logic still works. orig_export_symbols=$export_symbols export_symbols= always_export_symbols=yes } fi ;; esac # Prepare the list of exported symbols if test -z "$export_symbols"; then if test yes = "$always_export_symbols" || test -n "$export_symbols_regex"; then func_verbose "generating symbol list for '$libname.la'" export_symbols=$output_objdir/$libname.exp $opt_dry_run || $RM $export_symbols cmds=$export_symbols_cmds save_ifs=$IFS; IFS='~' for cmd1 in $cmds; do IFS=$save_ifs # Take the normal branch if the nm_file_list_spec branch # doesn't work or if tool conversion is not needed. case $nm_file_list_spec~$to_tool_file_cmd in *~func_convert_file_noop | *~func_convert_file_msys_to_w32 | ~*) try_normal_branch=yes eval cmd=\"$cmd1\" func_len " $cmd" len=$func_len_result ;; *) try_normal_branch=no ;; esac if test yes = "$try_normal_branch" \ && { test "$len" -lt "$max_cmd_len" \ || test "$max_cmd_len" -le -1; } then func_show_eval "$cmd" 'exit $?' skipped_export=false elif test -n "$nm_file_list_spec"; then func_basename "$output" output_la=$func_basename_result save_libobjs=$libobjs save_output=$output output=$output_objdir/$output_la.nm func_to_tool_file "$output" libobjs=$nm_file_list_spec$func_to_tool_file_result func_append delfiles " $output" func_verbose "creating $NM input file list: $output" for obj in $save_libobjs; do func_to_tool_file "$obj" $ECHO "$func_to_tool_file_result" done > "$output" eval cmd=\"$cmd1\" func_show_eval "$cmd" 'exit $?' output=$save_output libobjs=$save_libobjs skipped_export=false else # The command line is too long to execute in one step. func_verbose "using reloadable object file for export list..." skipped_export=: # Break out early, otherwise skipped_export may be # set to false by a later but shorter cmd. break fi done IFS=$save_ifs if test -n "$export_symbols_regex" && test : != "$skipped_export"; then func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"' func_show_eval '$MV "${export_symbols}T" "$export_symbols"' fi fi fi if test -n "$export_symbols" && test -n "$include_expsyms"; then tmp_export_symbols=$export_symbols test -n "$orig_export_symbols" && tmp_export_symbols=$orig_export_symbols $opt_dry_run || eval '$ECHO "$include_expsyms" | $SP2NL >> "$tmp_export_symbols"' fi if test : != "$skipped_export" && test -n "$orig_export_symbols"; then # The given exports_symbols file has to be filtered, so filter it. func_verbose "filter symbol list for '$libname.la' to tag DATA exports" # FIXME: $output_objdir/$libname.filter potentially contains lots of # 's' commands, which not all seds can handle. GNU sed should be fine # though. Also, the filter scales superlinearly with the number of # global variables. join(1) would be nice here, but unfortunately # isn't a blessed tool. $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter func_append delfiles " $export_symbols $output_objdir/$libname.filter" export_symbols=$output_objdir/$libname.def $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols fi tmp_deplibs= for test_deplib in $deplibs; do case " $convenience " in *" $test_deplib "*) ;; *) func_append tmp_deplibs " $test_deplib" ;; esac done deplibs=$tmp_deplibs if test -n "$convenience"; then if test -n "$whole_archive_flag_spec" && test yes = "$compiler_needs_object" && test -z "$libobjs"; then # extract the archives, so we have objects to list. # TODO: could optimize this to just extract one archive. whole_archive_flag_spec= fi if test -n "$whole_archive_flag_spec"; then save_libobjs=$libobjs eval libobjs=\"\$libobjs $whole_archive_flag_spec\" test "X$libobjs" = "X " && libobjs= else gentop=$output_objdir/${outputname}x func_append generated " $gentop" func_extract_archives $gentop $convenience func_append libobjs " $func_extract_archives_result" test "X$libobjs" = "X " && libobjs= fi fi if test yes = "$thread_safe" && test -n "$thread_safe_flag_spec"; then eval flag=\"$thread_safe_flag_spec\" func_append linker_flags " $flag" fi # Make a backup of the uninstalled library when relinking if test relink = "$opt_mode"; then $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}U && $MV $realname ${realname}U)' || exit $? fi # Do each of the archive commands. if test yes = "$module" && test -n "$module_cmds"; then if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then eval test_cmds=\"$module_expsym_cmds\" cmds=$module_expsym_cmds else eval test_cmds=\"$module_cmds\" cmds=$module_cmds fi else if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then eval test_cmds=\"$archive_expsym_cmds\" cmds=$archive_expsym_cmds else eval test_cmds=\"$archive_cmds\" cmds=$archive_cmds fi fi if test : != "$skipped_export" && func_len " $test_cmds" && len=$func_len_result && test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then : else # The command line is too long to link in one step, link piecewise # or, if using GNU ld and skipped_export is not :, use a linker # script. # Save the value of $output and $libobjs because we want to # use them later. If we have whole_archive_flag_spec, we # want to use save_libobjs as it was before # whole_archive_flag_spec was expanded, because we can't # assume the linker understands whole_archive_flag_spec. # This may have to be revisited, in case too many # convenience libraries get linked in and end up exceeding # the spec. if test -z "$convenience" || test -z "$whole_archive_flag_spec"; then save_libobjs=$libobjs fi save_output=$output func_basename "$output" output_la=$func_basename_result # Clear the reloadable object creation command queue and # initialize k to one. test_cmds= concat_cmds= objlist= last_robj= k=1 if test -n "$save_libobjs" && test : != "$skipped_export" && test yes = "$with_gnu_ld"; then output=$output_objdir/$output_la.lnkscript func_verbose "creating GNU ld script: $output" echo 'INPUT (' > $output for obj in $save_libobjs do func_to_tool_file "$obj" $ECHO "$func_to_tool_file_result" >> $output done echo ')' >> $output func_append delfiles " $output" func_to_tool_file "$output" output=$func_to_tool_file_result elif test -n "$save_libobjs" && test : != "$skipped_export" && test -n "$file_list_spec"; then output=$output_objdir/$output_la.lnk func_verbose "creating linker input file list: $output" : > $output set x $save_libobjs shift firstobj= if test yes = "$compiler_needs_object"; then firstobj="$1 " shift fi for obj do func_to_tool_file "$obj" $ECHO "$func_to_tool_file_result" >> $output done func_append delfiles " $output" func_to_tool_file "$output" output=$firstobj\"$file_list_spec$func_to_tool_file_result\" else if test -n "$save_libobjs"; then func_verbose "creating reloadable object files..." output=$output_objdir/$output_la-$k.$objext eval test_cmds=\"$reload_cmds\" func_len " $test_cmds" len0=$func_len_result len=$len0 # Loop over the list of objects to be linked. for obj in $save_libobjs do func_len " $obj" func_arith $len + $func_len_result len=$func_arith_result if test -z "$objlist" || test "$len" -lt "$max_cmd_len"; then func_append objlist " $obj" else # The command $test_cmds is almost too long, add a # command to the queue. if test 1 -eq "$k"; then # The first file doesn't have a previous command to add. reload_objs=$objlist eval concat_cmds=\"$reload_cmds\" else # All subsequent reloadable object files will link in # the last one created. reload_objs="$objlist $last_robj" eval concat_cmds=\"\$concat_cmds~$reload_cmds~\$RM $last_robj\" fi last_robj=$output_objdir/$output_la-$k.$objext func_arith $k + 1 k=$func_arith_result output=$output_objdir/$output_la-$k.$objext objlist=" $obj" func_len " $last_robj" func_arith $len0 + $func_len_result len=$func_arith_result fi done # Handle the remaining objects by creating one last # reloadable object file. All subsequent reloadable object # files will link in the last one created. test -z "$concat_cmds" || concat_cmds=$concat_cmds~ reload_objs="$objlist $last_robj" eval concat_cmds=\"\$concat_cmds$reload_cmds\" if test -n "$last_robj"; then eval concat_cmds=\"\$concat_cmds~\$RM $last_robj\" fi func_append delfiles " $output" else output= fi ${skipped_export-false} && { func_verbose "generating symbol list for '$libname.la'" export_symbols=$output_objdir/$libname.exp $opt_dry_run || $RM $export_symbols libobjs=$output # Append the command to create the export file. test -z "$concat_cmds" || concat_cmds=$concat_cmds~ eval concat_cmds=\"\$concat_cmds$export_symbols_cmds\" if test -n "$last_robj"; then eval concat_cmds=\"\$concat_cmds~\$RM $last_robj\" fi } test -n "$save_libobjs" && func_verbose "creating a temporary reloadable object file: $output" # Loop through the commands generated above and execute them. save_ifs=$IFS; IFS='~' for cmd in $concat_cmds; do IFS=$save_ifs $opt_quiet || { func_quote_arg expand,pretty "$cmd" eval "func_echo $func_quote_arg_result" } $opt_dry_run || eval "$cmd" || { lt_exit=$? # Restore the uninstalled library and exit if test relink = "$opt_mode"; then ( cd "$output_objdir" && \ $RM "${realname}T" && \ $MV "${realname}U" "$realname" ) fi exit $lt_exit } done IFS=$save_ifs if test -n "$export_symbols_regex" && ${skipped_export-false}; then func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"' func_show_eval '$MV "${export_symbols}T" "$export_symbols"' fi fi ${skipped_export-false} && { if test -n "$export_symbols" && test -n "$include_expsyms"; then tmp_export_symbols=$export_symbols test -n "$orig_export_symbols" && tmp_export_symbols=$orig_export_symbols $opt_dry_run || eval '$ECHO "$include_expsyms" | $SP2NL >> "$tmp_export_symbols"' fi if test -n "$orig_export_symbols"; then # The given exports_symbols file has to be filtered, so filter it. func_verbose "filter symbol list for '$libname.la' to tag DATA exports" # FIXME: $output_objdir/$libname.filter potentially contains lots of # 's' commands, which not all seds can handle. GNU sed should be fine # though. Also, the filter scales superlinearly with the number of # global variables. join(1) would be nice here, but unfortunately # isn't a blessed tool. $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter func_append delfiles " $export_symbols $output_objdir/$libname.filter" export_symbols=$output_objdir/$libname.def $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols fi } libobjs=$output # Restore the value of output. output=$save_output if test -n "$convenience" && test -n "$whole_archive_flag_spec"; then eval libobjs=\"\$libobjs $whole_archive_flag_spec\" test "X$libobjs" = "X " && libobjs= fi # Expand the library linking commands again to reset the # value of $libobjs for piecewise linking. # Do each of the archive commands. if test yes = "$module" && test -n "$module_cmds"; then if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then cmds=$module_expsym_cmds else cmds=$module_cmds fi else if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then cmds=$archive_expsym_cmds else cmds=$archive_cmds fi fi fi if test -n "$delfiles"; then # Append the command to remove temporary files to $cmds. eval cmds=\"\$cmds~\$RM $delfiles\" fi # Add any objects from preloaded convenience libraries if test -n "$dlprefiles"; then gentop=$output_objdir/${outputname}x func_append generated " $gentop" func_extract_archives $gentop $dlprefiles func_append libobjs " $func_extract_archives_result" test "X$libobjs" = "X " && libobjs= fi save_ifs=$IFS; IFS='~' for cmd in $cmds; do IFS=$sp$nl eval cmd=\"$cmd\" IFS=$save_ifs $opt_quiet || { func_quote_arg expand,pretty "$cmd" eval "func_echo $func_quote_arg_result" } $opt_dry_run || eval "$cmd" || { lt_exit=$? # Restore the uninstalled library and exit if test relink = "$opt_mode"; then ( cd "$output_objdir" && \ $RM "${realname}T" && \ $MV "${realname}U" "$realname" ) fi exit $lt_exit } done IFS=$save_ifs # Restore the uninstalled library and exit if test relink = "$opt_mode"; then $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}T && $MV $realname ${realname}T && $MV ${realname}U $realname)' || exit $? if test -n "$convenience"; then if test -z "$whole_archive_flag_spec"; then func_show_eval '${RM}r "$gentop"' fi fi exit $EXIT_SUCCESS fi # Create links to the real library. for linkname in $linknames; do if test "$realname" != "$linkname"; then func_show_eval '(cd "$output_objdir" && $RM "$linkname" && $LN_S "$realname" "$linkname")' 'exit $?' fi done # If -module or -export-dynamic was specified, set the dlname. if test yes = "$module" || test yes = "$export_dynamic"; then # On all known operating systems, these are identical. dlname=$soname fi fi ;; obj) if test -n "$dlfiles$dlprefiles" || test no != "$dlself"; then func_warning "'-dlopen' is ignored for objects" fi case " $deplibs" in *\ -l* | *\ -L*) func_warning "'-l' and '-L' are ignored for objects" ;; esac test -n "$rpath" && \ func_warning "'-rpath' is ignored for objects" test -n "$xrpath" && \ func_warning "'-R' is ignored for objects" test -n "$vinfo" && \ func_warning "'-version-info' is ignored for objects" test -n "$release" && \ func_warning "'-release' is ignored for objects" case $output in *.lo) test -n "$objs$old_deplibs" && \ func_fatal_error "cannot build library object '$output' from non-libtool objects" libobj=$output func_lo2o "$libobj" obj=$func_lo2o_result ;; *) libobj= obj=$output ;; esac # Delete the old objects. $opt_dry_run || $RM $obj $libobj # Objects from convenience libraries. This assumes # single-version convenience libraries. Whenever we create # different ones for PIC/non-PIC, this we'll have to duplicate # the extraction. reload_conv_objs= gentop= # if reload_cmds runs $LD directly, get rid of -Wl from # whole_archive_flag_spec and hope we can get by with turning comma # into space. case $reload_cmds in *\$LD[\ \$]*) wl= ;; esac if test -n "$convenience"; then if test -n "$whole_archive_flag_spec"; then eval tmp_whole_archive_flags=\"$whole_archive_flag_spec\" test -n "$wl" || tmp_whole_archive_flags=`$ECHO "$tmp_whole_archive_flags" | $SED 's|,| |g'` reload_conv_objs=$reload_objs\ $tmp_whole_archive_flags else gentop=$output_objdir/${obj}x func_append generated " $gentop" func_extract_archives $gentop $convenience reload_conv_objs="$reload_objs $func_extract_archives_result" fi fi # If we're not building shared, we need to use non_pic_objs test yes = "$build_libtool_libs" || libobjs=$non_pic_objects # Create the old-style object. reload_objs=$objs$old_deplibs' '`$ECHO "$libobjs" | $SP2NL | $SED "/\.$libext$/d; /\.lib$/d; $lo2o" | $NL2SP`' '$reload_conv_objs output=$obj func_execute_cmds "$reload_cmds" 'exit $?' # Exit if we aren't doing a library object file. if test -z "$libobj"; then if test -n "$gentop"; then func_show_eval '${RM}r "$gentop"' fi exit $EXIT_SUCCESS fi test yes = "$build_libtool_libs" || { if test -n "$gentop"; then func_show_eval '${RM}r "$gentop"' fi # Create an invalid libtool object if no PIC, so that we don't # accidentally link it into a program. # $show "echo timestamp > $libobj" # $opt_dry_run || eval "echo timestamp > $libobj" || exit $? exit $EXIT_SUCCESS } if test -n "$pic_flag" || test default != "$pic_mode"; then # Only do commands if we really have different PIC objects. reload_objs="$libobjs $reload_conv_objs" output=$libobj func_execute_cmds "$reload_cmds" 'exit $?' fi if test -n "$gentop"; then func_show_eval '${RM}r "$gentop"' fi exit $EXIT_SUCCESS ;; prog) case $host in *cygwin*) func_stripname '' '.exe' "$output" output=$func_stripname_result.exe;; esac test -n "$vinfo" && \ func_warning "'-version-info' is ignored for programs" test -n "$release" && \ func_warning "'-release' is ignored for programs" $preload \ && test unknown,unknown,unknown = "$dlopen_support,$dlopen_self,$dlopen_self_static" \ && func_warning "'LT_INIT([dlopen])' not used. Assuming no dlopen support." case $host in *-*-rhapsody* | *-*-darwin1.[012]) # On Rhapsody replace the C library is the System framework compile_deplibs=`$ECHO " $compile_deplibs" | $SED 's/ -lc / System.ltframework /'` finalize_deplibs=`$ECHO " $finalize_deplibs" | $SED 's/ -lc / System.ltframework /'` ;; esac case $host in *-*-darwin*) # Don't allow lazy linking, it breaks C++ global constructors # But is supposedly fixed on 10.4 or later (yay!). if test CXX = "$tagname"; then case ${MACOSX_DEPLOYMENT_TARGET-10.0} in 10.[0123]) func_append compile_command " $wl-bind_at_load" func_append finalize_command " $wl-bind_at_load" ;; esac fi # Time to change all our "foo.ltframework" stuff back to "-framework foo" compile_deplibs=`$ECHO " $compile_deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` finalize_deplibs=`$ECHO " $finalize_deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` ;; esac # move library search paths that coincide with paths to not yet # installed libraries to the beginning of the library search list new_libs= for path in $notinst_path; do case " $new_libs " in *" -L$path/$objdir "*) ;; *) case " $compile_deplibs " in *" -L$path/$objdir "*) func_append new_libs " -L$path/$objdir" ;; esac ;; esac done for deplib in $compile_deplibs; do case $deplib in -L*) case " $new_libs " in *" $deplib "*) ;; *) func_append new_libs " $deplib" ;; esac ;; *) func_append new_libs " $deplib" ;; esac done compile_deplibs=$new_libs func_append compile_command " $compile_deplibs" func_append finalize_command " $finalize_deplibs" if test -n "$rpath$xrpath"; then # If the user specified any rpath flags, then add them. for libdir in $rpath $xrpath; do # This is the magic to use -rpath. case "$finalize_rpath " in *" $libdir "*) ;; *) func_append finalize_rpath " $libdir" ;; esac done fi # Now hardcode the library paths rpath= hardcode_libdirs= for libdir in $compile_rpath $finalize_rpath; do if test -n "$hardcode_libdir_flag_spec"; then if test -n "$hardcode_libdir_separator"; then if test -z "$hardcode_libdirs"; then hardcode_libdirs=$libdir else # Just accumulate the unique libdirs. case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) ;; *) func_append hardcode_libdirs "$hardcode_libdir_separator$libdir" ;; esac fi else eval flag=\"$hardcode_libdir_flag_spec\" func_append rpath " $flag" fi elif test -n "$runpath_var"; then case "$perm_rpath " in *" $libdir "*) ;; *) func_append perm_rpath " $libdir" ;; esac fi case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) testbindir=`$ECHO "$libdir" | $SED -e 's*/lib$*/bin*'` case :$dllsearchpath: in *":$libdir:"*) ;; ::) dllsearchpath=$libdir;; *) func_append dllsearchpath ":$libdir";; esac case :$dllsearchpath: in *":$testbindir:"*) ;; ::) dllsearchpath=$testbindir;; *) func_append dllsearchpath ":$testbindir";; esac ;; esac done # Substitute the hardcoded libdirs into the rpath. if test -n "$hardcode_libdir_separator" && test -n "$hardcode_libdirs"; then libdir=$hardcode_libdirs eval rpath=\" $hardcode_libdir_flag_spec\" fi compile_rpath=$rpath rpath= hardcode_libdirs= for libdir in $finalize_rpath; do if test -n "$hardcode_libdir_flag_spec"; then if test -n "$hardcode_libdir_separator"; then if test -z "$hardcode_libdirs"; then hardcode_libdirs=$libdir else # Just accumulate the unique libdirs. case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) ;; *) func_append hardcode_libdirs "$hardcode_libdir_separator$libdir" ;; esac fi else eval flag=\"$hardcode_libdir_flag_spec\" func_append rpath " $flag" fi elif test -n "$runpath_var"; then case "$finalize_perm_rpath " in *" $libdir "*) ;; *) func_append finalize_perm_rpath " $libdir" ;; esac fi done # Substitute the hardcoded libdirs into the rpath. if test -n "$hardcode_libdir_separator" && test -n "$hardcode_libdirs"; then libdir=$hardcode_libdirs eval rpath=\" $hardcode_libdir_flag_spec\" fi finalize_rpath=$rpath if test -n "$libobjs" && test yes = "$build_old_libs"; then # Transform all the library objects into standard objects. compile_command=`$ECHO "$compile_command" | $SP2NL | $SED "$lo2o" | $NL2SP` finalize_command=`$ECHO "$finalize_command" | $SP2NL | $SED "$lo2o" | $NL2SP` fi func_generate_dlsyms "$outputname" "@PROGRAM@" false # template prelinking step if test -n "$prelink_cmds"; then func_execute_cmds "$prelink_cmds" 'exit $?' fi wrappers_required=: case $host in *cegcc* | *mingw32ce*) # Disable wrappers for cegcc and mingw32ce hosts, we are cross compiling anyway. wrappers_required=false ;; *cygwin* | *mingw* ) test yes = "$build_libtool_libs" || wrappers_required=false ;; *) if test no = "$need_relink" || test yes != "$build_libtool_libs"; then wrappers_required=false fi ;; esac $wrappers_required || { # Replace the output file specification. compile_command=`$ECHO "$compile_command" | $SED 's%@OUTPUT@%'"$output"'%g'` link_command=$compile_command$compile_rpath # We have no uninstalled library dependencies, so finalize right now. exit_status=0 func_show_eval "$link_command" 'exit_status=$?' if test -n "$postlink_cmds"; then func_to_tool_file "$output" postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'` func_execute_cmds "$postlink_cmds" 'exit $?' fi # Delete the generated files. if test -f "$output_objdir/${outputname}S.$objext"; then func_show_eval '$RM "$output_objdir/${outputname}S.$objext"' fi exit $exit_status } if test -n "$compile_shlibpath$finalize_shlibpath"; then compile_command="$shlibpath_var=\"$compile_shlibpath$finalize_shlibpath\$$shlibpath_var\" $compile_command" fi if test -n "$finalize_shlibpath"; then finalize_command="$shlibpath_var=\"$finalize_shlibpath\$$shlibpath_var\" $finalize_command" fi compile_var= finalize_var= if test -n "$runpath_var"; then if test -n "$perm_rpath"; then # We should set the runpath_var. rpath= for dir in $perm_rpath; do func_append rpath "$dir:" done compile_var="$runpath_var=\"$rpath\$$runpath_var\" " fi if test -n "$finalize_perm_rpath"; then # We should set the runpath_var. rpath= for dir in $finalize_perm_rpath; do func_append rpath "$dir:" done finalize_var="$runpath_var=\"$rpath\$$runpath_var\" " fi fi if test yes = "$no_install"; then # We don't need to create a wrapper script. link_command=$compile_var$compile_command$compile_rpath # Replace the output file specification. link_command=`$ECHO "$link_command" | $SED 's%@OUTPUT@%'"$output"'%g'` # Delete the old output file. $opt_dry_run || $RM $output # Link the executable and exit func_show_eval "$link_command" 'exit $?' if test -n "$postlink_cmds"; then func_to_tool_file "$output" postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'` func_execute_cmds "$postlink_cmds" 'exit $?' fi exit $EXIT_SUCCESS fi case $hardcode_action,$fast_install in relink,*) # Fast installation is not supported link_command=$compile_var$compile_command$compile_rpath relink_command=$finalize_var$finalize_command$finalize_rpath func_warning "this platform does not like uninstalled shared libraries" func_warning "'$output' will be relinked during installation" ;; *,yes) link_command=$finalize_var$compile_command$finalize_rpath relink_command=`$ECHO "$compile_var$compile_command$compile_rpath" | $SED 's%@OUTPUT@%\$progdir/\$file%g'` ;; *,no) link_command=$compile_var$compile_command$compile_rpath relink_command=$finalize_var$finalize_command$finalize_rpath ;; *,needless) link_command=$finalize_var$compile_command$finalize_rpath relink_command= ;; esac # Replace the output file specification. link_command=`$ECHO "$link_command" | $SED 's%@OUTPUT@%'"$output_objdir/$outputname"'%g'` # Delete the old output files. $opt_dry_run || $RM $output $output_objdir/$outputname $output_objdir/lt-$outputname func_show_eval "$link_command" 'exit $?' if test -n "$postlink_cmds"; then func_to_tool_file "$output_objdir/$outputname" postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output_objdir/$outputname"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'` func_execute_cmds "$postlink_cmds" 'exit $?' fi # Now create the wrapper script. func_verbose "creating $output" # Quote the relink command for shipping. if test -n "$relink_command"; then # Preserve any variables that may affect compiler behavior for var in $variables_saved_for_relink; do if eval test -z \"\${$var+set}\"; then relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command" elif eval var_value=\$$var; test -z "$var_value"; then relink_command="$var=; export $var; $relink_command" else func_quote_arg pretty "$var_value" relink_command="$var=$func_quote_arg_result; export $var; $relink_command" fi done func_quote eval cd "`pwd`" func_quote_arg pretty,unquoted "($func_quote_result; $relink_command)" relink_command=$func_quote_arg_unquoted_result fi # Only actually do things if not in dry run mode. $opt_dry_run || { # win32 will think the script is a binary if it has # a .exe suffix, so we strip it off here. case $output in *.exe) func_stripname '' '.exe' "$output" output=$func_stripname_result ;; esac # test for cygwin because mv fails w/o .exe extensions case $host in *cygwin*) exeext=.exe func_stripname '' '.exe' "$outputname" outputname=$func_stripname_result ;; *) exeext= ;; esac case $host in *cygwin* | *mingw* ) func_dirname_and_basename "$output" "" "." output_name=$func_basename_result output_path=$func_dirname_result cwrappersource=$output_path/$objdir/lt-$output_name.c cwrapper=$output_path/$output_name.exe $RM $cwrappersource $cwrapper trap "$RM $cwrappersource $cwrapper; exit $EXIT_FAILURE" 1 2 15 func_emit_cwrapperexe_src > $cwrappersource # The wrapper executable is built using the $host compiler, # because it contains $host paths and files. If cross- # compiling, it, like the target executable, must be # executed on the $host or under an emulation environment. $opt_dry_run || { $LTCC $LTCFLAGS -o $cwrapper $cwrappersource $STRIP $cwrapper } # Now, create the wrapper script for func_source use: func_ltwrapper_scriptname $cwrapper $RM $func_ltwrapper_scriptname_result trap "$RM $func_ltwrapper_scriptname_result; exit $EXIT_FAILURE" 1 2 15 $opt_dry_run || { # note: this script will not be executed, so do not chmod. if test "x$build" = "x$host"; then $cwrapper --lt-dump-script > $func_ltwrapper_scriptname_result else func_emit_wrapper no > $func_ltwrapper_scriptname_result fi } ;; * ) $RM $output trap "$RM $output; exit $EXIT_FAILURE" 1 2 15 func_emit_wrapper no > $output chmod +x $output ;; esac } exit $EXIT_SUCCESS ;; esac # See if we need to build an old-fashioned archive. for oldlib in $oldlibs; do case $build_libtool_libs in convenience) oldobjs="$libobjs_save $symfileobj" addlibs=$convenience build_libtool_libs=no ;; module) oldobjs=$libobjs_save addlibs=$old_convenience build_libtool_libs=no ;; *) oldobjs="$old_deplibs $non_pic_objects" $preload && test -f "$symfileobj" \ && func_append oldobjs " $symfileobj" addlibs=$old_convenience ;; esac if test -n "$addlibs"; then gentop=$output_objdir/${outputname}x func_append generated " $gentop" func_extract_archives $gentop $addlibs func_append oldobjs " $func_extract_archives_result" fi # Do each command in the archive commands. if test -n "$old_archive_from_new_cmds" && test yes = "$build_libtool_libs"; then cmds=$old_archive_from_new_cmds else # Add any objects from preloaded convenience libraries if test -n "$dlprefiles"; then gentop=$output_objdir/${outputname}x func_append generated " $gentop" func_extract_archives $gentop $dlprefiles func_append oldobjs " $func_extract_archives_result" fi # POSIX demands no paths to be encoded in archives. We have # to avoid creating archives with duplicate basenames if we # might have to extract them afterwards, e.g., when creating a # static archive out of a convenience library, or when linking # the entirety of a libtool archive into another (currently # not supported by libtool). if (for obj in $oldobjs do func_basename "$obj" $ECHO "$func_basename_result" done | sort | sort -uc >/dev/null 2>&1); then : else echo "copying selected object files to avoid basename conflicts..." gentop=$output_objdir/${outputname}x func_append generated " $gentop" func_mkdir_p "$gentop" save_oldobjs=$oldobjs oldobjs= counter=1 for obj in $save_oldobjs do func_basename "$obj" objbase=$func_basename_result case " $oldobjs " in " ") oldobjs=$obj ;; *[\ /]"$objbase "*) while :; do # Make sure we don't pick an alternate name that also # overlaps. newobj=lt$counter-$objbase func_arith $counter + 1 counter=$func_arith_result case " $oldobjs " in *[\ /]"$newobj "*) ;; *) if test ! -f "$gentop/$newobj"; then break; fi ;; esac done func_show_eval "ln $obj $gentop/$newobj || cp $obj $gentop/$newobj" func_append oldobjs " $gentop/$newobj" ;; *) func_append oldobjs " $obj" ;; esac done fi func_to_tool_file "$oldlib" func_convert_file_msys_to_w32 tool_oldlib=$func_to_tool_file_result eval cmds=\"$old_archive_cmds\" func_len " $cmds" len=$func_len_result if test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then cmds=$old_archive_cmds elif test -n "$archiver_list_spec"; then func_verbose "using command file archive linking..." for obj in $oldobjs do func_to_tool_file "$obj" $ECHO "$func_to_tool_file_result" done > $output_objdir/$libname.libcmd func_to_tool_file "$output_objdir/$libname.libcmd" oldobjs=" $archiver_list_spec$func_to_tool_file_result" cmds=$old_archive_cmds else # the command line is too long to link in one step, link in parts func_verbose "using piecewise archive linking..." save_RANLIB=$RANLIB RANLIB=: objlist= concat_cmds= save_oldobjs=$oldobjs oldobjs= # Is there a better way of finding the last object in the list? for obj in $save_oldobjs do last_oldobj=$obj done eval test_cmds=\"$old_archive_cmds\" func_len " $test_cmds" len0=$func_len_result len=$len0 for obj in $save_oldobjs do func_len " $obj" func_arith $len + $func_len_result len=$func_arith_result func_append objlist " $obj" if test "$len" -lt "$max_cmd_len"; then : else # the above command should be used before it gets too long oldobjs=$objlist if test "$obj" = "$last_oldobj"; then RANLIB=$save_RANLIB fi test -z "$concat_cmds" || concat_cmds=$concat_cmds~ eval concat_cmds=\"\$concat_cmds$old_archive_cmds\" objlist= len=$len0 fi done RANLIB=$save_RANLIB oldobjs=$objlist if test -z "$oldobjs"; then eval cmds=\"\$concat_cmds\" else eval cmds=\"\$concat_cmds~\$old_archive_cmds\" fi fi fi func_execute_cmds "$cmds" 'exit $?' done test -n "$generated" && \ func_show_eval "${RM}r$generated" # Now create the libtool archive. case $output in *.la) old_library= test yes = "$build_old_libs" && old_library=$libname.$libext func_verbose "creating $output" # Preserve any variables that may affect compiler behavior for var in $variables_saved_for_relink; do if eval test -z \"\${$var+set}\"; then relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command" elif eval var_value=\$$var; test -z "$var_value"; then relink_command="$var=; export $var; $relink_command" else func_quote_arg pretty,unquoted "$var_value" relink_command="$var=$func_quote_arg_unquoted_result; export $var; $relink_command" fi done # Quote the link command for shipping. func_quote eval cd "`pwd`" relink_command="($func_quote_result; $SHELL \"$progpath\" $preserve_args --mode=relink $libtool_args @inst_prefix_dir@)" func_quote_arg pretty,unquoted "$relink_command" relink_command=$func_quote_arg_unquoted_result if test yes = "$hardcode_automatic"; then relink_command= fi # Only create the output if not a dry run. $opt_dry_run || { for installed in no yes; do if test yes = "$installed"; then if test -z "$install_libdir"; then break fi output=$output_objdir/${outputname}i # Replace all uninstalled libtool libraries with the installed ones newdependency_libs= for deplib in $dependency_libs; do case $deplib in *.la) func_basename "$deplib" name=$func_basename_result func_resolve_sysroot "$deplib" eval libdir=`$SED -n -e 's/^libdir=\(.*\)$/\1/p' $func_resolve_sysroot_result` test -z "$libdir" && \ func_fatal_error "'$deplib' is not a valid libtool archive" func_append newdependency_libs " ${lt_sysroot:+=}$libdir/$name" ;; -L*) func_stripname -L '' "$deplib" func_replace_sysroot "$func_stripname_result" func_append newdependency_libs " -L$func_replace_sysroot_result" ;; -R*) func_stripname -R '' "$deplib" func_replace_sysroot "$func_stripname_result" func_append newdependency_libs " -R$func_replace_sysroot_result" ;; *) func_append newdependency_libs " $deplib" ;; esac done dependency_libs=$newdependency_libs newdlfiles= for lib in $dlfiles; do case $lib in *.la) func_basename "$lib" name=$func_basename_result eval libdir=`$SED -n -e 's/^libdir=\(.*\)$/\1/p' $lib` test -z "$libdir" && \ func_fatal_error "'$lib' is not a valid libtool archive" func_append newdlfiles " ${lt_sysroot:+=}$libdir/$name" ;; *) func_append newdlfiles " $lib" ;; esac done dlfiles=$newdlfiles newdlprefiles= for lib in $dlprefiles; do case $lib in *.la) # Only pass preopened files to the pseudo-archive (for # eventual linking with the app. that links it) if we # didn't already link the preopened objects directly into # the library: func_basename "$lib" name=$func_basename_result eval libdir=`$SED -n -e 's/^libdir=\(.*\)$/\1/p' $lib` test -z "$libdir" && \ func_fatal_error "'$lib' is not a valid libtool archive" func_append newdlprefiles " ${lt_sysroot:+=}$libdir/$name" ;; esac done dlprefiles=$newdlprefiles else newdlfiles= for lib in $dlfiles; do case $lib in [\\/]* | [A-Za-z]:[\\/]*) abs=$lib ;; *) abs=`pwd`"/$lib" ;; esac func_append newdlfiles " $abs" done dlfiles=$newdlfiles newdlprefiles= for lib in $dlprefiles; do case $lib in [\\/]* | [A-Za-z]:[\\/]*) abs=$lib ;; *) abs=`pwd`"/$lib" ;; esac func_append newdlprefiles " $abs" done dlprefiles=$newdlprefiles fi $RM $output # place dlname in correct position for cygwin # In fact, it would be nice if we could use this code for all target # systems that can't hard-code library paths into their executables # and that have no shared library path variable independent of PATH, # but it turns out we can't easily determine that from inspecting # libtool variables, so we have to hard-code the OSs to which it # applies here; at the moment, that means platforms that use the PE # object format with DLL files. See the long comment at the top of # tests/bindir.at for full details. tdlname=$dlname case $host,$output,$installed,$module,$dlname in *cygwin*,*lai,yes,no,*.dll | *mingw*,*lai,yes,no,*.dll | *cegcc*,*lai,yes,no,*.dll) # If a -bindir argument was supplied, place the dll there. if test -n "$bindir"; then func_relative_path "$install_libdir" "$bindir" tdlname=$func_relative_path_result/$dlname else # Otherwise fall back on heuristic. tdlname=../bin/$dlname fi ;; esac $ECHO > $output "\ # $outputname - a libtool library file # Generated by $PROGRAM (GNU $PACKAGE) $VERSION # # Please DO NOT delete this file! # It is necessary for linking the library. # The name that we can dlopen(3). dlname='$tdlname' # Names of this library. library_names='$library_names' # The name of the static archive. old_library='$old_library' # Linker flags that cannot go in dependency_libs. inherited_linker_flags='$new_inherited_linker_flags' # Libraries that this one depends upon. dependency_libs='$dependency_libs' # Names of additional weak libraries provided by this library weak_library_names='$weak_libs' # Version information for $libname. current=$current age=$age revision=$revision # Is this an already installed library? installed=$installed # Should we warn about portability when linking against -modules? shouldnotlink=$module # Files to dlopen/dlpreopen dlopen='$dlfiles' dlpreopen='$dlprefiles' # Directory that this library needs to be installed in: libdir='$install_libdir'" if test no,yes = "$installed,$need_relink"; then $ECHO >> $output "\ relink_command=\"$relink_command\"" fi done } # Do a symbolic link so that the libtool archive can be found in # LD_LIBRARY_PATH before the program is installed. func_show_eval '( cd "$output_objdir" && $RM "$outputname" && $LN_S "../$outputname" "$outputname" )' 'exit $?' ;; esac exit $EXIT_SUCCESS } if test link = "$opt_mode" || test relink = "$opt_mode"; then func_mode_link ${1+"$@"} fi # func_mode_uninstall arg... func_mode_uninstall () { $debug_cmd RM=$nonopt files= rmforce=false exit_status=0 # This variable tells wrapper scripts just to set variables rather # than running their programs. libtool_install_magic=$magic for arg do case $arg in -f) func_append RM " $arg"; rmforce=: ;; -*) func_append RM " $arg" ;; *) func_append files " $arg" ;; esac done test -z "$RM" && \ func_fatal_help "you must specify an RM program" rmdirs= for file in $files; do func_dirname "$file" "" "." dir=$func_dirname_result if test . = "$dir"; then odir=$objdir else odir=$dir/$objdir fi func_basename "$file" name=$func_basename_result test uninstall = "$opt_mode" && odir=$dir # Remember odir for removal later, being careful to avoid duplicates if test clean = "$opt_mode"; then case " $rmdirs " in *" $odir "*) ;; *) func_append rmdirs " $odir" ;; esac fi # Don't error if the file doesn't exist and rm -f was used. if { test -L "$file"; } >/dev/null 2>&1 || { test -h "$file"; } >/dev/null 2>&1 || test -f "$file"; then : elif test -d "$file"; then exit_status=1 continue elif $rmforce; then continue fi rmfiles=$file case $name in *.la) # Possibly a libtool archive, so verify it. if func_lalib_p "$file"; then func_source $dir/$name # Delete the libtool libraries and symlinks. for n in $library_names; do func_append rmfiles " $odir/$n" done test -n "$old_library" && func_append rmfiles " $odir/$old_library" case $opt_mode in clean) case " $library_names " in *" $dlname "*) ;; *) test -n "$dlname" && func_append rmfiles " $odir/$dlname" ;; esac test -n "$libdir" && func_append rmfiles " $odir/$name $odir/${name}i" ;; uninstall) if test -n "$library_names"; then # Do each command in the postuninstall commands. func_execute_cmds "$postuninstall_cmds" '$rmforce || exit_status=1' fi if test -n "$old_library"; then # Do each command in the old_postuninstall commands. func_execute_cmds "$old_postuninstall_cmds" '$rmforce || exit_status=1' fi # FIXME: should reinstall the best remaining shared library. ;; esac fi ;; *.lo) # Possibly a libtool object, so verify it. if func_lalib_p "$file"; then # Read the .lo file func_source $dir/$name # Add PIC object to the list of files to remove. if test -n "$pic_object" && test none != "$pic_object"; then func_append rmfiles " $dir/$pic_object" fi # Add non-PIC object to the list of files to remove. if test -n "$non_pic_object" && test none != "$non_pic_object"; then func_append rmfiles " $dir/$non_pic_object" fi fi ;; *) if test clean = "$opt_mode"; then noexename=$name case $file in *.exe) func_stripname '' '.exe' "$file" file=$func_stripname_result func_stripname '' '.exe' "$name" noexename=$func_stripname_result # $file with .exe has already been added to rmfiles, # add $file without .exe func_append rmfiles " $file" ;; esac # Do a test to see if this is a libtool program. if func_ltwrapper_p "$file"; then if func_ltwrapper_executable_p "$file"; then func_ltwrapper_scriptname "$file" relink_command= func_source $func_ltwrapper_scriptname_result func_append rmfiles " $func_ltwrapper_scriptname_result" else relink_command= func_source $dir/$noexename fi # note $name still contains .exe if it was in $file originally # as does the version of $file that was added into $rmfiles func_append rmfiles " $odir/$name $odir/${name}S.$objext" if test yes = "$fast_install" && test -n "$relink_command"; then func_append rmfiles " $odir/lt-$name" fi if test "X$noexename" != "X$name"; then func_append rmfiles " $odir/lt-$noexename.c" fi fi fi ;; esac func_show_eval "$RM $rmfiles" 'exit_status=1' done # Try to remove the $objdir's in the directories where we deleted files for dir in $rmdirs; do if test -d "$dir"; then func_show_eval "rmdir $dir >/dev/null 2>&1" fi done exit $exit_status } if test uninstall = "$opt_mode" || test clean = "$opt_mode"; then func_mode_uninstall ${1+"$@"} fi test -z "$opt_mode" && { help=$generic_help func_fatal_help "you must specify a MODE" } test -z "$exec_cmd" && \ func_fatal_help "invalid operation mode '$opt_mode'" if test -n "$exec_cmd"; then eval exec "$exec_cmd" exit $EXIT_FAILURE fi exit $exit_status # The TAGs below are defined such that we never get into a situation # where we disable both kinds of libraries. Given conflicting # choices, we go for a static library, that is the most portable, # since we can't tell whether shared libraries were disabled because # the user asked for that or because the platform doesn't support # them. This is particularly important on AIX, because we don't # support having both static and shared libraries enabled at the same # time on that platform, so we default to a shared-only configuration. # If a disable-shared tag is given, we'll fallback to a static-only # configuration. But we'll never go from static-only to shared-only. # ### BEGIN LIBTOOL TAG CONFIG: disable-shared build_libtool_libs=no build_old_libs=yes # ### END LIBTOOL TAG CONFIG: disable-shared # ### BEGIN LIBTOOL TAG CONFIG: disable-static build_old_libs=`case $build_libtool_libs in yes) echo no;; *) echo yes;; esac` # ### END LIBTOOL TAG CONFIG: disable-static # Local Variables: # mode:shell-script # sh-indentation:2 # End: webdar-1.0.0/src/0000755000175000017520000000000015045134255010552 500000000000000webdar-1.0.0/src/html_hash_algo.hpp0000644000175000017520000000361314773727225014173 00000000000000/*********************************************************************/ // webdar - a web server and interface program to libdar // Copyright (C) 2013-2025 Denis Corbin // // This file is part of Webdar // // Webdar is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // Webdar is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Webdar. If not, see // //---- // to contact the author: dar.linux@free.fr /*********************************************************************/ #ifndef HTML_HASH_ALGO_HPP #define HTML_HASH_ALGO_HPP // C system header files #include "my_config.h" extern "C" { } // C++ system header files #include // webdar headers #include "html_form_select.hpp" /// html component used for the user to define a has algorithm class html_hash_algo : public html_form_select { public: static const std::string changed; html_hash_algo(const std::string & title); html_hash_algo(const html_hash_algo & ref) = delete; html_hash_algo(html_hash_algo && ref) noexcept = delete; html_hash_algo & operator = (const html_hash_algo & ref) = delete; html_hash_algo & operator = (html_hash_algo && ref) noexcept = delete; ~html_hash_algo() = default; libdar::hash_algo get_value() const; void set_value(libdar::hash_algo val); /// actor indirect inheritance virtual void on_event(const std::string & event_name) override { act(changed); }; }; #endif webdar-1.0.0/src/archive_compare.hpp0000644000175000017520000000560215024330745014334 00000000000000/*********************************************************************/ // webdar - a web server and interface program to libdar // Copyright (C) 2013-2025 Denis Corbin // // This file is part of Webdar // // Webdar is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // Webdar is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Webdar. If not, see // //---- // to contact the author: dar.linux@free.fr /*********************************************************************/ #ifndef ARCHIVE_COMPARE_HPP #define ARCHIVE_COMPARE_HPP // C system header files #include "my_config.h" extern "C" { } // C++ system header files #include #include // webdar headers #include "html_web_user_interaction.hpp" #include "saisie.hpp" /// class archive_compare run libdar comparison in a dedicated thread /// Accordingly to the libhtreadar::thread paradigm, this class /// provides methods to set parameter to the comparison operation /// these are not set at object construction time, nor the thread /// is run at that time, but once all parameter have been set by /// invoking the libthreadar::run() method /// \note this class is not a graphical class at all but relies /// on aprovided web_user_interaction object to report status and /// intermediate information about the operation under process class archive_compare : public libthreadar::thread_signal { public: archive_compare(); archive_compare(const archive_compare & ref) = delete; archive_compare(archive_compare && ref) noexcept = default; archive_compare & operator = (const archive_compare & ref) = delete; archive_compare & operator = (archive_compare && ref) noexcept = default; ~archive_compare() { cancel(); join(); }; // parameters expected by the libdar::archive constructor // and libdar::archive::op_diff method void set_user_interaction(std::shared_ptr ref) { ui = ref; }; void set_parametrage(const saisie* x_param) { param = x_param; }; protected: /// inherited from class libthreadar::thread /// this fires the libdar comparison operation with the so far /// provided parameters virtual void inherited_run() override; /// inherited from libthreadar::thread virtual void signaled_inherited_cancel() override; private: const saisie* param; std::shared_ptr ui; }; #endif webdar-1.0.0/src/css_property.cpp0000644000175000017520000000264114773727225013751 00000000000000/*********************************************************************/ // webdar - a web server and interface program to libdar // Copyright (C) 2013-2025 Denis Corbin // // This file is part of Webdar // // Webdar is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // Webdar is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Webdar. If not, see // //---- // to contact the author: dar.linux@free.fr /*********************************************************************/ // C system header files #include "my_config.h" extern "C" { } // C++ system header files // webdar headers // #include "css_property.hpp" using namespace std; void css_property::clear() { value = ""; unset = true; } void css_property::set_value(const string & val) { value = val; unset = false; } void css_property::update_from(const css_property & ref) { if(! ref.unset) { value = ref.value; unset = false; } } webdar-1.0.0/src/html_error.hpp0000644000175000017520000000435314773727225013401 00000000000000/*********************************************************************/ // webdar - a web server and interface program to libdar // Copyright (C) 2013-2025 Denis Corbin // // This file is part of Webdar // // Webdar is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // Webdar is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Webdar. If not, see // //---- // to contact the author: dar.linux@free.fr /*********************************************************************/ #ifndef HTML_ERROR_HPP #define HTML_ERROR_HPP // C system header files #include "my_config.h" extern "C" { } // C++ system header files // webdar headers #include "html_page.hpp" #include "events.hpp" #include "html_text.hpp" #include "html_button.hpp" /// html page reporting an error class html_error : public html_page, public events, public actor { public: static const char* acknowledged; html_error(); html_error(const html_error & ref) = delete; html_error(html_error && ref) noexcept = delete; html_error & operator = (const html_error & ref) = delete; html_error & operator = (html_error && ref) noexcept = delete; ~html_error() = default; void set_message(const std::string & msg); /// inherited from class actor virtual void on_event(const std::string & event_name) override; /// defines the name of the session void set_session_name(const std::string & sessname); protected: // inherited from body_builder virtual void new_css_library_available() override; private: html_div global; html_text the_error; html_button close; // css classes static const char* class_message; static const char* class_global; static const char* class_button; // events static const char* close_event; }; #endif webdar-1.0.0/src/html_form_dynamic_table.cpp0000644000175000017520000002261614773727225016063 00000000000000/*********************************************************************/ // webdar - a web server and interface program to libdar // Copyright (C) 2013-2025 Denis Corbin // // This file is part of Webdar // // Webdar is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // Webdar is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Webdar. If not, see // //---- // to contact the author: dar.linux@free.fr /*********************************************************************/ // C system header files #include "my_config.h" extern "C" { } // C++ system header files #include // webdar headers #include "webdar_css_style.hpp" // #include "html_form_dynamic_table.hpp" using namespace std; const string html_form_dynamic_table::changed = "html_form_dynamic_table_changed"; html_form_dynamic_table::html_form_dynamic_table(bool has_left_labels, bool selector_below, const string & adder_label, const string & adder_default_choice): my_provider(nullptr), left_label(has_left_labels), table(has_left_labels ? 3 : 2), adder(adder_label, new_line_to_add), ignore_events(false), default_choice(adder_default_choice) { // components configuration/ adder.add_choice("", default_choice); adder.set_selected_num(0); // adoption tree if(!selector_below) adopt(&adder); adopt(&table); if(selector_below) adopt(&adder); // events register_name(changed); adder.record_actor_on_event(this, new_line_to_add); // visibility // css stuff table.add_css_class(webdar_css_style::width_full); } void html_form_dynamic_table::set_obj_type_provider(const html_form_dynamic_table_object_provider* provider) { if(provider == nullptr) throw WEBDAR_BUG; my_provider = provider; } void html_form_dynamic_table::clear_obj_type() { adder.clear(); adder.add_choice("", default_choice); } void html_form_dynamic_table::add_obj_type(const string & label) { if(my_provider == nullptr) throw WEBDAR_BUG; adder.add_choice(label, label); adder.set_selected_num(0); } void html_form_dynamic_table::add_line(unsigned int typenum) { line newline; string changed_event; if(left_label) { newline.left_label.reset(new (nothrow) html_text()); if(! newline.left_label) throw exception_memory(); } else newline.left_label.reset(); newline.object_type_index = typenum; if(my_provider == nullptr) throw WEBDAR_BUG; newline.dynobj = my_provider->provide_object_of_type(typenum, context, changed_event); if(! newline.dynobj) throw WEBDAR_BUG; if(!changed_event.empty()) { events* ptr = dynamic_cast(newline.dynobj.get()); if(ptr == nullptr) throw WEBDAR_BUG; // if an event name is given the provided object must be able to generate events ptr->record_actor_on_event(this, changed_event); } newline.del.reset(new (nothrow) html_form_input("delete", html_form_input::check, "", "", "")); if(! newline.del) throw exception_memory(); string event_name = webdar_tools_convert_to_string(event_del_count++); newline.del->set_change_event_name(event_name); newline.del->record_actor_on_event(this, event_name); if(newline.left_label) table.adopt(&(*newline.left_label)); table.adopt(&(*newline.dynobj)); table.adopt(&(*newline.del)); list::iterator pos = table_content.insert(table_content.end(), std::move(newline)); del_event_to_content[event_name] = pos; } void html_form_dynamic_table::load_json(const json & source) { try { unsigned int version; string class_id; json listing; jsoner* jsnptr = nullptr; json config = unwrap_config_from_json_header(source, version, class_id); if(class_id != myclass_id) throw exception_range(libdar::tools_printf("Unexpected class_id in json data, found %s while expecting %s", class_id.c_str(), myclass_id)); if(version > format_version) throw exception_range(libdar::tools_printf("Json format version too hight for %s, upgrade your webdar software", myclass_id)); left_label = config.at(jlabel_has_left_label); listing = config.at(jlabel_contents); if(! listing.is_array() && ! listing.is_null()) throw exception_range(libdar::tools_printf("Expecting json list as content for %s json configuration", myclass_id)); if(my_provider == nullptr) throw WEBDAR_BUG; ignore_events = true; try { clear(); // removing all table content (but keeping object provider and context) for(json::iterator it = listing.begin(); it != listing.end(); ++it) { add_line(it->at(jlabel_index_type)); // new object is added at the end of table_content if(table_content.empty()) throw WEBDAR_BUG; if(table_content.back().object_type_index != it->at(jlabel_index_type)) throw WEBDAR_BUG; if(left_label) { if(! table_content.back().left_label) throw WEBDAR_BUG; table_content.back().left_label->set_raw_value(it->at(jlabel_left_label)); } if(! table_content.back().dynobj) throw WEBDAR_BUG; jsnptr = dynamic_cast(table_content.back().dynobj.get()); if(jsnptr == nullptr) throw WEBDAR_BUG; jsnptr->load_json(it->at(jlabel_dynobj)); } } catch(...) { ignore_events = false; throw; } ignore_events = false; } catch(json::exception & e) { throw exception_json(libdar::tools_printf("Error loading %s config", myclass_id), e); } } json html_form_dynamic_table::save_json() const { json config; json listing; json tmp; const jsoner* ptr = nullptr; for(list::const_iterator it = table_content.begin(); it != table_content.end(); ++it) { tmp.clear(); if(left_label) { if(! it->left_label) throw WEBDAR_BUG; tmp[jlabel_left_label] = it->left_label->get_raw_value(); } tmp[jlabel_index_type] = it->object_type_index; ptr = dynamic_cast(it->dynobj.get()); if(ptr == nullptr) throw WEBDAR_BUG; tmp[jlabel_dynobj] = ptr->save_json(); listing.push_back(tmp); } config[jlabel_has_left_label] = left_label; config[jlabel_contents] = listing; return wrap_config_with_json_header(format_version, myclass_id, config); } void html_form_dynamic_table::clear_json() { clear(); } void html_form_dynamic_table::on_event(const string & event_name) { if(event_name == new_line_to_add) { if(adder.get_selected_num() != 0) { // there is a shift by one between adder which first position (index 0) // tells the user to select a filter and list_of_mask_types that have the // first valid mask at position 0. add_line(adder.get_selected_num() - 1); adder.set_selected_num(0); // resetting 'adder' to undefined if(! ignore_events) act(changed); } } else del_line(event_name); // checks whether this is an event from a delete button // as well as handle change_events from generated and adopted objects } string html_form_dynamic_table::inherited_get_body_part(const chemin & path, const request & req) { string ret = html_div::inherited_get_body_part(path, req); purge_to_delete(); return ret; } void html_form_dynamic_table::new_css_library_available() { unique_ptr & csslib = lookup_css_library(); if(!csslib) throw WEBDAR_BUG; webdar_css_style::update_library(*csslib); } void html_form_dynamic_table::del_line(const string & event_name) { map::iterator>::iterator mit = del_event_to_content.find(event_name); if(mit == del_event_to_content.end()) { if(! ignore_events) act(changed); return; // event_name absent from the map! // this may be a changed_event from a generated object } // for delete events // act(changed) will be done by purge_to_delete() outside the on_event() // cascada calls list::iterator it = mit->second; if(left_label && !it->left_label) throw WEBDAR_BUG; if(!it->dynobj) throw WEBDAR_BUG; if(!it->del) throw WEBDAR_BUG; if(it->left_label) table.foresake(&(*(it->left_label))); table.foresake(&(*(it->dynobj))); table.foresake(&(*(it->del))); events_to_delete.push_back(event_name); // postponing the object deletion // as we may get from here from the it->del pointed to actor event // we would not be able to return from this call if deleted from here } void html_form_dynamic_table::purge_to_delete() { deque::iterator evit = events_to_delete.begin(); bool action = ! events_to_delete.empty(); while(evit != events_to_delete.end()) { map::iterator>::iterator mit = del_event_to_content.find(*evit); if(mit == del_event_to_content.end()) throw WEBDAR_BUG; // event_name absent from the map! list::iterator it = mit->second; (void)del_event_to_content.erase(mit); (void)table_content.erase(it); ++evit; } events_to_delete.clear(); if(action && ! ignore_events) act(changed); } webdar-1.0.0/src/html_crypto_algo.hpp0000644000175000017520000000375614773727225014600 00000000000000/*********************************************************************/ // webdar - a web server and interface program to libdar // Copyright (C) 2013-2025 Denis Corbin // // This file is part of Webdar // // Webdar is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // Webdar is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Webdar. If not, see // //---- // to contact the author: dar.linux@free.fr /*********************************************************************/ #ifndef HTML_CRYPTO_ALGO_HPP #define HTML_CRYPTO_ALGO_HPP // C system header files #include "my_config.h" extern "C" { } // C++ system header files #include #include #include // webdar headers #include "html_form_select.hpp" #include "body_builder.hpp" /// html component in the form of a drop-down list used to let the user define the crypto algo class html_crypto_algo : public html_form_select { public: static const std::string changed; html_crypto_algo(const std::string & title); html_crypto_algo(const html_crypto_algo & ref) = delete; html_crypto_algo(html_crypto_algo && ref) noexcept = delete; html_crypto_algo & operator = (const html_crypto_algo & ref) = delete; html_crypto_algo & operator = (html_crypto_algo && ref) noexcept = delete; ~html_crypto_algo() = default; libdar::crypto_algo get_value() const; void set_value(libdar::crypto_algo val); /// actor inheritance virtual void on_event(const std::string & event_name) override; }; #endif webdar-1.0.0/src/html_form_overwrite_chain_cell.hpp0000644000175000017520000000574214775734173017467 00000000000000/*********************************************************************/ // webdar - a web server and interface program to libdar // Copyright (C) 2013-2025 Denis Corbin // // This file is part of Webdar // // Webdar is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // Webdar is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Webdar. If not, see // //---- // to contact the author: dar.linux@free.fr /*********************************************************************/ #ifndef HTML_FORM_OVERWRITE_CHAIN_CELL_HPP #define HTML_FORM_OVERWRITE_CHAIN_CELL_HPP // C system header files #include "my_config.h" extern "C" { } // C++ system header files // webdar headers #include "html_overwrite_action.hpp" #include "html_form_overwrite_action.hpp" #include "html_hr.hpp" #include "jsoner.hpp" #include "events.hpp" #include "actor.hpp" /// html component holding an element in an overwriting policy chain (class html_form_overwrite_chain_action) /// the only objective of this class is to add an
element above the cell content /// to separate the elements of the chain of actions. class html_form_overwrite_chain_cell: public html_overwrite_action, public jsoner, public events, public actor { public: static const std::string changed; html_form_overwrite_chain_cell(std::unique_ptr & insert); html_form_overwrite_chain_cell(const html_form_overwrite_chain_cell & ref) = delete; html_form_overwrite_chain_cell(html_form_overwrite_chain_cell && ref) noexcept = delete; html_form_overwrite_chain_cell & operator = (const html_form_overwrite_chain_cell & ref) = delete; html_form_overwrite_chain_cell & operator = (html_form_overwrite_chain_cell && ref) noexcept = delete; ~html_form_overwrite_chain_cell() = default; html_form_overwrite_action & get_cell_action(); /// obtain the crit_chain_cell object for libdar option virtual std::unique_ptr get_overwriting_action() const override; /// inherited from jsoner virtual void load_json(const json & source) override { incell->load_json(source); }; /// inherited from jsoner virtual json save_json() const override { return incell->save_json(); }; /// inherited from jsoner virtual void clear_json() override { incell->clear_json(); }; /// inherited from actor virtual void on_event(const std::string & event_name) override; private: html_hr line; std::unique_ptr incell; }; #endif webdar-1.0.0/src/html_select_file.cpp0000644000175000017520000006334015030770726014511 00000000000000/*********************************************************************/ // webdar - a web server and interface program to libdar // Copyright (C) 2013-2025 Denis Corbin // // This file is part of Webdar // // Webdar is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // Webdar is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Webdar. If not, see // //---- // to contact the author: dar.linux@free.fr /*********************************************************************/ // C system header files #include "my_config.h" extern "C" { #if HAVE_FNMATCH_H #include #endif } // C++ system header files #include #include #include // webdar headers #include "webdar_css_style.hpp" #include "html_page.hpp" #include "tokens.hpp" // #include "html_select_file.hpp" using namespace std; // public static fields: const string html_select_file::entry_selected = "entry_selected"; const string html_select_file::op_cancelled = "op_cancelled"; // private static fields: const string html_select_file::op_chdir_parent = "parent"; const string html_select_file::op_createdir = "createdir"; const string html_select_file::op_hide_createdir = "hide_createdir"; const string html_select_file::css_sticky_top = "html_select_sticky_top"; const string html_select_file::css_sticky_bot = "html_select_sticky_bot"; html_select_file::html_select_file(const string & message): x_message(message), html_popup(width_pct,height_pct), status(st_init), which_thread(run_nothing), cur_select_mode(sel_file), filter(""), should_refresh(false), title(2, message), warning(3, ""), fieldset(""), path_loaded(""), parentdir("Parent Directory", op_chdir_parent), content(2), content_placeholder(2, "Loading directory content..."), need_reload_content(false), btn_cancel("Cancel", op_cancelled), btn_validate("Select", entry_selected), btn_createdir("New Folder", op_createdir), btn_hide_createdir("New Folder", op_hide_createdir), createdir_form("Create Folder"), createdir_input("Folder Name", html_form_input::text, "", "", webdar_css_style::width_100vw), fieldset_target_type(libdar::inode_type::isdir), fieldset_type(libdar::inode_type::isdir), new_warning(false) { #ifdef LIBTHREADAR_STACK_FEATURE set_stack_size(DEFAULT_STACK_SIZE); #endif entr.reset(); // entr points to nothing mem_ui.reset(); // mem_ui points to nothing webui.set_warning_list_size(5); // events for callers objects register_name(entry_selected); // we'll propagate the even from btn_validate register_name(op_cancelled); // we will propagate the even from btn_cancel // events we want to act on from our own html components btn_cancel.record_actor_on_event(this, op_cancelled); btn_validate.record_actor_on_event(this, entry_selected); parentdir.record_actor_on_event(this, op_chdir_parent); btn_createdir.record_actor_on_event(this, op_createdir); btn_hide_createdir.record_actor_on_event(this, op_hide_createdir); createdir_input.record_actor_on_event(this, html_form_input::changed); webui.record_actor_on_event(this, html_web_user_interaction::can_refresh); webui.record_actor_on_event(this, html_web_user_interaction::dont_refresh); webui.record_actor_on_event(this,html_web_user_interaction::libdar_has_finished); // setting up the adoption tree (the fixed part) adopt(&title_box); title_box.adopt(&title); title_box.adopt(&entrepot_url); title_box.adopt(&warning); adopt(&fieldset); fieldset.adopt(&parentdir); fieldset.adopt(&content); fieldset.adopt(&content_placeholder); adopt(&webui); adopt(&btn_box); btn_box.adopt(&btn_createdir); btn_box.adopt(&btn_hide_createdir); btn_box.adopt(&btn_validate); btn_box.adopt(&btn_cancel); btn_box.adopt(&createdir_form); createdir_form.adopt(&createdir_input); // assigning CSS classes names to html components title_box.add_css_class(css_sticky_top); warning.add_css_class(webdar_css_style::text_color_red); webdar_css_style::normal_button(btn_cancel); webdar_css_style::normal_button(btn_validate); webdar_css_style::normal_button(btn_createdir); webdar_css_style::normal_button(btn_hide_createdir); btn_box.add_css_class(css_sticky_bot); btn_cancel.add_css_class(webdar_css_style::float_right); btn_cancel.add_css_class(webdar_css_style::spacing_horizontal); btn_cancel.add_css_class(webdar_css_style::spacing_vertical); btn_validate.add_css_class(webdar_css_style::float_right); btn_validate.add_css_class(webdar_css_style::spacing_vertical); btn_createdir.add_css_class(webdar_css_style::float_left); btn_createdir.add_css_class(webdar_css_style::spacing_horizontal); btn_createdir.add_css_class(webdar_css_style::spacing_vertical); btn_hide_createdir.add_css_class(webdar_css_style::float_left); btn_hide_createdir.add_css_class(webdar_css_style::spacing_vertical); btn_hide_createdir.add_css_class(webdar_css_style::spacing_horizontal); // setup default visibility property ignore_body_changed_from_my_children(true); // ignore visibility change btn_hide_createdir.set_visible(false); set_visible(false); // make us invisible until go_select() is called webui.set_visible(false); webui.auto_hide(true, false); ignore_body_changed_from_my_children(false); // end of ignore visibility change loading_mode(false); } void html_select_file::go_select(const shared_ptr & x_entr, const string & start_dir) { switch(status) { case st_init: break; case st_go_select: return; // already running, ignoring subsequent requests case st_completed: throw WEBDAR_BUG; // previous value has not been read default: throw WEBDAR_BUG; } set_visible(true); status = st_go_select; entr = x_entr; path_loaded = ""; if(mem_ui) throw WEBDAR_BUG; mem_ui = entr->get_current_user_interaction(); entr->change_user_interaction(webui.get_user_interaction()); update_entrepot_url(); fieldset.change_label(start_dir); createdir_form.set_visible(false); clear_content(); run_thread(run_init_fill); my_body_part_has_changed(); }; void html_select_file::on_event(const string & event_name) { if(event_name == entry_selected) { switch(cur_select_mode) { case sel_file: if(fieldset_target_type == libdar::inode_type::isdir) { warning.clear(); warning.add_text(3, string("This is a directory, please select a non-directory file")); // not necessary to call my_body_part_has_changed() as we just changed "warning" one of our own children return; } break; case sel_dir: if(fieldset_target_type != libdar::inode_type::isdir) { warning.clear(); warning.add_text(3, string("This is a directory, please select a non-directory file")); // not necessary to call my_body_part_has_changed() as we just changed "warning" one of our own children return; } break; case sel_symlinks: if(fieldset_type != libdar::inode_type::symlink && fieldset_type != libdar::inode_type::unknown) { warning.clear(); warning.add_text(3, string("This is not a symlink, please select a symbolic link inode")); // not necessary to call my_body_part_has_changed() as we just changed "warning" one of our own children return; } break; default: throw WEBDAR_BUG; } status = st_completed; act(entry_selected); // propagate the event to object that subscribed to us my_closing(); } else if(event_name == op_cancelled) { status = st_init; act(op_cancelled); // propagate the event to objects that subscribed to us my_closing(); } else if(event_name == op_chdir_parent) { fieldset.change_label(get_parent_path(fieldset.get_label())); fieldset_target_type = libdar::inode_type::isdir; fieldset_type = libdar::inode_type::unknown; run_thread(run_fill_only); } else if(event_name == op_createdir) { createdir_form.set_visible(true); createdir_input.set_value(""); btn_createdir.set_visible(false); btn_hide_createdir.set_visible(true); // not necessary to call my_body_part_has_changed() as we just changed a child visibility } else if(event_name == op_hide_createdir) { createdir_form.set_visible(false); btn_createdir.set_visible(true); btn_hide_createdir.set_visible(false); // not necessary to call my_body_part_has_changed() as we changed children visibility } else if(event_name == html_form_input::changed) // directory name provided to be created { if(! entr) throw WEBDAR_BUG; // ignoring empty string as value, this event may be triggered by // the clearing of the previous field value if(! createdir_input.get_value().empty()) { createdir_form.set_visible(false); run_thread(run_create_dir); need_reload_content = true; } my_body_part_has_changed(); } else if(event_name == html_web_user_interaction::can_refresh) { if(! should_refresh) { should_refresh = true; my_body_part_has_changed(); } } else if(event_name == html_web_user_interaction::dont_refresh) { if(should_refresh) { should_refresh = false; my_body_part_has_changed(); } } else if(event_name == html_web_user_interaction::libdar_has_finished) { loading_mode(false); my_body_part_has_changed(); } else // click on directory list entry? { // here were access to "listed" without locking the mutex // but the on_event() call should never be invoked from // outside our own inherited_get_body_part() as we only // registered to events from our own components. These are only // consulted during our own inherited_get_body_part() which // has either acquired to mtx_content lock for us, or has set // content object as invisible, so we can skip "listed" content // check. if(content.get_visible()) { map::iterator it = listed.find(event_name); chemin curdir(fieldset.get_label()); string tmp; if(it == listed.end()) throw WEBDAR_BUG; // all events we registered for should be known by us if(it->second.btn == nullptr) throw WEBDAR_BUG; if(fieldset_target_type != libdar::inode_type::isdir) { // if the current select item is not a directory we have not // changed directory into it, the current path is the dirname // of what fieldset points to, so we "pop" the current selected // filename from the current path to get back to the currentdir curdir.pop_back(); } // we concatenate (as a path subdir) the current path with the filename the user has clicked on: fieldset_target_type = it->second.target_type; fieldset_type = it->second.type; curdir += chemin((it->second.btn)->get_label()); fieldset.change_label(curdir.display()); // Warning: clearing content here will delete // the object which generated the event we // act on... leading to a SEGFAULT as at return // of on_event() the object will no more exist. if(fieldset_target_type == libdar::inode_type::isdir) run_thread(run_fill_only); } else // we avoid consulting listed as it may still be under construction // and second as content and parentdir are hidden, they should not // lead to any event generation throw WEBDAR_BUG; // unexpected event my_body_part_has_changed(); } } string html_select_file::inherited_get_body_part(const chemin & path, const request & req) { string ret; html_page* page = nullptr; closest_ancestor_of_type(page); if(! new_warning) warning.clear(); bool lock_acquired = content_mutex.try_lock(); try { if(!lock_acquired && !is_loading_mode) throw WEBDAR_BUG; // ELSE as we are in loading mode or no thread will run until we release the mutex // either we will not read 'content' because it is hidden, or no subthread will // run during the time we proceed with html_popup::inherited_get_get_body_part() ret = html_popup::inherited_get_body_part(path, req); if(need_reload_content && ! webui.is_libdar_running()) { run_thread(run_fill_only); need_reload_content = false; } } catch(...) { if(lock_acquired) content_mutex.unlock(); throw; } if(lock_acquired) content_mutex.unlock(); if(page != nullptr) { if(should_refresh) page->set_refresh_redirection(1, req.get_uri().url_path_part()); else page->set_refresh_redirection(0, ""); // disable refresh } else throw WEBDAR_BUG; // cannot set refresh mode new_warning = should_refresh || has_my_body_part_changed(); return ret; } void html_select_file::new_css_library_available() { unique_ptr & csslib = lookup_css_library(); css tmp; if(!csslib) throw WEBDAR_BUG; webdar_css_style::update_library(*csslib); html_popup::new_css_library_available(); tmp.clear(); tmp.css_position_type(css::pos_sticky); tmp.css_box_sizing(css::bx_border); tmp.css_position_top("0"); tmp.css_border_style(css::bd_bottom, css::bd_solid); tmp.css_border_width(css::bd_bottom, css::bd_thin); tmp.css_margin("0"); tmp.css_padding("10px"); tmp.css_padding_bottom("10px"); tmp.css_width("100%", true); tmp.css_background_color(WHITE); if(!csslib->class_exists(css_sticky_top)) csslib->add(css_sticky_top, tmp); tmp.clear(); tmp.css_position_type(css::pos_sticky); tmp.css_box_sizing(css::bx_border); tmp.css_float(css::fl_left); tmp.css_position_bottom("0"); tmp.css_border_style(css::bd_top, css::bd_solid); tmp.css_border_width(css::bd_top, css::bd_thin); tmp.css_margin("0"); tmp.css_padding("10px"); tmp.css_width("100%", true); tmp.css_background_color(WHITE); if(!csslib->class_exists(css_sticky_bot)) csslib->add(css_sticky_bot, tmp); } void html_select_file::inherited_run() { content_mutex.lock(); try { try { switch(which_thread) { case run_nothing: throw WEBDAR_BUG; case run_create_dir: create_dir(); break; case run_init_fill: if(!init_fieldset_target_type()) break; else cancellation_checkpoint(); /* no break ! */ case run_fill_only: fill_content(); break; default: throw WEBDAR_BUG; } } catch(...) { which_thread = run_nothing; throw; } which_thread = run_nothing; } catch(...) { content_mutex.unlock(); throw; } content_mutex.unlock(); } bool html_select_file::init_fieldset_target_type() { bool ret = false; // chemin target(fieldset.get_label()); if(!entr) throw WEBDAR_BUG; // first trying to open the target as a if it was a directory // if that fails we will try to open the parent directory // to check for a possible existence of target try { entr->set_location(fieldset.get_label()); entr->read_dir_reset_dirinfo(); fieldset_target_type = libdar::inode_type::isdir; fieldset_type = libdar::inode_type::unknown; ret = true; } catch(libdar::Egeneric & e) { libdar::Erange* e_range = dynamic_cast(&e); libdar::Enet_auth* e_netauth = dynamic_cast(&e); // when trying to read an non directory as a directory: // local entrepot fails in Erange // libcurl fails en Enet_auth if(e_range != nullptr || e_netauth != nullptr) { try { fieldset.change_label(get_parent_path(fieldset.get_label())); entr->set_location(fieldset.get_label()); entr->read_dir_reset_dirinfo(); fieldset_target_type = libdar::inode_type::isdir; fieldset_type = libdar::inode_type::unknown; update_entrepot_url(); ret = true; } catch(exception_range & f) { // target.pop_back() failed // this means target was empty (aka root file system) // and "/" was not a directory or failed to be openned // reporting the first exception warning.clear(); warning.add_text(3, e.get_message()); fieldset_target_type = libdar::inode_type::isdir; fieldset_type = libdar::inode_type::unknown; } catch(libdar::Erange & f) { // target.pop_back() succeeded but the // libdar operation failed, propagating this // exception warning.clear(); warning.add_text(3, f.get_message()); fieldset_target_type = libdar::inode_type::unknown; fieldset_type = libdar::inode_type::unknown; } } else { warning.clear(); warning.add_text(3, string("Unexpected error returned by libdar:")); warning.add_text(4, e.get_message()); } } return ret; } void html_select_file::fill_content() { struct couple { string name; libdar::inode_type target_tp; bool operator < (const couple & ref) const { return name < ref.name; }; bool operator == (const couple & ref) const { return name == ref.name; }; }; string entry; bool isdir; string event_name; unsigned int count = 0; deque entry_dirs; deque entry_files; deque entry_symlinks; deque entry_unknown; deque tout; libdar::inode_type tp; couple with_target; deque::iterator it; clear_content(); if(!entr) throw WEBDAR_BUG; if(fieldset_target_type == libdar::inode_type::isdir) { entr->set_location(fieldset.get_label()); } else throw WEBDAR_BUG; // we should not get there if fieldset is not a directory cancellation_checkpoint(); try { entr->read_dir_reset_dirinfo(); update_entrepot_url(); } catch(libdar::Erange & e) { need_reload_content = true; throw; } while(entr->read_dir_next_dirinfo(entry, tp)) { with_target.name = entry; with_target.target_tp = tp; tout.push_back(with_target); } cancellation_checkpoint(); for(deque::iterator it = tout.begin(); it != tout.end(); ++it) { tp = it->target_tp; if(tp == libdar::inode_type::symlink || tp == libdar::inode_type::unknown) { if(is_a_valid_dir(fieldset.get_label(), it->name)) it->target_tp = libdar::inode_type::isdir; else it->target_tp = libdar::inode_type::nondir; } if(it->target_tp == libdar::inode_type::isdir || filter.empty() || fnmatch(filter.c_str(), it->name.c_str(), FNM_PERIOD) == 0) { switch(tp) { case libdar::inode_type::isdir: entry_dirs.push_back(*it); break; case libdar::inode_type::nondir: entry_files.push_back(*it); break; case libdar::inode_type::symlink: entry_symlinks.push_back(*it); break; case libdar::inode_type::unknown: entry_unknown.push_back(*it); break; default: throw WEBDAR_BUG; } } // else ignoring entry because // this is not a directory // and a mask filtering has been set // and the entry does not match the filter } tout.clear(); sort(entry_dirs.begin(), entry_dirs.end()); sort(entry_files.begin(), entry_files.end()); sort(entry_symlinks.begin(), entry_symlinks.end()); sort(entry_unknown.begin(), entry_unknown.end()); // we do the following complicated thing to // have the listing starting with directories // then symlinks, then non directories, followed // last by those we don't even know what's their type is. it = entry_dirs.begin(); while(it != entry_dirs.end()) { cancellation_checkpoint(); event_name = "x_" + to_string(count++); if(listed.find(event_name) != listed.end()) throw WEBDAR_BUG; // event already exists!?! add_content_entry(event_name, libdar::inode_type::isdir, it->target_tp, it->name); ++it; } it = entry_symlinks.begin(); while(it != entry_symlinks.end()) { cancellation_checkpoint(); event_name = "x_" + to_string(count++); if(listed.find(event_name) != listed.end()) throw WEBDAR_BUG; // event already exists!?! add_content_entry(event_name, libdar::inode_type::symlink, it->target_tp, it->name); ++it; } it = entry_files.begin(); while(it != entry_files.end()) { cancellation_checkpoint(); event_name = "x_" + to_string(count++); if(listed.find(event_name) != listed.end()) throw WEBDAR_BUG; // event already exists!?! add_content_entry(event_name, libdar::inode_type::nondir, it->target_tp, it->name); ++it; } it = entry_unknown.begin(); while(it != entry_unknown.end()) { cancellation_checkpoint(); event_name = "x_" + to_string(count++); if(listed.find(event_name) != listed.end()) throw WEBDAR_BUG; // event already exists!?! add_content_entry(event_name, libdar::inode_type::unknown, it->target_tp, it->name); ++it; } } void html_select_file::signaled_inherited_cancel() { pthread_t libdar_tid; libdar::thread_cancellation th; if(is_running(libdar_tid)) th.cancel(libdar_tid, true, 0); } void html_select_file::create_dir() { entr->create_dir(createdir_input.get_value(), 0700); } void html_select_file::add_content_entry(const string & event_name, libdar::inode_type tp, libdar::inode_type target_tp, const string & entry) { item current; bool hyperlink = false; switch(tp) { case libdar::inode_type::isdir: content.adopt_static_html(" DIR "); hyperlink = true; break; case libdar::inode_type::symlink: content.adopt_static_html(" LNK "); if(target_tp == libdar::inode_type::isdir) hyperlink = true; else hyperlink = (cur_select_mode == sel_file) || (cur_select_mode == sel_symlinks); break; case libdar::inode_type::nondir: content.adopt_static_html(""); hyperlink = (cur_select_mode == sel_file); break; case libdar::inode_type::unknown: if(target_tp == libdar::inode_type::isdir) hyperlink = true; else hyperlink = (cur_select_mode == sel_file); content.adopt_static_html("?"); break; default: throw WEBDAR_BUG; } current.type = tp; current.target_type = target_tp; if(hyperlink) { current.btn = new (nothrow) html_button(entry, event_name); if(current.btn == nullptr) throw exception_memory(); listed[event_name] = current; content.adopt(current.btn); current.btn->record_actor_on_event(this, event_name); } else content.adopt_static_html(entry); } void html_select_file::run_thread(thread_to_run val) { if(which_thread != run_nothing) throw WEBDAR_BUG; // a thread is already running switch(val) { case run_nothing: throw WEBDAR_BUG; case run_create_dir: should_refresh = true; path_loaded = ""; // this will force reloading dir content which_thread = val; loading_mode(true); if(is_running()) throw WEBDAR_BUG; webui.run_and_control_thread(this); break; case run_init_fill: case run_fill_only: if(fieldset.get_label() != path_loaded) { should_refresh = true; path_loaded = fieldset.get_label(); which_thread = val; loading_mode(true); if(is_running()) throw WEBDAR_BUG; webui.run_and_control_thread(this); } // else we are already displaying the requested directory content break; default: throw WEBDAR_BUG; } } void html_select_file::clear_content() { map::iterator it = listed.begin(); content.clear(); while(it != listed.end()) { if(it->second.btn != nullptr) { delete it->second.btn; it->second.btn = nullptr; } ++it; } listed.clear(); } void html_select_file::loading_mode(bool mode) { if(mode == is_loading_mode) return; // nothing to do if(mode) { // in loading mode we must // hide not only the component // that are not pertinent to show // but also all component generating // an event from the current thread // as subthread will be run and may // generare event to us. Then on_event // method is not designed to be re-entrant // and does not need to be. title.set_visible(false); entrepot_url.set_visible(false); parentdir.set_visible(false); content.set_visible(false); btn_box.set_visible(false); webui.clear(); webui.set_visible(true); content_placeholder.set_visible(true); } else { title.set_visible(true); entrepot_url.set_visible(true); parentdir.set_visible(true); content.set_visible(true); btn_box.set_visible(true); // not necessary to set webui.set_visible(false) in the // present condition webui has already finished and hide // itself (auto_hide) content_placeholder.set_visible(false); } is_loading_mode = mode; } string html_select_file::get_parent_path(const string & somepath) { chemin chem(somepath); try { chem.pop_back(); } catch(exception_range & e) { // pop_back() failed because we // we reached the root of the file system // ignoring this error and staying at // the same path } return chem.display(); } void html_select_file::my_closing() { set_visible(false); if(entr) { entr->change_user_interaction(mem_ui); entr.reset(); // forget about the go_select() provided entrepot } mem_ui.reset(); // forget about the user_interaction entr had } bool html_select_file::is_a_valid_dir(const string & pathval, const string & name) const { bool ret = true; chemin tmp(pathval); libdar::path cur = entr->get_location(); tmp += name; try { entr->set_location(tmp.display(false)); entr->read_dir_reset_dirinfo(); } catch(...) { ret = false; } entr->set_location(cur); return ret; } void html_select_file::update_entrepot_url() { entrepot_url.clear(); entrepot_url.add_text(0, "Entrepot location: "); entrepot_url.add_text(0, entr->get_url()); } webdar-1.0.0/src/html_options_merge.hpp0000644000175000017520000002127114773727225015120 00000000000000/*********************************************************************/ // webdar - a web server and interface program to libdar // Copyright (C) 2013-2025 Denis Corbin // // This file is part of Webdar // // Webdar is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // Webdar is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Webdar. If not, see // //---- // to contact the author: dar.linux@free.fr /*********************************************************************/ #ifndef HTML_OPTIONS_MERGE_HPP #define HTML_OPTIONS_MERGE_HPP // C system header files #include "my_config.h" extern "C" { } // C++ system header files #include // webdar headers #include "body_builder.hpp" #include "actor.hpp" #include "events.hpp" #include "html_form.hpp" #include "html_form_fieldset.hpp" #include "html_form_input.hpp" #include "html_compression.hpp" #include "html_hash_algo.hpp" #include "html_crypto_algo.hpp" #include "html_archive_read.hpp" #include "html_derouleur.hpp" #include "html_entrepot_landing.hpp" #include "html_mask_form_filename.hpp" #include "html_mask_form_path.hpp" #include "html_form_overwrite_action.hpp" #include "html_form_input_unit.hpp" #include "html_compression_params.hpp" #include "html_slicing.hpp" #include "html_ciphering.hpp" #include "html_form_sig_block_size.hpp" #include "html_form_select.hpp" #include "html_fsa_scope.hpp" #include "guichet.hpp" #include "jsoner.hpp" #include "bibliotheque_subconfig.hpp" /// html component for the user to provided parameters of a libdar merging operation class html_options_merge : public body_builder, public actor, public events, public jsoner, public bibliotheque_subconfig { public: static const std::string landing_path_changed; ///< landing path has changed static const std::string entrepot_changed; ///< event triggered only for entrepot related changes except landing_path static const std::string changed; ///< event for any change in this component, including entrpot changes except landing_path html_options_merge(); html_options_merge(const html_options_merge & ref) = delete; html_options_merge(html_options_merge && ref) noexcept = delete; html_options_merge & operator = (const html_options_merge & ref) = delete; html_options_merge & operator = (html_options_merge && ref) noexcept = delete; ~html_options_merge() = default; /// mandatory call to invoke ASAP after constructor void set_biblio(const std::shared_ptr & ptr); /// inherited from jsoner virtual void load_json(const json & source) override; /// inherited from jsoner virtual json save_json() const override; /// inherited from jsoner virtual void clear_json() override; /// inherited from bibliotheque_subconfig virtual bibliotheque::using_set get_using_set() const override; /// inherited from actor virtual void on_event(const std::string & event_name) override; /// informations available for libdar /// /// \note if a reference is requested it implies openninng an archive /// and feeding the libdar::archive_options_merge::set_auxiliary_ref(libdar::archive *) /// with the object built from this->get_auxiliary() libdar::archive_options_merge get_options(std::shared_ptr & webui) const; /// optain the current entrepot object where is expected to be create the archive std::shared_ptr get_entrepot(std::shared_ptr webui) const { return entrep->get_entrepot(webui); }; /// obtain the entrepot landing path const std::string & get_landing_path() const { return entrep->get_landing_path(); }; /// set the object to webdar defaults void set_to_webdar_defaults(); protected: /// inherited from bdy_builder virtual std::string inherited_get_body_part(const chemin & path, const request & req) override; virtual void new_css_library_available() override; private: bool ignore_events; html_derouleur deroule; html_form form_archgen; guichet guichet_entrep; std::shared_ptr entrep; html_form_fieldset fs_archgen; html_form_input allow_over; html_form_input warn_over; html_form_input pause; html_form_input sequential_marks; html_form_input_unit sparse_file_min_size; html_form_input user_comment; html_hash_algo hash_algo; html_form_input execute; html_form_input empty; html_form_fieldset has_aux_fs; html_form_input has_aux; html_form_input decremental; html_form aux_form; html_form_fieldset aux_block; html_archive_read auxiliary; html_form form_delta_sig; html_form_fieldset delta_fs; html_form_select delta_sig; html_text delta_filter_params; guichet guichet_sig_block_size; std::shared_ptr sig_block_size; html_text delta_filter_title; guichet guichet_delta_mask; std::shared_ptr delta_mask; html_form form_shown; html_form_fieldset fs_shown; html_form_input info_details; html_form_input display_treated; html_form_input display_treated_only_dir; html_form_input display_skipped; html_form form_perimeter; html_form_fieldset fs_perimeter; html_form_input empty_dir; guichet guichet_filename_mask; std::shared_ptr filename_mask; guichet guichet_path_mask; std::shared_ptr path_mask; guichet guichet_ea_mask; std::shared_ptr ea_mask; html_fsa_scope fsa_scope; guichet guichet_overwriting_policy; std::shared_ptr overwriting_policy; guichet guichet_compr_params; std::shared_ptr compr_params; html_text compr_filter_title; guichet guichet_compr_mask; std::shared_ptr compr_mask; guichet guichet_slicing; std::shared_ptr slicing; guichet guichet_ciphering; std::shared_ptr ciphering; void init(); ///< set default values to parameters void trigger_changed(); static constexpr const unsigned int format_version = 1; static constexpr const char* myclass_id = "html_options_merge"; static constexpr const char* jlabel_entrep = "entrepot"; static constexpr const char* jlabel_allow_over = "allow-over"; static constexpr const char* jlabel_warn_over = "warn-over"; static constexpr const char* jlabel_pause = "pause"; static constexpr const char* jlabel_seq_marks = "sequential-marks"; static constexpr const char* jlabel_sparse_min_size = "sparse-file-min-size"; static constexpr const char* jlabel_user_comment = "user-comments"; static constexpr const char* jlabel_hash_algo = "hash-algo"; static constexpr const char* jlabel_execute = "execute"; static constexpr const char* jlabel_empty = "dry-run"; static constexpr const char* jlabel_has_aux = "has-auxiliary"; static constexpr const char* jlabel_decremental = "decremental"; static constexpr const char* jlabel_auxiliary = "auxiliary"; static constexpr const char* jlabel_delta_sig = "delta-sig"; static constexpr const char* jlabel_sig_block_size = "delta-sig-block-size"; static constexpr const char* jlabel_delta_mask = "delta-mask"; static constexpr const char* jlabel_info_details = "info-details"; static constexpr const char* jlabel_display_treated = "disp-treated"; static constexpr const char* jlabel_display_only_dir = "disp-only-dirs"; static constexpr const char* jlabel_display_skipped = "disp-skipped"; static constexpr const char* jlabel_empty_dir = "empty-dirs"; static constexpr const char* jlabel_filename_mask = "filename-mask"; static constexpr const char* jlabel_path_mask = "path-mask"; static constexpr const char* jlabel_ea_mask = "ea-mask"; static constexpr const char* jlabel_fsa_scope = "fsa-scope"; static constexpr const char* jlabel_overwrite_policy = "overwriting-policy"; static constexpr const char* jlabel_compr_params = "compression-params"; static constexpr const char* jlabel_compr_mask = "compression-mask"; static constexpr const char* jlabel_slicing = "slicing"; static constexpr const char* jlabel_ciphering = "ciphering"; }; #endif webdar-1.0.0/src/html_image.hpp0000644000175000017520000000413314775733434013327 00000000000000/*********************************************************************/ // webdar - a web server and interface program to libdar // Copyright (C) 2013-2025 Denis Corbin // // This file is part of Webdar // // Webdar is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // Webdar is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Webdar. If not, see // //---- // to contact the author: dar.linux@free.fr /*********************************************************************/ #ifndef HTML_IMAGE_HPP #define HTML_IMAGE_HPP // C system header files #include "my_config.h" extern "C" { } // C++ system header files // webdar headers #include "body_builder.hpp" #include "static_body_builder.hpp" /// html static component displaying an image from a given URL class html_image : public body_builder, public static_body_builder { public: html_image(const std::string & url, const std::string & alt); html_image(const html_image & ref) = default; html_image(html_image && ref) noexcept = delete; html_image & operator = (const html_image & ref) = default; html_image & operator = (html_image && ref) noexcept = delete; ~html_image() = default; void set_dimensions(const std::string x, const std::string y); /// inherited from static_body_builder virtual std::string get_body_part() const override; protected: /// inherited from body_builder virtual std::string inherited_get_body_part(const chemin & path, const request & req) override { return get_body_part(); }; private: std::string x_url; std::string x_alt; std::string dim_x; std::string dim_y; }; #endif webdar-1.0.0/src/html_yes_no_box.hpp0000644000175000017520000000537314773727226014420 00000000000000/*********************************************************************/ // webdar - a web server and interface program to libdar // Copyright (C) 2013-2025 Denis Corbin // // This file is part of Webdar // // Webdar is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // Webdar is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Webdar. If not, see // //---- // to contact the author: dar.linux@free.fr /*********************************************************************/ #ifndef HTML_YES_NO_BOX_HPP #define HTML_YES_NO_BOX_HPP // C system header files #include "my_config.h" extern "C" { } // C++ system header files #include // webdar headers #include "exceptions.hpp" #include "body_builder.hpp" #include "events.hpp" #include "actor.hpp" #include "html_form.hpp" #include "html_form_radio.hpp" #include "html_form_fieldset.hpp" #include "html_popup.hpp" #include "html_text.hpp" /// html component for user to answer by yes or no to a provided question class html_yes_no_box : public html_popup, public events, public actor { public: static const std::string answer_yes; static const std::string answer_no; html_yes_no_box(); html_yes_no_box(const html_yes_no_box & ref) = delete; html_yes_no_box(html_yes_no_box && ref) noexcept = delete; html_yes_no_box & operator = (const html_yes_no_box & ref) = delete; html_yes_no_box & operator = (html_yes_no_box && ref) noexcept = delete; ~html_yes_no_box() = default; /// make the question to appear to the user void ask_question(const std::string & message, bool default_value); /// read the answer returned by the user /// \note the use of answer_yes and answer_no events /// is more flexible than reading the value (no pooling) bool get_value() const { return rd.get_selected_num() != 0; }; void set_value(bool val) { rd.set_selected_num(val ? 1 : 0); }; /// inherited from actor parent class virtual void on_event(const std::string & event_name) override; protected: /// inherited from body_builder virtual void new_css_library_available() override; private: static constexpr const char* css_center = "html_ynb_center"; bool ignore_events; html_form form; html_form_fieldset form_fs; html_form_radio rd; html_text question; }; #endif webdar-1.0.0/src/html_archive_isolate.cpp0000644000175000017520000001311515036517557015376 00000000000000/*********************************************************************/ // webdar - a web server and interface program to libdar // Copyright (C) 2013-2025 Denis Corbin // // This file is part of Webdar // // Webdar is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // Webdar is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Webdar. If not, see // //---- // to contact the author: dar.linux@free.fr /*********************************************************************/ // C system header files #include "my_config.h" extern "C" { } // C++ system header files // webdar headers #include "webdar_css_style.hpp" #include "tooltip_messages.hpp" // #include "html_archive_isolate.hpp" using namespace std; html_archive_isolate::html_archive_isolate(): form("Update"), fs(""), sauv_path("Where to create the isolated catalog", "/", "", webdar_css_style::width_100vw, "Select the directory where to create the isolated catalog..."), basename("Isolated Catalog basename", html_form_input::text, "", "", webdar_css_style::width_100vw_3em), need_entrepot_update(false) { static const char* sect_archive = "isolation"; static const char* sect_options = "options"; #ifdef LIBTHREADAR_STACK_FEATURE set_stack_size(DEFAULT_STACK_SIZE); #endif options.reset(new (nothrow) html_options_isolate()); if(! options) throw exception_memory(); deroule.add_section(sect_archive, "Isolation Parameters"); deroule.add_section(sect_options, "Isolation Options"); deroule.set_active_section(0); sauv_path.set_select_mode(html_form_input_file::select_dir); sauv_path.set_can_create_dir(true); if(repoxfer.get_html_user_interaction()) repoxfer.get_html_user_interaction()->auto_hide(true, false); else throw WEBDAR_BUG; // adoption tree fs.adopt(&sauv_path); fs.adopt(&basename); form.adopt(&fs); deroule.adopt_in_section(sect_archive, &form); deroule.adopt_in_section(sect_options, &guichet_options); adopt(&deroule); adopt(&repoxfer); // events options->record_actor_on_event(this, html_options_isolate::entrepot_changed); options->record_actor_on_event(this, html_options_isolate::landing_path_changed); basename.record_actor_on_event(this, html_form_input::changed); /// visibility repoxfer.set_visible(false); // css webdar_css_style::normal_button(deroule, true); // tooltips sauv_path.set_tooltip(TOOLTIP_HAI_SAUV_PATH); basename.set_tooltip(TOOLTIP_HAI_BASENAME); } void html_archive_isolate::set_biblio(const shared_ptr & ptr) { options->set_biblio(ptr); guichet_options.set_child(ptr, bibliotheque::confisolate, options, false); if(ptr->has_config(bibliotheque::confisolate, bibliotheque::default_config_name)) { try { guichet_options.load_from_bibliotheque(bibliotheque::default_config_name); } catch(...) { // ignore exception here, as this is called from constructor // of the session components and nothing is yet available to // display execeptions messages (due to old config in configuration file // or corrupted configuration file we read from) // The consequence is that we have a cleared configuration: guichet_options.clear_json(); } } } const string & html_archive_isolate::get_archive_basename() const { if(basename.get_value().empty()) { const_cast(this)->basename.box_set_css_class(webdar_css_style::red_border); throw exception_range("Archive basename cannot be an empty string"); } return basename.get_value(); } void html_archive_isolate::on_event(const string & event_name) { if(event_name == html_options_isolate::entrepot_changed) { need_entrepot_update = true; } else if(event_name == html_options_isolate::landing_path_changed) { sauv_path.set_value(options->get_landing_path()); } else if(event_name == html_form_input::changed) { if(basename.get_value().empty()) basename.box_set_css_class(webdar_css_style::red_border); else basename.box_set_css_class(""); } else throw WEBDAR_BUG; } string html_archive_isolate::inherited_get_body_part(const chemin & path, const request & req) { if(need_entrepot_update) update_entrepot(); return get_body_part_from_all_children(path, req); } void html_archive_isolate::new_css_library_available() { unique_ptr & csslib = lookup_css_library(); if(!csslib) throw WEBDAR_BUG; webdar_css_style::update_library(*csslib); } void html_archive_isolate::inherited_run() { shared_ptr ptr(repoxfer.get_html_user_interaction()); if(!ptr) throw WEBDAR_BUG; sauv_path.set_entrepot(options->get_entrepot(ptr)); } void html_archive_isolate::signaled_inherited_cancel() { pthread_t libdar_tid; libdar::thread_cancellation th; if(is_running(libdar_tid)) th.cancel(libdar_tid, true, 0); } void html_archive_isolate::update_entrepot() { if(is_running()) throw WEBDAR_BUG; repoxfer.set_visible(true); need_entrepot_update = false; repoxfer.run_and_control_thread(this); } webdar-1.0.0/src/html_options_create.cpp0000644000175000017520000013121415044751221015237 00000000000000/*********************************************************************/ // webdar - a web server and interface program to libdar // Copyright (C) 2013-2025 Denis Corbin // // This file is part of Webdar // // Webdar is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // Webdar is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Webdar. If not, see // //---- // to contact the author: dar.linux@free.fr /*********************************************************************/ // C system header files #include "my_config.h" extern "C" { } // C++ system header files #include #include // webdar headers #include "webdar_tools.hpp" #include "webdar_css_style.hpp" #include "tokens.hpp" #include "html_form_mask_expression.hpp" #include "webdar_tools.hpp" #include "tooltip_messages.hpp" // #include "html_options_create.hpp" using namespace std; const string html_options_create::landing_path_changed = "html_options_create_entrep_landing"; const string html_options_create::entrepot_changed = "html_options_create_entrep_changed"; const string html_options_create::changed = "html_options_create_changed"; html_options_create::html_options_create(): form_archtype("Update"), form_archgen("Update"), form_reading("Update"), form_delta_sig("Update"), form_shown("Update"), form_perimeter("Update"), form_same_fs("Update"), archtype_fs(""), fixed_date("Only record files changed since:"), wrap_ref(""), reference("Backup of reference"), delta_fs(""), delta_sig("Compute binary delta signature", html_form_input::check, "", "", ""), archgen_fs(""), pause("Pause at each N slices (zero = no pause)", html_form_input::number, "", "5", ""), retry_on_change_times("Max retries saving files that changed", html_form_input::number, "", "5", ""), allow_over("Allow slice overwriting", html_form_input::check, "", "", ""), warn_over("Warn before overwriting", html_form_input::check, "", "", ""), retry_on_change_overhead("Max wasted bytes retrying saving changed files", 0, "10"), sequential_marks("Add sequential marks", html_form_input::check, "", "", ""), user_comment("User comment in slice header", html_form_input::text, "", "", webdar_css_style::width_100vw), sparse_file_min_size("Minimum size of holes to lookup in sparse files", 0, "10"), hash_algo("Hashing algorithm"), execute("Command to execute after each slice", html_form_input::text, "", "", webdar_css_style::width_100vw), hourshift("Ignore difference of exactly +/- N hour(s)", html_form_input::number, "", "5", ""), shown_fs(""), info_details("Detailed informations", html_form_input::check, "1", "", ""), display_treated("Display treated files", html_form_input::check, "1", "", ""), display_treated_only_dir("Display only treated directories", html_form_input::check, "", "", ""), display_dir_summary("Display summary at the end of each directory", html_form_input::check, "", "", ""), empty("Dry run execution", html_form_input::check, "", "", ""), display_skipped("Display skipped files", html_form_input::check, "1", "", ""), security_check("Security warning", html_form_input::check, "", "", ""), dont_ignore_unknown_inode_type("Ignore unknown inode type instead of warning", html_form_input::check, "1", "", ""), perimeter_fs(""), empty_dir("Store ignored directories as empty directories", html_form_input::check, "", "", ""), cache_directory_tagging("Ignore directories that use a cache directory tag", html_form_input::check, "1", "", ""), nodump("Avoid saving files having the 'Nodump' flag set", html_form_input::check, "1", "", ""), exclu_by_ea_fs("Avoid saving files having a given Extended Attribute"), exclude_by_ea("enable", html_form_input::check, "1", "", ""), default_ea("Use the default excluding Extended Attribute", html_form_input::check, "1", "", ""), exclude_by_ea_name("Extended Attribute name", html_form_input::text, "", "", webdar_css_style::width_100vw), fs_alter_atime("What to alter if furtive read mode is not used"), furtive_read_mode("Furtive read mode (if available)", html_form_input::check, "", "", ""), zeroing_neg_date("Automatically zeroing negative dates while reading", html_form_input::check, "", "", ""), fs_mod_data_detect("How data (not metadata) changes are detected"), same_fs_fs("Select the file systems based on their mount point"), ignore_events(false) { // set field parameters entrep.reset(new (nothrow) html_entrepot_landing()); if(!entrep) throw exception_memory(); filename_mask.reset(new (nothrow) html_mask_form_filename("file name")); if(!filename_mask) throw exception_memory(); ea_mask.reset(new (nothrow) html_mask_form_filename("extended attribute")); if(!ea_mask) throw exception_memory(); delta_mask.reset(new (nothrow) html_mask_form_path(true)); if(!delta_mask) throw exception_memory(); compr_params.reset(new (nothrow) html_compression_params(true, true, false)); if(!compr_params) throw exception_memory(); compr_mask.reset(new (nothrow) html_mask_form_filename("file name")); if(!compr_mask) throw exception_memory(); path_mask.reset(new (nothrow) html_mask_form_path(true)); if(!path_mask) throw exception_memory(); slicing.reset(new (nothrow) html_slicing()); if(! slicing) throw exception_memory(); ciphering.reset(new (nothrow) html_ciphering()); if(! ciphering) throw exception_memory(); sig_block_size.reset(new (nothrow) html_form_sig_block_size()); if(! sig_block_size) throw exception_memory(); archtype.add_choice("full", "Full backup"); archtype.add_choice("diff", "Differential/Incremental backup"); archtype.add_choice("diffdelta", "Differential/Incremental backup with binary delta (*)"); archtype.add_choice("snap", "Snapshot backup"); archtype.add_choice("date", "Date based differential backup"); binary_delta_note.add_text(0, "(*) delta signatures need to be present in the backup of reference"); delta_filter_params.add_paragraph(); delta_filter_params.add_text(3, "Delta signature parameters"); delta_filter_title.add_paragraph(); delta_filter_title.add_text(3, "Delta signature filename based filtering"); compr_filter_title.add_paragraph(); compr_filter_title.add_text(3, "Compression filename based filtering"); alter_atime.add_choice("atime", "Data last access time (atime)"); alter_atime.add_choice("ctime", "Inode last change time (ctime)"); mod_data_detect.add_choice("any_inode_change", "Any inode change (behavior before libdar 2.6.0)"); mod_data_detect.add_choice("mtime_size", "only mtime and file size change (default)"); pause.set_min_only(0); retry_on_change_times.set_min_only(0); hourshift.set_range(0, 23); libdar::archive_options_create defaults; ciphering->set_crypto_size_range(defaults.get_crypto_size(), libdar::infinint(4294967296)); // max is 2^32 // set default values // this is done from set_biblio() // because guichet object are not set until there // build tree dependancy static const char* sect_repo = "repo"; static const char* sect_type = "type"; static const char* sect_ref = "archive_ref"; static const char* sect_delta = "delta_sig"; static const char* sect_gen = "archive_gen_opt"; static const char* sect_show = "archive show opt"; static const char* sect_perimeter = "backup perimeter"; static const char* sect_mask_file = "backup file name masks"; static const char* sect_mask_path = "backup pathname masks"; static const char* sect_mount_points = "mount point filtering"; static const char* sect_ea_mask = "EA masks"; static const char* sect_fsa_scope = "FSA Scope"; static const char* sect_source = "source reading mode"; static const char* sect_compr = "compression"; static const char* sect_slice = "slicing"; static const char* sect_cipher = "ciphering"; deroule.add_section(sect_repo, "Backup Repository"); deroule.add_section(sect_type, "Backup Type"); deroule.add_section(sect_ref, "Backup of Reference"); deroule.add_section(sect_delta, "Delta signatures"); deroule.add_section(sect_source, "File system reading mode"); deroule.add_section(sect_gen, "How to process the operation"); deroule.add_section(sect_show, "What to show during the operation"); deroule.add_section(sect_perimeter, "What to take into consideration for backup"); deroule.add_section(sect_mask_file, "File name based filtering"); deroule.add_section(sect_mask_path, "Path based filtering"); deroule.add_section(sect_mount_points, "Mount point filtering"); deroule.add_section(sect_ea_mask, "Extended Attributes filtering"); deroule.add_section(sect_fsa_scope, "File system Specific Attributes filtering"); deroule.add_section(sect_compr, "Compression options"); deroule.add_section(sect_slice, "Slicing options"); deroule.add_section(sect_cipher, "Encryption options"); adopt(&deroule); // repo deroule.adopt_in_section(sect_repo, &guichet_entrep); // archive type and associated optional fields archtype_fs.adopt(&archtype); archtype_fs.adopt(&what_to_check); archtype_fs.adopt(&hourshift); archtype_fs.adopt(&fixed_date); archtype_fs.adopt(&binary_delta_note); form_archtype.adopt(&archtype_fs); deroule.adopt_in_section(sect_type, &form_archtype); // archive ref ref_placeholder.add_text(2, "Reference archive is only available for Differential/Incremental archive type"); wrap_ref.adopt(&reference); wrap_ref.adopt(&ref_placeholder); deroule.adopt_in_section(sect_ref, &wrap_ref); // delta signatures delta_fs.adopt(&delta_sig); form_delta_sig.adopt(&delta_fs); deroule.adopt_in_section(sect_delta, &form_delta_sig); deroule.adopt_in_section(sect_delta, &delta_filter_params); deroule.adopt_in_section(sect_delta, &guichet_sig_block_size); deroule.adopt_in_section(sect_delta, &delta_filter_title); deroule.adopt_in_section(sect_delta, &guichet_delta_mask); // by-passing deroule/html_derouleur anchor assigment delta_filter_params.assign_anchor(true); guichet_sig_block_size.bind_to_anchor(delta_filter_params.get_assigned_anchor()); delta_filter_title.assign_anchor(true); guichet_delta_mask.bind_to_anchor(delta_filter_title.get_assigned_anchor()); // source data fs_alter_atime.adopt(&alter_atime); form_reading.adopt(&furtive_read_mode); form_reading.adopt(&fs_alter_atime); form_reading.adopt(&zeroing_neg_date); form_reading.adopt(&follow_symlinks); fs_mod_data_detect.adopt(&mod_data_detect); form_reading.adopt(&fs_mod_data_detect); deroule.adopt_in_section(sect_source, &form_reading); // archive generation archgen_fs.adopt(&allow_over); archgen_fs.adopt(&warn_over); archgen_fs.adopt(&pause); archgen_fs.adopt(&retry_on_change_times); archgen_fs.adopt(&retry_on_change_overhead); archgen_fs.adopt(&sequential_marks); archgen_fs.adopt(&sparse_file_min_size); archgen_fs.adopt(&user_comment); archgen_fs.adopt(&hash_algo); archgen_fs.adopt(&execute); archgen_fs.adopt(&empty); form_archgen.adopt(&archgen_fs); deroule.adopt_in_section(sect_gen, &form_archgen); // operation visibility shown_fs.adopt(&info_details); shown_fs.adopt(&display_treated); shown_fs.adopt(&display_treated_only_dir); shown_fs.adopt(&display_dir_summary); shown_fs.adopt(&display_skipped); shown_fs.adopt(&security_check); shown_fs.adopt(&dont_ignore_unknown_inode_type); form_shown.adopt(&shown_fs); deroule.adopt_in_section(sect_show, &form_shown); // perimeter perimeter_fs.adopt(&empty_dir); perimeter_fs.adopt(&cache_directory_tagging); perimeter_fs.adopt(&nodump); form_perimeter.adopt(&perimeter_fs); exclu_by_ea_fs.adopt(&exclude_by_ea); exclu_by_ea_fs.adopt(&default_ea); exclu_by_ea_fs.adopt(&exclude_by_ea_name); form_perimeter.adopt(&exclu_by_ea_fs); deroule.adopt_in_section(sect_perimeter, &form_perimeter); // filename based masks deroule.adopt_in_section(sect_mask_file, &guichet_filename_mask); // path based masks deroule.adopt_in_section(sect_mask_path, &guichet_path_mask); // mount point filtering same_fs_fs.adopt(&same_fs); form_same_fs.adopt(&same_fs_fs); deroule.adopt_in_section(sect_mount_points, &form_same_fs); // EA masks deroule.adopt_in_section(sect_ea_mask, &guichet_ea_mask); // FSA scope deroule.adopt_in_section(sect_fsa_scope, &fsa_scope); // compression deroule.adopt_in_section(sect_compr, &guichet_compr_params); deroule.adopt_in_section(sect_compr, &compr_filter_title); deroule.adopt_in_section(sect_compr, &guichet_compr_mask); // by-passing deroule/html_derouleur anchor assignment compr_filter_title.assign_anchor(true); guichet_compr_mask.bind_to_anchor(compr_filter_title.get_assigned_anchor()); // slicing deroule.adopt_in_section(sect_slice, &guichet_slicing); // ciphering deroule.adopt_in_section(sect_cipher, &guichet_ciphering); // events and visibility register_name(landing_path_changed); register_name(entrepot_changed); register_name(changed); archtype.record_actor_on_event(this, html_form_radio::changed); delta_sig.record_actor_on_event(this, html_form_input::changed); display_treated.record_actor_on_event(this, html_form_input::changed); exclude_by_ea.record_actor_on_event(this, html_form_input::changed); default_ea.record_actor_on_event(this, html_form_input::changed); compr_params->record_actor_on_event(this, html_compression_params::changed); entrep->record_actor_on_event(this, html_entrepot_landing::entrepot_only_changed); entrep->record_actor_on_event(this, html_entrepot_landing::landing_path_only_changed); filename_mask->record_actor_on_event(this, html_mask_form_filename::changed); path_mask->record_actor_on_event(this, html_mask_form_path::changed); ea_mask->record_actor_on_event(this, html_mask_form_filename::changed); fixed_date.record_actor_on_event(this, html_datetime::changed); reference.record_actor_on_event(this, html_archive_read::changed); sig_block_size->record_actor_on_event(this, html_form_sig_block_size::changed); delta_mask->record_actor_on_event(this, html_mask_form_path::changed); alter_atime.record_actor_on_event(this, html_form_radio::changed); furtive_read_mode.record_actor_on_event(this, html_form_input::changed); zeroing_neg_date.record_actor_on_event(this, html_form_input::changed); mod_data_detect.record_actor_on_event(this, html_form_radio::changed); follow_symlinks.record_actor_on_event(this, html_form_ignore_as_symlink::changed); allow_over.record_actor_on_event(this, html_form_input::changed); warn_over.record_actor_on_event(this, html_form_input::changed); pause.record_actor_on_event(this, html_form_input::changed); retry_on_change_times.record_actor_on_event(this, html_form_input::changed); retry_on_change_overhead.record_actor_on_event(this, html_form_input_unit::changed); sequential_marks.record_actor_on_event(this, html_form_input::changed); sparse_file_min_size.record_actor_on_event(this, html_form_input_unit::changed); user_comment.record_actor_on_event(this, html_form_input::changed); hash_algo.record_actor_on_event(this, html_hash_algo::changed); execute.record_actor_on_event(this, html_form_input::changed); what_to_check.record_actor_on_event(this, html_comparison_fields::changed); hourshift.record_actor_on_event(this, html_form_input::changed); empty.record_actor_on_event(this, html_form_input::changed); info_details.record_actor_on_event(this, html_form_input::changed); display_treated_only_dir.record_actor_on_event(this, html_form_input::changed); display_dir_summary.record_actor_on_event(this, html_form_input::changed); security_check.record_actor_on_event(this, html_form_input::changed); dont_ignore_unknown_inode_type.record_actor_on_event(this, html_form_input::changed); empty_dir.record_actor_on_event(this, html_form_input::changed); cache_directory_tagging.record_actor_on_event(this, html_form_input::changed); nodump.record_actor_on_event(this, html_form_input::changed); exclude_by_ea_name.record_actor_on_event(this, html_form_input::changed); same_fs.record_actor_on_event(this, html_form_same_fs::changed); compr_mask->record_actor_on_event(this, html_mask_form_filename::changed); fsa_scope.record_actor_on_event(this, html_fsa_scope::changed); slicing->record_actor_on_event(this, html_slicing::changed); ciphering->record_actor_on_event(this, html_ciphering::changed); on_event(html_form_radio::changed); // used to initialize the html components visibility // css webdar_css_style::grey_button(deroule, true); display_treated_only_dir.add_css_class(webdar_css_style::indent); allow_over.add_css_class(webdar_css_style::width_100vw_8em); warn_over.add_css_class(webdar_css_style::width_100vw_8em); pause.add_css_class(webdar_css_style::width_100vw_8em); retry_on_change_times.add_css_class(webdar_css_style::width_100vw_8em); sequential_marks.add_css_class(webdar_css_style::width_100vw_8em); user_comment.add_css_class(webdar_css_style::width_100vw_8em); execute.add_css_class(webdar_css_style::width_100vw_8em); empty.add_css_class(webdar_css_style::width_100vw_8em); // tooltips archtype.set_tooltip(0, TOOLTIP_HOC_ARCHTYPE0); archtype.set_tooltip(1, TOOLTIP_HOC_ARCHTYPE1); archtype.set_tooltip(2, TOOLTIP_HOC_ARCHTYPE2); archtype.set_tooltip(3, TOOLTIP_HOC_ARCHTYPE3); archtype.set_tooltip(4, TOOLTIP_HOC_ARCHTYPE4); what_to_check.set_tooltip(TOOLTIP_HOC_WTC); hourshift.set_tooltip(TOOLTIP_HOC_HOURSHIFT); binary_delta_note.set_tooltip(TOOLTIP_HOC_BIN_DELTA); furtive_read_mode.set_tooltip(TOOLTIP_HOC_FURTIVE_READ); zeroing_neg_date.set_tooltip(TOOLTIP_HOC_ZEROING_DATE); fs_mod_data_detect.set_tooltip(TOOLTIP_HOC_MOD_DATA_DETECT); allow_over.set_tooltip(TOOLTIP_HOC_ALLOW_OVER); warn_over.set_tooltip(TOOLTIP_HOC_WARN_OVER); pause.set_tooltip(TOOLTIP_HOC_PAUSE); retry_on_change_times.set_tooltip(TOOLTIP_HOC_RETRY_TIMES); retry_on_change_overhead.set_tooltip(TOOLTIP_HOC_RETRY_OVER); sequential_marks.set_tooltip(TOOLTIP_HOC_SEQ_MARKS); sparse_file_min_size.set_tooltip(TOOLTIP_HOC_SPARSE_MIN); user_comment.set_tooltip(TOOLTIP_HOC_USER_COMMENT); hash_algo.set_tooltip(TOOLTIP_HOC_HASH_ALGO); execute.set_tooltip(TOOLTIP_HOC_EXECUTE); empty.set_tooltip(TOOLTIP_HOC_EMPTY); info_details.set_tooltip(TOOLTIP_HOC_INFO_DETAILS); display_treated.set_tooltip(TOOLTIP_HOC_DISPLAY_TREATED); display_treated_only_dir.set_tooltip(TOOLTIP_HOC_DISPLAY_ONLY_DIR); display_skipped.set_tooltip(TOOLTIP_HOC_DISPLAY_SKIPPED); display_dir_summary.set_tooltip(TOOLTIP_HOC_DISPLAY_DIR_SUMMARY); security_check.set_tooltip(TOOLTIP_HOC_SECU_CHECK); dont_ignore_unknown_inode_type.set_tooltip(TOOLTIP_HOC_IGNORE_UNKNOWN); empty_dir.set_tooltip(TOOLTIP_HOC_EMPTY_DIR); cache_directory_tagging.set_tooltip(TOOLTIP_HOC_CACHE_TAG); nodump.set_tooltip(TOOLTIP_HOC_NODUMP); exclu_by_ea_fs.set_tooltip(TOOLTIP_HOC_EXCLUDE_BY_EA); default_ea.set_tooltip(TOOLTIP_HOC_DEFAULT_EA); exclude_by_ea_name.set_tooltip(TOOLTIP_HOC_EXCLUDE_BY_EA_NAME); same_fs_fs.set_tooltip(TOOLTIP_HOC_SAME_FS); } void html_options_create::set_biblio(const shared_ptr & ptr) { guichet_entrep.set_child(ptr, bibliotheque::repo, entrep, false); filename_mask->set_child(ptr, bibliotheque::filefilter); guichet_filename_mask.set_child(ptr, bibliotheque::filefilter, filename_mask, false); ea_mask->set_child(ptr, bibliotheque::filefilter); path_mask->set_child(ptr, bibliotheque::pathfilter); guichet_ea_mask.set_child(ptr, bibliotheque::filefilter, ea_mask, false); delta_mask->set_child(ptr, bibliotheque::pathfilter); guichet_delta_mask.set_child(ptr, bibliotheque::pathfilter, delta_mask, false); guichet_compr_params.set_child(ptr, bibliotheque::compress, compr_params, false); compr_mask->set_child(ptr, bibliotheque::filefilter); guichet_compr_mask.set_child(ptr, bibliotheque::filefilter, compr_mask, false); guichet_path_mask.set_child(ptr, bibliotheque::pathfilter, path_mask, false); guichet_slicing.set_child(ptr, bibliotheque::slicing, slicing, false); guichet_ciphering.set_child(ptr, bibliotheque::ciphering, ciphering, false); guichet_sig_block_size.set_child(ptr, bibliotheque::delta_sig, sig_block_size, true); reference.set_biblio(ptr); init(); } void html_options_create::load_json(const json & source) { try { unsigned int version; string class_id; json config = unwrap_config_from_json_header(source, version, class_id); if(class_id != myclass_id) throw exception_range(libdar::tools_printf("Unexpected class_id in json data, found %s while expecting %s", class_id.c_str(), myclass_id)); if(version > format_version) throw exception_range(libdar::tools_printf("Json format version too hight for %s, upgrade your webdar software", myclass_id)); ignore_events = true; try { guichet_entrep.load_json(config.at(jlabel_entrep)); guichet_filename_mask.load_json(config.at(jlabel_file_mask)); guichet_path_mask.load_json(config.at(jlabel_path_mask)); guichet_ea_mask.load_json(config.at(jlabel_ea_mask)); archtype.set_selected_id_with_warning(config.at(jlabel_archtype), jlabel_archtype); fixed_date.set_value(libdar::deci(config.at(jlabel_fixed_date)).computer()); switch(archtype.get_selected_num()) { case 0: reference.clear_json(); break; case 1: case 2: reference.load_json(config.at(jlabel_reference)); break; case 3: case 4: reference.clear_json(); break; default: throw WEBDAR_BUG; } delta_sig.set_value_as_bool(config.at(jlabel_delta_sig)); if(delta_sig.get_value_as_bool()) { guichet_sig_block_size.load_json(config.at(jlabel_sig_block_size)); guichet_delta_mask.load_json(config.at(jlabel_delta_mask)); } else { guichet_sig_block_size.clear_json(); guichet_delta_mask.clear_json(); } alter_atime.set_selected_id_with_warning(config.at(jlabel_alter_atime), jlabel_alter_atime); furtive_read_mode.set_value_as_bool(config.at(jlabel_furtive_read)); zeroing_neg_date.set_value_as_bool(config.at(jlabel_zeroing)); mod_data_detect.set_selected_id_with_warning(config.at(jlabel_mod_data),jlabel_mod_data); follow_symlinks.load_json(config.at(jlabel_follow_sym)); allow_over.set_value_as_bool(config.at(jlabel_allow_over)); warn_over.set_value_as_bool(config.at(jlabel_warn_over)); pause.set_value_as_int(config.at(jlabel_pause)); retry_on_change_times.set_value_as_int(config.at(jlabel_retry_times)); retry_on_change_overhead.set_value_as_infinint(libdar::deci(config.at(jlabel_retry_overhead)).computer()); sequential_marks.set_value_as_bool(config.at(jlabel_sequential_marks)); sparse_file_min_size.set_value_as_infinint(libdar::deci(config.at(jlabel_sparse_min_size)).computer()); user_comment.set_value(config.at(jlabel_user_comment)); hash_algo.set_selected_id_with_warning(config.at(jlabel_hash_algo), jlabel_hash_algo); execute.set_value(config.at(jlabel_execute)); what_to_check.set_selected_id_with_warning(config.at(jlabel_what_to_check), jlabel_what_to_check); hourshift.set_value_as_int(config.at(jlabel_hourshift)); empty.set_value_as_bool(config.at(jlabel_empty)); info_details.set_value_as_bool(config.at(jlabel_info_details)); display_treated.set_value_as_bool(config.at(jlabel_display_treated)); display_treated_only_dir.set_value_as_bool(config.at(jlabel_display_only_dir)); display_skipped.set_value_as_bool(config.at(jlabel_display_skipped)); display_dir_summary.set_value_as_bool(config.at(jlabel_display_dir_summ)); security_check.set_value_as_bool(config.at(jlabel_secu_check)); dont_ignore_unknown_inode_type.set_value_as_bool(config.at(jlabel_dont_ignore_unknown)); empty_dir.set_value_as_bool(config.at(jlabel_empty_dir)); cache_directory_tagging.set_value_as_bool(config.at(jlabel_cache_dir_tag)); nodump.set_value_as_bool(config.at(jlabel_nodump)); exclude_by_ea.set_value_as_bool(config.at(jlabel_exclude_by_ea)); default_ea.set_value_as_bool(config.at(jlabel_default_ea)); exclude_by_ea_name.set_value(config.at(jlabel_exclude_by_ea_name)); same_fs.load_json(config.at(jlabel_same_fs)); guichet_compr_params.load_json(config.at(jlabel_compr_params)); guichet_compr_mask.load_json(config.at(jlabel_compr_mask)); fsa_scope.load_json(config.at(jlabel_fsa_scope)); guichet_slicing.load_json(config.at(jlabel_slicing)); guichet_ciphering.load_json(config.at(jlabel_ciphering)); } catch(...) { ignore_events = false; throw; } ignore_events = false; trigger_changed(); // one change event in place of many from each subcomponent } catch(json::exception & e) { throw exception_json(libdar::tools_printf("Error loading %s config", myclass_id), e); } } json html_options_create::save_json() const { json ret; html_options_create* me = const_cast(this); if(me == nullptr) throw WEBDAR_BUG; ret[jlabel_entrep] = guichet_entrep.save_json(); ret[jlabel_file_mask] = guichet_filename_mask.save_json(); ret[jlabel_path_mask] = guichet_path_mask.save_json(); ret[jlabel_ea_mask] = guichet_ea_mask.save_json(); ret[jlabel_archtype] = archtype.get_selected_id(); ret[jlabel_fixed_date] = libdar::deci(fixed_date.get_value()).human(); switch(archtype.get_selected_num()) { case 0: me->reference.clear_json(); break; case 1: case 2: ret[jlabel_reference] = reference.save_json(); break; case 3: case 4: me->reference.clear_json(); break; default: throw WEBDAR_BUG; } ret[jlabel_delta_sig] = delta_sig.get_value_as_bool(); if(delta_sig.get_value_as_bool()) { ret[jlabel_sig_block_size] = guichet_sig_block_size.save_json(); ret[jlabel_delta_mask] = guichet_delta_mask.save_json(); } else { me->guichet_sig_block_size.clear_json(); me->guichet_delta_mask.clear_json(); } ret[jlabel_alter_atime] = alter_atime.get_selected_id(); ret[jlabel_furtive_read] = furtive_read_mode.get_value_as_bool(); ret[jlabel_zeroing] = zeroing_neg_date.get_value_as_bool(); ret[jlabel_mod_data] = mod_data_detect.get_selected_id(); ret[jlabel_follow_sym] = follow_symlinks.save_json(); ret[jlabel_allow_over] = allow_over.get_value_as_bool(); ret[jlabel_warn_over] = warn_over.get_value_as_bool(); ret[jlabel_pause] = pause.get_value_as_int(); ret[jlabel_retry_times] = retry_on_change_times.get_value_as_int(); ret[jlabel_retry_overhead] = libdar::deci(retry_on_change_overhead.get_value_as_infinint()).human(); ret[jlabel_sequential_marks] = sequential_marks.get_value_as_bool(); ret[jlabel_sparse_min_size] = libdar::deci(sparse_file_min_size.get_value_as_infinint()).human(); ret[jlabel_user_comment] = user_comment.get_value(); ret[jlabel_hash_algo] = hash_algo.get_selected_id(); ret[jlabel_execute] = execute.get_value(); ret[jlabel_what_to_check] = what_to_check.get_selected_id(); ret[jlabel_hourshift] = hourshift.get_value_as_int(); ret[jlabel_empty] = empty.get_value_as_bool(); ret[jlabel_info_details] = info_details.get_value_as_bool(); ret[jlabel_display_treated] = display_treated.get_value_as_bool(); ret[jlabel_display_only_dir] = display_treated_only_dir.get_value_as_bool(); ret[jlabel_display_skipped] = display_skipped.get_value_as_bool(); ret[jlabel_display_dir_summ] = display_dir_summary.get_value_as_bool(); ret[jlabel_secu_check] = security_check.get_value_as_bool(); ret[jlabel_dont_ignore_unknown] = dont_ignore_unknown_inode_type.get_value_as_bool(); ret[jlabel_empty_dir] = empty_dir.get_value_as_bool(); ret[jlabel_cache_dir_tag] = cache_directory_tagging.get_value_as_bool(); ret[jlabel_nodump] = nodump.get_value_as_bool(); ret[jlabel_exclude_by_ea] = exclude_by_ea.get_value_as_bool(); ret[jlabel_default_ea] = default_ea.get_value_as_bool(); ret[jlabel_exclude_by_ea_name] = exclude_by_ea_name.get_value(); ret[jlabel_same_fs] = same_fs.save_json(); ret[jlabel_compr_params] = guichet_compr_params.save_json(); ret[jlabel_compr_mask] = guichet_compr_mask.save_json(); ret[jlabel_fsa_scope] = fsa_scope.save_json(); ret[jlabel_slicing] = guichet_slicing.save_json(); ret[jlabel_ciphering] = guichet_ciphering.save_json(); return wrap_config_with_json_header(format_version, myclass_id, ret); } void html_options_create::clear_json() { ignore_events = true; try { init(); } catch(...) { ignore_events = false; throw; } ignore_events = false; trigger_changed(); // once for all ignored events from init() } bibliotheque::using_set html_options_create::get_using_set() const { bibliotheque::using_set ret; subconfig_add_to(ret, guichet_entrep.get_using_set()); subconfig_add_to(ret, guichet_filename_mask.get_using_set()); subconfig_add_to(ret, guichet_path_mask.get_using_set()); subconfig_add_to(ret, guichet_ea_mask.get_using_set()); subconfig_add_to(ret, reference.get_using_set()); subconfig_add_to(ret, guichet_sig_block_size.get_using_set()); subconfig_add_to(ret, guichet_delta_mask.get_using_set()); subconfig_add_to(ret, guichet_compr_params.get_using_set()); subconfig_add_to(ret, guichet_compr_mask.get_using_set()); subconfig_add_to(ret, guichet_slicing.get_using_set()); subconfig_add_to(ret, guichet_ciphering.get_using_set()); return ret; } libdar::archive_options_create html_options_create::get_options(shared_ptr & webui) const { libdar::archive_options_create ret; shared_ptr ref_arch; // used locally to pass the archive of reference we may build for diff/incr backup libdar::infinint compr_bs = compr_params->get_compression_block(); libdar::U_I val = 0; switch(archtype.get_selected_num()) { case 0: // full backup break; case 2: // diff/incremental backup with binary delta ret.set_delta_diff(true); /* no break ! */ case 1: // diff/incremental backup ref_arch.reset(new (nothrow) libdar::archive(webui->get_user_interaction(), libdar::path(reference.get_archive_path()), reference.get_archive_basename(), EXTENSION, reference.get_read_options(webui))); if(!ref_arch) throw exception_memory(); else ret.set_reference(ref_arch); break; case 3: // snapshot ret.set_snapshot(true); break; case 4: // fixed date ret.set_fixed_date(fixed_date.get_value()); break; default: throw WEBDAR_BUG; } ret.set_hourshift(libdar::deci(hourshift.get_value()).computer()); ret.set_allow_over(allow_over.get_value_as_bool()); ret.set_warn_over(warn_over.get_value_as_bool()); ret.set_info_details(info_details.get_value_as_bool()); ret.set_display_treated(display_treated.get_value_as_bool(), display_treated_only_dir.get_value_as_bool()); ret.set_display_finished(display_dir_summary.get_value_as_bool()); ret.set_pause(libdar::deci(pause.get_value()).computer()); ret.set_empty_dir(empty_dir.get_value_as_bool()); ret.set_compression(compr_params->get_compression_algo()); ret.set_compression_level(compr_params->get_compression_level()); ret.set_min_compr_size(compr_params->get_min_compression_size()); ret.set_never_resave_uncompressed(compr_params->get_resave_uncompressed()); ret.set_multi_threaded_compress(compr_params->get_num_threads()); val = webdar_tools_convert_from_infinint(compr_bs, string("compression block size is too large for the underlying operating system, please reduce")); if(val < tokens_min_compr_bs && val != 0) throw exception_range(libdar::tools_printf("compression block size is too small, select either zero to disable compression per block or a block size greater or equal to %d", tokens_min_compr_bs)); ret.set_compression_block_size(val); if(compr_params->get_compression_algo() != libdar::compression::none) { unique_ptr libcompmask = compr_mask->get_mask(); if(!libcompmask) throw WEBDAR_BUG; ret.set_compr_mask(*libcompmask); } libdar::infinint s_size; libdar::infinint f_s_size; slicing->get_slicing(s_size, f_s_size); ret.set_slicing(s_size, f_s_size); ret.set_ea_mask(*(ea_mask->get_mask())); ret.set_fsa_scope(fsa_scope.get_scope()); ret.set_crypto_algo(ciphering->get_crypto_algo()); if(ciphering->get_crypto_algo() != libdar::crypto_algo::none) { switch(ciphering->get_crypto_type()) { case html_ciphering::sym: ret.set_crypto_pass(ciphering->get_crypto_pass()); ret.set_iteration_count(ciphering->get_iteration_count()); ret.set_kdf_hash(ciphering->get_kdf_hash()); break; case html_ciphering::asym: ret.set_gnupg_recipients(ciphering->get_gnupg_recipients()); ret.set_gnupg_signatories(ciphering->get_gnupg_signatories()); break; default: throw WEBDAR_BUG; } ret.set_crypto_size(ciphering->get_crypto_size()); ret.set_multi_threaded_crypto(ciphering->get_multi_threaded_crypto()); } ret.set_nodump(nodump.get_value_as_bool()); if(exclude_by_ea.get_value_as_bool()) ret.set_exclude_by_ea(exclude_by_ea_name.get_value()); ret.set_what_to_check(what_to_check.get_value()); ret.set_empty(empty.get_value_as_bool()); ret.set_alter_atime(alter_atime.get_selected_id() == "atime"); ret.set_furtive_read_mode(furtive_read_mode.get_value_as_bool()); ret.set_auto_zeroing_neg_dates(zeroing_neg_date.get_value_as_bool()); if(!follow_symlinks.empty()) ret.set_ignored_as_symlink(follow_symlinks.get_symlink_list()); ret.set_cache_directory_tagging(cache_directory_tagging.get_value_as_bool()); ret.set_display_skipped(display_skipped.get_value_as_bool()); ret.set_slice_permission(slicing->get_permission()); ret.set_slice_user_ownership(slicing->get_user_ownership()); ret.set_slice_group_ownership(slicing->get_group_ownership()); ret.set_retry_on_change(libdar::deci(retry_on_change_times.get_value()).computer(), retry_on_change_overhead.get_value_as_infinint()); ret.set_sequential_marks(sequential_marks.get_value_as_bool()); ret.set_sparse_file_min_size(sparse_file_min_size.get_value_as_infinint()); ret.set_security_check(security_check.get_value_as_bool()); ret.set_user_comment(user_comment.get_value()); ret.set_hash_algo(hash_algo.get_value()); ret.set_slice_min_digits(slicing->get_min_digits()); ret.set_ignore_unknown_inode_type(! dont_ignore_unknown_inode_type.get_value_as_bool()); ret.set_execute(execute.get_value()); ret.set_entrepot(entrep->get_entrepot(webui)); ret.set_selection(*(filename_mask->get_mask())); ret.set_subtree(*(path_mask->get_mask())); vector mp = same_fs.get_included_fs_path(); for(vector::iterator it = mp.begin(); it != mp.end(); ++it) ret.set_same_fs_include(*it); mp = same_fs.get_excluded_fs_path(); for(vector::iterator it = mp.begin(); it != mp.end(); ++it) ret.set_same_fs_exclude(*it); if(delta_sig.get_value_as_bool()) { unique_ptr dmask = delta_mask->get_mask(); if(dmask) { ret.set_delta_signature(true); ret.set_delta_mask(*dmask); } else throw WEBDAR_BUG; ret.set_sig_block_len(sig_block_size->get_value()); ret.set_delta_sig_min_size(sig_block_size->get_delta_sig_min_size()); } if(mod_data_detect.get_selected_id() == "any_inode_change") ret.set_modified_data_detection(libdar::modified_data_detection::any_inode_change); else if(mod_data_detect.get_selected_id() == "mtime_size") ret.set_modified_data_detection(libdar::modified_data_detection::mtime_size); else throw WEBDAR_BUG; return ret; } void html_options_create::set_to_webdar_defaults() { clear_json(); guichet_entrep.load_from_bibliotheque(bibliotheque::default_config_name); guichet_filename_mask.clear_json(); guichet_path_mask.clear_json(); guichet_ea_mask.clear_json(); archtype.set_selected_num(0); // should be full backup delta_sig.set_value_as_bool(false); alter_atime.set_selected_num(0); furtive_read_mode.set_value_as_bool(true); zeroing_neg_date.set_value_as_bool(true); retry_on_change_times.set_value_as_int(5); hash_algo.set_value(libdar::hash_algo::whirlpool); info_details.set_value_as_bool(true); display_treated.set_value_as_bool(true); display_treated_only_dir.set_value_as_bool(false); display_skipped.set_value_as_bool(true); display_dir_summary.set_value_as_bool(true); dont_ignore_unknown_inode_type.set_value_as_bool(true); empty_dir.set_value_as_bool(false); cache_directory_tagging.set_value_as_bool(true); nodump.set_value_as_bool(true); exclude_by_ea.set_value_as_bool(true); default_ea.set_value_as_bool(true); guichet_compr_params.load_from_bibliotheque(bibliotheque::default_config_name); guichet_compr_mask.load_from_bibliotheque(bibliotheque::default_no_compression); guichet_slicing.load_from_bibliotheque(bibliotheque::default_config_name); guichet_ciphering.load_from_bibliotheque(bibliotheque::default_config_name); } string html_options_create::inherited_get_body_part(const chemin & path, const request & req) { return get_body_part_from_all_children(path, req); } void html_options_create::on_event(const string & event_name) { if(event_name == html_form_radio::changed || event_name == html_compression_params::changed || event_name == html_form_input::changed || event_name == html_crypto_algo::changed || event_name == html_form_select::changed) { switch(archtype.get_selected_num()) { case 0: // full reference.set_visible(false); ref_placeholder.set_visible(true); hourshift.set_visible(false); fixed_date.set_visible(false); what_to_check.set_visible(false); break; case 1: // diff case 2: // diff+delta reference.set_visible(true); ref_placeholder.set_visible(false); hourshift.set_visible(true); fixed_date.set_visible(false); what_to_check.set_visible(true); break; case 3: // snapshot reference.set_visible(false); ref_placeholder.set_visible(true); hourshift.set_visible(false); fixed_date.set_visible(false); what_to_check.set_visible(false); break; case 4: // date reference.set_visible(false); ref_placeholder.set_visible(true); hourshift.set_visible(true); fixed_date.set_visible(true); what_to_check.set_visible(false); break; default: throw WEBDAR_BUG; } delta_filter_title.set_visible(delta_sig.get_value_as_bool()); guichet_delta_mask.set_visible(delta_sig.get_value_as_bool()); delta_filter_params.set_visible(delta_sig.get_value_as_bool()); guichet_sig_block_size.set_visible(delta_sig.get_value_as_bool()); display_treated_only_dir.set_visible(display_treated.get_value_as_bool()); if(exclude_by_ea.get_value_as_bool()) { default_ea.set_visible(true); exclude_by_ea_name.set_visible(true); if(default_ea.get_value_as_bool()) { exclude_by_ea_name.set_value(libdar::archive_options_create::default_excluding_ea); exclude_by_ea_name.set_enabled(false); } else exclude_by_ea_name.set_enabled(true); } else { default_ea.set_visible(false); exclude_by_ea_name.set_visible(false); } compr_filter_title.set_visible(compr_params->get_compression_algo() != libdar::compression::none); guichet_compr_mask.set_visible(compr_params->get_compression_algo() != libdar::compression::none); // no need to call my_body_part_has_changed() // because changed done in on_event concern // body_builder objects we have adopted trigger_changed(); } else if(event_name == html_entrepot_landing::entrepot_only_changed) { act(entrepot_changed); trigger_changed(); } else if(event_name == html_mask_form_filename::changed || event_name == html_mask_form_path::changed || event_name == html_datetime::changed || event_name == html_archive_read::changed || event_name == html_form_sig_block_size::changed || event_name == html_form_ignore_as_symlink::changed || event_name == html_form_input_unit::changed || event_name == html_hash_algo::changed || event_name == html_comparison_fields::changed || event_name == html_form_same_fs::changed || event_name == html_fsa_scope::changed || event_name == html_slicing::changed || event_name == html_ciphering::changed) { trigger_changed(); } else if(event_name == html_entrepot_landing::landing_path_only_changed) { act(landing_path_changed); } else throw WEBDAR_BUG; } void html_options_create::new_css_library_available() { unique_ptr & csslib = lookup_css_library(); if(!csslib) throw WEBDAR_BUG; webdar_css_style::update_library(*csslib); } void html_options_create::init() { libdar::archive_options_create defaults; guichet_entrep.clear_json(); guichet_filename_mask.clear_json(); guichet_path_mask.clear_json(); if(defaults.get_reference() != nullptr) throw WEBDAR_BUG; // not expected default value!!! else if(defaults.get_snapshot()) archtype.set_selected_num(2); else if(defaults.get_fixed_date() != 0) archtype.set_selected_num(3); else archtype.set_selected_num(0); fixed_date.set_value(defaults.get_fixed_date()); reference.clear_json(); delta_sig.set_value_as_bool(defaults.get_delta_signature()); sig_block_size->set_delta_sig_min_size(defaults.get_delta_sig_min_size()); sig_block_size->set_value(defaults.get_sig_block_len()); guichet_delta_mask.clear_json(); if(defaults.get_alter_atime()) alter_atime.set_selected_num(0); else alter_atime.set_selected_num(1); furtive_read_mode.set_value_as_bool(defaults.get_furtive_read_mode()); zeroing_neg_date.set_value_as_bool(defaults.get_auto_zeroing_neg_dates()); mod_data_detect.set_selected_id("mtime_size"); follow_symlinks.clear_json(); allow_over.set_value_as_bool(defaults.get_allow_over()); warn_over.set_value_as_bool(defaults.get_warn_over()); pause.set_value(libdar::deci(defaults.get_pause()).human()); retry_on_change_times.set_value(libdar::deci(defaults.get_repeat_count()).human()); retry_on_change_overhead.set_value_as_infinint(defaults.get_repeat_byte()); sequential_marks.set_value_as_bool(defaults.get_sequential_marks()); sparse_file_min_size.set_value_as_infinint(defaults.get_sparse_file_min_size()); user_comment.set_value(defaults.get_user_comment()); hash_algo.set_value(defaults.get_hash_algo()); execute.set_value(defaults.get_execute()); what_to_check.set_value(defaults.get_comparison_fields()); hourshift.set_value(libdar::deci(defaults.get_hourshift()).human()); empty.set_value_as_bool(defaults.get_empty()); info_details.set_value_as_bool(defaults.get_info_details()); display_treated.set_value_as_bool(defaults.get_display_treated()); display_treated_only_dir.set_value_as_bool(defaults.get_display_treated_only_dir()); display_skipped.set_value_as_bool(defaults.get_display_skipped()); display_dir_summary.set_value_as_bool(defaults.get_display_finished()); security_check.set_value_as_bool(defaults.get_security_check()); dont_ignore_unknown_inode_type.set_value_as_bool(! defaults.get_ignore_unknown_inode_type()); empty_dir.set_value_as_bool(defaults.get_empty_dir()); cache_directory_tagging.set_value_as_bool(defaults.get_cache_directory_tagging()); nodump.set_value_as_bool(defaults.get_nodump()); exclude_by_ea.set_value_as_bool(!defaults.get_exclude_by_ea().empty()); default_ea.set_value_as_bool(true); same_fs.clear_json(); guichet_compr_params.clear_json(); guichet_compr_mask.clear_json(); fsa_scope.clear_json(); guichet_slicing.clear_json(); guichet_ciphering.clear_json(); } void html_options_create::trigger_changed() { if(!ignore_events) act(changed); } webdar-1.0.0/src/html_archive_compare.cpp0000644000175000017520000001166315036516255015364 00000000000000/*********************************************************************/ // webdar - a web server and interface program to libdar // Copyright (C) 2013-2025 Denis Corbin // // This file is part of Webdar // // Webdar is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // Webdar is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Webdar. If not, see // //---- // to contact the author: dar.linux@free.fr /*********************************************************************/ // C system header files #include "my_config.h" extern "C" { } // C++ system header files // webdar headers #include "webdar_css_style.hpp" #include "environment.hpp" #include "tooltip_messages.hpp" // #include "html_archive_compare.hpp" using namespace std; const string html_archive_compare::diff_root_changed = "diff_fs_root_changed"; html_archive_compare::html_archive_compare(): diff_fs_root_fs(""), diff_fs_root("Directory to compare the backup against", global_envir.get_value_with_default("HOME", "/"), "", webdar_css_style::width_80vw, "Select the directory to compare with..."), diff_fs_root_form("Update") { opt_diff.reset(new (nothrow) html_options_compare()); if(! opt_diff) throw exception_memory(); // components configuration static const char* sect_diff_params = "dparams"; static const char* sect_diff_options = "doptions"; diff_params.add_section(sect_diff_params, "Comparison Parameters"); diff_params.add_section(sect_diff_options, "Comparison Options"); diff_params.set_active_section(sect_diff_params); diff_fs_root.set_select_mode(html_form_input_file::select_dir); diff_fs_root.set_can_create_dir(false); diff_fs_root.set_change_event_name(diff_root_changed); opt_diff->set_fs_root(diff_fs_root.get_value()); in_place_msg.add_text(4, "Warning, \"in-place\" comparison is set!"); in_place_msg.add_text(0, "The field above will only be used if the in-place information is not present in the archive"); in_place_msg.add_nl(); in_place_msg.add_text(0, "You can disable \"in-place\" comparison below in the section [Comparison Options | How to proceed]"); // adoption tree diff_fs_root_fs.adopt(&diff_fs_root); diff_fs_root_fs.adopt(&in_place_msg); diff_fs_root_form.adopt(&diff_fs_root_fs); diff_params.adopt_in_section(sect_diff_params, &diff_fs_root_form); diff_params.adopt_in_section(sect_diff_options, &guichet_opt_diff); adopt(&diff_params); // events diff_fs_root.record_actor_on_event(this, diff_root_changed); opt_diff->record_actor_on_event(this, html_options_compare::changed); // visible in_place_msg.set_visible(false); // css webdar_css_style::normal_button(diff_params, true); in_place_msg.add_css_class(webdar_css_style::text_grey); // tooltips diff_fs_root.set_tooltip(TOOLTIP_HACM_FS_ROOT); } void html_archive_compare::set_biblio(const shared_ptr & ptr) { if(!opt_diff) throw WEBDAR_BUG; opt_diff->set_biblio(ptr); guichet_opt_diff.set_child(ptr, bibliotheque::confdiff, opt_diff, false); if(ptr->has_config(bibliotheque::confdiff, bibliotheque::default_config_name)) { try { guichet_opt_diff.load_from_bibliotheque(bibliotheque::default_config_name); } catch(...) { // ignore exception here, as this is called from constructor // of the session components and nothing is yet available to // display execeptions messages (due to old config in configuration file // or corrupted configuration file we read from) // The consequence is that we have a cleared configuration: guichet_opt_diff.clear_json(); } } } libdar::archive_options_diff html_archive_compare::get_options() const { if(! opt_diff) throw WEBDAR_BUG; return opt_diff->get_options(); } void html_archive_compare::on_event(const string & event_name) { if(event_name == diff_root_changed) { opt_diff->set_fs_root(diff_fs_root.get_value()); } else if(event_name == html_options_compare::changed) { in_place_msg.set_visible(opt_diff->get_in_place_mode()); } else throw WEBDAR_BUG; } string html_archive_compare::inherited_get_body_part(const chemin & path, const request & req) { return get_body_part_from_all_children(path, req); } void html_archive_compare::new_css_library_available() { unique_ptr & csslib = lookup_css_library(); if(!csslib) throw WEBDAR_BUG; webdar_css_style::update_library(*csslib); } webdar-1.0.0/src/html_url.hpp0000644000175000017520000000501215044720322013022 00000000000000/*********************************************************************/ // webdar - a web server and interface program to libdar // Copyright (C) 2013-2025 Denis Corbin // // This file is part of Webdar // // Webdar is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // Webdar is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Webdar. If not, see // //---- // to contact the author: dar.linux@free.fr /*********************************************************************/ #ifndef HTML_URL_HPP #define HTML_URL_HPP // C system header files #include "my_config.h" extern "C" { } // C++ system header files #include "body_builder.hpp" #include "static_body_builder.hpp" // webdar headers /// html component implementing the usual hyperlink component class html_url : public body_builder { public: html_url(const std::string & url); html_url(const html_url & ref) = default; html_url(html_url && ref) noexcept = delete; html_url & operator = (const html_url & ref) = default; html_url & operator = (html_url && ref) noexcept = delete; ~html_url() = default; void change_url(const std::string & newurl); const std::string & get_url() const { return x_url; }; /// inherited from body_builder virtual void bind_to_anchor(const std::string & val) override { anchor_to = val; }; /// whether to download or display the URL target void set_download(bool mode) { download = mode; }; /// change the filename to create on client/browser side if download is set to true /// \note providing a empty string get to the default behavior (no filename specified in URL) void set_filename(const std::string & name) { filename = name; }; /// open a new page (_blank target) void set_target_new_page(bool mode) { blank = mode; }; protected: /// inherited from body_builder virtual std::string inherited_get_body_part(const chemin & path, const request & req) override; private: std::string anchor_to; std::string x_url; bool download; std::string filename; bool blank; }; #endif webdar-1.0.0/src/html_archive_merge.cpp0000644000175000017520000001325015036517674015035 00000000000000/*********************************************************************/ // webdar - a web server and interface program to libdar // Copyright (C) 2013-2025 Denis Corbin // // This file is part of Webdar // // Webdar is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // Webdar is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Webdar. If not, see // //---- // to contact the author: dar.linux@free.fr /*********************************************************************/ // C system header files #include "my_config.h" extern "C" { } // C++ system header files // webdar headers #include "webdar_css_style.hpp" #include "tooltip_messages.hpp" // #include "html_archive_merge.hpp" using namespace std; html_archive_merge::html_archive_merge(): form("Update"), fs(""), sauv_path("Where to create the backup", "/", "", webdar_css_style::width_100vw, "Select directory where to create the backup..."), basename("Backup Basename", html_form_input::text, "", "", webdar_css_style::width_100vw_3em), need_entrepot_update(false) { static const char* sect_archive = "archive"; static const char* sect_options = "options"; #ifdef LIBTHREADAR_STACK_FEATURE set_stack_size(DEFAULT_STACK_SIZE); #endif options.reset(new (nothrow) html_options_merge()); if(! options) throw exception_memory(); deroule.add_section(sect_archive, "Merging Parameters"); deroule.add_section(sect_options, "Merging Options"); deroule.set_active_section(0); sauv_path.set_select_mode(html_form_input_file::select_dir); sauv_path.set_can_create_dir(true); if(repoxfer.get_html_user_interaction()) repoxfer.get_html_user_interaction()->auto_hide(true, false); else throw WEBDAR_BUG; // adoption tree fs.adopt(&sauv_path); fs.adopt(&basename); form.adopt(&fs); deroule.adopt_in_section(sect_archive, &form); deroule.adopt_in_section(sect_options, &guichet_options); adopt(&deroule); adopt(&repoxfer); // events options->record_actor_on_event(this, html_options_merge::entrepot_changed); options->record_actor_on_event(this, html_options_merge::landing_path_changed); repoxfer.record_actor_on_event(this, html_libdar_running_popup::libdar_has_finished); basename.record_actor_on_event(this, html_form_input::changed); // visibility repoxfer.set_visible(false); // CSS webdar_css_style::normal_button(deroule, true); // tooltip sauv_path.set_tooltip(TOOLTIP_HAM_SAUV_PATH); basename.set_tooltip(TOOLTIP_HAM_BASENAME); } const string & html_archive_merge::get_archive_basename() const { if(basename.get_value().empty()) { const_cast(this)->basename.box_set_css_class(webdar_css_style::red_border); throw exception_range("Archive basename cannot be an empty string"); } return basename.get_value(); } void html_archive_merge::set_biblio(const shared_ptr & ptr) { options->set_biblio(ptr); guichet_options.set_child(ptr, bibliotheque::confmerge, options, false); if(ptr->has_config(bibliotheque::confmerge, bibliotheque::default_config_name)) { try { guichet_options.load_from_bibliotheque(bibliotheque::default_config_name); } catch(...) { // ignore exception here, as this is called from constructor // of the session components and nothing is yet available to // display execeptions messages (due to old config in configuration file // or corrupted configuration file we read from) // The consequence is that we have a cleared configuration: guichet_options.clear_json(); } } } void html_archive_merge::on_event(const string & event_name) { if(event_name == html_options_merge::entrepot_changed) { need_entrepot_update = true; } else if(event_name == html_libdar_running_popup::libdar_has_finished) { repoxfer.set_visible(false); } else if(event_name == html_options_merge::landing_path_changed) { sauv_path.set_value(options->get_landing_path()); } else if(event_name == html_form_input::changed) { if(basename.get_value().empty()) basename.box_set_css_class(webdar_css_style::red_border); else basename.box_set_css_class(""); } else throw WEBDAR_BUG; } string html_archive_merge::inherited_get_body_part(const chemin & path, const request & req) { if(need_entrepot_update) update_entrepot(); return get_body_part_from_all_children(path, req); } void html_archive_merge::new_css_library_available() { unique_ptr & csslib = lookup_css_library(); if(!csslib) throw WEBDAR_BUG; webdar_css_style::update_library(*csslib); } void html_archive_merge::inherited_run() { shared_ptr ptr(repoxfer.get_html_user_interaction()); if(!ptr) throw WEBDAR_BUG; sauv_path.set_entrepot(options->get_entrepot(ptr)); } void html_archive_merge::signaled_inherited_cancel() { pthread_t libdar_tid; libdar::thread_cancellation th; if(is_running(libdar_tid)) th.cancel(libdar_tid, true, 0); } void html_archive_merge::update_entrepot() { if(is_running()) throw WEBDAR_BUG; repoxfer.set_visible(true); need_entrepot_update = false; repoxfer.run_and_control_thread(this); } webdar-1.0.0/src/html_legend.hpp0000644000175000017520000000372315035257146013476 00000000000000/*********************************************************************/ // webdar - a web server and interface program to libdar // Copyright (C) 2013-2025 Denis Corbin // // This file is part of Webdar // // Webdar is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // Webdar is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Webdar. If not, see // //---- // to contact the author: dar.linux@free.fr /*********************************************************************/ #ifndef HTML_LEGEND_HPP #define HTML_LEGEND_HPP // C system header files #include "my_config.h" extern "C" { } // C++ system header files #include "html_tooltip.hpp" // webdar headers #include "body_builder.hpp" /// class html_legend implements HTML legend feature /// used within html_form_fieldset, mainly class html_legend : public html_tooltip { public: html_legend(const std::string & label) { x_label = label; }; html_legend(const html_legend & ref) = default; html_legend(html_legend && ref) noexcept = delete; html_legend & operator = (const html_legend & ref) = default; html_legend & operator = (html_legend && ref) noexcept = delete; ~html_legend() = default; void change_label(const std::string & label); const std::string get_label() const { return x_label; }; protected: /// inherited from body_builder virtual std::string inherited_get_body_part(const chemin & path, const request & req) override; private: std::string x_label; }; #endif webdar-1.0.0/src/html_options_extract.cpp0000644000175000017520000004553015036507073015460 00000000000000/*********************************************************************/ // webdar - a web server and interface program to libdar // Copyright (C) 2013-2025 Denis Corbin // // This file is part of Webdar // // Webdar is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // Webdar is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Webdar. If not, see // //---- // to contact the author: dar.linux@free.fr /*********************************************************************/ // C system header files #include "my_config.h" extern "C" { } // C++ system header files #include // webdar headers #include "webdar_css_style.hpp" #include "html_form_mask_expression.hpp" #include "tooltip_messages.hpp" // #include "html_options_extract.hpp" using namespace std; const string html_options_extract::changed = "html_options_extract_changed"; html_options_extract::html_options_extract(): form_archgen("Update"), fs(""), in_place("Ignore the provided root directory above and use instead the \"in place\" directory information stored in the archive", html_form_input::check, "", "", ""), warn_over("Warn before overwriting", html_form_input::check, "1", "", ""), flat("Do not restore directory structure", html_form_input::check, "", "", ""), what_to_check("Fields to restore"), warn_remove_no_match("Warn if a file to remove does not match expected type", html_form_input::check, "", "", ""), empty("Dry-run execution", html_form_input::check, "", "", ""), form_show("Update"), fs_show(""), info_details("Detailed informations", html_form_input::check, "1", "", ""), display_treated("Display treated files", html_form_input::check, "1", "", ""), display_treated_only_dir("Display only treated directories", html_form_input::check, "", "", ""), display_skipped("Display skipped files", html_form_input::check, "1", "", ""), empty_dir("Restore even empty directories", html_form_input::check, "1", "", ""), dirty_behavior("Dirty file behavior"), ignore_sockets("Do not restore Unix sockets", html_form_input::check, "", "", ""), only_deleted("Restore only deleted files", html_form_input::check, "", "", ""), ignore_deleted("Avoid removing files flagged as to be removed", html_form_input::check, "", "", ""), ignore_events(false) { // set html fields to default value used by libdar filename_mask.reset(new (nothrow) html_mask_form_filename("file name")); if(!filename_mask) throw exception_memory(); ea_mask.reset(new (nothrow) html_mask_form_filename("extended attribute")); if(!ea_mask) throw exception_memory(); path_mask.reset(new (nothrow) html_mask_form_path(true)); if(!path_mask) throw exception_memory(); overwriting_policy.reset(new (nothrow) html_form_overwrite_action("")); if(! overwriting_policy) throw exception_memory(); what_to_check.add_choice("all", "All"); what_to_check.add_choice("ignore_owner", "All but ownership"); what_to_check.add_choice("mtime", "All but ownership and permission"); what_to_check.add_choice("inode_type", "Nothing inode related, just data"); dirty_behavior.add_choice("ignore", "Exclude dirty files"); dirty_behavior.add_choice("warn", "Warn before restoring"); dirty_behavior.add_choice("ok", "Restored as normal files"); // default values // these are set from set_biblio // build the adoption tree static const char* sect_opt = "options"; static const char* sect_show = "archive show opt"; static const char* sect_mask_file = "mask_file"; static const char* sect_mask_path = "mask_path"; static const char* sect_ea_mask = "EA masks"; static const char* sect_fsa_scope = "FSA Scope"; static const char* sect_overwriting = "overwriting"; deroule.add_section(sect_opt, "How to process the operation"); deroule.add_section(sect_show, "What to show during the operation"); deroule.add_section(sect_mask_file, "File name based filtering"); deroule.add_section(sect_mask_path, "Path based filtering"); deroule.add_section(sect_ea_mask, "Extended Attributes filtering"); deroule.add_section(sect_fsa_scope, "File system Specific Attributes filtering"); deroule.add_section(sect_overwriting, "Overwriting policy"); fs.adopt(&in_place); fs.adopt(&warn_over); fs.adopt(&warn_remove_no_match); fs.adopt(&flat); fs.adopt(&what_to_check); fs.adopt(&empty_dir); fs.adopt(&dirty_behavior); fs.adopt(&only_deleted); fs.adopt(&ignore_deleted); fs.adopt(&ignore_sockets); fs.adopt(&empty); form_archgen.adopt(&fs); deroule.adopt_in_section(sect_opt, &form_archgen); fs_show.adopt(&info_details); fs_show.adopt(&display_treated); fs_show.adopt(&display_treated_only_dir); fs_show.adopt(&display_skipped); form_show.adopt(&fs_show); deroule.adopt_in_section(sect_show, &form_show); deroule.adopt_in_section(sect_mask_file, &guichet_filename_mask); deroule.adopt_in_section(sect_mask_path, &guichet_path_mask); deroule.adopt_in_section(sect_ea_mask, &guichet_ea_mask); deroule.adopt_in_section(sect_fsa_scope, &fsa_scope); deroule.adopt_in_section(sect_overwriting, &guichet_overwriting_policy); adopt(&deroule); // events display_treated.record_actor_on_event(this, html_form_input::changed); in_place.record_actor_on_event(this, html_form_input::changed); warn_over.record_actor_on_event(this, html_form_input::changed); flat.record_actor_on_event(this, html_form_input::changed); what_to_check.record_actor_on_event(this, html_form_select::changed); warn_remove_no_match.record_actor_on_event(this, html_form_input::changed); empty.record_actor_on_event(this, html_form_input::changed); empty_dir.record_actor_on_event(this, html_form_input::changed); dirty_behavior.record_actor_on_event(this, html_form_select::changed); ignore_sockets.record_actor_on_event(this, html_form_input::changed); info_details.record_actor_on_event(this, html_form_input::changed); display_treated.record_actor_on_event(this, html_form_input::changed); display_treated_only_dir.record_actor_on_event(this, html_form_input::changed); display_skipped.record_actor_on_event(this, html_form_input::changed); overwriting_policy->record_actor_on_event(this, html_form_overwrite_action::changed); only_deleted.record_actor_on_event(this, html_form_input::changed); ignore_deleted.record_actor_on_event(this, html_form_input::changed); filename_mask->record_actor_on_event(this, html_mask_form_filename::changed); path_mask->record_actor_on_event(this, html_mask_form_path::changed); ea_mask->record_actor_on_event(this, html_mask_form_filename::changed); fsa_scope.record_actor_on_event(this, html_fsa_scope::changed); register_name(changed); // css webdar_css_style::grey_button(deroule, true); display_treated_only_dir.add_css_class(webdar_css_style::indent); // components visibility status on_event(html_form_input::changed); // tooltips in_place.set_tooltip(TOOLTIP_HOE_IN_PLACE); warn_over.set_tooltip(TOOLTIP_HOE_WARN_OVER); warn_remove_no_match.set_tooltip(TOOLTIP_HOE_WARN_NO_MATCH); flat.set_tooltip(TOOLTIP_HOE_FLAT); what_to_check.set_tooltip(TOOLTIP_HOE_WTC); empty_dir.set_tooltip(TOOLTIP_HOE_EMPTY_DIR); dirty_behavior.set_tooltip(TOOLTIP_HOE_DIRTY); only_deleted.set_tooltip(TOOLTIP_HOE_ONLY_DELETED); ignore_deleted.set_tooltip(TOOLTIP_HOE_IGNORE_DELETED); ignore_sockets.set_tooltip(TOOLTIP_HOE_IGNORE_SOCKETS); empty.set_tooltip(TOOLTIP_HOE_EMPTY); info_details.set_tooltip(TOOLTIP_HOE_INFO_DETAILS); display_treated.set_tooltip(TOOLTIP_HOE_DISPLAY_TREATED); display_treated_only_dir.set_tooltip(TOOLTIP_HOE_DISPLAY_ONLY_DIR); display_skipped.set_tooltip(TOOLTIP_HOE_DISPLAY_SKIPPED); } void html_options_extract::set_biblio(const shared_ptr & ptr) { filename_mask->set_child(ptr, bibliotheque::filefilter); guichet_filename_mask.set_child(ptr, bibliotheque::filefilter, filename_mask, false); ea_mask->set_child(ptr, bibliotheque::filefilter); path_mask->set_child(ptr, bibliotheque::pathfilter); guichet_ea_mask.set_child(ptr, bibliotheque::filefilter, ea_mask, false); guichet_path_mask.set_child(ptr, bibliotheque::pathfilter, path_mask, false); guichet_overwriting_policy.set_child(ptr, bibliotheque::over_policy, overwriting_policy, true); init(); } libdar::archive_options_extract html_options_extract::get_options() const { libdar::archive_options_extract ret; ret.set_in_place(in_place.get_value_as_bool()); ret.set_warn_over(warn_over.get_value_as_bool()); ret.set_flat(flat.get_value_as_bool()); if(what_to_check.get_selected_id() == "all") ret.set_what_to_check(libdar::comparison_fields::all); else if(what_to_check.get_selected_id() == "ignore_owner") ret.set_what_to_check(libdar::comparison_fields::ignore_owner); else if(what_to_check.get_selected_id() == "mtime") ret.set_what_to_check(libdar::comparison_fields::mtime); else if(what_to_check.get_selected_id() == "inode_type") ret.set_what_to_check(libdar::comparison_fields::inode_type); else throw WEBDAR_BUG; ret.set_warn_remove_no_match(warn_remove_no_match.get_value_as_bool()); ret.set_empty(empty.get_value_as_bool()); ret.set_info_details(info_details.get_value_as_bool()); ret.set_display_treated(display_treated.get_value_as_bool(), display_treated_only_dir.get_value_as_bool()); ret.set_display_skipped(display_skipped.get_value_as_bool()); if(dirty_behavior.get_selected_id() == "ignore") ret.set_dirty_behavior(libdar::archive_options_extract::dirty_ignore); else if(dirty_behavior.get_selected_id() == "warn") ret.set_dirty_behavior(libdar::archive_options_extract::dirty_warn); else if(dirty_behavior.get_selected_id() == "ok") ret.set_dirty_behavior(libdar::archive_options_extract::dirty_ok); else throw WEBDAR_BUG; ret.set_only_deleted(only_deleted.get_value_as_bool()); ret.set_ignore_deleted(ignore_deleted.get_value_as_bool()); ret.set_ignore_unix_sockets(ignore_sockets.get_value_as_bool()); ret.set_selection(*(filename_mask->get_mask())); ret.set_subtree(*(path_mask->get_mask())); ret.set_ea_mask(*(ea_mask->get_mask())); ret.set_fsa_scope(fsa_scope.get_scope()); ret.set_overwriting_rules(*(overwriting_policy->get_overwriting_action())); return ret; } void html_options_extract::load_json(const json & source) { try { unsigned int version; string class_id; json config = unwrap_config_from_json_header(source, version, class_id); if(class_id != myclass_id) throw exception_range(libdar::tools_printf("Unexpected class_id in json data, found %s while expecting %s", class_id.c_str(), myclass_id)); if(version > format_version) throw exception_range(libdar::tools_printf("Json format version too hight for %s, upgrade your webdar software", myclass_id)); ignore_events = true; try { in_place.set_value_as_bool(config.at(jlabel_in_place)); warn_over.set_value_as_bool(config.at(jlabel_warn_over)); flat.set_value_as_bool(config.at(jlabel_flat)); what_to_check.set_selected_id(config.at(jlabel_what_to_check)); warn_remove_no_match.set_value_as_bool(config.at(jlabel_warn_remove_no_match)); empty.set_value_as_bool(config.at(jlabel_empty)); empty_dir.set_value_as_bool(config.at(jlabel_empty_dir)); dirty_behavior.set_selected_id(config.at(jlabel_dirty_behavior)); ignore_sockets.set_value_as_bool(config.at(jlabel_ignore_sockets)); info_details.set_value_as_bool(config.at(jlabel_info_details)); display_treated.set_value_as_bool(config.at(jlabel_display_treated)); display_treated_only_dir.set_value_as_bool(config.at(jlabel_display_only_dir)); display_skipped.set_value_as_bool(config.at(jlabel_display_skipped)); guichet_overwriting_policy.load_json(config.at(jlabel_overwriting_policy)); only_deleted.set_value_as_bool(config.at(jlabel_only_deleted)); ignore_deleted.set_value_as_bool(config.at(jlabel_ignore_deleted)); guichet_filename_mask.load_json(config.at(jlabel_filename_mask)); guichet_path_mask.load_json(config.at(jlabel_path_mask)); guichet_ea_mask.load_json(config.at(jlabel_ea_mask)); fsa_scope.load_json(config.at(jlabel_fsa_scope)); } catch(...) { ignore_events = false; throw; } ignore_events = false; trigger_changed(); } catch(json::exception & e) { throw exception_json(libdar::tools_printf("Error loading %s config", myclass_id), e); } } json html_options_extract::save_json() const { json config; config[jlabel_in_place] = in_place.get_value_as_bool(); config[jlabel_warn_over] = warn_over.get_value_as_bool(); config[jlabel_flat] = flat.get_value_as_bool(); config[jlabel_what_to_check] = what_to_check.get_selected_id(); config[jlabel_warn_remove_no_match] = warn_remove_no_match.get_value_as_bool(); config[jlabel_empty] = empty.get_value_as_bool(); config[jlabel_empty_dir] = empty_dir.get_value_as_bool(); config[jlabel_dirty_behavior] = dirty_behavior.get_selected_id(); config[jlabel_ignore_sockets] = ignore_sockets.get_value_as_bool(); config[jlabel_info_details] = info_details.get_value_as_bool(); config[jlabel_display_treated] = display_treated.get_value_as_bool(); config[jlabel_display_only_dir] = display_treated_only_dir.get_value_as_bool(); config[jlabel_display_skipped] = display_skipped.get_value_as_bool(); config[jlabel_overwriting_policy] = guichet_overwriting_policy.save_json(); config[jlabel_only_deleted] = only_deleted.get_value_as_bool(); config[jlabel_ignore_deleted] = ignore_deleted.get_value_as_bool(); config[jlabel_filename_mask] = guichet_filename_mask.save_json(); config[jlabel_path_mask] = guichet_path_mask.save_json(); config[jlabel_ea_mask] = guichet_ea_mask.save_json(); config[jlabel_fsa_scope] = fsa_scope.save_json(); return wrap_config_with_json_header(format_version, myclass_id, config); } void html_options_extract::clear_json() { ignore_events = true; try { init(); } catch(...) { ignore_events = false; throw; } ignore_events = false; trigger_changed(); } bibliotheque::using_set html_options_extract::get_using_set() const { bibliotheque::using_set ret; subconfig_add_to(ret, guichet_filename_mask.get_using_set()); subconfig_add_to(ret, guichet_path_mask.get_using_set()); subconfig_add_to(ret, guichet_ea_mask.get_using_set()); subconfig_add_to(ret, guichet_overwriting_policy.get_using_set()); return ret; } void html_options_extract::on_event(const string & event_name) { if(event_name == html_form_input::changed) { display_treated_only_dir.set_visible(display_treated.get_value_as_bool()); trigger_changed(); } else if(event_name == html_form_select::changed || event_name == html_form_overwrite_action::changed || event_name == html_mask_form_filename::changed || event_name == html_mask_form_path::changed || event_name == html_fsa_scope::changed) { trigger_changed(); } else throw WEBDAR_BUG; } void html_options_extract::set_to_webdar_defaults() { clear_json(); in_place.set_value_as_bool(false); warn_over.set_value_as_bool(true); empty_dir.set_value_as_bool(true); dirty_behavior.set_selected_id("warn"); ignore_sockets.set_value_as_bool(true); info_details.set_value_as_bool(true); display_treated.set_value_as_bool(true); display_treated_only_dir.set_value_as_bool(false); display_skipped.set_value_as_bool(true); guichet_overwriting_policy.load_from_bibliotheque(bibliotheque::default_config_name); } string html_options_extract::inherited_get_body_part(const chemin & path, const request & req) { return get_body_part_from_all_children(path, req); } void html_options_extract::new_css_library_available() { unique_ptr & csslib = lookup_css_library(); if(!csslib) throw WEBDAR_BUG; webdar_css_style::update_library(*csslib); } void html_options_extract::init() { libdar::archive_options_extract defaults; in_place.set_value_as_bool(defaults.get_in_place()); warn_over.set_value_as_bool(defaults.get_warn_over()); flat.set_value_as_bool(defaults.get_flat()); switch(defaults.get_what_to_check()) { case libdar::comparison_fields::all: what_to_check.set_selected_id("all"); break; case libdar::comparison_fields::ignore_owner: what_to_check.set_selected_id("ignore_owner"); break; case libdar::comparison_fields::mtime: what_to_check.set_selected_id("mtime"); break; case libdar::comparison_fields::inode_type: what_to_check.set_selected_id("inode_type"); break; default: throw WEBDAR_BUG; } warn_remove_no_match.set_value_as_bool(defaults.get_warn_remove_no_match()); empty.set_value_as_bool(defaults.get_empty()); empty_dir.set_value_as_bool(defaults.get_empty_dir()); switch(defaults.get_dirty_behavior()) { case libdar::archive_options_extract::dirty_ignore: dirty_behavior.set_selected_num(0); break; case libdar::archive_options_extract::dirty_warn: dirty_behavior.set_selected_num(1); break; case libdar::archive_options_extract::dirty_ok: dirty_behavior.set_selected_num(2); break; default: throw WEBDAR_BUG; } ignore_sockets.set_value_as_bool(defaults.get_ignore_unix_sockets()); info_details.set_value_as_bool(defaults.get_info_details()); display_treated.set_value_as_bool(defaults.get_display_treated()); display_treated_only_dir.set_value_as_bool(defaults.get_display_treated_only_dir()); display_skipped.set_value_as_bool(defaults.get_display_skipped()); guichet_overwriting_policy.clear_json(); only_deleted.set_value_as_bool(defaults.get_only_deleted()); ignore_deleted.set_value_as_bool(defaults.get_ignore_deleted()); guichet_filename_mask.clear_json(); guichet_path_mask.clear_json(); guichet_ea_mask.clear_json(); fsa_scope.clear_json(); } void html_options_extract::trigger_changed() { if(! ignore_events) act(changed); } webdar-1.0.0/src/html_options_read.hpp0000644000175000017520000002370214773727226014736 00000000000000/*********************************************************************/ // webdar - a web server and interface program to libdar // Copyright (C) 2013-2025 Denis Corbin // // This file is part of Webdar // // Webdar is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // Webdar is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Webdar. If not, see // //---- // to contact the author: dar.linux@free.fr /*********************************************************************/ #ifndef HTML_OPTIONS_READ_HPP #define HTML_OPTIONS_READ_HPP // C system header files #include "my_config.h" extern "C" { } // C++ system header files #include #include #include // webdar headers #include "body_builder.hpp" #include "html_div.hpp" #include "html_form.hpp" #include "html_form_fieldset.hpp" #include "html_form_select.hpp" #include "html_form_input.hpp" #include "html_form_input_file.hpp" #include "html_form_input_unit.hpp" #include "html_crypto_algo.hpp" #include "events.hpp" #include "html_derouleur.hpp" #include "html_text.hpp" #include "html_entrepot_landing.hpp" #include "html_libdar_running_popup.hpp" #include "bibliotheque.hpp" #include "guichet.hpp" #include "jsoner.hpp" #include "bibliotheque_subconfig.hpp" /// class html_options_read implementes the html components to setup optional parameters while reading an archive /// most of the components are simple ones, except two couples that depends on each others: /// - the archive selection path that depends on the entrepot user-defined parameters /// - the ref_archive selection path that depends on the ref_entrepot user-defined parameters /// in both cases, the creation of the new entrepot requires html_web_user_interaction component and separated thread /// to continue displaying the status and let the user interrupt the thread: /// - For the first entrepot, this is left to the parent component to call get_entrepot() when we generate the /// entrepot_has_changed event, providing the needed html_web_user_interaction component in argument, because the /// archive selection path that depends of this entrepot is not an read option but a parameter and stored outside /// html_options_read. /// - For external catalogue things are different as ref_archive is part of html_options_read (field ref_path) and /// need to be updated as soon as the ref_entrepot changes and this is internal to this component. For that we /// use our own html_web_user_interaction from the html_running_libdar_popup (ref_webui) that shows during /// entrepot creation. /// The ref_entrepot related event is probably useless as there is not external components to read options that /// depends on it. But the entrepot_has_changed event is needed by the html_archive_read /// of which we are a component, in order to browse the new entrepot when selecting the archive basename to read. /// get_options() get_entrepot() and get_ref_entrepot() may also need an html_user_interaction the one used /// is the one provided as argument of those methods, not the one given to set_webui() which is only used /// when representing the html components during the configuration phase of webdar. class html_options_read : public body_builder, public actor, public events, public libthreadar::thread_signal, public jsoner, public bibliotheque_subconfig { public: static const std::string landing_path_changed; ///< landing path has changed static const std::string entrepot_has_changed; ///< entrepot parameter changed static const std::string changed; ///< any parameter changed (including entrepot change) html_options_read(); html_options_read(const html_options_read & ref) = delete; html_options_read(html_options_read && ref) noexcept = delete; html_options_read & operator = (const html_options_read & ref) = delete; html_options_read & operator = (html_options_read && ref) noexcept = delete; ~html_options_read() { cancel(); join(); }; /// mandatory call to invoke ASAP after constructor void set_biblio(const std::shared_ptr & ptr); /// obtain the libdar archive_option_read object from the html filled fields libdar::archive_options_read get_options(std::shared_ptr & webui) const; /// obtain just the entrepot object from the option fields std::shared_ptr get_entrepot(std::shared_ptr webui) const { return entrep->get_entrepot(webui); }; /// obtain the entrepot landing path const std::string & get_landing_path() const { return entrep->get_landing_path(); }; /// set min-digits field for the archive to read (not the archive of reference if any) void set_src_min_digits(const std::string & val); /// inherited from jsoner virtual void load_json(const json & source) override; /// inherited from jsoner virtual json save_json() const override; /// inherited from jsoner virtual void clear_json() override; /// inherited from bibliotheque_subconfig virtual bibliotheque::using_set get_using_set() const override; /// inherited from actor virtual void on_event(const std::string & event_name) override; /// set the object to webdar defaults void set_to_webdar_defaults(); protected: // inherited from body_builder virtual std::string inherited_get_body_part(const chemin & path, const request & req) override; // inheroted from body_builder virtual void new_css_library_available() override; // inherited from class libthreadar::thread virtual void inherited_run() override; /// inherited from libthreadar::thread virtual void signaled_inherited_cancel() override; private: static const std::string ref_entrepot_has_changed; static const std::string ref_entrepot_landing_path_changed; static constexpr const char* sect_entrep = "entrep"; static constexpr const char* sect_opt = "options"; static constexpr const char* sect_ref_entrep = "ref_entrep"; static constexpr const char* sect_extcat = "externalcat"; /// to gather many subcomponent changes into a single change event from us bool ignore_events; /// delay entrepot update when waiting inherited_get_body_part() to be executed /// \note not doing so may lead to run() this object which involves an html_web_user_interaction /// while the object is not visible and this this interaction component not operational bool need_ref_entrepot_update; bool updating_entrepot; bool update_from_load_json; ///< used to prevent event change when change comes from load_json() html_derouleur deroule; html_form form_src; html_form_fieldset fs_src; html_form_fieldset fs_ref; // archive entrepot fields guichet guichet_entrep; std::shared_ptr entrep; // archive_options_read fields html_crypto_algo src_crypto_algo; html_form_input src_crypto_pass; html_form_input_unit src_crypto_size; html_form_input src_ignore_sig_failure; html_form_input src_execute; html_form_input src_slice_min_digits; html_form_input info_details; html_form_input lax; html_form_input sequential_read; html_form_input force_first_slice; html_form_input multi_thread_crypto; html_form_input multi_thread_compress; // external catalogue entrepot guichet guichet_ref_entrep; std::shared_ptr ref_entrep; html_form_input ref_use_external_catalogue; html_form form_ref; html_form_input_file ref_path; html_crypto_algo ref_crypto_algo; html_form_input ref_crypto_pass; html_form_input_unit ref_crypto_size; html_form_input ref_execute; html_form_input ref_slice_min_digits; // used to create ref_entrep during html interaction html_libdar_running_popup ref_webui; void update_ref_entrepot(); void set_defaults(); void set_defaults_for_ref(); void trigger_changed(); static constexpr const unsigned int format_version = 1; static constexpr const char* myclass_id = "html_options_read"; static constexpr const char* jlabel_entrep = "entrepot"; static constexpr const char* jlabel_crypto_algo = "cryto-algo"; static constexpr const char* jlabel_crypto_pass = "crypto-pass"; static constexpr const char* jlabel_crypto_size = "crytpo-size"; static constexpr const char* jlabel_ignore_sig_failure = "ignore-sig-failure"; static constexpr const char* jlabel_execute = "execute"; static constexpr const char* jlabel_slice_min_digits = "min-digits"; static constexpr const char* jlabel_info_details = "info-details"; static constexpr const char* jlabel_lax = "lax-mode"; static constexpr const char* jlabel_seq_read = "sequential-read"; static constexpr const char* jlabel_force_first_slice = "first-slice-reading"; static constexpr const char* jlabel_thread_crypto = "cipher-threads"; static constexpr const char* jlabel_thread_compress = "compr-threads"; static constexpr const char* jlabel_ref_entrep = "ref-entrepot"; static constexpr const char* jlabel_ref_used = "ref-used"; static constexpr const char* jlabel_ref_path = "ref-path"; static constexpr const char* jlabel_ref_crypto_algo = "ref-crypto-algo"; static constexpr const char* jlabel_ref_crypto_pass = "ref-crypt-pass"; static constexpr const char* jlabel_ref_crypto_size = "ref-crypto-size"; static constexpr const char* jlabel_ref_execute = "ref-execute"; static constexpr const char* jlabel_ref_slice_min_digits = "ref-min-digits"; }; #endif webdar-1.0.0/src/html_form_mask_bool.hpp0000644000175000017520000001677715044133025015233 00000000000000/*********************************************************************/ // webdar - a web server and interface program to libdar // Copyright (C) 2013-2025 Denis Corbin // // This file is part of Webdar // // Webdar is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // Webdar is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Webdar. If not, see // //---- // to contact the author: dar.linux@free.fr /*********************************************************************/ #ifndef HTML_FORM_MASK_BOOL_HPP #define HTML_FORM_MASK_BOOL_HPP // C system header files #include "my_config.h" extern "C" { } // C++ system header files #include #include #include #include #include // webdar headers #include "body_builder.hpp" #include "html_mask.hpp" #include "actor.hpp" #include "jsoner.hpp" #include "bibliotheque_subconfig.hpp" #include "html_form_fieldset.hpp" #include "html_form_select.hpp" #include "html_table.hpp" #include "html_form_input.hpp" #include "html_form.hpp" #include "html_text.hpp" #include "html_form_dynamic_table.hpp" #include "events.hpp" /// class html_form_mask_bool provide mean to combines with OR and AND different html_masks /// this component is used by both html_mask_form_filename and html_mask_form_path classes. /// these classes are object providers for the html_form_dynamic_table owned by mask_form_mask_bool /// class. They provide different types depending on the user selection. /// see their respective implementation of method provide_object_of_type(). /// /// this html components is consitued of: /// /** \verbatim +----html_fieldset----------------------------------+ | | | logical combination: +----------------+ | | |dropdown list | | | +----------------+ | | +-------------------------------+-----+ | | | table of masks | DEL | | | +-------------------------------+-----+ | | | | [ add new mask dropdown list] | | | +---------------------------------------------------+ \endverbatim **/ class html_form_mask_bool : public body_builder, public html_mask, public actor, public jsoner, public bibliotheque_subconfig, public events { public: // events static const std::string changed; // bool modes static constexpr const char* and_op = "and_op"; static constexpr const char* or_op = "or_op"; /// constructor /// \param[in] initial_mode is either and_op or or_op (see constexpr defined below) html_form_mask_bool(const std::string & initial_mode = and_op); html_form_mask_bool(const html_form_mask_bool & ref) = delete; html_form_mask_bool(html_form_mask_bool && ref) noexcept = delete; html_form_mask_bool & operator = (const html_form_mask_bool & ref) = delete; html_form_mask_bool & operator = (html_form_mask_bool && ref) noexcept = delete; ~html_form_mask_bool() = default; /// inherited from html_mask virtual std::unique_ptr get_mask() const override; /// inherited from html_mask virtual bool is_relative() const override; /// inherited from actor virtual void on_event(const std::string & event_name) override; /// the object provider will create the objects (masks) of the requested types defined by add_mask_type() /// works with add_mask_type() below /// \note this is a passthrough access to the html_form_dynamic_table method of the same name void set_obj_type_provider(const html_form_dynamic_table_object_provider* provider) { table.set_obj_type_provider(provider); }; /// programmatically add a new object and return a pointer to it /// \param[in] num_type is the object type number that the object provider has to create /// \return the address of the newnmy created object std::shared_ptr manually_add_object(unsigned int num_type); /// component type that will proposed to the web user /// works with set_obj_type_provider() above /// \note this is a passthrough access to the html_form_dynamic_table method of the same name void add_mask_type(const std::string & label) { table.add_obj_type(label); }; /// clear all mask type added by mean of add_mask_type() method /// \note this method does remove or change the already adopted ojects /// but clears the list of possible available object types. void clear_all_masks_type() { table.clear_obj_type(); }; /// get the current boolean combining mode const std::string & get_bool_mode() const { return current_bool_mode; }; /// manually change the bool mode /// \param[in] mode expectes and_op or or_op constexpr declared at the top of this class definition /// \note the mode is usually changed by the web user, this method is to be used to programmatically /// setup a html_form_mask_bool object void manually_set_bool_mode(const std::string & mode); /// return the and_op or or_op inverted logic of the provided argument /// \note today this operation is trivial, but in the future if an XOR /// bool logic or something else is added this method will provide some /// real value. /// \note this method purpose is to setup a different bool mode when /// cascading several html_form_mask_bool components static std::string invert_logic(const std::string & logic); /// inherited from jsoner virtual void load_json(const json & source) override; /// inherited from jsoner virtual json save_json() const override; /// inherited from jsoner virtual void clear_json() override; /// inherited from bibliotheque_subconfig virtual bibliotheque::using_set get_using_set() const override; protected: /// inherited methods from body_builder virtual std::string inherited_get_body_part(const chemin & path, const request & req) override; /// inherited from body_builder virtual void new_css_library_available() override; private: static constexpr const char* bool_changed_event = "bool_changed"; std::string current_bool_mode; ///< currently displayed logic in table bool ignore_events; ///< to be able to temporarily ignore changed events from childs html_form_fieldset fs; html_form_select mask_type; html_form_dynamic_table table; std::string bool_op_to_name(const std::string & op); /// update labels in the first column in regard to the current AND/OR selected logic /// \param[in] unconditionally if set to false, only update if mode changes, else updates all labels (in particular newly added ones) void update_table_content_logic(bool unconditionally); std::string tell_action() const; void trigger_change(); static constexpr const unsigned int format_version = 1; static constexpr const char* myclass_id = "html_form_mask_bool"; static constexpr const char* jlabel_logic = "logic"; static constexpr const char* jlabel_components = "components"; }; #endif webdar-1.0.0/src/html_form_overwrite_constant_action.hpp0000644000175000017520000001140514775733211020555 00000000000000/*********************************************************************/ // webdar - a web server and interface program to libdar // Copyright (C) 2013-2025 Denis Corbin // // This file is part of Webdar // // Webdar is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // Webdar is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Webdar. If not, see // //---- // to contact the author: dar.linux@free.fr /*********************************************************************/ #ifndef HTML_FORM_OVERWRITE_CONSTANT_ACTION_HPP #define HTML_FORM_OVERWRITE_CONSTANT_ACTION_HPP // C system header files #include "my_config.h" extern "C" { } // C++ system header files // webdar headers #include "html_overwrite_action.hpp" #include "body_builder.hpp" #include "html_form_select.hpp" #include "html_form_fieldset.hpp" #include "jsoner.hpp" #include "events.hpp" #include "actor.hpp" /// html component to be adopted by an html_form that implements constant actions for overwriting policies class html_form_overwrite_constant_action: public html_overwrite_action, public jsoner, public events, public actor { public: // events static const std::string changed; // values for data static constexpr const char* data_preserve = "Preserve"; static constexpr const char* data_overwrite = "Overwrite"; static constexpr const char* data_preserve_saved = "Preserve and mark already saved"; static constexpr const char* data_overwrite_saved = "Overwrite and mark already saved"; static constexpr const char* data_remove = "Remove"; static constexpr const char* data_undefined = "Keep undefined if not already defined"; static constexpr const char* data_ask = "Ask user what to do for each file in conflict"; // values for EA static constexpr const char* ea_preserve = "Preserve"; static constexpr const char* ea_overwrite = "Overwrite"; static constexpr const char* ea_clear = "Clear all EA and FSA"; static constexpr const char* ea_preserve_saved = "Preserve and mark already saved"; static constexpr const char* ea_overwrite_saved = "Overwrite and mark already saved"; static constexpr const char* ea_merge_preserve = "Merge EA and preserve"; static constexpr const char* ea_merge_overwrite = "Merge EA and overwrite"; static constexpr const char* ea_undefined = "Keep undefined if not already defined"; static constexpr const char* ea_ask = "Ask user what to do for each file in conflict"; html_form_overwrite_constant_action(); html_form_overwrite_constant_action(const html_form_overwrite_constant_action & ref) = delete; html_form_overwrite_constant_action(html_form_overwrite_constant_action && ref) noexcept = delete; html_form_overwrite_constant_action & operator = (const html_form_overwrite_constant_action & ref) = delete; html_form_overwrite_constant_action & operator = (html_form_overwrite_constant_action && ref) noexcept = delete; ~html_form_overwrite_constant_action() = default; /// programmatically setup the action for data /// \note this call is to programmatically setup a component, normal way to setup is from Web user interaction void set_data_action(const std::string & val) { data_action.set_selected_id(val); }; /// programmatically setup the action for EA /// \note this call is to programmatically setup a component, normal way to setup is from Web user interaction void set_ea_action(const std::string & val) { ea_action.set_selected_id(val); }; /// obtain the crit_constant_action object for libdar option virtual std::unique_ptr get_overwriting_action() const override; /// inherited from jsoner virtual void load_json(const json & source) override; /// inherited from jsoner virtual json save_json() const override; /// inherited from jsoner virtual void clear_json() override; /// inherited from actor virtual void on_event(const std::string & event_name) override; private: html_form_fieldset action_fs; html_form_select data_action; html_form_select ea_action; static constexpr const unsigned int format_version = 1; static constexpr const char* myclass_id = "html_form_overwrite_constant_action"; static constexpr const char* jlabel_data = "data"; static constexpr const char* jlabel_ea = "ea"; }; #endif webdar-1.0.0/src/html_menu.cpp0000644000175000017520000001262215001752204013161 00000000000000/*********************************************************************/ // webdar - a web server and interface program to libdar // Copyright (C) 2013-2025 Denis Corbin // // This file is part of Webdar // // Webdar is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // Webdar is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Webdar. If not, see // //---- // to contact the author: dar.linux@free.fr /*********************************************************************/ // C system header files #include "my_config.h" extern "C" { } // C++ system header files // webdar headers #include "html_text.hpp" #include "tokens.hpp" #include "exceptions.hpp" #include "webdar_css_style.hpp" #include "webdar_tools.hpp" // #include "html_menu.hpp" using namespace std; const string html_menu::changed = "html_menu_changed"; html_menu::html_menu() { current_mode = 0; previous_mode = 0; register_name(changed); // add the "html_menu_changed" event to this object } html_menu::~html_menu() { item.clear(); } void html_menu::add_entry(const string & label, const string & tag) { unsigned int num = item.size(); string event_name = webdar_tools_convert_to_string(num); item.push_back(cell(label, event_name, tag)); if(item.size() != num + 1) throw WEBDAR_BUG; item.back().ibtn->record_actor_on_event(this, event_name); if(label != "") webdar_css_style::normal_button(*(item.back().ibtn)); else { webdar_css_style::void_button(*(item.back().ibtn)); item.back().ibtn->set_enabled(false); } item.back().ibtn->add_css_class(webdar_css_style::spacing_vertical); /// building the body_builder tree adopt(item.back().ibtn); if(item.size() == 1) set_current_mode(0, true); } void html_menu::set_current_mode(unsigned int mode, bool force) { unsigned int size = item.size(); bool has_changed = (mode != current_mode) || force; if(mode >= size) throw WEBDAR_BUG; if(current_mode >= size) throw WEBDAR_BUG; if(item[current_mode].ibtn == nullptr) throw WEBDAR_BUG; if(item[mode].ibtn == nullptr) throw WEBDAR_BUG; /// all is fine, we can go on modifying the objects if(has_changed) { if(item[current_mode].ibtn->get_label() == "") webdar_css_style::void_button(*(item[current_mode].ibtn)); else webdar_css_style::normal_button(*(item[current_mode].ibtn)); item[current_mode].ibtn->add_css_class(webdar_css_style::spacing_vertical); webdar_css_style::active_button(*(item[mode].ibtn)); item[mode].ibtn->add_css_class(webdar_css_style::spacing_vertical); previous_mode = current_mode; current_mode = mode; act(changed); // trigger the "changed" event my_body_part_has_changed(); } } string html_menu::get_current_tag() const { if(current_mode >= item.size()) throw WEBDAR_BUG; return item[current_mode].itag; } void html_menu::set_current_tag(const string & tag) { unsigned int i = 0; while(i < item.size() && item[i].itag != tag) ++i; if(i < item.size()) set_current_mode(i); else throw WEBDAR_BUG; // unknown tag in this html_menu } string html_menu::get_previous_tag() const { if(previous_mode >= item.size()) throw WEBDAR_BUG; return item[previous_mode].itag; } string html_menu::get_current_label() const { if(current_mode >= item.size()) throw WEBDAR_BUG; if(item[current_mode].ibtn == nullptr) throw WEBDAR_BUG; return item[current_mode].ibtn->get_label(); } void html_menu::on_event(const string & event_name) { // we have registered on the event generated by each html_button // the event_name is the string of the decimal index of the button int num; try { num = webdar_tools_convert_to_int(event_name); } catch(exception_range & e) { throw WEBDAR_BUG; // received an event we don't expect } set_current_mode(num); // set_current_mode() will eventually trigger my_body_part_has_changed(); } string html_menu::inherited_get_body_part(const chemin & path, const request & req) { // reading the requested path to determin // whether a change of mode is required // before starting providing an response // from any component or subcomponent chemin target = req.get_uri().get_path(); if(target.size() > 2) { target.pop_back(); target.pop_back(); if(target == get_path()) { // the requested link is us unsigned int i = 0; unsigned int size = item.size(); string target_s = req.get_uri().get_path().display(); // looking which button index it is: while(i < size && item[i].ibtn != nullptr && item[i].ibtn->get_url() != target_s) ++i; if(i < size) set_current_mode(i); } } return html_div::inherited_get_body_part(path, req); } void html_menu::new_css_library_available() { // recording those classes and selectors to the css_library unique_ptr & csslib = lookup_css_library(); if(!csslib) throw WEBDAR_BUG; webdar_css_style::update_library(*csslib); } webdar-1.0.0/src/html_form_input_file.cpp0000644000175000017520000002021314773727226015416 00000000000000/*********************************************************************/ // webdar - a web server and interface program to libdar // Copyright (C) 2013-2025 Denis Corbin // // This file is part of Webdar // // Webdar is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // Webdar is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Webdar. If not, see // //---- // to contact the author: dar.linux@free.fr /*********************************************************************/ // C system header files #include "my_config.h" extern "C" { } // C++ system header files // webdar headers #include "webdar_css_style.hpp" #include "webdar_tools.hpp" // #include "html_form_input_file.hpp" using namespace std; // event names const string html_form_input_file::changed_event = "html_form_input_file_changed"; const string html_form_input_file::changed_entrepot = "html_form_entrepot_changed"; const string html_form_input_file::repo_update_needed = "hfif_need_repo_update"; const string html_form_input_file::repo_updated = "hfif_repo_has_been_updated"; const string html_form_input_file::triggered_event = "triggered"; // class names const string html_form_input_file::css_input = "html_form_input_file_input"; const string html_form_input_file::css_button_box = "html_form_input_file_button_box"; html_form_input_file::html_form_input_file(const string & label, const string & initial_value, const string & size, const string & css_class, const string & popup_message): input(label, html_form_input::text, initial_value, size, webdar_css_style::width_100vw), trigger("+", triggered_event), user_select(popup_message), empty_text(), // must not add text now, need first to set the css_class changed_event_name(changed_event), entrep(nullptr), refresh_get_body(false), selmode(select_file), internal_change(false), repo_updater(nullptr) { // components setup entrep.reset(new (nothrow) libdar::entrepot_local("", "", false)); if(!entrep) throw exception_memory(); empty_text.add_text(0,""); // html adoption tree input_div.adopt(&input); adopt(&input_div); adopt(&trigger); adopt(&user_select); adopt(&empty_text); // cabling events register_name(changed_event_name); register_name(changed_entrepot); register_name(repo_update_needed); // we do not register repo_updated because this is the object given to set_entrepot_updater() that trigger those events input.record_actor_on_event(this, html_form_input::changed); trigger.record_actor_on_event(this, triggered_event); user_select.record_actor_on_event(this, html_select_file::entry_selected); // css add_css_class(css_class); // for the whole component input_div.add_css_class(css_input); webdar_css_style::small_button(trigger); trigger.add_css_class(css_button_box); input.set_no_CR(); empty_text.add_css_class(webdar_css_style::float_flush); } void html_form_input_file::set_change_event_name(const string & name) { rename_name(changed_event_name, name); changed_event_name = name; } void html_form_input_file::set_select_mode(select_mode val) { switch(val) { case select_dir: user_select.set_select_mode(html_select_file::sel_dir); break; case select_file: user_select.set_select_mode(html_select_file::sel_file); user_select.set_filter(""); break; case select_slice: user_select.set_select_mode(html_select_file::sel_file); user_select.set_filter("*.dar"); break; case select_symlink: user_select.set_select_mode(html_select_file::sel_symlinks); user_select.set_filter(""); break; default: throw WEBDAR_BUG; } min_digits.clear(); selmode = val; }; void html_form_input_file::set_entrepot(shared_ptr entrepot) { if(!entrepot) throw WEBDAR_BUG; entrep = entrepot; act(changed_entrepot); } void html_form_input_file::set_entrepot_updater(events* updater) { repo_updater = updater; if(repo_updater != nullptr) repo_updater->record_actor_on_event(this, repo_updated); }; string html_form_input_file::get_min_digits() const { if(selmode != select_slice) throw WEBDAR_BUG; return min_digits; } void html_form_input_file::on_event(const string & event_name) { if(event_name == html_form_input::changed) { if(selmode == select_slice && !internal_change) { min_digits.clear(); // this is to avoid having min-digits // changed in the parent object to something // that would not be related to the new // value the user has set manually in the // html form. The user might have well also // manually set the min-digit field just before } act(changed_event_name); } else if(event_name == triggered_event) { if(repo_updater == nullptr) user_select.go_select(entrep, input.get_value()); else act(repo_update_needed); } else if(event_name == html_select_file::entry_selected) { switch(selmode) { case select_dir: case select_file: case select_symlink: input.set_value(user_select.get_selected_path()); break; case select_slice: internal_change = true; // avoid html_form_input::change to reset min_digits try { input.set_value(slicename_to_basename_update_min_digits(user_select.get_selected_path())); } catch(...) { internal_change = false; throw; } internal_change = false; break; default: throw WEBDAR_BUG; } refresh_get_body = true; my_body_part_has_changed(); // needed also to remove the selection popup act(changed_event_name); } else if(event_name == repo_updated) user_select.go_select(entrep, input.get_value()); else throw WEBDAR_BUG; } void html_form_input_file::new_css_library_available() { unique_ptr & csslib = lookup_css_library(); if(!csslib) throw WEBDAR_BUG; webdar_css_style::update_library(*csslib); if(!csslib->class_exists(css_input)) { css tmp; // css_button_box definition (for trigger button) tmp.clear(); tmp.css_float(css::fl_left); csslib->add(css_button_box, tmp); // css for input_div tmp.clear(); tmp.css_width("calc(100% - 3em)",false); // 2em for the trigger button plus more for the spacing around tmp.css_float(css::fl_left); csslib->add(css_input, tmp); } } string html_form_input_file::inherited_get_body_part(const chemin & path, const request & req) { string ret; refresh_get_body = false; ret = html_div::inherited_get_body_part(path, req); if(refresh_get_body) { request tmp = req; tmp.post_to_get(); ret = html_div::inherited_get_body_part(path, tmp); } return ret; } string html_form_input_file::slicename_to_basename_update_min_digits(const string & val) { static const char sep = '.'; vector splitted; min_digits.clear(); webdar_tools_split_by(sep, val, splitted); if(splitted.size() < 3) return val; // given arg is not a slicename if(splitted[splitted.size() - 1] != "dar") return val; // not a dar slice string & tmp = splitted[splitted.size() - 2]; if(tmp.empty()) return val; // not a dar slice string::iterator it = tmp.begin(); while(it != tmp.end() && *it >= '0' && *it <= '9') ++it; if(it != tmp.end()) // not a slice number found before the dar extension return val; if(tmp.begin() != tmp.end() && *(tmp.begin()) == '0') min_digits = webdar_tools_convert_to_string(tmp.size()); else min_digits = "0"; // we have a well formated slice name string ret = splitted[0]; unsigned int stopat = splitted.size() - 2; const string sep_str(webdar_tools_convert_to_string(sep)); for(unsigned int i = 1; i < stopat ; ++i) ret += sep_str + splitted[i]; return ret; } webdar-1.0.0/src/html_summary_page.cpp0000644000175000017520000003433415010661337014720 00000000000000/*********************************************************************/ // webdar - a web server and interface program to libdar // Copyright (C) 2013-2025 Denis Corbin // // This file is part of Webdar // // Webdar is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // Webdar is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Webdar. If not, see // //---- // to contact the author: dar.linux@free.fr /*********************************************************************/ // C system header files #include "my_config.h" extern "C" { } // C++ system header files #include // webdar headers #include "webdar_css_style.hpp" #include "tokens.hpp" // #include "html_summary_page.hpp" using namespace std; const string html_summary_page::event_close = "html_summary_page::close"; html_summary_page::html_summary_page(): format_table(2), slice_table(2), overall_table(2), content_table(2), saved_table(2), close("Close", event_close) { // components setup set_session_name(""); format_table.css_border_collapsed(true); slice_table.css_border_collapsed(true); overall_table.css_border_collapsed(true); content_table.css_border_collapsed(true); saved_table.css_border_collapsed(true); // the body_builder tree about.adopt(&about_text); adopt(&about); format_float.adopt(&format_title); format_float.adopt(&format_table); adopt(&format_float); slice_float.adopt(&slice_title); slice_float.adopt(&slice_table); adopt(&slice_float); overall_float.adopt(&overall_title); overall_float.adopt(&overall_table); adopt(&overall_float); content_float.adopt(&content_title); content_float.adopt(&content_table); adopt(&content_float); saved_float.adopt(&saved_title); saved_float.adopt(&saved_table); adopt(&saved_float); adopt(&close); // event binding register_name(event_close); close.record_actor_on_event(this, event_close); // css about.add_css_class(css_about_box); about_text.add_css_class(css_about_text); about_text.add_css_class(webdar_css_style::text_shadow_dark); format_title.add_css_class(webdar_css_style::text_shadow_dark); slice_title.add_css_class(webdar_css_style::text_shadow_dark); overall_title.add_css_class(webdar_css_style::text_shadow_dark); content_title.add_css_class(webdar_css_style::text_shadow_dark); saved_title.add_css_class(webdar_css_style::text_shadow_dark); format_table.set_css_class_cells(css_table_rest); slice_table.set_css_class_cells(css_table_rest); overall_table.set_css_class_cells(css_table_rest); content_table.set_css_class_cells(css_table_rest); saved_table.set_css_class_cells(css_table_rest); format_table.set_css_class_first_row(css_table_top); slice_table.set_css_class_first_row(css_table_top); overall_table.set_css_class_first_row(css_table_top); content_table.set_css_class_first_row(css_table_top); saved_table.set_css_class_first_row(css_table_top); content_table.set_css_class_first_column(css_table_left); format_table.set_css_class_first_column(css_table_left); slice_table.set_css_class_first_column(css_table_left); overall_table.set_css_class_first_column(css_table_left); saved_table.set_css_class_first_column (css_table_left); format_float.add_css_class(webdar_css_style::float_left); slice_float.add_css_class(webdar_css_style::float_left); overall_float.add_css_class(webdar_css_style::float_left); content_float.add_css_class(webdar_css_style::float_left); saved_float.add_css_class(webdar_css_style::float_left); webdar_css_style::normal_button(close, false); close.add_css_class(css_close); } void html_summary_page::on_event(const string & event_name) { if(event_name != event_close) throw WEBDAR_BUG; act(event_close); // propagate the event // not calling my_body_part_has_changed(); // as inherited_get_body_part() will not produce something // different due to this event } void html_summary_page::set_session_name(const string & session_name) { string title = "Webdar - "; if(session_name != "") title += session_name + " - "; title += "Archive Summary"; set_title(title); } void html_summary_page::set_source(const archive_init_list *ref) { if(ref == nullptr) throw WEBDAR_BUG; if(! ref->opened()) throw WEBDAR_BUG; about_text.clear(); about_text.add_text(3, libdar::tools_printf("Properties of %s", ref->get_archive_full_name().c_str())); libdar::archive_summary sum = ref->get_summary(); format_title.clear(); format_title.add_text(2, "Format releated information"); format_table.clear(); format_table.adopt_static_html("Parameter"); format_table.adopt_static_html("Value"); format_table.adopt_static_html("Format version"); format_table.adopt_static_html(sum.get_edition()); format_table.adopt_static_html("Compression Algorithm"); format_table.adopt_static_html(sum.get_compression_algo()); if(sum.get_compression_algo() != libdar::compression2string(libdar::compression::none)) { format_table.adopt_static_html("Compresson block size"); if(sum.get_compression_block_size().is_zero()) format_table.adopt_static_html("stream compression"); else format_table.adopt_static_html(libdar::deci(sum.get_compression_block_size()).human()); } format_table.adopt_static_html("User comment"); format_table.adopt_static_html(sum.get_user_comment()); format_table.adopt_static_html("Symmetrical encryption"); format_table.adopt_static_html(sum.get_cipher()); if(sum.get_cipher() != libdar::crypto_algo_2_string(libdar::crypto_algo::none)) { format_table.adopt_static_html("KDF hash algo"); format_table.adopt_static_html(sum.get_kdf_hash()); format_table.adopt_static_html("KDF iteration count"); format_table.adopt_static_html(libdar::deci(sum.get_iteration_count()).human()); } format_table.adopt_static_html("Asymmetrical encryption"); format_table.adopt_static_html(sum.get_asym()); format_table.adopt_static_html("Signed"); format_table.adopt_static_html(sum.get_signed() ? "yes": "no"); format_table.adopt_static_html("Tape marks"); format_table.adopt_static_html(sum.get_tape_marks() ? "yes": "no"); format_table.adopt_static_html("In place path"); format_table.adopt_static_html(sum.get_in_place()); slice_title.clear(); slice_title.add_text(2, "Slicing information"); slice_table.clear(); slice_table.adopt_static_html("Parameter"); slice_table.adopt_static_html("Value"); slice_table.adopt_static_html("Number of slices"); slice_table.adopt_static_html(libdar::deci(sum.get_slice_number()).human()); if(sum.get_slice_number() > 1 && sum.get_first_slice_size() != sum.get_slice_size()) { slice_table.adopt_static_html("First slice size"); slice_table.adopt_static_html(libdar::deci(sum.get_first_slice_size()).human() + " bytes"); } if(sum.get_slice_number() > 2) { slice_table.adopt_static_html("Slice size"); slice_table.adopt_static_html(libdar::deci(sum.get_slice_size()).human() + " bytes"); } if(sum.get_slice_number() > 1) slice_table.adopt_static_html("Last size"); else slice_table.adopt_static_html("Slice size"); slice_table.adopt_static_html(libdar::deci(sum.get_last_slice_size()).human() + " bytes"); if(sum.get_ref_first_slice_size() != sum.get_first_slice_size() || sum.get_ref_slice_size() != sum.get_slice_size()) { if(sum.get_ref_first_slice_size() != sum.get_ref_slice_size()) { slice_table.adopt_static_html("Ref first slice size"); slice_table.adopt_static_html(libdar::deci(sum.get_ref_first_slice_size()).human() + " bytes"); } slice_table.adopt_static_html("Ref slice size"); slice_table.adopt_static_html(libdar::deci(sum.get_ref_slice_size()).human() + " bytes"); } overall_title.clear(); overall_title.add_text(2, "Global sizes"); overall_table.clear(); overall_table.adopt_static_html("Parameter"); overall_table.adopt_static_html("Value"); overall_table.adopt_static_html("Archive size"); overall_table.adopt_static_html(libdar::deci(sum.get_archive_size()).human() + " bytes"); overall_table.adopt_static_html("Catalog size"); overall_table.adopt_static_html(libdar::deci(sum.get_catalog_size()).human() + " bytes"); overall_table.adopt_static_html("Storage size"); overall_table.adopt_static_html(libdar::deci(sum.get_storage_size()).human() + " bytes"); overall_table.adopt_static_html("Data size"); overall_table.adopt_static_html(libdar::deci(sum.get_data_size()).human() + " bytes"); if(sum.get_data_size() < sum.get_storage_size()) { libdar::infinint delta = sum.get_storage_size() - sum.get_data_size(); overall_table.adopt_static_html("Compression overhead"); overall_table.adopt_static_html(libdar::deci(delta).human() + " bytes"); } else { libdar::infinint delta = sum.get_data_size() - sum.get_storage_size(); if(!sum.get_storage_size().is_zero()) { overall_table.adopt_static_html("Compression ratio"); overall_table.adopt_static_html(libdar::deci((delta*100)/sum.get_data_size()).human() + " %"); } } content_title.clear(); content_title.add_text(2, "Contents distribution"); libdar::entree_stats estat = sum.get_contents(); content_table.clear(); content_table.adopt_static_html("Parameter"); content_table.adopt_static_html("Value"); content_table.adopt_static_html("Number of recorded as deleted"); content_table.adopt_static_html(libdar::deci(estat.num_x).human()); content_table.adopt_static_html("Number of directory"); content_table.adopt_static_html(libdar::deci(estat.num_d).human()); content_table.adopt_static_html("Number of plain files"); content_table.adopt_static_html(libdar::deci(estat.num_f).human()); content_table.adopt_static_html("Number of char devices"); content_table.adopt_static_html(libdar::deci(estat.num_c).human()); content_table.adopt_static_html("Number of block devices"); content_table.adopt_static_html(libdar::deci(estat.num_b).human()); content_table.adopt_static_html("Number of named pipes"); content_table.adopt_static_html(libdar::deci(estat.num_p).human()); content_table.adopt_static_html("Number of Unix sockets"); content_table.adopt_static_html(libdar::deci(estat.num_s).human()); content_table.adopt_static_html("Number of symbolic links"); content_table.adopt_static_html(libdar::deci(estat.num_l).human()); content_table.adopt_static_html("Number of Door files"); content_table.adopt_static_html(libdar::deci(estat.num_D).human()); content_table.adopt_static_html("Number of hard linked inodes"); content_table.adopt_static_html(libdar::deci(estat.num_hard_linked_inodes).human()); content_table.adopt_static_html("Number of hard link entries"); content_table.adopt_static_html(libdar::deci(estat.num_hard_link_entries).human()); saved_title.clear(); saved_title.add_text(2, "Saved status distribution"); saved_table.clear(); saved_table.adopt_static_html("Parameter"); saved_table.adopt_static_html("Value"); saved_table.adopt_static_html("Number of fully saved inodes"); saved_table.adopt_static_html(libdar::deci(estat.saved).human()); saved_table.adopt_static_html("Number of patched inodes"); saved_table.adopt_static_html(libdar::deci(estat.patched).human()); saved_table.adopt_static_html("Number of inodes with only metadata saved"); saved_table.adopt_static_html(libdar::deci(estat.inode_only).human()); saved_table.adopt_static_html("Total number of inodes"); saved_table.adopt_static_html(libdar::deci(estat.total).human()); } void html_summary_page::clear() { format_title.clear(); format_table.clear(); slice_title.clear(); slice_table.clear(); overall_title.clear(); overall_table.clear(); content_title.clear(); content_table.clear(); saved_title.clear(); saved_table.clear(); } void html_summary_page::new_css_library_available() { css_class page("html_summary_page"); css tmp; unique_ptr & csslib = lookup_css_library(); if(!csslib) throw WEBDAR_BUG; if(!csslib->class_exists(css_close)) { tmp.clear(); tmp.css_float(css::fl_right); tmp.css_float_clear(css::fc_both); tmp.css_position_type(css::pos_fixed); tmp.css_position_bottom("1em"); tmp.css_position_right("1em"); csslib->add(css_close, tmp); } if(!csslib->class_exists(css_table_top)) { tmp = webdar_css_style::get_css_class(webdar_css_style::text_shadow_dark).get_value(); tmp.css_border_width(css::bd_all, css::bd_medium); tmp.css_border_style(css::bd_all, css::bd_solid); tmp.css_font_weight_bold(); tmp.css_background_color(COLOR_BACK); tmp.css_color(COLOR_TEXT); csslib->add(css_table_top, tmp); } if(!csslib->class_exists(css_table_left)) { tmp.clear(); tmp.css_border_width(css::bd_all, css::bd_medium); tmp.css_border_style(css::bd_all, css::bd_solid); tmp.css_text_h_align(css::al_left); tmp.css_font_weight_bold(); csslib->add(css_table_left, tmp); } if(!csslib->class_exists(css_table_rest)) { tmp.clear(); tmp.css_border_width(css::bd_all, css::bd_medium); tmp.css_border_style(css::bd_all, css::bd_solid); tmp.css_text_h_align(css::al_right); csslib->add(css_table_rest, tmp); } if(!csslib->class_exists(css_about_box)) { tmp.clear(); tmp.css_overflow(css::ov_hidden); tmp.css_width("100%", true); tmp.css_background_color(COLOR_TOPBAR_BACK); csslib->add(css_about_box, tmp); } if(!csslib->class_exists(css_about_text)) { tmp.clear(); tmp.css_font_weight_bold(); tmp.css_text_v_align(css::al_middle); tmp.css_margin_left("1em"); tmp.css_color(COLOR_MENU_BORDER_OFF); csslib->add(css_about_text, tmp); } webdar_css_style::update_library(*csslib); } webdar-1.0.0/src/html_page.cpp0000644000175000017520000000571214773727226013160 00000000000000/*********************************************************************/ // webdar - a web server and interface program to libdar // Copyright (C) 2013-2025 Denis Corbin // // This file is part of Webdar // // Webdar is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // Webdar is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Webdar. If not, see // //---- // to contact the author: dar.linux@free.fr /*********************************************************************/ // C system header files #include "my_config.h" extern "C" { } // C++ system header files // webdar headers #include "webdar_tools.hpp" #include "html_text.hpp" // #include "html_page.hpp" using namespace std; void html_page::set_title(const string & title) { if(x_title != title) { x_title = title; my_body_part_has_changed(); } } void html_page::set_refresh_redirection(unsigned int seconds, const string & url) { if(url != "") { redirect = ""; } else redirect = ""; } string html_page::inherited_get_body_part(const chemin & path, const request & req) { return get_body_part_given_the_body(path, req, get_body_part_from_children_as_a_block(path, req)); } string html_page::get_body_part_given_the_body(const chemin & path, const request & req, const string & body) { string ret = ""; string aux; unique_ptr & csslib = lookup_css_library(); if(!csslib) throw WEBDAR_BUG; ret += "\n"; ret += "\n\n"; if(csslib->size() > 0) ret += "\n"; ret += "\n"; ret += x_title + "\n"; ret += "\n"; ret += "\n"; ret += "\n"; ret += ""; ret += ""; if(redirect != "") ret += redirect + "\n"; ret += "\n // //---- // to contact the author: dar.linux@free.fr /*********************************************************************/ // C system header files #include "my_config.h" extern "C" { } // C++ system header files #include // webdar headers // #include "html_aiguille.hpp" using namespace std; void html_aiguille::clear() { while(order.begin() != order.end()) remove_section(*(order.begin())); active_section = noactive; selfcleaning = false; my_body_part_has_changed(); } void html_aiguille::add_section(const string & name, const string & title) { if(find(order.begin(), order.end(), name) != order.end()) throw exception_range("section name already used in this html_aiguille"); order.push_back(name); try { sections[name] = section(); try { map::iterator it = sections.find(name); if(it == sections.end()) throw WEBDAR_BUG; it->second.title = title; adopt(&(it->second.global_visibility)); it->second.global_visibility.set_visible(false); } catch(...) { sections.erase(name); throw; } } catch(...) { order.pop_back(); throw; } section_added(name, title); // eventually inform inherited class if applicable // adding a section has no influence on the return // of inherited_get_body_part() // no need to fire my_body_part_has_changed() } void html_aiguille::adopt_in_section(const string & section_name, body_builder* obj) { map::iterator it = sections.find(section_name); unsigned int sect_num = section_name_to_num(section_name); if(it == sections.end()) throw exception_range("unknown section named: " + section_name); if(obj == nullptr) throw WEBDAR_BUG; obj_to_section[obj] = section_name; it->second.adopted.push_back(obj); it->second.global_visibility.adopt(obj); // this will trigger body_builder::my_body_part_has_changed() } void html_aiguille::adopt_in_section(signed int num, body_builder* obj) { if(num >= size()) throw exception_range("invalid section number given to html_aiguille object"); adopt_in_section(order[num], obj); } void html_aiguille::clear_section(const string & section_name) { map::iterator it = sections.find(section_name); selfcleaning = true; try { if(it == sections.end()) throw exception_range("unknown section to clear, named: " + section_name); list::iterator objt = it->second.adopted.begin(); map::iterator revt; while(objt != it->second.adopted.end()) { if(*objt == nullptr) throw WEBDAR_BUG; revt = obj_to_section.find(*objt); if(revt == obj_to_section.end()) throw WEBDAR_BUG; obj_to_section.erase(revt); it->second.global_visibility.foresake(*objt); *objt = nullptr; ++objt; } it->second.adopted.clear(); } catch(...) { selfcleaning = false; throw; } selfcleaning = false; } void html_aiguille::clear_section(signed int num) { if(num >= size()) throw exception_range("invalid section number given to html_aiguille object"); clear_section(order[num]); } void html_aiguille::remove_section(const string & section_name) { clear_section(section_name); map::iterator it = sections.find(section_name); if(it == sections.end()) throw WEBDAR_BUG; /// clear_section succeeded, and we don't ??? sections.erase(it); deque::iterator ut = find(order.begin(), order.end(), section_name); if(ut == order.end()) throw WEBDAR_BUG; order.erase(ut); if(active_section >= order.size()) active_section = noactive; section_removed(section_name); // eventually inform inherited class my_body_part_has_changed(); // necessary if the removed section had no object to foresake } void html_aiguille::remove_section(signed int num) { if(num >= size()) throw exception_range("invalid section number given to html_aiguille object"); remove_section(order[num]); } void html_aiguille::set_active_section(const string & name) { unsigned int i = 0; while(i < order.size() && name != order[i]) ++i; if(i < order.size()) set_active_section(i); else throw exception_range("invalid section name given to html_aiguille object"); } void html_aiguille::set_active_section(signed int num) { if((num >= order.size() || num < 0) && num != noactive) throw exception_range("invalid section number given to html_aiguille object"); if(active_section != num) { if(active_section != noactive) set_visibility(active_section, false); if(num != noactive) set_visibility(num, true); active_section = num; my_body_part_has_changed(); } } unsigned int html_aiguille::section_name_to_num(const string & name) const { unsigned int size = order.size(); unsigned int found = 0; while(found < size && order[found] != name) ++found; if(found >= size) throw exception_range("Unknown section name in html_aiguille"); else return found; } void html_aiguille::void_child_will_foresake(body_builder* voidobj, body_builder *obj) { if(selfcleaning) return; map::iterator it = obj_to_section.find(obj); if(it == obj_to_section.end()) throw WEBDAR_BUG; map::iterator sect = sections.find(it->second); if(sect == sections.end()) throw WEBDAR_BUG; list::iterator objt = sect->second.adopted.begin(); while(objt != sect->second.adopted.end() && *objt != obj) ++objt; if(objt == sect->second.adopted.end()) throw WEBDAR_BUG; sect->second.adopted.erase(objt); obj_to_section.erase(it); } string html_aiguille::inherited_get_body_part(const chemin & path, const request & req) { return get_body_part_from_all_children(path, req); } void html_aiguille::set_visibility(signed int section_num, bool visible) { map::iterator objects = sections.find(order[section_num]); if(objects == sections.end()) throw WEBDAR_BUG; objects->second.global_visibility.set_visible(visible); } webdar-1.0.0/src/static_object_library.hpp0000644000175000017520000000574514773727227015575 00000000000000/*********************************************************************/ // webdar - a web server and interface program to libdar // Copyright (C) 2013-2025 Denis Corbin // // This file is part of Webdar // // Webdar is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // Webdar is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Webdar. If not, see // //---- // to contact the author: dar.linux@free.fr /*********************************************************************/ #ifndef STATIC_OBJECT_LIBRARY_HPP #define STATIC_OBJECT_LIBRARY_HPP // C system header files #include "my_config.h" extern "C" { } // C++ system header files #include #include // webdar headers #include "static_object.hpp" /// library storing static objects in memory /// \note this is a class without objects, it receives at compilation /// time a C/C++ generated code from binary objects, associate those /// to a name and provides thanks to the static find_object() method, /// a pointer to compilation time defined (and thus static) objects. class static_object_library { public: /// no object of that class get ever created static_object_library() = delete; static_object_library(const static_object_library & ref) = delete; static_object_library(static_object_library && ref) noexcept = delete; static_object_library & operator = (const static_object_library & ref) = delete; static_object_library & operator = (static_object_library && ref) noexcept = delete; ~static_object_library() = delete; /// initialize the library once and for all static void init(); /// operation should held an bug if the library is not frozen /// \note throw exception_range if no object can be found under that name static const static_object * find_object(const std::string & name); /// release all objects added to the library static void release(); private: /// throw exception if the name already exists /// this should held a bug if the library is frozen /// \note the given object becomes under the responsibility of the library (will be deleted by it) static void add_object_to_library(const std::string & name, static_object * ref); /// freeze the library once and for all static void freeze_library() { frozen = true; }; // no locking is required as the library is filled once before // multi-thread is started at startup and stays read-only the // rest of the time static std::map library; static bool frozen; }; #endif webdar-1.0.0/src/css_library.cpp0000644000175000017520000000477314773727227013543 00000000000000/*********************************************************************/ // webdar - a web server and interface program to libdar // Copyright (C) 2013-2025 Denis Corbin // // This file is part of Webdar // // Webdar is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // Webdar is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Webdar. If not, see // //---- // to contact the author: dar.linux@free.fr /*********************************************************************/ // C system header files #include "my_config.h" extern "C" { } // C++ system header files // webdar headers #include "exceptions.hpp" #include "css.hpp" // #include "css_library.hpp" using namespace std; void css_library::add(const css_class & value) { map::iterator it = content.find(value.get_name()); if(it == content.end()) content[value.get_name()] = value.get_definition(); else throw exception_range(string("label ") + value.get_name() + string(" already present in this css_library\n")); } void css_library::add(const string & name, const css & value) { css_class tmp(name); tmp.set_value(value); add(tmp); } bool css_library::class_exists(const string & name) const { string stored_value; return get_value(name, stored_value); } bool css_library::get_value(const string & name, string & stored_value) const { map::const_iterator it = content.find(name); if(it == content.end()) return false; else { stored_value = it->second; return true; } } void css_library::del(const string & name) { map::const_iterator it = content.find(name); if(it == content.end()) throw exception_range(string("label ") + name + string(" absent from this css_library, cannot delete it\n")); else content.erase(it); } string css_library::get_html_class_definitions() const { string ret = ""; map::const_iterator it = content.begin(); while(it != content.end()) { ret += it->second; ++it; } return ret; } webdar-1.0.0/src/html_derouleur.cpp0000644000175000017520000001744315035742305014241 00000000000000/*********************************************************************/ // webdar - a web server and interface program to libdar // Copyright (C) 2013-2025 Denis Corbin // // This file is part of Webdar // // Webdar is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // Webdar is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Webdar. If not, see // //---- // to contact the author: dar.linux@free.fr /*********************************************************************/ // C system header files #include "my_config.h" extern "C" { } // C++ system header files #include // webdar headers #include "webdar_css_style.hpp" // #include "html_derouleur.hpp" using namespace std; const string html_derouleur::shrink_event = "shrink"; void html_derouleur::clear() { switcher.clear(); sections.clear(); css_url.clear_css_classes(); } void html_derouleur::add_section(const string & name, const string & title) { switcher.add_section(name, title); sections[name] = section(); try { map::iterator it = sections.find(name); if(it == sections.end()) throw WEBDAR_BUG; if(it->second.title != nullptr) throw WEBDAR_BUG; if(it->second.shrinker != nullptr) throw WEBDAR_BUG; it->second.title = new (nothrow) html_button(title, name); it->second.shrinker = new (nothrow) html_button(title, shrink_event); if(it->second.title == nullptr || it->second.shrinker == nullptr) throw exception_memory(); adopt(it->second.title); adopt(it->second.shrinker); it->second.title->record_actor_on_event(this, name); it->second.shrinker->record_actor_on_event(this, shrink_event); it->second.shrinker->assign_anchor(true); it->second.title->bind_to_anchor(it->second.shrinker->get_assigned_anchor()); it->second.title->assign_anchor(true); it->second.shrinker->bind_to_anchor(it->second.title->get_assigned_anchor()); if(! css_url.is_empty()) { it->second.title->url_clear_css_classes(); it->second.title->url_add_css_class(css_url); it->second.shrinker->url_clear_css_classes(); it->second.shrinker->url_add_css_class(css_url); } css_class_group css_box = get_css_class_group(); if(! css_box.is_empty()) { it->second.title->clear_css_classes(); it->second.title->add_css_class(css_box); it->second.title->add_css_class(webdar_css_style::spacing_vertical); it->second.shrinker->clear_css_classes(); it->second.shrinker->add_css_class(css_box); it->second.shrinker->add_css_class(webdar_css_style::spacing_vertical); } } catch(...) { sections.erase(name); throw; } } void html_derouleur::adopt_in_section(const string & section_name, body_builder* obj) { if(obj == nullptr) throw WEBDAR_BUG; else { map::iterator it = sections.find(section_name); if(it != sections.end() && it->second.shrinker != nullptr) obj->bind_to_anchor(it->second.shrinker->get_assigned_anchor()); else throw WEBDAR_BUG; // should have a shrinker with a valid anchor } switcher.adopt_in_section(section_name, obj); } void html_derouleur::adopt_in_section(signed int num, body_builder* obj) { adopt_in_section(switcher.num_to_section_name(num), obj); } void html_derouleur::remove_section(const string & section_name) { map::iterator it = sections.find(section_name); if(it == sections.end()) throw WEBDAR_BUG; // unknown section !?! sections.erase(it); switcher.remove_section(section_name); } void html_derouleur::section_set_visible(const string & name, bool visible) { map::iterator it = sections.find(name); if(it == sections.end()) throw WEBDAR_BUG; // unknown section it->second.visible = visible; if(!visible) { unsigned int active = switcher.get_active_section(); unsigned int modified = switcher.section_name_to_num(name); if(active == modified) switcher.set_active_section(html_aiguille::noactive); // we hidded the current active section // by coherence we set switcher with // no active section } } void html_derouleur::url_add_css_class(const string & name) { css_url.add_css_class(name); // record this new class for future sections map::iterator it = sections.begin(); while(it != sections.end()) { if(it->second.title == nullptr) throw WEBDAR_BUG; if(it->second.shrinker == nullptr) throw WEBDAR_BUG; it->second.title->url_add_css_class(name); it->second.shrinker->url_add_css_class(name); ++it; } my_body_part_has_changed(); } void html_derouleur::url_add_css_class(const css_class_group & cg) { css_url.add_css_class(cg); // record this new class for future sections map::iterator it = sections.begin(); while(it != sections.end()) { if(it->second.title == nullptr) throw WEBDAR_BUG; if(it->second.shrinker == nullptr) throw WEBDAR_BUG; it->second.title->url_add_css_class(cg); it->second.shrinker->url_add_css_class(cg); ++it; } my_body_part_has_changed(); } void html_derouleur::on_event(const string & event_name) { if(event_name == shrink_event) switcher.set_active_section(html_aiguille::noactive); else switcher.set_active_section(event_name); // my_body_part_has_changed() is called from html_aiguille::set_active_section() } void html_derouleur::css_classes_have_changed() { map::iterator it = sections.begin(); css_class_group updated_set = get_css_class_group(); while(it != sections.end()) { if(it->second.title == nullptr) throw WEBDAR_BUG; it->second.title->clear_css_classes(); it->second.title->add_css_class(updated_set); it->second.title->add_css_class(webdar_css_style::spacing_vertical); it->second.shrinker->clear_css_classes(); it->second.shrinker->add_css_class(updated_set); it->second.shrinker->add_css_class(webdar_css_style::spacing_vertical); ++it; } } string html_derouleur::inherited_get_body_part(const chemin & path, const request & req) { string ret = ""; chemin sub_path = path; if(sub_path.size() > 0) sub_path.pop_front(); return generate_html(sub_path, req); } void html_derouleur::new_css_library_available() { css tmp; unique_ptr & csslib = lookup_css_library(); if(!csslib) throw WEBDAR_BUG; webdar_css_style::update_library(*csslib); } string html_derouleur::generate_html(const chemin & path, const request & req) { const unsigned int num_sect = switcher.size(); map::iterator sect; string ret = ""; for(unsigned int i = 0; i < num_sect; ++i) { sect = sections.find(switcher.num_to_section_name(i)); if(sect == sections.end()) throw WEBDAR_BUG; // display section title if(sect->second.title == nullptr) throw WEBDAR_BUG; if(sect->second.shrinker == nullptr) throw WEBDAR_BUG; // if section is active, display its content if(sect->second.visible) { if(i == switcher.get_active_section()) { ret += sect->second.shrinker->get_body_part(path, req); ret += switcher.get_body_part(path, req); } else ret += sect->second.title->get_body_part(path, req); } else { if(i == switcher.get_active_section()) throw WEBDAR_BUG; // active section is set as invisible!!! // else we skip the section title and content } } return ret; } webdar-1.0.0/src/html_label.hpp0000644000175000017520000000614515035733410013311 00000000000000/*********************************************************************/ // webdar - a web server and interface program to libdar // Copyright (C) 2013-2025 Denis Corbin // // This file is part of Webdar // // Webdar is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // Webdar is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Webdar. If not, see // //---- // to contact the author: dar.linux@free.fr /*********************************************************************/ #ifndef HTML_LABEL_HPP #define HTML_LABEL_HPP // C system header files #include "my_config.h" extern "C" { } // C++ system header files // webdar headers #include "static_body_builder.hpp" #include "html_tooltip.hpp" #include "html_text.hpp" /// class html_label implements label and tooltips (helper string showing when mouse hovering) /// it is not expect to adopt any child, but to be adopted class html_label : public html_tooltip, public static_body_builder { public: /// \param[in] x_label the text to show as label html_label(const std::string & x_label); /// \param[in] x_label the text to show as label /// \param[in] x_tooltips the helper text that should popup upon mouse hover html_label(const std::string & x_label, const std::string & x_tooltip); html_label(const html_label & ref) = default; html_label(html_label && ref) noexcept = delete; html_label & operator = (const html_label & ref) = default; html_label & operator = (html_label && ref) noexcept = delete; ~html_label() = default; /// change the label value from the value provided at construction time void set_label(const std::string & val) { label = val; }; /// get the current value of the label const std::string & get_label() const { return label; }; /// set the label in bold or equivalent method to emphase it compare to the others void set_emphase(bool em) { emphase = em; }; /// define the 'for' field to link this label to other CSS structure void set_for_field(const std::string & val) { for_field = val; }; /// read the current 'for' field value const std::string & get_for_field() const { return for_field; }; /// inherited from static_body_builder virtual std::string get_body_part() const override; protected: /// inherited from body_builder virtual std::string inherited_get_body_part(const chemin & path, const request & req) override; /// inherited from body builder /// \note we forbid any adoption throwing an exception from this call virtual void has_adopted(body_builder *obj) { throw WEBDAR_BUG; }; private: std::string label; std::string for_field; bool emphase; }; #endif webdar-1.0.0/src/html_mask.cpp0000644000175000017520000000222514773727227013174 00000000000000/*********************************************************************/ // webdar - a web server and interface program to libdar // Copyright (C) 2013-2025 Denis Corbin // // This file is part of Webdar // // Webdar is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // Webdar is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Webdar. If not, see // //---- // to contact the author: dar.linux@free.fr /*********************************************************************/ // C system header files #include "my_config.h" extern "C" { } // C++ system header files // webdar headers #include "tokens.hpp" // #include "html_mask.hpp" using namespace std; webdar-1.0.0/src/html_form_same_fs.cpp0000644000175000017520000001214414773727227014702 00000000000000/*********************************************************************/ // webdar - a web server and interface program to libdar // Copyright (C) 2013-2025 Denis Corbin // // This file is part of Webdar // // Webdar is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // Webdar is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Webdar. If not, see // //---- // to contact the author: dar.linux@free.fr /*********************************************************************/ // C system header files #include "my_config.h" extern "C" { } // C++ system header files #include // webdar headers #include "html_form_input_file.hpp" #include "webdar_css_style.hpp" // #include "html_form_same_fs.hpp" using namespace std; const string html_form_same_fs::changed = "hfsfs-changed"; html_form_same_fs::html_form_same_fs(): table(false, true, "File system mount point to add", "--- select a type of filter ---") { // components setup table.set_obj_type_provider(this); table.add_obj_type("included mount point"); // index 0 in provide_object_of_type() table.add_obj_type("excluded mount point"); // index 1 in provide_object_of_type() // adption tree adopt(&table); // events table.record_actor_on_event(this, html_form_dynamic_table::changed); register_name(changed); // css } vector html_form_same_fs::get_included_fs_path() const { return gather_content_of_type(0); } vector html_form_same_fs::get_excluded_fs_path() const { return gather_content_of_type(1); } unique_ptr html_form_same_fs::provide_object_of_type(unsigned int num, const string & context, string & changed_event) const { unique_ptr ret; switch(num) { case 0: ret.reset(new (nothrow) html_form_input_file("Included mount point", "/", "", webdar_css_style::width_80vw, "Select a path which filesystem will be included in the operation...")); break; case 1: ret.reset(new (nothrow) html_form_input_file("Excluded mount point", "/", "", webdar_css_style::width_80vw, "Select a path which filesystem will be excluded from the operation...")); break; default: throw WEBDAR_BUG; } if(! ret) throw exception_memory(); else { ret->set_select_mode(html_form_input_file::select_dir); ret->set_can_create_dir(false); } return ret; } void html_form_same_fs::load_json(const json & source) { try { unsigned int version; string class_id; json config = unwrap_config_from_json_header(source, version, class_id); if(class_id != myclass_id) throw exception_range(libdar::tools_printf("Unexpected class_id in json data, found %s while expecting %s", class_id.c_str(), myclass_id)); if(version > format_version) throw exception_range(libdar::tools_printf("Json format version too hight for %s, upgrade your webdar software", myclass_id)); table.load_json(config.at(jlabel_contents)); } catch(json::exception & e) { throw exception_json(libdar::tools_printf("Error loading %s config", myclass_id), e); } } json html_form_same_fs::save_json() const { json ret; ret[jlabel_contents] = table.save_json(); return wrap_config_with_json_header(format_version, myclass_id, ret); } void html_form_same_fs::clear_json() { table.clear_json(); } void html_form_same_fs::on_event(const string & event_name) { if(event_name == html_form_dynamic_table::changed) act(changed); else throw WEBDAR_BUG; } string html_form_same_fs::inherited_get_body_part(const chemin & path, const request & req) { return get_body_part_from_all_children(path, req); } void html_form_same_fs::new_css_library_available() { unique_ptr & csslib = lookup_css_library(); if(!csslib) throw WEBDAR_BUG; webdar_css_style::update_library(*csslib); } vector html_form_same_fs::gather_content_of_type(unsigned int type) const { vector ret; html_form_dynamic_table::iterator it = table.begin(); while(it != table.end()) { if(it.get_object_type() == type) // this is an object of the the type we gather { shared_ptr obj = it.get_object(); if(!obj) throw WEBDAR_BUG; else { html_form_input* hfi = dynamic_cast(obj.get()); if(hfi == nullptr) throw WEBDAR_BUG; // the body_builder object is not an html_form_input ret.push_back(hfi->get_value()); } } // else we ignore other types ++it; } return ret; } webdar-1.0.0/src/proto_connexion.cpp0000644000175000017520000001072315045112127014416 00000000000000/*********************************************************************/ // webdar - a web server and interface program to libdar // Copyright (C) 2013-2025 Denis Corbin // // This file is part of Webdar // // Webdar is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // Webdar is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Webdar. If not, see // //---- // to contact the author: dar.linux@free.fr /*********************************************************************/ // C system header files #include "my_config.h" extern "C" { #if HAVE_ERRNO_H #include #endif #if HAVE_LIMITS_H #include #endif #if HAVE_STRING_H #include #endif } // webdar headers #include "proto_connexion.hpp" using namespace std; #define BUFFER_SIZE 10240 #ifdef SSIZE_MAX #if SSIZE_MAX < BUFFER_SIZE #undef BUFFER_SIZE #define BUFFER_SIZE SSIZE_MAX #endif #endif proto_connexion::proto_connexion(const string & peerip, unsigned int peerport) { etat = connected; ip = peerip; port = peerport; buffer_size = BUFFER_SIZE; buffer = nullptr; already_read = 0; data_size = 0; out_buf_size = BUFFER_SIZE; out_buf = nullptr; last_unwrote = 0; try { buffer = new (nothrow) char[buffer_size]; if(buffer == nullptr) throw exception_memory(); out_buf = new (nothrow) char[out_buf_size]; if(out_buf == nullptr) throw exception_memory(); } catch(...) { if(buffer != nullptr) delete [] buffer; if(out_buf != nullptr) delete [] out_buf; throw; } } proto_connexion::~proto_connexion() { if(buffer != nullptr) delete [] buffer; if(out_buf != nullptr) delete [] out_buf; } char proto_connexion::read_one(bool blocking) { if(already_read == data_size) fill_buffer(blocking); if(already_read == data_size) throw exception_range("no more data available from connection"); return buffer[already_read++]; } char proto_connexion::read_test_first(bool blocking) { if(already_read == data_size) fill_buffer(blocking); if(already_read == data_size) throw exception_range("no more data available from connection"); return buffer[already_read]; } char proto_connexion::read_test_second(bool blocking) { if(data_size - already_read < 2) fill_buffer(blocking); if(data_size - already_read < 2) throw exception_range("no more data available from connection"); return buffer[already_read + 1]; } void proto_connexion::write(const char *a, unsigned int size) { if(get_status() != connected) throw exception_range("Connexion closed will not be able to send data"); if(size + last_unwrote < out_buf_size) { (void)memcpy(out_buf + last_unwrote, a, size); last_unwrote += size; } else { flush_write(); write_impl(a, size); } } void proto_connexion::flush_write() { if(last_unwrote > 0) { write_impl(out_buf, last_unwrote); last_unwrote = 0; } } void proto_connexion::fill_buffer(bool blocking) { if(data_size < buffer_size || already_read == data_size) // there is some room to receive more data in the buffer { if(get_status() == proto_connexion::connected) { if(already_read == data_size) // no more data to read, so we restart at the beginning already_read = data_size = 0; else { if(already_read > data_size) throw WEBDAR_BUG; if(data_size > buffer_size) throw WEBDAR_BUG; if(already_read > 0) { (void)memmove(buffer, buffer + already_read, data_size - already_read); data_size -= already_read; already_read = 0; } } try { data_size += read_impl(buffer + data_size, buffer_size - data_size, blocking); } catch(exception_bug & e) { throw; } catch(exception_signal & e) { throw; } catch(exception_base & e) { if(already_read == data_size) // no more data in buffer throw; } } else { if(already_read == data_size) throw exception_range("Connexion closed and no more data available for reading"); } } } webdar-1.0.0/src/html_options_extract.hpp0000644000175000017520000001423514773727227015477 00000000000000/*********************************************************************/ // webdar - a web server and interface program to libdar // Copyright (C) 2013-2025 Denis Corbin // // This file is part of Webdar // // Webdar is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // Webdar is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Webdar. If not, see // //---- // to contact the author: dar.linux@free.fr /*********************************************************************/ #ifndef HTML_OPTIONS_EXTRACT_HPP #define HTML_OPTIONS_EXTRACT_HPP // C system header files #include "my_config.h" extern "C" { } // C++ system header files #include // webdar headers #include "body_builder.hpp" #include "actor.hpp" #include "html_form_select.hpp" #include "html_form_input.hpp" #include "html_form.hpp" #include "html_form_fieldset.hpp" #include "html_derouleur.hpp" #include "html_mask_form_filename.hpp" #include "html_mask_form_path.hpp" #include "html_form_overwrite_action.hpp" #include "html_fsa_scope.hpp" #include "guichet.hpp" #include "jsoner.hpp" #include "bibliotheque_subconfig.hpp" #include "events.hpp" /// html components used for the user to provide parameters of libdar archive restoration operation class html_options_extract : public body_builder, public actor, public jsoner, public bibliotheque_subconfig, public events { public: static const std::string changed; html_options_extract(); html_options_extract(const html_options_extract & ref) = delete; html_options_extract(html_options_extract && ref) noexcept = delete; html_options_extract & operator = (const html_options_extract & ref) = delete; html_options_extract & operator = (html_options_extract && ref) noexcept = delete; ~html_options_extract() = default; /// mandatory call to invoke ASAP after constructor void set_biblio(const std::shared_ptr & ptr); /// needed for path based filtering to filter accordingly to the current root_fs void set_fs_root(const std::string & prefix) { path_mask->set_fs_root(prefix); }; /// providing the parameters as libdar object libdar::archive_options_extract get_options() const; /// know whether the in-place restoration is set bool get_in_place_mode() const { return in_place.get_value_as_bool(); }; /// inherited from jsoner virtual void load_json(const json & source) override; /// inherited from jsoner virtual json save_json() const override; /// inherited from jsoner virtual void clear_json() override; /// inherited from bibliotheque_subconfig virtual bibliotheque::using_set get_using_set() const override; /// inherited from actor virtual void on_event(const std::string & event_name) override; /// set the object to webdar defaults void set_to_webdar_defaults(); protected: // inherited from body_builder virtual std::string inherited_get_body_part(const chemin & path, const request & req) override; // inherited from body_builder virtual void new_css_library_available() override; private: bool ignore_events; html_derouleur deroule; html_form form_archgen; html_form_fieldset fs; html_form_input in_place; html_form_input warn_over; html_form_input flat; html_form_select what_to_check; html_form_input warn_remove_no_match; html_form_input empty; html_form_input empty_dir; html_form_select dirty_behavior; html_form_input ignore_sockets; html_form form_show; html_form_fieldset fs_show; html_form_input info_details; html_form_input display_treated; html_form_input display_treated_only_dir; html_form_input display_skipped; guichet guichet_overwriting_policy; std::shared_ptr overwriting_policy; html_form_input only_deleted; html_form_input ignore_deleted; guichet guichet_filename_mask; std::shared_ptr filename_mask; guichet guichet_path_mask; std::shared_ptr path_mask; guichet guichet_ea_mask; std::shared_ptr ea_mask; html_fsa_scope fsa_scope; void init(); void trigger_changed(); static constexpr const unsigned int format_version = 1; static constexpr const char* myclass_id = "html_options_extract"; static constexpr const char* jlabel_in_place = "in-place"; static constexpr const char* jlabel_warn_over = "warn-over"; static constexpr const char* jlabel_flat = "flat"; static constexpr const char* jlabel_what_to_check = "what-to-check"; static constexpr const char* jlabel_warn_remove_no_match = "warn-remove-no-match"; static constexpr const char* jlabel_empty = "dry-run"; static constexpr const char* jlabel_empty_dir = "empty-dir"; static constexpr const char* jlabel_dirty_behavior = "dirty-behavior"; static constexpr const char* jlabel_ignore_sockets = "ignore-sockets"; static constexpr const char* jlabel_info_details = "info-details"; static constexpr const char* jlabel_display_treated = "display-treated"; static constexpr const char* jlabel_display_only_dir = "display-only-dir"; static constexpr const char* jlabel_display_skipped = "display-skipped"; static constexpr const char* jlabel_overwriting_policy = "overwriting-policy"; static constexpr const char* jlabel_only_deleted = "only-deleted"; static constexpr const char* jlabel_ignore_deleted = "ignore-deleted"; static constexpr const char* jlabel_filename_mask = "filename-mask"; static constexpr const char* jlabel_path_mask = "path-mask"; static constexpr const char* jlabel_ea_mask = "ea-mask"; static constexpr const char* jlabel_fsa_scope = "fsa-scope"; }; #endif webdar-1.0.0/src/web_user_interaction.hpp0000644000175000017520000001317614777674036015446 00000000000000/*********************************************************************/ // webdar - a web server and interface program to libdar // Copyright (C) 2013-2025 Denis Corbin // // This file is part of Webdar // // Webdar is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // Webdar is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Webdar. If not, see // //---- // to contact the author: dar.linux@free.fr /*********************************************************************/ #ifndef WEB_USER_INTERACTION_HPP #define WEB_USER_INTERACTION_HPP // C system header files #include "my_config.h" extern "C" { } // C++ system header files #include #include #include #include // webdar headers /// class web_user_interaction provides a libdar::user_interaction interface to libdar /// this class is not an html_ body_builder class but rather holds information fields and status /// provided by libdar through the libdar::user_interaction interface. The main role of this /// class is to allow any thread to get access to this libdar running thread provided information, /// by mean of mutex on the internal/private data structure. /// \note web_user_interaction can has two sides, the libdar::user_interaction interface which /// is implemented by the inherited_* protected methods and the web_user_interaction interface /// that is provided by the public methods of the class. This object is given to libdar /// as is for user_interaction. And this object is consulted/interacted inside webdar possibly /// from another thread for html_ interaction (see html_web_user_interaction class for example) class web_user_interaction : public libdar::user_interaction { public: web_user_interaction(unsigned int x_warn_size = 10); ///< the argument is the number latest message to retain from libdar web_user_interaction(const web_user_interaction & ref) = delete; web_user_interaction(web_user_interaction && ref) noexcept = delete; web_user_interaction & operator = (const web_user_interaction & ref) = delete; web_user_interaction & operator = (web_user_interaction && ref) noexcept = delete; ~web_user_interaction(); /// change the number of last warnings to display void set_warning_list_size(unsigned int size); /// clear logs and reset the object void clear(); /// obtain a copy of the current log buffer std::list get_warnings(); /// wether libdar is pending for pause answer bool pending_pause(std::string & msg) const; /// wether libdar is pending for get_string answer bool pending_get_string(std::string & msg, bool & echo) const; /// wether libdar is pending for a get_secu_string answer bool pending_get_secu_string(std::string & msg, bool & echo) const; /// provide the answer to libdar for pause() request void set_pause_answer(bool val); /// provide the answer to libdar for get_string() request void set_get_string_answer(const std::string & val); /// provide the answer to libdar for get_secu_string() request void set_get_secu_string_answer(const libdar::secu_string & val); /// whether libdar is waiting for an answer bool has_libdar_pending() const; protected: // inherited from libdar::user_interaction virtual void inherited_message(const std::string & message) override; virtual bool inherited_pause(const std::string & message) override; virtual std::string inherited_get_string(const std::string & message, bool echo) override; virtual libdar::secu_string inherited_get_secu_string(const std::string & message, bool echo) override; private: mutable libthreadar::condition control; ///< control access to any value this object has // pause() fields bool pause_pending; ///< true if a pause() is pending for a response (libdar thread waiting on "control") bool pause_answered; ///< true if a answer has been provided but not yet consumed by libdar thread std::string pause_msg; ///< the request to answser to bool pause_ans; ///< the answer to the request // get_string() fields bool get_string_pending; ///< true if a get_string() is pending for a response bool get_string_answered; ///< true if a answer has been provided but not yet consumed by libdar thread std::string get_string_msg; ///< the libdar message for get_string() bool get_string_echo; ///< whether answer has to be echoed std::string get_string_ans; ///< the user provided answer // get_secu_string() fields bool get_secu_string_pending; ///< true if a get_secu_string() is pending for a response bool get_secu_string_answered; ///< true if an answer has been provided but not yet consumed by libdar thread std::string get_secu_string_msg; ///< the libdar message for get_secu_string() bool get_secu_string_echo; ///< whether the answer has to be echoed libdar::secu_string get_secu_string_ans; ///< the user provided secu_string // libdar warnings (= logs) std::list warnings; ///< lines (message/warning) sent by libdar unsigned warn_size; ///< max number of line to record from libdar }; #endif webdar-1.0.0/src/html_ciphering.cpp0000644000175000017520000003324515036422622014177 00000000000000/*********************************************************************/ // webdar - a web server and interface program to libdar // Copyright (C) 2013-2025 Denis Corbin // // This file is part of Webdar // // Webdar is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // Webdar is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Webdar. If not, see // //---- // to contact the author: dar.linux@free.fr /*********************************************************************/ // C system header files #include "my_config.h" extern "C" { } // C++ system header files #include // webdar headers #include "webdar_tools.hpp" #include "webdar_css_style.hpp" #include "tooltip_messages.hpp" // #include "html_ciphering.hpp" using namespace std; const string html_ciphering::changed = "html_ciphering_changed"; html_ciphering::html_ciphering(): form_crypto("Update"), crypto_fs(""), crypto_type("type of cryptography"), crypto_algo("Cipher used"), crypto_pass1("Pass phrase", html_form_input::password, "", "", webdar_css_style::width_100vw), crypto_pass2("Confirm pass phrase", html_form_input::password, "", "", webdar_css_style::width_100vw), crypto_size("Cipher Block size", 0, "30"), crypto_threads("Number of threads for ciphering", html_form_input::number, "2", "5", ""), crypto_fs_kdf_hash("Key Derivation Function"), iteration_count("Iteration count", html_form_input::number, "1", "30", ""), ignore_events(false) { libdar::archive_options_create defaults; // components configuration // the order in the following must match the html_ciphering::crypto_type_t enum crypto_type.add_choice("sym", "Symmetric encryption"); crypto_type.add_choice("asym", "Asymmetric encryption"); crypto_type.set_selected_id("sym"); crypto_algo.set_value(defaults.get_crypto_algo()); crypto_pass1.set_value(""); crypto_pass2.set_value(""); crypto_threads.set_min_only(1); crypto_threads.set_value_as_int(defaults.get_multi_threaded_crypto()); crypto_kdf_hash.add_choice("md5","md5"); crypto_kdf_hash.add_choice("sha1","sha1"); crypto_kdf_hash.add_choice("sha512","sha512"); crypto_kdf_hash.add_choice("whirlpool","whirlpool"); crypto_kdf_hash.add_choice("argon2","argon2"); crypto_kdf_hash.set_selected_id("argon2"); crypto_size.set_value_as_infinint(defaults.get_crypto_size()); iteration_count.set_value(libdar::deci(defaults.get_iteration_count()).human()); // adoption tree crypto_fs.adopt(&crypto_algo); crypto_fs.adopt(&crypto_type); crypto_fs.adopt(&crypto_pass1); crypto_fs.adopt(&crypto_pass2); crypto_fs.adopt(&gnupg); crypto_fs.adopt(&crypto_size); crypto_fs.adopt(&crypto_threads); form_crypto.adopt(&crypto_fs); crypto_fs_kdf_hash.adopt(&crypto_kdf_hash); crypto_fs_kdf_hash.adopt(&iteration_count); form_crypto.adopt(&crypto_fs_kdf_hash); adopt(&form_crypto); // events crypto_algo.record_actor_on_event(this, html_crypto_algo::changed); crypto_type.record_actor_on_event(this, html_form_select::changed); crypto_pass1.record_actor_on_event(this, html_form_input::changed); crypto_pass2.record_actor_on_event(this, html_form_input::changed); crypto_size.record_actor_on_event(this, html_form_input_unit::changed); gnupg.record_actor_on_event(this, html_form_gnupg_list::changed); crypto_kdf_hash.set_change_event_name(kdf_algo_changed); crypto_kdf_hash.record_actor_on_event(this, kdf_algo_changed); iteration_count.record_actor_on_event(this, html_form_input::changed); register_name(changed); // setup visibility on_event(html_form_select::changed); on_event(kdf_algo_changed); // csss crypto_pass1.add_css_class(webdar_css_style::width_100vw_8em); crypto_pass2.add_css_class(webdar_css_style::width_100vw_8em); crypto_threads.add_css_class(webdar_css_style::width_100vw_8em); iteration_count.add_css_class(webdar_css_style::width_100vw_8em); // tooltips crypto_type.set_tooltip(TOOLTIP_HC_TYPE); crypto_algo.set_tooltip(TOOLTIP_HC_ALGO); crypto_pass1.set_tooltip(TOOLTIP_HC_PASS1); crypto_pass2.set_tooltip(TOOLTIP_HC_PASS2); crypto_size.set_tooltip(TOOLTIP_HC_SIZE); crypto_threads.set_tooltip(TOOLTIP_HC_THREADS); crypto_fs_kdf_hash.set_tooltip(TOOLTIP_HC_FS_KDF_HASH); crypto_kdf_hash.set_tooltip(0, TOOLTIP_HC_KDF_HASH0); crypto_kdf_hash.set_tooltip(1, TOOLTIP_HC_KDF_HASH1); crypto_kdf_hash.set_tooltip(2, TOOLTIP_HC_KDF_HASH2); crypto_kdf_hash.set_tooltip(3, TOOLTIP_HC_KDF_HASH3); crypto_kdf_hash.set_tooltip(4, TOOLTIP_HC_KDF_HASH4); iteration_count.set_tooltip(TOOLTIP_HC_ITERATION_COUNT); } void html_ciphering::set_crypto_size_range(const libdar::infinint & min, const libdar::infinint & max) { crypto_size.set_range(min, max); } libdar::U_I html_ciphering::get_multi_threaded_crypto() const { return webdar_tools_convert_to_int(crypto_threads.get_value()); } libdar::crypto_algo html_ciphering::get_crypto_algo() const { return crypto_algo.get_value(); } html_ciphering::crypto_type_t html_ciphering::get_crypto_type() const { return crypto_type_t(crypto_type.get_selected_num()); } libdar::secu_string html_ciphering::get_crypto_pass() const { if(get_crypto_type() != sym) throw WEBDAR_BUG; if(crypto_pass1.get_value() != crypto_pass2.get_value()) throw exception_range("crypto password and its confirmation do not match"); return libdar::secu_string(crypto_pass1.get_value().c_str(), crypto_pass1.get_value().size()); } libdar::infinint html_ciphering::get_iteration_count() const { return libdar::deci(iteration_count.get_value()).computer(); } libdar::hash_algo html_ciphering::get_kdf_hash() const { switch(crypto_kdf_hash.get_selected_num()) { case 0: return libdar::hash_algo::md5; case 1: return libdar::hash_algo::sha1; case 2: return libdar::hash_algo::sha512; case 3: return libdar::hash_algo::whirlpool; case 4: return libdar::hash_algo::argon2; default: throw WEBDAR_BUG; } } vector html_ciphering::get_gnupg_recipients() const { return gnupg.get_gnupg_recipients(); } vector html_ciphering::get_gnupg_signatories() const { return gnupg.get_gnupg_signatories(); } libdar::U_32 html_ciphering::get_crypto_size() const { return webdar_tools_convert_from_infinint( crypto_size.get_value_as_infinint(), string("Value too large for a cipher block size")); } void html_ciphering::load_json(const json & source) { try { unsigned int version; string class_id; json config = unwrap_config_from_json_header(source, version, class_id); if(class_id != myclass_id) throw exception_range(libdar::tools_printf("Unexpected class_id in json data, found %s while expecting %s", class_id.c_str(), myclass_id)); if(version > format_version) throw exception_range(libdar::tools_printf("Json format version too hight for %s, upgrade your webdar software", myclass_id)); ignore_events = true; try { crypto_type.set_selected_id_with_warning(config.at(jlabel_type), jlabel_type); crypto_algo.set_selected_id_with_warning(config.at(jlabel_algo), jlabel_algo); crypto_pass1.set_value(config.at(jlabel_pass)); crypto_pass2.set_value(config.at(jlabel_pass)); crypto_size.set_value_as_infinint(libdar::deci(config.at(jlabel_size)).computer()); crypto_threads.set_value_as_int(config.at(jlabel_threads)); gnupg.load_json(config.at(jlabel_gnupg)); crypto_kdf_hash.set_selected_id_with_warning(config.at(jlabel_kdf_hash), jlabel_kdf_hash); iteration_count.set_value_as_int(config.at(jlabel_kdf_iter)); } catch(...) { ignore_events = false; throw; } ignore_events = false; on_event(html_form_select::changed); } catch(json::exception & e) { throw exception_json(libdar::tools_printf("Error loading %s config", myclass_id), e); } } json html_ciphering::save_json() const { json ret; ret[jlabel_type] = crypto_type.get_selected_id(); ret[jlabel_algo] = crypto_algo.get_selected_id(); ret[jlabel_pass] = crypto_pass1.get_value(); // assuming pass2 is equal to pass1 ret[jlabel_size] = libdar::deci(crypto_size.get_value_as_infinint()).human(); ret[jlabel_threads] = crypto_threads.get_value_as_int(); ret[jlabel_gnupg] = gnupg.save_json(); ret[jlabel_kdf_hash] = crypto_kdf_hash.get_selected_id(); ret[jlabel_kdf_iter] = iteration_count.get_value_as_int(); return wrap_config_with_json_header(format_version, myclass_id, ret); } void html_ciphering::clear_json() { libdar::archive_options_create defaults; crypto_type.set_selected_num(0); crypto_algo.set_selected_num(0); crypto_pass1.set_value(""); crypto_pass2.set_value(""); crypto_size.set_value_as_infinint(defaults.get_crypto_size()); crypto_threads.set_value_as_int(defaults.get_multi_threaded_crypto()); gnupg.clear_json(); set_kdf_hash(defaults.get_kdf_hash()); iteration_count.set_value(libdar::deci(defaults.get_iteration_count()).human()); } void html_ciphering::on_event(const string & event_name) { if(ignore_events) return; if(event_name == html_crypto_algo::changed || event_name == html_form_select::changed) { switch(crypto_algo.get_value()) { case libdar::crypto_algo::none: crypto_type.set_visible(false); crypto_pass1.set_visible(false); crypto_pass2.set_visible(false); crypto_size.set_visible(false); crypto_threads.set_visible(false); gnupg.set_visible(false); crypto_fs_kdf_hash.set_visible(false); break; case libdar::crypto_algo::scrambling: case libdar::crypto_algo::blowfish: case libdar::crypto_algo::aes256: case libdar::crypto_algo::twofish256: case libdar::crypto_algo::serpent256: case libdar::crypto_algo::camellia256: crypto_type.set_visible(true); switch(crypto_type_t(crypto_type.get_selected_num())) { case sym: crypto_pass1.set_visible(true); crypto_pass2.set_visible(true); gnupg.set_visible(false); crypto_fs_kdf_hash.set_visible(true); break; case asym: crypto_pass1.set_visible(false); crypto_pass2.set_visible(false); gnupg.set_visible(true); crypto_fs_kdf_hash.set_visible(false); break; default: throw WEBDAR_BUG; } crypto_size.set_visible(true); crypto_threads.set_visible(true); break; default: throw WEBDAR_BUG; } act(changed); } else if(event_name == kdf_algo_changed) { libdar::infinint cur_it = libdar::deci(iteration_count.get_value()).computer(); if(get_kdf_hash() != libdar::hash_algo::argon2) { if(cur_it < libdar::default_iteration_count) iteration_count.set_value(libdar::deci(libdar::default_iteration_count).human()); iteration_count.set_min_only( webdar_tools_convert_from_infinint( libdar::default_iteration_count, string("too large integer default value provided by libdar") ) ); } else { if(cur_it < libdar::default_iteration_count_argon2) iteration_count.set_value(libdar::deci(libdar::default_iteration_count_argon2).human()); iteration_count.set_min_only( webdar_tools_convert_from_infinint( libdar::default_iteration_count_argon2, string("too large integer default value provided by libdar"))); if(cur_it == libdar::default_iteration_count) iteration_count.set_value(libdar::deci(libdar::default_iteration_count_argon2).human()); // we will not change back to lower value when swapping back to argon2 // unless the value is the default one (thus user can change the hash // algorithm and stick to the default value for the selected hash algo). } act(changed); } else if(event_name == html_form_input::changed || event_name == html_form_input_unit::changed || event_name == html_form_gnupg_list::changed) act(changed); else throw WEBDAR_BUG; } void html_ciphering::set_to_webdar_defaults() { clear_json(); crypto_algo.set_value(libdar::crypto_algo::aes256); crypto_type.set_selected_num(0); // should be symmetrical encryption iteration_count.set_value_as_int(20000); // default algo is argon2 } string html_ciphering::inherited_get_body_part(const chemin & path, const request & req) { return get_body_part_from_all_children(path, req); } void html_ciphering::css_classes_have_changed() { set css_classes = get_css_classes_as_a_set(); form_crypto.clear_css_classes(); for(set::iterator it = css_classes.begin(); it != css_classes.end(); ++it) form_crypto.add_css_class(*it); } void html_ciphering::new_css_library_available() { unique_ptr & csslib = lookup_css_library(); if(!csslib) throw WEBDAR_BUG; webdar_css_style::update_library(*csslib); } void html_ciphering::set_kdf_hash(libdar::hash_algo hash) { switch(hash) { case libdar::hash_algo::md5: crypto_kdf_hash.set_selected_num(0); break; case libdar::hash_algo::sha1: crypto_kdf_hash.set_selected_num(1); break; case libdar::hash_algo::sha512: crypto_kdf_hash.set_selected_num(2); break; case libdar::hash_algo::whirlpool: crypto_kdf_hash.set_selected_num(3); break; case libdar::hash_algo::argon2: crypto_kdf_hash.set_selected_num(4); break; default: throw WEBDAR_BUG; } } webdar-1.0.0/src/html_tooltip.hpp0000644000175000017520000000610515035735620013725 00000000000000/*********************************************************************/ // webdar - a web server and interface program to libdar // Copyright (C) 2013-2025 Denis Corbin // // This file is part of Webdar // // Webdar is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // Webdar is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Webdar. If not, see // //---- // to contact the author: dar.linux@free.fr /*********************************************************************/ #ifndef HTML_TOOLTIP_HPP #define HTML_TOOLTIP_HPP // C system header files #include "my_config.h" extern "C" { } // C++ system header files // webdar headers #include "body_builder.hpp" /// class html_tooltip is a partial body_builder implementation for inherited class to implement tooltips /// class html_tooltip is not a full independant body_builder object, the /// class should be the base class for inheritance, to provides the set_tooltip() /// method and its get_body_part() method should be called from within the body_builder::get_body_part(*,*) /// method of the inherited class or owner class within the structure to provide /// tooltip for. (replace X by label or legend for example) /// also note that the new_css_class_library_available() should be called from the inherited class /// for the css_ibrary to get fed by the tooltip related CSS definitions class html_tooltip : public body_builder { public: /// \param[in] x_tooltip the helper text that should popup upon mouse hover html_tooltip() {}; html_tooltip(const html_tooltip & ref) = default; html_tooltip(html_tooltip && ref) noexcept = delete; html_tooltip & operator = (const html_tooltip & ref) = default; html_tooltip & operator = (html_tooltip && ref) noexcept = delete; ~html_tooltip() = default; /// get the helper string to show as popup const std::string & get_tooltip() const { return tooltip; }; /// set the helper to the tooltip (helper popup) void set_tooltip(const std::string & helper); protected: /// inherited from body_builder virtual void new_css_library_available() override; /// inherited from body builder /// \note we forbid any adoption throwing an exception from this call virtual void has_adopted(body_builder *obj) { throw WEBDAR_BUG; }; /// \note body_builder::get_body_part(*) is left undefined and thus stays a pure virtual method std::string get_tooltip_body_part() const; private: std::string tooltip; static constexpr const char* css_tooltip = "tooltip"; static constexpr const char* css_tooltiptext = "tooltiptext"; }; #endif webdar-1.0.0/src/html_datetime.hpp0000644000175000017520000000532314773727236014044 00000000000000/*********************************************************************/ // webdar - a web server and interface program to libdar // Copyright (C) 2013-2025 Denis Corbin // // This file is part of Webdar // // Webdar is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // Webdar is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Webdar. If not, see // //---- // to contact the author: dar.linux@free.fr /*********************************************************************/ #ifndef HTML_DATETIME_HPP #define HTML_DATETIME_HPP // C system header files #include "my_config.h" extern "C" { #if HAVE_TIME_H #include #endif } // C++ system header files #include // webdar headers #include "body_builder.hpp" #include "html_form_input.hpp" #include "html_form_select.hpp" #include "events.hpp" #include "actor.hpp" /// class html_datetime is a html_form_field object /// like html_form_input it is expected to be adopted directly /// or thrown an html_form_fieldset by an html_form object /// and let the user provide a date information class html_datetime : public body_builder, public events, public actor { public: static const std::string changed; html_datetime(const std::string & title); html_datetime(const html_datetime & ref) = delete; html_datetime(html_datetime && ref) noexcept = delete; html_datetime & operator = (const html_datetime & ref) = delete; html_datetime & operator = (html_datetime && ref) noexcept = delete; ~html_datetime() = default; /// return the provided date in the form a number of seconds since 1969 libdar::infinint get_value() const; /// setup the initial value displayed to the user void set_value(const libdar::infinint & val); /// inherited from actor parent class virtual void on_event(const std::string & event_name) override; protected: /// inherited from body_builder virtual std::string inherited_get_body_part(const chemin & path, const request & req) override; private: html_form_input year; html_form_select month; html_form_select day; html_form_select hour; html_form_select minute; void update_from(struct tm val); /// yes, we need a copy of the argument }; #endif webdar-1.0.0/src/parser.cpp0000644000175000017520000001146514773727236012517 00000000000000/*********************************************************************/ // webdar - a web server and interface program to libdar // Copyright (C) 2013-2025 Denis Corbin // // This file is part of Webdar // // Webdar is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // Webdar is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Webdar. If not, see // //---- // to contact the author: dar.linux@free.fr /*********************************************************************/ #include "webdar_tools.hpp" #include "date.hpp" #include "parser.hpp" #include "tokens.hpp" using namespace std; parser::parser(unique_ptr & input, const shared_ptr & log): req(log) { if(!input) throw WEBDAR_BUG; if(!log) throw WEBDAR_BUG; if(input->get_status() != proto_connexion::connected) throw exception_range("connection is already closed cannot read from it"); answered = true; source = std::move(input); } void parser::close() { source.reset(); // this should invoke the destructor on the pointed to proto_connexion object } bool parser::get_next_request_uri(uri & url) { if(!answered) throw WEBDAR_BUG; valid_source(); if(req.try_reading(*source)) { url = req.get_uri(); return true; } else return false; } const request & parser::get_request() { if(!answered) throw WEBDAR_BUG; // last request has not been answred valid_source(); answered = false; try { req.clear(); req.read(*source); } catch(exception_signal & e) { throw; } catch(exception_input & e) { answer err; string tmp; err.set_status(e.get_error_code()); err.set_reason(e.get_message()); send_answer(err); throw; } catch(exception_base & e) { source.reset(); throw; } valid_source(); // avoid returning a empty request when the socket is closed return req; } void parser::send_answer(answer & ans) { if(answered) throw WEBDAR_BUG; valid_source(); try { if(!ans.is_valid()) throw WEBDAR_BUG; checks_main(req, ans); ans.write(*source); answered = true; req.clear(); } catch(exception_bug & e) { throw; } catch(exception_base & e) { source.reset(); answered = true; // no throw } } void parser::checks_main(const request & req, answer & ans) { checks_webdar(req, ans); checks_rfc1945(req, ans); } void parser::checks_webdar(const request & req, answer & ans) { string val; // responding with the same version as the one used in the request ans.set_version(req.get_maj_version(), req.get_min_version()); // adding a Date header if missing if(!ans.find_attribute(HDR_DATE, val)) ans.set_attribute(HDR_DATE, date().get_canonical_format()); // adding an Expires header if missing if(!ans.find_attribute(HDR_EXPIRES, val)) ans.set_attribute(HDR_EXPIRES, date().get_canonical_format()); // adding a default text/html content type if not specified if(ans.get_body().size() > 0) { if(!ans.find_attribute(HDR_CONTENT_TYPE, val)) ans.set_attribute(HDR_CONTENT_TYPE, "text/html"); } } void parser::checks_rfc1945(const request & req, answer & ans) { string val; unsigned int code = ans.get_status_code(); // HEAD requests must not be answered with a body if(req.get_method() == "HEAD") ans.drop_body_keep_header(); // Conditional GET if(req.get_method() == "GET" && req.find_attribute(HDR_IF_MODIFIED_SINCE, val)) { try { date when = val; string lastmod; if(ans.find_attribute(HDR_LAST_MODIFIED, lastmod)) { date last = lastmod; if(last <= when && ans.get_status_code() == STATUS_CODE_OK) { ans.set_status(STATUS_CODE_NOT_MODIFIED); ans.add_body(""); // we can drop the body from the answer // as it has not been modifed since last // seen by this client } } } catch(exception_bug & e) { throw; } catch(exception_range & e) { // ignore If-modified-Since request header in case of error // that's it: inconditionnaly send the answer's body } } // RFC 1945 defines that several status code must not own a body in the answer if(code == STATUS_CODE_NO_CONTENT || code == STATUS_CODE_NOT_MODIFIED || (code > 99 && code < 200)) { if(ans.get_body().size() > 0) throw WEBDAR_BUG; // these responses must not include a body } } webdar-1.0.0/src/html_statistics.hpp0000644000175000017520000001055214773727236014442 00000000000000/*********************************************************************/ // webdar - a web server and interface program to libdar // Copyright (C) 2013-2025 Denis Corbin // // This file is part of Webdar // // Webdar is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // Webdar is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Webdar. If not, see // //---- // to contact the author: dar.linux@free.fr /*********************************************************************/ #ifndef HTML_STATISTICS_HPP #define HTML_STATISTICS_HPP // C system header files #include "my_config.h" extern "C" { } // C++ system header files #include #include // webdar headers #include "body_builder.hpp" #include "html_table.hpp" #include "html_text.hpp" /// html component to display libdar returned statistics object class html_statistics : public body_builder { public: html_statistics(); html_statistics(const html_statistics & ref) = delete; html_statistics(html_statistics && ref) noexcept = delete; html_statistics operator = (const html_statistics & ref) = delete; html_statistics operator = (html_statistics && ref) noexcept = delete; ~html_statistics() { unbuild(); }; void clear_counters(); void clear_labels(); // fields that do not get a label are not shown void set_treated_label(const std::string & label) { treated_lbl.clear(); treated_lbl.add_text(0, label); unbuild(); }; void set_hard_links_label(const std::string & label) { hard_links_lbl.clear(); hard_links_lbl.add_text(0, label); unbuild(); }; void set_skipped_label(const std::string & label) { skipped_lbl.clear(); skipped_lbl.add_text(0, label); unbuild(); }; void set_ignored_label(const std::string & label) { ignored_lbl.clear(); ignored_lbl.add_text(0, label); unbuild(); }; void set_tooold_label(const std::string & label) { tooold_lbl.clear(); tooold_lbl.add_text(0, label); unbuild(); }; void set_errored_label(const std::string & label) { errored_lbl.clear(); errored_lbl.add_text(0, label); unbuild(); }; void set_deleted_label(const std::string & label) { deleted_lbl.clear(); deleted_lbl.add_text(0, label); unbuild(); }; void set_ea_treated_label(const std::string & label) { ea_treated_lbl.clear(); ea_treated_lbl.add_text(0, label); unbuild(); }; void set_byte_amount_label(const std::string & label) { byte_amount_lbl.clear(); byte_amount_lbl.add_text(0, label); unbuild(); }; void set_total_label(const std::string & label) { total_lbl.clear(); total_lbl.add_text(0, label); unbuild(); }; /// the address of the object to be updated by libdar libdar::statistics *get_libdar_statistics() { return & stats; }; protected: /// inherited from body_builder class /// /// \note only fields that got a label (using a set_*_label() method) /// are displayed. virtual std::string inherited_get_body_part(const chemin & path, const request & req) override; // inherited from body_builder virtual void new_css_library_available() override; private: libdar::statistics stats; html_table *table; html_text treated_lbl; html_text hard_links_lbl; html_text skipped_lbl; html_text ignored_lbl; html_text tooold_lbl; html_text errored_lbl; html_text deleted_lbl; html_text ea_treated_lbl; html_text byte_amount_lbl; html_text total_lbl; html_text treated_count; html_text hard_links_count; html_text skipped_count; html_text ignored_count; html_text tooold_count; html_text errored_count; html_text deleted_count; html_text ea_treated_count; html_text byte_amount_count; html_text total_count; /// build the html body_builder tree using only labelled field void build(); /// destroy the table to force a build() at the next cycle void unbuild(); /// update html filed from libdar "stats" data structure void update_html_counters(); }; #endif webdar-1.0.0/src/html_void.cpp0000644000175000017520000000365214773727236013207 00000000000000/*********************************************************************/ // webdar - a web server and interface program to libdar // Copyright (C) 2013-2025 Denis Corbin // // This file is part of Webdar // // Webdar is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // Webdar is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Webdar. If not, see // //---- // to contact the author: dar.linux@free.fr /*********************************************************************/ // C system header files extern "C" { } // C++ system header files // webdar headers // #include "html_void.hpp" using namespace std; string html_void::inherited_get_body_part(const chemin & path, const request & req) { return get_body_part_from_all_children(path, req); } void html_void::my_visibility_has_changed() { html_void_parent_notifier* parent = parent_notifier(); if(parent != nullptr) parent->void_child_visibility_has_changed(this); } void html_void::has_adopted(body_builder *obj) { html_void_parent_notifier* parent = parent_notifier(); if(parent != nullptr) parent->void_child_has_adopted(this, obj); } void html_void::will_foresake(body_builder *obj) { html_void_parent_notifier* parent = parent_notifier(); if(parent != nullptr) parent->void_child_will_foresake(this, obj); } html_void_parent_notifier* html_void::parent_notifier() { return dynamic_cast(get_parent()); } webdar-1.0.0/src/html_form_input.hpp0000644000175000017520000001515515035005127014412 00000000000000/*********************************************************************/ // webdar - a web server and interface program to libdar // Copyright (C) 2013-2025 Denis Corbin // // This file is part of Webdar // // Webdar is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // Webdar is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Webdar. If not, see // //---- // to contact the author: dar.linux@free.fr /*********************************************************************/ #ifndef HTML_FORM_INPUT_HPP #define HTML_FORM_INPUT_HPP // C system header files #include "my_config.h" extern "C" { } // C++ system header files #include // webdar headers #include "body_builder.hpp" #include "events.hpp" #include "jsoner.hpp" #include "html_text.hpp" #include "html_label.hpp" /// class html_form_input implements HTML input feature /// it is expected to be adopted by an html_form directory /// or through an html_form_fieldset, to provide a mean for /// user to provide information. /// Depdending on the type set in the constructor argument, /// this object is visually a text window, a check box or /// let the user select a file on his local directory (local /// from browser point of view). class html_form_input : public body_builder, public events, public jsoner { public: static const std::string changed; enum input_type { text, password, number, range, check, file }; html_form_input(const std::string & label, ///< label beside the input input_type type, ///< type of input const std::string & initial_value, ///< for check set empty string for unchecked, anything else for checked const std::string & size, ///< the size in the HTML component is not resizeable use "" to not use it const std::string & css_class ///< a CSS class with "max-width/width/min-width" properties *is* reactive and better than size ); html_form_input(const html_form_input & ref) = default; html_form_input(html_form_input && ref) noexcept = delete; html_form_input & operator = (const html_form_input & ref) = default; html_form_input & operator = (html_form_input && ref) noexcept = delete; ~html_form_input() = default; void set_range(const libdar::infinint & min, const libdar::infinint & max); void set_min_only(const libdar::infinint & min); void set_max_only(const libdar::infinint & max); void change_label(const std::string & label); void change_type(input_type type); void set_value(const std::string & val); void set_value_as_bool(bool val); void set_value_as_int(int val); const std::string & get_value() const { return x_init; }; bool get_value_as_bool() const { return !x_init.empty(); }; //< for checkbox empty string means unchecked, anything else checked int get_value_as_int() const; /// set whether the HTML control is enable or disabled void set_enabled(bool val); /// apply css to the box (text box if checkbox, but not to the label) /// \note to remove the previously applied CSS class, give an empty string as argument void box_set_css_class(const std::string & val) { if(box_css != val) my_body_part_has_changed(); box_css = val; }; /// get the current css class applied to the box only const std::string & box_get_css_class() const { return box_css; }; /// change the name of the event generated when this control changes /// \param[in] name must not be an empty string /// \note all actors already recorded on the changed event will be kept /// registered on this new event name. The old event will no more be triggered /// In consequences actor should be aware of the event name change asked to this /// component here. /// \note this call can be used any number of time, all actors will be kept void set_change_event_name(const std::string & name); /// get the event name used when the component changes std::string get_event_name() const { return modif_change.empty()? changed: modif_change; }; /// inherited from jsoner virtual void load_json(const json & source) override; /// inherited from jsoner virtual json save_json() const override; /// inherited from jsoner virtual void clear_json() override; /// set tooltip for the html label of the input form void set_tooltip(const std::string & msg) { hlabel.set_tooltip(msg); }; protected: /// inherited from body_builder virtual std::string inherited_get_body_part(const chemin & path, const request & req) override; /// inherited from body_builder virtual void new_css_library_available() override; private: bool enabled; ///< whether the control is enabled or disabled std::string x_type; ///< type of HTML input field std::string x_init; ///< current value / initial value of the field std::string x_size; ///< width of the field in number of characterds std::string x_min; ///< minimum value of the field (for type = number) std::string x_max; ///< maximum value of the field (for type = number) bool value_set; ///< record that a manual set_value has been done and POST request received from body_part should not overwrite the change std::string box_css; ///< css class applied to the box if non an empty string std::string modif_change; ///< name of the event "changed" to use, if set to an empty string default behavior is used void my_act() { act(modif_change.empty() ? changed: modif_change); }; void check_min_max_change(const std::string & next_min, const std::string & next_max); std::string generate_input(const std::string & csscl, const std::string & id); html_text new_line; html_label hlabel; static std::string string_for_type(input_type type); static constexpr const unsigned int format_version = 1; static constexpr const char* myclass_id = "html_form_input"; static constexpr const char* jlabel_init = "value"; static const std::string css_label; static const std::string css_input; static const std::string css_check; static const std::string css_checktitle; static const std::string css_vertical_space; static const std::string css_display_no_CR; }; #endif webdar-1.0.0/src/events.cpp0000644000175000017520000000766714773727236012540 00000000000000/*********************************************************************/ // webdar - a web server and interface program to libdar // Copyright (C) 2013-2025 Denis Corbin // // This file is part of Webdar // // Webdar is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // Webdar is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Webdar. If not, see // //---- // to contact the author: dar.linux@free.fr /*********************************************************************/ // C system header files #include "my_config.h" extern "C" { } // C++ system header files // webdar headers #include "exceptions.hpp" // #include "events.hpp" using namespace std; events::events(const events & ref) { map >::const_iterator it = ref.carte.begin(); while(it != ref.carte.end()) { register_name(it->first); ++it; } } events & events::operator = (events && ref) noexcept(false) { static_cast(*this) = std::move(static_cast(ref)); carte = std::move(ref.carte); // invoking the move assignment for std::map return *this; } void events::record_actor_on_event(actor *ptr, const string & name) { map < string , list >::iterator it = carte.find(name); if(it == carte.end()) throw WEBDAR_BUG; // unknown event ! if(ptr == nullptr) throw WEBDAR_BUG; // shouldn't we first check the ptr actor is not already // registered on this object, before adding it to the list? it->second.push_back(ptr); try { peer_with(ptr); } catch(...) { // nothing to do, this failure just indicates // that the peer is already recorded on another event on // that events objects } } void events::broken_peering_from(reference *obj) { map< string, list >::iterator it = carte.begin(); while(it != carte.end()) { list::iterator ptr = it->second.begin(); while(ptr != it->second.end()) { if(*ptr == nullptr) throw WEBDAR_BUG; if(*ptr == obj) ptr = it->second.erase(ptr); else ++ptr; } ++it; } } void events::register_name(const string & name) { map < string , list >::iterator it = carte.find(name); if(it != carte.end()) throw WEBDAR_BUG; // events already registered else { list tmp; // we start with an empty list of actors... carte[name] = tmp; } } void events::unregister_name(const string & name) { map< string , list >::iterator it = carte.find(name); if(it == carte.end()) throw WEBDAR_BUG; // unknown event! for(list::iterator ptr = it->second.begin(); ptr != it->second.end(); ++ptr) break_peer_with(*ptr); carte.erase(it); } void events::rename_name(const string & old_name, const string & new_name) { map< string, list >::iterator it = carte.find(new_name); if(old_name == new_name) return; // nothing to do if(it != carte.end()) throw WEBDAR_BUG; // an event of that new name already exists it = carte.find(old_name); if(it == carte.end()) throw WEBDAR_BUG; // unknown event name to be renamed carte[new_name] = it->second; carte.erase(it); } void events::act(const string & name) { map < string , list >::iterator it = carte.find(name); list::iterator ptr; if(it == carte.end()) throw WEBDAR_BUG; // unknown event! for(ptr = it->second.begin(); ptr != it->second.end(); ++ptr) { if(*ptr == nullptr) throw WEBDAR_BUG; (*ptr)->on_event(name); } } webdar-1.0.0/src/tokens.hpp0000644000175000017520000001210314773727236012521 00000000000000/*********************************************************************/ // webdar - a web server and interface program to libdar // Copyright (C) 2013-2025 Denis Corbin // // This file is part of Webdar // // Webdar is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // Webdar is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Webdar. If not, see // //---- // to contact the author: dar.linux@free.fr /*********************************************************************/ #ifndef TOKENS_HPP #define TOKENS_HPP #include "my_config.h" // C system header files extern "C" { } // C++ system header files #include // webdar headers // WEBDAR Version #ifndef WEBDAR_VERSION #define WEBDAR_VERSION "unknown (BUG at compilation time?)" #endif // DAR archive extension extern const char* EXTENSION; // the different answer codes const unsigned int STATUS_CODE_CONTINUE = 101; const unsigned int STATUS_CODE_SWITCHING_PROTOCOLS = 101; const unsigned int STATUS_CODE_OK = 200; const unsigned int STATUS_CODE_CREATED = 201; const unsigned int STATUS_CODE_ACCEPTED = 202; const unsigned int STATUS_CODE_NON_AUTHORITATIVE_INFORMATION = 203; const unsigned int STATUS_CODE_NO_CONTENT = 204; const unsigned int STATUS_CODE_RESET_CONTENT = 205; const unsigned int STATUS_CODE_PARTIAL_CONTENT = 206; const unsigned int STATUS_CODE_MULTIPLE_CHOICES = 300; const unsigned int STATUS_CODE_MOVED_PERMANENTLY = 301; const unsigned int STATUS_CODE_MOVED_TEMPORARILY = 302; const unsigned int STATUS_CODE_NOT_MODIFIED = 304; const unsigned int STATUS_CODE_USE_PROXY = 305; const unsigned int STATUS_CODE_BAD_REQUEST = 400; const unsigned int STATUS_CODE_UNAUTHORIZED = 401; const unsigned int STATUS_CODE_FORBIDDEN = 403; const unsigned int STATUS_CODE_NOT_FOUND = 404; const unsigned int STATUS_CODE_METHOD_NOT_ALLOWED = 405; const unsigned int STATUS_CODE_NOT_ACCEPTABLE = 406; const unsigned int STATUS_CODE_PROXY_AUTHENTICATION_REQUIRED = 407; const unsigned int STATUS_CODE_REQUEST_TIME_OUT = 408; const unsigned int STATUS_CODE_CONFLICT = 409; const unsigned int STATUS_CODE_GONE = 410; const unsigned int STATUS_CODE_LENGTH_REQUIRED = 411; const unsigned int STATUS_CODE_PRECONDITION_FAILED = 412; const unsigned int STATUS_CODE_REQUEST_ENTITY_TOO_LARGE = 413; const unsigned int STATUS_CODE_REQUEST_URI_TOO_LARGE = 414; const unsigned int STATUS_CODE_UNSUPPORTED_MEDIA_TYPE = 415; const unsigned int STATUS_CODE_EXPECTATION_FAILED = 417; const unsigned int STATUS_CODE_INTERNAL_SERVER_ERROR = 500; const unsigned int STATUS_CODE_NOT_IMPLEMENTED = 501; const unsigned int STATUS_CODE_BAD_GATEWAY = 502; const unsigned int STATUS_CODE_SERVICE_UNAVAILABLE = 503; const unsigned int STATUS_CODE_GATEWAY_TIME_OUT = 504; const unsigned int STATUS_CODE_HTTP_VERSION_NOT_SUPPORTED = 505; // HTTP headers extern const char* HDR_CONTENT_LENGTH; extern const char* HDR_IF_MODIFIED_SINCE; extern const char* HDR_LAST_MODIFIED; extern const char* HDR_CONTENT_TYPE; extern const char* HDR_DATE; extern const char* HDR_EXPIRES; extern const char* HDR_SERVER; extern const char* HDR_WWW_AUTHENTICATE; extern const char* HDR_AUTHORIZATION; extern const char* HDR_SET_COOKIE; extern const char* HDR_COOKIE; extern const char* HDR_LOCATION; // HTTP header values extern const char* VAL_CONTENT_TYPE_FORM; // HTML CSS colors by fonction extern const char* COLOR_BACK; extern const char* COLOR_TEXT; extern const char* COLOR_PADBACK; extern const char* COLOR_PADFRONT; extern const char* COLOR_PADBORD; extern const char* COLOR_MENU_FRONT_ON; extern const char* COLOR_MENU_BACK_ON; extern const char* COLOR_MENU_BORDER_ON; extern const char* COLOR_MENU_FRONT_OFF; extern const char* COLOR_MENU_BACK_OFF; extern const char* COLOR_MENU_BORDER_OFF; extern const char* COLOR_MENU_FRONT_GREY; extern const char* COLOR_MENU_BACK_GREY; extern const char* COLOR_MENU_BORDER_GREY; extern const char* COLOR_MENU_FRONT_HOVER_ON; extern const char* COLOR_MENU_FRONT_HOVER_OFF; extern const char* COLOR_MENU_FRONT_HOVER_GREY; extern const char* COLOR_MENU_FRONT_ACTIVE_ON; extern const char* COLOR_MENU_FRONT_ACTIVE_OFF; extern const char* COLOR_MENU_FRONT_ACTIVE_GREY; extern const char* COLOR_TOPBAR_BACK; extern const char* COLOR_ARED; // almost red extern const char* RED; extern const char* WHITE; extern const char* GREEN; extern const char* BLACK; extern const char* COLOR_DAR_GREYBLUE; extern const char* STATIC_PATH_ID; extern const char* STATIC_OBJ_LICENSING; extern const char* STATIC_LOGO; extern const char* STATIC_TITLE_LOGO; extern const char* STATIC_FAVICON; // Webdar chosen min & max values extern const libdar::U_I tokens_min_compr_bs; #endif webdar-1.0.0/src/css_class.cpp0000644000175000017520000001204215035175232013151 00000000000000/*********************************************************************/ // webdar - a web server and interface program to libdar // Copyright (C) 2013-2025 Denis Corbin // // This file is part of Webdar // // Webdar is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // Webdar is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Webdar. If not, see // //---- // to contact the author: dar.linux@free.fr /*********************************************************************/ // C system header files #include "my_config.h" extern "C" { } // C++ system header files // webdar headers #include "exceptions.hpp" // #include "css_class.hpp" using namespace std; css_class::css_class(const string & name): class_name(name) { } css_class::css_class(const string & name, const css & ref) { if(name.empty()) throw WEBDAR_BUG; class_name = name; class_value = ref; } void css_class::set_selector(selector_type sel, const css & ref, const string & descendant) { sujet cible(sel, descendant); map, css>::iterator it = selectors.find(cible); if(it == selectors.end()) selectors[cible] = ref; else throw WEBDAR_BUG; } void css_class::clear_selector(selector_type sel, const string & descendant) { sujet cible(sel, descendant); map, css>::iterator it = selectors.find(cible); if(it != selectors.end()) selectors.erase(sel); // else we ignore, the selector is not present } void css_class::set_pseudo_element(pseudo_element_type pe, const css & ref, const string & descendant) { sujet cible(pe, descendant); map, css>::iterator it = pseudo_elements.find(cible); if(it == pseudo_elements.end()) pseudo_elements[cible] = ref; else throw WEBDAR_BUG; } void css_class::clear_pseudo_element(pseudo_element_type pe, const string & descendant) { sujet cible(pe, descendant); map, css>::iterator it = pseudo_elements.find(cible); if(it != pseudo_elements.end()) pseudo_elements.erase(pe); // else we ignore, the selector is not present } string css_class::get_definition() const { string ret; map, css>::const_iterator it = selectors.begin(); map, css>::const_iterator peit = pseudo_elements.begin(); string raw_val = class_value.css_get_raw_string(); string sub; if(class_name.empty()) throw WEBDAR_BUG; // name is missing if(raw_val.empty() && selectors.empty() && pseudo_elements.empty()) return ""; if(! raw_val.empty()) ret += "*." + class_name + " { " + raw_val + " }\n"; while(it != selectors.end()) { if(it->first.subcomp.empty()) sub = ""; else sub = " " + it->first.subcomp; raw_val = it->second.css_get_raw_string(); if(raw_val.empty()) throw WEBDAR_BUG; // why adding a css if it has no properties at all! ret += "*." + class_name + ":" + get_selector_name(it->first.type) + sub + " { " + raw_val + " }\n"; ++it; } while(peit != pseudo_elements.end()) { if(peit->first.subcomp.empty()) sub = ""; else sub = " " + peit->first.subcomp; raw_val = peit->second.css_get_raw_string(); if(raw_val.empty()) throw WEBDAR_BUG; // same as above for selectors / pseudo classes ret += "*." + class_name + "::" + get_pseudo_element_name(peit->first.type) + sub + " { " + raw_val + " }\n"; ++peit; } return ret; } string css_class::get_selector_name(selector_type sel) { switch(sel) { case active: return "active"; case checked: return "checked"; case disabled: return "disabled"; case enabled: return "enabled"; case focus: return "focus"; case hover: return "hover"; case link: return "link"; case in_range: return "in-range"; case invalid: return "invalid"; case out_of_range: return "out-of-range"; case read_only: return "read-only"; case read_write: return "read-write"; case root: return "root"; case target: return "target"; case valid: return "valid"; case visited: return "visited"; default: throw WEBDAR_BUG; } } string css_class::get_pseudo_element_name(pseudo_element_type pe) { switch(pe) { case first_line: return "first-line"; case first_letter: return "first-letter"; case before: return "before"; case after: return "after"; case marker: return "marker"; case selection: return "selection"; default: throw WEBDAR_BUG; } } webdar-1.0.0/src/html_static_url.cpp0000644000175000017520000000343015035706415014375 00000000000000/*********************************************************************/ // webdar - a web server and interface program to libdar // Copyright (C) 2013-2025 Denis Corbin // // This file is part of Webdar // // Webdar is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // Webdar is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Webdar. If not, see // //---- // to contact the author: dar.linux@free.fr /*********************************************************************/ // C system header files #include "my_config.h" extern "C" { } // C++ system header files // webdar headers // #include "html_static_url.hpp" using namespace std; html_static_url::html_static_url(const string & url, const string & label): html_url(url) { faked.reset(new (nothrow) central_report_stdout(crit)); if(!faked) throw exception_memory(); adopt(&child); change_label(label); } void html_static_url::change_label(const string & newlabel) { if(x_label != newlabel) { x_label = newlabel; child.clear(); child.add_text(0, x_label); my_body_part_has_changed(); } } string html_static_url::get_body_part() const { chemin path; request req(faked); req.fake_valid_request(); return const_cast(this)->html_url::get_body_part(path, req); } webdar-1.0.0/src/central_report.cpp0000644000175000017520000001001114773727236014230 00000000000000/*********************************************************************/ // webdar - a web server and interface program to libdar // Copyright (C) 2013-2025 Denis Corbin // // This file is part of Webdar // // Webdar is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // Webdar is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Webdar. If not, see // //---- // to contact the author: dar.linux@free.fr /*********************************************************************/ // webdar headers #include "webdar_tools.hpp" #include "exceptions.hpp" // #include "central_report.hpp" static const char *priority2string(priority_t prio); static int priority2syslogprio(priority_t prio); using namespace std; ///////////////////////////////////////////////////////////////////////////////////////////////////// libthreadar::mutex central_report::access; void central_report::report(priority_t priority, const string & message) { if(priority > min) return; // not logging "below" priority min access.lock(); try { inherited_report(priority, message); } catch(...) { access.unlock(); throw; } access.unlock(); } ///////////////////////////////////////////////////////////////////////////////////////////////////// void central_report_stdout::inherited_report(priority_t priority, const string & message) { cout << "[thead " << pthread_self() << "][" << priority2string(priority) << "] " << message << endl; } ///////////////////////////////////////////////////////////////////////////////////////////////////// unsigned int central_report_syslog::num_obj = 0; libthreadar::mutex central_report_syslog::num_obj_mod; central_report_syslog::central_report_syslog(priority_t min_logged, const string & fixed_label, int facility): central_report(min_logged) { num_obj_mod.lock(); try { if(num_obj > 0) throw WEBDAR_BUG; else { label = fixed_label; openlog(label.c_str(), LOG_NOWAIT, facility); ++num_obj; } } catch(...) { num_obj_mod.unlock(); throw; } num_obj_mod.unlock(); } central_report_syslog::~central_report_syslog() noexcept(false) { num_obj_mod.lock(); try { closelog(); if(num_obj == 0) throw WEBDAR_BUG; else --num_obj; } catch(...) { num_obj_mod.unlock(); throw; } num_obj_mod.unlock(); } void central_report_syslog::inherited_report(priority_t priority, const string & message) { string tmp = string("[") + label + "][" + webdar_tools_convert_to_string(pthread_self()) +"] " + message; syslog(priority2syslogprio(priority), "%s", tmp.c_str()); } ///////////////////////////////////////////////////////////////////////////////////////////////////// static const char *priority2string(priority_t prio) { const char *ret = nullptr; switch(prio) { case crit: ret = "critical"; break; case err: ret = "error"; break; case warning: ret = "warning"; break; case notice: ret = "notice"; break; case info: ret = "information"; break; case debug: ret = "debug"; break; default: throw WEBDAR_BUG; } if(ret == nullptr) throw WEBDAR_BUG; return ret; } static int priority2syslogprio(priority_t prio) { int ret = 0; switch(prio) { case crit: ret = LOG_CRIT; break; case err: ret = LOG_ERR; break; case warning: ret = LOG_WARNING; break; case notice: ret = LOG_NOTICE; break; case info: ret = LOG_INFO; break; case debug: ret = LOG_DEBUG; break; default: throw WEBDAR_BUG; } return ret; } webdar-1.0.0/src/html_div.cpp0000644000175000017520000000323415035735306013011 00000000000000/*********************************************************************/ // webdar - a web server and interface program to libdar // Copyright (C) 2013-2025 Denis Corbin // // This file is part of Webdar // // Webdar is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // Webdar is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Webdar. If not, see // //---- // to contact the author: dar.linux@free.fr /*********************************************************************/ // C system header files #include "my_config.h" extern "C" { } // C++ system header files // webdar headers // #include "html_div.hpp" using namespace std; string html_div::inherited_get_body_part(const chemin & path, const request & req) { string ret; string cssdef = get_css_classes(); string sub = get_body_part_from_children_as_a_block(path, req); if(cssdef.empty()) if(sub.empty()) ret = ""; else ret = "
\n" + sub + get_tooltip_body_part() + "
\n"; else // cssdef not empty if(sub.empty()) ret = "
\n"; else ret = "
\n" + sub + get_tooltip_body_part() + "
\n"; return ret; } webdar-1.0.0/src/actor.hpp0000644000175000017520000000557514773727236012345 00000000000000/*********************************************************************/ // webdar - a web server and interface program to libdar // Copyright (C) 2013-2025 Denis Corbin // // This file is part of Webdar // // Webdar is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // Webdar is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Webdar. If not, see // //---- // to contact the author: dar.linux@free.fr /*********************************************************************/ #ifndef ACTOR_HPP #define ACTOR_HPP // C system header files #include "my_config.h" extern "C" { } // C++ system header files #include // webdar headers #include "reference.hpp" /// \file actor.hpp defines actor class /// /// actor links to events and get triggered upon certain events /// an actor object must register for one or more named event of a events object /// (using the events::record_actor_on_event() method) /// (or of different events objects) to be triggered by a named event /// /// when a named event occurs the actor is triggered calling its on_event() method /// having the name of the event passed as argument /// class of object that are pointed/triggered to by others /// and that informs these pointers about their imminent death in order /// to be removed from the pointed objects list class actor : public reference { public: actor() = default; actor(const actor & ref) = default; actor(actor && ref) noexcept(false) = default; actor & operator = (const actor & ref) = default; actor & operator = (actor && ref) noexcept(false); virtual ~actor() {}; /// implementation in inherited class of the action triggered by the event given in argument virtual void on_event(const std::string & event_name) = 0; }; // Note: both class actor and events inherit from the same class "reference" // It is possible that a class inherit from both actor and events, being an // actor with certain peers and a events for other peers. Having non virtual // inheritance for actor and events in relation to class reference would not // be a problem, as it would lead such object to have two parent reference // objects one containing the peer with which it is actor, and another with // which it is event. However, as both type of relation are forever, having // a single base for both roles is possible. It also reduces a bit memory // requirement. #endif webdar-1.0.0/src/html_form_sig_block_size.cpp0000644000175000017520000002772215036444713016250 00000000000000/*********************************************************************/ // webdar - a web server and interface program to libdar // Copyright (C) 2013-2025 Denis Corbin // // This file is part of Webdar // // Webdar is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // Webdar is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Webdar. If not, see // //---- // to contact the author: dar.linux@free.fr /*********************************************************************/ // C system header files #include "my_config.h" extern "C" { } // C++ system header files #include // webdar headers #include "webdar_css_style.hpp" #include "webdar_tools.hpp" #include "tooltip_messages.hpp" // #include "html_form_sig_block_size.hpp" using namespace std; const string html_form_sig_block_size::changed = "hfsbs_changed"; html_form_sig_block_size::html_form_sig_block_size(): delta_sig_min_size("Avoid calculating delta signature for file smaller than", 0, "30"), fs_function("Function used to derive delta signature block size from the file size to sign"), multiply("Multicative factor", html_form_input::number, "1", "10", ""), divisor("Divisor factor", html_form_input::number, "1", "10", ""), min_size("Minimum block size", 1, "10"), max_size("Maximum block size (set to zero to disable max size)", 1, "10"), ignore_events(false) { // components setup function.add_choice("fixed","Fixed value of 1"); function.add_choice("log2", "Binary logarithm of the file size"); function.add_choice("root3", "Cube root of the file size"); function.add_choice("root2", "Square root of the file size"); function.add_choice("linear", "File size (linear)"); multiply.set_min_only(1); divisor.set_min_only(1); min_size.set_min_only(libdar::infinint(RS_DEFAULT_BLOCK_LEN)); max_size.set_min_only(0); // adoption tree adopt(&delta_sig_min_size); adopt(&summary_f); adopt(&summary_l); fs_function.adopt(&function); adopt(&fs_function); adopt(&multiply); adopt(&divisor); adopt(&min_size); adopt(&max_size); // events delta_sig_min_size.record_actor_on_event(this, html_form_input_unit::changed); function.record_actor_on_event(this, html_form_radio::changed); multiply.record_actor_on_event(this, html_form_input::changed); divisor.record_actor_on_event(this, html_form_input::changed); min_size.record_actor_on_event(this, html_form_input_unit::changed); max_size.record_actor_on_event(this, html_form_input_unit::changed); register_name(changed); // initial value settings clear_json(); // csss summary_f.add_css_class(webdar_css_style::text_bold); multiply.add_css_class(webdar_css_style::width_100vw_8em); divisor.add_css_class(webdar_css_style::width_100vw_8em); // tooltips delta_sig_min_size.set_tooltip(TOOLTIP_HFSB_DELTA); fs_function.set_tooltip(TOOLTIP_HFSB_FUNCTION); function.set_tooltip(0, TOOLTIP_HFSB_FUNCTION0); function.set_tooltip(1, TOOLTIP_HFSB_FUNCTION1); function.set_tooltip(2, TOOLTIP_HFSB_FUNCTION2); function.set_tooltip(3, TOOLTIP_HFSB_FUNCTION3); function.set_tooltip(4, TOOLTIP_HFSB_FUNCTION4); multiply.set_tooltip(TOOLTIP_HFSB_MULTIPLY); divisor.set_tooltip(TOOLTIP_HFSB_DIVISOR); min_size.set_tooltip(TOOLTIP_HFSB_MIN_SIZE); max_size.set_tooltip(TOOLTIP_HFSB_MAX_SIZE); } void html_form_sig_block_size::set_value(const libdar::delta_sig_block_size & val) { switch(val.fs_function) { case libdar::delta_sig_block_size::fixed: function.set_selected_num(0); break; case libdar::delta_sig_block_size::log2: function.set_selected_num(1); break; case libdar::delta_sig_block_size::root3: function.set_selected_num(2); break; case libdar::delta_sig_block_size::root2: function.set_selected_num(3); break; case libdar::delta_sig_block_size::linear: function.set_selected_num(4); break; default: throw WEBDAR_BUG; } multiply.set_value_as_int(webdar_tools_convert_from_infinint(val.multiplier, string("Error while setting min size"))); divisor.set_value_as_int(webdar_tools_convert_from_infinint(val.divisor, string("Error while setting max size"))); min_size.set_value_as_infinint(libdar::infinint(val.min_block_len)); max_size.set_value_as_infinint(libdar::infinint(val.max_block_len)); } libdar::delta_sig_block_size html_form_sig_block_size::get_value() const { libdar::delta_sig_block_size ret; switch(function.get_selected_num()) { case 0: ret.fs_function = libdar::delta_sig_block_size::fixed; break; case 1: ret.fs_function = libdar::delta_sig_block_size::log2; break; case 2: ret.fs_function = libdar::delta_sig_block_size::root3; break; case 3: ret.fs_function = libdar::delta_sig_block_size::root2; break; case 4: ret.fs_function = libdar::delta_sig_block_size::linear; break; default: throw WEBDAR_BUG; } ret.multiplier = libdar::infinint(multiply.get_value_as_int()); ret.divisor = libdar::infinint(divisor.get_value_as_int()); ret.min_block_len = webdar_tools_convert_from_infinint(min_size.get_value_as_infinint(), string("Error while converting min size")); ret.max_block_len = webdar_tools_convert_from_infinint(max_size.get_value_as_infinint(), string("Error while converting max size")); return ret; } void html_form_sig_block_size::load_json(const json & source) { try { unsigned int version; string class_id; json config = unwrap_config_from_json_header(source, version, class_id); if(class_id != myclass_id) throw exception_range(libdar::tools_printf("Unexpected class_id in json data, found %s while expecting %s", class_id.c_str(), myclass_id)); if(version > format_version) throw exception_range(libdar::tools_printf("Json format version too hight for %s, upgrade your webdar software", myclass_id)); ignore_events = true; try { delta_sig_min_size.set_value_as_infinint(libdar::deci(config.at(jlabel_min_file_size)).computer()); function.set_selected_id_with_warning(config.at(jlabel_function), jlabel_function); multiply.set_value_as_int(config.at(jlabel_multiply)); divisor.set_value_as_int(config.at(jlabel_divisor)); min_size.set_value_as_infinint(libdar::deci(config.at(jlabel_min_size)).computer()); max_size.set_value_as_infinint(libdar::deci(config.at(jlabel_max_size)).computer()); } catch(...) { ignore_events = false; throw; } ignore_events = false; on_event(html_form_input::changed); } catch(json::exception & e) { throw exception_json(libdar::tools_printf("Error loading %s config", myclass_id), e); } } json html_form_sig_block_size::save_json() const { json ret; ret[jlabel_min_file_size] = libdar::deci(delta_sig_min_size.get_value_as_infinint()).human(); ret[jlabel_function] = function.get_selected_id(); ret[jlabel_multiply] = multiply.get_value_as_int(); ret[jlabel_divisor] = divisor.get_value_as_int(); ret[jlabel_min_size] = libdar::deci(min_size.get_value_as_infinint()).human(); ret[jlabel_max_size] = libdar::deci(max_size.get_value_as_infinint()).human(); return wrap_config_with_json_header(format_version, myclass_id, ret); } void html_form_sig_block_size::clear_json() { ignore_events = true; try { delta_sig_min_size.set_value_as_infinint(4*RS_DEFAULT_BLOCK_LEN); function.set_selected_id("root3"); min_size.set_value_as_infinint(libdar::infinint(RS_DEFAULT_BLOCK_LEN)); max_size.set_value_as_infinint(libdar::infinint(64*RS_DEFAULT_BLOCK_LEN)); } catch(...) { ignore_events = false; throw; } ignore_events = false; on_event(html_form_input::changed); } void html_form_sig_block_size::on_event(const string & event_name) { if(ignore_events) return; if(event_name == html_form_input::changed || event_name == html_form_radio::changed || event_name == html_form_input_unit::changed) { // check that min_size <= max_size libdar::infinint min = min_size.get_value_as_infinint(); libdar::infinint max = max_size.get_value_as_infinint(); if(max < min && ! max.is_zero()) { min_size.box_set_css_class(webdar_css_style::red_border); max_size.box_set_css_class(webdar_css_style::red_border); throw exception_range("Minimum block size should be less or equal than maximum block size"); } else { min_size.box_set_css_class(""); max_size.box_set_css_class(""); } make_summary(); act(changed); } else throw WEBDAR_BUG; } string html_form_sig_block_size::inherited_get_body_part(const chemin & path, const request & req) { return get_body_part_from_all_children(path, req); } void html_form_sig_block_size::new_css_library_available() { unique_ptr & csslib = lookup_css_library(); if(!csslib) throw WEBDAR_BUG; webdar_css_style::update_library(*csslib); } void html_form_sig_block_size::make_summary() { int multi = multiply.get_value_as_int(); int divi = divisor.get_value_as_int(); string ratio; summary_f.clear(); summary_f.add_nl(); summary_f.add_text(0, "block_size = "); if(divi != multi) { // yes we convert back to string the int obtained from string, // this gives more accuracy and show possible error of conversion // to the user: ratio = webdar_tools_convert_to_string(multi); if(divi > 1) ratio += " / " + webdar_tools_convert_to_string(divi); ratio += + " "; } // else we ignore divisor and multiply as their resulting ratio is 1 if(function.get_selected_num() == 0) { if(ratio.empty()) // the ratio is 1, thus we use the min_size summary_f.add_text(0, min_size.get_raw_value() + " " + min_size.get_unit_string()); else // need to find the max from min_size*min_unit and ratio { libdar::infinint minval = min_size.get_value_as_infinint(); libdar::infinint maxval = max_size.get_value_as_infinint(); libdar::infinint i_mult = libdar::infinint(multi); libdar::infinint i_divi = libdar::infinint(divi); if(i_mult < minval * i_divi) // thus: i_mult/i_divi < minval summary_f.add_text(0, min_size.get_raw_value() + " " + min_size.get_unit_string()); else if(i_mult < maxval * i_divi) // this i_mult/i_divi < maxval summary_f.add_text(0, ratio); else summary_f.add_text(0, max_size.get_raw_value() + " " + max_size.get_unit_string() + " o"); } summary_f.add_nl(); summary_f.add_nl(); summary_l.set_visible(false); } else { string func; switch(function.get_selected_num()) { case 0: // fixed throw WEBDAR_BUG; // treated appart just above case 1: // log2 func = "log2(filesize)"; break; case 2: // root3 func = "3filesize"; break; case 3: // root2 func = "√filesize"; break; case 4: // linear func = "filesize"; break; default: throw WEBDAR_BUG; } if(!ratio.empty()) summary_f.add_text(0, ratio + " * "); summary_f.add_text(0, func); summary_l.clear(); summary_l.add_nl(); summary_l.add_text(0, "with"); summary_l.add_text(0, min_size.get_raw_value() + " " + min_size.get_unit_string() + " ≤ block_size"); if(! max_size.get_value_as_infinint().is_zero()) summary_l.add_text(0, " ≤ " + max_size.get_raw_value() + " " + max_size.get_unit_string()); summary_l.add_nl(); summary_l.add_nl(); summary_l.set_visible(true); } } webdar-1.0.0/src/html_dir_tree.cpp0000644000175000017520000002726314773727236014047 00000000000000/*********************************************************************/ // webdar - a web server and interface program to libdar // Copyright (C) 2013-2025 Denis Corbin // // This file is part of Webdar // // Webdar is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // Webdar is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Webdar. If not, see // //---- // to contact the author: dar.linux@free.fr /*********************************************************************/ // C system header files #include "my_config.h" extern "C" { } // C++ system header files // webdar headers #include "tokens.hpp" #include "html_table.hpp" #include "html_text.hpp" #include "webdar_css_style.hpp" // #include "html_dir_tree.hpp" using namespace std; const string html_dir_tree::event_shrink = "html_dir_tree_shrink"; const string html_dir_tree::event_expand = "html_dir_tree_expand"; const string html_dir_tree::event_click = "html_dir_tree_click"; static constexpr const char* name_css_this = "hdt_this"; static constexpr const char* name_css_button = "html_dir_tree_button"; // applied to shrink/expand/nosubdir static constexpr const char* name_css_name = "html_dir_tree_name"; static constexpr const char* name_css_forsubdirs = "html_dir_tree_forsubdir"; static constexpr const char* name_css_contents = "html_dir_tree_contents"; static constexpr const char* name_css_contents_title = "html_dir_tree_contents_title"; static constexpr const char* name_css_contents_cells = "html_dir_tree_contents_cells"; html_dir_tree::html_dir_tree(const string & chemin): shrink("-", event_shrink), expand("+", event_expand), nosubdir(" ",""), name("", event_click), contents(11) { init(chemin); } html_dir_tree::html_dir_tree(const archive_init_list * ref, const string & chemin): shrink("-", event_shrink), expand("+", event_expand), nosubdir(" ",""), name("", event_click), contents(11) { init(chemin); set_source(ref); } void html_dir_tree::init(const string & chemin) { my_path = chemin; src = nullptr; info_read = false; has_sub = true; // until checked whether it has or not visibility_has_changed = false; focus_place = nullptr; focus_title = nullptr; if(chemin == "") name.change_label("<ROOT>"); else name.change_label(my_path.back()); // The body_builder tree line.adopt(&nosubdir); line.adopt(&shrink); line.adopt(&expand); line.adopt(&name); adopt(&line); adopt(&for_subdirs); // binding to events shrink.record_actor_on_event(this, event_shrink); expand.record_actor_on_event(this, event_expand); name.record_actor_on_event(this, event_click); // css add_css_class(name_css_this); webdar_css_style::small_button(shrink); webdar_css_style::small_button(expand); webdar_css_style::small_button(nosubdir); nosubdir.add_css_class(webdar_css_style::float_left); shrink.add_css_class(webdar_css_style::float_left); expand.add_css_class(webdar_css_style::float_left); line.add_css_class(webdar_css_style::float_left); name.add_css_class(webdar_css_style::float_left); name.url_add_css_class(name_css_name); name.add_css_class(webdar_css_style::text_shadow_dark); nosubdir.add_css_class(name_css_button); shrink.add_css_class(name_css_button); expand.add_css_class(name_css_button); for_subdirs.add_css_class(name_css_forsubdirs); contents.add_css_class(name_css_contents); contents.set_css_class_cells(name_css_contents_cells); contents.set_css_class_first_row(name_css_contents_title); // set initial visibility of objects on_event(event_shrink); // "contents" is not directly adopted and is filled with go_init_indent() } void html_dir_tree::clear() { vector::iterator it = subdirs.begin(); while(it != subdirs.end()) { if(*it != nullptr) { delete *it; *it = nullptr; } ++it; } subdirs.clear(); src = nullptr; info_read = false; has_sub = true; my_body_part_has_changed(); clear_contents(); } void html_dir_tree::set_source(const archive_init_list *ref) { if(ref == nullptr) throw WEBDAR_BUG; src = ref; if(!src->has_subdirectory(my_path.display(true))) go_hide(); else { nosubdir.set_visible(false); visibility_has_changed = true; my_body_part_has_changed(); } } void html_dir_tree::go_shrink() { if(has_sub) { visibility_has_changed = true; shrink.set_visible(false); expand.set_visible(true); for_subdirs.set_visible(false); } } void html_dir_tree::go_expand() { if(has_sub) { visibility_has_changed = true; shrink.set_visible(true); expand.set_visible(false); go_init_indent(); if(subdirs.size() > 0) for_subdirs.set_visible(true); } } void html_dir_tree::go_hide() { has_sub = false; shrink.set_visible(false); expand.set_visible(false); nosubdir.set_visible(true); for_subdirs.set_visible(false); visibility_has_changed = true; } void html_dir_tree::on_event(const string & event_name) { if(event_name == event_shrink) go_shrink(); else if(event_name == event_expand) go_expand(); else if(event_name == event_click) { if(focus_place != nullptr) focus_place->given_for_temporary_adoption(&contents); if(focus_title != nullptr) { focus_title->clear_children(); focus_title->adopt_static_html(my_path.display(false)); } go_init_indent(); } else throw WEBDAR_BUG; my_body_part_has_changed(); } string html_dir_tree::inherited_get_body_part(const chemin & path, const request & req) { string ret; do { visibility_has_changed = false; ret = html_div::inherited_get_body_part(path, req); } while(visibility_has_changed); return ret; } void html_dir_tree::go_init_indent() { if(!info_read) { info_read = true; if(src == nullptr) throw WEBDAR_BUG; vector tmp = src->get_children_in_table(my_path.display(true)); vector::const_iterator it = tmp.begin(); clear_contents(); while(it != tmp.end()) { if(it->is_dir()) { html_dir_tree *tmp_sub = new (nothrow) html_dir_tree(src, (my_path + chemin(it->get_name())).display(true)); if(tmp_sub == nullptr) throw exception_memory(); try { if(focus_place != nullptr) tmp_sub->set_drop_content(focus_place); if(focus_title != nullptr) tmp_sub->set_drop_path(focus_title); subdirs.push_back(tmp_sub); } catch(...) { delete tmp_sub; throw; } for_subdirs.adopt(tmp_sub); } // fill table contents too // filename contents.adopt_static_html(it->get_name()); // Data if(it->has_data_present_in_the_archive()) if(it->is_dirty()) contents.adopt_static_html("[Dirty]"); else contents.adopt_static_html("[Saved]"); else contents.adopt_static_html("[ ]"); // delta signature contents.adopt_static_html(it->get_delta_flag()); // EA if(it->has_EA()) if(it->has_EA_saved_in_the_archive()) contents.adopt_static_html("[Saved]"); else contents.adopt_static_html("[ ]"); else contents.adopt_static_html("-------"); // compr contents.adopt_static_html(it->get_compression_ratio()); // sparse contents.adopt_static_html(it->is_sparse() ? "X" : " "); // permissions contents.adopt_static_html(it->get_perm()); // UID contents.adopt_static_html(it->get_uid()); // GID contents.adopt_static_html(it->get_gid()); // size contents.adopt_static_html(it->get_file_size()); // modification date contents.adopt_static_html(it->get_last_modif()); ++it; } } } void html_dir_tree::new_css_library_available() { if(is_css_class_defined_in_library(name_css_name)) { if(! is_css_class_defined_in_library(name_css_forsubdirs) || ! is_css_class_defined_in_library(name_css_contents) || ! is_css_class_defined_in_library(name_css_contents_cells) ) throw WEBDAR_BUG; } else { css tmpcss; css_class tmpclass(name_css_name); // property for the directory name/link in the directory tree tmpcss.css_box_sizing(css::bx_border); tmpcss.css_text_decoration(css::dc_none); tmpcss.css_color(BLACK); tmpclass.set_value(tmpcss); tmpclass.set_selector(css_class::link, tmpcss); tmpclass.set_selector(css_class::active, tmpcss); tmpclass.set_selector(css_class::visited, tmpcss); tmpcss.css_text_decoration(css::dc_underline); tmpclass.set_selector(css_class::hover, tmpcss); define_css_class_in_library(tmpclass); // property for this component as a whole // as it is nested in another components, it must // have his own line, where from the clear property: tmpcss.clear(); tmpcss.css_float_clear(css::fc_left); define_css_class_in_library(name_css_this, tmpcss); // property for the shrink/expand/nosubdir button of the left directory tree tmpcss.clear(); tmpcss.css_float_clear(css::fc_left); define_css_class_in_library(name_css_button, tmpcss); // property for the subdirectory box (that will contain nested html_dir_tree objects tmpcss.clear(); tmpcss.css_box_sizing(css::bx_border); tmpcss.css_float(css::fl_left); tmpcss.css_float_clear(css::fc_left); tmpcss.css_float_clear(css::fc_both); tmpcss.css_border_width(css::bd_left, css::bd_thin); tmpcss.css_border_style(css::bd_left, css::bd_solid); tmpcss.css_border_color(css::bd_left, COLOR_MENU_BORDER_OFF); tmpcss.css_margin_left("1em"); define_css_class_in_library(name_css_forsubdirs, tmpcss); // property for the table as a whole tmpcss.clear(); tmpcss.css_box_sizing(css::bx_border); tmpcss.css_text_h_align(css::al_center); tmpcss.css_border_width(css::bd_all, css::bd_thin); tmpcss.css_border_style(css::bd_all, css::bd_dashed); tmpcss.css_border_color(css::bd_all, COLOR_MENU_BORDER_OFF); tmpcss.css_font_size("0.8em"); define_css_class_in_library(name_css_contents, tmpcss); // property for the title line tmpcss = webdar_css_style::get_css_class(webdar_css_style::btn_off).get_value(); tmpcss.css_font_size("0.8em"); define_css_class_in_library(name_css_contents_title, tmpcss); // property for the table line contents (exculding the title line) tmpcss.clear(); tmpcss.css_border_width(css::bd_top, css::bd_thin); tmpcss.css_border_style(css::bd_top, css::bd_dashed); tmpcss.css_border_color(css::bd_top, COLOR_MENU_BORDER_OFF); define_css_class_in_library(name_css_contents_cells, tmpcss); } } void html_dir_tree::clear_contents() { contents.clear(); contents.adopt_static_html(html_text(3, "File name").get_body_part()); contents.adopt_static_html(html_text(3, "Delta Sig").get_body_part()); contents.adopt_static_html(html_text(3, "Data").get_body_part()); contents.adopt_static_html(html_text(3, "EA").get_body_part()); contents.adopt_static_html(html_text(3, "compr").get_body_part()); contents.adopt_static_html(html_text(3, "Sparse").get_body_part()); contents.adopt_static_html(html_text(3, "permissions").get_body_part()); contents.adopt_static_html(html_text(3, "UID").get_body_part()); contents.adopt_static_html(html_text(3, "GID").get_body_part()); contents.adopt_static_html(html_text(3, "Size").get_body_part()); contents.adopt_static_html(html_text(3, "Modifaction Date").get_body_part()); } webdar-1.0.0/src/html_ciphering.hpp0000644000175000017520000001124614773727236014221 00000000000000/*********************************************************************/ // webdar - a web server and interface program to libdar // Copyright (C) 2013-2025 Denis Corbin // // This file is part of Webdar // // Webdar is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // Webdar is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Webdar. If not, see // //---- // to contact the author: dar.linux@free.fr /*********************************************************************/ #ifndef HTML_CIPHERING_HPP #define HTML_CIPHERING_HPP // C system header files #include "my_config.h" extern "C" { } // C++ system header files #include #include #include // webdar headers #include "body_builder.hpp" #include "actor.hpp" #include "html_form.hpp" #include "html_form_fieldset.hpp" #include "html_form_select.hpp" #include "html_crypto_algo.hpp" #include "html_form_input.hpp" #include "html_form_input_unit.hpp" #include "html_form_gnupg_list.hpp" #include "html_form_radio.hpp" #include "jsoner.hpp" /// html component used for the user to define a has algorithm class html_ciphering : public body_builder, public actor, public jsoner, public events { public: static const std::string changed; enum crypto_type_t { sym = 0, asym = 1 }; html_ciphering(); html_ciphering(const html_ciphering & ref) = delete; html_ciphering(html_ciphering && ref) noexcept = delete; html_ciphering & operator = (const html_ciphering & ref) = delete; html_ciphering & operator = (html_ciphering && ref) noexcept = delete; ~html_ciphering() = default; void set_crypto_size_range(const libdar::infinint & min, const libdar::infinint & max); libdar::U_I get_multi_threaded_crypto() const; libdar::crypto_algo get_crypto_algo() const; crypto_type_t get_crypto_type() const; libdar::secu_string get_crypto_pass() const; libdar::infinint get_iteration_count() const; libdar::hash_algo get_kdf_hash() const; std::vector get_gnupg_recipients() const; std::vector get_gnupg_signatories() const; libdar::U_32 get_crypto_size() const; /// inherited from jsoner virtual void load_json(const json & source) override; /// inherited from jsoner virtual json save_json() const override; /// inherited from jsoner virtual void clear_json() override; /// actor indirect inheritance virtual void on_event(const std::string & event_name) override; /// set the object to webdar defaults void set_to_webdar_defaults(); /// inherited from body_builder virtual void bind_to_anchor(const std::string & val) override { form_crypto.bind_to_anchor(val); }; protected: /// inherited from body_builder virtual std::string inherited_get_body_part(const chemin & path, const request & req) override; /// inherited from body_builder virtual void css_classes_have_changed() override; /// inherited from body_builder virtual void new_css_library_available() override; private: // specific events static constexpr const char* kdf_algo_changed = "kdf_algo_changed"; bool ignore_events; html_form form_crypto; html_form_fieldset crypto_fs; html_form_select crypto_type; html_crypto_algo crypto_algo; html_form_input crypto_pass1; html_form_input crypto_pass2; html_form_input_unit crypto_size; html_form_input crypto_threads; html_form_gnupg_list gnupg; html_form_fieldset crypto_fs_kdf_hash; html_form_radio crypto_kdf_hash; html_form_input iteration_count; void set_kdf_hash(libdar::hash_algo hash); static constexpr const unsigned int format_version = 1; static constexpr const char* myclass_id = "html_ciphering"; static constexpr const char* jlabel_type = "type"; static constexpr const char* jlabel_algo = "algo"; static constexpr const char* jlabel_pass = "key"; static constexpr const char* jlabel_size = "block-size"; static constexpr const char* jlabel_threads = "threads"; static constexpr const char* jlabel_gnupg = "gnupg"; static constexpr const char* jlabel_kdf_hash = "hash"; static constexpr const char* jlabel_kdf_iter = "iterations"; }; #endif webdar-1.0.0/src/html_focus.hpp0000644000175000017520000000535114773727236013370 00000000000000/*********************************************************************/ // webdar - a web server and interface program to libdar // Copyright (C) 2013-2025 Denis Corbin // // This file is part of Webdar // // Webdar is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // Webdar is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Webdar. If not, see // //---- // to contact the author: dar.linux@free.fr /*********************************************************************/ #ifndef HTML_FOCUS_HPP #define HTML_FOCUS_HPP // C system header files #include "my_config.h" extern "C" { } // C++ system header files #include // webdar headers #include "body_builder.hpp" /// html_focus class provides a mean to temporarily have an object show at a particular place in a page /// the html_focus is adopted as any body_builder object but does not show anything /// until a body_builder object is given_for_temporary_adoption(). Any previous object /// given that way are foresaken and replaced by the new one. /// \note that css properties assigned to a html_focus get passed assigned to the under focus element, /// if that element had already got css properties assigned, they are overwritten by the one set to html_focus /// the css properties assigned to html_focus would not have any use else. class html_focus: public body_builder { public: html_focus() { adopted = nullptr; }; html_focus(const html_focus & ref) = delete; html_focus(html_focus && ref) noexcept = delete; html_focus & operator = (const html_focus & ref) = delete; html_focus & operator = (html_focus && ref) noexcept = delete; ~html_focus() = default; /// define what to display under the focus /// /// \param[in] obj is the object to be displayed /// \note object given stay under responsbility of the caller for memory management void given_for_temporary_adoption(body_builder *obj); protected: /// inherited from body_builder virtual std::string inherited_get_body_part(const chemin & path, const request & req) override; virtual void will_foresake(body_builder *obj) override { if(obj == adopted) adopted = nullptr; }; private: body_builder *adopted; //< the object thas has been temporarily adopted }; #endif webdar-1.0.0/src/html_form_input_file.hpp0000644000175000017520000001723515035213165015415 00000000000000/*********************************************************************/ // webdar - a web server and interface program to libdar // Copyright (C) 2013-2025 Denis Corbin // // This file is part of Webdar // // Webdar is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // Webdar is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Webdar. If not, see // //---- // to contact the author: dar.linux@free.fr /*********************************************************************/ #ifndef HTML_FORM_INPUT_FILE_HPP #define HTML_FORM_INPUT_FILE_HPP // C system header files #include "my_config.h" extern "C" { } // C++ system header files #include // webdar headers #include "html_div.hpp" #include "events.hpp" #include "jsoner.hpp" #include "html_form_input.hpp" #include "html_double_button.hpp" #include "html_select_file.hpp" #include "html_text.hpp" /// class html_form_input_file provides a mean to the user to navigate in a file system to select a file or directory /// this is an html_form_input with an added button /// that triggers a popup for the user to select a file /// or a directory in a given libdar::entrepot (or by /// default an libdar::entrepot_local objeect). /// user can also manually modify the entry in the \ HTML field /// as a normal html_form_input object adopted by an /// html_form class html_form_input_file: public html_div, public events, public actor, public jsoner { public: static const std::string changed_event; ///< triggered (unless the event name is modified) when the field name is modified static const std::string changed_entrepot; ///< triggered once the entrepot has been modified by mean of set_entrepot() method static const std::string repo_update_needed; ///< triggered when user clicked on the '+' button to browse the entrepot if set_entrepot_updater() has been called static const std::string repo_updated; ///< triggered by the events object passed to set_entrepot_updater() after calling set_entrepot() method on this html_form_input_file(const std::string & label, const std::string & initial_value, const std::string & size, const std::string & css_class, const std::string & popup_message); html_form_input_file(const html_form_input_file & ref) = delete; html_form_input_file(html_form_input_file && ref) noexcept = delete; html_form_input_file & operator = (const html_form_input_file & ref) = delete; html_form_input_file & operator = (html_form_input_file && ref) noexcept = delete; ~html_form_input_file() = default; // relayed from html_form_input void change_label(const std::string & label) { input.change_label(label); }; const std::string & get_value() const { return input.get_value(); }; void set_value(const std::string & val) { input.set_value(val); }; /// change the name of the "changed" event /// \note actor registered on the even stay registered to the renamed /// event, they must be aware of this event name change as they will /// be triggered only on the new event name, not the one they would have /// been registered on before the change. void set_change_event_name(const std::string & name); // relayed from html_select_file enum select_mode { select_dir, select_file, select_slice, select_symlink }; void set_select_mode(select_mode val); void set_can_create_dir(bool val) { user_select.set_can_create_dir(val); }; /// change the entrepot to search into (if not called, local file system is used) /// \param[in] entrepot points to the libdar::entrepot to use void set_entrepot(std::shared_ptr entrepot); /// define an events object to register for the html_form_input_file::repo_updated event /// \note instead of calling set_entrepot() above whenever an entrepot is changed or updated /// a better approach is to update the entrepot by this method only when this html_form_input_file /// component needs it. /// - The need is expressed by the event html_form_input_file::repo_update_needed generated by 'this' /// - the actor has then to setup the necessary things to in-fine call set_entrepot() with the updated /// entrepot /// - then the updater (which would probably be the same as the actor just above), will generate /// the html_form_input_file::repo_updated event, on which this object is waiting (thanks /// to this set_entrepo_updater() method. When this event is received, the 'this' component /// continue its process using the, now updated, entrepot. /// \note if updater is set to nullptr (or set_entrepot_updater() is never invoked), /// no html_form_input_file::repo_update_needed event is generated by 'this'. /// \example /** \verbatim // caller code example html_form_input_file hfif(); hfif.record_actor_on_event(this, html_form_input::repo_update_needed); hfif.register_name(html_form_input::repo_updated); hfif.set_entrepot_updater(this); // in 'this' on_event(event_name) method if(event_name == html_form_input::repo_update_needed) { // possibly in a different thread: hfif.set_entrepot(...); act(html_form_input::repo_updated); } \endverbatim **/ void set_entrepot_updater(events* updater); /// in select_slice mode, obtain the min-digits from the provided filename std::string get_min_digits() const; // inherited from events virtual void on_event(const std::string & event_name) override; /// inherited from jsoner virtual void load_json(const json & source) override { input.load_json(source); }; /// inherited from jsoner virtual json save_json() const override { return input.save_json(); }; /// inherited from jsoner virtual void clear_json() override { input.clear_json(); }; /// tooltip for the component void set_tooltip(const std::string & val) { input.set_tooltip(val); }; protected: // inherited from body_builder virtual void new_css_library_available() override; virtual std::string inherited_get_body_part(const chemin & path, const request & req) override; private: std::string changed_event_name; std::shared_ptr entrep; bool refresh_get_body; select_mode selmode; std::string min_digits; bool internal_change; events* repo_updater; // adoption tree: // // html_div (this) // | // +--- input_div // | | // | +- input // +--- trigger // +--- user_select // +--- empty_text // html_form_input input; ///< input field editable and/or filled by the popup window html_div input_div; ///< wrapping the html_form_input for CSS class assignment html_double_button trigger; ///< the button that triggers the popup window html_select_file user_select; ///< the popup window letting the user select a file or dir html_text empty_text; ///< to end the float:left CSS property applied to input and trigger std::string slicename_to_basename_update_min_digits(const std::string & val); static const std::string triggered_event; ///< event generated by the trigger button static const std::string css_input; static const std::string css_button_box; }; #endif webdar-1.0.0/src/html_text.hpp0000644000175000017520000000622515035745013013217 00000000000000/*********************************************************************/ // webdar - a web server and interface program to libdar // Copyright (C) 2013-2025 Denis Corbin // // This file is part of Webdar // // Webdar is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // Webdar is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Webdar. If not, see // //---- // to contact the author: dar.linux@free.fr /*********************************************************************/ #ifndef HTML_TEXT_HPP #define HTML_TEXT_HPP // C system header files #include "my_config.h" extern "C" { } // C++ system header files // webdar headers #include "html_tooltip.hpp" #include "static_body_builder.hpp" /// class html_text manage text and header in html document /// \note this class allow user to add by step, at each addition /// the level tells whether the given text to add is normal text (level 0) /// or header text (1 for h1, 2 for h2, and so on) /// some additional methods add new paragraph (

markup) /// or newline (
) /// header markup () receive the css_class assigned to this object class html_text : public html_tooltip, public static_body_builder { public: html_text() { txt = ""; }; html_text(unsigned int level, const std::string & text) { add_text(level, text); }; html_text(const html_text & ref) = default; html_text(html_text && ref) noexcept = delete; html_text & operator = (const html_text & ref) = default; html_text & operator = (html_text && ref) noexcept = delete; ~html_text() = default; /// adding text /// /// \param[in] level set to 1 for

text

etc. and zero for normal text /// \param[in] text is the text to add under the provided level void add_text(unsigned int level, const std::string & text); html_text & add_nl() { txt += "
"; my_body_part_has_changed(); return *this; }; html_text & add_paragraph() { txt += "

"; my_body_part_has_changed(); return *this; }; /// clear and replace component value by the provided string /// \note the provided string is used as is and is assumed to comply with HTML text void set_raw_value(const std::string & val) { txt = val; }; /// get raw value std::string get_raw_value() const { return txt; }; /// clear the whole component value (gets as if it was just created) void clear() { txt = ""; my_body_part_has_changed(); }; /// inherited from static_body_builder virtual std::string get_body_part() const override; protected: /// inherited from body_builder virtual std::string inherited_get_body_part(const chemin & path, const request & req) override; private: std::string txt; }; #endif webdar-1.0.0/src/html_crypto_algo.cpp0000644000175000017520000000567614773727237014601 00000000000000/*********************************************************************/ // webdar - a web server and interface program to libdar // Copyright (C) 2013-2025 Denis Corbin // // This file is part of Webdar // // Webdar is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // Webdar is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Webdar. If not, see // //---- // to contact the author: dar.linux@free.fr /*********************************************************************/ // C system header files #include "my_config.h" extern "C" { } // C++ system header files // webdar headers // #include "html_crypto_algo.hpp" using namespace std; const string html_crypto_algo::changed = "html_crypto_algo_changed"; html_crypto_algo::html_crypto_algo(const string & title): html_form_select(title) { add_choice("none", "None"); add_choice("scram", "Scrambling (weak)"); add_choice("blowfish", "Blowfish"); add_choice("aes", "AES"); add_choice("twofish", "Twofish"); add_choice("serpent", "Serpent"); add_choice("camellia", "Camellia"); set_selected_num(0); register_name(changed); record_actor_on_event(this, html_form_select::changed); } libdar::crypto_algo html_crypto_algo::get_value() const { switch(get_selected_num()) { case 0: return libdar::crypto_algo::none; case 1: return libdar::crypto_algo::scrambling; case 2: return libdar::crypto_algo::blowfish; case 3: return libdar::crypto_algo::aes256; case 4: return libdar::crypto_algo::twofish256; case 5: return libdar::crypto_algo::serpent256; case 6: return libdar::crypto_algo::camellia256; default: throw WEBDAR_BUG; } } void html_crypto_algo::set_value(libdar::crypto_algo val) { switch(val) { case libdar::crypto_algo::none: set_selected_num(0); break; case libdar::crypto_algo::scrambling: set_selected_num(1); break; case libdar::crypto_algo::blowfish: set_selected_num(2); break; case libdar::crypto_algo::aes256: set_selected_num(3); break; case libdar::crypto_algo::twofish256: set_selected_num(4); break; case libdar::crypto_algo::serpent256: set_selected_num(5); break; case libdar::crypto_algo::camellia256: set_selected_num(6); break; default: throw WEBDAR_BUG; } my_body_part_has_changed(); } void html_crypto_algo::on_event(const string & event_name) { // when html_form_select changes, we propagate the change event to our own event name act(changed); } webdar-1.0.0/src/html_static_url.hpp0000644000175000017520000000425715035706425014413 00000000000000/*********************************************************************/ // webdar - a web server and interface program to libdar // Copyright (C) 2013-2025 Denis Corbin // // This file is part of Webdar // // Webdar is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // Webdar is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Webdar. If not, see // //---- // to contact the author: dar.linux@free.fr /*********************************************************************/ #ifndef HTML_STATIC_URL_HPP #define HTML_STATIC_URL_HPP // C system header files #include "my_config.h" extern "C" { } // C++ system header files #include "static_body_builder.hpp" #include "html_url.hpp" #include "html_text.hpp" #include "central_report.hpp" // webdar headers /// html component implementing the usual hyperlink component class html_static_url : public html_url, public static_body_builder { public: html_static_url(const std::string & url, const std::string & label); html_static_url(const html_static_url & ref) = default; html_static_url(html_static_url && ref) noexcept = delete; html_static_url & operator = (const html_static_url & ref) = default; html_static_url & operator = (html_static_url && ref) noexcept = delete; ~html_static_url() = default; void change_label(const std::string & newlabel); const std::string & get_label() const { return x_label; }; /// inherited from static_body_builder virtual std::string get_body_part() const override; protected: using body_builder::adopt; // forbidding object to adopt other body_builder objects private: std::string x_label; html_text child; std::shared_ptr faked; }; #endif webdar-1.0.0/src/html_options_list.cpp0000644000175000017520000000442315036516535014760 00000000000000/*********************************************************************/ // webdar - a web server and interface program to libdar // Copyright (C) 2013-2025 Denis Corbin // // This file is part of Webdar // // Webdar is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // Webdar is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Webdar. If not, see // //---- // to contact the author: dar.linux@free.fr /*********************************************************************/ // C system header files #include "my_config.h" extern "C" { } // C++ system header files #include // webdar headers #include "webdar_css_style.hpp" #include "tooltip_messages.hpp" // #include "html_options_list.hpp" using namespace std; html_options_list::html_options_list(): fs(""), form("Update") { // component setup static const char* listing_opt = "listing_opt"; deroule.add_section(listing_opt, "Listing Parameters"); deroule.set_active_section(listing_opt); action.add_choice("list", "display backup contents"); action.add_choice("summ", "display backup properties"); action.set_selected_num(0); // adoption tree fs.adopt(&action); form.adopt(&fs); deroule.adopt_in_section(listing_opt, &form); adopt(&deroule); // events // css webdar_css_style::normal_button(deroule, true); // tooltips action.set_tooltip(0, TOOLTIP_HOL_ACTION0); action.set_tooltip(0, TOOLTIP_HOL_ACTION1); } string html_options_list::inherited_get_body_part(const chemin & path, const request & req) { return get_body_part_from_all_children(path, req); } void html_options_list::new_css_library_available() { unique_ptr & csslib = lookup_css_library(); if(!csslib) throw WEBDAR_BUG; webdar_css_style::update_library(*csslib); } webdar-1.0.0/src/user_interface.hpp0000644000175000017520000001616714773727237014233 00000000000000/*********************************************************************/ // webdar - a web server and interface program to libdar // Copyright (C) 2013-2025 Denis Corbin // // This file is part of Webdar // // Webdar is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // Webdar is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Webdar. If not, see // //---- // to contact the author: dar.linux@free.fr /*********************************************************************/ #ifndef USER_INTERFACE_HPP #define USER_INTERFACE_HPP // C system header files #include "my_config.h" extern "C" { } // C++ system header files #include // webdar headers #include "responder.hpp" #include "saisie.hpp" #include "html_statistics.hpp" #include "events.hpp" #include "html_libdar_running_page.hpp" #include "html_error.hpp" #include "html_listing_page.hpp" #include "html_summary_page.hpp" #include "archive_test.hpp" #include "archive_restore.hpp" #include "archive_compare.hpp" #include "archive_create.hpp" #include "archive_isolate.hpp" #include "archive_merge.hpp" #include "archive_init_list.hpp" #include "archive_repair.hpp" #include "html_fichier.hpp" /// main webdar html components that defines for a given session the type of output (config pages, libdar output, error, etc.) /// \note the configuration downloading process is the following: at construction time, the parametrage field (saisie class) /// is set with an html_fichier object using saisie::set_data_place() method. When the user clicks on the download button /// inside class saisie (html_bibliotheque field) this triggers the browser to save to file the body of the next http response, /// and the saisie object saves into the html_fichier the json configuration of the bibiliotheque and triggers the event /// event_download. The user_interface class has registered to this event which leads to change to mode to "download", but /// the body_builder evaluation of field parametrage continues to its end. When it has finished if the mode has been changed to /// download the obtained http body is just dropped and replaced by the content of the html_fichier we provided to the /// parametrage object and the mode is set back to config before returning the http response. class user_interface : public responder, public events, public actor { public: /// available event for that class static const std::string closing; ///< signal end of user session user_interface(); user_interface(const user_interface & ref) = delete; user_interface(user_interface && ref) noexcept = delete; user_interface & operator = (const user_interface & ref) = delete; user_interface & operator = (user_interface && ref) noexcept = delete; ~user_interface(); /// inherited from responder virtual answer give_answer(const request & req) override; /// inherited from actor virtual void on_event(const std::string & event_name) override; /// provide the name of the session (given by the user); std::string get_session_name() const; /// set the session name (customizable by user) void set_session_name(const std::string & name); /// define the username that the current session is owned by void set_username(const std::string & username) { parametrage.set_username(username); }; /// whether a libdar thread is running bool is_libdar_running() const { return in_action.is_libdar_running(); }; /// whether user has requested to disconnect bool disconnection_requested() const { bool ret = disconnect_req; disconnect_req = false; return ret; }; protected: /// inherited from responder virtual void prefix_has_changed() override; private: enum mode_type { config, ///< should display parameter selection listing_open, ///< should display the web_user_interface, progressive_report an cancellation button listing, ///< should display listing navigation window summary_open, ///< should display the web_user_interface, progressive_report and cancellation button summary, ///< should display the summary window running, ///< should display web_user_interface, progressive_report and cancellation button error, ///< should display the error download ///< should provide content of fichier for download or display (depending on the link used to get to this status) }; std::string sessname; ///< customized name of that session (empty string by default) mutable libthreadar::mutex mut_sessname; ///< drives the access to sessname, by set and get session name methods mode_type mode; ///< current mode mode_type return_mode; ///< mode in which to return from error status bool close_requested; ///< whether session close has been asked bool mode_changed; ///< whether mode has changed mutable bool disconnect_req; ///< whether user has requested a session disconnection saisie parametrage; ///< page issued in mode == config html_libdar_running_page in_action; ///< page issued when a libdar thread is running (mode == running) html_error in_error; ///< page issued when an exception has been caught (mode == error) html_listing_page in_list; ///< page issued when proceeding to archive listing html_summary_page in_summ; ///< page issued when proceeding to archive summary std::shared_ptr data; ///< content to send in download mode archive_test arch_test; ///< holds thread created for testing archives archive_restore arch_rest; ///< holds thread created for extracting archives archive_compare arch_diff; ///< holds thread created for comparing archives archive_create arch_create; ///< holds thread created for archive creation archive_isolate arch_isolate; ///< holds thread created for archive isolation archive_merge arch_merge; ///< holds thread created for archive merging archive_repair arch_repair; ///< holds thread created for archive repairing archive_init_list arch_init_list; ///< holds thread created to open an archive for listing libthreadar::thread *current_thread; ///< points to the running thread (either arch_test, arch_merge, ....) /// available parameters for libdar execution const saisie & get_parametrage() const { return parametrage; }; /// provides the libdar::user_interaction for libdar execution std::shared_ptr get_html_user_interaction() { return in_action.get_html_user_interaction(); }; void go_restore(); void go_diff(); void go_test(); void go_create(); void go_isolate(); void go_merge(); void go_init_list(); void go_repair(); }; #endif webdar-1.0.0/src/html_listing_page.hpp0000644000175000017520000000562014773727237014716 00000000000000/*********************************************************************/ // webdar - a web server and interface program to libdar // Copyright (C) 2013-2025 Denis Corbin // // This file is part of Webdar // // Webdar is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // Webdar is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Webdar. If not, see // //---- // to contact the author: dar.linux@free.fr /*********************************************************************/ #ifndef HTML_LISTING_PAGE_HPP #define HTML_LISTING_PAGE_HPP // C system header files #include "my_config.h" extern "C" { } // C++ system header files // webdar headers #include "html_page.hpp" #include "html_dir_tree.hpp" #include "html_button.hpp" #include "html_div.hpp" #include "archive_init_list.hpp" #include "html_focus.hpp" /// html_listing_page is the page that shows when listing an existing archive content /// it is used by class user_interface once the archive_init_list object it has /// created has completed the dar archive openning at which time it passed this object /// using the set_source() method and this html_page (html_listing_page) becomes the /// one receiving html request and provides html content thanks to its get_body_part() /// inherited method. class html_listing_page : public html_page, public actor, public events { public: static const std::string event_close; html_listing_page(); html_listing_page(const html_listing_page & ref) = delete; html_listing_page(html_listing_page && ref) noexcept = delete; html_listing_page & operator = (const html_listing_page & ref) = delete; html_listing_page & operator = (html_listing_page && ref) noexcept = delete; ~html_listing_page() = default; /// set title of the listing page given the session name void set_session_name(const std::string & session_name); /// mandatory call before calling get_body_part !!! void set_source(const archive_init_list *ref) { tree.set_source(ref); tree.go_expand(); tree.go_show(); }; /// clear informations about previously read archive void clear() { tree.clear(); }; // inherited from actor virtual void on_event(const std::string & event_name) override; protected: /// inherited from html_div/body_builder virtual void new_css_library_available() override; private: html_dir_tree tree; html_div title; html_focus focus; html_button close; }; #endif webdar-1.0.0/src/html_options_isolate.hpp0000644000175000017520000001515214773727237015465 00000000000000/*********************************************************************/ // webdar - a web server and interface program to libdar // Copyright (C) 2013-2025 Denis Corbin // // This file is part of Webdar // // Webdar is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // Webdar is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Webdar. If not, see // //---- // to contact the author: dar.linux@free.fr /*********************************************************************/ #ifndef HTML_OPTIONS_ISOLATE_HPP #define HTML_OPTIONS_ISOLATE_HPP // C system header files #include "my_config.h" extern "C" { } // C++ system header files #include // webdar headers #include "body_builder.hpp" #include "html_form.hpp" #include "html_form_fieldset.hpp" #include "html_form_input.hpp" #include "html_hash_algo.hpp" #include "html_crypto_algo.hpp" #include "html_derouleur.hpp" #include "html_entrepot_landing.hpp" #include "html_form_gnupg_list.hpp" #include "html_form_select.hpp" #include "html_mask_form_path.hpp" #include "html_form_sig_block_size.hpp" #include "html_compression_params.hpp" #include "html_slicing.hpp" #include "html_ciphering.hpp" #include "guichet.hpp" #include "jsoner.hpp" #include "bibliotheque_subconfig.hpp" /// html components for the user to provide parameters of a isolation operation class html_options_isolate : public body_builder, public actor, public events, public jsoner, public bibliotheque_subconfig { public: static const std::string landing_path_changed; ///< landing path has changed static const std::string entrepot_changed; ///< event only triggered when entrepot related params changed (excluding landing_path) static const std::string changed; ///< triggered when the component changed, including entrepot params changed (excluding landing_path) html_options_isolate(); html_options_isolate(const html_options_isolate & ref) = delete; html_options_isolate(html_options_isolate && ref) noexcept = delete; html_options_isolate & operator = (const html_options_isolate & ref) = delete; html_options_isolate & operator = (html_options_isolate && ref) noexcept = delete; ~html_options_isolate() = default; /// mandatory call to invoke ASAP after constructor void set_biblio(const std::shared_ptr & ptr); /// inherited from jsoner virtual void load_json(const json & source) override; /// inherited from jsoner virtual json save_json() const override; /// inherited from jsoner virtual void clear_json() override; /// inherited from bibliotheque_subconfig virtual bibliotheque::using_set get_using_set() const override; /// inherited from actor virtual void on_event(const std::string & event_name) override; /// informations available for libdar libdar::archive_options_isolate get_options(std::shared_ptr & webui) const; /// optain the current entrepot object where is expected to be create the archive std::shared_ptr get_entrepot(std::shared_ptr webui) const { return entrep->get_entrepot(webui); }; /// obtain the entrepot landing path const std::string & get_landing_path() const { return entrep->get_landing_path(); }; /// set the object to webdar defaults void set_to_webdar_defaults(); protected: /// inherited from bdy_builder virtual std::string inherited_get_body_part(const chemin & path, const request & req) override; virtual void new_css_library_available() override; private: // specific events static constexpr const char* kdf_algo_changed = "kdf_algo_changed"; bool ignore_events; html_derouleur deroule; html_form form_delta_sig; html_form_fieldset delta_fs; html_form_input delta_sig; html_form_input delta_transfer_mode; html_text delta_filter_params; guichet guichet_sig_block_size; std::shared_ptr sig_block_size; html_text delta_filter_title; guichet guichet_delta_mask; std::shared_ptr delta_mask; guichet guichet_entrep; std::shared_ptr entrep; html_form form_archgen; html_form_fieldset fs_archgen; html_form_input allow_over; html_form_input warn_over; html_form_input pause; html_form_input sequential_marks; html_form_input user_comment; html_hash_algo hash_algo; html_form_input execute; html_form_input empty; html_form_input repair_mode; html_form form_shown; html_form_fieldset fs_shown; html_form_input info_details; guichet guichet_compr_params; std::shared_ptr compr_params; guichet guichet_slicing; std::shared_ptr slicing; guichet guichet_ciphering; std::shared_ptr ciphering; void init(); ///< set parameters to default values void trigger_changed(); static constexpr const unsigned int format_version = 1; static constexpr const char* myclass_id = "html_options_isolate"; static constexpr const char* jlabel_delta_sig = "delta-sig"; static constexpr const char* jlabel_delta_xfer = "delta-sig-xfer"; static constexpr const char* jlabel_sig_block_size = "sig-block-size"; static constexpr const char* jlabel_delta_mask = "delta-mask"; static constexpr const char* jlabel_entrep = "entrepot"; static constexpr const char* jlabel_allow_over = "allow-over"; static constexpr const char* jlabel_warn_over = "warn-over"; static constexpr const char* jlabel_seq_masks = "seq-masks"; static constexpr const char* jlabel_user_comment = "user-comment"; static constexpr const char* jlabel_hash_algo = "hash-algo"; static constexpr const char* jlabel_execute = "execute"; static constexpr const char* jlabel_empty = "dry-run"; static constexpr const char* jlabel_repair_mode = "repair-mode"; static constexpr const char* jlabel_info_details = "info-details"; static constexpr const char* jlabel_compr_params = "compr-params"; static constexpr const char* jlabel_slicing = "slicing"; static constexpr const char* jlabel_ciphering = "ciphering"; }; #endif webdar-1.0.0/src/html_form_overwrite_action.hpp0000644000175000017520000001200114773727237016646 00000000000000/*********************************************************************/ // webdar - a web server and interface program to libdar // Copyright (C) 2013-2025 Denis Corbin // // This file is part of Webdar // // Webdar is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // Webdar is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Webdar. If not, see // //---- // to contact the author: dar.linux@free.fr /*********************************************************************/ #ifndef HTML_FORM_OVERWRITE_ACTION_HPP #define HTML_FORM_OVERWRITE_ACTION_HPP // C system header files #include "my_config.h" extern "C" { } // C++ system header files // webdar headers #include "html_overwrite_action.hpp" #include "html_div.hpp" #include "html_form_select.hpp" #include "html_form_fieldset.hpp" #include "actor.hpp" #include "html_form_overwrite_constant_action.hpp" #include "html_form_overwrite_chain_action.hpp" #include "jsoner.hpp" #include "events.hpp" // cannot include header file as this one includes us, making a dependency loop class html_form_overwrite_conditional_action; /// html component to be adopted by an html_form class /// \note this class implements the html_overwrite_action and proposes to /// the user a switch between html_form_overwrite_constant_action, /// html_form_overwrite_conditional_action and html_form_overwrite_chain_action /// which are more specific implementations of html_overwrite_action ancestor /// class that should also be adopted by an html_form (directly or not). class html_form_overwrite_action: public html_overwrite_action, public actor, public jsoner, public events { public: // events static const std::string changed; // actions type static constexpr const char* action_type_const = "constant"; static constexpr const char* action_type_condition = "condition"; static constexpr const char* action_type_chain = "chain"; html_form_overwrite_action(const std::string & label); html_form_overwrite_action(const html_form_overwrite_action & ref) = delete; html_form_overwrite_action(html_form_overwrite_action && ref) noexcept = delete; html_form_overwrite_action & operator = (const html_form_overwrite_action & ref) = delete; html_form_overwrite_action & operator = (html_form_overwrite_action && ref) noexcept = delete; ~html_form_overwrite_action() = default; /// programmatically define the action type /// \note this call is to programmatically setup a component, normal way to setup is from Web user interaction void set_action_type(const std::string & acttype) { action_type.set_selected_id(acttype); }; /// get access to object storing constant action html_form_overwrite_constant_action & get_action_when_type_const() { return constant_action; }; /// get access to object storing chain action html_form_overwrite_chain_action & get_action_when_type_chain() { return chain_action; }; /// get access to object storing conditional action html_form_overwrite_conditional_action & get_action_when_type_condition(); /// obtain the crit_action object for libdar option virtual std::unique_ptr get_overwriting_action() const override; /// inherited from jsoner virtual void load_json(const json & source) override; /// inherited from jsoner virtual json save_json() const override; /// inherited from jsoner virtual void clear_json() override; /// inherited from actor virtual void on_event(const std::string & event_name) override; /// set the object to webdar defaults void set_to_webdar_defaults(); protected: /// inherited from body_builder from html_overwrite_action virtual std::string inherited_get_body_part(const chemin & path, const request & req) override; private: static constexpr const char* act_changed = "action changed"; static constexpr const unsigned int format_version = 1; static constexpr const char* myclass_id = "html_form_overwrite_action"; static constexpr const char* jlabel_type = "type"; static constexpr const char* jlabel_value = "value"; bool need_conditional_action; // we use pointers for here // to avoid cyclic dependency between html_form_overwrite_action // and html_form_conditional_action std::unique_ptr conditional_action; html_form_fieldset fs; html_form_select action_type; html_form_overwrite_constant_action constant_action; html_form_overwrite_chain_action chain_action; void make_conditional_action(); void set_visible(); }; #endif webdar-1.0.0/src/webdar_css_style.cpp0000644000175000017520000003260215035171353014534 00000000000000/*********************************************************************/ // webdar - a web server and interface program to libdar // Copyright (C) 2013-2025 Denis Corbin // // This file is part of Webdar // // Webdar is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // Webdar is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Webdar. If not, see // //---- // to contact the author: dar.linux@free.fr /*********************************************************************/ // C system header files #include "my_config.h" extern "C" { } // C++ system header files #include #include // webdar headers #include "tokens.hpp" #include "exceptions.hpp" // #include "webdar_css_style.hpp" using namespace std; namespace webdar_css_style { static libthreadar::mutex init_lock; static bool initialized = false; static map classes; static void init() { if(initialized) return; // bypassing mutex as this field once true stays true forever init_lock.lock(); try { if(!initialized) { css tmp; css_class tmp_class; classes.clear(); tmp.clear(); tmp_class.clear(); tmp.css_color(COLOR_MENU_BORDER_GREY); tmp.css_text_shadow("0.05em", "0.05em", "0.2em", "#888888"); tmp_class.set_value(tmp); tmp_class.change_name(text_grey); classes[text_grey] = tmp_class; tmp.clear(); tmp_class.clear(); tmp.css_font_weight_bold(); tmp_class.set_value(tmp); tmp_class.change_name(text_bold); classes[text_bold] = tmp_class; tmp.clear(); tmp_class.clear(); tmp.css_text_shadow("0.05em", "0.05em", "0.2em", "#888888"); tmp_class.set_value(tmp); tmp_class.change_name(text_shadow_dark); classes[text_shadow_dark] = tmp_class; tmp.clear(); tmp_class.clear(); ///<<< a faire tmp_class.set_value(tmp); tmp_class.change_name(text_shadow_bright); classes[text_shadow_bright] = tmp_class; tmp.clear(); tmp_class.clear(); tmp.css_color(BLACK); tmp_class.set_value(tmp); tmp_class.change_name(text_color_normal); classes[text_color_normal] = tmp_class; tmp.clear(); tmp_class.clear(); tmp.css_color(RED); tmp.css_font_weight_bold(); tmp_class.set_value(tmp); tmp_class.change_name(text_color_red); classes[text_color_red] = tmp_class; tmp.clear(); tmp_class.clear(); tmp.css_color(GREEN); tmp.css_font_style_italic(); tmp_class.set_value(tmp); tmp_class.change_name(text_color_green); classes[text_color_green] = tmp_class; tmp.clear(); tmp_class.clear(); tmp.css_text_h_align(css::al_right); tmp.css_text_v_align(css::al_top); tmp.css_font_weight_bold(); tmp_class.set_value(tmp); tmp_class.change_name(text_top_right); classes[text_top_right] = tmp_class; tmp.clear(); tmp_class.clear(); tmp.css_text_h_align(css::al_center); tmp.css_text_v_align(css::al_top); tmp_class.set_value(tmp); tmp_class.change_name(text_top_center); classes[text_top_center] = tmp_class; tmp.clear(); tmp_class.clear(); tmp.css_font_weight_bold(); tmp_class.set_value(tmp); tmp_class.change_name(text_right); classes[text_right] = tmp_class; tmp.clear(); tmp_class.clear(); tmp.css_float(css::fl_left); tmp.css_margin_right("1em"); tmp_class.set_value(tmp); tmp_class.change_name(float_left); classes[float_left] = tmp_class; tmp.clear(); tmp_class.clear(); tmp.css_float(css::fl_right); tmp.css_margin_left("1em"); tmp_class.set_value(tmp); tmp_class.change_name(float_right); classes[float_right] = tmp_class; tmp.clear(); tmp_class.clear(); tmp.css_float_clear(css::fc_both); tmp_class.set_value(tmp); tmp_class.change_name(float_flush); classes[float_flush] = tmp_class; tmp.clear(); tmp_class.clear(); tmp.css_margin_top("0.2em"); tmp.css_margin_bottom("0.2em"); tmp_class.set_value(tmp); tmp_class.change_name(spacing_vertical); classes[spacing_vertical] = tmp_class; tmp.clear(); tmp_class.clear(); tmp.css_margin_left("0.2em"); tmp.css_margin_right("0.2em"); tmp_class.set_value(tmp); tmp_class.change_name(spacing_horizontal); classes[spacing_horizontal] = tmp_class; tmp.clear(); tmp_class.clear(); tmp.css_max_width("100vw"); tmp.css_width("100%", false); tmp_class.set_value(tmp); tmp_class.change_name(width_100vw); classes[width_100vw] = tmp_class; tmp.clear(); tmp_class.clear(); tmp.css_max_width("100vw"); tmp.css_width("calc(100% - 3em)", false); tmp_class.set_value(tmp); tmp_class.change_name(width_100vw_3em); classes[width_100vw_3em] = tmp_class; tmp.clear(); tmp_class.clear(); tmp.css_max_width("100vw"); tmp.css_width("calc(100% - 8em)", false); tmp_class.set_value(tmp); tmp_class.change_name(width_100vw_8em); classes[width_100vw_8em] = tmp_class; tmp.clear(); tmp_class.clear(); tmp.css_max_width("100vw"); tmp.css_width("calc(100% - 5em)", false); tmp_class.set_value(tmp); tmp_class.change_name(width_100vw_5em); classes[width_100vw_5em] = tmp_class; tmp.clear(); tmp_class.clear(); tmp.css_max_width("80vw"); tmp.css_width("80%", false); tmp_class.set_value(tmp); tmp_class.change_name(width_80vw); classes[width_80vw] = tmp_class; tmp.clear(); tmp_class.clear(); tmp.css_max_width("60vw"); tmp.css_width("60%", false); tmp_class.set_value(tmp); tmp_class.change_name(width_60vw); classes[width_60vw] = tmp_class; tmp.clear(); tmp_class.clear(); tmp.css_border_width(css::bd_all, css::bd_thick); tmp.css_border_color(css::bd_all, RED); tmp_class.set_value(tmp); tmp_class.change_name(red_border); classes[red_border] = tmp_class; tmp.clear(); tmp_class.clear(); tmp.css_margin_left("4em"); tmp_class.set_value(tmp); tmp_class.change_name(indent); classes[indent] = tmp_class; // Button sizing tmp.clear(); tmp_class.clear(); tmp.css_box_sizing(css::bx_border); tmp.css_width("100%", true); tmp_class.set_value(tmp); tmp_class.change_name(width_full); classes[width_full] = tmp_class; tmp.clear(); tmp_class.clear(); tmp.css_box_sizing(css::bx_border); tmp.css_width("9em", false); tmp_class.set_value(tmp); tmp_class.change_name(width_8em); classes[width_8em] = tmp_class; // Button CSS classes // temporary variables used to setup c_btn_* static classes of this module css box_off, box_on, box_void, box_grey, box_small; // void box tmp_class.clear(); tmp.clear(); tmp.css_padding("0.5em"); tmp_class.set_value(tmp); tmp_class.change_name(btn_void); classes[btn_void] = tmp_class; // common aspect of all other boxes tmp.clear(); tmp.css_box_sizing(css::bx_border); tmp.css_text_h_align(css::al_center); tmp.css_corner_radius("0.5em","0", "0.5em", "0"); tmp.css_padding("0.5em"); tmp.css_border_style(css::bd_all, css::bd_outset); tmp.css_border_width(css::bd_all, css::bd_thin); tmp.css_transition("0.7s", "0s"); // normal box box_off = tmp; box_off.css_background_color(COLOR_DAR_GREYBLUE); box_off.css_border_color(css::bd_all, COLOR_DAR_GREYBLUE); box_small = box_off; tmp_class.clear(); tmp_class.set_value(box_off); tmp_class.set_selector(css_class::active, box_off); tmp_class.set_selector(css_class::visited, box_off); tmp_class.set_selector(css_class::link, box_off); box_off.css_box_shadow("0.25em", "0.25em", "0.2em"); tmp_class.set_selector(css_class::hover, box_off); tmp_class.change_name(btn_off); classes[btn_off] = tmp_class; // small box // box_small is set a few lines above from box_off tmp_class.clear(); box_small.css_width("2em", false); box_small.css_padding("0"); box_small.css_min_width("2em"); box_small.css_min_height("1.5em"); tmp_class.set_value(box_small); tmp_class.set_selector(css_class::active, box_small); tmp_class.set_selector(css_class::visited, box_small); tmp_class.set_selector(css_class::link, box_small); box_small.css_box_shadow("0.25em", "0.25em", "0.2em"); tmp_class.set_selector(css_class::hover, box_small); tmp_class.change_name(btn_small); classes[btn_small] = tmp_class; // active box box_on = tmp; tmp_class.clear(); box_on.css_box_shadow("0.1em", "0.1em", "0.1em"); box_on.css_background_color(COLOR_MENU_BACK_ON); box_on.css_border_color(css::bd_all, COLOR_MENU_BACK_ON); tmp_class.set_value(box_on); tmp_class.set_selector(css_class::active, box_on); tmp_class.set_selector(css_class::hover, box_on); tmp_class.set_selector(css_class::visited, box_on); tmp_class.set_selector(css_class::link, box_on); tmp_class.change_name(btn_on); classes[btn_on] = tmp_class; // grey box box_grey = tmp; tmp_class.clear(); box_grey.css_background_color(COLOR_MENU_BACK_GREY); box_grey.css_border_color(css::bd_all, COLOR_MENU_BACK_GREY); tmp_class.set_value(box_grey); tmp_class.set_value(box_grey); tmp_class.set_selector(css_class::active, box_grey); tmp_class.set_selector(css_class::visited, box_grey); tmp_class.set_selector(css_class::link, box_grey); box_grey.css_box_shadow("0.25em", "0.25em", "0.2em"); tmp_class.set_selector(css_class::hover, box_grey); tmp_class.change_name(btn_grey); classes[btn_grey] = tmp_class; // URL common // we recycle the box_off, box_on, box_grey local variable to setup the button URL: // common property to all URLs map::iterator it = classes.find(text_shadow_dark); if(it == classes.end()) throw WEBDAR_BUG; tmp.clear(); tmp.update_from(it->second.get_value()); tmp.css_font_weight_bold(); tmp.css_font_style_italic(); tmp.css_text_decoration(css::dc_none); // void URL tmp_class.clear(); // empty class tmp_class.change_name(url_void); classes[url_void] = tmp_class; // Normal URL box_off = tmp; box_off.css_color(COLOR_MENU_FRONT_OFF); tmp_class.clear(); tmp_class.set_value(box_off); tmp_class.set_selector(css_class::link, box_off); tmp_class.set_selector(css_class::visited, box_off); box_off.css_color(COLOR_MENU_FRONT_ACTIVE_OFF); tmp_class.set_selector(css_class::active, box_off); box_off.css_color(COLOR_MENU_FRONT_HOVER_OFF); box_off.css_font_style_normal(); box_off.css_text_decoration(css::dc_underline); box_off.css_text_shadow("0", "0", "2em", "yellow"); tmp_class.set_selector(css_class::hover, box_off); tmp_class.change_name(url_normal); classes[url_normal] = tmp_class; // Active URL box_on = tmp; tmp_class.clear(); box_on.css_color(COLOR_MENU_FRONT_ON); box_on.css_font_style_normal(); tmp_class.set_selector(css_class::link, box_on); tmp_class.set_selector(css_class::visited, box_on); box_on.css_color(COLOR_MENU_FRONT_ACTIVE_ON); tmp_class.set_selector(css_class::active, box_on); box_on.css_color(COLOR_MENU_FRONT_HOVER_ON); box_on.css_text_decoration(css::dc_underline); box_on.css_text_shadow("0", "0", "2em", "yellow"); tmp_class.set_selector(css_class::hover, box_on); tmp_class.change_name(url_selected); classes[url_selected] = tmp_class; // Grey URL box_grey = tmp; tmp_class.clear(); box_grey.css_color(COLOR_MENU_FRONT_GREY); tmp_class.set_selector(css_class::link, box_grey); tmp_class.set_selector(css_class::visited, box_grey); box_grey.css_color(COLOR_MENU_FRONT_ACTIVE_GREY); tmp_class.set_selector(css_class::active, box_grey); box_grey.css_color(COLOR_MENU_FRONT_HOVER_GREY); box_grey.css_font_style_normal(); box_grey.css_text_decoration(css::dc_underline); box_grey.css_text_shadow("0", "0", "2em", "yellow"); tmp_class.set_selector(css_class::hover, box_grey); tmp_class.change_name(url_grey); classes[url_grey] = tmp_class; initialized = true; } } catch(...) { init_lock.unlock(); throw; } init_lock.unlock(); } void update_library(css_library & csslib) { init(); if(!csslib.class_exists(btn_on)) { for(map::iterator it = classes.begin(); it != classes.end(); ++it) csslib.add(it->second); } } const css_class & get_css_class(const string & name) { map::iterator it = classes.find(name); if(it == classes.end()) throw exception_range(libdar::tools_printf("Unknown css class name %s in webdar_css_style module", name.c_str())); return it->second; } } // end of namespace webdar-1.0.0/src/html_options_repair.cpp0000644000175000017520000004053515036477556015304 00000000000000/*********************************************************************/ // webdar - a web server and interface program to libdar // Copyright (C) 2013-2025 Denis Corbin // // This file is part of Webdar // // Webdar is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // Webdar is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Webdar. If not, see // //---- // to contact the author: dar.linux@free.fr /*********************************************************************/ // C system header files #include "my_config.h" extern "C" { } // C++ system header files #include // webdar headers #include "webdar_tools.hpp" #include "webdar_css_style.hpp" #include "tokens.hpp" #include "html_form_mask_expression.hpp" #include "tooltip_messages.hpp" // #include "html_options_repair.hpp" using namespace std; const string html_options_repair::landing_path_changed = "html_options_repair_landing_changed"; const string html_options_repair::entrepot_changed = "html_options_repair_entrep_changed"; const string html_options_repair::changed = "html_options_repair_changed"; html_options_repair::html_options_repair(): info_details("Detailed information", html_form_input::check, "1", // checked "", ""), display_treated("Display treated entries", html_form_input::check, "1", // checked "", ""), display_only_dir("Display only treated dirs", html_form_input::check, "", "", ""), display_skipped("Display skipped entries", html_form_input::check, "1", // checked "", ""), display_dirstats("Show summary after each directory", html_form_input::check, "", // unchecked "", ""), display_fs(""), display_form("Update"), allow_over("Allow slice overwriting", html_form_input::check, "1", "", ""), warn_over("Warn before overwriting", html_form_input::check, "1", "", ""), pause("Pause at each N slices (zero = no pause)", html_form_input::number, "0", "5", ""), execute("Command to execute after each slice", html_form_input::text, "", "", webdar_css_style::width_100vw), dry_run("Dry-run execution", html_form_input::check, "", "", ""), multi_thread_compress("Number of thread for compression", html_form_input::number, "1", "5", ""), hash_algo("Generate hashing files for each slice"), processing_fs(""), processing_form("Update"), user_comment("User comment in slice header", html_form_input::text, "", "", webdar_css_style::width_100vw), target_fs(""), target_form("Update"), ignore_events(false) { entrep.reset(new (nothrow) html_entrepot_landing()); if(!entrep) throw exception_memory(); slicing.reset(new (nothrow) html_slicing()); if(! slicing) throw exception_memory(); ciphering.reset(new (nothrow) html_ciphering()); if(! ciphering) throw exception_memory(); // component configuration static const char* sect_entrep = "entrepot"; static const char* sect_display = "display"; static const char* sect_process = "process"; static const char* sect_target = "target"; static const char* sect_slice = "slicing"; static const char* sect_crypt = "crypto"; deroule.add_section(sect_entrep, "Repaired Backup Repository"); deroule.add_section(sect_process, "How to process the operation"); deroule.add_section(sect_display, "What to show during the operation"); deroule.add_section(sect_target, "Target properties"); deroule.add_section(sect_slice, "Slicing options"); deroule.add_section(sect_crypt, "Encryption options"); libdar::archive_options_repair defaults; ciphering->set_crypto_size_range(defaults.get_crypto_size(), libdar::infinint(4294967296)); // max is 2^32 pause.set_min_only(0); multi_thread_compress.set_min_only(1); // default values // this is set in set_biblio() // repo adoption deroule.adopt_in_section(sect_entrep, &guichet_entrep); // adoption tree display_fs.adopt(&info_details); display_fs.adopt(&display_treated); display_fs.adopt(&display_only_dir); display_fs.adopt(&display_skipped); display_fs.adopt(&display_dirstats); display_form.adopt(&display_fs); deroule.adopt_in_section(sect_display, &display_form); processing_fs.adopt(&allow_over); processing_fs.adopt(&warn_over); processing_fs.adopt(&pause); processing_fs.adopt(&execute); processing_fs.adopt(&dry_run); processing_fs.adopt(&multi_thread_compress); processing_fs.adopt(&hash_algo); processing_form.adopt(&processing_fs); deroule.adopt_in_section(sect_process, &processing_form); target_fs.adopt(&user_comment); target_form.adopt(&target_fs); deroule.adopt_in_section(sect_target, &target_form); deroule.adopt_in_section(sect_slice, &guichet_slicing); deroule.adopt_in_section(sect_crypt, &guichet_ciphering); adopt(&deroule); // events register_name(landing_path_changed); register_name(entrepot_changed); register_name(changed); entrep->record_actor_on_event(this, html_entrepot_landing::entrepot_only_changed); entrep->record_actor_on_event(this, html_entrepot_landing::landing_path_only_changed); display_treated.record_actor_on_event(this, html_form_input::changed); info_details.record_actor_on_event(this, html_form_input::changed); display_only_dir.record_actor_on_event(this, html_form_input::changed); display_skipped.record_actor_on_event(this, html_form_input::changed); display_dirstats.record_actor_on_event(this, html_form_input::changed); allow_over.record_actor_on_event(this, html_form_input::changed); warn_over.record_actor_on_event(this, html_form_input::changed); pause.record_actor_on_event(this, html_form_input::changed); execute.record_actor_on_event(this, html_form_input::changed); dry_run.record_actor_on_event(this, html_form_input::changed); multi_thread_compress.record_actor_on_event(this, html_form_input::changed); hash_algo.record_actor_on_event(this, html_hash_algo::changed); user_comment.record_actor_on_event(this, html_form_input::changed); slicing->record_actor_on_event(this, html_slicing::changed); ciphering->record_actor_on_event(this, html_ciphering::changed); on_event(html_form_input::changed); // first initialization // css display_only_dir.add_css_class(webdar_css_style::indent); webdar_css_style::grey_button(deroule, true); // tooltips allow_over.set_tooltip(TOOLTIP_HORP_ALLOW_OVER); warn_over.set_tooltip(TOOLTIP_HORP_WARN_OVER); pause.set_tooltip(TOOLTIP_HORP_PAUSE); execute.set_tooltip(TOOLTIP_HORP_EXECUTE); dry_run.set_tooltip(TOOLTIP_HORP_EMPTY); multi_thread_compress.set_tooltip(TOOLTIP_HORP_THREADS_COMPR); hash_algo.set_tooltip(TOOLTIP_HORP_HASH_ALGO); info_details.set_tooltip(TOOLTIP_HORP_INFO_DETAILS); display_treated.set_tooltip(TOOLTIP_HORP_DISPLAY_TREATED); display_only_dir.set_tooltip(TOOLTIP_HORP_DISPLAY_ONLY_DIR); display_skipped.set_tooltip(TOOLTIP_HORP_DISPLAY_SKIPPED); user_comment.set_tooltip(TOOLTIP_HORP_USER_COMMENT); } void html_options_repair::set_biblio(const shared_ptr & ptr) { guichet_entrep.set_child(ptr, bibliotheque::repo, entrep, false); guichet_slicing.set_child(ptr, bibliotheque::slicing, slicing, false); guichet_ciphering.set_child(ptr, bibliotheque::ciphering, ciphering, false); init(); } void html_options_repair::load_json(const json & source) { try { unsigned int version; string class_id; json config = unwrap_config_from_json_header(source, version, class_id); if(class_id != myclass_id) throw exception_range(libdar::tools_printf("Unexpected class_id in json data, found %s while expecting %s", class_id.c_str(), myclass_id)); if(version > format_version) throw exception_range(libdar::tools_printf("Json format version too hight for %s, upgrade your webdar software", myclass_id)); ignore_events = true; try { guichet_entrep.load_json(config.at(jlabel_entrep)); info_details.set_value_as_bool(config.at(jlabel_info_details)); display_treated.set_value_as_bool(config.at(jlabel_display_treated)); display_only_dir.set_value_as_bool(config.at(jlabel_display_only_dir)); display_skipped.set_value_as_bool(config.at(jlabel_display_skipped)); display_dirstats.set_value_as_bool(config.at(jlabel_display_dirstats)); allow_over.set_value_as_bool(config.at(jlabel_allow_over)); warn_over.set_value_as_bool(config.at(jlabel_warn_over)); pause.set_value_as_bool(config.at(jlabel_pause)); execute.set_value(config.at(jlabel_execute)); dry_run.set_value_as_bool(config.at(jlabel_dry_run)); multi_thread_compress.set_value_as_int(config.at(jlabel_multi_thread_compress)); hash_algo.set_selected_id(config.at(jlabel_hash_algo)); user_comment.set_value(config.at(jlabel_user_comment)); guichet_slicing.load_json(config.at(jlabel_slicing)); guichet_ciphering.load_json(config.at(jlabel_ciphering)); } catch(...) { ignore_events = false; throw; } ignore_events = false; trigger_changed(); } catch(json::exception & e) { throw exception_json(libdar::tools_printf("Error loading %s config", myclass_id), e); } } json html_options_repair::save_json() const { json config; config[jlabel_entrep] = guichet_entrep.save_json(); config[jlabel_info_details] = info_details.get_value_as_bool(); config[jlabel_display_treated] = display_treated.get_value_as_bool(); config[jlabel_display_only_dir] = display_only_dir.get_value_as_bool(); config[jlabel_display_skipped] = display_skipped.get_value_as_bool(); config[jlabel_display_dirstats] = display_dirstats.get_value_as_bool(); config[jlabel_allow_over] = allow_over.get_value_as_bool(); config[jlabel_warn_over] = warn_over.get_value_as_bool(); config[jlabel_pause] = pause.get_value_as_bool(); config[jlabel_execute] = execute.get_value(); config[jlabel_dry_run] = dry_run.get_value_as_bool(); config[jlabel_multi_thread_compress] = multi_thread_compress.get_value_as_int(); config[jlabel_hash_algo] = hash_algo.get_selected_id(); config[jlabel_user_comment] = user_comment.get_value(); config[jlabel_slicing] = guichet_slicing.save_json(); config[jlabel_ciphering] = guichet_ciphering.save_json(); return wrap_config_with_json_header(format_version, myclass_id, config); } void html_options_repair::clear_json() { ignore_events = true; try { init(); } catch(...) { ignore_events = false; throw; } ignore_events = false; trigger_changed(); } bibliotheque::using_set html_options_repair::get_using_set() const { bibliotheque::using_set ret; subconfig_add_to(ret, guichet_entrep.get_using_set()); subconfig_add_to(ret, guichet_slicing.get_using_set()); subconfig_add_to(ret, guichet_ciphering.get_using_set()); return ret; } void html_options_repair::on_event(const string & event_name) { if(event_name == html_form_input::changed) { display_only_dir.set_visible(display_treated.get_value_as_bool()); trigger_changed(); } else if(event_name == html_entrepot_landing::entrepot_only_changed) { act(entrepot_changed); trigger_changed(); } else if(event_name == html_hash_algo::changed || event_name == html_slicing::changed || event_name == html_ciphering::changed) { trigger_changed(); } else if(event_name == html_entrepot_landing::landing_path_only_changed) { act(landing_path_changed); } else throw WEBDAR_BUG; } libdar::archive_options_repair html_options_repair::get_options(shared_ptr & webui) const { libdar::archive_options_repair ret; ret.set_allow_over(allow_over.get_value_as_bool()); ret.set_warn_over(warn_over.get_value_as_bool()); ret.set_info_details(info_details.get_value_as_bool()); ret.set_display_treated(display_treated.get_value_as_bool(), display_only_dir.get_value_as_bool()); ret.set_display_skipped(display_skipped.get_value_as_bool()); ret.set_display_finished(display_dirstats.get_value_as_bool()); ret.set_pause(libdar::deci(pause.get_value()).computer()); libdar::infinint s_size; libdar::infinint f_s_size; slicing->get_slicing(s_size, f_s_size); ret.set_slicing(s_size, f_s_size); ret.set_execute(execute.get_value()); ret.set_crypto_algo(ciphering->get_crypto_algo()); if(ciphering->get_crypto_algo() != libdar::crypto_algo::none) { switch(ciphering->get_crypto_type()) { case html_ciphering::sym: ret.set_crypto_pass(ciphering->get_crypto_pass()); ret.set_iteration_count(ciphering->get_iteration_count()); ret.set_kdf_hash(ciphering->get_kdf_hash()); break; case html_ciphering::asym: ret.set_gnupg_recipients(ciphering->get_gnupg_recipients()); ret.set_gnupg_signatories(ciphering->get_gnupg_signatories()); break; default: throw WEBDAR_BUG; } ret.set_crypto_size(ciphering->get_crypto_size()); ret.set_multi_threaded_crypto(ciphering->get_multi_threaded_crypto()); } ret.set_empty(dry_run.get_value_as_bool()); ret.set_slice_permission(slicing->get_permission()); ret.set_slice_user_ownership(slicing->get_user_ownership()); ret.set_slice_group_ownership(slicing->get_group_ownership()); ret.set_user_comment(user_comment.get_value()); ret.set_hash_algo(hash_algo.get_value()); ret.set_slice_min_digits(slicing->get_min_digits()); ret.set_entrepot(entrep->get_entrepot(webui)); ret.set_multi_threaded_compress(webdar_tools_convert_to_int(multi_thread_compress.get_value())); return ret; } void html_options_repair::set_to_webdar_defaults() { clear_json(); guichet_entrep.load_from_bibliotheque(bibliotheque::default_config_name); info_details.set_value_as_bool(true); display_treated.set_value_as_bool(true); display_only_dir.set_value_as_bool(false); display_skipped.set_value_as_bool(true); display_dirstats.set_value_as_bool(true); allow_over.set_value_as_bool(true); warn_over.set_value_as_bool(true); hash_algo.set_value(libdar::hash_algo::whirlpool); guichet_slicing.load_from_bibliotheque(bibliotheque::default_config_name); guichet_ciphering.load_from_bibliotheque(bibliotheque::default_config_name); } string html_options_repair::inherited_get_body_part(const chemin & path, const request & req) { return get_body_part_from_all_children(path, req); } void html_options_repair::new_css_library_available() { unique_ptr & csslib = lookup_css_library(); if(!csslib) throw WEBDAR_BUG; webdar_css_style::update_library(*csslib); } void html_options_repair::init() { libdar::archive_options_repair defaults; guichet_entrep.clear_json(); info_details.set_value_as_bool(defaults.get_info_details()); display_treated.set_value_as_bool(defaults.get_display_treated()); display_only_dir.set_value_as_bool(defaults.get_display_treated_only_dir()); display_skipped.set_value_as_bool(defaults.get_display_skipped()); display_dirstats.set_value_as_bool(defaults.get_display_finished()); allow_over.set_value_as_bool(defaults.get_allow_over()); warn_over.set_value_as_bool(defaults.get_warn_over()); pause.set_value(libdar::deci(defaults.get_pause()).human()); execute.set_value(defaults.get_execute()); dry_run.set_value_as_bool(defaults.get_empty()); multi_thread_compress.set_value_as_int(defaults.get_multi_threaded_compress()); hash_algo.set_value(defaults.get_hash_algo()); user_comment.set_value(defaults.get_user_comment()); guichet_slicing.clear_json(); guichet_ciphering.clear_json(); } void html_options_repair::trigger_changed() { if(! ignore_events) act(changed); } webdar-1.0.0/src/html_options_merge.cpp0000644000175000017520000007502215036473204015102 00000000000000/*********************************************************************/ // webdar - a web server and interface program to libdar // Copyright (C) 2013-2025 Denis Corbin // // This file is part of Webdar // // Webdar is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // Webdar is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Webdar. If not, see // //---- // to contact the author: dar.linux@free.fr /*********************************************************************/ // C system header files #include "my_config.h" extern "C" { } // C++ system header files #include #include // webdar headers #include "webdar_css_style.hpp" #include "html_form_mask_expression.hpp" #include "tooltip_messages.hpp" // #include "html_options_merge.hpp" using namespace std; const string html_options_merge::landing_path_changed = "html_options_merge_landing_changed"; const string html_options_merge::entrepot_changed = "html_options_merge_entrep_changed"; const string html_options_merge::changed = "html_options_merge_changed"; html_options_merge::html_options_merge(): form_archgen("Update"), fs_archgen(""), pause("Pause at each N slices (zero = no pause)", html_form_input::number, "", "5", ""), allow_over("Allow slice overwriting", html_form_input::check, "", "", ""), warn_over("Warn before overwriting", html_form_input::check, "", "", ""), sequential_marks("Add sequential marks", html_form_input::check, "", "", ""), sparse_file_min_size("Minimum size of holes to lookup in sparse files", 0, "30"), user_comment("User comment in slice header", html_form_input::text, "", "", webdar_css_style::width_100vw), hash_algo("Hashing algorithm"), execute("Command to execute after each slice", html_form_input::text, "", "", webdar_css_style::width_100vw), empty("Dry run execution", html_form_input::check, "", "", ""), has_aux_fs(""), has_aux("Use an auxiliary archive", html_form_input::check, "", "", ""), decremental("Build a decremental backup", html_form_input::check, "", "", ""), aux_form("Update"), aux_block(""), auxiliary("Auxiliary archive of reference"), form_delta_sig("Update"), delta_fs(""), delta_sig("delta signatures"), form_shown("Update"), fs_shown(""), info_details("Detailed informations", html_form_input::check, "1", "", ""), display_treated("Display treated files", html_form_input::check, "1", "", ""), display_treated_only_dir("Display only treated directories", html_form_input::check, "", "", ""), display_skipped("Display skipped files", html_form_input::check, "1", "", ""), form_perimeter("Update"), fs_perimeter(""), empty_dir("Store ignored directories as empty directories", html_form_input::check, "", "", ""), ignore_events(false) { entrep.reset(new (nothrow) html_entrepot_landing()); if(!entrep) throw exception_memory(); delta_mask.reset(new (nothrow) html_mask_form_path(false)); if(!delta_mask) throw exception_memory(); filename_mask.reset(new (nothrow) html_mask_form_filename("file name")); if(!filename_mask) throw exception_memory(); ea_mask.reset(new (nothrow) html_mask_form_filename("extended attribute")); if(!ea_mask) throw exception_memory(); compr_params.reset(new (nothrow) html_compression_params(true, true, true)); if(!compr_params) throw exception_memory(); compr_mask.reset(new (nothrow) html_mask_form_filename("file name")); if(!compr_mask) throw exception_memory(); path_mask.reset(new (nothrow) html_mask_form_path(false)); if(!path_mask) throw exception_memory(); slicing.reset(new (nothrow) html_slicing()); if(! slicing) throw exception_memory(); ciphering.reset(new (nothrow) html_ciphering()); if(! ciphering) throw exception_memory(); sig_block_size.reset(new (nothrow) html_form_sig_block_size()); if(! sig_block_size) throw exception_memory(); overwriting_policy.reset(new (nothrow) html_form_overwrite_action("")); if(! overwriting_policy) throw exception_memory(); // components setups pause.set_min_only(0); // setting default values from libdar delta_sig.add_choice("drop", "Drop all signatures"); delta_sig.add_choice("transfer", "Transfer signatures as is"); delta_sig.add_choice("compute", "Define signatures to transfer or compute"); delta_filter_params.add_paragraph(); delta_filter_params.add_text(3, "Delta signature parameters"); delta_filter_title.add_paragraph(); delta_filter_title.add_text(3, "Delta signature filename based filtering"); compr_filter_title.add_paragraph(); compr_filter_title.add_text(3, "Compression filename based filtering"); libdar::archive_options_merge defaults; ciphering->set_crypto_size_range(defaults.get_crypto_size(), libdar::infinint(4294967296)); // max is 2^32 sig_block_size->set_delta_sig_min_size(defaults.get_delta_sig_min_size()); // building HTML structure static const char* sect_entrep = "entrepot"; static const char* sect_general = "general"; static const char* sect_aux = "auxiliary"; static const char* sect_delta = "delta_sig"; static const char* sect_show = "show"; static const char* sect_filter = "filter"; static const char* sect_mask_file = "mask_file"; static const char* sect_mask_path = "mask_path"; static const char* sect_ea_mask = "EA masks"; static const char* sect_fsa_scope = "FSA Scope"; static const char* sect_overwrite = "overwrite"; static const char* sect_compr = "slicing"; static const char* sect_slice = "compression"; static const char* sect_cipher = "ciphering"; deroule.add_section(sect_entrep, "Backup Repository"); deroule.add_section(sect_general, "How to process the operation"); deroule.add_section(sect_show, "What to show during the operation"); deroule.add_section(sect_aux, "Auxiliary Backup of Reference"); deroule.add_section(sect_delta, "Delta signatures"); deroule.add_section(sect_filter, "What to take into consideration for Merging"); deroule.add_section(sect_mask_file, "File name based filtering"); deroule.add_section(sect_mask_path, "Path based filterting"); deroule.add_section(sect_ea_mask, "Extended Attributes filtering"); deroule.add_section(sect_fsa_scope, "File system Specific Attributes filtering"); deroule.add_section(sect_overwrite, "Overwriting policy"); deroule.add_section(sect_compr, "Compression Options"); deroule.add_section(sect_slice, "Slicing Options"); deroule.add_section(sect_cipher, "Encryption Options"); deroule.adopt_in_section(sect_entrep, &guichet_entrep); fs_archgen.adopt(&allow_over); fs_archgen.adopt(&warn_over); fs_archgen.adopt(&pause); fs_archgen.adopt(&sequential_marks); fs_archgen.adopt(&sparse_file_min_size); fs_archgen.adopt(&user_comment); fs_archgen.adopt(&hash_algo); fs_archgen.adopt(&execute); fs_archgen.adopt(&empty); form_archgen.adopt(&fs_archgen); deroule.adopt_in_section(sect_general, &form_archgen); has_aux_fs.adopt(&has_aux); has_aux_fs.adopt(&decremental); aux_form.adopt(&has_aux_fs); aux_block.adopt(&aux_form); aux_block.adopt(&auxiliary); deroule.adopt_in_section(sect_aux, &aux_block); delta_fs.adopt(&delta_sig); form_delta_sig.adopt(&delta_fs); deroule.adopt_in_section(sect_delta, &form_delta_sig); deroule.adopt_in_section(sect_delta, &delta_filter_params); deroule.adopt_in_section(sect_delta, &guichet_sig_block_size); deroule.adopt_in_section(sect_delta, &delta_filter_title); deroule.adopt_in_section(sect_delta, &guichet_delta_mask); // by-passing deroule/html_derouleur anchor assigment delta_filter_params.assign_anchor(true); guichet_sig_block_size.bind_to_anchor(delta_filter_params.get_assigned_anchor()); delta_filter_title.assign_anchor(true); guichet_delta_mask.bind_to_anchor(delta_filter_title.get_assigned_anchor()); fs_shown.adopt(&info_details); fs_shown.adopt(&display_treated); fs_shown.adopt(&display_treated_only_dir); fs_shown.adopt(&display_skipped); form_shown.adopt(&fs_shown); deroule.adopt_in_section(sect_show, &form_shown); fs_perimeter.adopt(&empty_dir); form_perimeter.adopt(&fs_perimeter); deroule.adopt_in_section(sect_filter, &form_perimeter); deroule.adopt_in_section(sect_mask_file, &guichet_filename_mask); deroule.adopt_in_section(sect_mask_path, &guichet_path_mask); deroule.adopt_in_section(sect_ea_mask, &guichet_ea_mask); deroule.adopt_in_section(sect_fsa_scope, &fsa_scope); deroule.adopt_in_section(sect_overwrite, &guichet_overwriting_policy); deroule.adopt_in_section(sect_compr, &guichet_compr_params); deroule.adopt_in_section(sect_compr, &compr_filter_title); deroule.adopt_in_section(sect_compr, &guichet_compr_mask); // by-passing anchor assigned by deroule compr_filter_title.assign_anchor(true); guichet_compr_mask.bind_to_anchor(compr_filter_title.get_assigned_anchor()); deroule.adopt_in_section(sect_slice, &guichet_slicing); deroule.adopt_in_section(sect_cipher, &guichet_ciphering); adopt(&deroule); // events and visibility register_name(landing_path_changed); register_name(entrepot_changed); register_name(changed); delta_sig.record_actor_on_event(this, html_form_select::changed); display_treated.record_actor_on_event(this, html_form_input::changed); compr_params->record_actor_on_event(this, html_compression_params::changed); has_aux.record_actor_on_event(this, html_form_input::changed); entrep->record_actor_on_event(this, html_entrepot_landing::entrepot_only_changed); entrep->record_actor_on_event(this, html_entrepot_landing::landing_path_only_changed); allow_over.record_actor_on_event(this, html_form_input::changed); warn_over.record_actor_on_event(this, html_form_input::changed); pause.record_actor_on_event(this, html_form_input::changed); sequential_marks.record_actor_on_event(this, html_form_input::changed); sparse_file_min_size.record_actor_on_event(this, html_form_input_unit::changed); user_comment.record_actor_on_event(this, html_form_input::changed); hash_algo.record_actor_on_event(this, html_hash_algo::changed); execute.record_actor_on_event(this, html_form_input::changed); empty.record_actor_on_event(this, html_form_input::changed); decremental.record_actor_on_event(this, html_form_input::changed); auxiliary.record_actor_on_event(this, html_archive_read::changed); sig_block_size->record_actor_on_event(this, html_form_sig_block_size::changed); delta_mask->record_actor_on_event(this, html_mask_form_path::changed); info_details.record_actor_on_event(this, html_form_input::changed); display_treated_only_dir.record_actor_on_event(this, html_form_input::changed); display_skipped.record_actor_on_event(this, html_form_input::changed); empty_dir.record_actor_on_event(this, html_form_input::changed); filename_mask->record_actor_on_event(this, html_mask_form_filename::changed); path_mask->record_actor_on_event(this, html_mask_form_path::changed); ea_mask->record_actor_on_event(this, html_mask_form_filename::changed); fsa_scope.record_actor_on_event(this, html_fsa_scope::changed); overwriting_policy->record_actor_on_event(this, html_form_overwrite_action::changed); compr_mask->record_actor_on_event(this, html_mask_form_filename::changed); slicing->record_actor_on_event(this, html_slicing::changed); ciphering->record_actor_on_event(this, html_ciphering::changed); on_event(html_form_input::changed); // CSS webdar_css_style::grey_button(deroule, true); display_treated_only_dir.add_css_class(webdar_css_style::indent); allow_over.add_css_class(webdar_css_style::width_100vw_8em); warn_over.add_css_class(webdar_css_style::width_100vw_8em); pause.add_css_class(webdar_css_style::width_100vw_8em); sequential_marks.add_css_class(webdar_css_style::width_100vw_8em); user_comment.add_css_class(webdar_css_style::width_100vw_8em); execute.add_css_class(webdar_css_style::width_100vw_8em); empty.add_css_class(webdar_css_style::width_100vw_8em); // tooltips allow_over.set_tooltip(TOOLTIP_HOM_ALLOW_OVER); warn_over.set_tooltip(TOOLTIP_HOM_WARN_OVER); pause.set_tooltip(TOOLTIP_HOM_PAUSE); sequential_marks.set_tooltip(TOOLTIP_HOM_SEQ_MARKS); sparse_file_min_size.set_tooltip(TOOLTIP_HOM_SPARSE_MIN_SIZE); user_comment.set_tooltip(TOOLTIP_HOM_USER_COMMENT); hash_algo.set_tooltip(TOOLTIP_HOM_HASH_ALGO); execute.set_tooltip(TOOLTIP_HOM_EXECUTE); empty.set_tooltip(TOOLTIP_HOM_EMPTY); info_details.set_tooltip(TOOLTIP_HOM_INFO_DETAILS); display_treated.set_tooltip(TOOLTIP_HOM_DISPLAY_TREATED); display_treated_only_dir.set_tooltip(TOOLTIP_HOM_DISPLAY_ONLY_DIR); display_skipped.set_tooltip(TOOLTIP_HOM_DISPLAY_SKIPPED); has_aux.set_tooltip(TOOLTIP_HOM_HAS_AUX); decremental.set_tooltip(TOOLTIP_HOM_DECREMENTAL); delta_sig.set_tooltip(TOOLTIP_HOM_DELTA_SIG); empty_dir.set_tooltip(TOOLTIP_HOM_EMPTY_DIR); } void html_options_merge::set_biblio(const shared_ptr & ptr) { guichet_entrep.set_child(ptr, bibliotheque::repo, entrep, false); filename_mask->set_child(ptr, bibliotheque::filefilter); guichet_filename_mask.set_child(ptr, bibliotheque::filefilter, filename_mask, false); ea_mask->set_child(ptr, bibliotheque::filefilter); path_mask->set_child(ptr, bibliotheque::pathfilter); guichet_ea_mask.set_child(ptr, bibliotheque::filefilter, ea_mask, false); delta_mask->set_child(ptr, bibliotheque::pathfilter); guichet_delta_mask.set_child(ptr, bibliotheque::pathfilter, delta_mask, false); guichet_compr_params.set_child(ptr, bibliotheque::compress, compr_params, false); compr_mask->set_child(ptr, bibliotheque::filefilter); guichet_compr_mask.set_child(ptr, bibliotheque::filefilter, compr_mask, false); guichet_path_mask.set_child(ptr, bibliotheque::pathfilter, path_mask, false); auxiliary.set_biblio(ptr); guichet_slicing.set_child(ptr, bibliotheque::slicing, slicing, false); guichet_ciphering.set_child(ptr, bibliotheque::ciphering, ciphering, false); guichet_sig_block_size.set_child(ptr, bibliotheque::delta_sig, sig_block_size, true); guichet_overwriting_policy.set_child(ptr, bibliotheque::over_policy, overwriting_policy, true); init(); } void html_options_merge::load_json(const json & source) { try { unsigned int version; string class_id; json config = unwrap_config_from_json_header(source, version, class_id); if(class_id != myclass_id) throw exception_range(libdar::tools_printf("Unexpected class_id in json data, found %s while expecting %s", class_id.c_str(), myclass_id)); if(version > format_version) throw exception_range(libdar::tools_printf("Json format version too hight for %s, upgrade your webdar software", myclass_id)); ignore_events = true; try { guichet_entrep.load_json(config.at(jlabel_entrep)); allow_over.set_value_as_bool(config.at(jlabel_allow_over)); warn_over.set_value_as_bool(config.at(jlabel_warn_over)); pause.set_value_as_bool(config.at(jlabel_pause)); sequential_marks.set_value_as_bool(config.at(jlabel_seq_marks)); sparse_file_min_size.set_value_as_infinint(libdar::deci(config.at(jlabel_sparse_min_size)).computer()); user_comment.set_value(config.at(jlabel_user_comment)); hash_algo.set_selected_id(config.at(jlabel_hash_algo)); execute.set_value(config.at(jlabel_execute)); empty.set_value_as_bool(config.at(jlabel_empty)); has_aux.set_value_as_bool(config.at(jlabel_has_aux)); if(has_aux.get_value_as_bool()) auxiliary.load_json(config.at(jlabel_auxiliary)); else auxiliary.clear_json(); decremental.set_value_as_bool(config.at(jlabel_decremental)); delta_sig.set_selected_id(config.at(jlabel_delta_sig)); if(delta_sig.get_selected_id() == "compute") { guichet_sig_block_size.load_json(config.at(jlabel_sig_block_size)); guichet_delta_mask.load_json(config.at(jlabel_delta_mask)); } else { guichet_sig_block_size.clear_json(); guichet_delta_mask.clear_json(); } info_details.set_value_as_bool(config.at(jlabel_info_details)); display_treated.set_value_as_bool(config.at(jlabel_display_treated)); display_treated_only_dir.set_value_as_bool(config.at(jlabel_display_only_dir)); display_skipped.set_value_as_bool(config.at(jlabel_display_skipped)); empty_dir.set_value_as_bool(config.at(jlabel_empty_dir)); guichet_filename_mask.load_json(config.at(jlabel_filename_mask)); guichet_path_mask.load_json(config.at(jlabel_path_mask)); guichet_ea_mask.load_json(config.at(jlabel_ea_mask)); fsa_scope.load_json(config.at(jlabel_fsa_scope)); guichet_overwriting_policy.load_json(config.at(jlabel_overwrite_policy)); guichet_compr_params.load_json(config.at(jlabel_compr_params)); guichet_compr_mask.load_json(config.at(jlabel_compr_mask)); guichet_slicing.load_json(config.at(jlabel_slicing)); guichet_ciphering.load_json(config.at(jlabel_ciphering)); } catch(...) { ignore_events = false; throw; } ignore_events = false; trigger_changed(); } catch(json::exception & e) { throw exception_json(libdar::tools_printf("Error loading %s config", myclass_id), e); } } json html_options_merge::save_json() const { json config; html_options_merge* me = const_cast(this); if(me == nullptr) throw WEBDAR_BUG; config[jlabel_entrep] = guichet_entrep.save_json(); config[jlabel_allow_over] = allow_over.get_value_as_bool(); config[jlabel_warn_over] = warn_over.get_value_as_bool(); config[jlabel_pause] = pause.get_value_as_bool(); config[jlabel_seq_marks] = sequential_marks.get_value_as_bool(); config[jlabel_sparse_min_size] = libdar::deci(sparse_file_min_size.get_value_as_infinint()).human(); config[jlabel_user_comment] = user_comment.get_value(); config[jlabel_hash_algo] = hash_algo.get_selected_id(); config[jlabel_execute] = execute.get_value(); config[jlabel_empty] = empty.get_value_as_bool(); config[jlabel_has_aux] = has_aux.get_value_as_bool(); if(has_aux.get_value_as_bool()) config[jlabel_auxiliary] = auxiliary.save_json(); else me->auxiliary.clear_json(); config[jlabel_decremental] = decremental.get_value_as_bool(); config[jlabel_delta_sig] = delta_sig.get_selected_id(); if(delta_sig.get_selected_id() == "compute") { config[jlabel_sig_block_size] = guichet_sig_block_size.save_json(); config[jlabel_delta_mask] = guichet_delta_mask.save_json(); } else { me->guichet_sig_block_size.clear_json(); me->guichet_delta_mask.clear_json(); } config[jlabel_info_details] = info_details.get_value_as_bool(); config[jlabel_display_treated] = display_treated.get_value_as_bool(); config[jlabel_display_only_dir] = display_treated_only_dir.get_value_as_bool(); config[jlabel_display_skipped] = display_skipped.get_value_as_bool(); config[jlabel_empty_dir] = empty_dir.get_value_as_bool(); config[jlabel_filename_mask] = guichet_filename_mask.save_json(); config[jlabel_path_mask] = guichet_path_mask.save_json(); config[jlabel_ea_mask] = guichet_ea_mask.save_json(); config[jlabel_fsa_scope] = fsa_scope.save_json(); config[jlabel_overwrite_policy] = guichet_overwriting_policy.save_json(); config[jlabel_compr_params] = guichet_compr_params.save_json(); config[jlabel_compr_mask] = guichet_compr_mask.save_json(); config[jlabel_slicing] = guichet_slicing.save_json(); config[jlabel_ciphering] = guichet_ciphering.save_json(); return wrap_config_with_json_header(format_version, myclass_id, config); } void html_options_merge::clear_json() { ignore_events = true; try { init(); } catch(...) { ignore_events = false; throw; } ignore_events = true; trigger_changed(); } bibliotheque::using_set html_options_merge::get_using_set() const { bibliotheque::using_set ret; subconfig_add_to(ret, guichet_entrep.get_using_set()); subconfig_add_to(ret, auxiliary.get_using_set()); subconfig_add_to(ret, guichet_sig_block_size.get_using_set()); subconfig_add_to(ret, guichet_delta_mask.get_using_set()); subconfig_add_to(ret, guichet_filename_mask.get_using_set()); subconfig_add_to(ret, guichet_path_mask.get_using_set()); subconfig_add_to(ret, guichet_ea_mask.get_using_set()); subconfig_add_to(ret, guichet_overwriting_policy.get_using_set()); subconfig_add_to(ret, guichet_compr_mask.get_using_set()); subconfig_add_to(ret, guichet_slicing.get_using_set()); subconfig_add_to(ret, guichet_ciphering.get_using_set()); return ret; } void html_options_merge::on_event(const string & event_name) { if(event_name == html_form_input::changed || event_name == html_form_select::changed || event_name == html_compression_params::changed) { auxiliary.set_visible(has_aux.get_value_as_bool()); decremental.set_visible(has_aux.get_value_as_bool()); delta_filter_params.set_visible(delta_sig.get_selected_num() == 2); delta_filter_title.set_visible(delta_sig.get_selected_num() == 2); guichet_delta_mask.set_visible(delta_sig.get_selected_num() == 2); guichet_sig_block_size.set_visible(delta_sig.get_selected_num() == 2); display_treated_only_dir.set_visible(display_treated.get_value_as_bool()); if(! compr_params->get_keep_compressed() && compr_params->get_compression_algo() != libdar::compression::none) { compr_filter_title.set_visible(true); guichet_compr_mask.set_visible(true); } else { compr_filter_title.set_visible(false); guichet_compr_mask.set_visible(false); } // no need to call my_body_part_has_changed() // because changed done in on_event concern // body_builder objects we have adopted trigger_changed(); } else if(event_name == html_entrepot_landing::entrepot_only_changed) { act(entrepot_changed); trigger_changed(); } else if(event_name == html_hash_algo::changed || event_name == html_archive_read::changed || event_name == html_form_sig_block_size::changed || event_name == html_mask_form_filename::changed || event_name == html_mask_form_path::changed || event_name == html_fsa_scope::changed || event_name == html_form_overwrite_action::changed || event_name == html_slicing::changed || event_name == html_ciphering::changed) { trigger_changed(); } else if(event_name == html_entrepot_landing::landing_path_only_changed) { act(landing_path_changed); } else throw WEBDAR_BUG; } libdar::archive_options_merge html_options_merge::get_options(shared_ptr & webui) const { libdar::archive_options_merge ret; shared_ptr aux; ret.set_entrepot(entrep->get_entrepot(webui)); ret.set_allow_over(allow_over.get_value_as_bool()); ret.set_warn_over(warn_over.get_value_as_bool()); ret.set_pause(libdar::deci(pause.get_value()).computer()); ret.set_slice_permission(slicing->get_permission()); ret.set_slice_user_ownership(slicing->get_user_ownership()); ret.set_slice_group_ownership(slicing->get_group_ownership()); ret.set_sequential_marks(sequential_marks.get_value_as_bool()); ret.set_sparse_file_min_size(sparse_file_min_size.get_value_as_infinint()); ret.set_user_comment(user_comment.get_value()); ret.set_slice_min_digits(slicing->get_min_digits()); ret.set_hash_algo(hash_algo.get_value()); ret.set_empty(empty.get_value_as_bool()); ret.set_execute(execute.get_value()); ret.set_info_details(info_details.get_value_as_bool()); ret.set_display_treated(display_treated.get_value_as_bool(), display_treated_only_dir.get_value_as_bool()); ret.set_display_skipped(display_skipped.get_value_as_bool()); ret.set_empty_dir(empty_dir.get_value_as_bool()); ret.set_selection(*(filename_mask->get_mask())); ret.set_subtree(*(path_mask->get_mask())); ret.set_overwriting_rules(*(overwriting_policy->get_overwriting_action())); if(! compr_params->get_keep_compressed()) { ret.set_keep_compressed(false); ret.set_compression(compr_params->get_compression_algo()); ret.set_compression_level(compr_params->get_compression_level()); ret.set_min_compr_size(compr_params->get_min_compression_size()); libdar::U_I val = webdar_tools_convert_from_infinint(compr_params->get_compression_block(), string("compression block size is too large for the underlying operating system, please reduce")); if(val < tokens_min_compr_bs && val != 0) throw exception_range(libdar::tools_printf("compression block size is too small, select either zero to disable compression per block or a block size greater or equal to %d", tokens_min_compr_bs)); ret.set_compression_block_size(val); unique_ptr libcompmask = compr_mask->get_mask(); if(!libcompmask) throw WEBDAR_BUG; ret.set_compr_mask(*libcompmask); ret.set_multi_threaded_compress(compr_params->get_num_threads()); } else ret.set_keep_compressed(true); libdar::infinint s_size; libdar::infinint f_s_size; slicing->get_slicing(s_size, f_s_size); ret.set_slicing(s_size, f_s_size); ret.set_ea_mask(*(ea_mask->get_mask())); ret.set_fsa_scope(fsa_scope.get_scope()); ret.set_crypto_algo(ciphering->get_crypto_algo()); if(ciphering->get_crypto_algo() != libdar::crypto_algo::none) { switch(ciphering->get_crypto_type()) { case html_ciphering::sym: ret.set_crypto_pass(ciphering->get_crypto_pass()); ret.set_iteration_count(ciphering->get_iteration_count()); ret.set_kdf_hash(ciphering->get_kdf_hash()); break; case html_ciphering::asym: ret.set_gnupg_recipients(ciphering->get_gnupg_recipients()); ret.set_gnupg_signatories(ciphering->get_gnupg_signatories()); break; default: throw WEBDAR_BUG; } ret.set_crypto_size(ciphering->get_crypto_size()); ret.set_multi_threaded_crypto(ciphering->get_multi_threaded_crypto()); } if(has_aux.get_value_as_bool()) { aux.reset(new (nothrow) libdar::archive(webui->get_user_interaction(), libdar::path(auxiliary.get_archive_path()), auxiliary.get_archive_basename(), EXTENSION, auxiliary.get_read_options(webui))); if(!aux) throw exception_memory(); else ret.set_auxiliary_ref(aux); ret.set_decremental_mode(decremental.get_value_as_bool()); } unique_ptr dmask; switch(delta_sig.get_selected_num()) { case 0: // drop ret.set_delta_signature(false); break; case 1: // transfer ret.set_delta_signature(true); break; case 2: // transfer and recompute dmask = delta_mask->get_mask(); if(dmask) { ret.set_delta_signature(true); ret.set_delta_mask(*dmask); } else throw WEBDAR_BUG; ret.set_sig_block_len(sig_block_size->get_value()); ret.set_delta_sig_min_size(sig_block_size->get_delta_sig_min_size()); break; default: throw WEBDAR_BUG; } return ret; } void html_options_merge::set_to_webdar_defaults() { clear_json(); guichet_entrep.load_from_bibliotheque(bibliotheque::default_config_name); allow_over.set_value_as_bool(true); warn_over.set_value_as_bool(true); sequential_marks.set_value_as_bool(true); hash_algo.set_value(libdar::hash_algo::whirlpool); delta_sig.set_selected_id("transfer"); info_details.set_value_as_bool(true); display_treated.set_value_as_bool(true); display_treated_only_dir.set_value_as_bool(false); display_skipped.set_value_as_bool(true); empty_dir.set_value_as_bool(true); guichet_overwriting_policy.load_from_bibliotheque(bibliotheque::default_config_name); guichet_compr_params.clear_json(); compr_params->set_keep_compressed(true); guichet_slicing.load_from_bibliotheque(bibliotheque::default_config_name); guichet_ciphering.load_from_bibliotheque(bibliotheque::default_config_name); } string html_options_merge::inherited_get_body_part(const chemin & path, const request & req) { return get_body_part_from_all_children(path, req); } void html_options_merge::new_css_library_available() { unique_ptr & csslib = lookup_css_library(); if(!csslib) throw WEBDAR_BUG; webdar_css_style::update_library(*csslib); } void html_options_merge::init() { libdar::archive_options_merge defaults; guichet_entrep.clear_json(); allow_over.set_value_as_bool(defaults.get_allow_over()); warn_over.set_value_as_bool(defaults.get_warn_over()); pause.set_value(libdar::deci(defaults.get_pause()).human()); sequential_marks.set_value_as_bool(defaults.get_sequential_marks()); sparse_file_min_size.set_value_as_infinint(defaults.get_sparse_file_min_size()); user_comment.set_value(defaults.get_user_comment()); hash_algo.set_value(defaults.get_hash_algo()); execute.set_value(defaults.get_execute()); empty.set_value_as_bool(defaults.get_empty()); has_aux.set_value_as_bool(false); decremental.set_value_as_bool(defaults.get_decremental_mode()); auxiliary.clear_json(); delta_sig.set_selected_num(1); // transfer by default guichet_sig_block_size.clear_json(); guichet_delta_mask.clear_json(); info_details.set_value_as_bool(defaults.get_info_details()); display_treated.set_value_as_bool(defaults.get_display_treated()); display_treated_only_dir.set_value_as_bool(defaults.get_display_treated_only_dir()); display_skipped.set_value_as_bool(defaults.get_display_skipped()); empty_dir.set_value_as_bool(defaults.get_empty_dir()); guichet_filename_mask.clear_json(); guichet_path_mask.clear_json(); guichet_ea_mask.clear_json(); fsa_scope.clear_json(); guichet_overwriting_policy.clear_json(); guichet_compr_params.clear_json(); guichet_compr_mask.clear_json(); guichet_slicing.clear_json(); guichet_ciphering.clear_json(); } void html_options_merge::trigger_changed() { if(! ignore_events) act(changed); } webdar-1.0.0/src/html_hash_algo.cpp0000644000175000017520000000460314773727237014171 00000000000000/*********************************************************************/ // webdar - a web server and interface program to libdar // Copyright (C) 2013-2025 Denis Corbin // // This file is part of Webdar // // Webdar is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // Webdar is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Webdar. If not, see // //---- // to contact the author: dar.linux@free.fr /*********************************************************************/ // C system header files #include "my_config.h" extern "C" { } // C++ system header files // webdar headers // #include "html_hash_algo.hpp" using namespace std; const string html_hash_algo::changed = "html_hash_algo_changed"; html_hash_algo::html_hash_algo(const string & title): html_form_select(title) { add_choice("none", "none"); add_choice("md5", "md5"); add_choice("sha1", "sha1"); add_choice("sha512", "sha512"); add_choice("whirlpool", "whirlpool"); set_selected_num(0); register_name(changed); record_actor_on_event(this, html_form_select::changed); } libdar::hash_algo html_hash_algo::get_value() const { switch(get_selected_num()) { case 0: return libdar::hash_algo::none; case 1: return libdar::hash_algo::md5; case 2: return libdar::hash_algo::sha1; case 3: return libdar::hash_algo::sha512; case 4: return libdar::hash_algo::whirlpool; default: throw WEBDAR_BUG; } } void html_hash_algo::set_value(libdar::hash_algo val) { switch(val) { case libdar::hash_algo::none: set_selected_num(0); break; case libdar::hash_algo::md5: set_selected_num(1); break; case libdar::hash_algo::sha1: set_selected_num(2); break; case libdar::hash_algo::sha512: set_selected_num(3); break; case libdar::hash_algo::whirlpool: set_selected_num(4); break; default: throw WEBDAR_BUG; } my_body_part_has_changed(); } webdar-1.0.0/src/answer.cpp0000644000175000017520000001103214773727237012511 00000000000000/*********************************************************************/ // webdar - a web server and interface program to libdar // Copyright (C) 2013-2025 Denis Corbin // // This file is part of Webdar // // Webdar is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // Webdar is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Webdar. If not, see // //---- // to contact the author: dar.linux@free.fr /*********************************************************************/ // C system header files #include "my_config.h" extern "C" { } // C++ system header files // webdar headers #include "exceptions.hpp" #include "webdar_tools.hpp" #include "tokens.hpp" // #include "answer.hpp" using namespace std; void answer::clear() { status = maj_vers = min_vers = 0; reason = ""; attributes.clear(); next_read = attributes.begin(); set_attribute(HDR_SERVER, "webdar/0.0"); add_body(""); // this adds the Content-Lenght header }; void answer::add_cookie(const string & key, const string & value) { string oldval; string xval = key+"="+value; // we cannot use add_attribute_member as it builds a comma (,) // separated list while the Set-Cookie field receives a // semi-column (;) separated list of attributes if(find_attribute(HDR_SET_COOKIE, oldval)) set_attribute(HDR_SET_COOKIE, oldval + "; " + xval); else set_attribute(HDR_SET_COOKIE, xval); } void answer::add_body(const string & key) { body = key; set_attribute(HDR_CONTENT_LENGTH, webdar_tools_convert_to_string(body.size())); } void answer::add_attribute_member(const string & key, const string & value) { string in_place; if(find_attribute(key, in_place)) set_attribute(key, in_place + "," + value); else set_attribute(key, value); } bool answer::is_valid() const { return status < 600 && status > 99; } bool answer::find_attribute(const string & key, string & value) const { string lkey = webdar_tools_to_canonical_case(key); map::const_iterator it = attributes.find(lkey); if(it != attributes.end()) { value = it->second; return true; } else return false; } void answer::write(proto_connexion & output) { string key, val; if(maj_vers != 1 || (min_vers != 0 && min_vers != 1)) throw exception_feature("Unsupported HTTP protocole version: " + webdar_tools_convert_to_string(maj_vers) + "/" + webdar_tools_convert_to_string(min_vers)); if(status < 100 && status > 599) throw WEBDAR_BUG; val = string("HTTP/") + webdar_tools_convert_to_string(maj_vers) + "." + webdar_tools_convert_to_string(min_vers); output.write(val.c_str(), val.size()); output.write(" ", 1); val = webdar_tools_convert_to_string(status); output.write(val.c_str(), val.size()); output.write(" ", 1); output.write(reason.c_str(), reason.size()); output.write("\r\n", 2); reset_read_next_attribute(); while(read_next_attribute(key, val)) { output.write(key.c_str(), key.size()); output.write(": ", 2); output.write(val.c_str(), val.size()); output.write("\r\n", 2); } output.write("\r\n", 2); // empty line to indicate the start of the body if(get_body().size() > 0) output.write(body.c_str(), body.size()); // flushing output writings output.flush_write(); } void answer::reset_read_next_attribute() const { next_read = attributes.begin(); } bool answer::read_next_attribute(string & key, string & value) const { if(next_read != attributes.end()) { key = next_read->first; value = next_read->second; ++next_read; return true; } else return false; } void answer::copy_from(const answer & ref) { status = ref.status; reason = ref.reason; maj_vers = ref.maj_vers; min_vers = ref.min_vers; attributes = ref.attributes; body = ref.body; next_read = attributes.begin(); } webdar-1.0.0/src/html_disconnect.hpp0000644000175000017520000001036714773746227014406 00000000000000/*********************************************************************/ // webdar - a web server and interface program to libdar // Copyright (C) 2013-2025 Denis Corbin // // This file is part of Webdar // // Webdar is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // Webdar is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Webdar. If not, see // //---- // to contact the author: dar.linux@free.fr /*********************************************************************/ #ifndef HTML_DISCONNECT_HPP #define HTML_DISCONNECT_HPP // C system header files #include "my_config.h" extern "C" { } // C++ system header files #include // webdar headers #include "html_div.hpp" #include "actor.hpp" #include "events.hpp" #include "html_text.hpp" #include "html_double_button.hpp" #include "html_image.hpp" #include "html_version.hpp" /// html component used for the user to define a has algorithm class html_disconnect : public html_div, public actor, public events { public: /// disconnect event static const std::string event_disconn; html_disconnect(); html_disconnect(const html_disconnect & ref) = delete; html_disconnect(html_disconnect && ref) noexcept = delete; html_disconnect & operator = (const html_disconnect & ref) = delete; html_disconnect & operator = (html_disconnect && ref) noexcept = delete; ~html_disconnect() = default; /// set the username to display for the session ownership void set_username(const std::string & username); /// inherited from actor virtual void on_event(const std::string & event_name) override; /// whether to emulate user logout while using basic authentication (see also class server) /// \note in version 1.0 web authentication relies on basic authentication schema, which does not /// have any mean to provide disconnection. To emulate such disconnection, each new TCP session requires /// to reauthentification from the user. A web browser may decide to tear down and recreate a new TCP session /// after some time, which will requirer the user to reauthenticate while from user stand point this is /// the same web/http session. To avoid this, it is possible to only rely on the basic authnentication /// and upon new TCP session, the server object only validate that the HTTP header has a valid credentials. /// The drawback is that deauthentication is not possible unless the browser is restarted. The following call /// define the either the first (true) ot the second (false) previously described behaviors for all server /// objects. This is a static method because it is expected to be removed in the future when the session object /// will keep trace of valid authentication tokens (stored as cookies or basic authentication with volatile temporary /// password also stored and eventually removed from an internal base the challenge object would have access to. static void force_disconnection_at_end_of_session(bool val) { default_basic_auth = ! val; }; protected: /// inherited from body_builder from html_button virtual void new_css_library_available() override; private: static const std::string event_version; static const std::string css_global; static const std::string css_logo; static const std::string css_title; static const std::string css_title_vers; static const std::string css_title_box; static const std::string css_status; static const std::string css_status_box; static const std::string css_quit_box; html_image logo; html_div title_box; html_text title; html_button title_vers; html_div status_box; html_text status; html_double_button quit; html_version version_details; static bool default_basic_auth; ///< if true, no disconnection is provided (unless browser is restarted) }; #endif webdar-1.0.0/src/html_statistics.cpp0000644000175000017520000001531314773727237014436 00000000000000/*********************************************************************/ // webdar - a web server and interface program to libdar // Copyright (C) 2013-2025 Denis Corbin // // This file is part of Webdar // // Webdar is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // Webdar is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Webdar. If not, see // //---- // to contact the author: dar.linux@free.fr /*********************************************************************/ // C system header files #include "my_config.h" extern "C" { } // C++ system header files // webdar headers #include "webdar_css_style.hpp" // #include "html_statistics.hpp" using namespace std; html_statistics::html_statistics() { table = nullptr; // css treated_lbl.add_css_class(webdar_css_style::text_right); hard_links_lbl.add_css_class(webdar_css_style::text_right); skipped_lbl.add_css_class(webdar_css_style::text_right); ignored_lbl.add_css_class(webdar_css_style::text_right); tooold_lbl.add_css_class(webdar_css_style::text_right); errored_lbl.add_css_class(webdar_css_style::text_right); deleted_lbl.add_css_class(webdar_css_style::text_right); ea_treated_lbl.add_css_class(webdar_css_style::text_right); byte_amount_lbl.add_css_class(webdar_css_style::text_right); total_lbl.add_css_class(webdar_css_style::text_right); total_lbl.add_css_class(webdar_css_style::text_bold); treated_count.add_css_class(webdar_css_style::text_bold); hard_links_count.add_css_class(webdar_css_style::text_bold); skipped_count.add_css_class(webdar_css_style::text_bold); ignored_count.add_css_class(webdar_css_style::text_bold); tooold_count.add_css_class(webdar_css_style::text_bold); errored_count.add_css_class(webdar_css_style::text_bold); deleted_count.add_css_class(webdar_css_style::text_bold); ea_treated_count.add_css_class(webdar_css_style::text_bold); byte_amount_count.add_css_class(webdar_css_style::text_bold); total_count.add_css_class(webdar_css_style::text_bold); } void html_statistics::clear_counters() { stats.clear(); update_html_counters(); } void html_statistics::clear_labels() { treated_lbl.clear(); hard_links_lbl.clear(); skipped_lbl.clear(); ignored_lbl.clear(); tooold_lbl.clear(); errored_lbl.clear(); deleted_lbl.clear(); ea_treated_lbl.clear(); byte_amount_lbl.clear(); total_lbl.clear(); unbuild(); ignore_body_changed_from_my_children(true); } string html_statistics::inherited_get_body_part(const chemin & path, const request & req) { update_html_counters(); if(table == nullptr) build(); return get_body_part_from_all_children(path, req); } void html_statistics::new_css_library_available() { unique_ptr & csslib = lookup_css_library(); if(!csslib) throw WEBDAR_BUG; webdar_css_style::update_library(*csslib); } void html_statistics::build() { if(table != nullptr) throw WEBDAR_BUG; // table is already built table = new (nothrow) html_table(2); if(table == nullptr) throw WEBDAR_BUG; try { if(treated_lbl.get_body_part() != "") { table->adopt_static_html(treated_lbl.get_body_part()); table->adopt(&treated_count); } if(hard_links_lbl.get_body_part() != "") { table->adopt_static_html(hard_links_lbl.get_body_part()); table->adopt(&hard_links_count); } if(skipped_lbl.get_body_part() != "") { table->adopt_static_html(skipped_lbl.get_body_part()); table->adopt(&skipped_count); } if(ignored_lbl.get_body_part() != "") { table->adopt_static_html(ignored_lbl.get_body_part()); table->adopt(&ignored_count); } if(tooold_lbl.get_body_part() != "") { table->adopt_static_html(tooold_lbl.get_body_part()); table->adopt(&tooold_count); } if(errored_lbl.get_body_part() != "") { table->adopt_static_html(errored_lbl.get_body_part()); table->adopt(&errored_count); } if(deleted_lbl.get_body_part() != "") { table->adopt_static_html(deleted_lbl.get_body_part()); table->adopt(&deleted_count); } if(ea_treated_lbl.get_body_part() != "") { table->adopt_static_html(ea_treated_lbl.get_body_part()); table->adopt(&ea_treated_count); } if(byte_amount_lbl.get_body_part() != "") { table->adopt_static_html(byte_amount_lbl.get_body_part()); table->adopt(&byte_amount_count); } if(total_lbl.get_body_part() != "") { table->adopt_static_html(total_lbl.get_body_part()); table->adopt(&total_count); } adopt(table); } catch(...) { if(table != nullptr) { delete table; table = nullptr; } throw; } } void html_statistics::unbuild() { if(table != nullptr) { delete table; table = nullptr; } } void html_statistics::update_html_counters() { if(treated_lbl.get_body_part() != "") { treated_count.clear(); treated_count.add_text(0, libdar::deci(stats.get_treated()).human()); } if(hard_links_lbl.get_body_part() != "") { hard_links_count.clear(); hard_links_count.add_text(0, libdar::deci(stats.get_hard_links()).human()); } if(skipped_lbl.get_body_part() != "") { skipped_count.clear(); skipped_count.add_text(0, libdar::deci(stats.get_skipped()).human()); } if(ignored_lbl.get_body_part() != "") { ignored_count.clear(); ignored_count.add_text(0, libdar::deci(stats.get_ignored()).human()); } if(tooold_lbl.get_body_part() != "") { tooold_count.clear(); tooold_count.add_text(0, libdar::deci(stats.get_tooold()).human()); } if(errored_lbl.get_body_part() != "") { errored_count.clear(); errored_count.add_text(0, libdar::deci(stats.get_errored()).human()); } if(deleted_lbl.get_body_part() != "") { deleted_count.clear(); deleted_count.add_text(0, libdar::deci(stats.get_deleted()).human()); } if(ea_treated_lbl.get_body_part() != "") { ea_treated_count.clear(); ea_treated_count.add_text(0, libdar::deci(stats.get_ea_treated()).human()); } if(byte_amount_lbl.get_body_part() != "") { byte_amount_count.clear(); byte_amount_count.add_text(0, libdar::deci(stats.get_byte_amount()).human()); } if(total_lbl.get_body_part() != "") { total_count.clear(); total_count.add_text(0, libdar::deci(stats.total()).human()); } } webdar-1.0.0/src/archive_create.hpp0000644000175000017520000000536215024332560014151 00000000000000/*********************************************************************/ // webdar - a web server and interface program to libdar // Copyright (C) 2013-2025 Denis Corbin // // This file is part of Webdar // // Webdar is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // Webdar is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Webdar. If not, see // //---- // to contact the author: dar.linux@free.fr /*********************************************************************/ #ifndef ARCHIVE_CREATE_HPP #define ARCHIVE_CREATE_HPP // C system header files #include "my_config.h" extern "C" { } // C++ system header files #include #include // webdar headers #include "html_web_user_interaction.hpp" #include "saisie.hpp" /// class archive_create run libdar creation in a dedicated thread /// Accordingly to the libhtreadar::thread paradigm, this class /// provides methods to set parameter to the comparison operation /// these are not set at object construction time, nor the thread /// is run at that time, but once all parameter have been set by /// invoking the libthreadar::run() method /// \note this class is not a graphical class at all but relies /// on a provided web_user_interaction object to report status and /// intermediate information about the operation under process class archive_create : public libthreadar::thread_signal { public: archive_create(); archive_create(const archive_create & ref) = delete; archive_create(archive_create && ref) noexcept = default; archive_create & operator = (const archive_create & ref) = delete; archive_create & operator = (archive_create && ref) noexcept = default; ~archive_create() { cancel(); join(); }; // parameters expected by the libdar::archive constructor void set_user_interaction(std::shared_ptr ref) { ui = ref; }; void set_parametrage(const saisie* x_param) { param = x_param; }; protected: /// inherited from class libthreadar::thread virtual void inherited_run() override; /// inherited from libthreadar::thread virtual void signaled_inherited_cancel() override; private: const saisie* param; std::shared_ptr ui; }; #endif webdar-1.0.0/src/html_label.cpp0000644000175000017520000000422115035733460013302 00000000000000/*********************************************************************/ // webdar - a web server and interface program to libdar // Copyright (C) 2013-2025 Denis Corbin // // This file is part of Webdar // // Webdar is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // Webdar is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Webdar. If not, see // //---- // to contact the author: dar.linux@free.fr /*********************************************************************/ // C system header files #include "my_config.h" extern "C" { } // C++ system header files #include // webdar headers #include "tokens.hpp" #include "css.hpp" #include "css_class.hpp" #include "webdar_css_style.hpp" // #include "html_label.hpp" using namespace std; html_label::html_label(const std::string & x_label): label(x_label), for_field(""), emphase(false) { } html_label::html_label(const std::string & x_label, const std::string & x_tooltip): label(x_label), for_field(""), emphase(false) { set_tooltip(x_tooltip); } string html_label::inherited_get_body_part(const chemin & path, const request & req) { return get_body_part(); } string html_label::get_body_part() const { string ret; string extra; string cssdef; string forstring; string arg; if(emphase) extra = webdar_css_style::text_bold; cssdef = get_css_classes(extra); forstring = for_field.empty() ? "" : " for=\"" + for_field + "\""; if(!cssdef.empty()) cssdef = string(" ") + cssdef; arg = cssdef + forstring; ret = "" + label; ret += get_tooltip_body_part(); ret += "\n"; return ret; } webdar-1.0.0/src/html_span.hpp0000644000175000017520000000357615035005127013175 00000000000000/*********************************************************************/ // webdar - a web server and interface program to libdar // Copyright (C) 2013-2025 Denis Corbin // // This file is part of Webdar // // Webdar is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // Webdar is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Webdar. If not, see // //---- // to contact the author: dar.linux@free.fr /*********************************************************************/ #ifndef HTML_SPAN_HPP #define HTML_SPAN_HPP // C system header files #include "my_config.h" extern "C" { } // C++ system header files // webdar headers #include "html_level.hpp" /// class html_span is the implementation of /// objects get enclosed in the if they are /// adopted (from body_builder::adopt() method) class html_span : public html_level { public: html_span() = default; html_span(const html_span & ref) = delete; html_span(html_span && ref) noexcept = delete; html_span & operator = (const html_span & ref) = delete; html_span & operator = (html_span && ref) noexcept = delete; ~html_span() = default; protected: /// inherited from body_builder virtual std::string inherited_get_body_part(const chemin & path, const request & req) override; private: std::string grid_area; ///< CSS grid area name (empty if not used) }; #endif webdar-1.0.0/src/html_form_ignore_as_symlink.hpp0000644000175000017520000001111614773727237017005 00000000000000/*********************************************************************/ // webdar - a web server and interface program to libdar // Copyright (C) 2013-2025 Denis Corbin // // This file is part of Webdar // // Webdar is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // Webdar is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Webdar. If not, see // //---- // to contact the author: dar.linux@free.fr /*********************************************************************/ #ifndef HTML_FORM_IGNORE_AS_SYMLINK_HPP #define HTML_FORM_IGNORE_AS_SYMLINK_HPP // C system header files #include "my_config.h" extern "C" { } // C++ system header files #include // webdar headers #include "html_form_dynamic_table.hpp" #include "jsoner.hpp" #include "actor.hpp" #include "events.hpp" /// class html_form_ignore_as_symlink provide interface for the user to give a list of gnupg signatories and gnupg recipients /// this html components is consitued of: /// /** \verbatim +---html_form_dynamic_table-----------------+-------+ | | | |+---------------------------------------+ |+-+ | || | || | del| |+---------------------------------------+ |+-+ | |+---------------------------------------+ |+-+ | || | || | del| |+---------------------------------------+ |+-+ | |+---------------------------------------+ |+-+ | || | || | del| |+---------------------------------------+ |+-+ | |+---------------------------------------+ |+-+ | || | || | del| |+---------------------------------------+ |+-+ | +-------------------------------------------+-------+ +------------+ | add entry | +------------+ \endverbatim **/ /// /// \note this component should adopted by an html_form directly /// or not (through an html_form_fieldset for example) /// class html_form_ignore_as_symlink : public body_builder, public html_form_dynamic_table_object_provider, public jsoner, public actor, public events { public: static const std::string changed; html_form_ignore_as_symlink(); html_form_ignore_as_symlink(const html_form_ignore_as_symlink & ref); html_form_ignore_as_symlink(html_form_ignore_as_symlink && ref) noexcept = delete; html_form_ignore_as_symlink & operator = (const html_form_ignore_as_symlink & ref) = delete; html_form_ignore_as_symlink & operator = (html_form_ignore_as_symlink && ref) noexcept = delete; ~html_form_ignore_as_symlink() = default; /// whether some symlinks have been set in the list bool empty() const { return table.empty(); }; /// return the recipient list filled by the webuser std::set get_symlink_list() const; /// return the list of signatories filled by the webuser std::vector get_gnupg_signatories() const; /// inherited from html_form_dynamic_table_object_provider virtual std::unique_ptr provide_object_of_type(unsigned int num, const std::string & context, std::string & changed_event) const override; /// inherited from jsoner virtual void load_json(const json & source) override; /// inherited from jsoner virtual json save_json() const override; /// inherited from jsoner virtual void clear_json() override; /// inherited from actor virtual void on_event(const std::string & event_name) override; protected: /// inherited methods from body_builder virtual std::string inherited_get_body_part(const chemin & path, const request & req) override; /// inherited from body_builder virtual void new_css_library_available() override; private: std::vector gather_content_of_type(unsigned int type) const; html_form_dynamic_table table; static constexpr const unsigned int format_version = 1; static constexpr const char* myclass_id = "html_form_ignore_as_symlink"; static constexpr const char* jlabel_contents = "contents"; }; #endif webdar-1.0.0/src/environment.hpp0000644000175000017520000000524014773727237013567 00000000000000/*********************************************************************/ // webdar - a web server and interface program to libdar // Copyright (C) 2013-2025 Denis Corbin // // This file is part of Webdar // // Webdar is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // Webdar is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Webdar. If not, see // //---- // to contact the author: dar.linux@free.fr /*********************************************************************/ #ifndef ENVIRONMENT_HPP #define ENVIRONMENT_HPP // C system header files #include "my_config.h" extern "C" { } // C++ system header files #include #include // webdar headers /// class environment holds environment variables passed to webdar from its parent process (a shell for example) class environment { public: environment() = default; environment(const environment & ref) = default; environment(environment && ref) noexcept = default; environment & operator = (const environment & ref) = default; environment & operator = (environment && ref) noexcept = default; ~environment() = default; /// feed the object with the system provided environment void feed(char** env); /// provide the value associated to a given environment variable /// \param[in] var is the name of the variable to fetch /// \param[out] value is the value associated with this value if it exists /// \return true if a value is available and the "value" argument is set, if the variable does /// not exist in the environment "value" is unchanged and this method returns false bool get_value_of(const std::string & var, std::string & value) const; /// provide the value associated to a given environment variable or the provided defaulted value /// \param[in] var is the name of the variable to fetch /// \param[in] defaulted it the default value to return if the variable is not found in the environment /// \return the value or default valuer associated to the "var" environment variable std::string get_value_with_default(const std::string & var, const std::string & defaulted) const; private: std::map envir; }; extern environment global_envir; #endif webdar-1.0.0/src/html_form_overwrite_chain_action.hpp0000644000175000017520000000724214775733234020017 00000000000000/*********************************************************************/ // webdar - a web server and interface program to libdar // Copyright (C) 2013-2025 Denis Corbin // // This file is part of Webdar // // Webdar is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // Webdar is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Webdar. If not, see // //---- // to contact the author: dar.linux@free.fr /*********************************************************************/ #ifndef HTML_FORM_OVERWRITE_CHAIN_ACTION_HPP #define HTML_FORM_OVERWRITE_CHAIN_ACTION_HPP // C system header files #include "my_config.h" extern "C" { } // C++ system header files // webdar headers #include "actor.hpp" #include "html_overwrite_action.hpp" #include "html_form_fieldset.hpp" #include "html_table.hpp" #include "html_button.hpp" #include "html_form_input.hpp" #include "html_hr.hpp" #include "html_form_dynamic_table.hpp" #include "jsoner.hpp" #include "events.hpp" #include "actor.hpp" /// cannot include header file here class html_form_overwrite_action; /// html component to be adopted by an html_form that implements a chain of actions for overwriting policies class html_form_overwrite_chain_action: public html_overwrite_action, public html_form_dynamic_table_object_provider, public jsoner, public events, public actor { public: static const std::string changed; html_form_overwrite_chain_action(const std::string & label); html_form_overwrite_chain_action(const html_form_overwrite_chain_action & ref) = delete; html_form_overwrite_chain_action(html_form_overwrite_chain_action && ref) noexcept = delete; html_form_overwrite_chain_action & operator = (const html_form_overwrite_chain_action & ref) = delete; html_form_overwrite_chain_action & operator = (html_form_overwrite_chain_action && ref) noexcept = delete; ~html_form_overwrite_chain_action() = default; /// add a new entry in the chain /// \note this call is to programmatically setup a component, normal way to setup is from Web user interaction void add_new_entry() { table.add_line(0); }; /// get the access of the latest added entry (base or combining criterium) /// \note this call is to programmatically setup a component, normal way to setup is from Web user interaction html_form_overwrite_action & get_last_added(); /// obtain the crit_chain_action object for libdar option virtual std::unique_ptr get_overwriting_action() const override; /// inherited from html_form_dynamic_table_object_provider virtual std::unique_ptr provide_object_of_type(unsigned int num, const std::string & context, std::string & changed_event) const override; /// inherited from jsoner virtual void load_json(const json & source) override { table.load_json(source); }; /// inherited from jsoner virtual json save_json() const override { return table.save_json(); }; /// inherited from jsoner virtual void clear_json() override { table.clear_json(); }; /// inherited from actor virtual void on_event(const std::string & event_name) override; private: html_form_fieldset fs; html_form_dynamic_table table; }; #endif webdar-1.0.0/src/html_hr.hpp0000644000175000017520000000353314775733220012652 00000000000000/*********************************************************************/ // webdar - a web server and interface program to libdar // Copyright (C) 2013-2025 Denis Corbin // // This file is part of Webdar // // Webdar is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // Webdar is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Webdar. If not, see // //---- // to contact the author: dar.linux@free.fr /*********************************************************************/ #ifndef HTML_HR_HPP #define HTML_HR_HPP // C system header files #include "my_config.h" extern "C" { } // C++ system header files // webdar headers #include "body_builder.hpp" /// class html_hr is the implementation of


html component /// \note, this object is not expected to have any children class html_hr : public body_builder { public: html_hr() = default; html_hr(const html_hr & ref) = default; html_hr(html_hr && ref) noexcept = delete; html_hr & operator = (const html_hr & ref) = default; html_hr & operator = (html_hr && ref) noexcept = delete; ~html_hr() = default; protected: /// inherited from body_builder virtual std::string inherited_get_body_part(const chemin & path, const request & req) override; /// inherited from body_builder virtual void has_adopted(body_builder *obj) override { throw WEBDAR_BUG; }; }; #endif webdar-1.0.0/src/parser.hpp0000644000175000017520000000651614773727240012520 00000000000000/*********************************************************************/ // webdar - a web server and interface program to libdar // Copyright (C) 2013-2025 Denis Corbin // // This file is part of Webdar // // Webdar is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // Webdar is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Webdar. If not, see // //---- // to contact the author: dar.linux@free.fr /*********************************************************************/ #ifndef PARSER_HPP #define PARSER_HPP #include "my_config.h" // C++ system header files #include // webdar headers #include "exceptions.hpp" #include "proto_connexion.hpp" #include "central_report.hpp" #include "request.hpp" #include "answer.hpp" /// parser class is given a connection object and format the incoming byte flow in structured request objects class parser { public: /// constructor /// /// \param[in] input is the proto_connexion to read data from /// \param[in] log where to log messages /// \note the proto_connexion object passed to this becomes under the responsibility /// of this parser object and will be deleted when necessary. (where from the unique_ptr since C++11 webdar code update) /// The log object is out of the responsibility of this object /// however it must survive this parser object (where from the shared_ptr since C++11 webdar code update) parser(std::unique_ptr & input, const std::shared_ptr & log); parser(const parser & ref) = delete; parser(parser && ref) noexcept = delete; parser & operator = (const parser & ref) = delete; parser & operator = (parser && ref) noexcept = delete; /// destructor ~parser() { close(); }; /// provides visibility on the connection status proto_connexion::status get_status() const { if(!source) return proto_connexion::not_connected; return source->get_status(); }; /// get the next request URI /// /// \param[out] val the value of the next request uri /// \return false if not enough data is available to provide the uri bool get_next_request_uri(uri & val); /// provides the next request const request & get_request(); /// modify the answer to conform to RFC 1945 before sending it void send_answer(answer & ans); /// closes the current connection void close(); private: bool answered; //< whether last request was answered or not std::unique_ptr source; //< the proto_connexion to the client request req; //< value of the last request void valid_source() const { if(!source || source->get_status() != proto_connexion::connected) throw exception_range("socket disconnected"); }; void checks_main(const request & req, answer & ans); void checks_webdar(const request & req, answer & ans); void checks_rfc1945(const request & req, answer & ans); }; #endif webdar-1.0.0/src/bibliotheque.hpp0000644000175000017520000002174614777451255013706 00000000000000/*********************************************************************/ // webdar - a web server and interface program to libdar // Copyright (C) 2013-2025 Denis Corbin // // This file is part of Webdar // // Webdar is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // Webdar is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Webdar. If not, see // //---- // to contact the author: dar.linux@free.fr /*********************************************************************/ #ifndef BIBLIOTHEQUE_HPP #define BIBLIOTHEQUE_HPP // C system header files #include "my_config.h" extern "C" { } // C++ system header files #include #include #include #include // webdar headers #include "jsoner.hpp" #include "events.hpp" /// \file bibliotheque.hpp defines bibliotheque class /// class bibliotheque /// class bibliotheque purpose is associate json configurations /// to a name and a category, and provide means to store, search, /// update and delete them as a whole. This class provides its own /// configuration (including configuration of it stores) as a jsoner /// class. class bibliotheque : public jsoner, public events { public: /// change event is replaced by a static method with category in argument /// json objects are split into category, each used as a different "namespace" enum category { filefilter = 0, pathfilter = 1, command = 2, repo = 3, compress = 4, confsave = 5, conftest = 6, confdiff = 7, conflist = 8, confrest = 9, confmerge = 10, confrepair = 11, confcommon = 12, slicing = 13, ciphering = 14, delta_sig = 15, over_policy = 16, confread = 17, confisolate = 18, EOE = 19 ///< not a valid value, used for interating in the enum }; /// name of default configuration for options static constexpr const char* default_config_name = "default"; static constexpr const char* default_no_compression = "no-compress"; static constexpr const char* default_full_from_diff = "full from diff"; /// change event per category static std::string changed(category cat); /// convert category to json used string static std::string category_to_string(category cat); /// convert json used string to category static category string_to_category(const std::string & s); /// provide user displayable category description static std::string category_description(category cat, bool capitalized); /// complete configuration designation struct coordinates { category cat; std::string confname; coordinates(category c, const std::string & name): cat(c), confname(name) {}; bool operator < (const coordinates & ref) const { return cat < ref.cat || (cat == ref.cat && confname < ref.confname); }; }; /// list of configs a given config depends on typedef std::set using_set; bibliotheque(); bibliotheque(const bibliotheque & ref) = default; bibliotheque(bibliotheque && ref) noexcept(false) = default; bibliotheque & operator = (const bibliotheque & ref) = default; bibliotheque & operator = (bibliotheque && ref) noexcept(false) = default; virtual ~bibliotheque() = default; /// add a new configuration, the name must not exist for that category /// \note throw exception_range if name already exist void add_config(category categ, const std::string & name, const json & config, const using_set & refs = std::set()); /// add external reference to a config (avoiding it to be deleted) /// \note this only put a flag on a given config for it does not be deleted until the external refs are all cleared void add_external_ref_to(category categ, const std::string & name, const void* from_where); /// update an existing configuration for that category (name must exist) /// \note throw exception_range if name does not exist void update_config(category categ, const std::string & name, const json & config, const using_set & refs = std::set()); /// remove a configuration /// \note throw exception_range if name does not exist void delete_config(category categ, const std::string & name); /// remove external ref to a configuration /// \note from_where must be the same string as the one passed to add_external_ref_to void delete_external_ref_to(category categ, const std::string & name, const void* from_where); /// tells whether a given cat/config exists bool has_config(category categ, const std::string & name) const; /// provide a stored configuration /// \note throw exception_range if name does not exist json fetch_config(category categ, const std::string & name) const; /// display beautifulized json data for the given category and name std::string display_config(category categ, const std::string & name) const; /// list existing configurations under the provided category std::deque listing(category categ) const; /// get saved status /// \note saved status is set when adding or modifying config, /// but is cleared when loading or saving as json. bool get_saved_status() const { return saved; }; /// get the autosave property /// \note this property does not drive any action here /// but is left available to decide whether or not to save /// the bibliotheque upon change by component using it (html_bibliotheque) bool get_autosave_status() const { return autosave; }; /// set the autosave property /// \note same note as the one for get_autosave_status() void set_autosave_status(bool val) { autosave = val; }; /// clear all stored configurations void clear(); /// whether the bibliotheque has some configuration in one or more categories bool is_empty() const; /// inherited from jsoner virtual void load_json(const json & source) override; /// inherited from jsoner virtual json save_json() const override; /// inherited from jsoner virtual void clear_json() override { clear(); }; private: //////////////////////////////////// // DATASTRUCTURE FOR INTERNAL DATA // /// json configuration and list of other configs that depend on it struct linked_config { json config; using_set dependency; linked_config() {}; linked_config(const json & conf) { config = conf; }; linked_config(const json & conf, const std::set & deps): config(conf), dependency(deps) {}; }; /// associate a config name to a json configuration (inside a given category) typedef std::map asso; ///< associate a category to a list of name+config typedef std::map table; table content; ///< all configurations classified per categories mutable bool saved; ///< whether content as changed since last save_json() invocation //////////////////////////////////// // GLOBAL PROPERTIES bool autosave; //////////////////////////////////// // DATASTRUCTURE STORING REFERENCE // FROM EXTERNAL DATA // typedef std::set refs; std::map outside; //////////////////////////////////// void init(); /// return true if an entry name in the category cat exist /// \param[in] cat category to look into /// \param[in] name the configuration name to look for in that category /// \param[out] it if found a pointer to the std::pair containing the search cat/name /// \param[out] catit if found a pointer to the std::pair of "content" field for that category /// \return true if cat+name found. Both it and catit are modified in any case bool lookup(category cat, const std::string & name, asso::iterator & it, table::iterator & catit) const; void add_dependency_for(coordinates user, const using_set & referred); void remove_dependency_for(coordinates user); using_set get_direct_dependencies_of(coordinates user) const; void check_against_cyclic_dependencies(coordinates source, const std::set & seen); /// current json output version for this class static constexpr const unsigned int format_version = 1; static constexpr const char* myclass_id = "bibliotheque"; static constexpr const char* category_label = "category"; static constexpr const char* asso_label = "list"; static constexpr const char* config_label = "name"; static constexpr const char* config_def_label = "config"; static constexpr const char* config_depend = "used-by"; static constexpr const char* jlabel_categprop = "categories"; static constexpr const char* jlabel_globalprop = "global"; static constexpr const char* jlabel_autosave = "auto-save"; }; bibliotheque::category & operator++(bibliotheque::category & cat); #endif webdar-1.0.0/src/html_compression.hpp0000644000175000017520000000376614773727240014615 00000000000000/*********************************************************************/ // webdar - a web server and interface program to libdar // Copyright (C) 2013-2025 Denis Corbin // // This file is part of Webdar // // Webdar is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // Webdar is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Webdar. If not, see // //---- // to contact the author: dar.linux@free.fr /*********************************************************************/ #ifndef HTML_COMPRESSION_HPP #define HTML_COMPRESSION_HPP // C system header files #include "my_config.h" extern "C" { } // C++ system header files #include #include // webdar headers #include "html_form_select.hpp" /// html components to let the user define the compression algorithm class html_compression : public html_form_select { public: static const std::string changed; /// common event name for all object of this class html_compression(const std::string & title); html_compression(const html_compression & ref) = delete; html_compression(html_compression && ref) noexcept = delete; html_compression & operator = (const html_compression & ref) = delete; html_compression & operator = (html_compression && ref) noexcept = delete; ~html_compression() = default; libdar::compression get_value() const; void set_value(libdar::compression val); /// actor indirect inheritance virtual void on_event(const std::string & event_name) override { act(changed); }; }; #endif webdar-1.0.0/src/html_image.cpp0000644000175000017520000000341414773727240013317 00000000000000/*********************************************************************/ // webdar - a web server and interface program to libdar // Copyright (C) 2013-2025 Denis Corbin // // This file is part of Webdar // // Webdar is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // Webdar is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Webdar. If not, see // //---- // to contact the author: dar.linux@free.fr /*********************************************************************/ // C system header files #include "my_config.h" extern "C" { } // C++ system header files // webdar headers // #include "html_image.hpp" using namespace std; html_image::html_image(const string & url, const string & alt) { x_url = url; x_alt = alt; dim_x = ""; dim_y = ""; } void html_image::set_dimensions(const string x, const string y) { if(dim_x != x || dim_y != y) { dim_x = x; dim_y = y; my_body_part_has_changed(); } } string html_image::get_body_part() const { string ret; ret = "\"" // //---- // to contact the author: dar.linux@free.fr /*********************************************************************/ #ifndef STATIC_BODY_BUILDER_HPP #define STATIC_BODY_BUILDER_HPP // C system header files #include "my_config.h" extern "C" { } // C++ system header files #include // webdar headers /// base class of html components that are static /// \note the difference from dynamic html components resided in the /// get_body_part() method that here dot receive any argument, /// while for dynamic html objects (see class body_builder) the /// same method receive the request received from the browser class static_body_builder { public: static_body_builder() = default; static_body_builder(const static_body_builder & ref) = default; static_body_builder(static_body_builder && ref) noexcept = default; static_body_builder & operator = (const static_body_builder & ref) = default; static_body_builder & operator = (static_body_builder && ref) noexcept = default; virtual ~static_body_builder() {}; virtual std::string get_body_part() const = 0; }; #endif webdar-1.0.0/src/proto_connexion.hpp0000644000175000017520000000777115045112131014427 00000000000000/*********************************************************************/ // webdar - a web server and interface program to libdar // Copyright (C) 2013-2025 Denis Corbin // // This file is part of Webdar // // Webdar is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // Webdar is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Webdar. If not, see // //---- // to contact the author: dar.linux@free.fr /*********************************************************************/ #ifndef PROTO_CONNEXION_HPP #define PROTO_CONNEXION_HPP #include "my_config.h" // C++ system header files #include // webdar headers #include "exceptions.hpp" /// buffers data from a TCP connexion, this is a pure virtual class /// this class provide buffering mechanism to read block of data /// and broke then in pieces of bytes or single byte upon request class proto_connexion { public: enum status { connected, //< both read and write are allowed not_connected //< session is closed both directions }; /// constructor proto_connexion(const std::string & peerip, unsigned int peerport); /// forbidding copy constuctor and assignment operator proto_connexion(const proto_connexion & ref) = delete; proto_connexion(proto_connexion && ref) noexcept = delete; proto_connexion & operator = (const proto_connexion & ref) = delete; proto_connexion & operator = (proto_connexion && ref) noexcept = delete; /// destructor virtual ~proto_connexion(); status get_status() const { return etat; }; const std::string & get_ip() const { return ip; }; unsigned int get_port() const { return port; }; /// extracts one byte form the buffer / exception thrown if not available char read_one(bool blocking); /// gives the next char to be read, but do not remove it from the /// reading buffer / throw exception if not available char read_test_first(bool blocking); /// gives the second next char to be read, but do not remove it /// from the reading buffer / throw exception if not available char read_test_second(bool blocking); /// write data /// param[in] a data to write /// param[in] size amount of byte to write void write(const char *a, unsigned int size); /// flush pending writings if any void flush_write(); protected: /// implementation of the low level (without buffering) writing operation virtual void write_impl(const char *a, unsigned int size) = 0; /// implementation of the low level (without buffering) reading operation virtual unsigned int read_impl(char *a, unsigned int size, bool blocking) = 0; /// let inherited class modifying the object status void set_status(status st) { etat = st; }; private: status etat; //< proto_connexion status std::string ip; //< IP of the peer host unsigned int port; //< port of the peer port // buffer management for reading unsigned buffer_size; //< size of the buffer char *buffer; //< temporary area used for parsing, reading data FROM network unsigned int already_read; //< amount of data already read unsigned int data_size; //< total of data in buffer, already read or not // output buffer unsigned out_buf_size; //< allocated space for the output buffer (out_buf) char *out_buf; //< temporary areas used to gather bytes for writing unsigned int last_unwrote; //< amount of byte pending for writing /// manages to get (read) data in buffer and set relative variables acordingly void fill_buffer(bool blocking); }; #endif webdar-1.0.0/src/choose.hpp0000644000175000017520000000732714773727240012505 00000000000000/*********************************************************************/ // webdar - a web server and interface program to libdar // Copyright (C) 2013-2025 Denis Corbin // // This file is part of Webdar // // Webdar is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // Webdar is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Webdar. If not, see // //---- // to contact the author: dar.linux@free.fr /*********************************************************************/ #ifndef CHOOSE_HPP #define CHOOSE_HPP // C system header files #include "my_config.h" extern "C" { } // C++ system header files #include #include #include // webdar headers #include "session.hpp" #include "responder.hpp" #include "actor.hpp" #include "events.hpp" #include "html_page.hpp" #include "html_static_url.hpp" #include "html_form.hpp" #include "html_div.hpp" #include "html_table.hpp" #include "html_form_fieldset.hpp" #include "html_form_input.hpp" #include "html_form_radio.hpp" #include "html_yes_no_box.hpp" #include "html_disconnect.hpp" /// display current existing user sessions and let user kill or change of session /// \note chooser object is a per user and list all sessions owned by that user /// but the creation if chooser object is managed by the class chooser, which exposes /// the static method give_answer_for() for that purpose class choose : public responder, public actor { public: // constructor choose(); choose(const choose & ref) = delete; choose(choose && ref) noexcept = delete; choose & operator = (const choose & ref) = delete; choose & operator = (choose && ref) noexcept = delete; ~choose() { release_boxes(); }; /// mandatory call before using other methods (give_answer() in particular) void set_owner(const std::string & user); /// inherited from responder /// \note alsways shows the session table for the user virtual answer give_answer(const request & req) override; /// inherited from actor virtual void on_event(const std::string & event_name) override; /// whether user has requested to disconnect bool disconnection_requested() const { bool ret = disconnect_req; disconnect_req = false; return ret; }; private: std::string owner; ///< list only sessions for that owner mutable bool disconnect_req; ///< whether user has asked for disconnection std::vector boxes; //< list of checkboxes in "page" std::vector sess; //< list of sessions in page /// listing session page and associated objects html_page page; ///< page root for session listing html_disconnect disco; html_table table; html_div box_nouvelle; html_static_url nouvelle; html_form form; html_div div; html_yes_no_box confirmed; void regenerate_table_page(); ///< regenerate sess and boxes components (shown as session table) from currently existing sessions void release_boxes(); ///< destroy checkboxes objects void kill_selected_sessions() const; ///< kill checked session but does not change html components static const std::string css_class_normal_text; static const std::string url_new_session; }; #endif webdar-1.0.0/src/html_version.cpp0000644000175000017520000002531515044103104013701 00000000000000/*********************************************************************/ // webdar - a web server and interface program to libdar // Copyright (C) 2013-2025 Denis Corbin // // This file is part of Webdar // // Webdar is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // Webdar is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Webdar. If not, see // //---- // to contact the author: dar.linux@free.fr /*********************************************************************/ // C system header files extern "C" { } // C++ system header files #include // webdar headers #include "exceptions.hpp" #include "webdar_css_style.hpp" // #include "html_version.hpp" #define YES_NO(x) (x ? gettext("YES") : gettext("NO")) using namespace std; html_version::html_version(): html_popup(90, 90), webdar_table(2), libthreadar_table(2), libdar_table(2), close("Close", event_close) { // component configuration title.clear(); title.add_text(3, "Webdar version information"); webdar_table.css_border_collapsed(true); libthreadar_table.css_border_collapsed(true); libdar_table.css_border_collapsed(true); webdar_table.clear(); webdar_table.adopt_static_html("Webdar info"); webdar_table.adopt_static_html(""); webdar_table.adopt_static_html("Version"); webdar_table.adopt_static_html(WEBDAR_VERSION); fill_libthreadar(libthreadar_table); fill_libdar(libdar_table); // adoption tree title_box.adopt(&title); adopt(&title_box); adopt(&webdar_table); adopt(&libthreadar_table); adopt(&libdar_table); adopt(&close); // events close.record_actor_on_event(this, event_close); // css title.add_css_class(webdar_css_style::text_shadow_dark); title.add_css_class(webdar_css_style::text_top_center); webdar_table.add_css_class(css_table); libthreadar_table.add_css_class(css_table); libdar_table.add_css_class(css_table); webdar_table.set_css_class_cells(css_table_cells); libthreadar_table.set_css_class_cells(css_table_cells); libdar_table.set_css_class_cells(css_table_cells); webdar_table.set_css_class_first_row(css_table_top); libthreadar_table.set_css_class_first_row(css_table_top); libdar_table.set_css_class_first_row(css_table_top); webdar_table.set_css_class_first_column(css_table_left); libthreadar_table.set_css_class_first_column(css_table_left); libdar_table.set_css_class_first_column(css_table_left); webdar_css_style::normal_button(close); close.add_css_class(css_close); } void html_version::on_event(const string & event_name) { if(event_name == event_close) set_visible(false); else throw WEBDAR_BUG; } void html_version::new_css_library_available() { css_class page("html_summary_page"); css tmp; unique_ptr & csslib = lookup_css_library(); if(!csslib) throw WEBDAR_BUG; if(!csslib->class_exists(css_close)) { tmp.clear(); tmp.css_position_type(css::pos_sticky); tmp.css_float(css::fl_right); tmp.css_position_bottom("1em"); tmp.css_position_right("1em"); tmp.css_margin_top("1em"); csslib->add(css_close, tmp); } if(!csslib->class_exists(css_table)) { tmp.clear(); tmp.css_width("90%", true); tmp.css_font_size("0.8em"); tmp.css_margin_top("1em"); csslib->add(css_table, tmp); } if(!csslib->class_exists(css_table_top)) { tmp = webdar_css_style::get_css_class(webdar_css_style::text_shadow_dark).get_value(); tmp.css_border_width(css::bd_all, css::bd_thin); tmp.css_border_style(css::bd_all, css::bd_solid); tmp.css_font_weight_bold(); tmp.css_background_color(COLOR_BACK); tmp.css_color(COLOR_TEXT); csslib->add(css_table_top, tmp); } if(!csslib->class_exists(css_table_left)) { tmp.clear(); tmp.css_border_width(css::bd_all, css::bd_thin); tmp.css_border_style(css::bd_all, css::bd_solid); tmp.css_text_h_align(css::al_left); tmp.css_font_weight_bold(); tmp.css_max_width("30%"); csslib->add(css_table_left, tmp); } if(!csslib->class_exists(css_table_cells)) { tmp.clear(); tmp.css_border_width(css::bd_all, css::bd_thin); tmp.css_border_style(css::bd_all, css::bd_solid); tmp.css_text_h_align(css::al_center); tmp.css_width("90%", true); tmp.css_font_size("0.8em"); tmp.css_margin_top("1em"); csslib->add(css_table_cells, tmp); } webdar_css_style::update_library(*csslib); // letting parent class drop its own class definition // to the css_library html_popup::new_css_library_available(); } void html_version::fill_libthreadar(html_table & table) { unsigned int maj, med, min; string bar_impl; libthreadar::get_version(maj, med, min); bar_impl = libthreadar::barrier::used_implementation(); table.adopt_static_html("Libthreader info"); table.adopt_static_html(""); table.adopt_static_html("Libthreadar version"); table.adopt_static_html(libdar::tools_printf("%d.%d.%d", maj, med, min)); table.adopt_static_html("Barrier implementation"); table.adopt_static_html(bar_impl); } void html_version::fill_libdar(html_table & table) { libdar::U_I maj, med, min; const char *endy = nullptr; string time_accuracy; libdar::get_version(maj, med, min); table.adopt_static_html("Libdar info"); table.adopt_static_html(""); table.adopt_static_html("Libdar version"); table.adopt_static_html(libdar::tools_printf("%d.%d.%d", maj, med, min)); table.adopt_static_html(""); table.adopt_static_html(""); table.adopt_static_html("gzip compression (libz)"); table.adopt_static_html(YES_NO(libdar::compile_time::libz())); table.adopt_static_html("bzip2 compression (libbzip2)"); table.adopt_static_html(YES_NO(libdar::compile_time::libbz2())); table.adopt_static_html("lzo compression (liblzo2)"); table.adopt_static_html(YES_NO(libdar::compile_time::liblzo())); table.adopt_static_html("xz compression (liblzma)"); table.adopt_static_html(YES_NO(libdar::compile_time::libxz())); table.adopt_static_html("zstd compression (libzstd)"); table.adopt_static_html(YES_NO(libdar::compile_time::libzstd())); table.adopt_static_html("lz4 compression (liblz4)"); table.adopt_static_html(YES_NO(libdar::compile_time::liblz4())); table.adopt_static_html("Strong encryption (libgcrypt)"); table.adopt_static_html(YES_NO(libdar::compile_time::libgcrypt())); table.adopt_static_html("Public key ciphers (gpgme)"); table.adopt_static_html(YES_NO(libdar::compile_time::public_key_cipher())); table.adopt_static_html("Extended Attributes support"); table.adopt_static_html(YES_NO(libdar::compile_time::ea())); table.adopt_static_html("Large files support (> 2GB)"); table.adopt_static_html(YES_NO(libdar::compile_time::largefile())); table.adopt_static_html("ext2fs NODUMP flag support"); table.adopt_static_html(YES_NO(libdar::compile_time::nodump())); table.adopt_static_html("Integer size used"); if(libdar::compile_time::bits() == 0) table.adopt_static_html("unlimited"); else table.adopt_static_html(libdar::tools_printf("%d bits", libdar::compile_time::bits())); table.adopt_static_html("Thread safe support"); table.adopt_static_html(YES_NO(libdar::compile_time::thread_safe())); table.adopt_static_html("Furtive read mode support"); table.adopt_static_html(YES_NO(libdar::compile_time::furtive_read())); table.adopt_static_html("Linux ext2/3/4 FSA support"); table.adopt_static_html(YES_NO(libdar::compile_time::FSA_linux_extX())); table.adopt_static_html("Mac OS X HFS+ FSA support"); table.adopt_static_html(YES_NO(libdar::compile_time::FSA_birthtime())); table.adopt_static_html("Linux statx() support"); table.adopt_static_html(YES_NO(libdar::compile_time::Linux_statx())); switch(libdar::compile_time::system_endian()) { case libdar::compile_time::big: endy = "big"; break; case libdar::compile_time::little: endy = "little"; break; case libdar::compile_time::error: endy = "error!"; break; default: endy = "unknown!!!"; break; } table.adopt_static_html("Detected system/CPU endian"); table.adopt_static_html(endy); table.adopt_static_html("Posix fadvise support"); table.adopt_static_html(YES_NO(libdar::compile_time::posix_fadvise())); table.adopt_static_html("Large dir speed optimization"); table.adopt_static_html(YES_NO(libdar::compile_time::fast_dir())); if(libdar::compile_time::nanosecond_read()) time_accuracy = "1 nanosecond"; else { if(libdar::compile_time::microsecond_read()) time_accuracy = "1 microsecond"; else time_accuracy = "1 second"; } table.adopt_static_html("Timestamp read accuracy"); table.adopt_static_html(time_accuracy); if(libdar::compile_time::nanosecond_write()) time_accuracy = "1 nanosecond"; else { if(libdar::compile_time::microsecond_write()) time_accuracy = "1 microsecond"; else time_accuracy = "1 second"; } table.adopt_static_html("Timestamp write accuracy"); table.adopt_static_html(time_accuracy); table.adopt_static_html("Restores dates of symlinks"); table.adopt_static_html(YES_NO(libdar::compile_time::symlink_restore_dates())); table.adopt_static_html("Multiple threads support"); table.adopt_static_html(YES_NO(libdar::compile_time::libthreadar())); if(libdar::compile_time::libthreadar()) { table.adopt_static_html("libthreadar version"); table.adopt_static_html(libdar::compile_time::libthreadar_version()); } table.adopt_static_html("Delta compression"); table.adopt_static_html(YES_NO(libdar::compile_time::librsync())); table.adopt_static_html("FTP repository"); table.adopt_static_html(YES_NO(libdar::compile_time::ftp_repository())); if(libdar::compile_time::ftp_repository()) { table.adopt_static_html("FTP repo: libcurl version"); table.adopt_static_html(libdar::compile_time::libcurl_version()); } table.adopt_static_html("SFTP repository"); table.adopt_static_html(YES_NO(libdar::compile_time::sftp_repository())); table.adopt_static_html("argon2 hashing"); table.adopt_static_html(YES_NO(libdar::compile_time::libargon2())); table.adopt_static_html("Whirlpool hashing"); table.adopt_static_html(YES_NO(libdar::compile_time::whirlpool_hash())); } webdar-1.0.0/src/server_pool.hpp0000644000175000017520000000645714773727240013567 00000000000000/*********************************************************************/ // webdar - a web server and interface program to libdar // Copyright (C) 2013-2025 Denis Corbin // // This file is part of Webdar // // Webdar is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // Webdar is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Webdar. If not, see // //---- // to contact the author: dar.linux@free.fr /*********************************************************************/ #ifndef SERVER_POOL_HPP #define SERVER_POOL_HPP // C system header files #include "my_config.h" extern "C" { } // C++ system header files #include // webdar headers #include "reference.hpp" #include "central_report.hpp" #include "authentication.hpp" #include "proto_connexion.hpp" #include "server.hpp" /// class managing a pool of server objects class server_pool : public libthreadar::thread_signal, public reference { public: server_pool(const unsigned int pool_size, const std::shared_ptr & log); server_pool(const server_pool & ref) = delete; server_pool(server_pool && ref) noexcept = delete; server_pool & operator = (const server_pool & ref) = delete; server_pool & operator = (server_pool && ref) noexcept = delete; virtual ~server_pool(); bool run_new_server(const std::shared_ptr & auth, std::unique_ptr & source); // run() method (inherited from libthreadar::thread_signal to be used // to run the server_pool. protected: /// inherited from libthreadar::thread virtual void inherited_run() override; /// inherited from libthreadar::thread_signal virtual void signaled_inherited_cancel() override; /// to be informed when a peer has broken the peering with me /// \note virtual void broken_peering_from(reference *obj) override; private: unsigned int max_server; ///< max allowed number of concurrent thread std::shared_ptr log; ///< the central report std::deque dying_ones; ///< list of server object that have to be deleted libthreadar::condition verrou; ///< manages access inherited reference class fields /// \note this mutex (a condition is a particular mutex) is necessary /// because the reference class fields /// are accessed and modified from the server thread when the thread /// is ending and from other thread (listener class) when creating /// a new server object in this server_pool. Moreover several listerner /// objects may request server creation on the same server_pool. /// \note the condition extension of this mutex is used by the destructor /// to be notified when all server object are deleted (broken_peering_from()) void cancel_all_servers(); ///< must be called from within a critical section on verrou }; #endif webdar-1.0.0/src/archive_init_list.hpp0000644000175000017520000000720615024332554014706 00000000000000/*********************************************************************/ // webdar - a web server and interface program to libdar // Copyright (C) 2013-2025 Denis Corbin // // This file is part of Webdar // // Webdar is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // Webdar is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Webdar. If not, see // //---- // to contact the author: dar.linux@free.fr /*********************************************************************/ #ifndef ARCHIVE_INIT_LIST_HPP #define ARCHIVE_INIT_LIST_HPP // C system header files #include "my_config.h" extern "C" { } // C++ system header files #include #include #include #include // webdar headers #include "html_web_user_interaction.hpp" #include "saisie.hpp" /// this objects is a thread object that provide access to the content of an existing archive /// the object must first be set with the location of the dar archive to open /// using set_archive_path(), set_archive_basename() and eventually set_archive_options_read() /// then the thread has to be run calling the libthreadar::run() inherited method which opens /// the archive. Once the archive has been openned successfully the thread ends and the method /// openned() returns true. Starting this point, the archive content is available /// calling get_children_in_table() or has_subdirectory(). Once completed close_archive() can be called /// or the object deleted. class archive_init_list : public libthreadar::thread_signal { public: archive_init_list(); archive_init_list(const archive_init_list & ref) = delete; archive_init_list(archive_init_list && ref) noexcept = delete; archive_init_list & operator = (const archive_init_list & ref) = delete; archive_init_list & operator = (archive_init_list && ref) noexcept = delete; ~archive_init_list() { cancel(); join(); }; /// set the user interaction to report on when running the thread void set_user_interaction(std::shared_ptr ref) { ui = ref; }; void set_parametrage(const saisie* x_param) { param = x_param; }; /// once the thread has been ran and has finished, we end up with an opened archive /// /// \return true if the archive is available false if a failure occured and no archive available bool opened() const { return ptr != nullptr; }; /// obtains contents from the opened archive in the calling thread const std::vector get_children_in_table(const std::string & dir) const; bool has_subdirectory(const std::string & dir) const; /// obtain the archive summary libdar::archive_summary get_summary() const; std::string get_archive_full_name() const; /// close the opened archive run in the calling thread void close_archive() { ptr.reset(); }; protected: /// inherited from class libthreadar::thread virtual void inherited_run() override; /// inherited from libthreadar::thread virtual void signaled_inherited_cancel() override; private: const saisie* param; std::unique_ptr ptr; std::shared_ptr ui; }; #endif webdar-1.0.0/src/chemin.cpp0000644000175000017520000000701014773727240012450 00000000000000/*********************************************************************/ // webdar - a web server and interface program to libdar // Copyright (C) 2013-2025 Denis Corbin // // This file is part of Webdar // // Webdar is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // Webdar is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Webdar. If not, see // //---- // to contact the author: dar.linux@free.fr /*********************************************************************/ // C system header files #include "my_config.h" extern "C" { } // C++ system header files #include // webdar headers #include "exceptions.hpp" #include "webdar_tools.hpp" // #include "chemin.hpp" using namespace std; chemin::chemin(const string & path) { vector tmp; webdar_tools_split_by('/', path, tmp); members.clear(); while(!tmp.empty()) { if(!tmp.back().empty()) members.push_front(tmp.back()); tmp.pop_back(); } index = 0; } bool chemin::is_the_beginning_of(const chemin & ref) const { deque::const_iterator me_it = members.begin(); deque::const_iterator ref_it = ref.members.begin(); while(me_it != members.end() && ref_it != ref.members.end() && *me_it == *ref_it) { ++me_it; ++ref_it; } return (me_it == members.end()); } void chemin::push_back(const string & x) { // must avoid adding a string that contains a / if(find(x.begin(), x.end(), '/') != x.end()) throw exception_range("Cannot add a path member if it contains a slash"); members.push_back(x); } void chemin::operator += (const chemin & ref) { deque::const_iterator it = ref.members.begin(); while(it != ref.members.end()) { members.push_back(*it); ++it; } } void chemin::pop_front() { if(empty()) throw exception_range("cannot pop a member from an empty chemin"); members.pop_front(); if(index > 1) --(const_cast(this)->index); } void chemin::pop_back() { if(empty()) throw exception_range("cannot pop a member from an empty chemin"); members.pop_back(); if(index >= size()) --(const_cast(this)->index); } void chemin::set_index(unsigned int val) const { if(val >= size()) throw exception_range("invalid index value given to chemin"); const_cast(this)->index = val; } string chemin::display(bool relative) const { string ret = relative ? "" : "/"; deque::const_iterator it = members.begin(); if(it != members.end()) { ret += *it; ++it; } while(it != members.end()) { ret += "/"; ret += *it; ++it; } return ret; } string chemin::namify() const { string ret = ""; deque::const_iterator it = members.begin(); if(it != members.end()) { ret = *it; ++it; } while(it != members.end()) { ret += "_"; ret += *it; ++it; } return ret; } const string & chemin::operator[] (unsigned int x) const { if(x >= members.size()) throw exception_range("out of bound member requested in chemin"); return members[x]; } webdar-1.0.0/src/html_entrepot_landing.hpp0000644000175000017520000001255214773727240015601 00000000000000/*********************************************************************/ // webdar - a web server and interface program to libdar // Copyright (C) 2013-2025 Denis Corbin // // This file is part of Webdar // // Webdar is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // Webdar is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Webdar. If not, see // //---- // to contact the author: dar.linux@free.fr /*********************************************************************/ #ifndef HTML_ENTREPOT_LANDING_HPP #define HTML_ENTREPOT_LANDING_HPP #include "my_config.h" // C system header files extern "C" { } // C++ system header files #include // webdar headers #include "body_builder.hpp" #include "actor.hpp" #include "events.hpp" #include "jsoner.hpp" #include "html_entrepot.hpp" #include "html_form_input_file.hpp" #include "html_form.hpp" #include "html_libdar_running_popup.hpp" /// class html_entrepot_landing add a landing path to an entrepot object class html_entrepot_landing: public body_builder, public actor, public events, public libthreadar::thread_signal, public jsoner { public: /// event triggered for any change (entrepot and / or landing_path) static const std::string changed; /// the use case is for the caller to know when to call get_entrepot() static const std::string entrepot_only_changed; /// event triggered only when the landing path changed (and nothing else changed) /// \note this event is triggered only if landing_path is to be enforced to backup path static const std::string landing_path_only_changed; html_entrepot_landing(); html_entrepot_landing(const html_entrepot_landing & ref) = delete; html_entrepot_landing(html_entrepot_landing && ref) noexcept = delete; html_entrepot_landing & operator = (const html_entrepot_landing & ref) = delete; html_entrepot_landing & operator = (html_entrepot_landing && ref) noexcept = delete; ~html_entrepot_landing() { cancel(); join(); }; /// provide an libdar entrepot object build from Web fields values std::shared_ptr & get_entrepot(std::shared_ptr & webui) const; /// fetch current landing path for the entrepot const std::string & get_landing_path() const { return landing_path.get_value(); }; /// inherited from actor parent class virtual void on_event(const std::string & event_name) override; /// change the change event name void set_event_entrepot(const std::string & name); /// change landing_path_only_changed event name void set_event_landing_path(const std::string & name); /// inherited from jsoner virtual void load_json(const json & source) override; /// inherited from jsoner virtual json save_json() const override; /// inherited from jsoner virtual void clear_json() override; /// set the object to webdar defaults void set_to_webdar_defaults(); /// inherited from body_builder virtual void bind_to_anchor(const std::string & val) override { form.bind_to_anchor(val); }; protected: /// inherited from body_builder virtual std::string inherited_get_body_part(const chemin & path, const request & req) override; /// inherited from body_builder virtual void css_classes_have_changed() override; /// inherited from body_builder virtual void new_css_library_available() override; /// inherited from libthreadar::thread virtual void inherited_run() override; /// inherited from libthreadar::thread virtual void signaled_inherited_cancel() override; private: std::string custom_event_entrepot; std::string custom_event_landing_path; bool ignore_events; mutable libthreadar::mutex entrep_ctrl; ///< control write access to entrepot_changed and libdar_entrep mutable bool entrepot_changed; ///< whether libdar_entrep should be re-fetched mutable std::shared_ptr libdar_entrep; // warning, custom_event need to be declared before the html_libdar_running_popup // because at destruction time of this object, the html_libdar_running_popup destructor // may lead to an event 'this' is acting on and requires the custom_event_* string // object to be defined. In this order the destructor of 'this' will not // destroy the custom_event_* std::string objects before repoxfer below. html_form form; html_form_fieldset fs; html_entrepot entrep; html_form_input use_landing_path; html_form_input_file landing_path; html_libdar_running_popup repoxfer; void start_updating_landing(); static constexpr const unsigned int format_version = 1; static constexpr const char* myclass_id = "html_entrepot_landing"; static constexpr const char* jlabel_entrepot = "entrepot"; static constexpr const char* jlabel_use_landing_path = "use-landing-path"; static constexpr const char* jlabel_landing_path = "landing-path"; }; #endif webdar-1.0.0/src/bibliotheque_subconfig.cpp0000644000175000017520000000255714773727240015733 00000000000000/*********************************************************************/ // webdar - a web server and interface program to libdar // Copyright (C) 2013-2025 Denis Corbin // // This file is part of Webdar // // Webdar is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // Webdar is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Webdar. If not, see // //---- // to contact the author: dar.linux@free.fr /*********************************************************************/ // C system header files extern "C" { } // C++ system header files // webdar headers // #include "bibliotheque_subconfig.hpp" using namespace std; void bibliotheque_subconfig::subconfig_add_to(bibliotheque::using_set & added_to, const bibliotheque::using_set & to_add) { for(bibliotheque::using_set::const_iterator it = to_add.begin(); it != to_add.end(); ++it) added_to.insert(*it); } webdar-1.0.0/src/html_mask.hpp0000644000175000017520000000374215044132652013166 00000000000000/*********************************************************************/ // webdar - a web server and interface program to libdar // Copyright (C) 2013-2025 Denis Corbin // // This file is part of Webdar // // Webdar is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // Webdar is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Webdar. If not, see // //---- // to contact the author: dar.linux@free.fr /*********************************************************************/ #ifndef HTML_MASK_HPP #define HTML_MASK_HPP // C system header files #include "my_config.h" extern "C" { } // C++ system header files #include #include // webdar headers #include "body_builder.hpp" /// class html_mask defines the interface of all masks class html_mask { public: html_mask() {}; html_mask(const html_mask & ref) = default; html_mask(html_mask && ref) noexcept = default; html_mask & operator = (const html_mask & ref) = default; html_mask & operator = (html_mask && ref) noexcept = default; ~html_mask() = default; /// obtain the mask for libdar virtual std::unique_ptr get_mask() const = 0; /// whether mask is an absolute mask (when it concerns paths filtering) /// \note a mask is not relative even if one of its part not relative, /// it is a relative mask (and can be used anywhere) if nowhere /// in its definition a absolute path is used (all its components are relative) virtual bool is_relative() const = 0; }; #endif webdar-1.0.0/src/static_object_batch0000755000175000017520000000233314773727240014410 00000000000000#!/bin/sh ####################################################################### # webdar - a web server and interface program to libdar # Copyright (C) 2013-2025 Denis Corbin # # This file is part of Webdar # # Webdar is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # Webdar is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with Webdar. If not, see # #---- # to contact the author: dar.linux@free.fr ####################################################################### ./static_object_builder STATIC_OBJ_LICENSING text ../COPYING ./static_object_builder STATIC_FAVICON jpeg ../resources/favicon.jpg ./static_object_builder STATIC_LOGO jpeg ../resources/webdar_logo.jpg ./static_object_builder STATIC_TITLE_LOGO jpeg ../resources/webdar_title_logo.jpg webdar-1.0.0/src/html_form_mask_file.hpp0000644000175000017520000001127115044153551015205 00000000000000/*********************************************************************/ // webdar - a web server and interface program to libdar // Copyright (C) 2013-2025 Denis Corbin // // This file is part of Webdar // // Webdar is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // Webdar is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Webdar. If not, see // //---- // to contact the author: dar.linux@free.fr /*********************************************************************/ #ifndef HTML_FORM_MASK_FILE_HPP #define HTML_FORM_MASK_FILE_HPP // C system header files #include "my_config.h" extern "C" { } // C++ system header files // webdar headers #include "body_builder.hpp" #include "html_mask.hpp" #include "html_form_input.hpp" #include "html_form_fieldset.hpp" #include "html_form_input_file.hpp" #include "actor.hpp" #include "jsoner.hpp" #include "events.hpp" /// class html_form_mask_file provide interface to include or exclude a list of entry taken from a text file /// this html components is consitued of: /// /** \verbatim +----html_fieldset----------------------------------+ | | | +-----------------------------+ | | filename | | | | +-----------------------------+ | | | | exclude checkbox : +-+ | | | | | | +-+ | | casesensit : +-+ | | | | | | +-+ | | | +---------------------------------------------------+ \endverbatim **/ /// \note this component includes an html_form by default /// (see constructor argument), but should not when used /// recursively from another html_form_mask_file class html_form_mask_file : public body_builder, public html_mask, public actor, public jsoner, public events { public: static const std::string changed; html_form_mask_file(const std::shared_ptr & fs_root); html_form_mask_file(const html_form_mask_file & ref) = delete; html_form_mask_file(html_form_mask_file && ref) noexcept = delete; html_form_mask_file & operator = (const html_form_mask_file & ref) = delete; html_form_mask_file & operator = (html_form_mask_file && ref) noexcept = delete; ~html_form_mask_file() = default; /// reset object to default void clear(); /// inherited from html_mask virtual std::unique_ptr get_mask() const override; /// inherited from html_mask /// \note: always prefix bases, which may be or not absolute, but /// also in the provided file absolute paths may take place and we /// can't know at this stage (file has not been openned) what's /// enclosed in it. virtual bool is_relative() const override { return false; }; /// inherited from jsoner virtual void load_json(const json & source) override; /// inherited from jsoner virtual json save_json() const override; /// inherited from jsoner virtual void clear_json() override { clear(); }; /// inherited from actor virtual void on_event(const std::string & event_name) override; protected: /// inherited methods from body_builder virtual std::string inherited_get_body_part(const chemin & path, const request & req) override; /// inherited from body_builder virtual void new_css_library_available() override; private: bool ignore_events; std::shared_ptr prefix; html_form_input_file filename; html_form_input exclude_checkbox; html_form_input casesensit; html_form_fieldset fs; std::string tell_action() const; static constexpr const unsigned int format_version = 1; static constexpr const char* myclass_id = "html_form_mask_file"; static constexpr const char* jlabel_filename = "filename"; static constexpr const char* jlabel_exclude = "excluding"; static constexpr const char* jlabel_casesensit = "casesensit"; }; #endif webdar-1.0.0/src/body_builder.cpp0000644000175000017520000004546614773727241013672 00000000000000/*********************************************************************/ // webdar - a web server and interface program to libdar // Copyright (C) 2013-2025 Denis Corbin // // This file is part of Webdar // // Webdar is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // Webdar is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Webdar. If not, see // //---- // to contact the author: dar.linux@free.fr /*********************************************************************/ // C system header files #include "my_config.h" extern "C" { } // C++ system header files #include #include // webdar headers #include "webdar_tools.hpp" // #include "body_builder.hpp" using namespace std; const unsigned int NAME_WIDTH = 4; libthreadar::mutex body_builder::assigned_anchors_ctrl; set body_builder::assigned_anchors; body_builder::body_builder(const body_builder & ref) { clear(); visible = ref.visible; // x_prefix cannot be the same as ref so it stays to the default value no_CR = ref.no_CR; // parent cannot be the same as ref so it stays nullptr // order, children and revert_child stay defaulted as we do not copy the children // last_body_path, past_body_req and last_body_part are kept defaulted also library_asked = ref.library_asked; if(ref.library) { library.reset(new (nothrow) css_library(*(ref.library))); if(!library) throw exception_memory(); } else library.reset(); css_class_names = ref.css_class_names; } body_builder::~body_builder() { orphan_all_children(); unrecord_from_parent(); if(!anchor.empty()) release_anchor(anchor); } body_builder & body_builder::operator = (const body_builder & ref) { orphan_all_children(); if(parent != nullptr) parent->foresake(this); if(parent != nullptr) throw WEBDAR_BUG; visible = ref.visible; no_CR = ref.no_CR; last_body_path.clear(); last_body_req_uri.clear(); last_body_req_body.clear(); last_body_part.clear(); library_asked = ref.library_asked; if(ref.library) { library.reset(new (nothrow) css_library(*(ref.library))); if(!library) throw exception_memory(); } else library.reset(); // drop possibly existing css_library css_class_names = ref.css_class_names; body_changed = true; // force ignoring last_* fields which we clear()ed above ignore_children_body_changed = ref.ignore_children_body_changed; return *this; } void body_builder::set_prefix(const chemin & prefix) { if(parent != nullptr) throw WEBDAR_BUG; x_prefix = prefix; recursive_path_has_changed(); my_body_part_has_changed(); // force reevaluation } void body_builder::adopt(body_builder *obj) { // sanity checks if(obj == nullptr) throw WEBDAR_BUG; if(obj == this) throw WEBDAR_BUG; // trying to adopt ourself!!! const css_library* ancient_css_library = obj->lookup_css_library().get(); const css_library* new_css_library = lookup_css_library().get(); string new_name; map::iterator it; map::iterator rit = revert_child.find(obj); if(rit != revert_child.end()) throw WEBDAR_BUG; // object already recorded / adopted if(obj->parent != nullptr) throw WEBDAR_BUG; // object already recorded by another parent // updating internal data structure to record the adoption do { new_name = webdar_tools_generate_random_string(NAME_WIDTH); it = children.find(new_name); } while(it != children.end()); order.push_back(obj); children[new_name] = obj; revert_child[obj] = new_name; obj->parent = this; // now informing parent and children obj->recursive_path_has_changed(); has_adopted(obj); obj->has_been_adopted_by(this); // if a css_library is available to the child thanks to the adoption // we trigger all the child lineage to record its css_classes if(new_css_library != ancient_css_library) obj->recursive_new_css_library_available(); my_body_part_has_changed(); } void body_builder::foresake(body_builder *obj) { // sanity checks if(obj == nullptr) throw WEBDAR_BUG; map::iterator rit = revert_child.find(obj); vector::iterator ot = find(order.begin(), order.end(), obj); if(ot == order.end()) // object not found in the ordered list throw WEBDAR_BUG; // informing parent and children that we are about to foresake obj->will_be_foresaken_by(this); will_foresake(obj); // updating internal data structure about the leave if(rit != revert_child.end()) { string name = rit->second; map::iterator it = children.find(name); if(it == children.end()) // object known by both ordered list and rever_child map, but unknown by children map throw WEBDAR_BUG; // removing the object from the three lists/maps children.erase(it); revert_child.erase(rit); order.erase(ot); // unrecording us as its parent if(obj->parent == nullptr) throw WEBDAR_BUG; obj->parent = nullptr; } else throw WEBDAR_BUG; // object known in the ordered list but unknown by the revert_child map obj->recursive_path_has_changed(); my_body_part_has_changed(); } void body_builder::set_visible(bool mode) { if(visible != mode) { if(visible) { // we must first propage the body_builder change // to parent before setting to non-visible my_body_part_has_changed(); // keep trace of the change at body_builder level visible = mode; } else { // we must first set to visibile in order // for the body_builder change to be possible // to be propagated to parents (invisibile objects // cannot propagate body change to parents visible = mode; my_body_part_has_changed(); // keep trace of the change at body_builder level } my_visibility_has_changed(); // inform inherited class that overwrote this method } } bool body_builder::get_visible_recursively() const { bool ret = get_visible(); if(parent != nullptr) ret &= parent->get_visible_recursively(); return ret; } void body_builder::add_css_class(const string & name) { if(css_class_names.find(name) != css_class_names.end()) throw exception_range(string("the css_class name to add is already present: ") + name); css_class_names.insert(name); css_classes_have_changed(); my_body_part_has_changed(); } void body_builder::add_css_class(const css_class_group & cg) { string name; cg.reset_read(); while(cg.read_next(name)) add_css_class(name); css_classes_have_changed(); my_body_part_has_changed(); } bool body_builder::has_css_class(const string & name) const { return css_class_names.find(name) != css_class_names.end(); } void body_builder::remove_css_class(const string & name) { if(css_class_names.find(name) == css_class_names.end()) throw exception_range(string("the css_class name to remove is not present in the list: ") + name); css_class_names.erase(name); css_classes_have_changed(); my_body_part_has_changed(); } void body_builder::remove_css_class(const css_class_group & cg) { string name; cg.reset_read(); while(cg.read_next(name)) remove_css_class(name); css_classes_have_changed(); my_body_part_has_changed(); } css_class_group body_builder::get_css_class_group() const { css_class_group ret; set::iterator it = css_class_names.begin(); while(it != css_class_names.end()) { ret.add_css_class(*it); ++it; } return ret; } string body_builder::get_css_classes(const string & extra) const { string ret = extra; set::const_iterator it = css_class_names.begin(); while(it != css_class_names.end()) { if(!ret.empty()) ret += " "; ret += *it; ++it; } if(!ret.empty()) ret = "class=\"" + ret + "\""; return ret; } void body_builder::define_css_class_in_library(const css_class & csscl) { unique_ptr & csslib = lookup_css_library(); // this is a reference to a unique_ptr if(!csslib) throw WEBDAR_BUG; csslib->add(csscl); } void body_builder::define_css_class_in_library(const string & name, const css & cssdef) { define_css_class_in_library(css_class(name, cssdef)); } bool body_builder::is_css_class_defined_in_library(const string & name) const { unique_ptr & csslib = lookup_css_library(); // this is a reference to a unique_ptr if(!csslib) return false; else return csslib->class_exists(name); } string body_builder::get_body_part(const chemin & path, const request & req) { static const unsigned int maxloop = 100; string ret; create_css_lib_if_needed(); if(parent != nullptr) { ret = get_body_part_or_cache(path, req); } else // root of the adoption tree { request localreq = req; unsigned int loop = 0; flush_all_cached_body_part(); // now all children will generate events // and so on accordingly to the received // request: do { ret = get_body_part_or_cache(path, localreq); if(body_changed) // one of my child or myself has changed localreq.post_to_get(); // we avoid regenerating post events if(++loop >= maxloop) throw WEBDAR_BUG; } while(body_changed); } return ret; } void body_builder::set_no_CR(bool no_cr) { if(no_CR != no_cr) { my_body_part_has_changed(); no_CR = no_cr; } } void body_builder::assign_anchor(bool mode) { if(mode) if(! anchor.empty()) throw WEBDAR_BUG; // anchor was already set else anchor = get_available_anchor(); else if(! anchor.empty()) { release_anchor(anchor); anchor = ""; } else throw WEBDAR_BUG; // anchor was not assigned } void body_builder::my_body_part_has_changed() { if(ignore_children_body_changed) return; // we just ignore this call if(! visible) return; // we are not visible so display // need to be redisplayed. And if we // later become visible, the change of // visibility does trigger my_body_part_has_changed() body_changed = true; if(parent != nullptr) parent->my_body_part_has_changed(); } chemin body_builder::get_path() const { chemin ret; map::const_iterator it; if(parent != nullptr) { it = parent->revert_child.find(const_cast(this)); if(it == parent->revert_child.end()) throw WEBDAR_BUG; ret = parent->get_path(); ret.push_back(it->second); // adding the name of "this" to parent's path } else // no parent, we are the root, so the path is given by prefix ret = x_prefix; return ret; } string body_builder::get_recorded_name() const { if(parent != nullptr) { map::const_iterator it = parent->revert_child.find(const_cast(this)); if(it == parent->revert_child.end()) throw WEBDAR_BUG; return it->second; } else return ""; } unique_ptr & body_builder::lookup_css_library() const { const_cast(this)->create_css_lib_if_needed(); if(library || parent == nullptr) return const_cast&>(library); else return parent->lookup_css_library(); } string body_builder::get_body_part_from_target_child(const chemin & path, const request & req) { string ret; create_css_lib_if_needed(); if(path.empty()) throw WEBDAR_BUG; // invoked with an empty path string name = path.front(); map::iterator it = children.find(name); if(it != children.end()) { chemin sub_path = path; sub_path.pop_front(); ret = it->second->get_body_part(sub_path, req); } else throw exception_input("unkown URL requested", STATUS_CODE_NOT_FOUND); if(visible) return ret; else return ""; } string body_builder::get_body_part_from_all_children(const chemin & path, const request & req) { string ret = ""; chemin sub_path = path; vector::iterator it = order.begin(); vector::iterator refbegin = it; create_css_lib_if_needed(); if(!sub_path.empty()) sub_path.pop_front(); while(it != order.end()) { if(*it == nullptr) throw WEBDAR_BUG; ret += (*it)->get_body_part(sub_path, req); ++it; if(order.begin() != refbegin) throw WEBDAR_BUG; // object child added or removed // while evaluation get_body_part // cannot be workaround because // aborting now could let some object // not updated but my flag my_body_has_changed() // to force for re-evaluation but this second time // if the request was a POST it will be transformed // into a GET and some form may not be updated. // If instead we restart the // loop here we may apply twice a POST // to a form object... thus we // forbid this and ask the caller // to add/remove child outside this method // and take action to restart or not the // body_builder::inherited_get_body_part() } if(visible) return ret; else return ""; } void body_builder::orphan_all_children() { body_builder *obj = nullptr; map::iterator it = children.begin(); while(it != children.end()) { obj = it->second; if(obj == nullptr) throw WEBDAR_BUG; try { foresake(obj); } catch(...) { throw WEBDAR_BUG; } it = children.begin(); // unrecord_child modifies the "children" map // so we set 'it' to a valid value setting it to begin() // but at each round, a item is removed from the children map // so the loop will end when the map will become empty } if(children.size() != 0) throw WEBDAR_BUG; if(order.size() != 0) throw WEBDAR_BUG; if(revert_child.size() != 0) throw WEBDAR_BUG; } void body_builder::unrecord_from_parent() { if(parent != nullptr) parent->foresake(this); } void body_builder::recursive_path_has_changed() { vector::iterator it = order.begin(); path_has_changed(); while(it != order.end()) { if((*it) == nullptr) throw WEBDAR_BUG; (*it)->recursive_path_has_changed(); ++it; } } void body_builder::recursive_new_css_library_available() { vector::iterator it = order.begin(); new_css_library_available(); while(it != order.end()) { if((*it) == nullptr) throw WEBDAR_BUG; (*it)->recursive_new_css_library_available(); ++it; } } void body_builder::clear() { visible = true; no_CR = false; parent = nullptr; order.clear(); children.clear(); revert_child.clear(); last_body_path.clear(); last_body_req_uri.clear(); last_body_req_body.clear(); last_body_part.clear(); library_asked = false; library.reset(); css_class_names.clear(); body_changed = true; ignore_children_body_changed = false; anchor = ""; } void body_builder::create_css_lib_if_needed() { if(library_asked) { if(library) throw exception_range("A css_library is already stored for that body_builder object"); library.reset(new (nothrow) css_library()); if(!library) throw exception_memory(); else library_asked = false; recursive_new_css_library_available(); } } void body_builder::flush_all_cached_body_part() { vector::iterator it = order.begin(); body_changed = true; while(it != order.end()) { if((*it) == nullptr) throw WEBDAR_BUG; (*it)->flush_all_cached_body_part(); ++it; } } string body_builder::get_body_part_or_cache(const chemin & path, const request & req) { string ret; if(path == last_body_path && req.get_uri() == (const uri)(last_body_req_uri) && req.get_body() == last_body_req_body && ! body_changed) { if(visible) ret = last_body_part; else ret = ""; } else { body_changed = false; // set before to track any changes implied by the following line if(visible) { ret = inherited_get_body_part(path, req); if(! body_changed) { last_body_path = path; last_body_req_uri = req.get_uri(); last_body_req_body = req.get_body(); last_body_part = ret; } // else, if body_changed is already true // whatever we would store in last_* fields // would not be used } else ret = ""; // we don't record the current status // as the object is not visible, and // when it will become visible, set_visible() // will set body_changed to true // calling my_body_part_has_changed() // so whatever we would have stored in last_* // field would not be used anyway. } // inserting the anchor before the inherited returned body part if(!anchor.empty()) ret = libdar::tools_printf("\n%s\n", anchor.c_str(), ret.c_str()); return ret; } string body_builder::get_available_anchor() { string ret = ""; unsigned int increment_amplitude = 2; unsigned int i = 0 + rand() % increment_amplitude; assigned_anchors_ctrl.lock(); try { while(assigned_anchors.find(i) != assigned_anchors.end()) { increment_amplitude *= 2; i += rand() % increment_amplitude; } assigned_anchors.insert(i); ret = webdar_tools_convert_to_string(i); } catch(...) { assigned_anchors_ctrl.unlock(); throw; } assigned_anchors_ctrl.unlock(); return ret; } void body_builder::release_anchor(string & val) { int i = 0; try { i = webdar_tools_convert_to_int(val); } catch(exception_range & e) { throw WEBDAR_BUG; } if(i < 0) throw WEBDAR_BUG; assigned_anchors_ctrl.lock(); try { set::iterator it = assigned_anchors.find(i); if(it == assigned_anchors.end()) throw WEBDAR_BUG; // unsassigned anchor !!! else assigned_anchors.erase(it); } catch(...) { assigned_anchors_ctrl.unlock(); throw; } assigned_anchors_ctrl.unlock(); } webdar-1.0.0/src/html_div.hpp0000644000175000017520000000343215035731151013010 00000000000000/*********************************************************************/ // webdar - a web server and interface program to libdar // Copyright (C) 2013-2025 Denis Corbin // // This file is part of Webdar // // Webdar is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // Webdar is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Webdar. If not, see // //---- // to contact the author: dar.linux@free.fr /*********************************************************************/ #ifndef HTML_DIV_HPP #define HTML_DIV_HPP // C system header files #include "my_config.h" extern "C" { } // C++ system header files // webdar headers #include "html_level.hpp" /// class html_div is the implementation of
/// objects get enclosed in the
if they are /// adopted (from body_builder::adopt() method) class html_div : public html_level { public: html_div() = default; html_div(const html_div & ref) = delete; html_div(html_div && ref) noexcept = delete; html_div & operator = (const html_div & ref) = delete; html_div & operator = (html_div && ref) noexcept = delete; ~html_div() = default; protected: /// inherited from body_builder virtual std::string inherited_get_body_part(const chemin & path, const request & req) override; }; #endif webdar-1.0.0/src/my_config.h0000644000175000017520000000211114773727241012622 00000000000000/*********************************************************************/ // webdar - a web server and interface program to libdar // Copyright (C) 2013-2025 Denis Corbin // // This file is part of Webdar // // Webdar is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // Webdar is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Webdar. If not, see // //---- // to contact the author: dar.linux@free.fr /*********************************************************************/ #ifndef MY_CONFIG_H #define MY_CONFIG_H // C++ system header files // webdar headers #include "../config.h" #endif webdar-1.0.0/src/html_summary_page.hpp0000644000175000017520000000722514773727241014740 00000000000000/*********************************************************************/ // webdar - a web server and interface program to libdar // Copyright (C) 2013-2025 Denis Corbin // // This file is part of Webdar // // Webdar is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // Webdar is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Webdar. If not, see // //---- // to contact the author: dar.linux@free.fr /*********************************************************************/ #ifndef HTML_SUMMARY_PAGE_HPP #define HTML_SUMMARY_PAGE_HPP // C system header files #include "my_config.h" extern "C" { } // C++ system header files // webdar headers #include "html_page.hpp" #include "html_dir_tree.hpp" #include "html_button.hpp" #include "html_div.hpp" #include "archive_init_list.hpp" #include "html_focus.hpp" /// html_summary_page is the page that shows the summary of an existing archive /// it is used by class user_interface once the archive_init_list object it has /// created has completed the dar archive openning at which time it passed this object /// using the set_source() method and this html_page (html_summary_page) becomes the /// one receiving html request and provides html content thanks to its get_body_part() /// inherited method. class html_summary_page : public html_page, public actor, public events { public: static const std::string event_close; html_summary_page(); html_summary_page(const html_summary_page & ref) = delete; html_summary_page(html_summary_page && ref) noexcept = delete; html_summary_page & operator = (const html_summary_page & ref) = delete; html_summary_page & operator = (html_summary_page && ref) noexcept = delete; ~html_summary_page() = default; /// set title of the summary page given the session name void set_session_name(const std::string & session_name); /// mandatory call before calling get_body_part !!! void set_source(const archive_init_list *ref); /// clear informations about previously read archive void clear(); // inherited from actor virtual void on_event(const std::string & event_name) override; protected: /// inherited from html_div/body_builder virtual void new_css_library_available() override; private: static constexpr const char* css_close = "html_sum_page_close"; static constexpr const char* css_table_top = "html_sum_page_table_top"; static constexpr const char* css_table_left = "html_sum_page_table_left"; static constexpr const char* css_table_rest = "html_sum_page_table_rest"; static constexpr const char* css_about_box = "html_sum_page_about"; static constexpr const char* css_about_text = "html_sum_page_about_text"; html_div about; html_text about_text; html_div format_float; html_text format_title; html_table format_table; html_div slice_float; html_text slice_title; html_table slice_table; html_div overall_float; html_text overall_title; html_table overall_table; html_div content_float; html_text content_title; html_table content_table; html_div saved_float; html_text saved_title; html_table saved_table; html_button close; }; #endif webdar-1.0.0/src/chemin.hpp0000644000175000017520000001223314773727241012461 00000000000000/*********************************************************************/ // webdar - a web server and interface program to libdar // Copyright (C) 2013-2025 Denis Corbin // // This file is part of Webdar // // Webdar is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // Webdar is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Webdar. If not, see // //---- // to contact the author: dar.linux@free.fr /*********************************************************************/ #ifndef CHEMIN_HPP #define CHEMIN_HPP // C system header files #include "my_config.h" extern "C" { } // C++ system header files #include #include // webdar headers #include "exceptions.hpp" /// class chemin definition /// \note "chemin" means path in French, this class /// implements path objects. There is no relative/absolute /// caracteristics in these objects, Only at display() time /// one can decide to given a string representing the path as /// either absolute or relative. class chemin { public: /// constucts an empty path chemin() { members.clear(); index = 0; }; chemin(const std::string & path); chemin(const chemin & ref) = default; chemin(chemin && ref) noexcept = default; chemin & operator = (const chemin & ref) = default; chemin & operator = (chemin && ref) noexcept = default; ~chemin() = default; /// default copy constructor is OK /// default assignement operator is OK too /// default destructor is also fine here /// set the path as an empty path void clear() { members.clear(); index = 0; }; /// compaires two path bool operator == (const chemin & ref) const { return members == ref.members; }; bool operator != (const chemin & ref) const { return !((*this) == ref); }; /// return true if 'this' is the beginning of ref bool is_the_beginning_of(const chemin & ref) const; /// concatenate a path to this object void operator += (const chemin & ref); /// concatenate a path with us another chemin operator + (const chemin & ref) const { chemin ret = *this; ret += ref; return ret; }; /// add a member at the end of the path void push_back(const std::string & x); /// get the first member of the path /// \note if the path is empty() an exception_range is thrown std::string front() const { if(empty()) throw exception_range("cannot get front() from an empty chemin"); return members.front(); }; /// get the last member of the path /// \note if the path is empty() an exception_range is thrown std::string back() const { if(empty()) throw exception_range("cannot get back() from an empty chemin"); return members.back(); }; /// removes the first member of the path from this object (root side) /// /// \note throws an exception if the path is empty void pop_front(); /// removes the last member of the path from this object void pop_back(); /// returns the size of the path in number of members unsigned int size() const { return members.size(); }; /// return true if the path is an empty path (having no members) bool empty() const { return members.empty(); }; /// return the index of the path /// /// \note the index is a pointer to a member of the path. Zero is the first member /// the index can be modified at will even on const objects, but always points to a valid /// member of the path. If the path is empty, playing with index raises an exception unsigned int get_index() const { return index; }; /// set the index to the next member. If the member is the last of the path this call does nothing void increase_index() const { if(index < size() - 1) ++(const_cast(this)->index); }; /// set the index to the previous member. If the member is the first of the path, this call does nothing void decrease_index() const { if(index > 0) --(const_cast(this)->index); }; /// set the index to an arbitrary value. An exception is thrown if the given value is greater or equal the path size void set_index(unsigned int val) const; /// return a string corresponding to the expected value of an absolute path std::string display(bool relative = false) const; /// return a compact string to be used as identifier. /// /// \note Two different path give two different strings, two equal path give the same identifier std::string namify() const; /// access to a given member of the path /// /// \param[in] x index of the path to retrieve. This argument value must range from zero to size-1 /// \return the requested member of the path /// \note if called on an empty path, an exception is thrown. const std::string & operator[] (unsigned int x) const; private: std::deque members; unsigned int index; }; #endif webdar-1.0.0/src/html_disconnect.cpp0000644000175000017520000001264114773747160014373 00000000000000/*********************************************************************/ // webdar - a web server and interface program to libdar // Copyright (C) 2013-2025 Denis Corbin // // This file is part of Webdar // // Webdar is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // Webdar is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Webdar. If not, see // //---- // to contact the author: dar.linux@free.fr /*********************************************************************/ // C system header files #include "my_config.h" extern "C" { } // C++ system header files #include // webdar headers #include "webdar_css_style.hpp" // #include "html_disconnect.hpp" using namespace std; const string html_disconnect::event_disconn = "disconnect"; const string html_disconnect::event_version = "version"; const string html_disconnect::css_global = "html_disco_global"; const string html_disconnect::css_title = "html_disco_title"; const string html_disconnect::css_title_vers = "html_disco_title_vers"; const string html_disconnect::css_title_box = "html_disco_title_box"; const string html_disconnect::css_status = "html_disco_status"; const string html_disconnect::css_status_box = "html_disco_status_box"; const string html_disconnect::css_quit_box = "html_disco_quit_box"; bool html_disconnect::default_basic_auth = true; html_disconnect::html_disconnect(): logo((chemin(STATIC_PATH_ID) + chemin(STATIC_TITLE_LOGO)).display(false), "Webdar logo"), title_vers(libdar::tools_printf("Version %s", WEBDAR_VERSION), event_version), quit("Disconnect", event_disconn) { // components configuration logo.set_dimensions("100em", "100em"); title.clear(); title.add_text(0, "WEBDAR"); // adoption tree title_box.adopt(&logo); title_box.adopt(&title); title_box.adopt(&title_vers); adopt(&title_box); adopt(&quit); status_box.adopt(&status); adopt(&status_box); adopt(&version_details); // events quit.record_actor_on_event(this, event_disconn); title_vers.record_actor_on_event(this, event_version); register_name(event_disconn); // to be able to propagate the event // visible status if(default_basic_auth) quit.set_visible(false); version_details.set_visible(false); // css add_css_class(css_global); logo.add_css_class(webdar_css_style::float_left); title.add_css_class(css_title); title.add_css_class(webdar_css_style::text_shadow_dark); webdar_css_style::normal_button(title_vers); title_vers.add_css_class(css_title_vers); title_box.add_css_class(css_title_box); status.add_css_class(css_status); status.add_css_class(webdar_css_style::text_shadow_dark); status_box.add_css_class(css_status_box); webdar_css_style::active_button(quit); quit.add_css_class(webdar_css_style::float_right); quit.add_css_class(css_quit_box); } void html_disconnect::set_username(const string & username) { status.clear(); if(!username.empty()) status.add_text(0, libdar::tools_printf("Connected as user %s", username.c_str())); } void html_disconnect::on_event(const string & event_name) { if(event_name == event_disconn) act(event_disconn); // propagate the event else if(event_name == event_version) version_details.set_visible(true); else throw WEBDAR_BUG; } void html_disconnect::new_css_library_available() { unique_ptr & csslib = lookup_css_library(); if(!csslib) throw WEBDAR_BUG; webdar_css_style::update_library(*csslib); if(!csslib->class_exists(css_global)) { css tmp; string small_text = "0.8em"; // top bar (the html_disconnect (html_div) itself) tmp.clear(); tmp.css_background_color(COLOR_BACK); tmp.css_overflow(css::ov_hidden); tmp.css_width("100%", true); tmp.css_background_color(COLOR_TOPBAR_BACK); csslib->add(css_global, tmp); // for the html_text title tmp.clear(); tmp.css_font_weight_bold(); tmp.css_font_size("2em"); tmp.css_margin_left("1em"); tmp.css_color(COLOR_MENU_BORDER_OFF); csslib->add(css_title, tmp); // for the html_text title versions tmp.clear(); tmp.css_font_size(small_text); tmp.css_float(css::fl_left); tmp.css_margin_left("1em"); csslib->add(css_title_vers, tmp); // the transparent title_box tmp.clear(); tmp.css_float(css::fl_left); tmp.css_width("60%", false); csslib->add(css_title_box, tmp); // for the html_text status tmp.clear(); tmp.css_font_size(small_text); tmp.css_font_weight_bold(); tmp.css_font_style_italic(); tmp.css_text_v_align(css::al_middle); tmp.css_margin_right("1em"); tmp.css_color(WHITE); tmp.css_float(css::fl_right); csslib->add(css_status, tmp); // the transparent status_box tmp.clear(); tmp.css_float(css::fl_right); tmp.css_float_clear(css::fc_right); csslib->add(css_status_box, tmp); // the html_button (disconnect): for the englobing box tmp.clear(); tmp.css_font_size(small_text); tmp.css_margin("0.2em"); csslib->add(css_quit_box, tmp); } } webdar-1.0.0/src/html_size_unit.cpp0000644000175000017520000001220115031450167014225 00000000000000/*********************************************************************/ // webdar - a web server and interface program to libdar // Copyright (C) 2013-2025 Denis Corbin // // This file is part of Webdar // // Webdar is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // Webdar is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Webdar. If not, see // //---- // to contact the author: dar.linux@free.fr /*********************************************************************/ // C system header files #include "my_config.h" extern "C" { } // C++ system header files // webdar headers // #include "html_size_unit.hpp" using namespace std; const string html_size_unit::changed = "html_size_unit_changed"; html_size_unit::html_size_unit() : unit(""), SI_mode(""), manual_change(false) { // set components value SI_mode.add_choice("SI", "SI"); SI_mode.add_choice("bin", "binary"); SI_mode.set_selected_num(1); // defaulting to binary family units unit.set_no_CR(); set_fields(); // adoption tree adopt(&unit); adopt(&SI_mode); // events register_name(changed); SI_mode.set_change_event_name(mode_changed); SI_mode.record_actor_on_event(this, mode_changed); unit.record_actor_on_event(this, html_form_select::changed); } libdar::infinint html_size_unit::get_value() const { libdar::infinint ret; libdar::infinint base = get_base_unit_value(SI_mode.get_selected_num()); try { ret = base.power(unit.get_selected_num()); } catch(libdar::Elimitint & e) { throw exception_libcall(e); } return ret; } libdar::infinint html_size_unit::get_base_unit_value(unsigned int index) const { libdar::infinint base; switch(index) { case 0: base = 1000; break; case 1: base = 1024; break; default: throw WEBDAR_BUG; } return base; } unsigned int html_size_unit::get_max_power_for_base_unit(unsigned int index) const { return unit.num_choices() - 1; // for now the implementation // uses the same number of factors // for both SI and binary based units // if this change in the future // we will keep trace of the units // in a ~table~ field and read that table in // set_fields() method for we have the // exact number of option per base unit // at any time } void html_size_unit::set_unit_and_ratio_indexes(unsigned int base_index, unsigned int power_index) { bool has_changed = false; manual_change = true; try { if(base_index <= get_max_base_unit_index()) { if(base_index != SI_mode.get_selected_num()) { SI_mode.set_selected_num(base_index); set_fields(); has_changed = true; } // else nothing changes here, thus nothing to do } else throw WEBDAR_BUG; if(power_index <= get_max_power_for_base_unit(base_index)) { if(power_index != unit.get_selected_num()) { unit.set_selected_num(power_index); has_changed = true; } // else nothing changes here, thus nothing to do } else throw WEBDAR_BUG; } catch(...) { manual_change = false; throw; } manual_change = false; if(has_changed) act(changed); } void html_size_unit::on_event(const string & event_name) { if(manual_change) return; if(event_name == mode_changed) { manual_change = true; try { set_fields(); // no need to call my_body_part_has_changed() // because changes done in on_event concern // body_builder objects we have adopted } catch(...) { manual_change = false; throw; } manual_change = false; act(changed); } else if(event_name == html_form_select::changed) act(changed); else throw WEBDAR_BUG; } void html_size_unit::set_fields() { unsigned int cur_selected = 0; if(unit.num_choices() > 0) cur_selected = unit.get_selected_num(); switch(SI_mode.get_selected_num()) { case 0: unit.clear(); unit.add_choice("o", "o"); unit.add_choice("ko", "ko"); unit.add_choice("Mo", "Mo"); unit.add_choice("Go", "Go"); unit.add_choice("To", "To"); unit.add_choice("Po", "Po"); unit.add_choice("Eo", "Eo"); unit.add_choice("Zo", "Zo"); unit.add_choice("Yo", "Yo"); unit.add_choice("Ro", "Ro"); unit.add_choice("Qo", "Qo"); break; case 1: unit.clear(); unit.add_choice("o", "o"); unit.add_choice("kio", "kio"); unit.add_choice("Mio", "Mio"); unit.add_choice("Gio", "Gio"); unit.add_choice("Tio", "Tio"); unit.add_choice("Pio", "Pio"); unit.add_choice("Eio", "Eio"); unit.add_choice("Zio", "Zio"); unit.add_choice("Yio", "Yio"); unit.add_choice("Rio", "Rio"); unit.add_choice("Qio", "Qio"); break; default: throw WEBDAR_BUG; } if(cur_selected < unit.num_choices()) unit.set_selected_num(cur_selected); } webdar-1.0.0/src/css_class_group.hpp0000644000175000017520000000462214773727241014412 00000000000000/*********************************************************************/ // webdar - a web server and interface program to libdar // Copyright (C) 2013-2025 Denis Corbin // // This file is part of Webdar // // Webdar is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // Webdar is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Webdar. If not, see // //---- // to contact the author: dar.linux@free.fr /*********************************************************************/ #ifndef CSS_CLASS_GROUP_HPP #define CSS_CLASS_GROUP_HPP // C system header files #include "my_config.h" extern "C" { } // C++ system header files #include // webdar headers /// manages a set of css class names /// this is only a way to manipulate a list of existing class names /// no class definition is done here just a list of names as a set class css_class_group { public: css_class_group() { clear_css_classes(); }; css_class_group(const css_class_group & ref) = default; css_class_group(css_class_group && ref) noexcept = default; css_class_group & operator = (const css_class_group & ref) = default; css_class_group & operator = (css_class_group && ref) noexcept = default; ~css_class_group() = default; /// add a class name to the list void add_css_class(const std::string & name); /// a a class group to a class the list void add_css_class(const css_class_group & cg); /// remove a class from the list void remove_css_class(const std::string & name); /// remove all classes void clear_css_classes(); /// restart reading from the first element void reset_read() const; /// read the next element or return false bool read_next(std::string & next_class) const; /// return true if the class group is empty bool is_empty() const { return content.empty(); }; private: std::set content; mutable std::set::iterator reader; }; #endif webdar-1.0.0/src/html_comparison_fields.hpp0000644000175000017520000000363714775733270015753 00000000000000/*********************************************************************/ // webdar - a web server and interface program to libdar // Copyright (C) 2013-2025 Denis Corbin // // This file is part of Webdar // // Webdar is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // Webdar is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Webdar. If not, see // //---- // to contact the author: dar.linux@free.fr /*********************************************************************/ #ifndef HTML_COMPARISON_FIELDS_HPP #define HTML_COMPARISON_FIELDS_HPP // C system header files #include "my_config.h" extern "C" { } // C++ system header files #include #include #include // webdar headers #include "html_form_select.hpp" /// html component in the form of a drop-down list to let the user define a libdar comparison field value class html_comparison_fields : public html_form_select { public: html_comparison_fields(); html_comparison_fields(const html_comparison_fields & ref) = default; html_comparison_fields(html_comparison_fields && ref) noexcept = delete; html_comparison_fields & operator = (const html_comparison_fields & ref) = delete; html_comparison_fields & operator = (html_comparison_fields && ref) noexcept = delete; ~html_comparison_fields() = default; libdar::comparison_fields get_value() const; void set_value(libdar::comparison_fields val); }; #endif webdar-1.0.0/src/html_options_list.hpp0000644000175000017520000000433014773727241014767 00000000000000/*********************************************************************/ // webdar - a web server and interface program to libdar // Copyright (C) 2013-2025 Denis Corbin // // This file is part of Webdar // // Webdar is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // Webdar is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Webdar. If not, see // //---- // to contact the author: dar.linux@free.fr /*********************************************************************/ #ifndef HTML_OPTIONS_LIST_HPP #define HTML_OPTIONS_LIST_HPP // C system header files #include "my_config.h" extern "C" { } // C++ system header files #include // webdar headers #include "body_builder.hpp" #include "html_form.hpp" #include "html_form_fieldset.hpp" #include "html_form_radio.hpp" #include "html_derouleur.hpp" /// html component for the user to provide parameters of libdar archive testing operation class html_options_list : public body_builder { public: html_options_list(); html_options_list(const html_options_list & ref) = delete; html_options_list(html_options_list && ref) noexcept = delete; html_options_list & operator = (const html_options_list & ref) = delete; html_options_list & operator = (html_options_list && ref) noexcept = delete; ~html_options_list() = default; bool do_we_list() const { return action.get_selected_num() == 0; }; protected: // inherited from bdy_builder virtual std::string inherited_get_body_part(const chemin & path, const request & req) override; // inherited from bdy_builder virtual void new_css_library_available() override; private: html_derouleur deroule; html_form form; html_form_fieldset fs; html_form_radio action; }; #endif webdar-1.0.0/src/html_error.cpp0000644000175000017520000000671414773727241013375 00000000000000/*********************************************************************/ // webdar - a web server and interface program to libdar // Copyright (C) 2013-2025 Denis Corbin // // This file is part of Webdar // // Webdar is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // Webdar is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Webdar. If not, see // //---- // to contact the author: dar.linux@free.fr /*********************************************************************/ // C system header files #include "my_config.h" extern "C" { } // C++ system header files // webdar headers #include "webdar_css_style.hpp" #include "css.hpp" // #include "html_error.hpp" using namespace std; const string fixed_title1 = "Webdar - "; const string fixed_title2 = "Libdar message"; const char* html_error::acknowledged = "html_error_acknowledged"; const char* html_error::class_message = "html_error_mesg"; const char* html_error::class_global = "html_error_glb"; const char* html_error::class_button = "html_error_btn"; const char* html_error::close_event = "html_error_button_close"; html_error::html_error(): html_page(fixed_title1+fixed_title2), close("Close", close_event) { css tmp; the_error.add_css_class(class_message); the_error.add_css_class(webdar_css_style::text_color_red); global.add_css_class(webdar_css_style::red_border); global.add_css_class(class_global); webdar_css_style::normal_button(close); close.add_css_class(class_button); global.adopt(&the_error); adopt(&global); adopt(&close); close.record_actor_on_event(this, close_event); register_name(acknowledged); } void html_error::set_message(const string & msg) { the_error.clear(); the_error.add_text(3, msg); } void html_error::on_event(const string & event_name) { act(acknowledged); // we propagate the event, but it does not // change the result of inherited_get_body_part() // thus we dont call my_body_part_has_changed(); } void html_error::set_session_name(const string & sessname) { set_title(fixed_title1 + sessname + " - " + fixed_title2); } void html_error::new_css_library_available() { css tmp; unique_ptr & csslib = lookup_css_library(); if(!csslib) throw WEBDAR_BUG; if(! csslib->class_exists(class_message)) { try { tmp.clear(); tmp.css_text_h_align(css::al_center); csslib->add(class_message, tmp); tmp.clear(); tmp.css_padding("1em"); tmp.css_margin("1em"); tmp.css_border_width(css::bd_all, css::bd_medium); tmp.css_border_style(css::bd_all, css::bd_inset); csslib->add(class_global, tmp); tmp.clear(); tmp.css_float(css::fl_right); tmp.css_margin_right("1em"); csslib->add(class_button, tmp); } catch(exception_range & e) { throw WEBDAR_BUG; } } else { if(! csslib->class_exists(class_global) || ! csslib->class_exists(class_button)) throw WEBDAR_BUG; } webdar_css_style::update_library(*csslib); } webdar-1.0.0/src/request.hpp0000644000175000017520000002432614773731610012707 00000000000000/*********************************************************************/ // webdar - a web server and interface program to libdar // Copyright (C) 2013-2025 Denis Corbin // // This file is part of Webdar // // Webdar is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // Webdar is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Webdar. If not, see // //---- // to contact the author: dar.linux@free.fr /*********************************************************************/ #ifndef REQUEST_HPP #define REQUEST_HPP #include "my_config.h" // C++ system header files #include #include #include // webdar headers #include "uri.hpp" #include "webdar_tools.hpp" #include "exceptions.hpp" #include "tokens.hpp" #include "central_report.hpp" #include "connexion.hpp" /// class holding fields of an HTTP request (method, URI, header, cookies, and so on) class request { public: /// The constructor request(const std::shared_ptr & log) { clear(); if(log) clog = log; else throw WEBDAR_BUG; }; request(const request & ref) = default; request(request && ref) noexcept = default; request & operator = (const request & ref) = default; request & operator = (request && ref) noexcept = default; ~request() = default; /// clear all fields of the request void clear(); /// try reading just enough data in order to determine the uri of the next request /// /// \note this method only fills the method and URI fields if data is available for that, /// in which case only, true is returned. get_method() and get_uri() can then be invoked /// to obtain the fields value. bool try_reading(proto_connexion & input); /// read the next request from input connexion /// /// \note this method fills the internal fields (request line, header and body) /// \note may throw exceptions of type exception_range and exception_input. /// the first mean that the request could not be read completely, the caller /// must either not catch this type of exception, or reply by a bad-request answer /// and close the connexion even in HTTP/1.1 because be could not completely read the request. /// Upon exception_input, the request could be read entirely, connexion can be maintained. /// The request code is to send in the answer is provided by this exception class. void read(proto_connexion & input); /// obtains the method of the read request const std::string & get_method() const { if(status < method_read) throw WEBDAR_BUG; return cached_method; }; /// manually change the method of the request void change_method(const std::string & val) { if(status < method_read) throw WEBDAR_BUG; cached_method = val; }; /// change POST request to a GET request, No modification for others void post_to_get() { if(status < method_read) throw WEBDAR_BUG; if(cached_method == "POST") cached_method = "GET"; }; /// obtains the URI of the read request const uri & get_uri() const { if(status < uri_read) throw WEBDAR_BUG; return coordinates; }; /// obtains the MAJOR version string of the read request int get_maj_version() const { if(status != completed) throw WEBDAR_BUG; return maj_vers; }; /// obtains the MINOR version string of the read request int get_min_version() const { if(status != completed) throw WEBDAR_BUG; return min_vers; }; /// obtain the body of the read request const std::string & get_body() const { if(status != completed) throw WEBDAR_BUG; return body; }; /// obtain the body splitted in as list of attribute-value pair /// /// \note this call can be used to analyse POST request's body in response to a form /// \note this call should only be used when the Content-Type is /// application/x-www-form-urlencoded, if not an exception is thrown std::map get_body_form() const; /// manually add a cookie to the request (should be used exceptionally) /// /// \note the semantic of a const method might sound strange here /// as we do modify the request object. Well, nothing's perfect... improvment /// may take place here, yes. void add_cookie(const std::string & key, const std::string & value) const; /// lookup for a cookie bool find_cookie(const std::string & key, std::string & value) const; /// raw request header header access bool find_attribute(const std::string & key, std::string & value) const; /// analyse body as a MIME multipart component (RFC 1521) /// \return the number of multipart found in the body of the request /// \note the request's header must have a header "Content-type: multipart/form-data; boundary=.....\r\n" /// \note if the request is not properly formated or is not a multipart one, an exception_range is thrown unsigned int get_multipart_number() const; /// obtains the headers of multiparts once get_multipart_number() has been executed /// \param[in] num the part number of the multipart in this request, first part is starting at index zero /// \return a map of key/value pair corresponding to the key/values pair found in the /// header the multipart number "num" found in the body std::map get_header_of_multipart(unsigned int num) const; ///< first part is starting at index zero /// obtains the body of multiparts once get_multipart_number() has been executed /// \param[in] num the part number of the multipart in this request, first part is starting at index zero /// \return the document inclosed in the multipart number "num" of the body troncon get_body_of_multipart(unsigned int num) const; /// set the fields in consistent state to mimic a valid request /// \note used to convert body_builder class with static adopted child to static_body_builder class void fake_valid_request(); private: enum { init, method_read, uri_read, reading_all, completed } status; std::string cached_method; //< method already read from the next request uri coordinates; //< uri spit in fields unsigned int maj_vers; //< HTTP major version of the last request received unsigned int min_vers; //< HTTP minor version of the last request received std::map attributes; //< request headers std::map cookies; //< request cookies std::string body; //< request body if any std::shared_ptr clog; //< central report logging /// multipart pointers typedef std::map mp_header_map; mutable std::deque mp_headers; mutable std::deque mp_body; void clear_multipart() { mp_headers.clear(); mp_body.clear(); }; /// try reading the method and uri from the connexion bool read_method_uri(proto_connexion & input, bool blocking); // feed cookies fields from attributes and remove cookies from attributes void extract_cookies(); /// split the string argument in two intergers to fields maj_vers and min_vers void set_version(const std::string & version); void add_attribute(const std::string & key, const std::string & value) { attributes.insert(std::pair(webdar_tools_to_canonical_case(key), value)); }; void drop_attribute(const std::string & key); /// true if next to read is end of line chars (CR LF) static bool is_empty_line(proto_connexion & input); /// returns what remains on the current lines static std::string up_to_eol(proto_connexion & input); /// returns what remains up to no data available on the socket static std::string up_to_eof(proto_connexion & input); /// skips the current line up to the next given argument. /// /// \note Stops at end of line if the provided char is not found static void skip_over(proto_connexion & input, char a); static std::string up_to_length(proto_connexion & input, unsigned int length); /// drops all data up to and including the next end of line (CR LF). static void skip_line(proto_connexion & input); /// returns what remains on lines up to a real EOL (not LWS) /// \note LWS is a CR+LF followed by any number of space or tab. /// LWS allow a argument to be split over several lines. The spaces and tabs /// following a CR+LF are not part of the argument. /// this structure is used in header HTTP messages (RFC 1945) static std::string up_to_eol_with_LWS(proto_connexion & input); /// reads the next token from the socket /// \param[in] initial defines whether we can skip space to reach the token start /// \param[in] blocking defines whether the reading is blocking or not /// \param[out] token stores the token read /// \return true if a complete token could be read on the current line, false /// (in non blocking mode) if there is not enough data to define whether to token is /// complete or not. /// \note a token what defines the RFC 1945 at paragraph 2.2 "Basic Rules" /// \note the reading of a token does fails if no more token are available on the current /// line (CR, LF or CRLF met), true is returned in that case and token is set to an /// empty string static bool get_token(proto_connexion & input, bool initial, bool blocking, std::string & token); /// read the next word from the socket /// \param[in] initial defines whether we can skip space to reach the word start /// \param[in] blocking defines whether the reading is blocking or not /// \param[out] word stores the read word /// \return true if a complete word could be read on the current line, false /// (in non blocking mode) if there is not enough data to define wheter the word is /// complete or not. /// \note a word is composed of token and the following characters '/' ':' '=' '@' '?' /// \note the reading of a word fails if end of line is met, in that case true is returned /// and word is set to an empty string static bool get_word(proto_connexion & input, bool initial, bool blocking, std::string & word); }; #endif webdar-1.0.0/src/disconnected_page.cpp0000644000175000017520000000435214773727241014652 00000000000000/*********************************************************************/ // webdar - a web server and interface program to libdar // Copyright (C) 2013-2025 Denis Corbin // // This file is part of Webdar // // Webdar is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // Webdar is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Webdar. If not, see // //---- // to contact the author: dar.linux@free.fr /*********************************************************************/ // C system header files #include "my_config.h" extern "C" { } // C++ system header files // webdar headers // #include "disconnected_page.hpp" using namespace std; disconnected_page::disconnected_page(): page("disconnected from Webdar"), redir(false) { // component setup msg.add_text(3, "You are now disconnected from Webdar"); // adoption tree page.adopt(&msg); // events // css static const char* text_css = "disconnected_page_text"; css_class text_class(text_css); css tmp; tmp.css_text_h_align(css::al_center); tmp.css_text_v_align(css::al_middle); text_class.set_value(tmp); msg.add_css_class(text_css); page.define_css_class_in_library(text_class); } answer disconnected_page::give_answer(const request & req) { answer ret; if(redir) { uri target(req.get_uri()); target.trim_path(); // to avoid pointing on the disconnect and force the user to select a session page.set_refresh_redirection(0, target.get_string()); } else page.set_refresh_redirection(0, ""); ret.set_status(STATUS_CODE_OK); ret.set_reason("ok"); ret.add_body(page.get_body_part(req.get_uri().get_path(), req)); return ret; } void disconnected_page::prefix_has_changed() { page.set_prefix(get_prefix()); } webdar-1.0.0/src/html_compression.cpp0000644000175000017520000000607714773727241014607 00000000000000/*********************************************************************/ // webdar - a web server and interface program to libdar // Copyright (C) 2013-2025 Denis Corbin // // This file is part of Webdar // // Webdar is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // Webdar is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Webdar. If not, see // //---- // to contact the author: dar.linux@free.fr /*********************************************************************/ // C system header files #include "my_config.h" extern "C" { } // C++ system header files // webdar headers // #include "html_compression.hpp" using namespace std; const string html_compression::changed = "html_compression_changed"; html_compression::html_compression(const string &title): html_form_select(title) { add_choice("none", "None"); // 0 add_choice("gzip", "Gzip"); // 1 add_choice("bzip2", "Bzip2"); // 2 add_choice("lzo", "lzo"); // 3 add_choice("lzo_1_15", "lzop -1");// 4 add_choice("lzo_1", "lzop -3"); // 5 add_choice("xz", "xz"); // 6 add_choice("zstd", "zstd"); // 7 add_choice("lz4", "lz4"); // 8 set_selected_num(0); register_name(changed); record_actor_on_event(this, html_form_select::changed); } libdar::compression html_compression::get_value() const { switch(get_selected_num()) { case 0: return libdar::compression::none; case 1: return libdar::compression::gzip; case 2: return libdar::compression::bzip2; case 3: return libdar::compression::lzo; case 4: return libdar::compression::lzo1x_1_15; case 5: return libdar::compression::lzo1x_1; case 6: return libdar::compression::xz; case 7: return libdar::compression::zstd; case 8: return libdar::compression::lz4; default: throw WEBDAR_BUG; } } void html_compression::set_value(libdar::compression val) { switch(val) { case libdar::compression::none: set_selected_num(0); break; case libdar::compression::gzip: set_selected_num(1); break; case libdar::compression::bzip2: set_selected_num(2); break; case libdar::compression::lzo: set_selected_num(3); break; case libdar::compression::lzo1x_1_15: set_selected_num(4); break; case libdar::compression::lzo1x_1: set_selected_num(5); break; case libdar::compression::xz: set_selected_num(6); break; case libdar::compression::zstd: set_selected_num(7); break; case libdar::compression::lz4: set_selected_num(8); break; default: throw WEBDAR_BUG; } my_body_part_has_changed(); } webdar-1.0.0/src/html_form_overwrite_chain_action.cpp0000644000175000017520000000757715036443665020022 00000000000000/*********************************************************************/ // webdar - a web server and interface program to libdar // Copyright (C) 2013-2025 Denis Corbin // // This file is part of Webdar // // Webdar is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // Webdar is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Webdar. If not, see // //---- // to contact the author: dar.linux@free.fr /*********************************************************************/ // C system header files #include "my_config.h" extern "C" { } // C++ system header files // webdar headers #include "html_form_overwrite_chain_cell.hpp" #include "html_form_overwrite_action.hpp" #include "tooltip_messages.hpp" // #include "html_form_overwrite_chain_action.hpp" using namespace std; const string html_form_overwrite_chain_action::changed = "hfo_chain_action_changed"; html_form_overwrite_chain_action::html_form_overwrite_chain_action(const string & label): fs(label), table(false, true, "New action", "--- select ---") { // components setup table.set_obj_type_provider(this); table.add_obj_type("Add a new cell"); // adoption tree fs.adopt(&table); adopt(&fs); // events table.record_actor_on_event(this, html_form_dynamic_table::changed); register_name(changed); // css // tooltips if(!label.empty()) fs.set_tooltip(TOOLTIP_HFOCA_FS); } html_form_overwrite_action & html_form_overwrite_chain_action::get_last_added() { html_form_dynamic_table::iterator tmp; html_form_overwrite_chain_cell* ptr = nullptr; if(table.empty()) throw WEBDAR_BUG; tmp = table.last(); if(!table.last().get_object()) throw WEBDAR_BUG; if(table.last().get_object().get() == nullptr) throw WEBDAR_BUG; ptr = dynamic_cast(table.last().get_object().get()); if(ptr == nullptr) throw WEBDAR_BUG; return ptr->get_cell_action(); } unique_ptr html_form_overwrite_chain_action::get_overwriting_action() const { unique_ptr ret; html_form_dynamic_table::iterator it = table.begin(); shared_ptr obj; html_overwrite_action *obj_ptr; unique_ptr tmp; ret.reset(new (nothrow) libdar::crit_chain()); if(!ret) throw exception_memory(); while(it != table.end()) { obj = it.get_object(); if(!obj) throw WEBDAR_BUG; obj_ptr = dynamic_cast(obj.get()); if(obj_ptr == nullptr) throw WEBDAR_BUG; tmp = obj_ptr->get_overwriting_action(); if(!tmp) throw WEBDAR_BUG; ret->add(*tmp); ++it; } return ret; } unique_ptr html_form_overwrite_chain_action::provide_object_of_type(unsigned int num, const string & context, string & changed_event) const { unique_ptr ret; unique_ptr obj; switch(num) { case 0: obj.reset(new (nothrow) html_form_overwrite_action("")); if(!obj) throw exception_memory(); ret.reset(new (nothrow) html_form_overwrite_chain_cell(obj)); if(!ret) throw exception_memory(); changed_event = html_form_overwrite_chain_cell::changed; break; default: throw WEBDAR_BUG; } return ret; } void html_form_overwrite_chain_action::on_event(const string & event_name) { if(event_name == html_form_dynamic_table::changed) act(changed); else throw WEBDAR_BUG; } webdar-1.0.0/src/date.cpp0000644000175000017520000001033614773727241012130 00000000000000/*********************************************************************/ // webdar - a web server and interface program to libdar // Copyright (C) 2013-2025 Denis Corbin // // This file is part of Webdar // // Webdar is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // Webdar is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Webdar. If not, see // //---- // to contact the author: dar.linux@free.fr /*********************************************************************/ // C system header files #include "my_config.h" extern "C" { #if HAVE_ERRNO_H #include #endif } // C++ system header files // webdar headers #include "exceptions.hpp" #include "webdar_tools.hpp" // #include "date.hpp" using namespace std; static string convert_to_string_two_digits(int val); date::date() { time_t tmp; (void)time(&tmp); if(tmp == ((time_t) -1)) throw exception_system("Error met while trying to get current time", errno); if(gmtime_r(&tmp, &val) == nullptr) throw exception_system("Error met while trying to brake down time", errno); } date::date(const string & when) { val.tm_sec = val.tm_min = val.tm_hour = 0; val.tm_mday = val.tm_mon = val.tm_year = 0; val.tm_wday = val.tm_yday = val.tm_isdst = 0; if(strptime(when.c_str(), "%a, %d %b %Y %H:%M:%S GMT", &val) == nullptr) if(strptime(when.c_str(), "%A, %d-%b-%y %H:%M:%S GMT", &val) == nullptr) if(strptime(when.c_str(), "%a %b %d %H:%M:%S %Y", &val) == nullptr) throw exception_range("Badly formated date"); } string date::get_canonical_format() const { string ret; switch(val.tm_wday) { case 0: ret += "Sun"; break; case 1: ret += "Mon"; break; case 2: ret += "Tue"; break; case 3: ret += "Wed"; break; case 4: ret += "Thu"; break; case 5: ret += "Fri"; break; case 6: ret += "Sat"; break; default: throw WEBDAR_BUG; } ret += ", "; ret += convert_to_string_two_digits(val.tm_mday); ret += " "; switch(val.tm_mon) { case 0: ret += "Jan"; break; case 1: ret += "Feb"; break; case 2: ret += "Jan"; break; case 3: ret += "Mar"; break; case 4: ret += "Apr"; break; case 5: ret += "May"; break; case 6: ret += "Jun"; break; case 7: ret += "Jul"; break; case 8: ret += "Aug"; break; case 9: ret += "Sep"; break; case 10: ret += "Oct"; break; case 11: ret += "Nov"; break; case 12: ret += "Dec"; break; default: throw WEBDAR_BUG; } ret += " "; ret += webdar_tools_convert_to_string(val.tm_year + 1900); ret += " "; ret += convert_to_string_two_digits(val.tm_hour); ret += ":"; ret += convert_to_string_two_digits(val.tm_min); ret += ":"; ret += convert_to_string_two_digits(val.tm_sec); ret += " GMT"; return ret; } bool date::operator < (const date & ref) const { bool res; if(webdar_tools_semi_less_than(val.tm_year, ref.val.tm_year, res)) return res; if(webdar_tools_semi_less_than(val.tm_yday, ref.val.tm_yday, res)) return res; if(webdar_tools_semi_less_than(val.tm_hour, ref.val.tm_hour, res)) return res; if(webdar_tools_semi_less_than(val.tm_min, ref.val.tm_min, res)) return res; if(webdar_tools_semi_less_than(val.tm_sec, ref.val.tm_sec, res)) return res; return false; // this is equal to ref } bool date::operator == (const date & ref) const { struct tm c1 = val; struct tm c2 = ref.val; int d1 = mktime(&c1); int d2 = mktime(&c2); return d1 == d2; // yes, d1 or d2 may be set to -1 in case of error } static string convert_to_string_two_digits(int val) { string ret; if(val > 99 || val < 0) throw WEBDAR_BUG; if(val < 10) ret += "0"; ret += webdar_tools_convert_to_string(val); return ret; } webdar-1.0.0/src/tokens.cpp0000644000175000017520000000645414773727241012524 00000000000000/*********************************************************************/ // webdar - a web server and interface program to libdar // Copyright (C) 2013-2025 Denis Corbin // // This file is part of Webdar // // Webdar is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // Webdar is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Webdar. If not, see // //---- // to contact the author: dar.linux@free.fr /*********************************************************************/ #include "tokens.hpp" const char* EXTENSION = "dar"; const char* HDR_CONTENT_LENGTH = "Content-Length"; const char* HDR_IF_MODIFIED_SINCE = "If-Modified-Since"; const char* HDR_LAST_MODIFIED = "Last-Modified"; const char* HDR_CONTENT_TYPE = "Content-Type"; const char* HDR_DATE = "Date"; const char* HDR_EXPIRES = "Expires"; const char* HDR_SERVER = "Server"; const char* HDR_WWW_AUTHENTICATE = "WWW-Authenticate"; const char* HDR_SET_COOKIE = "Set-Cookie"; const char* HDR_COOKIE = "Cookie"; const char* HDR_AUTHORIZATION = "Authorization"; const char* HDR_LOCATION = "Location"; // const char* VAL_CONTENT_TYPE_FORM = "application/x-www-form-urlencoded"; // const char* COLOR_BACK = "rgb(221, 221, 255)"; const char* COLOR_TEXT = "rgb(42, 0, 100)"; const char* COLOR_PADBACK = "rgb(10, 0, 30)"; const char* COLOR_PADFRONT = "rgb(200,200,255)"; const char* COLOR_PADBORD = "back"; const char* COLOR_MENU_FRONT_ON = "black"; const char* COLOR_MENU_FRONT_OFF = "black"; const char* COLOR_MENU_FRONT_GREY = "rgb(0,0,100)"; const char* COLOR_MENU_BACK_OFF = "rgb(0,0,150)"; const char* COLOR_MENU_BACK_ON = "rgb(200,150,150)"; const char* COLOR_MENU_BACK_GREY = "rgb(240,240,255)"; const char* COLOR_MENU_FRONT_HOVER_ON = "purple"; const char* COLOR_MENU_FRONT_HOVER_OFF = "purple"; const char* COLOR_MENU_FRONT_HOVER_GREY = "purple"; const char* COLOR_MENU_FRONT_ACTIVE_ON = "red"; const char* COLOR_MENU_FRONT_ACTIVE_OFF = "red"; const char* COLOR_MENU_FRONT_ACTIVE_GREY = "blue"; // a supprimer des que possible (3 lignes) const char* COLOR_MENU_BORDER_ON = "rgb(255,0,0)"; const char* COLOR_MENU_BORDER_OFF = "rgb(0,0,100)"; const char* COLOR_MENU_BORDER_GREY = "rgb(150,150,150)"; const char* COLOR_TOPBAR_BACK = COLOR_BACK; const char* COLOR_ARED = "rgb(255,30,10)"; const char* BLACK = "black"; const char* RED = "red"; const char* WHITE = "white"; const char* GREEN = "rgb(0,150,80)"; const char* COLOR_DAR_GREYBLUE = "rgb(221, 221, 255)"; const char* STATIC_PATH_ID = "st"; // STATIC_PATH_ID's length should be strictly less than the lenght of session_ID, as defined INITIAL_SESSION_ID_WIDTH in session.cpp to avoid collision with session_ID. const char* STATIC_OBJ_LICENSING = "licensing"; const char* STATIC_LOGO = "webdar.jpg"; const char* STATIC_TITLE_LOGO = "webdar_title.jpg"; const char* STATIC_FAVICON = "favicon.jpg"; const libdar::U_I tokens_min_compr_bs = 50*1024; webdar-1.0.0/src/html_form_mask_expression.cpp0000644000175000017520000001642415036424773016475 00000000000000/*********************************************************************/ // webdar - a web server and interface program to libdar // Copyright (C) 2013-2025 Denis Corbin // // This file is part of Webdar // // Webdar is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // Webdar is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Webdar. If not, see // //---- // to contact the author: dar.linux@free.fr /*********************************************************************/ // C system header files #include "my_config.h" extern "C" { } // C++ system header files #include // webdar headers #include "webdar_css_style.hpp" #include "tooltip_messages.hpp" // #include "html_form_mask_expression.hpp" using namespace std; const string html_form_mask_expression::changed = "hfme_changed"; html_form_mask_expression::html_form_mask_expression(const string & subject): sujet(subject), fs(""), mask_type("Mask Type"), // see clear() negate("Negate", html_form_input::check, "", // unckecked (see clear()) "", ""), casesensitivity("Case Sensitive", html_form_input::check, "1", // checked (see clear()) "", ""), mask_expression("Mask Expression", html_form_input::text, "", // (see clear()) "", webdar_css_style::width_100vw), ignore_events(false) { // component configuration mask_type.add_choice(type_glob, "Glob Expression"); mask_type.add_choice(type_regex, "Regular Expression"); init(); } html_form_mask_expression::html_form_mask_expression(const html_form_mask_expression & ref): html_mask(ref), // parent class sujet(ref.sujet), fs(ref.fs), mask_type(ref.mask_type), negate(ref.negate), casesensitivity(ref.casesensitivity), mask_expression(ref.mask_expression) { init(); } void html_form_mask_expression::clear() { mask_type.set_selected_num(0); negate.set_value_as_bool(false); casesensitivity.set_value_as_bool(true); mask_expression.set_value(""); } unique_ptr html_form_mask_expression::get_mask() const { bool neg = negate.get_value_as_bool(); bool casesensit = casesensitivity.get_value_as_bool(); unique_ptr ret; switch(mask_type.get_selected_num()) { case 0: // Glob expr. ret.reset(new (nothrow) libdar::simple_mask(mask_expression.get_value(), casesensit)); break; case 1: // Regex ret.reset(new (nothrow) libdar::regular_mask(mask_expression.get_value(), casesensit)); break; default: throw WEBDAR_BUG; } if(!ret) throw exception_memory(); if(neg) { unique_ptr tmp(new (nothrow) libdar::not_mask(*ret)); if(tmp) { ret.swap(tmp); tmp.reset(); } else throw exception_memory(); } return ret; } void html_form_mask_expression::on_event(const string & event_name) { if(ignore_events) return; if(event_name == html_form_select::changed || event_name == html_form_input::changed) fs.change_label(tell_action()); else throw WEBDAR_BUG; act(changed); } void html_form_mask_expression::load_json(const json & source) { try { unsigned int version; string class_id; json config = unwrap_config_from_json_header(source, version, class_id); if(class_id != myclass_id) throw exception_range(libdar::tools_printf("Unexpected class_id in json data, found %s while expecting %s", class_id.c_str(), myclass_id)); if(version > format_version) throw exception_range(libdar::tools_printf("Json format version too hight for %s, upgrade your webdar software", myclass_id)); ignore_events = true; try { mask_type.set_selected_id_with_warning(config.at(jlabel_mask_type), jlabel_mask_type); negate.set_value_as_bool(config.at(jlabel_negate)); casesensitivity.set_value_as_bool(config.at(jlabel_casesensit)); mask_expression.set_value(config.at(jlabel_expression)); } catch(...) { ignore_events = false; throw; } ignore_events = false; on_event(html_form_select::changed); } catch(json::exception & e) { throw exception_json(libdar::tools_printf("Error loading %s config", myclass_id), e); } } json html_form_mask_expression::save_json() const { json ret; ret[jlabel_mask_type] = mask_type.get_selected_id(); ret[jlabel_negate] = negate.get_value_as_bool(); ret[jlabel_casesensit] = casesensitivity.get_value_as_bool(); ret[jlabel_expression] = mask_expression.get_value(); return wrap_config_with_json_header(format_version, myclass_id, ret); } void html_form_mask_expression:: manually_set_mask_type(const string & mtype) { mask_type.set_selected_id(mtype); } void html_form_mask_expression:: manually_set_negate(bool mode) { negate.set_value_as_bool(mode); } void html_form_mask_expression:: manually_set_casesensitivity(bool mode) { casesensitivity.set_value_as_bool(mode); } void html_form_mask_expression:: manually_set_expression(const string & expr) { mask_expression.set_value(expr); } string html_form_mask_expression::inherited_get_body_part(const chemin & path, const request & req) { return get_body_part_from_all_children(path, req); } void html_form_mask_expression::new_css_library_available() { unique_ptr & csslib = lookup_css_library(); if(!csslib) throw WEBDAR_BUG; webdar_css_style::update_library(*csslib); } void html_form_mask_expression::init() { fs.change_label(tell_action()); // adoption tree fs.adopt(&mask_type); fs.adopt(&negate); fs.adopt(&casesensitivity); fs.adopt(&mask_expression); adopt(&fs); // events mask_type.record_actor_on_event(this, html_form_select::changed); negate.record_actor_on_event(this, html_form_input::changed); casesensitivity.record_actor_on_event(this, html_form_input::changed); mask_expression.record_actor_on_event(this, html_form_input::changed); register_name(changed); // visibity // css stuff fs.add_label_css_class(webdar_css_style::text_bold); // tooltips mask_type.set_tooltip(TOOLTIP_HFME_TYPE); negate.set_tooltip(TOOLTIP_HFME_NEGATE); mask_expression.set_tooltip(TOOLTIP_HFME_EXPRESSION); clear(); } string html_form_mask_expression::tell_action() const { string ret; ret = sujet + " "; if(negate.get_value_as_bool()) ret += "does not match "; else ret += "matches "; switch(mask_type.get_selected_num()) { case 0: ret += "the glob expression "; break; case 1: ret += "the regular expression "; break; default: throw WEBDAR_BUG; } ret += "\"" + mask_expression.get_value() + "\" "; if(casesensitivity.get_value_as_bool()) ret += "(case-sensitive)"; else ret += "(case-INsensitive)"; return ret; } webdar-1.0.0/src/html_tabs.cpp0000644000175000017520000001522714773727241013174 00000000000000/*********************************************************************/ // webdar - a web server and interface program to libdar // Copyright (C) 2013-2025 Denis Corbin // // This file is part of Webdar // // Webdar is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // Webdar is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Webdar. If not, see // //---- // to contact the author: dar.linux@free.fr /*********************************************************************/ // C system header files #include "my_config.h" extern "C" { } // C++ system header files // webdar headers #include "tokens.hpp" #include "webdar_css_style.hpp" // #include "html_tabs.hpp" using namespace std; const char* html_tabs::tab_shape_on = "html_tabs_shapeon"; const char* html_tabs::tab_shape_off = "html_tabs_shapeoff"; const char* html_tabs::menu_bar = "html_tabs_bar"; const char* html_tabs::tab_sep = "html_tabs_sep"; const char* html_tabs::css_content_wrapper = "html_tabs_wrapper"; html_tabs::html_tabs(): current_mode(1) // to allow change to take place upon mode change { // adoption tree adopt(&tab_bar); adopt(&line); content_wrapper.adopt(&content); adopt(&content_wrapper); // css tab_bar.add_css_class(menu_bar); line.add_css_class(css_content_wrapper); content_wrapper.add_css_class(css_content_wrapper); } html_tabs::~html_tabs() { deque::iterator it = tabs.begin(); while(it != tabs.end()) { if(*it != nullptr) { delete *it; *it = nullptr; } ++it; } } void html_tabs::add_tab(const string & label, const string & tag) { unsigned int tab_num = tabs.size(); string event_name = to_string(tab_num); html_button* tmp = new (nothrow) html_button(label, event_name); if(tmp == nullptr) throw exception_memory(); tabs.push_back(tmp); tab_bar.adopt(tmp); tmp->record_actor_on_event(this, event_name); set_css_off(*tmp); try { map::iterator it = corres.find(event_name); if(it != corres.end()) throw WEBDAR_BUG; // event name already exisits!?! corres[event_name] = tab_num; content.add_section(tag, label); if(content.size() == 1) // by default no section is active content.set_active_section(0); // we activate the first tab content at its creation unsigned int cur = content.get_active_section(); set_mode(content.size() - 1); // set css stuff to the new tab set_mode(cur); // keep back the same active tab } catch(...) { if(tabs.back() != nullptr) delete tabs.back(); tabs.pop_back(); map::iterator it = corres.find(event_name); if(it != corres.end()) corres.erase(it); throw; } my_body_part_has_changed(); } void html_tabs::on_event(const string & event_name) { map::iterator it = corres.find(event_name); if(it == corres.end()) throw WEBDAR_BUG; set_mode(it->second); } void html_tabs::adopt_in_section(const string & tag, body_builder *obj) { content.adopt_in_section(tag, obj); } void html_tabs::adopt_in_section(signed int num, body_builder* obj) { content.adopt_in_section(num, obj); } string html_tabs::inherited_get_body_part(const chemin & path, const request & req) { return get_body_part_from_all_children(path, req); } void html_tabs::new_css_library_available() { unique_ptr & csslib = lookup_css_library(); if(!csslib) throw WEBDAR_BUG; webdar_css_style::update_library(*csslib); if(!csslib->class_exists(tab_shape_on)) { css tmp; css_class tmp_class; // the tab / content separator tmp.css_border_width(css::bd_bottom, css::bd_thin); tmp.css_border_color(css::bd_bottom, COLOR_MENU_BORDER_OFF); tmp.css_border_style(css::bd_bottom, css::bd_solid); csslib->add(tab_sep, tmp); // the unselected tab (not their text) tmp_class = webdar_css_style::get_css_class(webdar_css_style::btn_off); tmp = tmp_class.get_value(); tmp.css_float(css::fl_left); tmp.css_margin_top("0.2em"); tmp.css_margin_right("0.2em"); tmp.css_margin_left("0.2em"); tmp.css_margin_bottom("0"); tmp.css_corner_radius("20%", "20%", "0", "0"); tmp.css_height("4em", false); tmp_class.change_name(tab_shape_off); tmp_class.set_value(tmp); csslib->add(tmp_class); // the selected tab (not their text) tmp_class = webdar_css_style::get_css_class(webdar_css_style::btn_on); tmp = tmp_class.get_value(); tmp.css_float(css::fl_left); tmp.css_margin_top("0.2em"); tmp.css_margin_right("0.2em"); tmp.css_margin_left("0.2em"); tmp.css_margin_bottom("0"); tmp.css_corner_radius("20%", "20%", "0", "0"); tmp.css_height("4em", false); tmp_class.change_name(tab_shape_on); tmp_class.set_value(tmp); csslib->add(tmp_class); // the tab bar tmp.clear(); tmp.css_width("100%", true); csslib->add(menu_bar, tmp); tmp.clear(); tmp.css_width("100%", false); tmp.css_box_sizing(css::bx_border); csslib->add(css_content_wrapper, tmp); } } void html_tabs::set_mode(unsigned int mode) { if(mode == current_mode) return; // setting currently active tab to non-active if(current_mode < tabs.size()) { if(tabs.size() < content.size()) throw WEBDAR_BUG; if(tabs[current_mode] == nullptr) throw WEBDAR_BUG; set_css_off(*(tabs[current_mode])); } else { if(mode != 0 || current_mode != 1) throw WEBDAR_BUG; // else this is the initialization context } current_mode = mode; // setting the new active tab to active if(mode >= tabs.size()) throw WEBDAR_BUG; if(tabs[mode] == nullptr) throw WEBDAR_BUG; set_css_on(*(tabs[mode])); content.set_active_section(mode); // html_aiguille::set_active_section will trigger my_body_part_has_changed() } void html_tabs::set_css_on(html_button & ref) { ref.clear_css_classes(); ref.add_css_class(tab_shape_on); ref.url_clear_css_classes(); ref.url_add_css_class(webdar_css_style::url_selected); ref.add_css_class(webdar_css_style::width_8em); } void html_tabs::set_css_off(html_button & ref) { ref.clear_css_classes(); ref.add_css_class(tab_shape_off); ref.url_clear_css_classes(); ref.url_add_css_class(webdar_css_style::url_normal); ref.add_css_class(webdar_css_style::width_8em); } webdar-1.0.0/src/html_tabs.hpp0000644000175000017520000000737314773727241013204 00000000000000/*********************************************************************/ // webdar - a web server and interface program to libdar // Copyright (C) 2013-2025 Denis Corbin // // This file is part of Webdar // // Webdar is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // Webdar is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Webdar. If not, see // //---- // to contact the author: dar.linux@free.fr /*********************************************************************/ #ifndef HTML_TABS_HPP #define HTML_TABS_HPP // C system header files #include "my_config.h" extern "C" { } // C++ system header files #include #include // webdar headers #include "body_builder.hpp" #include "html_div.hpp" #include "html_button.hpp" #include "html_aiguille.hpp" #include "css.hpp" #include "html_hr.hpp" /// class html_tabs implements tabs /// this class implements tabs. Tabs are created /// calling add_tab(). Below the tab bar /// the rest of the area shows the object adopted for the /// selected tab. A new tab must first be created before /// being able to adopt a new child. class html_tabs: public body_builder, public actor { public: html_tabs(); html_tabs(const html_tabs & ref) = delete; html_tabs(html_tabs && ref) noexcept = delete; html_tabs & operator = (const html_tabs & ref) = delete; html_tabs & operator = (html_tabs && ref) noexcept = delete; virtual ~html_tabs(); /// add a new tab to the tab bar /// \param[in] label shows to the user and is translatable /// \param[in] tag is not translatable and does not show to the user /// but can be used programmatically (see adopt_in_section() below) void add_tab(const std::string & label, const std::string & tag); /// inherited from actor class virtual void on_event(const std::string & event_name) override; /// adopt_in_section replaces body_builder::adopt() void adopt_in_section(const std::string & tag, body_builder *obj); /// adopt in section replaces body_builder::adopt() void adopt_in_section(signed int num, body_builder* obj); protected: /// inherited from body_builder virtual std::string inherited_get_body_part(const chemin & path, const request & req) override; /// inherited from body_builder virtual void new_css_library_available() override; /// hiding adopt() as it is replaced by adopt_in_section() using body_builder::adopt; private: std::map corres; ///< link eventname to tab number std::deque tabs; /// adoption tree /// /** /verbatim this (adopter) | +---- tab_bar | | | +--- html_buttons in tabs deque | +---- line | +---- content_wrapper | +---- content | +--- adopted_in_section() objects /endverbatim **/ html_div tab_bar; html_hr line; html_div content_wrapper; html_aiguille content; unsigned int current_mode; void set_css_on(html_button & ref); void set_css_off(html_button & ref); void set_mode(unsigned int mode); static const char* tab_shape_on; static const char* tab_shape_off; static const char* menu_bar; static const char* tab_sep; static const char* css_content_wrapper; }; #endif webdar-1.0.0/src/reference.hpp0000644000175000017520000001022114773727241013147 00000000000000/*********************************************************************/ // webdar - a web server and interface program to libdar // Copyright (C) 2013-2025 Denis Corbin // // This file is part of Webdar // // Webdar is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // Webdar is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Webdar. If not, see // //---- // to contact the author: dar.linux@free.fr /*********************************************************************/ #ifndef REFERENCE_HPP #define REFERENCE_HPP // C system header files #include "my_config.h" extern "C" { } // C++ system header files #include #include // webdar headers /// class reference gives a mean to link objects by a peering method /// it handles object destruction and updates all existing peers accordingly /// main use is for inherited classes needing link between objects of the same /// class or between objects of different classes (shared implementation for those /// uses cases). class reference { public: /// usual constructor reference() { reset(); }; /// copy constructor /// \note the new object does not keep any peer that the copied object could have reference(const reference & ref) { reset(); }; /// move constructor (only operational for objects without peering) /// \note if a real implementation is needed, care should be taken to reconstruct /// any existing peering with the new address of this moved object reference(reference && ref) noexcept(false); /// assignment operator (only operational for objects without peering) /// \note see the note of the copy constructor reference & operator = (const reference & ref); /// move assigment operator /// \see note the of the move constructor reference & operator = (reference && ref) noexcept(false); /// destructor virtual ~reference() { shut_all_peerings(); }; /// method used to create a relation between two objects /// \param[in] obj must point to valid/existing object of class reference /// or inherited class. /// \note the relation is symetrical [a.peer_with(&b) is the same /// as b.peer_with(&a)]. The relation ends when one or the other object /// is destroyed. The other object is then notified of this event by /// a call to its broken_peering_from() method void peer_with(reference *obj); /// break the peering with the object given as argument void break_peer_with(reference *obj); /// whether a peering exists with that object bool is_peer(reference *obj) const { return peers.find(obj) != peers.end(); }; /// whether the current object has peering bool is_empty() const { return peers.empty(); }; /// the number of peers unsigned int size() const { return peers.size(); }; protected: /// to be informed when a peer has broke the peering with me virtual void broken_peering_from(reference *obj) {}; /// reset the peers reading void reset_read_peers() const { next_to_read = peers.begin(); }; /// provide the next peer /// /// \param[in] peer is the address of the next peer upon successful call /// \return true if a next peer exists, false else in that case /// the argument is undefined bool read_next_peer(reference * & peer) const; private: mutable std::set::iterator next_to_read; ///< pointer to the next peer to read from the list std::set peers; ///< list of peers void reset(); ///< clear object status (ignoring possibily existing peers) void shut_all_peerings(); ///< break link with all peers void erase_with_coherence(reference* ptr); ///< erase an object from peers but take cares that next_to_read stays valid }; #endif webdar-1.0.0/src/html_overwrite_action.hpp0000644000175000017520000000414414775733153015630 00000000000000/*********************************************************************/ // webdar - a web server and interface program to libdar // Copyright (C) 2013-2025 Denis Corbin // // This file is part of Webdar // // Webdar is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // Webdar is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Webdar. If not, see // //---- // to contact the author: dar.linux@free.fr /*********************************************************************/ #ifndef HTML_OVERWRITE_ACTION_HPP #define HTML_OVERWRITE_ACTION_HPP // C system header files #include "my_config.h" extern "C" { } // C++ system header files #include // webdar headers #include "html_div.hpp" /// html component used for constant actions in overwriting policies /// \note this is the common ancestor of all html overwrite policy components /// and is a pure virtual class. It is not a _form_ related class as is /// html_form_overwrite_action which by the way is a fully implemented child class /// of this class. class html_overwrite_action : public html_div { public: html_overwrite_action() {}; html_overwrite_action(const html_overwrite_action & ref) = delete; html_overwrite_action(html_overwrite_action && ref) noexcept = delete; html_overwrite_action & operator = (const html_overwrite_action & ref) = delete; html_overwrite_action & operator = (html_overwrite_action && ref) noexcept = delete; ~html_overwrite_action() = default; /// obtain the crit_action object for libdar option virtual std::unique_ptr get_overwriting_action() const = 0; }; #endif webdar-1.0.0/src/archive_test.hpp0000644000175000017520000000417415024332774013674 00000000000000/*********************************************************************/ // webdar - a web server and interface program to libdar // Copyright (C) 2013-2025 Denis Corbin // // This file is part of Webdar // // Webdar is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // Webdar is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Webdar. If not, see // //---- // to contact the author: dar.linux@free.fr /*********************************************************************/ #ifndef ARCHIVE_TEST_HPP #define ARCHIVE_TEST_HPP // C system header files #include "my_config.h" extern "C" { } // C++ system header files #include #include // webdar headers #include "html_web_user_interaction.hpp" #include "saisie.hpp" /// class archive_test wraps libdar archive testing operation in a dedicated thread class archive_test : public libthreadar::thread_signal { public: archive_test(); archive_test(const archive_test & ref) = delete; archive_test(archive_test && ref) noexcept = default; archive_test & operator = (const archive_test & ref) = delete; archive_test & operator = (archive_test && ref) noexcept = default; ~archive_test() { cancel(); join(); }; void set_user_interaction(const std::shared_ptr ref) { ui = ref; }; void set_parametrage(const saisie* x_param) { param = x_param; }; protected: /// inherited from class thread virtual void inherited_run() override; /// inherited from libthreadar::thread virtual void signaled_inherited_cancel() override; private: const saisie* param; std::shared_ptr ui; }; #endif webdar-1.0.0/src/saisie.hpp0000644000175000017520000002524714777743742012514 00000000000000/*********************************************************************/ // webdar - a web server and interface program to libdar // Copyright (C) 2013-2025 Denis Corbin // // This file is part of Webdar // // Webdar is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // Webdar is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Webdar. If not, see // //---- // to contact the author: dar.linux@free.fr /*********************************************************************/ #ifndef SAISIE_HPP #define SAISIE_HPP // C system header files #include "my_config.h" extern "C" { } // C++ system header files #include // webdar headers #include "html_page.hpp" #include "html_menu.hpp" #include "html_aiguille.hpp" #include "html_div.hpp" #include "events.hpp" #include "html_yes_no_box.hpp" #include "html_options_read.hpp" #include "html_options_test.hpp" #include "html_archive_read.hpp" #include "html_archive_extract.hpp" #include "html_archive_create.hpp" #include "html_archive_isolate.hpp" #include "html_archive_merge.hpp" #include "html_archive_repair.hpp" #include "html_archive_compare.hpp" #include "html_double_button.hpp" #include "html_double_button.hpp" #include "html_derouleur.hpp" #include "html_demo.hpp" #include "html_disconnect.hpp" #include "html_options_list.hpp" #include "bibliotheque.hpp" #include "html_bibliotheque.hpp" #include "html_fichier.hpp" #include "html_image.hpp" /// class saisie /// defines the web "pages" when no operation is /// running in the current session. ///- on the left a menu 'choices' that triggers 'this' to modify the middle and top area ///- on the right a html_div right_pan contains two main components, archive_show on top /// and select on the bottom ///- 'archive_show' let the user define the archive to read /// for isolation, creation, merging, repairing archive_show is hidden ///- just below and beside the menu, an html_aiguille "select" /// shows the different "pages" for parameters and options depending on the selection /// action /// /// \note the downloading process is the following: this object as first to be set set_data_place() /// Upon download event from html_bibliotheque field (h_biblio), which triggers the browser to save /// to file the body of the next http response, the saisie object stores to the provided html_fichier /// by mean of set_data_place() the content of the bibliotheque (field biblio) as json file and triggers /// the event_download event (which is registered by the user_interface class, mainly). /// /** \verbatim +-------------------------------+ | disco(html_disconnect) | +---------+---------------------+ | choices | right_pan | | (menu) |+-------------------+| | ||archive_show || | ||(for read actions) || | |+-------------------+| | |+-------------------+| | ||select || | ||(a page for each || | || action) || | || || | |+-------------------+| +---------+---------------------+ \endverbatim **/ class saisie : public html_page, public actor, public events { public: /// available event for that class static const std::string event_closing; static const std::string event_restore; static const std::string event_compare; static const std::string event_test; static const std::string event_list; static const std::string event_summary; static const std::string event_create; static const std::string event_isolate; static const std::string event_merge; static const std::string event_repair; static const std::string changed_session_name; static const std::string event_disconn; static const std::string event_download; /// constructor saisie(); saisie(const saisie & ref) = delete; saisie(saisie && ref) noexcept = delete; saisie & operator = (const saisie & ref) = delete; saisie & operator = (saisie && ref) noexcept = delete; ~saisie() = default; /// inherited from actor virtual void on_event(const std::string & event_name) override; // list of field available to run libdar // reading parameters std::string get_archive_path() const; std::string get_archive_basename() const; libdar::archive_options_read get_read_options(std::shared_ptr dialog) const; // common parameter to diff/create/restore/merge const std::string & get_fs_root() const; // extraction parameters const libdar::archive_options_extract get_extraction_options() const; // comparison parameters const libdar::archive_options_diff get_comparison_options() const; // testing options const libdar::archive_options_test get_testing_options() const; // create options libdar::archive_options_create get_creating_options(std::shared_ptr dialog) const; // isolate options const std::string & get_isolating_path() const { return isolate.get_archive_path(); }; const std::string & get_isolating_basename() const { return isolate.get_archive_basename(); }; libdar::archive_options_isolate get_isolating_options(std::shared_ptr dialog) const; // merge options const std::string & get_merge_path() const { return merge.get_archive_path(); }; const std::string & get_merge_basename() const { return merge.get_archive_basename(); }; libdar::archive_options_merge get_merging_options(std::shared_ptr dialog) const; // repair options std::string get_repairing_path() const { return repair.get_archive_path(); }; std::string get_repairing_basename() const { return repair.get_archive_basename(); }; libdar::archive_options_repair get_repairing_options(std::shared_ptr dialog) const; // listing or archive summary bool do_we_list() const; /// defines the name of the session /// /// \note this call does not trigger any event void set_session_name(const std::string & name) { session_name.set_value(name); act(changed_session_name); }; /// get the current session name std::string get_session_name() const { return session_name.get_value(); }; /// define the username that the current session is owned by void set_username(const std::string & username) { disco.set_username(username); }; /// define the location where to drop data content before triggering the event_download void set_data_place(std::shared_ptr & ref) { to_download = ref; }; protected: /// inherited from body_builder virtual std::string inherited_get_body_part(const chemin & path, const request & req) override; // inherited from body_builder virtual void new_css_library_available() override; private: enum { st_idle, ///< user did not click any action button, or action has completed st_restore, ///< user clicked on the restore button st_compare, ///< user clicked on the compare button st_test, ///< user clicked on the test button st_list, ///< user clicked on the list button with list options set st_summary, ///< user clicked on the list button with summary options set st_create, ///< user clicked on the create button st_isolate, ///< user clicked on the isolate button st_merge, ///< user clicked on the merge button st_repair ///< user clicked in the repair button } status; ///< status is used to determine which field to user to provide information toward libdar std::string default_biblio_path; ///< default path where to fetch and store the bibliotheque (~/.wedarrc) std::shared_ptr biblio; ///< the stored configuration elements (given access to 'parametrage') html_menu choice; ///< left main menu html_div right_pan; ///< holds all that is beside main menu /// show archive zone (middle top) html_archive_read archread; ///< the archive to operate on (reading) // select zone html_aiguille select; ///< middle center zone, containing the different pages according to "choice" value // the different sub pages contained by "select" and shown depending on choice's value html_div div_about; html_div around_licensing; html_static_url licensing; html_image webdar_logo; html_form_input session_name; html_form_fieldset about_fs; html_form about_form; html_double_button show_demo; html_demo demo; // html_archive_extract extract; html_double_button go_extract; // html_archive_compare compare; html_double_button go_compare; // html_derouleur test_params; guichet guichet_test; std::shared_ptr test; html_double_button go_test; // html_options_list list_or_summ; html_double_button go_list; // html_archive_create create; html_double_button go_create; // html_archive_isolate isolate; html_double_button go_isolate; // html_archive_merge merge; html_double_button go_merge; // html_archive_repair repair; html_double_button go_repair; // std::unique_ptr h_biblio; // need a pointer as the bibliotheque object is needed to construct html_bibliotheque // html_yes_no_box close; // html_disconnect disco; // the pointed to object is not adopted by this, but just filled with data (json bibliotheque config) std::shared_ptr to_download; static const std::string css_class_text; static const std::string menu_main; static const std::string menu_restore; static const std::string menu_compare; static const std::string menu_test; static const std::string menu_list; static const std::string menu_create; static const std::string menu_isolate; static const std::string menu_merge; static const std::string menu_repair; static const std::string menu_biblio; static const std::string menu_sessions; static const std::string menu_close; static const std::string css_class_logo; static const std::string css_class_margin; static const std::string css_class_choice; static const std::string css_class_license; static const std::string css_class_rightpan; static const std::string css_class_float_clear; static const std::string event_demo; }; #endif webdar-1.0.0/src/html_archive_repair.cpp0000644000175000017520000001324215036520052015201 00000000000000/*********************************************************************/ // webdar - a web server and interface program to libdar // Copyright (C) 2013-2025 Denis Corbin // // This file is part of Webdar // // Webdar is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // Webdar is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Webdar. If not, see // //---- // to contact the author: dar.linux@free.fr /*********************************************************************/ // C system header files #include "my_config.h" extern "C" { } // C++ system header files // webdar headers #include "webdar_css_style.hpp" #include "tooltip_messages.hpp" // #include "html_archive_repair.hpp" using namespace std; html_archive_repair::html_archive_repair(): repair_dest("Where to create the repaired backup", "/", "", webdar_css_style::width_100vw, "Select path where will be created the repaired backup"), basename("Repaired backup basename", html_form_input::text, "", "", webdar_css_style::width_100vw_3em), repair_fs(""), repair_form("Update"), need_entrepot_update(false) { // components initialization static const char* sect_repair = "repair"; static const char* sect_options = "options"; #ifdef LIBTHREADAR_STACK_FEATURE set_stack_size(DEFAULT_STACK_SIZE); #endif opt_repair.reset(new (nothrow) html_options_repair()); if(! opt_repair) throw exception_memory(); deroule.add_section(sect_repair, "Repairing Parameters"); deroule.add_section(sect_options, "Repairing Options"); deroule.set_active_section(0); repair_dest.set_select_mode(html_form_input_file::select_dir); repair_dest.set_can_create_dir(true); if(repoxfer.get_html_user_interaction()) repoxfer.get_html_user_interaction()->auto_hide(true, false); else throw WEBDAR_BUG; // adoption tree repair_fs.adopt(&repair_dest); repair_fs.adopt(&basename); repair_form.adopt(&repair_fs); deroule.adopt_in_section(sect_repair, &repair_form); deroule.adopt_in_section(sect_options, &guichet_opt_repair); adopt(&deroule); adopt(&repoxfer); // events opt_repair->record_actor_on_event(this, html_options_repair::entrepot_changed); opt_repair->record_actor_on_event(this, html_options_repair::landing_path_changed); basename.record_actor_on_event(this, html_form_input::changed); // visibility repoxfer.set_visible(false); // css webdar_css_style::normal_button(deroule, true); // tooltips repair_dest.set_tooltip(TOOLTIP_HAR_SAUV_PATH); basename.set_tooltip(TOOLTIP_HAR_BASENAME); } const string & html_archive_repair::get_archive_basename() const { if(basename.get_value().empty()) { const_cast(this)->basename.box_set_css_class(webdar_css_style::red_border); throw exception_range("Archive basename cannot be an empty string"); } return basename.get_value(); } void html_archive_repair::set_biblio(const shared_ptr & ptr) { opt_repair->set_biblio(ptr); guichet_opt_repair.set_child(ptr, bibliotheque::confrepair, opt_repair, false); if(ptr->has_config(bibliotheque::confrepair, bibliotheque::default_config_name)) { try { guichet_opt_repair.load_from_bibliotheque(bibliotheque::default_config_name); } catch(...) { // ignore exception here, as this is called from constructor // of the session components and nothing is yet available to // display execeptions messages (due to old config in configuration file // or corrupted configuration file we read from) // The consequence is that we have a cleared configuration: guichet_opt_repair.clear_json(); } } } void html_archive_repair::on_event(const string & event_name) { if(event_name == html_options_repair::entrepot_changed) { need_entrepot_update = true; } else if(event_name == html_options_repair::landing_path_changed) { repair_dest.set_value(opt_repair->get_landing_path()); } else if(event_name == html_form_input::changed) { if(basename.get_value().empty()) basename.box_set_css_class(webdar_css_style::red_border); else basename.box_set_css_class(""); } else throw WEBDAR_BUG; } string html_archive_repair::inherited_get_body_part(const chemin & path, const request & req) { if(need_entrepot_update) update_entrepot(); return get_body_part_from_all_children(path, req); } void html_archive_repair::new_css_library_available() { unique_ptr & csslib = lookup_css_library(); if(!csslib) throw WEBDAR_BUG; webdar_css_style::update_library(*csslib); } void html_archive_repair::inherited_run() { shared_ptr ptr(repoxfer.get_html_user_interaction()); if(!ptr) throw WEBDAR_BUG; repair_dest.set_entrepot(opt_repair->get_entrepot(ptr)); } void html_archive_repair::signaled_inherited_cancel() { pthread_t libdar_tid; libdar::thread_cancellation th; if(is_running(libdar_tid)) th.cancel(libdar_tid, true, 0); } void html_archive_repair::update_entrepot() { if(is_running()) throw WEBDAR_BUG; repoxfer.set_visible(true); need_entrepot_update = false; repoxfer.run_and_control_thread(this); } webdar-1.0.0/src/static_object_builder.cpp0000644000175000017520000001512014773727241015532 00000000000000/*********************************************************************/ // webdar - a web server and interface program to libdar // Copyright (C) 2013-2025 Denis Corbin // // This file is part of Webdar // // Webdar is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // Webdar is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Webdar. If not, see // //---- // to contact the author: dar.linux@free.fr /*********************************************************************/ #include "my_config.h" extern "C" { #if HAVE_STDIO_H #include #endif #if HAVE_SYS_TYPES_H #include #endif #if HAVE_SYS_STAT_H #include #endif #if HAVE_UNISTD_H #include #endif #if HAVE_FCNTL_H #include #endif #if HAVE_STRING_H #include #endif #if HAVE_STDLIB_H #include #endif #if HAVE_ERRNO_H #include #endif } #include "base64.hpp" #define CODE_OK 0 #define CODE_USAGE 1 #define CODE_ERROR 2 #define CODE_FILE_ERR 3 #define BUFSIZE 10240 int usage(char *cmd); int error(char *type); int routine(char *objname, char *type, char *arg); int routine_text(char *objname, char *arg); char *convert_file_to_text(char * filename); unsigned int count_char_to_escape(int fd); int escape_and_copy_from_file_to_string(int fd, char *buffer, unsigned int allocated); int routine_jpeg(char *objname, char *arg); using namespace std; int main(int argc, char *argv[]) { try { if(argc != 4) return usage(argv[0]); else return routine(argv[1], argv[2], argv[3]); } catch(exception_base & e) { fprintf(stderr, "Aborting execution upon exception: %s\n", e.get_message().c_str()); return CODE_ERROR; } } int usage(char *cmd) { fprintf(stderr, "usage: %s \n", cmd); fprintf(stderr, "for type \"text\" the argument is the filename and path to the text file to build the object from\n"); return CODE_USAGE; } int error(char *type) { fprintf(stderr, "unknown type: %s\n", type); return CODE_ERROR; } int routine(char *objname, char *type, char *arg) { if(strcmp(type, "text") == 0) return routine_text(objname, arg); else if(strcmp(type, "jpeg") == 0) return routine_jpeg(objname, arg); else return error(type); } int routine_text(char *objname, char *arg) { char *chaine = convert_file_to_text(arg); if(chaine == NULL) return CODE_FILE_ERR; else { printf("static const char * text_%s = ", objname); printf("\"%s\";\n", chaine); free(chaine); chaine = NULL; printf("static_object_text *obj_%s = new (nothrow) static_object_text(text_%s);\n", objname, objname); printf("if(obj_%s == NULL)\n", objname); printf(" throw exception_memory();\n"); printf("try\n{\n"); printf(" add_object_to_library(%s, obj_%s);\n", objname, objname); printf("}\n"); printf("catch(...)\n{\n"); printf(" delete obj_%s;\n", objname); printf(" obj_%s = NULL;\n", objname); printf("}\n\n"); return CODE_OK; } } char *convert_file_to_text(char * filename) { char *ret = NULL; struct stat buf; if(stat(filename, & buf) != 0) { fprintf(stderr, "Error met while getting file size of %s: %s\n", filename, strerror(errno)); return ret; } else { off_t size = buf.st_size; int fd = open(filename, O_RDONLY); if(fd < 0) { fprintf(stderr, "Error met while reading file %s: %s\n", filename, strerror(errno)); return ret; } else { /* counting the number of char to escape */ size += count_char_to_escape(fd); /* adding space for the null terminator character */ size += 1; if(lseek(fd, SEEK_SET, 0) == 0) { ret = (char *)malloc(size); if(ret != NULL) { unsigned int copied = escape_and_copy_from_file_to_string(fd, ret, size - 1); if(copied < size - 1) fprintf(stderr, "Incoherence between file size and amount of available bytes in file %s\n", filename); ret[copied] = '\0'; /* null terminator */ } } else fprintf(stderr, "Failed seeking to the beginning of file %s\n", filename); close(fd); } } return ret; } unsigned int count_char_to_escape(int fd) { unsigned int count = 0; unsigned int i = 0; unsigned int lu = 0; char buffer[BUFSIZE]; do { lu = read(fd, buffer, BUFSIZE); for(i = 0; i < lu; ++i) { if(buffer[i] == '"' || buffer[i] == '\\') ++count; if(buffer[i] == '\n') count += 3; } } while(lu > 0); return count; } int escape_and_copy_from_file_to_string(int fd, char *buffer, unsigned int allocated) { unsigned int copied = 0; char tmp[BUFSIZE]; ssize_t lu = 0; do { lu = read(fd, tmp, BUFSIZE); if(lu < 0) { if(errno == EAGAIN) lu = 1; /* retrying the copy */ else lu = 0; } else { unsigned int i = 0; while(i < lu && copied < allocated) { if(tmp[i] == '"' || tmp[i] == '\\') buffer[copied++] = '\\'; else if(tmp[i] == '\n') { buffer[copied++] = '\\'; buffer[copied++] = 'n'; buffer[copied++] = '\\'; } buffer[copied++] = tmp[i++]; } } } while(copied < allocated && lu > 0); return copied; } int routine_jpeg(char *objname, char *arg) { int fd = open(arg, O_RDONLY); int ret; if(fd < 0) { cerr << "Error met while reading file " << arg << " : " << strerror(errno) << "endl"; return CODE_FILE_ERR; } base64::decoded_block dec; base64::encoded_block enc; printf("static const char * jpeg_%s = \"", objname); do { ret = read(fd, dec, sizeof(dec)); if(ret > 0) { base64().small_encode(ret, dec, enc); printf("%c%c%c%c", enc[0], enc[1], enc[2], enc[3]); } } while(ret > 0); printf("\";\n"); printf("static_object_jpeg *obj_%s = new (nothrow) static_object_jpeg(jpeg_%s);\n", objname, objname); printf("if(obj_%s == NULL)\n", objname); printf(" throw exception_memory();\n"); printf("try\n{\n"); printf(" add_object_to_library(%s, obj_%s);\n", objname, objname); printf("}\n"); printf("catch(...)\n{\n"); printf(" delete obj_%s;\n", objname); printf(" obj_%s = NULL;\n", objname); printf("}\n\n"); return CODE_OK; } webdar-1.0.0/src/bibliotheque.cpp0000644000175000017520000004437514777453710013702 00000000000000/*********************************************************************/ // webdar - a web server and interface program to libdar // Copyright (C) 2013-2025 Denis Corbin // // This file is part of Webdar // // Webdar is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // Webdar is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Webdar. If not, see // //---- // to contact the author: dar.linux@free.fr /*********************************************************************/ // C system header files #include "my_config.h" extern "C" { } // C++ system header files #include #include #include #include // webdar headers #include "webdar_tools.hpp" // #include "bibliotheque.hpp" using namespace std; string bibliotheque::changed(category cat) { string ret(string(myclass_id) + "::"); switch(cat) { case filefilter: ret += "filefilter"; break; case pathfilter: ret += "pathfilter"; break; case command: ret += "command"; break; case repo: ret += "repo"; break; case compress: ret += "compr"; break; case confsave: ret += "save"; break; case conftest: ret += "test"; break; case confdiff: ret += "diff"; break; case conflist: ret += "list"; break; case confrest: ret += "restore"; break; case confmerge: ret += "merge"; break; case confrepair: ret += "repaor"; break; case confcommon: ret += "common"; break; case slicing: ret += "slicing"; break; case ciphering: ret += "ciphering"; break; case delta_sig: ret += "delta-sig"; break; case over_policy: ret += "over-policy"; break; case confread: ret += "read"; break; case confisolate: ret += "isolate"; break; case EOE: throw WEBDAR_BUG; default: throw WEBDAR_BUG; } return ret; } bibliotheque::category & operator++(bibliotheque::category & cat) { if(cat < bibliotheque::filefilter) throw WEBDAR_BUG; if(cat >= bibliotheque::EOE) throw WEBDAR_BUG; cat = static_cast(cat + 1); return cat; } bibliotheque::bibliotheque() { category cat = filefilter; init(); while(cat != EOE) { register_name(changed(cat)); ++cat; } } void bibliotheque::add_config(category categ, const string & name, const json & config, const using_set & refs) { table::iterator catit; asso::iterator it; coordinates coord(categ, name); if(lookup(categ, name, it, catit)) throw exception_range(libdar::tools_printf("A configuration named %s already exists in that category", name.c_str())); if(catit == content.end()) throw WEBDAR_BUG; try { using_set empty; add_dependency_for(coord, refs); check_against_cyclic_dependencies(coord, empty); } catch(...) { remove_dependency_for(coord); throw; } (catit->second)[name] = linked_config(config); saved = false; act(changed(categ)); } void bibliotheque::add_external_ref_to(category categ, const string & name, const void* from_where) { asso::iterator it; table::iterator catit; coordinates coord(categ, name); map::iterator ut = outside.find(coord); if(!lookup(categ, name, it, catit)) { // problem, the configuration we refer to does not exist! if(ut != outside.end()) throw WEBDAR_BUG; // but an external ref to it already exist! else throw WEBDAR_BUG; // config unknown from external refs datastructure } if(ut != outside.end()) { if(ut->second.find(from_where) != ut->second.end()) throw WEBDAR_BUG; // already referred by the same object/place/ref ut->second.insert(from_where); } else { refs tmp; tmp.insert(from_where); outside[coord] = tmp; } } void bibliotheque::update_config(category categ, const string & name, const json & config, const using_set & refs) { table::iterator catit; asso::iterator it; coordinates coord(categ, name); if(! lookup(categ, name, it, catit)) throw exception_range(libdar::tools_printf("No configuration named %s exists in that category", name.c_str())); try { using_set empty; remove_dependency_for(coord); add_dependency_for(coord, refs); check_against_cyclic_dependencies(coord, empty); } catch(...) { remove_dependency_for(coord); throw; } it->second.config = config; saved = false; act(changed(categ)); } void bibliotheque::delete_config(category categ, const string & name) { table::iterator catit; asso::iterator it; map::iterator outit = outside.find(coordinates(categ, name)); if(! lookup(categ, name, it, catit)) throw exception_range(libdar::tools_printf("No configuration named %s exists in that category", name.c_str())); if(! it->second.dependency.empty()) { string errmsg = libdar::tools_printf("%s configuration named \"%s\" cannot be deleted because it is used by:", category_description(categ, false).c_str(), name.c_str()); for(set::iterator list = it->second.dependency.begin(); list != it->second.dependency.end(); ++list) { if(list != it->second.dependency.begin()) errmsg += ", "; errmsg += libdar::tools_printf(" %s named \"%s\"", category_description(list->cat, false).c_str(), list->confname.c_str()); } throw exception_range(errmsg); } if(outit != outside.end()) // having external references { throw exception_range( libdar::tools_printf("This configuration cannot be deleted, it is used %d time(s) in the user interface (but not used by other configurations)", outit->second.size()) ); } remove_dependency_for(coordinates(categ, name)); catit->second.erase(it); saved = false; act(changed(categ)); } void bibliotheque::delete_external_ref_to(category categ, const string & name, const void* from_where) { coordinates coord(categ, name); map::iterator ut = outside.find(coord); if(ut == outside.end()) throw WEBDAR_BUG; // no ref to this config!!! refs::iterator refit = ut->second.find(from_where); if(refit == ut->second.end()) throw WEBDAR_BUG; // no ref from from_where for this config!!! ut->second.erase(refit); // removing the ref if(ut->second.empty()) // no more ref to this config outside.erase(ut); // removing entry for that config from outside } bool bibliotheque::has_config(category categ, const string & name) const { table::iterator catit; asso::iterator it; return lookup(categ, name, it, catit); } json bibliotheque::fetch_config(category categ, const string & name) const { table::iterator catit; asso::iterator it; if(! lookup(categ, name, it, catit)) throw exception_range(libdar::tools_printf("No configuration named %s exists in that category", name.c_str())); return it->second.config; } string bibliotheque::display_config(category categ, const string & name) const { return fetch_config(categ, name).dump(4); } deque bibliotheque::listing(category categ) const { deque ret; table::const_iterator catit = content.find(categ); if(catit == content.end()) throw WEBDAR_BUG; for(asso::const_iterator it = catit->second.begin(); it != catit->second.end(); ++it) ret.push_back(it->first); return ret; } void bibliotheque::clear() { init(); for(category cat = filefilter; cat != EOE; ++cat) act(changed(cat)); } bool bibliotheque::is_empty() const { bool found = false; category cat = filefilter; map::const_iterator percat; while(cat != EOE && ! found) { percat = content.find(cat); if(percat == content.end()) throw WEBDAR_BUG; if(!percat->second.empty()) found = true; ++cat; } return !found; } void bibliotheque::load_json(const json & source) { unsigned int version; string class_id; json config = unwrap_config_from_json_header(source, version, class_id); string cat_name; category cat; set events_to_fire; asso tmp_map; string config_name; set depend; json tmp_json; json config_json; json used_by; json categories; json globalprop; content.clear(); saved = true; try { if(class_id != myclass_id) throw exception_range(libdar::tools_printf("Unexpected json data: wrong class_id in json header for class %s", myclass_id)); if(version > format_version) throw exception_range(libdar::tools_printf("Version too recent for a %s json version, upgrade webdar your software", myclass_id)); globalprop = config.at(jlabel_globalprop); categories = config.at(jlabel_categprop); autosave = globalprop.at(jlabel_autosave); if(! categories.is_array()) throw exception_range(libdar::tools_printf("Unexpected json data: %s configuration is not an array", myclass_id)); for(json::iterator catit = categories.begin(); catit != categories.end(); ++catit) { if(! catit->is_object()) throw exception_range(libdar::tools_printf("Unexpected json data: %s per category data is not an object", myclass_id)); cat_name = catit->at(category_label); tmp_json = catit->at(asso_label); tmp_map.clear(); if(! tmp_json.is_array() && ! tmp_json.is_null()) throw exception_range(libdar::tools_printf("Unexpected json data: %s list of configuration per category is not an array", myclass_id)); for(json::iterator it = tmp_json.begin(); it != tmp_json.end(); ++it) { config_name = it->at(config_label); config_json = it->at(config_def_label); used_by = it->at(config_depend); if(! config_json.is_object()) throw exception_range("Unexpected json data: component configuration is not an object"); if(! used_by.is_array() && ! used_by.is_null()) throw exception_range("Unexpected json data: component depency list is not a list"); depend.clear(); for(json::iterator usit = used_by.begin(); usit != used_by.end(); ++usit) depend.insert(coordinates(string_to_category(usit->at(category_label)), usit->at(config_label))); tmp_map[config_name] = linked_config(config_json, depend); } cat = string_to_category(cat_name); content[cat] = tmp_map; if(tmp_json.begin() != tmp_json.end()) // non empty definition for that category events_to_fire.insert(cat); } // need to check that all category are present, else add them empty string errmsg; for(int cat = filefilter; cat != EOE; ++cat) if(content.find(static_cast(cat)) == content.end()) // missing category { content[static_cast(cat)] = asso(); errmsg += " " + category_to_string(static_cast(cat)); } for(set::iterator fireit = events_to_fire.begin(); fireit != events_to_fire.end(); ++fireit) act(changed(*fireit)); if(!errmsg.empty()) throw exception_range("The following configuration category were missing and have been reset: " + errmsg); } catch(json::exception & e) { throw exception_json("Error reading configuration from json data", e); } } json bibliotheque::save_json() const { json config; json allcategs; json percat_config; json tmp; json used_by; json item; for(table::const_iterator catit = content.begin(); catit != content.end(); ++catit) { percat_config.clear(); for(asso::const_iterator it = catit->second.begin(); it != catit->second.end(); ++it) { tmp.clear(); tmp[config_label] = it->first; tmp[config_def_label] = it->second.config; used_by.clear(); for(set::const_iterator usit = it->second.dependency.begin(); usit != it->second.dependency.end(); ++usit) { item.clear(); item[category_label] = category_to_string(usit->cat); item[config_label] = usit->confname; used_by.push_back(item); } tmp[config_depend] = used_by; percat_config.push_back(tmp); } tmp.clear(); tmp[category_label] = category_to_string(catit->first); tmp[asso_label] = percat_config; allcategs.push_back(tmp); } config[jlabel_categprop] = allcategs; tmp.clear(); tmp[jlabel_autosave] = autosave; config[jlabel_globalprop] = tmp; saved = true; return wrap_config_with_json_header(format_version, myclass_id, config); } void bibliotheque::init() { for(int cat = filefilter; cat != EOE; ++cat) content[static_cast(cat)] = asso(); //empty asso saved = true; autosave = true; } bool bibliotheque::lookup(category cat, const string & name, asso::iterator & it, table::iterator & catit) const { catit = const_cast(&content)->find(cat); if(catit == content.end()) throw WEBDAR_BUG; it = catit->second.find(name); return it != catit->second.end(); } void bibliotheque::add_dependency_for(coordinates user, const using_set & referred) { asso::iterator it; table::iterator catit; for(set::const_iterator usit = referred.begin(); usit != referred.end(); ++usit) { if(! lookup(usit->cat, usit->confname, it, catit)) throw exception_range(libdar::tools_printf("config %s/%s relies on non-existant %s/%s configuration", category_to_string(user.cat).c_str(), user.confname.c_str(), category_to_string(usit->cat).c_str(), usit->confname.c_str())); it->second.dependency.insert(user); } } void bibliotheque::remove_dependency_for(coordinates user) { for(table::iterator catit = content.begin(); catit != content.end(); ++catit) { for(asso::iterator it = catit->second.begin(); it != catit->second.end(); ++it) it->second.dependency.erase(user); } } bibliotheque::using_set bibliotheque::get_direct_dependencies_of(coordinates user) const { using_set ret; for(table::const_iterator catit = content.begin(); catit != content.end(); ++catit) { for(asso::const_iterator it = catit->second.begin(); it != catit->second.end(); ++it) if(it->second.dependency.find(user) != it->second.dependency.end()) ret.insert(coordinates(catit->first, it->first)); } return ret; } void bibliotheque::check_against_cyclic_dependencies(coordinates source, const set & seen) { using_set next = seen; using_set children = get_direct_dependencies_of(source); if(seen.find(source) != seen.end()) throw exception_range(libdar::tools_printf("Cyclic dependency found, %s/%s depends on itself", category_to_string(source.cat).c_str(), source.confname.c_str())); next.insert(source); for(using_set::iterator it = children.begin(); it != children.end(); ++it) check_against_cyclic_dependencies(*it, next); // recursion } string bibliotheque::category_to_string(category cat) { switch(cat) { case filefilter: return "filefilter"; case pathfilter: return "pathfilter"; case command: return "command"; case repo: return "repo"; case compress: return "compress"; case confsave: return "confsave"; case conftest: return "conftest"; case confdiff: return "confdiff"; case conflist: return "conflist"; case confrest: return "confrest"; case confmerge: return "confmerge"; case confrepair: return "confrepair"; case confcommon: return "confcommon"; case slicing: return "slicing"; case ciphering: return "ciphering"; case delta_sig: return "delta-sig"; case over_policy: return "over-policy"; case confread: return "confread"; case confisolate: return "confisolate"; case EOE: throw WEBDAR_BUG; default: throw WEBDAR_BUG; } } bibliotheque::category bibliotheque::string_to_category(const string & s) { if(s == "filefilter") return filefilter; else if(s == "pathfilter") return pathfilter; else if(s == "command") return command; else if(s == "repo") return repo; else if(s == "compress") return compress; else if(s == "confsave") return confsave; else if(s == "conftest") return conftest; else if(s == "confdiff") return confdiff; else if(s == "conflist") return conflist; else if(s == "confrest") return confrest; else if(s == "confmerge") return confmerge; else if(s == "confrepair") return confrepair; else if(s == "confcommon") return confcommon; else if(s == "slicing") return slicing; else if(s == "ciphering") return ciphering; else if(s == "delta-sig") return delta_sig; else if(s == "over-policy") return over_policy; else if(s == "confread") return confread; else if(s == "confisolate") return confisolate; else throw exception_range(libdar::tools_printf("Unknown category: %s", s.c_str())); } string bibliotheque::category_description(category cat, bool capitalized) { string ret; switch(cat) { case filefilter: ret = "file filters"; break; case pathfilter: ret = "path filters"; break; case command: ret = "shell commands"; break; case repo: ret = "repository options"; break; case compress: ret = "compression options"; break; case confsave: ret = "create options"; break; case conftest: ret = "test options"; break; case confdiff: ret = "compare options"; break; case conflist: ret = "list options"; break; case confrest: ret = "restore options"; break; case confmerge: ret = "merge options"; break; case confrepair: ret = "repair options"; break; case confcommon: ret = "common options"; break; case slicing: ret = "slice options"; break; case ciphering: ret = "cipher options"; break; case delta_sig: ret = "delta signatures"; break; case over_policy: ret = "overwriting policies"; break; case confread: ret = "read options"; break; case confisolate: ret = "isolate options"; break; case EOE: throw WEBDAR_BUG; default: throw WEBDAR_BUG; } if(capitalized) return webdar_tools_capitalize_first_letter_of_words(ret); else return ret; } webdar-1.0.0/src/html_form_fieldset.cpp0000644000175000017520000000350514773727241015061 00000000000000/*********************************************************************/ // webdar - a web server and interface program to libdar // Copyright (C) 2013-2025 Denis Corbin // // This file is part of Webdar // // Webdar is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // Webdar is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Webdar. If not, see // //---- // to contact the author: dar.linux@free.fr /*********************************************************************/ // C system header files #include "my_config.h" extern "C" { } // C++ system header files // webdar headers // #include "html_form_fieldset.hpp" using namespace std; string html_form_fieldset::inherited_get_body_part(const chemin & path, const request & req) { string ret = ""; ret += "
\n"; ret += get_body_part_from_all_children(path, req); ret += "
\n"; return ret; } void html_form_fieldset::has_adopted(body_builder *obj) { if(obj == nullptr) throw WEBDAR_BUG; if(! bounded_anchor.empty()) obj->bind_to_anchor(bounded_anchor); } void html_form_fieldset::update_anchor(const string & val) { bounded_anchor = val; for(unsigned int i = 0; i < size(); ++i) { if((*this)[i] == nullptr) throw WEBDAR_BUG; (*this)[i]->bind_to_anchor(bounded_anchor); } } webdar-1.0.0/src/html_archive_compare.hpp0000644000175000017520000000605414773727241015375 00000000000000/*********************************************************************/ // webdar - a web server and interface program to libdar // Copyright (C) 2013-2025 Denis Corbin // // This file is part of Webdar // // Webdar is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // Webdar is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Webdar. If not, see // //---- // to contact the author: dar.linux@free.fr /*********************************************************************/ #ifndef HTML_ARCHIVE_COMPARE_HPP #define HTML_ARCHIVE_COMPARE_HPP // C system header files #include "my_config.h" extern "C" { } // C++ system header files #include // webdar headers #include "body_builder.hpp" #include "actor.hpp" #include "html_derouleur.hpp" #include "html_form_fieldset.hpp" #include "html_form_input_file.hpp" #include "html_form.hpp" #include "html_options_compare.hpp" #include "guichet.hpp" #include "html_text.hpp" /// html component used to let the user provide parameters for an isolation operation class html_archive_compare: public body_builder, public actor { public: html_archive_compare(); html_archive_compare(const html_archive_compare & ref) = delete; html_archive_compare(html_archive_compare && ref) noexcept = delete; html_archive_compare & operator = (const html_archive_compare & ref) = delete; html_archive_compare & operator = (html_archive_compare && ref) noexcept = delete; ~html_archive_compare() = default; /// mandatory call to invoke ASAP after constructor void set_biblio(const std::shared_ptr & ptr); /// the current fs_root parameter const std::string & get_fs_root() const { return diff_fs_root.get_value(); }; /// gathering options parameter for libdar libdar::archive_options_diff get_options() const; /// inherited from actor virtual void on_event(const std::string & event_name) override; protected: /// inherited from body_builder virtual std::string inherited_get_body_part(const chemin & path, const request & req) override; /// inherited from body_builder virtual void new_css_library_available() override; private: html_derouleur diff_params; html_form_fieldset diff_fs_root_fs; html_form_input_file diff_fs_root; html_form diff_fs_root_form; html_text in_place_msg; guichet guichet_opt_diff; std::shared_ptr opt_diff; static const std::string diff_root_changed; static constexpr const char* css_grey_text = "hac_grey"; }; #endif webdar-1.0.0/src/jsoner.cpp0000644000175000017520000000412414773727241012511 00000000000000/*********************************************************************/ // webdar - a web server and interface program to libdar // Copyright (C) 2013-2025 Denis Corbin // // This file is part of Webdar // // Webdar is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // Webdar is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Webdar. If not, see // //---- // to contact the author: dar.linux@free.fr /*********************************************************************/ // C system header files #include "my_config.h" extern "C" { } // C++ system header files #include // webdar headers // #include "jsoner.hpp" using namespace std; json jsoner::wrap_config_with_json_header(unsigned int version, const string & class_id, const json & config) { json ret; try { ret[jsoner_version_label] = version; ret[jsoner_id_label] = class_id; ret[jsoner_config_label] = config; } catch(json::exception & e) { throw exception_json("wrapping config with json header", e); } return ret; } json jsoner::unwrap_config_from_json_header(const json & source, unsigned int & version, string & class_id) { json ret; string step; try { step = "parsing version information"; version = source.at(jsoner_version_label); step = "parsing id information"; class_id = source.at(jsoner_id_label); step = "parsing config information"; ret = source.at(jsoner_config_label); } catch(json::exception & e) { throw exception_json(string("unwrapping config from json header: ") + step + ": ", e); } return ret; } webdar-1.0.0/src/html_button.hpp0000644000175000017520000001124115036420463013540 00000000000000/*********************************************************************/ // webdar - a web server and interface program to libdar // Copyright (C) 2013-2025 Denis Corbin // // This file is part of Webdar // // Webdar is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // Webdar is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Webdar. If not, see // //---- // to contact the author: dar.linux@free.fr /*********************************************************************/ #ifndef HTML_BUTTON_HPP #define HTML_BUTTON_HPP // C system header files #include "my_config.h" extern "C" { } // C++ system header files #include // webdar headers #include "events.hpp" #include "html_static_url.hpp" #include "html_div.hpp" #include "css_class_group.hpp" /// simple html component providing the usual button feature of GUIs, better using html_double_button instead /// \note upon user 'click' on the button a event is generated that /// can be used for actors that registered to it, to perform some action class html_button : public body_builder, public events { public: html_button(const std::string & x_label, const std::string & x_event_name); html_button(const html_button & ref) = delete; html_button(html_button && ref) noexcept = delete; html_button & operator = (const html_button & ref) = delete; html_button & operator = (html_button && ref) noexcept = delete; ~html_button() = default; /// the inherited add_css_class() applies to the html_div around, this one to the url inside void url_add_css_class(const std::string & name) { inside.add_css_class(name); outside.add_css_class(name); }; /// add a several CSS classes at once for the url inside the button void url_add_css_class(const css_class_group & cg) { inside.add_css_class(cg); outside.add_css_class(cg); }; /// the inherited add_css_class() applies to the html_div around, this one to the url inside void url_remove_css_class(const std::string & name) { inside.remove_css_class(name); outside.remove_css_class(name); }; /// the inherited add_css_class() applies to the html_div around, this one to the url inside void url_clear_css_classes() { inside.clear_css_classes(); css_classes_have_changed(); }; /// the label is the text show for the URL void change_label(const std::string & x_label); const std::string & get_label() const { return label; }; /// get the URL that will lead this button to be clicked std::string get_url() const { return inside.get_url(); }; /// change the name of the event generating by a click on the html_button /// all registered actor are kept on the renamed event void change_event_name_to(const std::string & x_event_name) { rename_name(event_name, x_event_name); event_name = x_event_name; }; /// get the name of the event generated by this object const std::string & get_event_name() const { return event_name; }; /// whether to download or display the URL target void set_download(bool mode) { inside.set_download(mode); }; /// if disabled, the button has no hyperlink to click on void set_enabled(bool val) { reset_adoption_tree(val); }; /// change the filename to create on client/browser side if download is set to true /// \note providing a empty string get to the default behavior (no filename specified in URL) void set_filename(const std::string & name) { inside.set_filename(name); }; /// inherited from body_builder virtual void bind_to_anchor(const std::string & val) override { inside.bind_to_anchor(val); }; protected: /// inherited from body_builder virtual std::string inherited_get_body_part(const chemin & path, const request & req) override; /// inherited from body_builder virtual void path_has_changed() override; /// inherited from body_builder virtual void css_classes_have_changed() override; private: std::string label; ///< what label text has been set with, (html_text does not provide it back) html_div outside; html_text text; html_url inside; std::string event_name; /// reset the adoption tree depending on the enabled mode void reset_adoption_tree(bool enabled); static const std::string action; }; #endif webdar-1.0.0/src/css.cpp0000644000175000017520000004744115035167321011777 00000000000000/*********************************************************************/ // webdar - a web server and interface program to libdar // Copyright (C) 2013-2025 Denis Corbin // // This file is part of Webdar // // Webdar is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // Webdar is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Webdar. If not, see // //---- // to contact the author: dar.linux@free.fr /*********************************************************************/ // C system header files #include "my_config.h" extern "C" { } // C++ system header files // webdar headers #include "exceptions.hpp" #include "webdar_tools.hpp" // #include "css.hpp" using namespace std; void css::update_from(const css & ref) { color.update_from(ref.color); bg_col.update_from(ref.bg_col); bg_img.update_from(ref.bg_img); img_pos.update_from(ref.img_pos); box_shadow.update_from(ref.box_shadow); text_shadow.update_from(ref.text_shadow); box_sizing.update_from(ref.box_sizing); display.update_from(ref.display); margin_top.update_from(ref.margin_top); margin_right.update_from(ref.margin_right); margin_bottom.update_from(ref.margin_bottom); margin_left.update_from(ref.margin_left); height.update_from(ref.height); min_height.update_from(ref.min_height); max_height.update_from(ref.max_height); width.update_from(ref.width); min_width.update_from(ref.min_width); max_width.update_from(ref.max_width); z_index.update_from(ref.z_index); position_type.update_from(ref.position_type); position_top.update_from(ref.position_top); position_left.update_from(ref.position_left); position_bottom.update_from(ref.position_bottom); position_right.update_from(ref.position_right); overflow.update_from(ref.overflow); float_pos.update_from(ref.float_pos); float_clear.update_from(ref.float_clear); opacity.update_from(ref.opacity); padding_top.update_from(ref.padding_top); padding_right.update_from(ref.padding_right); padding_bottom.update_from(ref.padding_bottom); padding_left.update_from(ref.padding_left); font_size.update_from(ref.font_size); font_style.update_from(ref.font_style); font_weight.update_from(ref.font_weight); text_h_align.update_from(ref.text_h_align); text_v_align.update_from(ref.text_v_align); text_deco.update_from(ref.text_deco); border_width.update_from(ref.border_width); border_color.update_from(ref.border_color); border_style.update_from(ref.border_style); corner_radius.update_from(ref.corner_radius); visibility.update_from(ref.visibility); content.update_from(ref.content); transition.update_from(ref.transition); map::const_iterator it = ref.custom_css.begin(); map::iterator mit; while(it != ref.custom_css.end()) { if(! it->second.is_unset()) { mit = custom_css.find(it->first); if(mit == custom_css.end()) // not such property in 'this' { declare_custom_css(it->first); mit = custom_css.find(it->first); if(mit == custom_css.end()) throw WEBDAR_BUG; } mit->second.update_from(it->second); } ++it; } } void css::clear() { color.clear(); bg_col.clear(); bg_img.clear(); img_pos.clear(); box_shadow.clear(); text_shadow.clear(); box_sizing.clear(); display.clear(); margin_top.clear(); margin_right.clear(); margin_bottom.clear(); margin_left.clear(); height.clear(); min_height.clear(); max_height.clear(); width.clear(); min_width.clear(); max_width.clear(); z_index.clear(); position_type.clear(); position_top.clear(); position_left.clear(); position_bottom.clear(); position_right.clear(); overflow.clear(); float_pos.clear(); float_clear.clear(); opacity.clear(); padding_top.clear(); padding_right.clear(); padding_bottom.clear(); padding_left.clear(); font_size.clear(); font_style.clear(); font_weight.clear(); text_h_align.clear(); text_v_align.clear(); text_deco.clear(); border_width.clear(); border_color.clear(); border_style.clear(); corner_radius.clear(); visibility.clear(); content.clear(); transition.clear(); map::iterator it = custom_css.begin(); while(it != custom_css.end()) { it->second.clear(); ++it; } } void css::css_color(const string & col) { color.set_value(string(" color: ") + col + ";"); } void css::css_background_color(const string & col) { bg_col.set_value(string(" background-color: ") + col + ";"); } void css::css_background_image(const string & url, bool repeat_x, bool repeat_y, bool fixed) { string tmp = " background-repeat: "; string val = string(" background-image: url(\"") + url + "\");"; if(repeat_x) if(repeat_y) val += tmp + "repeat;"; else val += tmp + "repeat-x;"; else if(repeat_y) val += tmp + "repeat-y;"; else val += tmp + "no-repeat;"; val += string(" background-attachment: ") + (fixed ? "fixed;" : "scroll;"); bg_img.set_value(val); } void css::css_background_position(const string & x, const string & y) { if(x != "" && y != "") // yes both img_pos.set_value(string(" background-position: ") + x + " " + y + ";"); else img_pos.clear(); } void css::css_box_shadow(const string & x_shift, const string & y_shift, const string & blur_size, const string & color) { box_shadow.set_value(string(" box-shadow: ") + x_shift + " " + y_shift + " " + blur_size + " " + color + ";"); } void css::css_text_shadow(const string & x_shift, const string & y_shift, const string & blur_size, const string & color) { text_shadow.set_value(string(" text-shadow: ") + x_shift + " " + y_shift + " " + blur_size + " " + color + ";"); } void css::css_box_sizing(bx_sizing val) { string tmp; switch(val) { case bx_content: tmp = "content-box"; break; case bx_border: tmp = "border-box"; break; default: throw WEBDAR_BUG; } box_sizing.set_value(string(" box-sizing: ") + tmp + ";"); } void css::css_display(const string & val) { display.set_value(string(" display: ") + val + ";"); } void css::css_margin(const string & all) { css_margin_top(all); css_margin_right(all); css_margin_bottom(all); css_margin_left(all); } void css::css_margin_top(const string & top) { margin_top.set_value(string(" margin-top: ") + top + ";"); } void css::css_margin_right(const string & right) { margin_right.set_value(string(" margin-right: ") + right + ";"); } void css::css_margin_bottom(const string & bottom) { margin_bottom.set_value(string(" margin-bottom: ") + bottom + ";"); } void css::css_margin_left(const string & left) { margin_left.set_value(string(" margin-left: ") + left + ";"); } void css::css_height(const string & val, bool center) { height.set_value(string(" height: ") + val + ";"); if(center) { css_margin_top("auto"); css_margin_bottom("auto"); } } void css::css_min_height(const string & val) { min_height.set_value(string(" min-height: ") + val + ";"); } void css::css_max_height(const string & val) { max_height.set_value(string(" max-height: ") + val + ";"); } void css::css_width(const string & val, bool center) { width.set_value(string(" width: ") + val + ";"); if(center) { css_margin_left("auto"); css_margin_right("auto"); } } void css::css_min_width(const string & val) { min_width.set_value(string(" min-width: ") + val + ";"); } void css::css_max_width(const string & val) { max_width.set_value(string(" max-width: ") + val + ";"); } void css::css_z_index(unsigned int index) { z_index.set_value(string(" z-index: ") + webdar_tools_convert_to_string(index) + ";"); } void css::css_position_type(positionning val) { static const string command = " position: "; switch(val) { case pos_absolute: position_type.set_value(command + "absolute;"); break; case pos_relative: position_type.set_value(command + "relative;"); break; case pos_fixed: position_type.set_value(command + "fixed;"); break; case pos_sticky: position_type.set_value(command + "sticky;" + command + "-webkit-sticky;"); break; default: throw WEBDAR_BUG; } } void css::css_position_top(const string & top) { position_top.set_value(string(" top:") + top + ";"); } void css::css_position_left(const string & left) { position_left.set_value(string(" left:") + left + ";"); } void css::css_position_bottom(const string & bottom) { position_bottom.set_value(string(" bottom:") + bottom + ";"); } void css::css_position_right(const string & right) { position_right.set_value(string(" right:") + right + ";"); } void css::css_overflow(overflowing val) { string arg = " overflow: " + overflow_to_string(val); overflow.set_value(arg); } void css::css_overflow_x(overflowing val) { string arg = " overflow-x: " + overflow_to_string(val); overflow.set_value(arg); } void css::css_overflow_y(overflowing val) { string arg = " overflow-y: " + overflow_to_string(val); overflow.set_value(arg); } void css::css_float(floating val) { string arg = " float: "; switch(val) { case fl_left: arg += "left;"; break; case fl_right: arg += "right;"; break; case fl_none: arg += "none;"; break; default: throw WEBDAR_BUG; } float_pos.set_value(arg); } void css::css_float_clear(floatclear val) { string arg = " clear: "; switch(val) { case fc_left: arg += "left;"; break; case fc_right: arg += "right;"; break; case fc_both: arg += "both;"; break; case fc_none: arg += "none;"; break; default: throw WEBDAR_BUG; } float_clear.set_value(arg); } void css::css_opacity(const string & val) { opacity.set_value(string(" opacity: ") + val + ";"); } void css::css_padding(const string & val) { css_padding_top(val); css_padding_right(val); css_padding_bottom(val); css_padding_left(val); } void css::css_padding_top(const string & top) { padding_top.set_value(string(" padding-top: ") + top + ";"); } void css::css_padding_right(const string & right) { padding_right.set_value(string(" padding-right: ") + right + ";"); } void css::css_padding_bottom(const string & bottom) { padding_bottom.set_value(string(" padding-bottom: ") + bottom + ";"); } void css::css_padding_left(const string & left) { padding_left.set_value(string(" padding-left: ") + left + ";"); } void css::css_font_size(const string & val) { font_size.set_value(string(" font-size: ") + val + ";"); } void css::css_font_style_italic() { font_style.set_value(" font-style: italic;"); } void css::css_font_style_normal() { font_style.set_value(" font-style: normal;"); } void css::css_font_weight_bold() { font_weight.set_value(" font-weight: bold;"); } void css::css_font_weight_normal() { font_weight.set_value(" font-weight: normal;"); } void css::css_text_h_align(h_align val) { string arg = " text-align: "; switch(val) { case al_right: arg += "right;"; break; case al_left: arg += "left;"; break; case al_center: arg += "center;"; break; case al_justify: arg += "justify;"; break; default: throw WEBDAR_BUG; } text_h_align.set_value(arg); } void css::css_text_v_align(v_align val) { string arg = " vertical-align: "; switch(val) { case al_top: arg += "top;"; break; case al_middle: arg += "middle;"; break; case al_bottom: arg += "bottom;"; break; case al_baseline: arg += "baseline;"; break; case al_sub: arg += "sub;"; break; case al_super: arg += "super;"; break; case al_text_top: arg += "text-top;"; break; case al_text_bottom: arg += "text-bottom;"; break; default: throw WEBDAR_BUG; } text_v_align.set_value(arg); } void css::css_text_decoration(decoration val) { string arg = " text-decoration: "; switch(val) { case dc_underline: arg += "underline;"; break; case dc_overline: arg += "overline;"; break; case dc_line_through: arg += "line-through;"; break; case dc_none: arg += "none;"; break; default: throw WEBDAR_BUG; } text_deco.set_value(arg); } void css::css_border_width(border which, bd_width val) { string arg; switch(val) { case bd_thin: arg = "thin;"; break; case bd_medium: arg = "medium;"; break; case bd_thick: arg = "thick;"; break; default: throw WEBDAR_BUG; } css_border_width(which, arg); } void css::css_border_width(border which, const string & val) { string arg = string(" border") + border_to_string(which) + "width: " + val + ";"; switch(which) { case bd_all: border_width.set_value(arg); break; case bd_clear: border_width.clear(); break; default: border_width.set_value(border_width.get_value() + arg); break; // not usefull here, but does not hurt } } void css::css_border_color(border which, const string & col) { string arg = string(" border") + border_to_string(which) + "color: "; arg += col + ";"; switch(which) { case bd_all: border_color.set_value(arg); break; case bd_clear: border_color.clear(); break; default: border_color.set_value(border_color.get_value() + arg); break; // not usefull here, but does not hurt } } void css::css_border_style(border which, bd_style val) { string arg = string(" border") + border_to_string(which) + "style: "; switch(val) { case bd_dotted: arg += "dotted;"; break; case bd_dashed: arg += "dashed;"; break; case bd_solid: arg += "solid;"; break; case bd_double: arg += "double;"; break; case bd_groove: arg += "groove;"; break; case bd_ridge: arg += "ridge;"; break; case bd_inset: arg += "inset;"; break; case bd_outset: arg += "outset;"; break; case bd_none: arg += "none;"; break; default: throw WEBDAR_BUG; } switch(which) { case bd_all: border_style.set_value(arg); break; case bd_clear: border_style.clear(); break; default: border_style.set_value(border_style.get_value() + arg); break; // not usefull here, but does not hurt } } void css::css_corner_radius(const string & all) { css_corner_radius(all, all, all, all); } void css::css_corner_radius(const string & topleft, const string & topright, const string & botright, const string & botleft) { string arg = " border-radius: "; if(topleft == topright && botleft == botright && topleft == botleft) // all are equal arg += topleft + ";"; else arg += topleft + " " + topright + " " + botright + " " + botleft + ";"; corner_radius.set_value(arg); } void css::css_visibility(bool val) { string text_val = val ? "visible" : "hidden"; visibility.set_value(string(" visibility: ") + text_val + ";"); } void css::css_content(const string & name) { string tmp = " content: \"" + name + "\";"; content.set_value(tmp); } void css::css_transition(const string & duration, const string & delay, transition_function funct) { string tmp; switch(funct) { case ease: tmp = "ease"; break; case linear: tmp = "linear"; break; case ease_in: tmp = "ease-in"; break; case ease_out: tmp = "ease-out"; break; case ease_in_out: tmp = "ease-in-out"; break; default: throw WEBDAR_BUG; } tmp = "transition: all " + duration + " " + tmp + " " + delay + " ;"; transition.set_value(tmp); } string css::css_get_raw_string() const { string ret = ""; ret += color.get_value(); ret += bg_col.get_value(); ret += bg_img.get_value(); ret += img_pos.get_value(); ret += box_shadow.get_value(); ret += text_shadow.get_value(); ret += box_sizing.get_value(); ret += display.get_value(); ret += margin_top.get_value(); ret += margin_right.get_value(); ret += margin_bottom.get_value(); ret += margin_left.get_value(); ret += height.get_value(); ret += min_height.get_value(); ret += max_height.get_value(); ret += width.get_value(); ret += min_width.get_value(); ret += max_width.get_value(); if(!position_top.is_unset() && position_type.is_unset()) const_cast(this)->css_position_type(pos_absolute); if(!position_left.is_unset() && position_type.is_unset()) const_cast(this)->css_position_type(pos_absolute); if(!position_bottom.is_unset() && position_type.is_unset()) const_cast(this)->css_position_type(pos_absolute); if(!position_right.is_unset() && position_type.is_unset()) const_cast(this)->css_position_type(pos_absolute); ret += position_type.get_value(); ret += position_top.get_value(); ret += position_left.get_value(); ret += position_bottom.get_value(); ret += position_right.get_value(); ret += z_index.get_value(); ret += overflow.get_value(); ret += float_pos.get_value(); ret += float_clear.get_value(); ret += opacity.get_value(); ret += padding_top.get_value(); ret += padding_right.get_value(); ret += padding_bottom.get_value(); ret += padding_left.get_value(); ret += font_size.get_value(); ret += font_style.get_value(); ret += font_weight.get_value(); ret += text_h_align.get_value(); ret += text_v_align.get_value(); ret += text_deco.get_value(); ret += border_width.get_value(); ret += border_color.get_value(); ret += border_style.get_value(); ret += corner_radius.get_value(); ret += visibility.get_value(); ret += content.get_value(); ret += transition.get_value(); map::const_iterator it = custom_css.begin(); while(it != custom_css.end()) { ret += it->second.get_value(); ++it; } return ret; } void css::declare_custom_css(const string & label) { map::iterator it = custom_css.find(label); if(it != custom_css.end()) throw exception_range(string("custom_css already declared for this css object: ") + label); custom_css[label] = css_property(); } void css::set_custom_css(const string & label, const string & val) { map::iterator it = custom_css.find(label); if(it == custom_css.end()) throw exception_range(string("cannot set an undeclared custom css: ") + label); it->second.set_value(val); } void css::clear_custom_css(const string & label) { map::iterator it = custom_css.find(label); if(it == custom_css.end()) throw exception_range(string("cannot set an undeclared custom css: ") + label); it->second.clear(); } string css::border_to_string(border val) { string ret; switch(val) { case bd_top: ret = "-top-"; break; case bd_right: ret = "-right-"; break; case bd_bottom: ret = "-bottom-"; break; case bd_left: ret = "-left-"; break; case bd_all: case bd_clear: ret = "-"; break; default: throw WEBDAR_BUG; } return ret; } string css::overflow_to_string(overflowing val) { string arg; switch(val) { case ov_visible: arg = "visible;"; break; case ov_hidden: arg = "hidden;"; break; case ov_scroll: arg = "scroll;"; break; case ov_auto: arg = "auto;"; break; case ov_inherit: arg = "inherit;"; break; default: throw WEBDAR_BUG; } return arg; } webdar-1.0.0/src/html_size_unit.hpp0000644000175000017520000000640115002212070014222 00000000000000/*********************************************************************/ // webdar - a web server and interface program to libdar // Copyright (C) 2013-2025 Denis Corbin // // This file is part of Webdar // // Webdar is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // Webdar is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Webdar. If not, see // //---- // to contact the author: dar.linux@free.fr /*********************************************************************/ #ifndef HTML_SIZE_UNIT_HPP #define HTML_SIZE_UNIT_HPP // C system header files #include "my_config.h" extern "C" { } // C++ system header files #include // webdar headers #include "html_form_select.hpp" #include "html_div.hpp" /// html component in a form a couple of dropdown list for user to define a size in byte or larger units class html_size_unit : public html_div, public actor, public events { public: static const std::string changed; html_size_unit(); html_size_unit(const html_size_unit & ref) = delete; html_size_unit(html_size_unit && ref) noexcept = delete; html_size_unit & operator = (const html_size_unit & ref) = delete; html_size_unit & operator = (html_size_unit && ref) noexcept = delete; ~html_size_unit() = default; /// return the unit factor as integer libdar::infinint get_value() const; /// return the unit label std::string get_string() const { return unit.get_selected_id(); }; /// get the max base unit index (index starts at zero) unsigned int get_max_base_unit_index() const { return SI_mode.num_choices() - 1; }; /// get current base index unsigned int get_current_base_index() const { return SI_mode.get_selected_num(); }; /// get value of the base unit of given index /// \note base units are stored in ascending order with the index libdar::infinint get_base_unit_value(unsigned int index) const; /// get the max power available for the base unit of given index /// \note power 0 means factor is "base_unit^0" (which is 1)... and so on. unsigned int get_max_power_for_base_unit(unsigned int index) const; /// get the current power selected unsigned int get_current_power_for_base_unit() const { return unit.get_selected_num(); }; /// change the selected base unit and factor programmatically void set_unit_and_ratio_indexes(unsigned int base_index, unsigned int power_index); /// whether the HTML control is enable or disabled void set_enabled(bool val) { unit.set_enabled(val); SI_mode.set_enabled(val); }; /// actor inheritance virtual void on_event(const std::string & event_name) override; private: static constexpr const char* mode_changed = "SI_mode changed"; bool manual_change; html_form_select unit; html_form_select SI_mode; void set_fields(); }; #endif webdar-1.0.0/src/html_form_select.hpp0000644000175000017520000001017615035005127014530 00000000000000/*********************************************************************/ // webdar - a web server and interface program to libdar // Copyright (C) 2013-2025 Denis Corbin // // This file is part of Webdar // // Webdar is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // Webdar is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Webdar. If not, see // //---- // to contact the author: dar.linux@free.fr /*********************************************************************/ #ifndef HTML_FORM_SELECT_HPP #define HTML_FORM_SELECT_HPP // C system header files #include "my_config.h" extern "C" { } // C++ system header files /// class html_form_select implements HTML input of type "select" /// It should be adopted directly or not by an html_form /// object. It shows a dropdown list of choices the user /// has to select. To setup the available choices use the /// add_choice(), clear() methods. To obtain the value selected /// by the user, use the get_selected_id() or get_selected_num() /// methods. Note that the change only occurs when the form is /// submited by the browser. As result of this POST action /// if the user changed the field, the object triggers the 'changed' /// event other objects can register on to be notified of change // webdar headers #include "html_form_radio.hpp" #include "html_label.hpp" class html_form_select : public html_form_radio, public actor { public: static const std::string changed; /// default event name for all object of this class /// constructor /// \param[in] label is what name shows to the user /// \param[in] x_event_name is the event to register upon change on this object /// \note if x_event_name is not given or is an empty string the even to register is /// given by the value of html_form_select::changed html_form_select(const std::string & label, const std::string & x_event_name = ""); html_form_select(const html_form_select & ref); html_form_select(html_form_select && ref) noexcept = delete; html_form_select & operator = (const html_form_select & ref) = delete; html_form_select & operator = (html_form_select && ref) noexcept = delete; ~html_form_select() = default; void change_label(const std::string & label) { x_label.set_label(label); my_body_part_has_changed(); }; // inherit from html_form_radio the following methods to feed contents // . add_choice // . clear // . set_selected // . get_selected_id // . get_selected_num /// inherited from actor virtual void on_event(const std::string & x_event_name) override { act(event_name); }; /// number of available choices provided to the web user by this object unsigned int size() const { return get_choices().size(); }; /// provides recorded item id /// \note index should be equal or greater than zero and strictly less than size() const std::string & get_id(unsigned int index) const { return get_choices()[index].id; }; /// provides recorded item label /// \note index should be equal or greater than zero and strictly less than size() const std::string & get_label(unsigned int index) const { return get_choices()[index].label.get_label(); }; /// set whether the HTML control is enable or disabled void set_enabled(bool val); /// set tooltip for the html label of the input form void set_tooltip(const std::string & msg) { x_label.set_tooltip(msg); }; protected: /// inherited from body_builder virtual std::string inherited_get_body_part(const chemin & path, const request & req) override; private: bool enabled; ///< whether the control is enabled or disabled html_label x_label; std::string event_name; }; #endif webdar-1.0.0/src/html_focus.cpp0000644000175000017520000000336414773727241013361 00000000000000/*********************************************************************/ // webdar - a web server and interface program to libdar // Copyright (C) 2013-2025 Denis Corbin // // This file is part of Webdar // // Webdar is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // Webdar is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Webdar. If not, see // //---- // to contact the author: dar.linux@free.fr /*********************************************************************/ // C system header files #include "my_config.h" extern "C" { } // C++ system header files // webdar headers // #include "html_focus.hpp" using namespace std; void html_focus::given_for_temporary_adoption(body_builder *obj) { css_class_group csg; string class_name; if(obj == nullptr) throw WEBDAR_BUG; if(obj != adopted) my_body_part_has_changed(); if(adopted != nullptr) foresake(adopted); adopted = obj; adopt(obj); csg = get_css_class_group(); csg.reset_read(); while(csg.read_next(class_name)) { if(! obj->has_css_class(class_name)) obj->add_css_class(class_name); } } string html_focus::inherited_get_body_part(const chemin & path, const request & req) { return get_body_part_from_all_children(path, req); } webdar-1.0.0/src/html_derouleur.hpp0000644000175000017520000001176615035742306014251 00000000000000/*********************************************************************/ // webdar - a web server and interface program to libdar // Copyright (C) 2013-2025 Denis Corbin // // This file is part of Webdar // // Webdar is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // Webdar is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Webdar. If not, see // //---- // to contact the author: dar.linux@free.fr /*********************************************************************/ #ifndef HTML_DEROULEUR_HPP #define HTML_DEROULEUR_HPP // C system header files #include "my_config.h" extern "C" { } // C++ system header files #include #include #include // webdar headers #include "body_builder.hpp" #include "html_aiguille.hpp" #include "actor.hpp" #include "html_button.hpp" /// class html_derouleur is a pure virtual class /// it groups adopted objets under several labeled sections /// which can be expanded and shrinked, still the section /// title stay visible, but only one section content is visible /// at a any given time class html_derouleur : public body_builder, public actor { public: html_derouleur() { adopt(&switcher); clear(); }; html_derouleur(const html_derouleur & ref) = delete; html_derouleur(html_derouleur && ref) noexcept = delete; html_derouleur & operator = (const html_derouleur & ref) = delete; html_derouleur & operator = (html_derouleur && ref) noexcept = delete; ~html_derouleur() = default; /// clear all adopted data and remove all sections void clear(); void add_section(const std::string & name, const std::string & title); void adopt_in_section(const std::string & section_name, body_builder* obj); void adopt_in_section(signed int num, body_builder* obj); void clear_section(const std::string & section_name) { switcher.clear_section(section_name); }; void clear_section(signed int num) { switcher.clear_section(num); }; void remove_section(const std::string & section_name); void set_active_section(const std::string & name) { switcher.set_active_section(name); }; void set_active_section(signed int num) { switcher.set_active_section(num); }; unsigned int size() const { return switcher.size(); }; /// hide/unhide a section (Warning! this is not the same thing as shrinking/expanding a section!) /// \note invisible section not only shrink (their content is no more visible) but the /// section title itself disapears and the section does not show at all to the user void section_set_visible(const std::string & name, bool visible); /// set css of URL titles void url_clear_css_classes() { css_url.clear_css_classes(); }; void url_add_css_class(const std::string & name); void url_add_css_class(const css_class_group & name); // from actor virtual void on_event(const std::string & event_name) override; protected: // inherited from body_builder virtual void css_classes_have_changed() override; // inherited from body_builder virtual std::string inherited_get_body_part(const chemin & path, const request & req) override; // inherited from body_builder virtual void new_css_library_available() override; private: static const std::string shrink_event; /// struct used to store for each section the title components and status struct section { html_button* title; html_button* shrinker; bool visible; ///< a section can be expanded or shrinked or totally hidden (visible == false) // by default shrinker is hidden and title is // visible (when the section is not expanded) // clicking on title expands the section // and leads the shrinker button to show while // title get invisible, and so on... section() { title = nullptr; shrinker = nullptr; visible = true; }; section(const section & arg) = delete; section(section && arg) = default; section & operator = (const section & arg) = delete; section & operator = (section && arg) = default; ~section() { if(title != nullptr) delete title; if(shrinker != nullptr) delete shrinker; }; }; css_class_group css_url; ///< css classes to apply to title bar urls std::map sections; ///< map section name to its content and provide the title bars above each html_aiguille switcher; ///< holds the objects adopted inside the different sections /// used from inherited_get_body_part to avoid duplicated code std::string generate_html(const chemin & path, const request & req); }; #endif webdar-1.0.0/src/webdar_tools.hpp0000644000175000017520000001267214777505563013716 00000000000000/*********************************************************************/ // webdar - a web server and interface program to libdar // Copyright (C) 2013-2025 Denis Corbin // // This file is part of Webdar // // Webdar is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // Webdar is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Webdar. If not, see // //---- // to contact the author: dar.linux@free.fr /*********************************************************************/ #ifndef WEBDAR_TOOLS_HPP #define WEBDAR_TOOLS_HPP #include "my_config.h" // C++ system header files #include #include #include #include // webdar headers #include "uri.hpp" #include "webdar_tools.hpp" template std::string webdar_tools_convert_to_string(T val) { std::stringstream tmp; tmp << val; return tmp.str(); } /// semi comparison /// /// \param[in] a first member of the comparison /// \param[in] b second member of the comparision /// \param[out] result result of the comparision (true if a < b, false if b < a) /// \return true if either a < b or b < a, else false is returned and 'result' is /// undefined template bool webdar_tools_semi_less_than(T a, T b, bool & result) { if(a < b) { result = true; return true; } if(b < a) { result = false; return true; } return false; } template void webdar_tools_concat_vectors(std::vector & op1, const std::vector & op2) { for(unsigned int i = 0; i < op2.size(); ++i) op1.push_back(op2[i]); } template T webdar_tools_convert_from_infinint(const libdar::infinint & val, const std::string & conv_err_msg) { T ret = 0; libdar::infinint tmp(val); tmp.unstack(ret); if(! tmp.is_zero()) { if(conv_err_msg.empty()) throw WEBDAR_BUG; else throw exception_range(conv_err_msg); } return ret; } /// defines a substring portion of a existing string (to avoid data copy) /// \note as these are iterators on an existing string, these interator should /// not be used after this string they refer is changed or deleted struct troncon { std::string::const_iterator begin; std::string::const_iterator end; troncon() {}; // needed to use troncon in std::map troncon(std::string::const_iterator b, std::string::const_iterator e) { begin = b; end = e; }; troncon(const std::string & ref) { begin = ref.begin(); end = ref.end(); }; bool operator < (const troncon & ref) const; }; extern int webdar_tools_convert_to_int(const std::string & ref); extern unsigned int webdar_tools_convert_hexa_to_int(const std::string & ref); extern void webdar_tools_split_by(char sep, const std::string & aggregate, std::vector & splitted); extern void webdar_tools_split_in_two(char sep, const std::string &aggregate, std::string & first, std::string & second); /// return the list of sequences found in aggregate that are separated by substring delimiter /// \param[in] substring the string that should be seen as delimiter and not included in the returned list /// \param[in] aggregate the string portion to analyse /// \note if the aggregate string portion starts with a substring, the first element of the deque is an empty portion /// (troncon.begin = troncon.end) same thing if the aggregate string ends by a substring the last element of the deque /// is also an empty portion. extern std::deque webdar_tools_split_by_substring(const std::string & substring, const troncon & aggregate); /// provides the offset of the first byte of the first occurrence of substring found in the aggregate string portion /// \note if no substring could be found, this call returns aggregate.end extern std::string::const_iterator webdar_tools_seek_to_substring(const std::string & substring, const troncon & aggregate); extern std::string webdar_tools_remove_leading_spaces(const std::string & input); extern void webdar_tools_init_randomization(); /// generate a random string composted of letters (lowercase and uppercases) and digits having the first character a letter /// /// \param[in] size is the size of the string to generate /// \return a the quite random string extern std::string webdar_tools_generate_random_string(unsigned int size); extern std::string webdar_tools_get_session_ID_from_URI(const uri & url); extern std::string webdar_tools_to_canonical_case(const std::string & ch); extern std::string webdar_tools_decode_urlencoded(const std::string & ch); extern std::string webdar_tools_get_title(const std::string & sessname, const std::string & status); extern std::string webdar_tools_html_display(const std::string & arg); extern bool webdar_tools_exists_and_is_file(const std::string & path, bool follow_symlink); extern bool webdar_tools_exists_and_is_dir(const std::string & path, bool follow_symlink); extern std::string webdar_tools_capitalize_first_letter_of_words(const std::string & source); #endif webdar-1.0.0/src/html_form_overwrite_combining_criterium.cpp0000644000175000017520000002043714773727241021423 00000000000000/*********************************************************************/ // webdar - a web server and interface program to libdar // Copyright (C) 2013-2025 Denis Corbin // // This file is part of Webdar // // Webdar is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // Webdar is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Webdar. If not, see // //---- // to contact the author: dar.linux@free.fr /*********************************************************************/ // C system header files #include "my_config.h" extern "C" { } // C++ system header files #include // webdar headers #include "html_form_overwrite_base_criterium.hpp" #include "webdar_css_style.hpp" // #include "html_form_overwrite_combining_criterium.hpp" using namespace std; const string html_form_overwrite_combining_criterium::changed = "hfo_comb_crit_changed"; html_form_overwrite_combining_criterium::html_form_overwrite_combining_criterium(const string & initial_mode): fs(""), crit_type("Combining with", html_form_select::changed), table(true, true, "Add a new mask", " --- select a criterium --- ") { // components configuration crit_type.add_choice(and_op, "AND"); crit_type.add_choice(or_op, "OR"); if(crit_type.num_choices() != 2) throw WEBDAR_BUG; crit_type.set_selected_id(initial_mode); current_bool_mode = crit_type.get_selected_id(); table.set_obj_type_provider(this); table.add_obj_type("atomic criterium"); // this is index 0 in provide_object_of_type() table.add_obj_type("composit criterium"); // this is index 1 in provide_object_of_type() // adoption tree fs.adopt(&crit_type); fs.adopt(&table); adopt(&fs); // events crit_type.record_actor_on_event(this, html_form_select::changed); table.record_actor_on_event(this, html_form_dynamic_table::changed); register_name(changed); // visibility // css stuff table.set_css_class_first_column(webdar_css_style::text_top_right); // final setup update_table_content_logic(true); // true = update unconditionally } html_form_overwrite_base_criterium & html_form_overwrite_combining_criterium::add_base_criterium() { html_form_overwrite_base_criterium *ptr = nullptr; html_form_dynamic_table::iterator tmp; table.add_line(0); if(table.empty()) throw WEBDAR_BUG; tmp = table.last(); ptr = dynamic_cast(tmp.get_object().get()); if(ptr == nullptr) throw WEBDAR_BUG; return *ptr; } html_form_overwrite_combining_criterium & html_form_overwrite_combining_criterium::add_combining_criterium() { html_form_overwrite_combining_criterium *ptr = nullptr; html_form_dynamic_table::iterator tmp; table.add_line(1); if(table.empty()) throw WEBDAR_BUG; tmp = table.last(); ptr = dynamic_cast(tmp.get_object().get()); if(ptr == nullptr) throw WEBDAR_BUG; return *ptr; } unique_ptr html_form_overwrite_combining_criterium::get_overwriting_criterium() const { unique_ptr ret; if(current_bool_mode == and_op) ret.reset(new (nothrow) libdar::crit_and()); else if(current_bool_mode == or_op) ret.reset(new (nothrow) libdar::crit_or()); else throw WEBDAR_BUG; if(!ret) throw exception_memory(); else { html_form_dynamic_table::iterator it = table.begin(); while(it != table.end()) { shared_ptr tmp = it.get_object(); if(!tmp) throw WEBDAR_BUG; html_overwrite_criterium* sub = dynamic_cast(tmp.get()); if(sub == nullptr) throw WEBDAR_BUG; unique_ptr sub_crit = sub->get_overwriting_criterium(); if(!sub_crit) throw WEBDAR_BUG; ret->add_crit(*sub_crit); ++it; } } return ret; } void html_form_overwrite_combining_criterium::load_json(const json & source) { try { unsigned int version; string class_id; json config = unwrap_config_from_json_header(source, version, class_id); if(class_id != myclass_id) throw exception_range(libdar::tools_printf("Unexpected class_id in json data, found %s while expecting %s", class_id.c_str(), myclass_id)); if(version > format_version) throw exception_range(libdar::tools_printf("Json format version too hight for %s, upgrade your webdar software", myclass_id)); crit_type.set_selected_id_with_warning(config.at(jlabel_logic), jlabel_logic); table.load_json(config.at(jlabel_contents)); } catch(json::exception & e) { throw exception_json(libdar::tools_printf("Error loading %s config", myclass_id), e); } } json html_form_overwrite_combining_criterium::save_json() const { json config; config[jlabel_logic] = crit_type.get_selected_id(); config[jlabel_contents] = table.save_json(); return wrap_config_with_json_header(format_version, myclass_id, config); } void html_form_overwrite_combining_criterium::clear_json() { crit_type.set_selected_num(0); table.clear_json(); } void html_form_overwrite_combining_criterium::on_event(const string & event_name) { if(event_name == html_form_select::changed) update_table_content_logic(false); else if (event_name == html_form_dynamic_table::changed) update_table_content_logic(true); else throw WEBDAR_BUG; } unique_ptr html_form_overwrite_combining_criterium::provide_object_of_type(unsigned int num, const string & context, string & changed_event) const { unique_ptr ret; unique_ptr tmp; switch(num) { case 0: ret.reset(new (nothrow) html_form_overwrite_base_criterium()); changed_event = html_form_overwrite_base_criterium::changed; break; case 1: tmp.reset(new (nothrow) html_form_overwrite_combining_criterium(invert_logic(context))); if(!tmp) throw exception_memory(); changed_event = html_form_overwrite_combining_criterium::changed; if(current_bool_mode == and_op) tmp->current_bool_mode = or_op; else tmp->current_bool_mode = and_op; ret = std::move(tmp); break; default: throw WEBDAR_BUG; } if(!ret) throw exception_memory(); return ret; } string html_form_overwrite_combining_criterium::inherited_get_body_part(const chemin & path, const request & req) { return get_body_part_from_all_children(path, req); } void html_form_overwrite_combining_criterium::new_css_library_available() { unique_ptr & csslib = lookup_css_library(); if(!csslib) throw WEBDAR_BUG; webdar_css_style::update_library(*csslib); } string html_form_overwrite_combining_criterium::bool_op_to_name(const string & op) { if(op == and_op) return "and"; else if(op == or_op) return "or"; else throw WEBDAR_BUG; } void html_form_overwrite_combining_criterium::update_table_content_logic(bool unconditionally) { string target_bool_mode = crit_type.get_selected_id(); if((target_bool_mode != current_bool_mode) || unconditionally) { string logic_text = bool_op_to_name(target_bool_mode); html_form_dynamic_table::iterator it = table.begin(); // first line is empty if(it != table.end()) { shared_ptr label = it.get_left_label(); if(!label) throw WEBDAR_BUG; label->clear(); ++it; } while(it != table.end()) { shared_ptr label = it.get_left_label(); if(!label) throw WEBDAR_BUG; label->clear(); label->add_text(0, logic_text); ++it; } current_bool_mode = target_bool_mode; table.set_obj_type_context(current_bool_mode); act(changed); } } string html_form_overwrite_combining_criterium::invert_logic(const string & logic) { if(logic == and_op) return or_op; else if(logic == or_op) return and_op; else throw WEBDAR_BUG; } webdar-1.0.0/src/exceptions.cpp0000644000175000017520000000631314773727241013374 00000000000000/*********************************************************************/ // webdar - a web server and interface program to libdar // Copyright (C) 2013-2025 Denis Corbin // // This file is part of Webdar // // Webdar is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // Webdar is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Webdar. If not, see // //---- // to contact the author: dar.linux@free.fr /*********************************************************************/ // C system header files #include "my_config.h" extern "C" { #if HAVE_OPENSSL_ERR_H #include #endif } // C++ system header files // webdar headers // #include "exceptions.hpp" using namespace std; exception_system::exception_system(const string & context, int error_code) : exception_base("") { #if (_POSIX_C_SOURCE >= 200112L || _XOPEN_SOURCE >= 600) && ! _GNU_SOURCE const unsigned int SIZE = 300; char buffer[SIZE]; int ret = strerror_r(error_code, buffer, SIZE); buffer[SIZE - 1] = '\0'; // that does not hurt if(ret == 0) // (successfull call) change_message(context + ": " + buffer); else #endif change_message(context + ": " + string(strerror(error_code))); } exception_libcall::exception_libcall(const libdar::Egeneric & e): exception_base(e.get_message()) { if(dynamic_cast(&e) != nullptr) change_message(e.dump_str()); } exception_openssl::exception_openssl(): exception_base(get_ssl_error()) {}; string exception_openssl::get_ssl_error() { string ret; unsigned long code; char err_buf[ERR_BUF_LEN]; while((code = ERR_get_error()) > 0) { if(!ret.empty()) ret += "\n"; ERR_error_string_n(code, err_buf, ERR_BUF_LEN); err_buf[ERR_BUF_LEN - 1] = '\0'; // just in case ret += string(err_buf); } if(ret.empty()) ret = "cannot get error reason from openssl"; return ret; } void throw_as_most_derivated_class(exception_base *ebase) { exception_memory *emem = dynamic_cast(ebase); exception_bug *ebug = dynamic_cast(ebase); exception_system *esys = dynamic_cast(ebase); exception_range *erange = dynamic_cast(ebase); exception_input *input = dynamic_cast(ebase); exception_feature *feature = dynamic_cast(ebase); exception_libcall *libcall = dynamic_cast(ebase); if(emem != nullptr) throw *emem; if(ebug != nullptr) throw *ebug; if(esys != nullptr) throw *esys; if(erange != nullptr) throw *erange; if(input != nullptr) throw *input; if(feature != nullptr) throw *feature; if(libcall != nullptr) throw *libcall; throw WEBDAR_BUG; // unknown exception } webdar-1.0.0/src/html_form_sig_block_size.hpp0000644000175000017520000001022114775733307016250 00000000000000/*********************************************************************/ // webdar - a web server and interface program to libdar // Copyright (C) 2013-2025 Denis Corbin // // This file is part of Webdar // // Webdar is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // Webdar is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Webdar. If not, see // //---- // to contact the author: dar.linux@free.fr /*********************************************************************/ #ifndef HTML_FORM_SIG_BLOCK_SIZE_HPP #define HTML_FORM_SIG_BLOCK_SIZE_HPP // C system header files #include "my_config.h" extern "C" { } // C++ system header files #include #include #include // webdar headers #include "html_div.hpp" #include "actor.hpp" #include "events.hpp" #include "body_builder.hpp" #include "html_table.hpp" #include "html_text.hpp" #include "html_form_radio.hpp" #include "html_form_input.hpp" #include "html_form_input_unit.hpp" #include "html_form_fieldset.hpp" #include "jsoner.hpp" /// html component used to define how/when delta signature are calculated class html_form_sig_block_size: public html_div, public actor, public events, public jsoner { public: static const std::string changed; html_form_sig_block_size(); html_form_sig_block_size(const html_form_sig_block_size & ref) = delete; html_form_sig_block_size(html_form_sig_block_size && ref) noexcept = delete; html_form_sig_block_size & operator = (const html_form_sig_block_size & ref) = delete; html_form_sig_block_size & operator = (html_form_sig_block_size && ref) noexcept = delete; ~html_form_sig_block_size() = default; /// define default/initial file size value below which to never try performing binary delta void set_delta_sig_min_size(const libdar::infinint & val) { delta_sig_min_size.set_value_as_infinint(val); }; /// read the currently file size value set below which to never try perfoming binary delta libdar::infinint get_delta_sig_min_size() const { return delta_sig_min_size.get_value_as_infinint(); } /// set the value programmatically void set_value(const libdar::delta_sig_block_size & val); /// return the corresponding value for libdar libdar::delta_sig_block_size get_value() const; /// inherited from jsoner virtual void load_json(const json & source) override; /// inherited from jsoner virtual json save_json() const override; /// inherited from jsoner virtual void clear_json() override; /// inherited from actor virtual void on_event(const std::string & event_name) override; protected: /// inherited from body_builder virtual std::string inherited_get_body_part(const chemin & path, const request & req) override; /// inherited from body_builder virtual void new_css_library_available() override; private: bool ignore_events; html_form_input_unit delta_sig_min_size; html_text summary_f; // formula html_text summary_l; // limits html_form_fieldset fs_function; html_form_radio function; html_form_input multiply; html_form_input divisor; html_form_input_unit min_size; html_form_input_unit max_size; void make_summary(); static constexpr const unsigned int format_version = 1; static constexpr const char* myclass_id = "html_form_sig_block_size"; static constexpr const char* jlabel_min_file_size = "min-size"; static constexpr const char* jlabel_function = "function"; static constexpr const char* jlabel_multiply = "multiply"; static constexpr const char* jlabel_divisor = "divisor"; static constexpr const char* jlabel_min_size = "min-size"; static constexpr const char* jlabel_max_size = "max-size"; }; #endif webdar-1.0.0/src/archive_test.cpp0000644000175000017520000000521515030770722013660 00000000000000/*********************************************************************/ // webdar - a web server and interface program to libdar // Copyright (C) 2013-2025 Denis Corbin // // This file is part of Webdar // // Webdar is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // Webdar is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Webdar. If not, see // //---- // to contact the author: dar.linux@free.fr /*********************************************************************/ // C system header files #include "my_config.h" extern "C" { } // C++ system header files // webdar headers #include "tokens.hpp" #include "exceptions.hpp" // #include "archive_test.hpp" using namespace std; archive_test::archive_test(): param(nullptr) { #ifdef LIBTHREADAR_STACK_FEATURE set_stack_size(DEFAULT_STACK_SIZE); #endif } void archive_test::inherited_run() { try { if(!ui && ! ui->get_user_interaction()) throw WEBDAR_BUG; ui->clear(); ui->auto_hide(false, false); if(param == nullptr) throw WEBDAR_BUG; libdar::path archpath(param->get_archive_path(), true); string basename(param->get_archive_basename()); libdar::archive_options_read read_opt(param->get_read_options(ui)); libdar::archive_options_test test_opt(param->get_testing_options()); libdar::statistics* progressive_report = ui->get_statistics().get_libdar_statistics(); cancellation_checkpoint(); libdar::archive arch(ui->get_user_interaction(), archpath, basename, EXTENSION, read_opt); // resetting counters and logs ui->get_statistics().clear_counters(); ui->get_statistics().clear_labels(); ui->get_statistics().set_treated_label("item(s) treated"); ui->get_statistics().set_skipped_label("item(s) excluded by filters"); ui->get_statistics().set_errored_label("items(s) with error"); cancellation_checkpoint(); libdar::statistics final = arch.op_test(test_opt, progressive_report); } catch(libdar::Egeneric & e) { throw exception_libcall(e); } } void archive_test::signaled_inherited_cancel() { pthread_t libdar_tid; libdar::thread_cancellation th; if(is_running(libdar_tid)) th.cancel(libdar_tid, true, 0); } webdar-1.0.0/src/server_pool.cpp0000644000175000017520000001352415030770727013546 00000000000000/*********************************************************************/ // webdar - a web server and interface program to libdar // Copyright (C) 2013-2025 Denis Corbin // // This file is part of Webdar // // Webdar is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // Webdar is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Webdar. If not, see // //---- // to contact the author: dar.linux@free.fr /*********************************************************************/ // C system header files #include "my_config.h" extern "C" { #if HAVE_ERRNO_H #include #endif #if HAVE_UNISTD_H #include #endif } // C++ system header files #include // libraries header files #include // webdar headers #include "global_parameters.hpp" // #include "server_pool.hpp" using namespace std; server_pool::server_pool(const unsigned int pool_size, const shared_ptr & creport): max_server(pool_size), log(creport), verrou(1) { #ifdef LIBTHREADAR_STACK_FEATURE set_stack_size(DEFAULT_STACK_SIZE); #endif if(!log) throw WEBDAR_BUG; if(max_server < 1) throw WEBDAR_BUG; run(); // this launches the local thread (see inherited_run()) for sever // object destruction handling } server_pool::~server_pool() { try { cancel(); } catch(...) { // no throw } try { join(); } catch(...) { // no throw } } bool server_pool::run_new_server(const shared_ptr & auth, unique_ptr & source) { bool ret = false; if(!auth) throw WEBDAR_BUG; if(!source) throw WEBDAR_BUG; if(!is_running()) { // our local thread has ended!!! join(); // either an exception is propagated throw WEBDAR_BUG; // or we throw an error ourselves // without this thread running // server object recycling cannot // be performed } verrou.lock(); try { ////////// // creating a new server object if allowed // and adding it to the list if(size() >= max_server) ret = false; else { sigset_t sigs; server *tmp = new (nothrow) server(log, auth, source); if(tmp == nullptr) throw exception_memory(); peer_with(tmp); // we only record the allocated address relying on the // peering mechanism of class reference (!) if(sigfillset(&sigs) != 0) throw exception_system("failed creating a full signal set", errno); if(sigdelset(&sigs, THREAD_SIGNAL) != 0) throw exception_system("failed removing the THREAD_SIGNAL from signal set", errno); tmp->set_signal_mask(sigs); tmp->run(); // we run the object now. The peering we have setup // will end once the thread will be about to end, and // we will then be notified of receiving a call to // broken_peering_from() ret = true; } } catch(...) { verrou.unlock(); throw; } verrou.unlock(); return ret; } void server_pool::inherited_run() { // this thread manages the server objects destruction verrou.lock(); try { while(max_server > 0 // not asked to stop by our destructor || size() > 0 // or there are still server running || !dying_ones.empty()) // or somme servers need to be deleted { try { while(dying_ones.size() > 0) { if(dying_ones.front() == nullptr) throw WEBDAR_BUG; dying_ones.front()->join(); // may throw an exception delete dying_ones.front(); // deleting the object dying_ones.pop_front(); // removing from the list } if(max_server > 0 || size() > 0) verrou.wait(); // release the lock and wait for a signal() } catch(libthreadar::thread::cancel_except & e) { throw; } catch(exception_bug & e) { log->report(priority_t::crit, e.get_message()); throw; } catch(exception_base & e) { log->report(priority_t::crit, e.get_message()); // no exception propagation } } } catch(...) { verrou.unlock(); throw; } verrou.unlock(); } void server_pool::signaled_inherited_cancel() { verrou.lock(); try { cancel_all_servers(); // ask all servers to end max_server = 0; // ask inherited_thread to end asap verrou.signal(); // awake the thread. // in case no server are running, the thread // would stay pending on verrou waiting for // a signal() forever } catch(...) { // no exception propagation in destructor verrou.unlock(); throw; } verrou.unlock(); } void server_pool::broken_peering_from(reference* obj) { verrou.lock(); try { server* dying_server = dynamic_cast(obj); if(dying_server == nullptr) throw WEBDAR_BUG; // was not a server object as peer! dying_ones.push_back(dying_server); verrou.signal(); // wake up inherited_run() for cleanup of the object // we cannot do this here because broken_peering_from // is called indirectly from the inherited_run() thread of // the server 'dying_server' } catch(...) { verrou.unlock(); throw; } verrou.unlock(); } void server_pool::cancel_all_servers() { reference* ptr = nullptr; reset_read_peers(); while(read_next_peer(ptr)) { server* srv = dynamic_cast(ptr); if(srv == nullptr) throw WEBDAR_BUG; // was not a server object as peer! srv->cancel(); } } webdar-1.0.0/src/html_libdar_running_page.cpp0000644000175000017520000000547414773727242016240 00000000000000/*********************************************************************/ // webdar - a web server and interface program to libdar // Copyright (C) 2013-2025 Denis Corbin // // This file is part of Webdar // // Webdar is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // Webdar is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Webdar. If not, see // //---- // to contact the author: dar.linux@free.fr /*********************************************************************/ // C system header files #include "my_config.h" extern "C" { } // C++ system header files // webdar headers // #include "html_libdar_running_page.hpp" using namespace std; const string html_libdar_running_page::libdar_has_finished = "html_libdar_running_page_finished"; html_libdar_running_page::html_libdar_running_page(): html_page("THIS IS A BUG"), sessname(""), enable_refresh(true) { web_ui.reset(new (nothrow) html_web_user_interaction()); if(!web_ui) throw exception_memory(); adopt(web_ui.get()); // signals and events register_name(libdar_has_finished); web_ui->record_actor_on_event(this, html_web_user_interaction::libdar_has_finished); web_ui->record_actor_on_event(this, html_web_user_interaction::can_refresh); web_ui->record_actor_on_event(this, html_web_user_interaction::dont_refresh); } string html_libdar_running_page::inherited_get_body_part(const chemin & path, const request & req) { string body = get_body_part_from_children_as_a_block(path, req); if(enable_refresh) set_refresh_redirection(1, req.get_uri().url_path_part()); else set_refresh_redirection(0, ""); // disable refresh return get_body_part_given_the_body(path, req, body); } void html_libdar_running_page::on_event(const string & event_name) { if(event_name == html_web_user_interaction::libdar_has_finished) { set_title(webdar_tools_get_title(sessname, "Libdar thread has ended")); my_body_part_has_changed(); act(libdar_has_finished); } else if(event_name == html_web_user_interaction::can_refresh) { if(!enable_refresh) { my_body_part_has_changed(); enable_refresh = true; } } else if(event_name == html_web_user_interaction::dont_refresh) { if(enable_refresh) { my_body_part_has_changed(); enable_refresh = false; } } else throw WEBDAR_BUG; } webdar-1.0.0/src/html_over_guichet.cpp0000644000175000017520000000635015044137415014711 00000000000000/*********************************************************************/ // webdar - a web server and interface program to libdar // Copyright (C) 2013-2025 Denis Corbin // // This file is part of Webdar // // Webdar is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // Webdar is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Webdar. If not, see // //---- // to contact the author: dar.linux@free.fr /*********************************************************************/ // C system header files extern "C" { } // C++ system header files // webdar headers // #include "html_over_guichet.hpp" using namespace std; const string html_over_guichet::changed = "hog_changed"; html_over_guichet::html_over_guichet(): wicket(true) { // component config // adoption tree (is dynamically made through set_child() method // events register_name(changed); // css } void html_over_guichet::set_child(const shared_ptr & ptr, unique_ptr & to_give, bibliotheque::category cat, const string & changed_event) { if(!ptr) throw WEBDAR_BUG; inner = std::move(to_give); if(!inner) throw WEBDAR_BUG; // component configuration wicket.set_child(ptr, cat, inner, false); // adoption tree adopt(&wicket); // events if(!changed_event.empty()) { events* ptr = dynamic_cast(inner.get()); if(ptr == nullptr) throw WEBDAR_BUG; // if an event is provided the to_give object must inherit from events class ! child_event = changed_event; // for sanity check in on_event(); ptr->record_actor_on_event(this, changed_event); } // css } unique_ptr html_over_guichet::get_mask() const { check_inner(); const html_mask* inner_mask = dynamic_cast(inner.get()); if(inner_mask == nullptr) throw WEBDAR_BUG; return inner_mask->get_mask(); } bool html_over_guichet::is_relative() const { check_inner(); const html_mask* inner_mask = dynamic_cast(inner.get()); if(inner_mask == nullptr) throw WEBDAR_BUG; return inner_mask->is_relative(); } void html_over_guichet::load_json(const json & source) { wicket.load_json(source); } json html_over_guichet::save_json() const { return wicket.save_json(); } void html_over_guichet::clear_json() { wicket.clear_json(); } bibliotheque::using_set html_over_guichet::get_using_set() const { return wicket.get_using_set(); } void html_over_guichet::on_event(const string & event_name) { if(event_name == child_event) act(changed); else throw WEBDAR_BUG; } string html_over_guichet::inherited_get_body_part(const chemin & path, const request & req) { return get_body_part_from_all_children(path, req); } webdar-1.0.0/src/challenge.hpp0000644000175000017520000000432414773727242013143 00000000000000/*********************************************************************/ // webdar - a web server and interface program to libdar // Copyright (C) 2013-2025 Denis Corbin // // This file is part of Webdar // // Webdar is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // Webdar is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Webdar. If not, see // //---- // to contact the author: dar.linux@free.fr /*********************************************************************/ #ifndef CHALLENGE_HPP #define CHALLENGE_HPP #include "my_config.h" // C system header files extern "C" { } // C++ system header files // webdar headers #include "responder.hpp" #include "authentication.hpp" /// HTML responder driving the user authentication through the web interface class challenge: public responder { public: /// constructor /// /// \param[in] base points to the authentication base /// \note the base argument must survive this challenge object and is challenge(const std::shared_ptr & base); /// returns whether the request is authoritative /// /// \param[in] req the request to analyse /// \param[out] user the authenticated user for this request /// \return true when the request is authoritative and the set "user" to the name of the authenticated user /// \note the authoritativity is checked by the presence of the base64 encoded login/password /// in the HDR_AUTHORIZATION attribute found in the request bool is_an_authoritative_request(const request & req, std::string & user); /// to be used to answer a non authoritative request answer give_answer(const request & req); private: std::shared_ptr database; html_page page; html_text title; }; #endif webdar-1.0.0/src/date.hpp0000644000175000017520000000353614773727242012142 00000000000000/*********************************************************************/ // webdar - a web server and interface program to libdar // Copyright (C) 2013-2025 Denis Corbin // // This file is part of Webdar // // Webdar is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // Webdar is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Webdar. If not, see // //---- // to contact the author: dar.linux@free.fr /*********************************************************************/ #ifndef DATE_HPP #define DATE_HPP // C system header files #include "my_config.h" extern "C" { #if HAVE_TIME_H #include #endif #if HAVE_CTYPE_H #include #endif } // C++ system header files #include // webdar headers /// stores and manipulates date-time and its formatting to human representation class date { public: /// constructor, date'value is "now" date(); /// constructor, date is given in one of the following format /// /// \note RFC 1123, RFC 1036 or ANSI C's asctime() formats date(const std::string & when); /// returns date in RFC 1123 format std::string get_canonical_format() const; bool operator < (const date & ref) const; bool operator <= (const date & ref) const { return *this < ref || *this == ref; }; bool operator == (const date & ref) const; private: struct tm val; // date is stored as UTC }; #endif webdar-1.0.0/src/ssl_connexion.cpp0000644000175000017520000000520314773727242014072 00000000000000/*********************************************************************/ // webdar - a web server and interface program to libdar // Copyright (C) 2013-2025 Denis Corbin // // This file is part of Webdar // // Webdar is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // Webdar is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Webdar. If not, see // //---- // to contact the author: dar.linux@free.fr /*********************************************************************/ // C system header files #include "my_config.h" extern "C" { #if HAVE_ERRNO_H #include #endif #if HAVE_LIMITS_H #include #endif #if HAVE_STRING_H #include #endif #if HAVE_UNISTD_H #include #endif #if HAVE_FCNTL_H #include #endif } // webdar headers #include "ssl_connexion.hpp" using namespace std; ssl_connexion::ssl_connexion(int fd, SSL_CTX & ctx, const string & peerip, unsigned int peerport): connexion(fd, peerip, peerport) { ssl = SSL_new(&ctx); if(ssl == nullptr) throw exception_openssl(); if(! SSL_set_fd(ssl, fd)) throw exception_openssl(); (void)SSL_set_mode(ssl, SSL_MODE_AUTO_RETRY); // is set by default, but this does not hurt forcing this mode here if(!SSL_accept(ssl)) throw exception_openssl(); } ssl_connexion::~ssl_connexion() { SSL_free(ssl); } unsigned int ssl_connexion::read_impl(char *a, unsigned int size, bool blocking) { size_t lu = 0; int fd = SSL_get_fd(ssl); if(fd < 0) throw exception_openssl(); int flag = fcntl(fd, F_GETFL); if(blocking) fcntl(fd, F_SETFL, flag & ~O_NONBLOCK); else fcntl(fd, F_SETFL, flag | O_NONBLOCK); try { if(! SSL_read_ex(ssl, (void *)a, size, &lu)) throw exception_openssl(); } catch(...) { fcntl(fd, F_SETFL, flag); throw; } fcntl(fd, F_SETFL, flag); return (unsigned int)lu; } void ssl_connexion::write_impl(const char *a, unsigned int size) { size_t wrote = 0; size_t wrote_total = 0; while(wrote_total < size) { if(! SSL_write_ex(ssl, (void *)(a + wrote_total), size - wrote_total, &wrote)) throw exception_openssl(); else wrote_total += wrote; } } webdar-1.0.0/src/html_form.hpp0000644000175000017520000000635714775732651013222 00000000000000/*********************************************************************/ // webdar - a web server and interface program to libdar // Copyright (C) 2013-2025 Denis Corbin // // This file is part of Webdar // // Webdar is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // Webdar is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Webdar. If not, see // //---- // to contact the author: dar.linux@free.fr /*********************************************************************/ #ifndef HTML_FORM_HPP #define HTML_FORM_HPP // C system header files #include "my_config.h" extern "C" { } // C++ system header files // webdar headers #include "body_builder.hpp" #include "events.hpp" /// class html_form implements HTML form feature /// html_form object should adopt html_form_fieldset /// or directly html_form_input, html_datetime, html_form_radio /// or any more generally called html_form_field object /// Visually, html_form only shows a button to validate the change /// set by the user in the displayed form. The text of the button /// is given as argument of this class constructor class html_form : public body_builder, public events { public: static const std::string changed; html_form(const std::string & validate_msg = "send"); html_form(const html_form & ref) = default; html_form(html_form && ref) noexcept = delete; html_form & operator = (const html_form & ref) = default; html_form & operator = (html_form && ref) noexcept = delete; ~html_form() = default; /// encoding type for HTTP code generation ; "multipart/form-data" for example void set_enctype(const std::string & enc) { enctype = enc; }; /// clear css class for the form button (not for the whole form) /// \note for the whole form, use the usual clear_css_class() method inherited /// from body_builder class void clear_button_css_classes(); /// add css class for the form button (not for the whole form) /// \note for the whole form, use the usual add_css_class() method inherited /// from body_builder class void add_button_css_class(const std::string & name); /// return the button assigned css classes as inlined CSS, suitable to be added in a html marker /// \note the returned string if not empty is of the form: class=" ..." std::string get_button_css_classes() const; /// inherited from body_builder virtual void bind_to_anchor(const std::string & value) override { anchor_to = value; }; protected: /// inherited methods from body_builder virtual std::string inherited_get_body_part(const chemin & path, const request & req) override; private: std::string go_mesg; std::string enctype; std::set css_button_classes; std::string anchor_to; }; #endif webdar-1.0.0/src/html_form_overwrite_constant_action.cpp0000644000175000017520000001317415036444024020545 00000000000000/*********************************************************************/ // webdar - a web server and interface program to libdar // Copyright (C) 2013-2025 Denis Corbin // // This file is part of Webdar // // Webdar is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // Webdar is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Webdar. If not, see // //---- // to contact the author: dar.linux@free.fr /*********************************************************************/ // C system header files #include "my_config.h" extern "C" { } // C++ system header files #include // webdar headers #include "tooltip_messages.hpp" // #include "html_form_overwrite_constant_action.hpp" using namespace std; const string html_form_overwrite_constant_action::changed = "hfo_constant_action_changed"; html_form_overwrite_constant_action::html_form_overwrite_constant_action(): action_fs(""), data_action("Policy for Data"), ea_action("Policy for EA and FSA") { // components setup data_action.add_choice(data_preserve, data_preserve); data_action.add_choice(data_overwrite, data_overwrite); data_action.add_choice(data_preserve_saved, data_preserve_saved); data_action.add_choice(data_overwrite_saved, data_overwrite_saved); data_action.add_choice(data_remove, data_remove); data_action.add_choice(data_undefined, data_undefined); data_action.add_choice(data_ask, data_ask); ea_action.add_choice(ea_preserve, ea_preserve); ea_action.add_choice(ea_overwrite, ea_overwrite); ea_action.add_choice(ea_clear, ea_clear); ea_action.add_choice(ea_preserve_saved, ea_preserve_saved); ea_action.add_choice(ea_overwrite_saved, ea_overwrite_saved); ea_action.add_choice(ea_merge_preserve, ea_merge_preserve); ea_action.add_choice(ea_merge_overwrite, ea_merge_overwrite); ea_action.add_choice(ea_undefined, ea_undefined); ea_action.add_choice(ea_ask, ea_ask); // adoption tree adopt(&data_action); adopt(&ea_action); // events data_action.record_actor_on_event(this, html_form_select::changed); ea_action.record_actor_on_event(this, html_form_select::changed); register_name(changed); // css // tooltips data_action.set_tooltip(TOOLTIP_HFOCA_DATA); ea_action.set_tooltip(TOOLTIP_HFOCA_EA); } unique_ptr html_form_overwrite_constant_action::get_overwriting_action() const { unique_ptr ret; libdar::over_action_data act_data; libdar::over_action_ea act_ea; switch(data_action.get_selected_num()) { case 0: act_data = libdar::data_preserve; break; case 1: act_data = libdar::data_overwrite; break; case 2: act_data = libdar::data_preserve_mark_already_saved; break; case 3: act_data = libdar::data_overwrite_mark_already_saved; break; case 4: act_data = libdar::data_remove; break; case 5: act_data = libdar::data_undefined; break; case 6: act_data = libdar::data_ask; break; default: throw WEBDAR_BUG; } switch(ea_action.get_selected_num()) { case 0: act_ea = libdar::EA_preserve; break; case 1: act_ea = libdar::EA_overwrite; break; case 2: act_ea = libdar::EA_clear; break; case 3: act_ea = libdar::EA_preserve_mark_already_saved; break; case 4: act_ea = libdar::EA_overwrite_mark_already_saved; break; case 5: act_ea = libdar::EA_merge_preserve; break; case 6: act_ea = libdar::EA_merge_overwrite; break; case 7: act_ea = libdar::EA_undefined; break; case 8: act_ea = libdar::EA_ask; break; default: throw WEBDAR_BUG; } ret.reset(new (nothrow) libdar::crit_constant_action(act_data, act_ea)); if(!ret) throw exception_memory(); return ret; } void html_form_overwrite_constant_action::load_json(const json & source) { try { unsigned int version; string class_id; json config = unwrap_config_from_json_header(source, version, class_id); if(class_id != myclass_id) throw exception_range(libdar::tools_printf("Unexpected class_id in json data, found %s while expecting %s", class_id.c_str(), myclass_id)); if(version > format_version) throw exception_range(libdar::tools_printf("Json format version too hight for %s, upgrade your webdar software", myclass_id)); data_action.set_selected_id_with_warning(config.at(jlabel_data), jlabel_data); ea_action.set_selected_id_with_warning(config.at(jlabel_ea), jlabel_ea); } catch(json::exception & e) { throw exception_json(libdar::tools_printf("Error loading %s config", myclass_id), e); } } json html_form_overwrite_constant_action::save_json() const { json config; config[jlabel_data] = data_action.get_selected_id(); config[jlabel_ea] = ea_action.get_selected_id(); return wrap_config_with_json_header(format_version, myclass_id, config); } void html_form_overwrite_constant_action::clear_json() { data_action.set_selected_num(0); ea_action.set_selected_num(0); } void html_form_overwrite_constant_action::on_event(const string & event_name) { if(event_name == html_form_select::changed) act(changed); else throw WEBDAR_BUG; } webdar-1.0.0/src/html_fichier.hpp0000644000175000017520000000411014775733550013650 00000000000000/*********************************************************************/ // webdar - a web server and interface program to libdar // Copyright (C) 2013-2025 Denis Corbin // // This file is part of Webdar // // Webdar is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // Webdar is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Webdar. If not, see // //---- // to contact the author: dar.linux@free.fr /*********************************************************************/ #ifndef HTML_FICHIER_HPP #define HTML_FICHIER_HPP #include "my_config.h" // C system header files extern "C" { } // C++ system header files // webdar headers #include "body_builder.hpp" /// class html_fichier is a body_builder object that only shows if the request path is exactly its path class html_fichier: public body_builder { public: html_fichier() = default; html_fichier(const html_fichier & ref) = default; html_fichier(html_fichier && ref) noexcept = delete; html_fichier & operator = (const html_fichier & ref) = default; html_fichier & operator = (html_fichier && ref) noexcept = delete; ~html_fichier() = default; /// define the content to return upon request void set_data(const std::string & arg) { data = arg; }; /// clear content void clear() { data.clear(); }; /// whether some data is present bool is_empty() const { return data.empty(); }; protected: /// inherited from body_builder virtual std::string inherited_get_body_part(const chemin & path, const request & req) override { return data; }; private: std::string data; }; #endif webdar-1.0.0/src/html_slicing.cpp0000644000175000017520000002356115036452077013666 00000000000000/*********************************************************************/ // webdar - a web server and interface program to libdar // Copyright (C) 2013-2025 Denis Corbin // // This file is part of Webdar // // Webdar is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // Webdar is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Webdar. If not, see // //---- // to contact the author: dar.linux@free.fr /*********************************************************************/ // C system header files #include "my_config.h" extern "C" { } // C++ system header files #include // webdar headers #include "webdar_css_style.hpp" #include "tooltip_messages.hpp" // #include "html_slicing.hpp" using namespace std; const string html_slicing::changed = "html_slicing_changed"; html_slicing::html_slicing(): form_slicing("Update"), slicing_fs(""), slicing("Sliced archive", html_form_input::check, "", "", ""), // unchecked slice_size("Slice size", 1, "10"), different_first_slice("Specific size for first slice", html_form_input::check, "", "", ""), // unchecked first_slice_size("First slice size", 1, "10"), slice_permission("Slice permission (octal)", html_form_input::text, "", "", ""), slice_user_ownership("Slice user ownership", html_form_input::text, "", "", ""), slice_group_ownership("slice group ownership", html_form_input::text, "", "", ""), slice_min_digits("Minimum digits in slice file names", html_form_input::number, "0", "", "") { // component setup slice_size.set_min_only(60); first_slice_size.set_min_only(60); slice_min_digits.set_min_only(0); // adoption tree slicing_fs.adopt(&slice_permission); slicing_fs.adopt(&slice_user_ownership); slicing_fs.adopt(&slice_group_ownership); slicing_fs.adopt(&slice_min_digits); slicing_fs.adopt(&slicing); slicing_fs.adopt(&slice_size); slicing_fs.adopt(&different_first_slice); slicing_fs.adopt(&first_slice_size); form_slicing.adopt(&slicing_fs); adopt(&form_slicing); // events slicing.record_actor_on_event(this, html_form_input::changed); slice_size.record_actor_on_event(this, html_form_input_unit::changed); different_first_slice.record_actor_on_event(this, html_form_input::changed); first_slice_size.record_actor_on_event(this, html_form_input_unit::changed); slice_permission.record_actor_on_event(this, html_form_input::changed); slice_user_ownership.record_actor_on_event(this, html_form_input::changed); slice_group_ownership.record_actor_on_event(this, html_form_input::changed); slice_min_digits.record_actor_on_event(this, html_form_input::changed); register_name(changed); // css slicing.add_css_class(webdar_css_style::width_100vw_8em); different_first_slice.add_css_class(webdar_css_style::width_100vw_8em); slice_permission.add_css_class(webdar_css_style::width_100vw_8em); slice_user_ownership.add_css_class(webdar_css_style::width_100vw_8em); slice_group_ownership.add_css_class(webdar_css_style::width_100vw_8em); slice_min_digits.add_css_class(webdar_css_style::width_100vw_8em); // visibility & setup final touch clear_json(); // tooltips slicing.set_tooltip(TOOLTIP_HS_SLICING); slice_size.set_tooltip(TOOLTIP_HS_SLICE_SIZE); different_first_slice.set_tooltip(TOOLTIP_HS_FIRST_SLICE); first_slice_size.set_tooltip(TOOLTIP_HS_FIRST_SLICE_SIZE); slice_permission.set_tooltip(TOOLTIP_HS_PERMISSION); slice_user_ownership.set_tooltip(TOOLTIP_HS_USER); slice_group_ownership.set_tooltip(TOOLTIP_HS_GROUP); slice_min_digits.set_tooltip(TOOLTIP_HS_MIN_DIGITS); } void html_slicing::set_slicing(const libdar::infinint & x_slice_size, const libdar::infinint & x_first_slice_size) { if(x_slice_size.is_zero()) slicing.set_value_as_bool(false); else { slicing.set_value_as_bool(true); slice_size.set_value_as_infinint(x_slice_size); if(x_first_slice_size.is_zero()) different_first_slice.set_value_as_bool(false); else { different_first_slice.set_value_as_bool(true); first_slice_size.set_value_as_infinint(x_first_slice_size); } } } void html_slicing::set_permission(const string & perm) { slice_permission.set_value(perm); } void html_slicing::set_user_ownership(const string & username) { slice_user_ownership.set_value(username); } void html_slicing::set_group_ownership(const string & groupname) { slice_group_ownership.set_value(groupname); } void html_slicing::set_min_digits(const libdar::infinint & val) { slice_min_digits.set_value(libdar::deci(val).human()); } void html_slicing::get_slicing(libdar::infinint & x_slice_size, libdar::infinint & x_first_slice_size) const { if(slicing.get_value_as_bool()) { x_slice_size = slice_size.get_value_as_infinint(); if(different_first_slice.get_value_as_bool()) x_first_slice_size = first_slice_size.get_value_as_infinint(); else x_first_slice_size = 0; // first slice has the same size as other slice size } else { // no slicing (single file archive) x_slice_size = 0; x_first_slice_size = 0; } } libdar::infinint html_slicing::get_min_digits() const { libdar::infinint ret; try { ret = libdar::deci(slice_min_digits.get_value()).computer(); } catch(libdar::Edeci & e) { e.prepend_message("Error met while reading min digits value"); throw exception_libcall(e); } return ret; } string html_slicing::get_permission() const { return slice_permission.get_value(); } string html_slicing::get_user_ownership() const { return slice_user_ownership.get_value(); } string html_slicing::get_group_ownership() const { return slice_group_ownership.get_value(); } void html_slicing::load_json(const json & source) { try { unsigned int version; string class_id; json config = unwrap_config_from_json_header(source, version, class_id); if(class_id != myclass_id) throw exception_range(libdar::tools_printf("Unexpected class_id in json data, found %s while expecting %s", class_id.c_str(), myclass_id)); if(version > format_version) throw exception_range(libdar::tools_printf("Json format version too hight for %s, upgrade your webdar software", myclass_id)); slicing.set_value_as_bool(config.at(jlabel_slicing)); different_first_slice.set_value_as_bool(config.at(jlabel_diff_first)); slice_size.set_value_as_infinint(libdar::deci(config.at(jlabel_slice_size)).computer()); first_slice_size.set_value_as_infinint(libdar::deci(config.at(jlabel_first_slice_size)).computer()); slice_permission.set_value(config.at(jlabel_slice_permission)); slice_user_ownership.set_value(config.at(jlabel_user_owner)); slice_group_ownership.set_value(config.at(jlabel_group_owner)); slice_min_digits.set_value_as_int(config.at(jlabel_min_digits)); on_event(html_form_input::changed); } catch(json::exception & e) { throw exception_json(libdar::tools_printf("Error loading %s config", myclass_id), e); } } json html_slicing::save_json() const { json ret; ret[jlabel_slicing] = slicing.get_value_as_bool(); ret[jlabel_diff_first] = different_first_slice.get_value_as_bool(); ret[jlabel_slice_size] = libdar::deci(slice_size.get_value_as_infinint()).human(); ret[jlabel_first_slice_size] = libdar::deci(first_slice_size.get_value_as_infinint()).human(); ret[jlabel_slice_permission] = slice_permission.get_value(); ret[jlabel_user_owner] = slice_user_ownership.get_value(); ret[jlabel_group_owner] = slice_group_ownership.get_value(); ret[jlabel_min_digits] = slice_min_digits.get_value_as_int(); return wrap_config_with_json_header(format_version, myclass_id, ret); } void html_slicing::clear_json() { slicing.set_value_as_bool(false); slice_size.set_value_as_infinint(1024*1024*1024); different_first_slice.set_value_as_bool(false); first_slice_size.set_value_as_infinint(1024*1024*1024); slice_permission.set_value("0600"); slice_user_ownership.set_value(""); slice_group_ownership.set_value(""); slice_min_digits.set_value_as_int(3); on_event(html_form_input::changed); } void html_slicing::on_event(const string & event_name) { if(event_name == html_form_input::changed || event_name == html_form_input_unit::changed) { if(slicing.get_value_as_bool()) { slice_size.set_visible(true); different_first_slice.set_visible(true); if(different_first_slice.get_value_as_bool()) first_slice_size.set_visible(true); else first_slice_size.set_visible(false); } else // no slicing requested { slice_size.set_visible(false); different_first_slice.set_visible(false); first_slice_size.set_visible(false); } act(changed); } else throw WEBDAR_BUG; } void html_slicing::set_to_webdar_defaults() { clear_json(); } string html_slicing::inherited_get_body_part(const chemin & path, const request & req) { return get_body_part_from_all_children(path, req); } void html_slicing::css_classes_have_changed() { set css_classes = get_css_classes_as_a_set(); form_slicing.clear_css_classes(); for(set::iterator it = css_classes.begin(); it != css_classes.end(); ++it) form_slicing.add_css_class(*it); } void html_slicing::new_css_library_available() { unique_ptr & csslib = lookup_css_library(); if(!csslib) throw WEBDAR_BUG; webdar_css_style::update_library(*csslib); } webdar-1.0.0/src/saisie.cpp0000644000175000017520000005373515036452264012473 00000000000000/*********************************************************************/ // webdar - a web server and interface program to libdar // Copyright (C) 2013-2025 Denis Corbin // // This file is part of Webdar // // Webdar is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // Webdar is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Webdar. If not, see // //---- // to contact the author: dar.linux@free.fr /*********************************************************************/ // C system header files #include "my_config.h" extern "C" { } // C++ system header files #include // webdar headers #include "exceptions.hpp" #include "webdar_css_style.hpp" #include "tokens.hpp" #include "environment.hpp" #include "html_text.hpp" #include "tooltip_messages.hpp" // #include "saisie.hpp" using namespace std; const string saisie::event_closing = "saisie_closing"; const string saisie::event_restore = "saisie_restore"; const string saisie::event_compare = "saisie_compare"; const string saisie::event_test = "saisie_test"; const string saisie::event_list = "saisie_list"; const string saisie::event_summary = "saisie_summ"; const string saisie::event_create = "saisie_create"; const string saisie::event_isolate = "saisie_isolate"; const string saisie::event_merge = "saisie_merge"; const string saisie::event_repair = "saisie_repair"; const string saisie::changed_session_name = "saisie_changed_session_name"; const string saisie::event_disconn = "saisie_disconn"; const string saisie::event_download = "saisie_download"; const string saisie::css_class_text = "saisie_text"; const string saisie::menu_main = "main"; const string saisie::menu_restore = "restore"; const string saisie::menu_compare = "compare"; const string saisie::menu_test = "test"; const string saisie::menu_list = "list"; const string saisie::menu_create = "create"; const string saisie::menu_isolate = "isolate"; const string saisie::menu_merge = "merge"; const string saisie::menu_repair = "repair"; const string saisie::menu_biblio = "bibliotheque"; const string saisie::menu_sessions = "sessions"; const string saisie::menu_close = "close"; const string saisie::css_class_logo = "saisie_logo"; const string saisie::css_class_margin = "saisie_marge"; const string saisie::css_class_choice = "saisie_choice"; const string saisie::css_class_license = "saisie_license"; const string saisie::css_class_rightpan = "saisie_rightpan"; const string saisie::css_class_float_clear = "saisie_floatclear"; const string saisie::event_demo = "demo"; saisie::saisie(): archread(""), licensing((chemin(STATIC_PATH_ID) + chemin(STATIC_OBJ_LICENSING)).display(false), "Webdar is released under the GNU Public License v3"), session_name("Session name", html_form_input::text, "", "", webdar_css_style::width_60vw), about_fs(""), about_form("Change"), show_demo("Mini tuto", event_demo), webdar_logo((chemin(STATIC_PATH_ID) + chemin(STATIC_LOGO)).display(false), "Webdar logo"), go_extract("Restore", event_restore), go_compare("Compare", event_compare), go_test("Test", event_test), go_list("List", event_list), go_create("Create", event_create), go_isolate("Isolate", event_isolate), go_merge("Merge", event_merge), go_repair("Repair", event_repair) { status = st_idle; html_text title; // used to build static text content html_text text; // used to build static text content licensing.set_download(true); licensing.set_filename("webdar licensing.txt"); default_biblio_path = (chemin(global_envir.get_value_with_default("HOME", "/")) + chemin(".webdarrc")).display(); biblio.reset(new (nothrow) bibliotheque()); if(!biblio) throw exception_memory(); h_biblio.reset(new (nothrow) html_bibliotheque(biblio, default_biblio_path)); if(! h_biblio) throw exception_memory(); test.reset(new (nothrow) html_options_test()); if(! test) throw exception_memory(); create.set_biblio(biblio); archread.set_biblio(biblio); merge.set_biblio(biblio); isolate.set_biblio(biblio); compare.set_biblio(biblio); repair.set_biblio(biblio); extract.set_biblio(biblio); // test is treated differently because there is no (need of) html_archive_test class test->set_biblio(biblio); guichet_test.set_child(biblio, bibliotheque::conftest, test, false); if(biblio->has_config(bibliotheque::conftest, bibliotheque::default_config_name)) guichet_test.load_from_bibliotheque(bibliotheque::default_config_name); // disconnect adopt(&disco); // configuration of "choice" choice.add_entry("Main Page", menu_main); select.add_section(menu_main, ""); choice.add_entry("", ""); select.add_section("sep1", ""); choice.add_entry("Create", menu_create); select.add_section(menu_create, ""); choice.add_entry("Test", menu_test); select.add_section(menu_test, ""); choice.add_entry("Compare", menu_compare); select.add_section(menu_compare, ""); choice.add_entry("List", menu_list); select.add_section(menu_list, ""); choice.add_entry("Isolate", menu_isolate); select.add_section(menu_isolate, ""); choice.add_entry("Merge", menu_merge); select.add_section(menu_merge, ""); choice.add_entry("Repair", menu_repair); select.add_section(menu_repair, ""); choice.add_entry("Restore", menu_restore); select.add_section(menu_restore, ""); choice.add_entry("", ""); select.add_section("sep2", ""); choice.add_entry("Configure", menu_biblio); select.add_section(menu_biblio, ""); choice.add_entry("", ""); select.add_section("sep3", ""); choice.add_entry("Other Sessions", menu_sessions); select.add_section(menu_sessions, ""); choice.add_entry("", ""); select.add_section("sep4", ""); choice.add_entry("Close Session", menu_close); select.add_section(menu_close, ""); adopt(&choice); // Configuring archread right_pan.adopt(&archread); // configuration of the sub-pages brought by "select" // configuration of the about sub-page title.clear(); title.add_text(1,"WEBDAR"); around_licensing.adopt_static_html(title.get_body_part()); around_licensing.adopt(&webdar_logo); text.clear(); text.add_text(4,string("version ") + WEBDAR_VERSION); text.add_paragraph(); text.add_text(0, "by Denis CORBIN"); text.add_nl(); text.add_nl(); text.add_text(0, "to my parents"); text.add_nl(); text.add_text(0, "and my daughters"); text.add_nl(); text.add_text(0, "Capucine and Célestine"); text.add_nl(); text.add_paragraph(); around_licensing.adopt_static_html(text.get_body_part()); around_licensing.adopt(&licensing); around_licensing.adopt_static_html(html_text(0,"").add_paragraph().get_body_part()); select.adopt_in_section(menu_main, &around_licensing); about_fs.adopt(&session_name); about_form.adopt(&about_fs); select.adopt_in_section(menu_main, &about_form); select.adopt_in_section(menu_main, &demo); select.adopt_in_section(menu_main, &show_demo); // configuration of the restore sub-page select.adopt_in_section(menu_restore, &extract); select.adopt_in_section(menu_restore, &go_extract); // comparison sub-page select.adopt_in_section(menu_compare, &compare); select.adopt_in_section(menu_compare, &go_compare); // testing sub-page static const char* sect_test_params = "tparams"; test_params.add_section(sect_test_params, "Testing Options"); test_params.set_active_section(html_aiguille::noactive); test_params.adopt_in_section(sect_test_params, &guichet_test); select.adopt_in_section(menu_test, &test_params); select.adopt_in_section(menu_test, &go_test); // listing sub-page select.adopt_in_section(menu_list, &list_or_summ); select.adopt_in_section(menu_list, &go_list); // creation sub-page select.adopt_in_section(menu_create, &create); select.adopt_in_section(menu_create, &go_create); // isolation sub-page select.adopt_in_section(menu_isolate, &isolate); select.adopt_in_section(menu_isolate, &go_isolate); // merging sub-page select.adopt_in_section(menu_merge, &merge); select.adopt_in_section(menu_merge, &go_merge); //repair sub-page select.adopt_in_section(menu_repair, &repair); select.adopt_in_section(menu_repair, &go_repair); // configuration sub-page select.adopt_in_section(menu_biblio, h_biblio.get()); // other sessions sub_page // nothing to add "saisie" is not involved in that context // close section is put at the end of adoption tree for the close // confirmation popup (close) // to show over a complete rendered page /// configuration of "select" select.set_active_section(menu_main); right_pan.adopt(&select); adopt(&right_pan); // session close confirmation popup adopt(&close); // define the closing event for this register_name(event_closing); // attaching the "changed" event of the menu "choice" to "this" saisie object choice.record_actor_on_event(this); on_event(""); // manually triggering the event for the initial setup go_extract.record_actor_on_event(this, event_restore); go_compare.record_actor_on_event(this, event_compare); go_test.record_actor_on_event(this, event_test); go_list.record_actor_on_event(this, event_list); go_create.record_actor_on_event(this, event_create); go_isolate.record_actor_on_event(this, event_isolate); go_merge.record_actor_on_event(this, event_merge); go_repair.record_actor_on_event(this, event_repair); disco.record_actor_on_event(this, html_disconnect::event_disconn); if(! h_biblio) throw WEBDAR_BUG; else h_biblio->record_actor_on_event(this, html_bibliotheque::event_download); close.record_actor_on_event(this, html_yes_no_box::answer_yes); close.record_actor_on_event(this, html_yes_no_box::answer_no); session_name.set_change_event_name(changed_session_name); // using the same event name as the we one we will trigger upon session name change session_name.record_actor_on_event(this, changed_session_name); show_demo.record_actor_on_event(this, event_demo); // other event to register register_name(event_restore); register_name(event_compare); register_name(event_test); register_name(event_list); register_name(event_summary); register_name(event_create); register_name(event_isolate); register_name(event_merge); register_name(event_repair); register_name(changed_session_name); register_name(event_disconn); register_name(event_download); // visibility demo.set_visible(false); // css text.add_css_class(css_class_text); right_pan.add_css_class(css_class_rightpan); webdar_logo.add_css_class(css_class_text); webdar_logo.add_css_class(css_class_logo); about_form.add_css_class(css_class_float_clear); webdar_css_style::normal_button(go_extract); webdar_css_style::normal_button(go_compare); webdar_css_style::normal_button(go_test); webdar_css_style::normal_button(go_list); webdar_css_style::normal_button(go_create); webdar_css_style::normal_button(go_isolate); webdar_css_style::normal_button(go_merge); webdar_css_style::normal_button(go_repair); go_extract.add_css_class(webdar_css_style::float_right); go_compare.add_css_class(webdar_css_style::float_right); go_test.add_css_class(webdar_css_style::float_right); go_list.add_css_class(webdar_css_style::float_right); go_create.add_css_class(webdar_css_style::float_right); go_isolate.add_css_class(webdar_css_style::float_right); go_merge.add_css_class(webdar_css_style::float_right); go_repair.add_css_class(webdar_css_style::float_right); webdar_css_style::normal_button(test_params, true); choice.add_css_class(css_class_choice); around_licensing.add_css_class(css_class_license); select.add_css_class(css_class_margin); webdar_css_style::normal_button(show_demo); show_demo.add_css_class(webdar_css_style::float_right); // tooltips session_name.set_tooltip(TOOLTIP_S_SESSION); } string saisie::inherited_get_body_part(const chemin & path, const request & req) { chemin sub_path = path; string ret; if(!sub_path.empty()) sub_path.pop_front(); status = st_idle; ignore_body_changed_from_my_children(false); // now we can generate in return the whole HTML code for "this" object if(choice.get_current_tag() == menu_close) { // session is closing close.ask_question("Do you really want to close this session?", false); ret = html_page::inherited_get_body_part(path, req); } else { if(choice.get_current_tag() == menu_sessions) { // user asked to see session list ignore_body_changed_from_my_children(true); try { set_title(webdar_tools_get_title(get_session_name(), "Redirection to all sessions page")); set_refresh_redirection(0, "/"); /// we redirect to the root path -> a chooser object answers to this URL ret = html_page::inherited_get_body_part(path, req); choice.set_current_mode(choice.get_previous_mode()); // this is needed, else, when getting back to this session // we would be redirected again to the session listing // page. set_refresh_redirection(0, ""); // we also disable refresh for the next time we // get to this page to not redirect to the chooser. // Note: the change of refresh mode does not lead // to body change, as implemented in html_page. } catch(...) { ignore_body_changed_from_my_children(false); throw; } ignore_body_changed_from_my_children(false); } else { // normal display ret = html_page::inherited_get_body_part(path, req); } } if(status != st_idle) ignore_body_changed_from_my_children(true); // avoiding re-evaluation which is not need if status != st_idle // as an action has just been fired from us and re-evaluation // would reset the status to st_idle and would lose the nature // of the action we just fired. return ret; } void saisie::on_event(const string & event_name) { string propagated_event_name = event_name; if(event_name == html_menu::changed || event_name == html_form_input::changed || event_name == "") { // menu "choice" changed string tag_to_use = choice.get_current_tag(); if(choice.get_current_tag() == menu_close) tag_to_use = choice.get_previous_tag(); set_title(webdar_tools_get_title(get_session_name(), choice.get_current_label())); if(tag_to_use == menu_restore || choice.get_current_tag() == menu_compare || choice.get_current_tag() == menu_test || choice.get_current_tag() == menu_list || choice.get_current_tag() == menu_isolate || choice.get_current_tag() == menu_merge || choice.get_current_tag() == menu_repair) archread.set_visible(true); else archread.set_visible(false); select.set_active_section(tag_to_use); // not necessary to call my_body_part_has_changed() // as "choice" is adopted and will trigger my_body_part_has_changed() } else if(event_name == event_restore || event_name == event_compare || event_name == event_test || event_name == event_list || event_name == event_create || event_name == event_isolate || event_name == event_merge || event_name == event_repair) { if(event_name == event_restore) status = st_restore; else if(event_name == event_compare) status = st_compare; else if(event_name == event_test) status = st_test; else if(event_name == event_list) { if(list_or_summ.do_we_list()) status = st_list; else { propagated_event_name = event_summary; status = st_summary; } } else if(event_name == event_create) status = st_create; else if(event_name == event_isolate) status = st_isolate; else if(event_name == event_merge) status = st_merge; else if(event_name == event_repair) status = st_repair; else throw WEBDAR_BUG; act(propagated_event_name); // propagate the event to the subscribers // must not call my_body_part_has_changed()! // this would trigger the inherited_get_body_part() // which would reset the status to st_idle // and the user_interface thread (see go_test() for example) // would not be able to gather information from this saisie // object // In other words, the fact the status changed // does not change at all the output returned by // inherited_get_body_part() thus my_body_part_has_changed() // has not to be invoked. } else if(event_name == changed_session_name) { set_title(webdar_tools_get_title(get_session_name(), choice.get_current_label())); act(changed_session_name); // propagating the event my_body_part_has_changed(); } else if(event_name == html_disconnect::event_disconn) act(event_disconn); // propagate the event else if(event_name == html_bibliotheque::event_download) { if(!to_download) throw WEBDAR_BUG; if(!biblio) throw WEBDAR_BUG; try { to_download->set_data(biblio->save_json().dump()); } catch(json::exception & e) { throw exception_json(string("dumping configuration from json object: "), e); } act(event_download); } else if(event_name == html_yes_no_box::answer_yes) { act(event_closing); set_title(webdar_tools_get_title(get_session_name(), "Session closed")); set_refresh_redirection(0, "/"); } else if(event_name == html_yes_no_box::answer_no) { choice.set_current_mode(choice.get_previous_mode()); } else if(event_name == event_demo) { demo.set_visible(true); } else throw WEBDAR_BUG; } string saisie::get_archive_path() const { switch(status) { case st_idle: throw WEBDAR_BUG; case st_restore: case st_compare: case st_test: case st_list: case st_summary: case st_isolate: case st_repair: case st_merge: return archread.get_archive_path(); case st_create: return create.get_archive_path(); default: throw WEBDAR_BUG; } } string saisie::get_archive_basename() const { switch(status) { case st_idle: throw WEBDAR_BUG; case st_restore: case st_compare: case st_test: case st_list: case st_summary: case st_isolate: case st_repair: case st_merge: return archread.get_archive_basename(); case st_create: return create.get_archive_basename(); default: throw WEBDAR_BUG; } } libdar::archive_options_read saisie::get_read_options(shared_ptr dialog) const { if(status != st_restore && status != st_compare && status != st_test && status != st_list && status != st_summary && status != st_isolate && status != st_merge && status != st_repair) throw WEBDAR_BUG; return archread.get_read_options(dialog); } const string & saisie::get_fs_root() const { switch(status) { case st_idle: throw WEBDAR_BUG; case st_restore: return extract.get_fs_root(); case st_compare: return compare.get_fs_root(); case st_test: throw WEBDAR_BUG; case st_list: throw WEBDAR_BUG; case st_summary: throw WEBDAR_BUG; case st_create: return create.get_fs_root(); case st_isolate: throw WEBDAR_BUG; case st_merge: throw WEBDAR_BUG; case st_repair: throw WEBDAR_BUG; default: throw WEBDAR_BUG; } } const libdar::archive_options_extract saisie::get_extraction_options() const { if(status != st_restore) throw WEBDAR_BUG; return extract.get_options(); } const libdar::archive_options_diff saisie::get_comparison_options() const { if(status != st_compare) throw WEBDAR_BUG; return compare.get_options(); } const libdar::archive_options_test saisie::get_testing_options() const { if(status != st_test) throw WEBDAR_BUG; return test->get_options(); } libdar::archive_options_create saisie::get_creating_options(shared_ptr dialog) const { if(status != st_create) throw WEBDAR_BUG; return create.get_options_create(dialog); } libdar::archive_options_isolate saisie::get_isolating_options(shared_ptr dialog) const { if(status != st_isolate) throw WEBDAR_BUG; return isolate.get_options_isolate(dialog); } libdar::archive_options_merge saisie::get_merging_options(shared_ptr dialog) const { if(status != st_merge) throw WEBDAR_BUG; return merge.get_options_merge(dialog); } libdar::archive_options_repair saisie::get_repairing_options(shared_ptr dialog) const { return repair.get_options(dialog); } bool saisie::do_we_list() const { if(status != st_list && status != st_summary) throw WEBDAR_BUG; return list_or_summ.do_we_list(); } void saisie::new_css_library_available() { css tmp; unique_ptr & csslib = lookup_css_library(); if(!csslib) throw WEBDAR_BUG; webdar_css_style::update_library(*csslib); tmp.clear(); tmp.css_max_width("100%"); csslib->add(css_class_logo, tmp); tmp.clear(); tmp.css_margin_left("9.2em"); tmp.css_box_sizing(css::bx_border); csslib->add(css_class_rightpan, tmp); tmp.clear(); tmp.css_float(css::fl_left); csslib->add(css_class_choice, tmp); tmp.clear(); tmp.css_max_width("100%"); tmp.css_margin("2em"); tmp.css_text_h_align(css::al_center); csslib->add(css_class_license, tmp); tmp.clear(); tmp.css_text_h_align(css::al_center); tmp.css_margin("2em"); csslib->add(css_class_text, tmp); tmp.clear(); tmp.css_margin_left("9.4em"); csslib->add(css_class_margin, tmp); tmp.clear(); tmp.css_float_clear(css::fc_right); csslib->add(css_class_float_clear, tmp); } webdar-1.0.0/src/html_text.cpp0000644000175000017520000000363315035745131013213 00000000000000/*********************************************************************/ // webdar - a web server and interface program to libdar // Copyright (C) 2013-2025 Denis Corbin // // This file is part of Webdar // // Webdar is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // Webdar is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Webdar. If not, see // //---- // to contact the author: dar.linux@free.fr /*********************************************************************/ // C system header files #include "my_config.h" extern "C" { } // C++ system header files // webdar headers #include "webdar_tools.hpp" // #include "html_text.hpp" using namespace std; void html_text::add_text(unsigned int level, const string & text) { if(level == 0) txt += text + "\n"; // the \n is only inside html code, it does not show in the rendering else { string h = webdar_tools_convert_to_string(level); txt += "" + text + "\n"; } my_body_part_has_changed(); } string html_text::get_body_part() const { string css_val = get_css_classes(); if(css_val.empty()) return txt; else if(!txt.empty()) return "
" + txt + get_tooltip_body_part() + "
\n"; else return ""; } string html_text::inherited_get_body_part(const chemin & path, const request & req) { return get_body_part(); // our own method inherited from static_body_builder } webdar-1.0.0/src/html_web_user_interaction.hpp0000644000175000017520000003506214773727242016462 00000000000000/*********************************************************************/ // webdar - a web server and interface program to libdar // Copyright (C) 2013-2025 Denis Corbin // // This file is part of Webdar // // Webdar is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // Webdar is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Webdar. If not, see // //---- // to contact the author: dar.linux@free.fr /*********************************************************************/ #ifndef HTML_WEB_USER_INTERACTION_HPP #define HTML_WEB_USER_INTERACTION_HPP // C system header files #include "my_config.h" extern "C" { } // C++ system header files #include #include #include // webdar headers #include "body_builder.hpp" #include "events.hpp" #include "actor.hpp" #include "html_form_input.hpp" #include "html_form.hpp" #include "html_form_radio.hpp" #include "html_form_fieldset.hpp" #include "html_text.hpp" #include "html_button.hpp" #include "html_statistics.hpp" #include "web_user_interaction.hpp" /// body_builder component, providing an html interface to libdar::user_interaction /// adoption tree (= how the component show on the browser) /// /** \verbatim +-h_global----------------------------------+ | | | | |+-h_logs----------------------------------+| || h_warnings (libdar messages/warnings || |+-----------------------------------------+| |+-h_form----------------------------------+| ||+-h_inter-------------------------------+|| ||| h_inter_text (question from libdar) ||| ||| h_pause (radio button yes/no) ||| ||+---------------------------------------+|| ||+---------------------------------------+|| ||| h_get_string(string asked from libdar)||| ||+---------------------------------------+|| |+-----------------------------------------+| | | |+-----------------------------------------+| || stats (libdar::statistics) || |+-----------------------------------------+| | | | +-------+ +-------+ +-------+| | | ask | | force | |finish || | | close | | close | | || | +-------+ +-------+ +-------+| +-------------------------------------------+ \endverbatim **/ /// usage: once created, this component can be adopted from another body_builder /// /// The caller should use get_user_interaction() to provide a user interaction to a libthreadar::thread object /// for it can interact with the user thanks to this html_web_user_interaction but the caller should *not* /// run() the thread directly. Instead, the caller should invoke the run_and_control_thread() method passing /// the thread object to run as argument. /// /// the caller (code) can still access the thread object as usually except for the join() method which should /// not be called directly. While the thread is running, the (web) user can also interact with the thread, /// using the button that shows at the bottom of the component. Once the thread has finished, the component /// can automatically hide from the UI (auto_hide(true)) or stay visible until the user press the "finish" /// html_button. /// the caller (code) can register to the libdar_has_finished event to be notified when the thread /// has ended as detected by this html_web_user_interaction (for that its get_body_part() must be regularly /// invoked). This can be done by mean of page refresh, though, this is not always good to use, in particular /// when the user (web UI side) has to fill some html fields. For that reasons two additional events ///- can_refresh ///- dont_refresh /// are available and can be registered from the caller to avoid freshing the HTML page when it conflicts with /// the expected HTML behavior. /// /// Last, the caller (code) *can* call the join_controlled_thread(). /// This call is a substitute for the libthreadar::thread::join() which one must not be called directly. It will /// suspend the caller until the controlled thread has completed. Of course, this call can be run upon /// libdar_has_finished event reception, in which case join_controlled_thread() will return immediately. But /// at the difference of join() it will not rethrow exceptions, as this will be done by the html_web_user_interaction /// itself while asked to get_body_par() / inherited_get_body_part(). /// \note to communicate with a libdar thread, this class relies on a web_user_interaction /// objects that manages exclusive access (using mutex) to data structures provided and /// requested by libdar. class html_web_user_interaction: public body_builder, public actor, public events { public: // this class generates the following events: static const std::string display_started; ///< when the object has been set visible static const std::string can_refresh; ///< last changes makes the object html refreshable static const std::string dont_refresh; ///< last changes forbid html refresh static const std::string libdar_has_finished; ///< inform the caller that libdar has finished and user asked to close the "window" (or autohide was set) // class constructor assignment ops and destructors html_web_user_interaction(unsigned int x_warn_size = 25); html_web_user_interaction(const html_web_user_interaction & ref) = delete; html_web_user_interaction(html_web_user_interaction && ref) noexcept = delete; html_web_user_interaction & operator = (const html_web_user_interaction & ref) = delete; html_web_user_interaction & operator = (html_web_user_interaction && ref) noexcept = delete; ~html_web_user_interaction(); /// change the number of last warnings to display void set_warning_list_size(unsigned int size) { check_libdata(); lib_data->set_warning_list_size(size); }; /// inherited from actor virtual void on_event(const std::string & event_name) override; /// when the control thread has finished, this html_web_user_interaction object becomes invisible /// by default the object stays visible and user has to click on the "close" button to go forward /// \param[in] mode if set to true, no "close" button shows once the thread has complete /// \param[in] unless_interrupted if set to true and the thread has ended due to user request /// the autohide feature is disabled and a "close" button shows. void auto_hide(bool mode, bool unless_interrupted) { autohide = mode; hide_unless_interrupted = unless_interrupted; }; /// clear counters, logs and reset html interface and make the component become visible if it was not already /// \note this implies hide_statistics, but counters labels stay untouched. /// \warning this call should not be run when a thread has been given to run_and_control_thread() until /// the libdar_has_finished event occured. void clear(); /// libdar strcture provided for user interaction std::shared_ptr get_user_interaction() { check_libdata(); return lib_data; }; /// libdar structure provided for user information html_statistics & get_statistics() { stats.set_visible(true); return stats; }; /// hide statistics fields in the web interface /// \note get_statistics() unhides the field and it is hidden again, when calling clear() void hide_statistics() { stats.set_visible(false); }; /// provide a libdar thread to be managed by this html_web_component (stop actions) /// \param[in] arg is the thread to be managed, it must have been setup but not run() by the caller /// this method will run() the thread, monitor its liveness then join() it when it has completed. /// /// The caller can either register to the event libdar_has_finished to be informed when the thread /// will have completed or directly call join_controlled_thread() in which case it will be suspending /// for the thread to terminate. /// /// In case the controlled thread is interrupted by an exception, this exception is propagated to the /// controlling thread while the body_builder::get_body_part() / inherited_get_body_part() method is /// invoked. /// /// During the life of the thread, this body_builder component displays buttons to stop the /// provided thread, as well as the output of the get_user_interaction() returned component (which /// is a libdar::user_interaction object). /// /// \note the run_and_control_thread() method cannot be invoked while a thread is already managed /// by this object. /// /// \note, this is the duty of the caller to give to the thread as libdar::user_interaction /// the web_user_interaction object returned by the get_user_interaction() method, for libdar /// to also interact with the user (display message, ask questions), using this /// html_web_user_interaction. /// /// \note, the provided thread object is not memory-managed/allocated by this object, it must exist during /// the whole life of the object until it ends or is aborted void run_and_control_thread(libthreadar::thread* arg); /// let the calling thread suspended until the controlled thread ends (the one passed to run_and_control_thread()) /// unlike the join() call of libthreadar::thread that should always be called after run(), this /// method here, is only necessary if a parent thread needs to wait for a thread controlled by "this". /// This call does not propagate exception from the child thread, this is done from the get_body_part() /// of the html_web_user_interaction object. /// \note, join_controlled_thread() must not be called by the same thread that updates "this" component, by /// mean of [inherited_]get_body_part(), because this call could be suspended and the monitored thread /// status could not be updated, leading the join_controlled_thread() to never exit from suspension. void join_controlled_thread(); /// whether a libdar thread is running under "this" management bool is_libdar_running() const; /// whether libdar thread has been aborted (to be checked by the caller upon libdar_has_finished event) bool has_libdar_been_aborted() const { return was_interrupted; }; protected: /// inherited from body_builder, called by the webdar thread virtual std::string inherited_get_body_part(const chemin & path, const request & req) override; // inherited from body_builder virtual void new_css_library_available() override; // inherited from body_builder virtual void my_visibility_has_changed() override; private: static const std::string class_button; static const std::string class_web; static const std::string class_inter; // internal event names (assigned to control buttons and on which we registered) static const std::string ask_end_libdar; ///< ask_close button has been pressed (graceful ending requested) static const std::string force_end_libdar; ///< force_close button has been pressed (immediate ending requested) static const std::string close_libdar_screen; ///< finish button has been pressed enum mode_type { normal, ///< managed thread may be running (then managed_threads.empty() == false) end_asked, ///< thread pending graceful stop end_forced, ///< thread pending graceful immediate stop finished, ///< thread has finished, display kept for user to ack the status closed ///< user has acked the status or auto_hide was set }; // fields for exchange with libdar thread std::shared_ptr lib_data; // current display mode mode_type mode; ///< current mode of operation bool autohide; ///< if true the finish status leads the html component to become invisible bool hide_unless_interrupted; ///< disable autohide when thread ended due to user request bool was_interrupted; ///< whether user asked for thread cancellation or exception thrown within thread bool ignore_event; ///< if true the on_event() method does not take any action libthreadar::thread* managed_thread; // the thread object we manage (or nullptr if none is managed) mutable libthreadar::condition all_threads_pending; // body_builder fields html_form_radio h_pause; ///< shows when libdar request a yes/no decision from the user html_form_fieldset h_inter; ///< wraps h_pause and h_inter_text and is any visible when libdar request an information from the user html_text h_inter_text; ///< displays the question/request from libdar html_form_fieldset h_gtstr_fs;///< box arount h_get_string html_form_input h_get_string; ///< shows when libdar request a string answer from the user html_form h_form; ///< html_form for the previous/above html fields html_text h_warnings; ///< shows the list of warnings/message from libdar html_form_fieldset h_logs; ///< wraps the h_warnings html_form_fieldset h_global; ///< wraps the whole output from libdar (before stats ans buttons) html_statistics stats; ///< holds a libdar::statistics for progressive report of libdar operations on archives html_button ask_close; ///< button that shows to query libdar clean shutdown html_button force_close; ///< button that shows to query libdar immediate shutdown html_text helper_text; ///< shows when abortion requested but a question from libdar need an answer first html_button finish; ///< button that shows to let the user read last logs before closing void adjust_visibility(); void check_libdata() { if(!lib_data) throw WEBDAR_BUG; }; void set_mode(mode_type m); void update_html_from_libdar_status(); void update_controlled_thread_status(); ///< cleanup finished threads and trigger the finished mode if no more thread is running void clean_threads_termination(bool force); ///< ask for running threads to stop/abort/cancel forcibly or not void trigger_refresh(); ///< trigger event refresh or not for html_page actor void check_clean_status(); /// trigger exception if we have pending on controlled threads }; #endif webdar-1.0.0/src/html_form_gnupg_list.hpp0000644000175000017520000001052614773727242015444 00000000000000/*********************************************************************/ // webdar - a web server and interface program to libdar // Copyright (C) 2013-2025 Denis Corbin // // This file is part of Webdar // // Webdar is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // Webdar is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Webdar. If not, see // //---- // to contact the author: dar.linux@free.fr /*********************************************************************/ #ifndef HTML_FORM_GNUPG_LIST_HPP #define HTML_FORM_GNUPG_LIST_HPP // C system header files #include "my_config.h" extern "C" { } // C++ system header files // webdar headers #include "html_form_dynamic_table.hpp" #include "jsoner.hpp" #include "events.hpp" /// class html_form_gnupg_list provide interface for the user to give a list of gnupg signatories and gnupg recipients /// this html components is consitued of: /// /** \verbatim +---html_form_dynamic_table-----------------+-------+ | | | |+---------------------------------------+ |+-+ | || | || | del| |+---------------------------------------+ |+-+ | |+---------------------------------------+ |+-+ | || | || | del| |+---------------------------------------+ |+-+ | |+---------------------------------------+ |+-+ | || | || | del| |+---------------------------------------+ |+-+ | |+---------------------------------------+ |+-+ | || | || | del| |+---------------------------------------+ |+-+ | +-------------------------------------------+-------+ +------------+ | add entry | +------------+ \endverbatim **/ /// \note this component should adopted by an html_form directly /// or not (through an html_form_fieldset for example) /// class html_form_gnupg_list : public body_builder, public html_form_dynamic_table_object_provider, public jsoner, public events, public actor { public: static const std::string changed; html_form_gnupg_list(); html_form_gnupg_list(const html_form_gnupg_list & ref); html_form_gnupg_list(html_form_gnupg_list && ref) noexcept = delete; html_form_gnupg_list & operator = (const html_form_gnupg_list & ref) = delete; html_form_gnupg_list & operator = (html_form_gnupg_list && ref) noexcept = delete; ~html_form_gnupg_list() = default; /// return the recipient list filled by the webuser std::vector get_gnupg_recipients() const; /// return the list of signatories filled by the webuser std::vector get_gnupg_signatories() const; /// inherited from html_form_dynamic_table_object_provider virtual std::unique_ptr provide_object_of_type(unsigned int num, const std::string & context, std::string & changed_event) const override; /// inherited from jsoner virtual void load_json(const json & source) override; /// inherited from jsoner virtual json save_json() const override; /// inherited from jsoner virtual void clear_json() override; /// inherited from actor virtual void on_event(const std::string & event_name) override; protected: /// inherited methods from body_builder virtual std::string inherited_get_body_part(const chemin & path, const request & req) override; /// inherited from body_builder virtual void new_css_library_available() override; private: std::vector gather_content_of_type(unsigned int type) const; html_form_dynamic_table table; static constexpr const unsigned int format_version = 1; static constexpr const char* myclass_id = "html_form_gnupg_list"; static constexpr const char* jlabel_contents = "contents"; }; #endif webdar-1.0.0/src/jsoner.hpp0000644000175000017520000001124214775163414012513 00000000000000/*********************************************************************/ // webdar - a web server and interface program to libdar // Copyright (C) 2013-2025 Denis Corbin // // This file is part of Webdar // // Webdar is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // Webdar is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Webdar. If not, see // //---- // to contact the author: dar.linux@free.fr /*********************************************************************/ #ifndef JSONER_HPP #define JSONER_HPP // C system header files #include "my_config.h" extern "C" { } // C++ system header files #include #include #if HAVE_NLOHMANN_JSON_HPP #include #endif // webdar headers #include "exceptions.hpp" /// \file jsoner.hpp defines jsoner class and class exception_json using json = nlohmann::json; /// class exception_json /// cast exception from nlohmann::json library under the umbrella of our own exception types class exception_json: public exception_base { public: exception_json(const json::exception & e): exception_base(e.what()) {}; exception_json(const std::string & context, const json::exception & e): exception_base(context + ": " + e.what()) {}; exception_json(const std::string & s): exception_base(s) {}; virtual exception_base *clone() const override { return cloner((void *)this); }; }; /// class jsoner /// jsoner class is the base class of all others that /// are able to save their status and read their status /// from a json formated configuration. class jsoner { public: jsoner() = default; jsoner(const jsoner & ref) = default; jsoner(jsoner && ref) noexcept(false) = default; jsoner & operator = (const jsoner & ref) = default; jsoner & operator = (jsoner && ref) noexcept(false) = default; virtual ~jsoner() = default; /// setup the components from the json provided information /// \param[in] source json formated configuration to use for configuration /// \note exception exception_json should be throw if the /// provided data does not follow the expected structure virtual void load_json(const json & source) = 0; /// produce a json structure from the component configuration /// \return the current component configuration as a json object /// \note the json structure should contain: /// - a json format version /// - a json component identifier (name the class for example) /// - an arbitrary configuration under /// { "version": num, "id": "class name", "config": {...} } /// see the protected static methods that implement this. virtual json save_json() const = 0; /// instruct the object to get to its default/initial configuration virtual void clear_json() = 0; protected: /// given a version, class_id and configuration generates the global and common json structure /// \param[in] version define the expected field and structure of the config json parameter /// \param[in] class_id is expected to be the class name that implements the jsoner interface /// \param[in] config this is the resulting current configuration as a json object to be wrapped wil /// version and class_id. static json wrap_config_with_json_header(unsigned int version, const std::string & class_id, const json & config); /// from a given json global and common json structure split header parts and return the config part /// \param[in] source the global json configuration to apply to the current object /// \param[in] version the format and expected fields of the returned json configuration /// \param[in] class_id should match the name of the class this static method is used by /// \return inherited class specific data to apply to the current object following the format version 'version' /// \note may throw exception upon format error regarding expected json fields. static json unwrap_config_from_json_header(const json & source, unsigned int & version, std::string & class_id); static constexpr const char* jsoner_version_label = "version"; static constexpr const char* jsoner_id_label = "class_id"; static constexpr const char* jsoner_config_label = "config"; }; #endif webdar-1.0.0/src/archive_restore.hpp0000644000175000017520000000430215024331442014360 00000000000000/*********************************************************************/ // webdar - a web server and interface program to libdar // Copyright (C) 2013-2025 Denis Corbin // // This file is part of Webdar // // Webdar is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // Webdar is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Webdar. If not, see // //---- // to contact the author: dar.linux@free.fr /*********************************************************************/ #ifndef ARCHIVE_RESTORE_HPP #define ARCHIVE_RESTORE_HPP // C system header files #include "my_config.h" extern "C" { } // C++ system header files #include #include // webdar headers #include "html_web_user_interaction.hpp" #include "saisie.hpp" /// class archive_restore wraps libdar restoration operation in a dedicated thread class archive_restore : public libthreadar::thread_signal { public: archive_restore(); archive_restore(const archive_restore & ref) = delete; archive_restore(archive_restore && ref) noexcept = default; archive_restore & operator = (const archive_restore & ref) = delete; archive_restore & operator = (archive_restore && ref) noexcept = default; ~archive_restore() { cancel(); join(); }; void set_user_interaction(std::shared_ptr ref) { ui = ref; }; void set_parametrage(const saisie* x_param) { param = x_param; }; protected: /// inherited from class libthreadar::thread virtual void inherited_run() override; /// inherited from libthreadar::thread virtual void signaled_inherited_cancel() override; private: const saisie* param; std::shared_ptr ui; }; #endif webdar-1.0.0/src/html_form.cpp0000644000175000017520000000566014773727242013207 00000000000000/*********************************************************************/ // webdar - a web server and interface program to libdar // Copyright (C) 2013-2025 Denis Corbin // // This file is part of Webdar // // Webdar is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // Webdar is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Webdar. If not, see // //---- // to contact the author: dar.linux@free.fr /*********************************************************************/ // C system header files #include "my_config.h" extern "C" { } // C++ system header files // webdar headers // #include "html_form.hpp" using namespace std; const string html_form::changed = "form_changed"; html_form::html_form(const string & validate_msg): go_mesg(validate_msg), enctype("") { register_name(changed); } void html_form::clear_button_css_classes() { css_button_classes.clear(); my_body_part_has_changed(); } void html_form::add_button_css_class(const string & name) { if(css_button_classes.find(name) != css_button_classes.end()) throw exception_range(string("the css_class name to add is already present: ") + name); css_button_classes.insert(name); css_classes_have_changed(); my_body_part_has_changed(); } string html_form::get_button_css_classes() const { string ret; set::const_iterator it = css_button_classes.begin(); while(it != css_button_classes.end()) { if(!ret.empty()) ret += " "; ret += *it; ++it; } if(!ret.empty()) ret = "class=\"" + ret + "\""; return ret; } string html_form::inherited_get_body_part(const chemin & path, const request & req) { string ret = ""; uri cible(get_path().display()); if(!anchor_to.empty()) cible.set_anchor_to(anchor_to); ret += "
\n"; ret += "
\n"; return ret; } webdar-1.0.0/src/html_compression_params.cpp0000644000175000017520000002565615036423407016144 00000000000000/*********************************************************************/ // webdar - a web server and interface program to libdar // Copyright (C) 2013-2025 Denis Corbin // // This file is part of Webdar // // Webdar is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // Webdar is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Webdar. If not, see // //---- // to contact the author: dar.linux@free.fr /*********************************************************************/ // C system header files #include "my_config.h" extern "C" { } // C++ system header files #include // webdar headers #include "webdar_css_style.hpp" #include "tooltip_messages.hpp" // #include "html_compression_params.hpp" using namespace std; const string html_compression_params::changed = "html_compression_params_changed"; html_compression_params::html_compression_params(bool show_resave, bool show_min_size, bool show_keep_compressed): form_compr("Update"), compr_fs("Compression parameters"), compression("Compression algorithm"), compression_level("Compression level", html_form_input::number, "", "5", ""), min_compr_size("Minimum file sized compressed", default_min_compr_size, "30"), compression_block("Block compression for parallel compression (zero to zero to disable)", 0, "30"), compr_threads("Number of threads for parallel compression", html_form_input::number, "2", "5", ""), never_resave_uncompressed("Never resave uncompressed if compressed file took more place than uncompressed", html_form_input::check, "", "", ""), keep_compressed("Keep file compressed", html_form_input::check, "", "", ""), ignore_events(false), x_show_resave(show_resave), x_show_min_size(show_min_size) { // component setup compr_threads.set_min_only(1); compression.set_no_CR(); min_compr_size.set_min_only(0); // visibility if(! x_show_resave) never_resave_uncompressed.set_visible(false); if(! x_show_min_size) min_compr_size.set_visible(false); if(! show_keep_compressed) { keep_compressed.set_visible(false); keep_compressed.set_value_as_bool(false); // needed to have other fields // visible } // adoption tree compr_fs.adopt(&keep_compressed); compr_fs.adopt(&compression); compr_fs.adopt(&compression_level); compr_fs.adopt(&min_compr_size); compr_fs.adopt(&never_resave_uncompressed); compr_fs.adopt(&compression_block); compr_fs.adopt(&compr_threads); form_compr.adopt(&compr_fs); adopt(&form_compr); // events register_name(changed); compression.record_actor_on_event(this, html_compression::changed); keep_compressed.record_actor_on_event(this, html_form_input::changed); compression_block.record_actor_on_event(this, html_form_input_unit::changed); clear_json(); // to set the fields to their default values // this also trigger html_compression::changed event // wich setup the visibility of components // css compression_level.add_css_class(webdar_css_style::width_100vw_8em); never_resave_uncompressed.add_css_class(webdar_css_style::width_100vw_8em); compr_threads.add_css_class(webdar_css_style::width_100vw_8em); keep_compressed.add_css_class(webdar_css_style::width_100vw_8em); // tooltips compression.set_tooltip(TOOLTIP_HCP_COMPR); compression_level.set_tooltip(TOOLTIP_HCP_COMPR_LEVEL); min_compr_size.set_tooltip(TOOLTIP_HCP_MIN_COMPR); compression_block.set_tooltip(TOOLTIP_HCP_COMPR_BLOCK); never_resave_uncompressed.set_tooltip(TOOLTIP_HCP_NEVER_RESAVE); compr_threads.set_tooltip(TOOLTIP_HCP_THREADS); keep_compressed.set_tooltip(TOOLTIP_HCP_KEEP_COMPR); } void html_compression_params::load_json(const json & source) { try { unsigned int version; string class_id; json config = unwrap_config_from_json_header(source, version, class_id); if(class_id != myclass_id) throw exception_range(libdar::tools_printf("Unexpected class_id in json data, found %s while expecting %s", class_id.c_str(), myclass_id)); if(version > format_version) throw exception_range(libdar::tools_printf("Json format version too hight for %s, upgrade your webdar software", myclass_id)); // setting back the bool mode and mask_type selected value ignore_events = true; try { compression.set_selected_id_with_warning(config.at(jlabel_algo), jlabel_algo); compression_level.set_value_as_int(config.at(jlabel_level)); min_compr_size.set_value_as_infinint(libdar::deci(config.at(jlabel_min_compr_sz)).computer()); compression_block.set_value_as_infinint(libdar::deci(config.at(jlabel_compr_block)).computer()); never_resave_uncompressed.set_value_as_bool(config.at(jlabel_never_resave_uncompr)); compr_threads.set_value_as_int(config.at(jlabel_compr_threads)); keep_compressed.set_value_as_bool(config.at(jlabel_keep_compr)); if(!keep_compressed.get_visible() && keep_compressed.get_value_as_bool()) { clear_json(); throw exception_range("Error loading compression configuration, keep compression parameter is not applicable in that context"); } } catch(...) { ignore_events = false; throw; } ignore_events = false; on_event(html_form_input::changed); } catch(json::exception & e) { throw exception_json(libdar::tools_printf("Error loading %s config", myclass_id), e); } on_event(html_compression::changed); // this update component visibility and trigger the change event } json html_compression_params::save_json() const { json ret; // the following object field are not saved/restored as json // - show_resave // - show min_size // they stay local to the context the object is located in // However the values of the fieds they drive the visibility of: // - never_resave_uncompressed // - min_compr_size // are saved/restored as json ret[jlabel_algo] = compression.get_selected_id(); ret[jlabel_level] = compression_level.get_value_as_int(); ret[jlabel_min_compr_sz] = libdar::deci(min_compr_size.get_value_as_infinint()).human(); ret[jlabel_compr_block] = libdar::deci(compression_block.get_value_as_infinint()).human(); ret[jlabel_never_resave_uncompr] = never_resave_uncompressed.get_value_as_bool(); ret[jlabel_compr_threads] = compr_threads.get_value_as_int(); ret[jlabel_keep_compr] = keep_compressed.get_value_as_bool(); return wrap_config_with_json_header(format_version, myclass_id, ret); } void html_compression_params::clear_json() { compression.set_selected_num(7); compression_level.set_value_as_int(default_level); min_compr_size.set_value_as_infinint(libdar::infinint(default_min_compr_size)); compression_block.set_value_as_infinint(libdar::infinint(default_compression_block)); never_resave_uncompressed.set_value_as_bool(default_never_resave_uncompressed); compr_threads.set_value_as_int(default_compr_threads); keep_compressed.set_value_as_bool(default_keep_compressed); if(!keep_compressed.get_visible()) // we thus ignore the keep_compressed value loaded from json keep_compressed.set_value_as_bool(false); // this drives to get visible other components on_event(html_compression::changed); // this update component visibility and trigger the change event } void html_compression_params::on_event(const string & event_name) { if(ignore_events) return; if(event_name == html_compression::changed || event_name == html_form_input::changed || event_name == html_form_input_unit::changed) { if(keep_compressed.get_value_as_bool()) { compression.set_visible(false); compression_level.set_visible(false); min_compr_size.set_visible(false); compression_block.set_visible(false); never_resave_uncompressed.set_visible(false); compr_threads.set_visible(false); } else { compression.set_visible(true); switch(compression.get_value()) { case libdar::compression::none: compression_level.set_visible(false); compression.set_no_CR(false); if(x_show_min_size) min_compr_size.set_visible(false); compression_block.set_visible(false); if(x_show_resave) never_resave_uncompressed.set_visible(false); compr_threads.set_visible(false); break; case libdar::compression::lzo1x_1_15: case libdar::compression::lzo1x_1: compression.set_no_CR(false); compression_level.set_visible(false); if(x_show_min_size) min_compr_size.set_visible(true); compression_block.set_visible(true); if(x_show_resave) never_resave_uncompressed.set_visible(true); compr_threads.set_visible(true); break; case libdar::compression::gzip: case libdar::compression::bzip2: case libdar::compression::lzo: case libdar::compression::xz: case libdar::compression::zstd: case libdar::compression::lz4: compression.set_no_CR(true); compression_level.set_visible(true); if(compression.get_value() == libdar::compression::zstd) compression_level.set_range(1, 22); else compression_level.set_range(1, 9); if(x_show_min_size) min_compr_size.set_visible(true); compression_block.set_visible(true); if(x_show_resave) never_resave_uncompressed.set_visible(true); compr_threads.set_visible(true); break; default: throw WEBDAR_BUG; } if(compression_block.get_value_as_infinint() == 0) { compr_threads.set_value_as_int(1); compr_threads.set_enabled(false); } else { compr_threads.set_enabled(true); } } act(changed); } else throw WEBDAR_BUG; } void html_compression_params::set_to_webdar_defaults() { clear_json(); keep_compressed.set_value_as_bool(false); compression.set_value(libdar::compression::zstd); compression_level.set_value_as_int(9); min_compr_size.set_value_as_infinint(1024); never_resave_uncompressed.set_value_as_bool(false); } string html_compression_params::inherited_get_body_part(const chemin & path, const request & req) { return get_body_part_from_all_children(path, req); } void html_compression_params::css_classes_have_changed() { set css_classes = get_css_classes_as_a_set(); form_compr.clear_css_classes(); for(set::iterator it = css_classes.begin(); it != css_classes.end(); ++it) form_compr.add_css_class(*it); } void html_compression_params::new_css_library_available() { unique_ptr & csslib = lookup_css_library(); if(!csslib) throw WEBDAR_BUG; webdar_css_style::update_library(*csslib); } webdar-1.0.0/src/html_comparison_fields.cpp0000644000175000017520000000437714773727242015750 00000000000000/*********************************************************************/ // webdar - a web server and interface program to libdar // Copyright (C) 2013-2025 Denis Corbin // // This file is part of Webdar // // Webdar is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // Webdar is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Webdar. If not, see // //---- // to contact the author: dar.linux@free.fr /*********************************************************************/ // C system header files #include "my_config.h" extern "C" { } // C++ system header files // webdar headers // #include "html_comparison_fields.hpp" using namespace std; html_comparison_fields::html_comparison_fields() : html_form_select("Comparison field") { add_choice("all", "All fields"); add_choice("ignore_owner", "Ignore ownership"); add_choice("mtime", "Ignore ownership and permission"); add_choice("inode_type", "ignore all but inode type"); set_selected_num(0); } libdar::comparison_fields html_comparison_fields::get_value() const { switch(get_selected_num()) { case 0: return libdar::comparison_fields::all; case 1: return libdar::comparison_fields::ignore_owner; case 2: return libdar::comparison_fields::mtime; case 3: return libdar::comparison_fields::inode_type; default: throw WEBDAR_BUG; } } void html_comparison_fields::set_value(libdar::comparison_fields val) { switch(val) { case libdar::comparison_fields::all: set_selected_num(0); break; case libdar::comparison_fields::ignore_owner: set_selected_num(1); break; case libdar::comparison_fields::mtime: set_selected_num(2); break; case libdar::comparison_fields::inode_type: set_selected_num(3); break; default: throw WEBDAR_BUG; } } webdar-1.0.0/src/html_form_mask_expression.hpp0000644000175000017520000001347215044134642016472 00000000000000/*********************************************************************/ // webdar - a web server and interface program to libdar // Copyright (C) 2013-2025 Denis Corbin // // This file is part of Webdar // // Webdar is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // Webdar is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Webdar. If not, see // //---- // to contact the author: dar.linux@free.fr /*********************************************************************/ #ifndef HTML_FORM_MASK_EXPRESSION_HPP #define HTML_FORM_MASK_EXPRESSION_HPP // C system header files #include "my_config.h" extern "C" { } // C++ system header files #include #include // webdar headers #include "body_builder.hpp" #include "html_mask.hpp" #include "html_form_fieldset.hpp" #include "html_form_input.hpp" #include "html_form_select.hpp" #include "actor.hpp" #include "jsoner.hpp" #include "events.hpp" /// class html_form_mask_expression provide mean to setup libdar::mask component for filename filtering /// this html components is consitued of: /// /** \verbatim +----html_fieldset----------------------------------+ | | | mask type: +----------------+ | | |dropdown list | | | +----------------+ | | | | +--+ | | negate | | | | +--+ | | +--+ | | case sensit.| | | | +--+ | | | | mask expr. +----------------------------+ | | | input form | | | +----------------------------+ | +---------------------------------------------------+ \endverbatim **/ /// \note: this component does must have an html_form object /// as parent or ancestor for validation to be processed and /// changes to be recorded. Avoiding including the html_form /// in that component let it be part of more complex masks /// like *and* and *or* combinasons. class html_form_mask_expression : public body_builder, public html_mask, public actor, public jsoner, public events { public: // events static const std::string changed; // mask types static constexpr const char* type_glob = "glob"; static constexpr const char* type_regex = "regex"; /// constructor /// \param[in] subject is the name of the type of thing the filters will /// be applied to. This parameter is used in the synthesis string representing /// what the filter does: "{subject} matches the regular expression {regex}" html_form_mask_expression(const std::string & subject); html_form_mask_expression(const html_form_mask_expression & ref); html_form_mask_expression(html_form_mask_expression && ref) noexcept = delete; html_form_mask_expression & operator = (const html_form_mask_expression & ref) = delete; html_form_mask_expression & operator = (html_form_mask_expression && ref) noexcept = delete; ~html_form_mask_expression() = default; /// reset object to default void clear(); /// inherited from html_mask std::unique_ptr get_mask() const override; /// inherited from html_mask virtual bool is_relative() const override { return true; }; // always true as this is never a path expression /// inherited from actor virtual void on_event(const std::string & event_name) override; /// inherited from jsoner virtual void load_json(const json & source) override; /// inherited from jsoner virtual json save_json() const override; /// inherited from jsoner virtual void clear_json() override { clear(); }; /// manual setup for the type of mask (see type_glob and type_regex static fields above, maybe more in the future) void manually_set_mask_type(const std::string & mtype); /// manual setup for the mask negation (true = mask negation set) void manually_set_negate(bool mode); /// manual setup for the case sensitivity (true = case sensitive mask) void manually_set_casesensitivity(bool mode); /// manual setup for the mask expression void manually_set_expression(const std::string & expr); protected: /// inherited methods from body_builder virtual std::string inherited_get_body_part(const chemin & path, const request & req) override; /// inherited from body_builder virtual void new_css_library_available() override; private: bool ignore_events; std::string sujet; html_form_fieldset fs; html_form_select mask_type; html_form_input negate; html_form_input casesensitivity; html_form_input mask_expression; void init(); std::string tell_action() const; static constexpr const unsigned int format_version = 1; static constexpr const char* myclass_id = "html_form_mask_expression"; static constexpr const char* jlabel_mask_type = "type"; static constexpr const char* jlabel_negate = "negate"; static constexpr const char* jlabel_casesensit = "case-sentitive"; static constexpr const char* jlabel_expression = "mask"; }; #endif webdar-1.0.0/src/authentication.hpp0000644000175000017520000000565414775264705014251 00000000000000/*********************************************************************/ // webdar - a web server and interface program to libdar // Copyright (C) 2013-2025 Denis Corbin // // This file is part of Webdar // // Webdar is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // Webdar is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Webdar. If not, see // //---- // to contact the author: dar.linux@free.fr /*********************************************************************/ #ifndef AUTHENTICATION_HPP #define AUTHENTICATION_HPP // C system header files #include "my_config.h" extern "C" { } // C++ system header files #include // webdar headers /// pure virtual class defining the interface for current and future authentication methods class authentication { public: authentication() = default; authentication(const authentication & ref) = default; authentication(authentication && ref) noexcept = default; authentication & operator = (const authentication & ref) = default; authentication & operator = (authentication && ref) noexcept = default; virtual ~authentication() {}; virtual bool valid_credentials(const std::string & username, const std::string & credential) const = 0; }; /// place holder class for Unix PAM authentication (not implemented for now) class authentication_unix : public authentication { /// A IMPLEMENTER }; /// authentication_cli implements an authentication method based on a fixed login and password class authentication_cli : public authentication { public: authentication_cli(const std::string & username, const std::string & password) { user = username; pass = password; }; authentication_cli(const authentication_cli & ref) = default; authentication_cli(authentication_cli && ref) noexcept = default; authentication_cli & operator = (const authentication_cli & ref) = default; authentication_cli & operator = (authentication_cli && ref) noexcept = default; ~authentication_cli() = default; virtual bool valid_credentials(const std::string & username, const std::string & credential) const override { // due to different charset and encoding between CLI and web interface we compare // strings downgrading then to C strings: return (strcmp(username.c_str(),user.c_str()) == 0) && strcmp(credential.c_str(), pass.c_str()) == 0; }; // no need of mutex for this class private: std::string user; std::string pass; }; #endif webdar-1.0.0/src/server.hpp0000644000175000017520000001006014773727242012521 00000000000000/*********************************************************************/ // webdar - a web server and interface program to libdar // Copyright (C) 2013-2025 Denis Corbin // // This file is part of Webdar // // Webdar is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // Webdar is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Webdar. If not, see // //---- // to contact the author: dar.linux@free.fr /*********************************************************************/ #ifndef SERVER_HPP #define SERVER_HPP #include "my_config.h" // C++ system header files #include #include // webdar headers #include "parser.hpp" #include "central_report.hpp" #include "session.hpp" #include "authentication.hpp" #include "choose.hpp" #include "reference.hpp" /// class server for TCP session management /// thread object that read request from the provided proto_connexion, send them to the /// appropriated session, managing authentication and sending back the answer to the browser /// at the other end of the proto_connexion. /// \note relies on a parser object to split byte flow into structured requests, challenge object /// for authentication validation of requests, and session class to find and interrogate /// the proper session. Server are spaws when an new TCP connection is received, while sessions /// objects stay alive accross TCP connections and are tear down on by user action on through the web /// interface. class server: public libthreadar::thread_signal, public reference // this inheritance is used to notify server_pool objects { public: server(const std::shared_ptr & creport, const std::shared_ptr & auth, std::unique_ptr & source); server(const server & ref) = delete; server(server && ref) noexcept = delete; server & operator = (const server & ref) = delete; server & operator = (server && ref) noexcept = delete; ~server() { cancel(); join(); }; /// used by another server to ask this object to release the session it uses void release_session() { can_keep_session = false; }; // no need of mutex here, several concurrent call will lead to the same result. /// wether to emulate user logout while using basic authentication (see also class html_disconnect) static void force_disconnection_at_end_of_session(bool val) { default_basic_auth = ! val; }; protected: /// inherited from libthreadar::thread virtual void inherited_run() override; // no need to override thread::signaled_inherited_cancel(); private: enum auth_consideration { ignore_auth_redir, ///< user has just disconnected and will be redirected to steady page ignore_auth_steady, ///< user has to be redirected to the steady page no_ignore ///< user has authenticated and can access webdar }; parser src; ///< this object manages the given proto_connexion in constructor std::shared_ptr rep; ///< where do logs should go std::shared_ptr authsrc; ///< object to consult for user authentications bool can_keep_session; ///< whether another object asked interacting with the session we use session* locked_session; ///< the current session we use (we have acquired its mutex) auth_consideration ignore_auth; ///< how to consider authentication info in request void end_all_peers(); static bool default_basic_auth; ///< if true, no disconnection is provided (unless browser is restarted) }; #endif webdar-1.0.0/src/html_options_test.hpp0000644000175000017520000001041114773727242014771 00000000000000/*********************************************************************/ // webdar - a web server and interface program to libdar // Copyright (C) 2013-2025 Denis Corbin // // This file is part of Webdar // // Webdar is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // Webdar is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Webdar. If not, see // //---- // to contact the author: dar.linux@free.fr /*********************************************************************/ #ifndef HTML_OPTIONS_TEST_HPP #define HTML_OPTIONS_TEST_HPP // C system header files #include "my_config.h" extern "C" { } // C++ system header files #include // webdar headers #include "body_builder.hpp" #include "actor.hpp" #include "html_form.hpp" #include "html_form_fieldset.hpp" #include "html_form_input.hpp" #include "html_derouleur.hpp" #include "html_mask_form_filename.hpp" #include "html_mask_form_path.hpp" #include "guichet.hpp" #include "jsoner.hpp" #include "bibliotheque_subconfig.hpp" #include "events.hpp" /// html component for the user to provide parameters of libdar archive testing operation class html_options_test : public body_builder, public actor, public jsoner, public bibliotheque_subconfig, public events { public: static const std::string changed; html_options_test(); html_options_test(const html_options_test & ref) = delete; html_options_test(html_options_test && ref) noexcept = delete; html_options_test & operator = (const html_options_test & ref) = delete; html_options_test & operator = (html_options_test && ref) noexcept = delete; ~html_options_test() = default; /// mandatory call to invoke ASAP after constructor void set_biblio(const std::shared_ptr & ptr); /// extract component info as an option set for libdar libdar::archive_options_test get_options() const; /// inherited from jsoner virtual void load_json(const json & source) override; /// inherited from jsoner virtual json save_json() const override; /// inherited from jsoner virtual void clear_json() override; /// inherited from biblioteque_subconfig virtual bibliotheque::using_set get_using_set() const override; /// inherited from actor virtual void on_event(const std::string & event_name) override; /// set the object to webdar defaults void set_to_webdar_defaults(); protected: // inherited from bdy_builder virtual std::string inherited_get_body_part(const chemin & path, const request & req) override; // inherited from bdy_builder virtual void new_css_library_available() override; private: bool ignore_events; html_derouleur deroule; html_form form; html_form_fieldset fs; html_form_input empty; html_form form_show; html_form_fieldset fs_show; html_form_input info_details; html_form_input display_treated; html_form_input display_treated_only_dir; html_form_input display_skipped; guichet guichet_filename_mask; std::shared_ptr filename_mask; guichet guichet_path_mask; std::shared_ptr path_mask; void reset_non_pointer_fields(); void trigger_change(); static constexpr const unsigned int format_version = 1; static constexpr const char* myclass_id = "html_options_test"; static constexpr const char* jlabel_dry_run = "dry-run"; static constexpr const char* jlabel_info_details = "info-details"; static constexpr const char* jlabel_disp_treated = "display-treated"; static constexpr const char* jlabel_disp_only_dir = "display-only-dirs"; static constexpr const char* jlabel_disp_skipped = "display-skipped"; static constexpr const char* jlabel_file_mask = "file-mask"; static constexpr const char* jlabel_path_mask = "path-mask"; }; #endif webdar-1.0.0/src/user_interface.cpp0000644000175000017520000003460014773727242014212 00000000000000/*********************************************************************/ // webdar - a web server and interface program to libdar // Copyright (C) 2013-2025 Denis Corbin // // This file is part of Webdar // // Webdar is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // Webdar is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Webdar. If not, see // //---- // to contact the author: dar.linux@free.fr /*********************************************************************/ // C system header files #include "my_config.h" extern "C" { } // C++ system header files // webdar headers #include "tokens.hpp" #include "exceptions.hpp" // #include "user_interface.hpp" using namespace std; const string user_interface::closing = "user_interface_closing"; user_interface::user_interface() { sessname = ""; mode = config; mode_changed = false; close_requested = false; disconnect_req = false; data.reset(new (nothrow) html_fichier()); if(!data) throw exception_memory(); parametrage.set_data_place(data); /// messages receved from saisie object named parametrage parametrage.record_actor_on_event(this, saisie::event_closing); parametrage.record_actor_on_event(this, saisie::event_restore); parametrage.record_actor_on_event(this, saisie::event_compare); parametrage.record_actor_on_event(this, saisie::event_test); parametrage.record_actor_on_event(this, saisie::event_list); parametrage.record_actor_on_event(this, saisie::event_summary); parametrage.record_actor_on_event(this, saisie::event_create); parametrage.record_actor_on_event(this, saisie::event_isolate); parametrage.record_actor_on_event(this, saisie::event_merge); parametrage.record_actor_on_event(this, saisie::event_repair); parametrage.record_actor_on_event(this, saisie::changed_session_name); parametrage.record_actor_on_event(this, saisie::event_disconn); parametrage.record_actor_on_event(this, saisie::event_download); /// messages received from html_libdar_running object named in_action in_action.record_actor_on_event(this, html_libdar_running_page::libdar_has_finished); /// messages received from html_error object named in_error; in_error.record_actor_on_event(this, html_error::acknowledged); /// messages received from html_listring_page object named in_list in_list.record_actor_on_event(this, html_listing_page::event_close); in_summ.record_actor_on_event(this, html_summary_page::event_close); current_thread = nullptr; /// create the events that this object is willing to generate register_name(closing); } user_interface::~user_interface() { if(is_libdar_running()) { if(current_thread != nullptr) { if(current_thread->is_running()) current_thread->cancel(); current_thread->join(); // this later call may propagate exceptions current_thread = nullptr; } } } answer user_interface::give_answer(const request & req) { answer ret; ret.set_status(STATUS_CODE_OK); ret.set_reason("ok"); do { mode_changed = false; try { switch(mode) { case config: ret.add_body(parametrage.get_body_part(req.get_uri().get_path(), req)); if(mode == download) { try { ret.clear(); ret.set_status(STATUS_CODE_OK); ret.set_reason("ok"); if(!data) throw WEBDAR_BUG; ret.add_body(data->get_body_part(req.get_uri().get_path(), req)); data->clear(); } catch(...) { mode = config; throw; } mode = config; } break; case listing: ret.add_body(in_list.get_body_part(req.get_uri().get_path(), req)); break; case summary: ret.add_body(in_summ.get_body_part(req.get_uri().get_path(), req)); break; case listing_open: case summary_open: case running: ret.add_body(in_action.get_body_part(req.get_uri().get_path(), req)); break; case error: ret.add_body(in_error.get_body_part(req.get_uri().get_path(), req)); break; case download: throw WEBDAR_BUG; // this mode should be transitional from config default: throw WEBDAR_BUG; } } catch(exception_bug & e) { throw; } catch(libthreadar::exception_base & e) { if(mode == error) throw; // cannot handle an exception in error mode return_mode = mode; mode = error; mode_changed = true; in_error.set_message(e.get_message(": ")); } catch(exception_base & e) { if(mode == error) throw; // cannot handle an exception in error mode return_mode = mode; mode = error; mode_changed = true; in_error.set_message(e.get_message()); } } while(mode_changed); return ret; } void user_interface::on_event(const string & event_name) { if(event_name == saisie::event_closing) { switch(mode) { case config: act(closing); // transmetting the event break; case listing_open: throw WEBDAR_BUG; case summary_open: throw WEBDAR_BUG; case listing: throw WEBDAR_BUG; case summary: throw WEBDAR_BUG; case running: throw WEBDAR_BUG; case error: throw WEBDAR_BUG; case download: throw WEBDAR_BUG; default: throw WEBDAR_BUG; } } else if(event_name == html_libdar_running_page::libdar_has_finished) { current_thread = nullptr; switch(mode) { case config: throw WEBDAR_BUG; case listing_open: case summary_open: mode_changed = true; if(! in_action.has_libdar_been_aborted()) { switch(mode) { case listing_open: mode = listing; in_list.set_source(&arch_init_list); break; case summary_open: mode = summary; in_summ.set_source(&arch_init_list); break; default: throw WEBDAR_BUG; } } else { arch_init_list.close_archive(); mode = config; } break; case listing: throw WEBDAR_BUG; case summary: throw WEBDAR_BUG; case running: mode_changed = true; mode = config; break; case error: throw WEBDAR_BUG; default: throw WEBDAR_BUG; } } else if(event_name == saisie::event_restore || event_name == saisie::event_compare || event_name == saisie::event_test || event_name == saisie::event_create || event_name == saisie::event_isolate || event_name == saisie::event_list || event_name == saisie::event_summary || event_name == saisie::event_merge || event_name == saisie::event_repair) { if(mode != config) throw WEBDAR_BUG; if(event_name == saisie::event_list) mode = listing_open; else if(event_name == saisie::event_summary) mode = summary_open; else mode = running; in_action.get_html_user_interaction()->clear(); mode_changed = true; try { if(event_name == saisie::event_restore) go_restore(); else if(event_name == saisie::event_compare) go_diff(); else if(event_name == saisie::event_test) go_test(); else if(event_name == saisie::event_create) go_create(); else if(event_name == saisie::event_isolate) go_isolate(); else if(event_name == saisie::event_merge) go_merge(); else if(event_name == saisie::event_list || event_name == saisie::event_summary) go_init_list(); else if(event_name == saisie::event_repair) go_repair(); else throw WEBDAR_BUG; } catch(exception_bug & e) { throw; } catch(...) { mode = config; mode_changed = true; throw; } } else if(event_name == html_error::acknowledged) { if(return_mode != listing && return_mode != summary) mode = return_mode; else mode = config; mode_changed = true; } else if(event_name == saisie::changed_session_name) set_session_name(parametrage.get_session_name()); else if(event_name == html_listing_page::event_close) { if(mode != listing) throw WEBDAR_BUG; if(!arch_init_list.opened()) throw WEBDAR_BUG; in_list.clear(); arch_init_list.close_archive(); mode = config; mode_changed = true; } else if(event_name == html_summary_page::event_close) { if(mode != summary) throw WEBDAR_BUG; if(!arch_init_list.opened()) throw WEBDAR_BUG; in_summ.clear(); arch_init_list.close_archive(); mode = config; mode_changed = true; } else if(event_name == saisie::event_disconn) { disconnect_req = true; } else if(event_name == saisie::event_download) { mode = download; } else throw WEBDAR_BUG; // what's that event !?! } string user_interface::get_session_name() const { string ret; mut_sessname.lock(); try { ret = sessname; } catch(...) { mut_sessname.unlock(); throw; } mut_sessname.unlock(); return ret; }; void user_interface::set_session_name(const string & name) { mut_sessname.lock(); try { sessname = name; } catch(...) { mut_sessname.unlock(); throw; } mut_sessname.unlock(); // no need to be protected by mutex for // the following operation as they only // concern private fields for that object // that are not visible by any other thread in_action.set_session_name(name); in_error.set_session_name(name); in_list.set_session_name(name); in_summ.set_session_name(name); // note, parametrage is already set with the new session name // the session name is filled by the user using the saisie class (parametrage) // which update itself and triggers the event "saisie::changed_session_name" // for which the session object is registered and call this method to update // other components } void user_interface::prefix_has_changed() { parametrage.set_prefix(get_prefix()); in_action.set_prefix(get_prefix()); in_error.set_prefix(get_prefix()); in_list.set_prefix(get_prefix()); in_summ.set_prefix(get_prefix()); // by the way the prefix is also the session ID used as initial session name if(parametrage.get_session_name() == "") { // so if the session name has not been set // we set it to the prefix parametrage.set_session_name(get_prefix().display(true)); // this has the effect to put the default // value in the html_form_input field // but does not modify the title of pages for // the session. } } void user_interface::go_restore() { if(in_action.is_libdar_running()) throw WEBDAR_BUG; if(current_thread != nullptr) throw WEBDAR_BUG; // providing libdar::parameters arch_rest.set_user_interaction(get_html_user_interaction()); arch_rest.set_parametrage(&get_parametrage()); // launching libdar in a separated thread current_thread = & arch_rest; if(current_thread->is_running()) throw WEBDAR_BUG; in_action.run_and_control_thread(current_thread); } void user_interface::go_diff() { if(in_action.is_libdar_running()) throw WEBDAR_BUG; if(current_thread != nullptr) throw WEBDAR_BUG; // providing libdar::parameters arch_diff.set_user_interaction(get_html_user_interaction()); arch_diff.set_parametrage(&get_parametrage()); // launching libdar in a separated thread current_thread = & arch_diff; if(current_thread->is_running()) throw WEBDAR_BUG; in_action.run_and_control_thread(current_thread); } void user_interface::go_test() { if(is_libdar_running()) throw WEBDAR_BUG; if(current_thread != nullptr) throw WEBDAR_BUG; // providing libdar::parameters arch_test.set_user_interaction(get_html_user_interaction()); arch_test.set_parametrage(&get_parametrage()); // launching libdar in a separated thread current_thread = & arch_test; if(current_thread->is_running()) throw WEBDAR_BUG; in_action.run_and_control_thread(current_thread); } void user_interface::go_create() { if(is_libdar_running()) throw WEBDAR_BUG; if(current_thread != nullptr) throw WEBDAR_BUG; // providing libdar::parameters arch_create.set_user_interaction(get_html_user_interaction()); arch_create.set_parametrage(&get_parametrage()); // launching libdar in a separated thread current_thread = & arch_create; if(current_thread->is_running()) throw WEBDAR_BUG; in_action.run_and_control_thread(current_thread); } void user_interface::go_isolate() { if(is_libdar_running()) throw WEBDAR_BUG; if(current_thread != nullptr) throw WEBDAR_BUG; // providing libdar::parameters arch_isolate.set_user_interaction(get_html_user_interaction()); arch_isolate.set_parametrage(&get_parametrage()); // launching libdar in a separated thread current_thread = & arch_isolate; if(current_thread->is_running()) throw WEBDAR_BUG; current_thread->join(); // in case a previous execution triggered an exception in_action.run_and_control_thread(current_thread); } void user_interface::go_merge() { if(is_libdar_running()) throw WEBDAR_BUG; if(current_thread != nullptr) throw WEBDAR_BUG; // providing libdar::parameters arch_merge.set_user_interaction(get_html_user_interaction()); arch_merge.set_parametrage(&get_parametrage()); // launching libdar in a separated thread current_thread = & arch_merge; if(current_thread->is_running()) throw WEBDAR_BUG; in_action.run_and_control_thread(current_thread); } void user_interface::go_init_list() { if(is_libdar_running()) throw WEBDAR_BUG; if(current_thread != nullptr) throw WEBDAR_BUG; // providing libdar::parameters arch_init_list.set_user_interaction(get_html_user_interaction()); arch_init_list.set_parametrage(&get_parametrage()); // launching libdar in a separated thread current_thread = & arch_init_list; if(current_thread->is_running()) throw WEBDAR_BUG; in_action.run_and_control_thread(current_thread); } void user_interface::go_repair() { if(is_libdar_running()) throw WEBDAR_BUG; if(current_thread != nullptr) throw WEBDAR_BUG; // providing libdar::parameters arch_repair.set_user_interaction(get_html_user_interaction()); arch_repair.set_parametrage(&get_parametrage()); // launching libdar in a separated thread current_thread = & arch_repair; if(current_thread->is_running()) throw WEBDAR_BUG; in_action.run_and_control_thread(current_thread); } webdar-1.0.0/src/tooltip_messages.hpp0000644000175000017520000012723015042201041014552 00000000000000/*********************************************************************/ // webdar - a web server and interface program to libdar // Copyright (C) 2013-2025 Denis Corbin // // This file is part of Webdar // // Webdar is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // Webdar is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Webdar. If not, see // //---- // to contact the author: dar.linux@free.fr /*********************************************************************/ #ifndef TOOLTIPS_MESSAGES_HPP #define TOOLTIPS_MESSAGES_HPP // C system header files #include "my_config.h" extern "C" { } // C++ system header files // webdar headers // common messages #define TOOLTIP_COMMON_INFO_DETAILS "Show information about the archive layer creation, slicing generation, but nothing about the treated files and directories" #define TOOLTIP_COMMON_DISPLAY_SKIPPED "Display files that have been excluded from the operation. If a directory is excluded from the backup, all its content is excluded and nothing is reported further about that directory and its content" #define TOOLTIP_COMMON_DISPLAY_TREATED "Display information about files an directories while they are treated" #define TOOLTIP_COMMON_DISPLAY_ONLY_DIR "Restrict the information about the treated directories only, a line is displayed when the backup process enters each directory" #define TOOLTIP_COMMON_FURTIVE_READ "Reading a file modifies the last access time, or if after reading it, the last access time (atime) is set back to the value it has before the file was read, the system changes the last change time (ctime) which cannot be modified from an application, like Webdar. Linux system provides a privileged mode to access a file without modifying neither atime nor ctime. Webdar must be root or have the proper capability set to activate this mode. If activation failed, Webdar will default to the mode you chose (modifying atime is the most common setting)" #define TOOLTIP_COMMON_ZEROING_DATE "Some file systems support negative dates, which means dates before year 1970. Webdar cannot handle such negative dates, but can consider these as zero, which corresponds to the end of the last second of year 1969" #define TOOLTIP_COMMON_HOURSHIFT "On some systems (mainly under Windows) the daylight saving time is performed by modifying file dates, not just the way the clock is displayed on the system. This leads to save files that have not changed when passing to or from summer time. If set to 1 or more, a file will not be considered to have changed if only its date changed and by an exact number of hours" #define TOOLTIP_COMMON_WTC "How to consider a file has changed" #define TOOLTIP_COMMON_EMPTY "Perform the operation but send the generated backup bytes into black hole, leading no backup to be created at all, though you can get messages from the file system reading process and Webdar filter mechanisms" #define TOOLTIP_COMMON_ALLOW_OVER "If unchecked, this prevents Webdar to overwrite slices of a previous backup having the same name, else unless disabled below, a warning and confirmation request is issued before overwriting" #define TOOLTIP_COMMON_WARN_OVER "Warn and ask for confirmation before overwriting slices of an existing backup using the same name as the one we are about to create" #define TOOLTIP_COMMON_PAUSE "Pause Webdar after each 'N' slice, a confirmation is then asked to continue the operation for the next N slices before pausing again. The objective of that feature was to treat the generated slices like transferring them through the network or at earlier time to burn it or them to a CD or DVD disc" #define TOOLTIP_COMMON_USER_COMMENT "This field is available for the user to add any information but pay attention, this information is stored in clear in the backup header even if the backup is ciphered" #define TOOLTIP_COMMON_HASH_ALGO "With this option a hash of the generated slices is computed in memory during the slice creation and written to a separated file beside the slice to let you check that no data alteration came on disk. Use the -c option of md5sum, sha1sum, sh1512sum or rhash -W command to easily check those hashes. For example: \"rhash -W -c slice.1.dar.whirlpool\"" #define TOOLTIP_COMMON_EXECUTE "Execute a shell command after each slice completion" #define TOOLTIP_COMMON_EMPTY_DIR "When a directory is excluded from a backup, as expected it does not show in the backup and is thus not restored. When this concerns a mount point for virtual file systems (like /proc, /sys, /dev and mounted tmpfs often found for /tmp and /run), this option let Webdar store any excluded directory as an empty directory, including those mount points you'd be advise not to backup. Then, at restoration time, Webdar will automatically recreate the mount points for those virtual file systems you have excluded from your backup" #define TOOLTIP_COMMON_SEQ_MARKS "You should not disable sequential marks unless you know what you are doing. These marks (sometime also called tape marks) provides a redundant method to read a backup, in particular in case of file system saturation during a backup process; they may also help recover a backup that has been corrupted on disk or tape" #define TOOLTIP_COMMON_SPARSE_MIN "Long sequences of zeroed bytes in a file may be stored as a \"hole\" on the file system, leading to no or very little disk space consumption, while such file can span several terabytes, for example. Webdar can detect those holes and record them as a short data structures in the backup. Even without compression, this saved a lot of space in the resulting backup and let Webdar recreate the so called holes at restoration time avoiding creating a huge file when it can leverage the underlying file system ability to handle sparse files. It does not make sense to set a value below 15 bytes, but you can disable this feature setting it to zero, this will increase the backup speed at the cost of the inability to store an restore sparse files" #define TOOLTIP_COMMON_THREADS_COMPR "The number of threads for data (de)compression. Only one thread will be created and used when not using block compression" #define TOOLTIP_COMMON_IN_PLACE "At backup time, Webdar records directory used for root of the backup in the archive. Checking this option ignore the specified file system root and use this recorded \"in-place\" path from the backup instead of what is specified as root" #define TOOLTIP_COMMON_BASENAME "A backup is composed of one or more slices (See slicing section in the options below). These files will be named after this basename followed by a slice number and a \"dar\" extension, for example: \"mybasename.1.dar\"" #define TOOLTIP_COMMON_SAUV_PATH "Location where will be written the backup, see also the options below to define the repository (the host) where this path is located" // arriere_boutique template class #define TOOLTIP_AB_CONFIG_NAME "Name to use to save the configuration displayed above. You can also change it to save a copy under another name (\"save as\" feature). However you cannot save under the name of an existing configuration. To edit an existing configuration select it from the list here on the right, click the \"load selected\" button, perform changes in the configuration and get back to this save button without changing the name of the configuration" #define TOOLTIP_AB_SELECT "Select an existing configuration, then load it. You can then either edit it on the left or delete it from the configuration using the \"delete\" button below" // guichet class #define TOOLTIP_G_SELECT_SUBCOMP "Select an existing configuration. Note, this configuration will not be removable until it is not referred from here nor from any other similar places" #define TOOLTIP_G_SELECT "Select an existing configuration defined in the \"Configure\" menu or use the \"manual config\" choice to set it up in-place, you will be able to save it also as a new configuration using the \"save/save as\" button right below. Warning you may have nested configuration parts each with its \"save/save as\" button, check the indentation and vertical line on the left to determine what configuration part you want to add to the \"configure\" menu" #define TOOLTIP_G_SAVE "The current configuration is anonymous, from here you use it as is, modify it or save as a new configuration. To edit an existing configuration and save changes under that same name, go to the \"Configure\" menu" // html_bibliotheque class #define TOOLTIP_HB_FILENAME "Filename where the configuration has been read from and where it will be saved to. The configuration saved includes all tabs of the present page and only them, nothing is saved from the \"Create\" menu for example" #define TOOLTIP_HB_AUTOSAVE "If this box is unchecked, any configuration change is just kept in memory, until you click on the \"save\" button just below, at which time the configuration as seen from all tabs is saved to the file which name is provided above. A status message shows at the top of the page telling whether the current configuration in memory has been saved to file or not. If checked, this operation is performed automatically upon change and the status message on top page does not show." #define TOOLTIP_HB_UPLOAD "First select the configuration file your browser will upload to Webdar, then click the \"upload\" button" // html_ciphering class #define TOOLTIP_HC_TYPE "Symmetric encryption means here the use of a password to cipher and decipher the backup, while asymmetrical encryption means the use of public/private GPG key pair, one key to cipher and eventually sign, the other to decipher the backup" #define TOOLTIP_HC_ALGO "Ciphering algorithm, most of the time you will want to use AES" #define TOOLTIP_HC_PASS1 "The password or passphrase to use to cipher the backup (and to remember in order to decipher it)" #define TOOLTIP_HC_PASS2 "Retype the same password or passphrase as entered above" #define TOOLTIP_HC_SIZE "Keep this parameter to its default value (10 kio), else you will have to remember its value and set it back at the same value in order to decipher the backup" #define TOOLTIP_HC_THREADS "Number of threads to use to cipher or decipher the data" #define TOOLTIP_HC_FS_KDF_HASH "Humans choose password/phrase in a very restrictive name space. The Key Derivation Function, takes this pass and a salt (an arbitrarily chosen sequence stored in clear in the archive header) as input of a time consuming transformation process to obtain a more randomized encryption key. With the salt, different archives use different encryption keys even if the human provided password is the same, while the CPU intensive transformation makes dictionary attack more costly" #define TOOLTIP_HC_KDF_HASH0 "md5 is not a strong hash algorithm and it outputs in a small name space. Avoid using it for KDF, it is here to support old archive formats" #define TOOLTIP_HC_KDF_HASH1 "sha1 is also here to support old archive format, don't use it anymore" #define TOOLTIP_HC_KDF_HASH2 "sha512 can be used with a high number of iteration for the time to get the ciphering key from salt and pass to take a few seconds on an average computer" #define TOOLTIP_HC_KDF_HASH3 "whirlpool has a very large output name space, though use it with enough iteration for the KDF process to take also several seconds on an average computer" #define TOOLTIP_HC_KDF_HASH4 "argon2 is known as the reference for KDF function, this is the default and best choice according to literature since 2015 and at least up to year 2023" #define TOOLTIP_HC_ITERATION_COUNT "The hash result of the salt and pass is hashed several times in loop, for the process of getting a randomized string outside the human usual name space to cost CPU resource and time and drive an dictionary attack slow and/or costly in time and or CPU" // html_compression_params class #define TOOLTIP_HCP_COMPR "The algorithms differ in execution time to compress and to decompress, as well as the average compression ratio obtained depending on the nature of the data to compress, choose the algorithm that best fits your use case," #define TOOLTIP_HCP_COMPR_LEVEL "The higher this number is, the more CPU and time will be spend to reach the best compression ratio and lower the storage footprint" #define TOOLTIP_HCP_MIN_COMPR "Files under that size will never be compressed" #define TOOLTIP_HCP_COMPR_BLOCK "If set to zero, use stream compression which gives the best compression result but cannot use several threads. Else, split the data to compress in given block size and compress those block independently, something that can be spread between different threads, though it increases the memory and CPU footprint, at most by the number of threads set: small files may not mobilize all threads if the number of blocks they contain is less than the number of available threads" #define TOOLTIP_HCP_NEVER_RESAVE "When compressed data of a file uses more space than uncompressed, by default it is stored uncompressed, which means re-reading it again and overwriting the compressed data written to the backup. If checked, keep data compressed in any case" #define TOOLTIP_HCP_THREADS TOOLTIP_COMMON_THREADS_COMPR #define TOOLTIP_HCP_KEEP_COMPR "For merging operation only, do not try to decompress and re-compress files that are retained in the resulting archive. If checked, the current configuration will be refused for other operations, like backup or isolation" // html_demo class #define TOOLTIP_D_LEFT0 "the box above is hidden from the user, but its value is kept recorded" #define TOOLTIP_D_LEFT1 "the box above is visible but cannot be modified by the user" #define TOOLTIP_D_LEFT2 "the box is editable and visible (which most of the time is the default setting)" #define TOOLTIP_D_LI "enter text here" #define TOOLTIP_D_RI "this is the information known by Webdar at this point in time" #define TOOLTIP_D_COUNTER "This shows the provided string size as computed at the time the \"Calculate\" button has last been pressed" #define TOOLTIP_D_LABEL "This is how would show additional information for user help and feature detailed description" // html_entrepot class #define TOOLTIP_HE_REPO_TYPE "type \"local\" is where Webdar is running, other type should point to an existing and reachable server from the node where Webdar is running" #define TOOLTIP_HE_HOST "hostname or IP address" #define TOOLTIP_HE_PORT "TCP port the service listens on" #define TOOLTIP_HE_LOGIN "login name to connect to the remote server" #define TOOLTIP_HE_PASS "password to use to authenticate the login user on that remote server" #define TOOLTIP_HE_AUTH "To authenticate using a keyfile, provided a key pair, which public key has been added to the \"~/.ssh/authorized_keys\" for that login account on that remote server. See ssh documentation for more info" #define TOOLTIP_HE_PUB "This file should contain the public key part of the key pair" #define TOOLTIP_HE_PRV "This file should contain the private key counterpart of the public key file" #define TOOLTIP_HE_KNOWN_CHECK "To avoid connecting to a pirate server, ssh record the server key fingerprint during the first connection and store them in a file named known_hosts. Upon a new connection to a know server, if the server fingerprint has changed ssh refuse to connect to it. This prevents you to send your credentials and transfer your data to a potentially wrong or pirate server. It is a really bad idea to disable this check!" #define TOOLTIP_HE_KNOWN_FILE "It is possible change from the default location of the known_hosts file, the common location is provided here by default" #define TOOLTIP_HE_WAIT "Webdar does not stop upon a network issue, like a lack of connectivity or disconnection from the remote server, it waits this amount of seconds and retry until it succeeds or is interrupted by the Webdar user. Choosing too short delay may overload the remote server and defeat the delay feature that is here to let the server address overload and proceed later when more resources are available" #define TOOLTIP_HE_VERBOSE "For troubleshooting purpose, verbose information can be displayed on command-line interface where Webdar has been launched from" // html_entrepot_landing class #define TOOLTIP_HEL_USE "If checked, when this repository is selected for an operation, the repository path is replaced by the landing path value provided here" #define TOOLTIP_HEL_PATH "A landing path is a path on the remote server where you want Webdar to change to, at connection time. It is expected to be the place where, by default, you store your backups on that server. It will be used by default when no path has yet been set for an operation" // html_form_mask_expression class #define TOOLTIP_HFME_TYPE "Glob expression is expression you commonly have under a shell with special characters like * ? and []" #define TOOLTIP_HFME_NEGATE "When a file matches the mask consider it does not and vice versa" #define TOOLTIP_HFME_EXPRESSION "Expression, eventually with wildcards (pay attention to the mask type above) that a file must satisfy to be considered in the operation" // html_form_mask_file class #define TOOLTIP_HFMF_FILENAME "filename containing a list of path+filename to include or exclude from the operation" #define TOOLTIP_HFMF_EXCLUDE "If checked, entries listed in the provided are excluded from the operation, else there are included into the operation" #define TOOLTIP_HFMF_CASESENSIT "Consider case sensitivity or not for the file listing content in the provided filename" // html_form_mask_subdir class #define TOOLTIP_HFMS_TYPE "Pay attention, only excluding mask support mask (glob and regex), in included path no character has a special meaning" #define TOOLTIP_HFMS_CASE "case sensitivity when comparing this mask with file to process" #define TOOLTIP_HFMS_REGEX "If unchecked the provided mask is assumed a glob expression, else if checked it is assumed a regular expression" #define TOOLTIP_HFMS_MASK "sub-directory to match against. Pay attention, absolute path are not allowed in all context, the use of such configuration will not be accepted in that cases" // html_form_overwrite_action class #define TOOLTIP_HFOA_TYPE "Select the type of action and click the update button" // html_form_overwritre_base_criterium class #define TOOLTIP_HFOBC_NEGATE "Take the opposite result of the selected criterion, for example if the selected criterion is \"in place is an inode\" negating it will result in \"in place is *not* an inode\"" #define TOOLTIP_HFOBC_INVERT "Invert the roles of the \"in-place\" entry and the \"to be added\" one, for example if the selected criterion is \"in-place is an inode\" inverting will result in \"*to be added* is an inode\"" #define TOOLTIP_HFOBC_BASE "Define what action to do when the same entry is found in the \"in-place\" archive and in the \"to be added\" one" // html_form_overwrite_chain_action class #define TOOLTIP_HFOCA_FS "In a chain of action, evaluations are performed one after the other; if a decision is set for Data or for EA it is not changed by subsequent action, the use of the \"keep undefined\" decision will be of most use inside the first cells of a chain of action" // html_form_overwrite_constant_action class #define TOOLTIP_HFOCA_DATA "Defines the overwriting policy for the data, file's data, pointed to file of a symlink, major and minor of a char or block device, it also concerns permissions, ownership and dates of any inode type" #define TOOLTIP_HFOCA_EA "Defines the overwriting policy for the Extended Attributes (EA) and File Specific Attributes (FSA) of any inode type" // html_form_sig_block_size #define TOOLTIP_HFSB_DELTA "Better not calculating delta signature but re-saving as a whole small files upon change, this saves both CPU cycles and storage requirements" #define TOOLTIP_HFSB_FUNCTION "Delta signature is what is used to compare with the previous status of a file. It is calculated per block of a file's data. The larger the block is, the less blocks will be, resulting in a smaller delta signature for a given file size, but the more data will have to be re-saved upon binary change inside that file, as the block size is bigger" #define TOOLTIP_HFSB_FUNCTION0 "Block size is independent from the file sizes, consider adjusting the multiplicative and/or divisor factors below. Delta signature will grow proportionally to the file size" #define TOOLTIP_HFSB_FUNCTION1 "Block size increases very slowly when the file size increases. This bring some advantage compare to the linear function to reduce the delta signature size for big files without much impact on the amount of data to re-save upon change" #define TOOLTIP_HFSB_FUNCTION2 "Block size increases quicker than logarithmic based function, when the file size increases" #define TOOLTIP_HFSB_FUNCTION3 "Block size increases even quicker when the file size increases, but less faster than the linear function" #define TOOLTIP_HFSB_FUNCTION4 "Block size increase proportionally to the size of the file, consider setting the divisor factor to a value high enough, for example greater than 10, to avoid having too few or even a single block per file. Binary delta signature should almost have the same size whatever is the file size" #define TOOLTIP_HFSB_MULTIPLY "Adjust the formula by multiplying it by a fixed factor. Click the \"Update\" button and look at the new formula expression above" #define TOOLTIP_HFSB_DIVISOR "Adjust the formula by dividing it with a fixed factor. Can be combined with the multiplicative factor too" #define TOOLTIP_HFSB_MIN_SIZE "Bypass the result of the formula described above for the delta signature block size not to be smaller than this provided value" #define TOOLTIP_HFSB_MAX_SIZE "Bypass the result of the formula described above for the delta signature block size not to be larger than this provided value" // html_fsa_scope class #define TOOLTIP_HFS_FS "Some attributes are specific to some file systems, like the immutable flag for Linux ext2/3/4 or the birth or creation date on MacOS HFS+ file system. Webdar can save and restore them, and when supported by the file system. However if you restore across different file system types, you may get a lot of warnings. You have the option to ignore them at restoration time or, here, to directly avoid backing them up" // html_options_create class #define TOOLTIP_HOC_ARCHTYPE0 "Save all files and directories under the different file and path based filters, perimeters, etc. as defined in the following sections" #define TOOLTIP_HOC_ARCHTYPE1 "Only saves files that have changed since the backup given as reference has been made. This backup of reference may be a full backup or another incremental/differential backup as the one about to create here, with that option set. Of course here too all file and path based filters, perimeters, etc. also apply on top" #define TOOLTIP_HOC_ARCHTYPE2 "Same as previously, with the addition to not save the modified files in totality, but leverage delta signatures to only record the portions of the files that changed. Note: at restoration time you will need to restore the files from the previous backup then restore this backup on top to apply a binary patch on files saved that way" #define TOOLTIP_HOC_ARCHTYPE3 "Make a reference of the current file system status without saving any file. A snapshot can be used as a reference for a differential backup or just be used to check whether existing files at the time of the snapshot have changed since the snapshot was made" #define TOOLTIP_HOC_ARCHTYPE4 "Only change files modified after a given date. This creates a differential backup without requiring a backup of reference" #define TOOLTIP_HOC_WTC TOOLTIP_COMMON_WTC #define TOOLTIP_HOC_HOURSHIFT TOOLTIP_COMMON_HOURSHIFT #define TOOLTIP_HOC_BIN_DELTA "To add delta signature to a backup, see below the \"Delta Signatures\" section" #define TOOLTIP_HOC_FURTIVE_READ TOOLTIP_COMMON_FURTIVE_READ #define TOOLTIP_HOC_ZEROING_DATE TOOLTIP_COMMON_ZEROING_DATE #define TOOLTIP_HOC_MOD_DATA_DETECT "In the context of differential/incremental backup, normally the data of a file is considered to have changed if the mtime (last modification time) has changed. In libdar older versions, a file was completely re-saved if any date, permission or ownership of a file had changed. Since libdar 2.6.0 those metadata change (permission, ownership, atime, ctime...) can be saved without having to re-save the whole file content, this reduces a lot of the backup size and shorten the backup process" #define TOOLTIP_HOC_ALLOW_OVER TOOLTIP_COMMON_ALLOW_OVER #define TOOLTIP_HOC_WARN_OVER TOOLTIP_COMMON_WARN_OVER #define TOOLTIP_HOC_PAUSE TOOLTIP_COMMON_PAUSE #define TOOLTIP_HOC_RETRY_TIMES "Right before saving a file, Webdar record its last modification date, if right after the backup of that file this date has changed, Webdar retries to save it again and so forth if the date changed again, but for a limited amount of times. Passed that, the file is flagged as \"dirty\" meaning the file content may be inconsistent regarding what a user application may expect to find in it. At restoration time you will have different options on how to treat dirty files" #define TOOLTIP_HOC_RETRY_OVER "Re-saving a changed file does not consume additional data in normal condition. This is not the case when saving to a pipe where it is not possible to overwrite the new version of the file in the generated backup. This parameter let define a maximum amount of bytes that are wasted that way during the overall backup process, after which no data retry is performed and files are directly flagged as dirty if they changed while they were read for backup" #define TOOLTIP_HOC_SEQ_MARKS TOOLTIP_COMMON_SEQ_MARKS #define TOOLTIP_HOC_SPARSE_MIN TOOLTIP_COMMON_SPARSE_MIN #define TOOLTIP_HOC_USER_COMMENT TOOLTIP_COMMON_USER_COMMENT #define TOOLTIP_HOC_HASH_ALGO TOOLTIP_COMMON_HASH_ALGO #define TOOLTIP_HOC_EXECUTE TOOLTIP_COMMON_EXECUTE #define TOOLTIP_HOC_EMPTY TOOLTIP_COMMON_EMPTY #define TOOLTIP_HOC_INFO_DETAILS TOOLTIP_COMMON_INFO_DETAILS #define TOOLTIP_HOC_DISPLAY_TREATED TOOLTIP_COMMON_DISPLAY_TREATED #define TOOLTIP_HOC_DISPLAY_ONLY_DIR TOOLTIP_COMMON_DISPLAY_ONLY_DIR #define TOOLTIP_HOC_DISPLAY_SKIPPED TOOLTIP_COMMON_DISPLAY_SKIPPED #define TOOLTIP_HOC_DISPLAY_DIR_SUMMARY "Display a summary line about the amount of saved data and its compression ratio at the end of each treated directory" #define TOOLTIP_HOC_SECU_CHECK "When a file has only changed by its ctime since the backup of reference was made, with that option Webdar triggers a security warning. This may be expected when for example changing a file permission and setting it back to the previous value, it may also be a sign of concealment when one tries to hide changes made to a file. If such warnings occur too often, use an anti-virus or rootkit scanner and disable this feature in Webdar" #define TOOLTIP_HOC_IGNORE_UNKNOWN "When Webdar finds an inode type it does not know, a warning is issued. You can disable this warning by checking this option, no warning will show about those unknown inode type and the backup process will complete without considering them at all" #define TOOLTIP_HOC_EMPTY_DIR TOOLTIP_COMMON_EMPTY_DIR #define TOOLTIP_HOC_CACHE_TAG "Many applications use temporary data on disk for caching purposes and flag those directories following the cache directory tagging standard. Webdar understands that and can avoid saving directories tagged that way, when this option is checked" #define TOOLTIP_HOC_NODUMP "Some file system let users and applications set a 'nodump' flag on files, meaning they should not be backed up. Webdar can exclude those files from a backup, if this option is checked" #define TOOLTIP_HOC_EXCLUDE_BY_EA "In complement to the nodump and cache directory tagging way to exclude files, Webdar proposes the use of a well-defined Extended Attribute to flag files and directories to be exclude from the backup" #define TOOLTIP_HOC_DEFAULT_EA "Use the default Extended Attribute (if this option is set, its value shows below in the disabled box)" #define TOOLTIP_HOC_EXCLUDE_BY_EA_NAME "Specify here the EA name of your choice and flag files accordingly with that EA for Webdar not to save them" #define TOOLTIP_HOC_SAME_FS "The whole file system where the below specified directories reside will be either include or excluded from the backup. if only included file system are specified, none of the other file system will be looked at for backup, though the file system where is located the path defined as \"file system root\" for a backup, is never excluded. If only excluded directories are specified, any other file system will be considered for backup (applying other filtering mechanisms you have set). If there is a mix of included and excluded file systems only included file system that have not also been specified to be excluded will be considered for the backup operation" // html_options_read class #define TOOLTIP_HOR_ALGO "Unless reading a very old archive, use \"none\" here even if the backup is ciphered, algorithm is auto-detected" #define TOOLTIP_HOR_PASS "If not specified here, password/passphrase will be asked later. Pay attention that setting password here will lead it to be saved unencrypted in Webdar configuration file" #define TOOLTIP_HOR_SIZE "keep the default 10 kio unless you have changed it at backup time. There is no auto-detection for this parameters and a wrong value will not let Webdar be able to decipher the backup" #define TOOLTIP_HOR_SIG_FAILURE "If the backup has been encrypted *and* signed with a GPG key pair, the signature will be checked at reading time. If it does not validate, Webdar will abort unless this control is disabled" #define TOOLTIP_HOR_EXECUTE "Run a shell command before reading each slice" #define TOOLTIP_HOR_MIN_DIGITS "Webdar will detected this value if choosing an backup to read using the file selection window (which opens clicking on the \"+\" button). Though, if you manually fill the fields of the archive path and base name, you will have to set this value manually also for Webdar be able to read the backup" #define TOOLTIP_HOR_INFO_DETAILS TOOLTIP_COMMON_INFO_DETAILS #define TOOLTIP_HOR_LAX "In case of archive corruption, activating the lax mode is the last resort solution to try reading something out of the backup. This mode suppresses a lot of checks and need is very chatty as it offers a lot of options to the user to bypass or modify the parameters read from the archive format." #define TOOLTIP_HOR_SEQ_READ "Setting sequential read mode leads to a slower process than the normal (direct access) mode. But it is the only mode available when reading an archive directly from tapes, for example. It is also the only way to read a truncated backup, something that occurs when you have consumed all the free space of disk during a backup process, and do not have at least one slices in addition to the current one Webdar is writing to, to move away in order free some space and let Webdar continue the backup process" #define TOOLTIP_HOR_FORCE_FIRST_SLICE "When an external catalog is used (see the section below), Webdar fetches the backup content from the external catalog, but still needs to read the archive format version from the backup itself. This information is located at two places: the beginning of the first slice and the end of the last slice. In sequential read mode, there is no choice, because the archive is read sequentially and this information is needed very early. In direct access mode (sequential mode unchecked) this information is fetched by default at the end of the last slice. But some users having huge backups or archives (several terabytes) configure their backup with a very small first slice (one kilobyte for example) while other slices can hold several gigabytes. Reading the first slice avoids fetching the last slice which may be huge and take time just for that, so they prefer loading the small first one which is fast and then only load the big slices where the data to restore is located" #define TOOLTIP_HOR_THREADS_COMPR TOOLTIP_COMMON_THREADS_COMPR #define TOOLTIP_HOR_EXTERNAL_CAT "By default the table of content is found inside the backup. However you may isolate it as an external backup, which only contains the table of content (the catalog) and no data. This can be used as backup of the internal catalog in case of corruption or to optimize some operations when manipulating very big backups or archives, see the \"Isolate\" menu on the right" // html_slicing class #define TOOLTIP_HS_SLICING "A backup or archive can be stored is several file a fixed size (called sliced). Slices cannot be used alone but may not be all needed depending on the requested operation, this also overcome some file size limitation of some file systems" #define TOOLTIP_HS_SLICE_SIZE "Maximum size a slice can have, the last slice will be smaller most of the time" #define TOOLTIP_HS_FIRST_SLICE "Choose a different slice size (bigger or smaller) for the first slice" #define TOOLTIP_HS_FIRST_SLICE_SIZE "Specific size of the first slice, It may be smaller if the whole backup or archive could be hold in one slice" #define TOOLTIP_HS_PERMISSION "By default the slice permission is readable and writable by all and restricted by the umask (which usually restricts the write access to the slice owner), you can use 0600 for slices to only be accessible to the slice owner" #define TOOLTIP_HS_USER "User ownership to set for slices, this assumes Webdar has the right to set file ownership, if not or if undefined here, the user ownership will be the user of the Webdar process" #define TOOLTIP_HS_GROUP "Group ownership to set for slices, this assumes Webdar has the right to set file ownership, if not or if undefined here, the group ownership will be the group of the Webdar process" #define TOOLTIP_HS_MIN_DIGITS "From a given , Webdar creates slices adding a number (the slice number) followed by the \"dar\" extension, like \".1.dar\". If you have many slices, you may like to have small slice number prefixed with zeros. Indicating 4 as min-digits will lead slices of that form \".0001.dar\"" // saisie class #define TOOLTIP_S_SESSION "You can change the name of the session to better identify it among others. See the \"Other sessions\" menu on the left" // html_options_test class #define TOOLTIP_HOT_EMPTY "If checked, the archive content is read but not file's data is read and checked against its CRC data, leading to a quick process but not performing a full backup testing" #define TOOLTIP_HOT_INFO_DETAILS TOOLTIP_COMMON_INFO_DETAILS #define TOOLTIP_HOT_DISPLAY_TREATED TOOLTIP_COMMON_DISPLAY_TREATED #define TOOLTIP_HOT_DISPLAY_ONLY_DIR TOOLTIP_COMMON_DISPLAY_ONLY_DIR #define TOOLTIP_HOT_DISPLAY_SKIPPED TOOLTIP_COMMON_DISPLAY_SKIPPED // html_options_compare class #define TOOLTIP_HOC_FURTIVE TOOLTIP_COMMON_FURTIVE_READ #define TOOLTIP_HOC_ZEROING_DATES TOOLTIP_COMMON_ZEROING_DATE #define TOOLTIP_HOC_HOURSHIFT TOOLTIP_COMMON_HOURSHIFT #define TOOLTIP_HOC_IN_PLACE TOOLTIP_COMMON_IN_PLACE #define TOOLTIP_HOC_WTC TOOLTIP_COMMON_WTC #define TOOLTIP_HOC_SYMLINK_DATE "If checked, Webdar will signal a change if the symlink last modification date has changed, even if the object pointed to by the symlink has not changed at all" #define TOOLTIP_HOC_INFO_DETAILS TOOLTIP_COMMON_INFO_DETAILS #define TOOLTIP_HOC_DISPLAY_TREATED TOOLTIP_COMMON_DISPLAY_TREATED #define TOOLTIP_HOC_DISPLAY_ONLY_DIR TOOLTIP_COMMON_DISPLAY_ONLY_DIR #define TOOLTIP_HOC_DISPLAY_SKIPPED TOOLTIP_COMMON_DISPLAY_SKIPPED // html_options_isolate class #define TOOLTIP_HOI_DELTA_SIG "By default delta signature if present are not stored in a isolated catalog. Check this box if you want to make a differential backup with delta signatures using this catalog as reference" #define TOOLTIP_HOI_DELTA_TRANSFER "If the backup of reference lacks delta signatures it is possible in some circumstances to compute them (for file fully saved in the backup), check this box if you want to add some or drop some others delta signature from the backup of reference" #define TOOLTIP_HOI_ALLOW_OVER TOOLTIP_COMMON_ALLOW_OVER #define TOOLTIP_HOI_WARN_OVER TOOLTIP_COMMON_WARN_OVER #define TOOLTIP_HOI_PAUSE TOOLTIP_COMMON_PAUSE #define TOOLTIP_HOI_SEQ_MARKS "For an isolated catalog, sequential read marks does not bring much interest, though it does not hurt having them" #define TOOLTIP_HOI_USER_COMMENT TOOLTIP_COMMON_USER_COMMENT #define TOOLTIP_HOI_HASH_ALGO TOOLTIP_COMMON_HASH_ALGO #define TOOLTIP_HOI_EXECUTE TOOLTIP_COMMON_EXECUTE #define TOOLTIP_HOI_EMPTY TOOLTIP_COMMON_EMPTY #define TOOLTIP_HOI_REPAIR_MODE "Check this box if the backup to fetch the catalog from has been truncated due to disk space saturation, Webdar will rebuild the catalog (table of content) from the inline sequential marks and to create this isolated catalog. This is an faster alternative to repairing the archive, which avoid recopying the whole data, but you will have to use this catalog as external catalog when reading the truncated backup" #define TOOLTIP_HOI_INFO_DETAILS TOOLTIP_COMMON_INFO_DETAILS // html_options_merge class #define TOOLTIP_HOM_ALLOW_OVER TOOLTIP_COMMON_ALLOW_OVER #define TOOLTIP_HOM_WARN_OVER TOOLTIP_COMMON_WARN_OVER #define TOOLTIP_HOM_PAUSE TOOLTIP_COMMON_PAUSE #define TOOLTIP_HOM_SEQ_MARKS TOOLTIP_COMMON_SEQ_MARKS #define TOOLTIP_HOM_SPARSE_MIN_SIZE TOOLTIP_COMMON_SPARSE_MIN #define TOOLTIP_HOM_USER_COMMENT TOOLTIP_COMMON_USER_COMMENT #define TOOLTIP_HOM_HASH_ALGO TOOLTIP_COMMON_HASH_ALGO #define TOOLTIP_HOM_EXECUTE TOOLTIP_COMMON_EXECUTE #define TOOLTIP_HOM_EMPTY TOOLTIP_COMMON_EMPTY #define TOOLTIP_HOM_INFO_DETAILS TOOLTIP_COMMON_INFO_DETAILS #define TOOLTIP_HOM_DISPLAY_TREATED TOOLTIP_COMMON_DISPLAY_TREATED #define TOOLTIP_HOM_DISPLAY_ONLY_DIR TOOLTIP_COMMON_DISPLAY_ONLY_DIR #define TOOLTIP_HOM_DISPLAY_SKIPPED TOOLTIP_COMMON_DISPLAY_SKIPPED #define TOOLTIP_HOM_HAS_AUX "Merging operation takes a first mandatory backup in input (the backup of reference) and in option, a second backup, the auxiliary backup. If you wan not only filter out or change compression, encryption and slicing of a single backup, but merge the content of two backups, check this box" #define TOOLTIP_HOM_DECREMENTAL "Decremental backup is a particular case of merging, where the backup of reference is an old full backup and the auxiliary backup is a recent backup, it result in creating a reverse differential backup, which, if restored after having restored the most recent backup provided here, will get to the state of the older full backup provided here too. This way you can replace old full backups by decremental ones (which should be smaller) and only keep the latest full backup" #define TOOLTIP_HOM_DELTA_SIG "1/ No delta signature from a source backup will be transferred to the resulting backup of the merging operation.\n\n 2 - Any existing delta signature of a source backup (reference as well as the auxiliary and optional backup) will transferred beside the data of each file to the resulting backup\n\n 3 - This let you define which delta signatures you want to transfer and if possible compute (when the data is fully present for a file)" #define TOOLTIP_HOM_EMPTY_DIR TOOLTIP_COMMON_EMPTY_DIR // html_options_repair class #define TOOLTIP_HORP_ALLOW_OVER TOOLTIP_COMMON_ALLOW_OVER #define TOOLTIP_HORP_WARN_OVER TOOLTIP_COMMON_WARN_OVER #define TOOLTIP_HORP_PAUSE TOOLTIP_COMMON_PAUSE #define TOOLTIP_HORP_EXECUTE TOOLTIP_COMMON_EXECUTE #define TOOLTIP_HORP_EMPTY TOOLTIP_COMMON_EMPTY #define TOOLTIP_HORP_THREADS_COMPR TOOLTIP_COMMON_THREADS_COMPR #define TOOLTIP_HORP_HASH_ALGO TOOLTIP_COMMON_HASH_ALGO #define TOOLTIP_HORP_INFO_DETAILS TOOLTIP_COMMON_INFO_DETAILS #define TOOLTIP_HORP_DISPLAY_TREATED TOOLTIP_COMMON_DISPLAY_TREATED #define TOOLTIP_HORP_DISPLAY_ONLY_DIR TOOLTIP_COMMON_DISPLAY_ONLY_DIR #define TOOLTIP_HORP_DISPLAY_SKIPPED TOOLTIP_COMMON_DISPLAY_SKIPPED #define TOOLTIP_HORP_USER_COMMENT TOOLTIP_COMMON_USER_COMMENT // html_options_extract class #define TOOLTIP_HOE_IN_PLACE TOOLTIP_COMMON_IN_PLACE #define TOOLTIP_HOE_WARN_OVER TOOLTIP_COMMON_WARN_OVER #define TOOLTIP_HOE_WARN_NO_MATCH "A differential backup stores new and modified files but also record files that have been removed. At restoration time Webdar remove them, however if their inode type (symlink, plain file, directory...) does not match what is expected to be removed, this option triggers a warning for the user to decide what to do if that condition occurs" #define TOOLTIP_HOE_FLAT "Do not restore directory tree, all files will be restored in the same directory, which may lead to overwriting files of the same name if they were located in different directories in the backup" #define TOOLTIP_HOE_WTC TOOLTIP_COMMON_WTC #define TOOLTIP_HOE_EMPTY_DIR TOOLTIP_COMMON_EMPTY_DIR #define TOOLTIP_HOE_DIRTY "Dirty files are the one that have been modified at the time they were read for backup. Their content may be inconsistent for the applications using them, this option let you decide how to handle those files" #define TOOLTIP_HOE_ONLY_DELETED "A differential backup stores new and modified files, but also record files that have been removed. With this option, no new or modified file will be restored, only file that should be removed will be deleted from the file system" #define TOOLTIP_HOE_IGNORE_DELETED "A differential backup stores new and modified files, but also record file that have been removed, for restoring a differential backup you update modified files, add new files and remove files that disappeared. If you check this option your restoration will be uncompleted and file that should have been removed will stay on the file system" #define TOOLTIP_HOE_IGNORE_SOCKETS "Do no restore sockets, does not hurt restoring them, but usually applications will recreate them when restarted" #define TOOLTIP_HOE_EMPTY TOOLTIP_COMMON_EMPTY #define TOOLTIP_HOE_INFO_DETAILS TOOLTIP_COMMON_INFO_DETAILS #define TOOLTIP_HOE_DISPLAY_TREATED TOOLTIP_COMMON_DISPLAY_TREATED #define TOOLTIP_HOE_DISPLAY_ONLY_DIR TOOLTIP_COMMON_DISPLAY_ONLY_DIR #define TOOLTIP_HOE_DISPLAY_SKIPPED TOOLTIP_COMMON_DISPLAY_SKIPPED // html_archive_create class #define TOOLTIP_HAC_FS_ROOT "Nothing outside this directory will be considered for backup, all saved file will be stored in the backup with a path relative to this root directory" #define TOOLTIP_HAC_SAUV_PATH TOOLTIP_COMMON_SAUV_PATH #define TOOLTIP_HAC_BASENAME TOOLTIP_COMMON_BASENAME // html_archive_read class #define TOOLTIP_HAR_ARCH_PATH "Path+basename of the backup to read. If you have several slices \"mybasename.1.dar\", \"mybasename.2.dar\" located in directory \"/tmp\" you should set this field to \"/tmp/mybasename\". Note that the \"+\" button at the end of this line will handle all these aspects including the min-digits option, you will only have to select on one of the slice of the backup you want to read" // html_archive_compare class #define TOOLTIP_HACM_FS_ROOT "Path of the file system where is located the content to compare the backup with" // html_options_list class #define TOOLTIP_HOL_ACTION0 "This option let you navigate in the directory tree of the backup and see for each directory its content and the metadata attributes of files they contain" #define TOOLTIP_HOL_ACTION1 "This option gives a global view of the archive, the different options (compression, slicing, ciphering, user comment...) that have been used at creation time" // html_archive_isolate class #define TOOLTIP_HAI_SAUV_PATH TOOLTIP_COMMON_SAUV_PATH #define TOOLTIP_HAI_BASENAME TOOLTIP_COMMON_BASENAME // html_archive_merge class #define TOOLTIP_HAM_SAUV_PATH TOOLTIP_COMMON_SAUV_PATH #define TOOLTIP_HAM_BASENAME TOOLTIP_COMMON_BASENAME // html_archive_repair class #define TOOLTIP_HAR_SAUV_PATH TOOLTIP_COMMON_SAUV_PATH #define TOOLTIP_HAR_BASENAME TOOLTIP_COMMON_BASENAME // html_archive_extract class #define TOOLTIP_HAE_FS_ROOT "Path were to restore the backup content" #endif webdar-1.0.0/src/html_fsa_scope.hpp0000644000175000017520000000564414773727242014215 00000000000000/*********************************************************************/ // webdar - a web server and interface program to libdar // Copyright (C) 2013-2025 Denis Corbin // // This file is part of Webdar // // Webdar is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // Webdar is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Webdar. If not, see // //---- // to contact the author: dar.linux@free.fr /*********************************************************************/ #ifndef HTML_FSA_SCOPE_HPP #define HTML_FSA_SCOPE_HPP // C system header files #include "my_config.h" extern "C" { } // C++ system header files #include // webdar headers #include "body_builder.hpp" #include "html_form.hpp" #include "html_form_fieldset.hpp" #include "html_form_input.hpp" #include "jsoner.hpp" #include "actor.hpp" #include "events.hpp" /// html component used for the user to define a has algorithm class html_fsa_scope : public body_builder, public jsoner, public actor, public events { public: static const std::string changed; html_fsa_scope(); html_fsa_scope(const html_fsa_scope & ref) = delete; html_fsa_scope(html_fsa_scope && ref) noexcept = delete; html_fsa_scope & operator = (const html_fsa_scope & ref) = delete; html_fsa_scope & operator = (html_fsa_scope && ref) noexcept = delete; ~html_fsa_scope() = default; /// obtain the fsa_scope resulting from the web interface libdar::fsa_scope get_scope() const; /// inherited from jsoner virtual void load_json(const json & source) override; /// inherited from jsoner virtual json save_json() const override; /// inherited from jsoner virtual void clear_json() override; /// inherited from actor virtual void on_event(const std::string & event_name) override; /// inherited from body_builder virtual void bind_to_anchor(const std::string & val) override { form.bind_to_anchor(val); }; protected: /// inherited from body_builder virtual std::string inherited_get_body_part(const chemin & path, const request & req) override; private: html_form form; html_form_fieldset fs; html_form_input hfs_family; html_form_input ext_family; static constexpr const unsigned int format_version = 1; static constexpr const char* myclass_id = "html_fsa_scope"; static constexpr const char* jlabel_hfs = "hfs"; static constexpr const char* jlabel_ext = "ext"; }; #endif webdar-1.0.0/src/html_archive_read.hpp0000644000175000017520000001103714777743644014670 00000000000000/*********************************************************************/ // webdar - a web server and interface program to libdar // Copyright (C) 2013-2025 Denis Corbin // // This file is part of Webdar // // Webdar is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // Webdar is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Webdar. If not, see // //---- // to contact the author: dar.linux@free.fr /*********************************************************************/ #ifndef HTML_ARCHIVE_READ_HPP #define HTML_ARCHIVE_READ_HPP // C system header files #include "my_config.h" extern "C" { } // C++ system header files #include #include // webdar headers #include "body_builder.hpp" #include "html_form.hpp" #include "html_form_input.hpp" #include "html_form_input_file.hpp" #include "html_form_fieldset.hpp" #include "html_options_read.hpp" #include "html_libdar_running_popup.hpp" #include "actor.hpp" #include "guichet.hpp" #include "jsoner.hpp" #include "bibliotheque_subconfig.hpp" #include "events.hpp" #include "html_derouleur.hpp" /// class html_archive_read let user define the archive path, basename and option to read /// it is mainly used in class saisie class html_archive_read: public body_builder, public actor, public libthreadar::thread_signal, public jsoner, public bibliotheque_subconfig, public events { public: static const std::string changed; html_archive_read(const std::string & archive_description); html_archive_read(const html_archive_read & ref) = delete; html_archive_read(html_archive_read && ref) noexcept = delete; html_archive_read & operator = (const html_archive_read & ref) = delete; html_archive_read & operator = (html_archive_read && ref) noexcept = delete; ~html_archive_read() { cancel(); join(); }; /// mandatory call to invoke ASAP after constructor void set_biblio(const std::shared_ptr & ptr); // available fields for libdar std::string get_archive_path() const; std::string get_archive_basename() const; libdar::archive_options_read get_read_options(std::shared_ptr dialog) const { return opt_read->get_options(dialog); }; /// inherited from jsoner virtual void load_json(const json & source) override; /// inherited from jsoner virtual json save_json() const override; /// inherited from jsoner virtual void clear_json() override; /// inherited from actor virtual void on_event(const std::string & event_name) override; /// inherited from bibliotheque_subconfig virtual bibliotheque::using_set get_using_set() const override { return guichet_opt_read.get_using_set(); }; protected: /// inherited from body_builder virtual std::string inherited_get_body_part(const chemin & path, const request & req) override; /// inherited from body_builder virtual void new_css_library_available() override; /// inherited from class libthreadar::thread virtual void inherited_run() override; /// inherited from libthreadar::thread virtual void signaled_inherited_cancel() override; private: /// delay entrepot update when waiting inherited_get_body_part() to be executed /// \note not doing so may lead to run() this object which involves an html_web_user_interaction /// while the object is not visible and this this interaction component not operational bool need_entrepot_update; enum { event_propagated, event_ignored, event_pending } ignore_events_st; html_derouleur deroule; html_form form; html_form_fieldset fs; html_form_input_file arch_path; html_libdar_running_popup libdarexec; guichet guichet_opt_read; std::shared_ptr opt_read; void update_entrepot(); void trigger_changed(); void ignore_events(bool mode); static constexpr const unsigned int format_version = 1; static constexpr const char* myclass_id = "html_archive_read"; static constexpr const char* jlabel_path = "archive-path"; static constexpr const char* jlabel_opt_read = "read-options"; }; #endif webdar-1.0.0/src/html_archive_isolate.hpp0000644000175000017520000000703714773727243015413 00000000000000/*********************************************************************/ // webdar - a web server and interface program to libdar // Copyright (C) 2013-2025 Denis Corbin // // This file is part of Webdar // // Webdar is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // Webdar is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Webdar. If not, see // //---- // to contact the author: dar.linux@free.fr /*********************************************************************/ #ifndef HTML_ARCHIVE_ISOLATE_HPP #define HTML_ARCHIVE_ISOLATE_HPP // C system header files #include "my_config.h" extern "C" { } // C++ system header files #include // webdar headers #include "html_form_input_file.hpp" #include "html_options_isolate.hpp" #include "body_builder.hpp" #include "html_derouleur.hpp" #include "actor.hpp" #include "html_libdar_running_popup.hpp" #include "guichet.hpp" /// html component used to let the user provide parameters for an isolation operation class html_archive_isolate: public body_builder, public libthreadar::thread_signal, public actor { public: html_archive_isolate(); html_archive_isolate(const html_archive_isolate & ref) = delete; html_archive_isolate(html_archive_isolate && ref) noexcept = delete; html_archive_isolate & operator = (const html_archive_isolate & ref) = delete; html_archive_isolate & operator = (html_archive_isolate && ref) noexcept = delete; ~html_archive_isolate() { cancel(); join(); }; /// mandatory call to invoke ASAP after constructor void set_biblio(const std::shared_ptr & ptr); const std::string & get_archive_path() const { return sauv_path.get_value(); }; const std::string & get_archive_basename() const; libdar::archive_options_isolate get_options_isolate(std::shared_ptr & webui) const { return options->get_options(webui); }; /// inherited from actor virtual void on_event(const std::string & event_name) override; protected: /// inherited from body_builder virtual std::string inherited_get_body_part(const chemin & path, const request & req) override; /// inherited from body_builder virtual void new_css_library_available() override; /// inherited from libthreadar::thread virtual void inherited_run() override; /// inherited from libthreadar::thread virtual void signaled_inherited_cancel() override; private: html_derouleur deroule; html_form form; html_form_fieldset fs; html_form_input_file sauv_path; html_form_input basename; html_libdar_running_popup repoxfer; guichet guichet_options; std::shared_ptr options; /// delay entrepot update when waiting inherited_get_body_part() to be executed /// \note not doing so may lead to run() this object which involves an html_web_user_interaction /// while the object is not visible and this this interaction component not operational bool need_entrepot_update; void update_entrepot(); }; #endif webdar-1.0.0/src/html_options_compare.hpp0000644000175000017520000001331714773727243015451 00000000000000/*********************************************************************/ // webdar - a web server and interface program to libdar // Copyright (C) 2013-2025 Denis Corbin // // This file is part of Webdar // // Webdar is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // Webdar is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Webdar. If not, see // //---- // to contact the author: dar.linux@free.fr /*********************************************************************/ #ifndef HTML_OPTIONS_COMPARE_HPP #define HTML_OPTIONS_COMPARE_HPP // C system header files #include "my_config.h" extern "C" { } // C++ system header files // webdar headers #include "body_builder.hpp" #include "actor.hpp" #include "html_form_input.hpp" #include "html_form_fieldset.hpp" #include "html_comparison_fields.hpp" #include "html_form.hpp" #include "html_derouleur.hpp" #include "html_mask_form_filename.hpp" #include "html_mask_form_path.hpp" #include "html_fsa_scope.hpp" #include "guichet.hpp" #include "jsoner.hpp" #include "events.hpp" /// html component providing a way for the user to set the parameter of libdar comparison operation class html_options_compare : public body_builder, public actor, public jsoner, public events, public bibliotheque_subconfig { public: static const std::string changed; html_options_compare(); html_options_compare(const html_options_compare & ref) = delete; html_options_compare(html_options_compare && ref) noexcept = delete; html_options_compare & operator = (const html_options_compare & ref) = delete; html_options_compare & operator = (html_options_compare && ref) noexcept = delete; ~html_options_compare() = default; /// mandatory call to invoke ASAP after constructor void set_biblio(const std::shared_ptr & ptr); /// needed for path based filtering to filter accordingly to the current root_fs void set_fs_root(const std::string & prefix) { path_mask->set_fs_root(prefix); }; /// gathering informations for libdar libdar::archive_options_diff get_options() const; /// know whether the in-place restoration is set bool get_in_place_mode() const { return in_place.get_value_as_bool(); }; /// inherited from jsoner virtual void load_json(const json & source) override; /// inherited from jsoner virtual json save_json() const override; /// inherited from jsoner virtual void clear_json() override; /// inherited from bibliotheque_subconfig virtual bibliotheque::using_set get_using_set() const override; /// inherited from actor virtual void on_event(const std::string & event_name) override; /// set the object to webdar defaults void set_to_webdar_defaults(); protected: /// inherited from body_builder virtual std::string inherited_get_body_part(const chemin & path, const request & req) override; /// inherited from body_builder virtual void new_css_library_available() override; private: static constexpr const char* treated_none = "none"; static constexpr const char* treated_dir = "dir"; static constexpr const char* treated_all = "all"; bool ignore_events; html_derouleur deroule; html_form form_reading; html_form_fieldset fs_alter_atime; html_form_radio alter_atime; html_form_input furtive_read_mode; html_form_input zeroing_neg_date; html_form_input hourshift; html_form form; html_form_fieldset fs; html_form_input in_place; html_comparison_fields what_to_check; html_form_input compare_symlink_date; html_form form_show; html_form_fieldset fs_show; html_form_input info_details; html_form_input display_treated; html_form_input display_treated_only_dir; html_form_input display_skipped; guichet guichet_filename_mask; std::shared_ptr filename_mask; guichet guichet_path_mask; std::shared_ptr path_mask; guichet guichet_ea_mask; std::shared_ptr ea_mask; html_fsa_scope fsa_scope; void trigger_change(); static constexpr const unsigned int format_version = 1; static constexpr const char* myclass_id = "html_options_compare"; static constexpr const char* jlabel_alter_atime = "alter-atime"; static constexpr const char* jlabel_furtive_read = "furtive-read"; static constexpr const char* jlabel_zeroing_neg_dates = "zeroing-negative-dates"; static constexpr const char* jlabel_hourshift = "hourshift"; static constexpr const char* jlabel_in_place = "use-in-place-root"; static constexpr const char* jlabel_what_to_check = "what-to-check-for"; static constexpr const char* jlabel_symlink_date = "compare-symlink-mtime"; static constexpr const char* jlabel_info_details = "info-details"; static constexpr const char* jlabel_disp_treated = "display-treated"; static constexpr const char* jlabel_disp_only_dir = "display-only-dirs"; static constexpr const char* jlabel_disp_skipped = "display-skipped"; static constexpr const char* jlabel_file_mask = "file-mask"; static constexpr const char* jlabel_path_mask = "path-mask"; static constexpr const char* jlabel_ea_mask = "ea-mask"; static constexpr const char* jlabel_fsa_scope = "fsa-scope"; }; #endif webdar-1.0.0/src/html_void.hpp0000644000175000017520000001047414775732642013213 00000000000000/*********************************************************************/ // webdar - a web server and interface program to libdar // Copyright (C) 2013-2025 Denis Corbin // // This file is part of Webdar // // Webdar is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // Webdar is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Webdar. If not, see // //---- // to contact the author: dar.linux@free.fr /*********************************************************************/ #ifndef HTML_VOID_HPP #define HTML_VOID_HPP /// \file html_void.hpp defines two classes html_void and html_void_parent_notifier /// - html_void is a transparent type of object (it do not generate any HTTP body /// outside what its adopted children produce). It is used to provide a global /// visibility switch to objects it has adopted /// - html_void_parent_notifier is an interface. An object adopting an html_void component /// can implement (but is not obliged to) this interface to be notified of status changes of the /// html_void object, by implementing (overriding) the specified methods of that class. #include "my_config.h" // C system header files extern "C" { } // C++ system header files #include "body_builder.hpp" // webdar headers /// to be used *eventually* by class of object adopting an html_void object /// if parent object of an html_void implements this interface it will be notified /// of the events this html_void hits. Only the object that has adopted a given /// html_void is notified of events met that html_void. class html_void_parent_notifier { public: html_void_parent_notifier() {} html_void_parent_notifier(const html_void_parent_notifier & ref) = default; html_void_parent_notifier(html_void_parent_notifier && ref) noexcept = default; html_void_parent_notifier & operator = (const html_void_parent_notifier & ref) = default; html_void_parent_notifier & operator = (html_void_parent_notifier && ref) noexcept = default; virtual ~html_void_parent_notifier() = default; /// propagates body_builder::my_visibility_has_changed() /// \param[in] voidobj is the html_void child object that triggered this call virtual void void_child_visibility_has_changed(body_builder* voidobj) {}; /// propagates body_builder::has_adopted() /// \param[in] voidobj is the html_void child object that triggered this call /// \param[in] obj is the html_void's child that has been adopted virtual void void_child_has_adopted(body_builder* voidobj, body_builder* obj) {}; /// propagates body_builder::will_foresake() /// \param[in] voidobj is the html_void child object that triggered this call /// \param[in] obj is the html_void's child that is about to be foresaken virtual void void_child_will_foresake(body_builder* voidobj, body_builder* obj) {}; }; /// class html_void is only used to provide global visibility switch to all its adopted children class html_void: public body_builder { public: html_void() {} html_void(const html_void & ref) = default; html_void(html_void && ref) noexcept = delete; html_void & operator = (const html_void & ref) = default; html_void & operator = (html_void && ref) noexcept = delete; ~html_void() = default; protected: /// inherited from body_builder virtual std::string inherited_get_body_part(const chemin & path, const request & req) override; /// inherited from body_builder virtual void my_visibility_has_changed() override; /// inherited from body_builder virtual void has_adopted(body_builder *obj) override; /// inherited from body_builder virtual void will_foresake(body_builder *obj) override; private: html_void_parent_notifier* parent_notifier(); }; #endif webdar-1.0.0/src/html_span.cpp0000644000175000017520000000316515035005127013162 00000000000000/*********************************************************************/ // webdar - a web server and interface program to libdar // Copyright (C) 2013-2025 Denis Corbin // // This file is part of Webdar // // Webdar is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // Webdar is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Webdar. If not, see // //---- // to contact the author: dar.linux@free.fr /*********************************************************************/ // C system header files #include "my_config.h" extern "C" { } // C++ system header files // webdar headers // #include "html_span.hpp" using namespace std; string html_span::inherited_get_body_part(const chemin & path, const request & req) { string ret; string cssdef = get_css_classes(); string sub = get_body_part_from_children_as_a_block(path, req); if(cssdef.empty()) if(sub.empty()) ret = ""; else ret = "\n" + sub + "\n"; else // cssdef not empty if(sub.empty()) ret = "" + "\n"; else ret = "\n" + sub + "\n"; return ret; } webdar-1.0.0/src/html_options_repair.hpp0000644000175000017520000001426114773727243015304 00000000000000/*********************************************************************/ // webdar - a web server and interface program to libdar // Copyright (C) 2013-2025 Denis Corbin // // This file is part of Webdar // // Webdar is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // Webdar is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Webdar. If not, see // //---- // to contact the author: dar.linux@free.fr /*********************************************************************/ #ifndef HTML_OPTIONS_REPAIR_HPP #define HTML_OPTIONS_REPAIR_HPP // C system header files #include "my_config.h" extern "C" { } // C++ system header files #include #include // webdar headers #include "body_builder.hpp" #include "actor.hpp" #include "events.hpp" #include "html_form_input.hpp" #include "html_form_fieldset.hpp" #include "html_form.hpp" #include "html_hash_algo.hpp" #include "html_derouleur.hpp" #include "html_entrepot_landing.hpp" #include "html_web_user_interaction.hpp" #include "html_form_input_unit.hpp" #include "html_slicing.hpp" #include "html_ciphering.hpp" #include "guichet.hpp" #include "jsoner.hpp" #include "bibliotheque_subconfig.hpp" /// html component used for the user to provide the parameters to repair an archive class html_options_repair : public body_builder, public actor, public events, public jsoner, public bibliotheque_subconfig { public: static const std::string landing_path_changed; ///< landing path has changed static const std::string entrepot_changed; ///< event triggered for entrepot only changes except landing_path static const std::string changed; ///< event triggered for any change except landing_path html_options_repair(); html_options_repair(const html_options_repair & ref) = delete; html_options_repair(html_options_repair && ref) noexcept = delete; html_options_repair & operator = (const html_options_repair & ref) = delete; html_options_repair & operator = (html_options_repair && ref) noexcept = delete; ~html_options_repair() = default; /// mandatory call to invoke ASAP after constructor void set_biblio(const std::shared_ptr & ptr); /// inherited from jsoner virtual void load_json(const json & source) override; /// inherited from jsoner virtual json save_json() const override; /// inherited from jsoner virtual void clear_json() override; /// inherited from bibliotheque_subconfig virtual bibliotheque::using_set get_using_set() const override; /// inherited from actor virtual void on_event(const std::string & event_name) override; /// generate a corresponding libdar::archive_option_repair object libdar::archive_options_repair get_options(std::shared_ptr & webui) const; /// optain the current entrepot object where is expected to be repaired the archive std::shared_ptr get_entrepot(std::shared_ptr webui) const { return entrep->get_entrepot(webui); }; /// obtain the entrepot landing path const std::string & get_landing_path() const { return entrep->get_landing_path(); }; /// set the object to webdar defaults void set_to_webdar_defaults(); protected: /// inherited from body_builder virtual std::string inherited_get_body_part(const chemin & path, const request & req) override; /// inherited from body_builder virtual void new_css_library_available() override; private: bool ignore_events; html_derouleur deroule; // entrepot guichet guichet_entrep; std::shared_ptr entrep; // display settings html_form_input info_details; html_form_input display_treated; html_form_input display_only_dir; html_form_input display_skipped; html_form_input display_dirstats; html_form_fieldset display_fs; html_form display_form; // processing html_form_input allow_over; html_form_input warn_over; html_form_input pause; html_form_input execute; html_form_input dry_run; html_form_input multi_thread_compress; html_hash_algo hash_algo; html_form_fieldset processing_fs; html_form processing_form; // target html_form_input user_comment; html_form_fieldset target_fs; html_form target_form; // slicing guichet guichet_slicing; std::shared_ptr slicing; // crypto guichet guichet_ciphering; std::shared_ptr ciphering; void init(); void trigger_changed(); static constexpr const unsigned int format_version = 1; static constexpr const char* myclass_id = "html_options_repair"; static constexpr const char* jlabel_entrep = "entrepot"; static constexpr const char* jlabel_info_details = "info-details"; static constexpr const char* jlabel_display_treated = "display-treated"; static constexpr const char* jlabel_display_only_dir = "display-only-dirs"; static constexpr const char* jlabel_display_skipped = "display-skipped"; static constexpr const char* jlabel_display_dirstats = "display-dirstats"; static constexpr const char* jlabel_allow_over = "allow-over"; static constexpr const char* jlabel_warn_over = "warn-over"; static constexpr const char* jlabel_pause = "pause"; static constexpr const char* jlabel_execute = "execute"; static constexpr const char* jlabel_dry_run = "dry-run"; static constexpr const char* jlabel_multi_thread_compress = "compress-threads"; static constexpr const char* jlabel_hash_algo = "hash-algo"; static constexpr const char* jlabel_user_comment = "user-comment"; static constexpr const char* jlabel_slicing = "slicing"; static constexpr const char* jlabel_ciphering = "ciphering"; }; #endif webdar-1.0.0/src/html_form_ignore_as_symlink.cpp0000644000175000017520000001100214773727243016767 00000000000000/*********************************************************************/ // webdar - a web server and interface program to libdar // Copyright (C) 2013-2025 Denis Corbin // // This file is part of Webdar // // Webdar is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // Webdar is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Webdar. If not, see // //---- // to contact the author: dar.linux@free.fr /*********************************************************************/ // C system header files #include "my_config.h" extern "C" { } // C++ system header files #include // webdar headers #include "html_form_input_file.hpp" #include "webdar_css_style.hpp" // #include "html_form_ignore_as_symlink.hpp" using namespace std; const string html_form_ignore_as_symlink::changed = "hfias_changed"; html_form_ignore_as_symlink::html_form_ignore_as_symlink(): table(false, true, "Symlink to follow", "--- select ---") { table.set_obj_type_provider(this); table.add_obj_type("add new symlink to follow"); // index 0 in provide_object_of_type() // adoption tree adopt(&table); // events table.record_actor_on_event(this, html_form_dynamic_table::changed); register_name(changed); // css } set html_form_ignore_as_symlink::get_symlink_list() const { set ret; html_form_dynamic_table::iterator it = table.begin(); while(it != table.end()) { if(it.get_object_type() == 0) // this is the only expected type { shared_ptr obj = it.get_object(); if(!obj) throw WEBDAR_BUG; else { html_form_input_file* hfi = dynamic_cast(obj.get()); if(hfi == nullptr) throw WEBDAR_BUG; // the body_builder object is not an html_form_input ret.insert(hfi->get_value()); } } else throw WEBDAR_BUG; ++it; } return ret; } unique_ptr html_form_ignore_as_symlink::provide_object_of_type(unsigned int num, const string & context, string & changed_event) const { unique_ptr tmp; switch(num) { case 0: tmp.reset(new (nothrow) html_form_input_file("Followed symlink", "/", "", webdar_css_style::width_80vw, "Select a symlink...")); break; default: throw WEBDAR_BUG; } if(! tmp) throw exception_memory(); else tmp->set_select_mode(html_form_input_file::select_symlink); return tmp; } void html_form_ignore_as_symlink::load_json(const json & source) { try { unsigned int version; string class_id; json config = unwrap_config_from_json_header(source, version, class_id); if(class_id != myclass_id) throw exception_range(libdar::tools_printf("Unexpected class_id in json data, found %s while expecting %s", class_id.c_str(), myclass_id)); if(version > format_version) throw exception_range(libdar::tools_printf("Json format version too hight for %s, upgrade your webdar software", myclass_id)); table.load_json(config.at(jlabel_contents)); } catch(json::exception & e) { throw exception_json(libdar::tools_printf("Error loading %s config", myclass_id), e); } } json html_form_ignore_as_symlink::save_json() const { json ret; ret[jlabel_contents] = table.save_json(); return wrap_config_with_json_header(format_version, myclass_id, ret); } void html_form_ignore_as_symlink::clear_json() { table.clear_json(); } void html_form_ignore_as_symlink::on_event(const string & event_name) { if(event_name == html_form_dynamic_table::changed) act(changed); else throw WEBDAR_BUG; } string html_form_ignore_as_symlink::inherited_get_body_part(const chemin & path, const request & req) { return get_body_part_from_all_children(path, req); } void html_form_ignore_as_symlink::new_css_library_available() { unique_ptr & csslib = lookup_css_library(); if(!csslib) throw WEBDAR_BUG; webdar_css_style::update_library(*csslib); } webdar-1.0.0/src/html_version.hpp0000644000175000017520000000503114775733443013730 00000000000000/*********************************************************************/ // webdar - a web server and interface program to libdar // Copyright (C) 2013-2025 Denis Corbin // // This file is part of Webdar // // Webdar is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // Webdar is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Webdar. If not, see // //---- // to contact the author: dar.linux@free.fr /*********************************************************************/ #ifndef HTML_VERSION_HPP #define HTML_VERSION_HPP #include "my_config.h" // C system header files extern "C" { } // C++ system header files // webdar headers #include "html_popup.hpp" #include "actor.hpp" #include "html_button.hpp" #include "html_table.hpp" #include "html_div.hpp" /// class html_version is a popup displaying version information class html_version: public html_popup, public actor { public: html_version(); html_version(const html_version & ref) = delete; html_version(html_version && ref) noexcept = delete; html_version & operator = (const html_version & ref) = delete; html_version & operator = (html_version && ref) noexcept = delete; ~html_version() = default; /// inherited from actor virtual void on_event(const std::string & event_name) override; protected: /// inherited from body_builder virtual void new_css_library_available() override; private: html_text title; html_div title_box; html_table webdar_table; html_table libthreadar_table; html_table libdar_table; html_button close; void fill_libthreadar(html_table & table); void fill_libdar(html_table & table); static constexpr const char* event_close = "close"; static constexpr const char* css_close = "html_version_close"; static constexpr const char* css_table = "html_version_table"; static constexpr const char* css_table_top = "html_version_top"; static constexpr const char* css_table_left = "html_version_left"; static constexpr const char* css_table_cells = "html_version_cells"; }; #endif webdar-1.0.0/src/archive_merge.hpp0000644000175000017520000000430715024332536014006 00000000000000/*********************************************************************/ // webdar - a web server and interface program to libdar // Copyright (C) 2013-2025 Denis Corbin // // This file is part of Webdar // // Webdar is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // Webdar is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Webdar. If not, see // //---- // to contact the author: dar.linux@free.fr /*********************************************************************/ #ifndef ARCHIVE_MERGE_HPP #define ARCHIVE_MERGE_HPP // C system header files #include "my_config.h" extern "C" { } // C++ system header files #include #include // webdar headers #include "html_web_user_interaction.hpp" #include "html_options_merge.hpp" #include "saisie.hpp" /// class archive_merge runs libdar merging operation in a dedicated thread class archive_merge : public libthreadar::thread_signal { public: archive_merge(); archive_merge(const archive_merge & ref) = delete; archive_merge(archive_merge && ref) noexcept = default; archive_merge & operator = (const archive_merge & ref) = delete; archive_merge & operator = (archive_merge && ref) noexcept = default; ~archive_merge() { cancel(); join(); }; void set_user_interaction(const std::shared_ptr ref) { ui = ref; }; void set_parametrage(const saisie* x_param) { param = x_param; }; protected: /// inherited from class libthreadar::thread virtual void inherited_run() override; /// inherited from libthreadar::thread virtual void signaled_inherited_cancel() override; private: const saisie* param; std::shared_ptr ui; }; #endif webdar-1.0.0/src/webdar.cpp0000644000175000017520000006474715045122500012452 00000000000000/*********************************************************************/ // webdar - a web server and interface program to libdar // Copyright (C) 2013-2025 Denis Corbin // // This file is part of Webdar // // Webdar is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // Webdar is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Webdar. If not, see // //---- // to contact the author: dar.linux@free.fr /*********************************************************************/ // C system header files #include "my_config.h" extern "C" { #if HAVE_SIGNAL_H #include #endif #if HAVE_UNISTD_H #include #endif #if HAVE_STRING_H #include #endif #if HAVE_ERRNO_H #include #endif #if HAVE_SIGNAL_H #include #endif #if HAVE_TIME_H #include #endif #if HAVE_SYS_STAT_H #include #endif } /// the compiler version MACRO #ifndef __VERSION__ #define __VERSION__ "unknown" #endif /// the compiler Nature MACRO #ifdef __GNUC__ #define CC_NAT "GNUC" #else #define CC_NAT "unknown" #endif // C++ system header files #include #include #include #include #include // libraries header files #include #include #include // webdar headers #include "exceptions.hpp" #include "central_report.hpp" #include "listener.hpp" #include "webdar_tools.hpp" #include "server.hpp" #include "authentication.hpp" #include "base64.hpp" #include "choose.hpp" #include "static_object_library.hpp" #include "environment.hpp" #include "global_parameters.hpp" #include "server_pool.hpp" #define WEBDAR_EXIT_OK 0 #define WEBDAR_EXIT_SYNTAX 1 #define WEBDAR_EXIT_WEBDAR_BUG 2 #define WEBDAR_EXIT_LIBDAR_BUG 3 #define WEBDAR_EXIT_SIGT1 4 #define WEBDAR_EXIT_SIGT2 5 #define WEBDAR_EXIT_RESOURCE 6 #define DEFAULT_TCP_PORT 8008 #define DEFAULT_POOL_SIZE 50 #define SECURED_MEM_BYTE_SIZE 524288 /// \mainpage /// The following describes the overall architecture of the webdar software /// /// If you want more user level documents, checkout the following links: /// - Tutorial : https://edrusb.github.io/webdar /// Packages download : https://sourceforge.net/projects/webdar /// Github discussion : https://github.com/Edrusb/webdar/discussions /// /// /// The webdar main() launches: /// - a \ref central_report object that will gather logs from all internal components /// and output them to a specified destination (command-line, syslog, or other alternatives) /// - an \ref authentication object to validate user provided credentials /// - a \ref ssl_context information that carries the necessary information to setup a server side SSL session /// - a \ref listener object for each IPv4 and IPv6 specified on command-line, they all receive /// the a pointer to the \ref central_report and \ref authentication module as well as a copy of the /// the \ref ssl_context and the IP and port to listen on. /// Then the main() routine is pending for all listeners to end, or a signal to come to end the /// webdar process. /// /// The role of a \ref listener object is to create a \ref proto_connexion for each new incoming TCP session. /// This proto_connexion is passed with pointers to the central_report and authentication objects to /// a new \ref server object. Each server object with the help of a \ref parser object transforms the TCP byte /// stream into a suite of HTTP \ref request, and transmit back the corresponding HTTP \ref answer. /// These answers are obtained from either: /// - a \ref static_object for static components (images, licensing text, and so on)! /// - a \ref challenge object if the client has not yet been authenticated /// - a \ref choose object if the client is authenticated but the pointed to session does not exist /// - the \ref user_interface object from the \ref session pointed to by the HTTP request. /// The user_interface object is acquired by the server object from the \ref session class. /// /// the \ref session *class* manages a list of session *objects* associated with a reference counter /// that keep trace of the servers that have been given the session reference (only one can interact /// with the session at a given time). Only when the counter drops to zero that a closing session /// request can be executed leading the session to be torn down. A few flags are also associated with /// this session object in that table (locked, running libdar, or closing). /// /// The \ref session *objects* manage a \ref user_interface object to provide the answer to each HTTP request. /// this is associated with a semaphore for locking and the thread_id of the \ref server object /// (which is from a libdar::thread inherited class) managing the session. Such server object has /// obtained the session management calling session::acquire_session() and has not yet called /// session::release_session(). /// /// \ref user_interface class provides mean to setup HTTP response to HTTP request for that particular /// session. In other words, it handle user interaction thought the web interface. For that it /// relies on a set of \ref body_builder inherited classes within which, complex objects are build from simpler /// ones. Body builder objects are setup under a tree-like hierachy of adopted body_builder objects, with the a /// \ref html_page at the root. The user_interface class has /// several status and for each a different body_builder object is used to provide the body of the /// HTTP answer: /// - config: object parametrage of class \ref saisie /// - listing_open: object in_list of class \ref html_listing_page /// - listing: object in_action of class \ref html_libdar_running_page /// - running: object in_action of class \ref html_libdar_running_page /// - error: onject in_error of class \ref html_error /// /// most if not all \ref body_builder inherited class have a name starting with the html_* prefix /// Some components to behave as expected should be adopted by an \ref html_form object, these classes /// have a name staring with html_form_*. /// /// Pay attention that some objects are based on \ref html_form (they contain a set of html_form_ components /// adopted by an html_form root object and have a class name starting with html_*_form_* like /// html_mask_form_path or html_mask_form_filename. These are not to be adopted by an html form /// as they embedd an html_form object as private field. /// using namespace std; /// struct used to store TCP port and network interface struct interface_port { string interface; //< if empty means any interface unsigned int port; interface_port() { interface = ""; port = DEFAULT_TCP_PORT; }; }; static void parse_cmd(int argc, char *argv[], vector & ecoute, bool & verbose, bool & background, int & facility, string & certificate, string & privateK, unsigned int & max_srv); static void add_item_to_list(const char *optarg, vector & ecoute); static void close_all_listeners(int sig); static void libdar_init(); static void libdar_end(); static void usage(const char* argv0); static void show_ver(); // yes, this will point to a global object, this class handle concurrent access, // no problem in this multi-threaded program. // it is necessary to have this global for signal handler able to report what they do static shared_ptr creport; static vector taches; static shared_ptr pool; static void signal_handler(int x); static string reminder_msg; static time_t last_trigger; int main(int argc, char *argv[], char** env) { vector ecoute; bool verbose; bool background; int facility; int ret = WEBDAR_EXIT_OK; priority_t min; string fixed_user = "admin"; string fixed_pass; string certificate; string privateK; unsigned int max_srv; unique_ptr cipher(nullptr); last_trigger = time(nullptr) - 1; global_envir.feed(env); umask(0077); // for libdar to create directories we must not reduce the 0700 permission // set to mkdir. try { webdar_tools_init_randomization(); #ifdef WEBDAR_DEV fixed_pass = ""; #else fixed_pass = webdar_tools_generate_random_string(10); #endif shared_ptr auth(new (nothrow) authentication_cli(fixed_user, fixed_pass)); if(!auth) throw exception_memory(); // not using std::make_share above in order // to through an exception from the class tree of exception_base ///////////////////////////////////////////////// // analysing command-line arguments parse_cmd(argc, argv, ecoute, verbose, background, facility, certificate, privateK, max_srv); ///////////////////////////////////////////////// // creating central report object if(verbose) min = debug; else min = info; if(background) creport.reset(new (nothrow) central_report_syslog(min, "webdar", facility)); else creport.reset(new (nothrow) central_report_stdout(min)); if(!creport) throw exception_memory(); if(background) throw exception_feature("background as a daemon"); creport->report(debug, "central report object has been created"); ///////////////////////////////////////////////// // set signal handlers for type 1 and type 2 libthreadar::thread_signal::change_default_signal(THREAD_SIGNAL); // SIGUSR2 is used by libthread::thread_signal set signals_list; set::iterator sl_it; signals_list.insert(SIGHUP); signals_list.insert(SIGINT); signals_list.insert(SIGALRM); signals_list.insert(SIGTERM); signals_list.insert(SIGUSR1); sl_it = signals_list.begin(); while(sl_it != signals_list.end()) { const char *signal_name = strsignal(*sl_it); if(signal_name != nullptr) creport->report(debug, libdar::tools_printf("Adding hanlder for signal %s", strsignal(*sl_it))); else creport->report(debug, libdar::tools_printf("Adding hanlder for signal %d", *sl_it)); if(signal(*sl_it, signal_handler) == SIG_ERR) { if(signal_name != nullptr) throw exception_system(string("Cannot set signal handle for ") + string(strsignal(*sl_it)), errno); else throw exception_system(string("Cannot set signal handle for ") + to_string(*sl_it), errno); } ++sl_it; } ///////////////////////////////////////////////// // creating the server_pool, managing servers // which each, interact with a browser through an // http/https connection. pool.reset(new (nothrow) server_pool(max_srv, creport)); if(!pool) throw exception_memory(); creport->report(debug, libdar::tools_printf("A pool of %d server(s) has been created", max_srv)); ///////////////////////////////////////////////// try { vector::iterator it = ecoute.begin(); listener *tmp = nullptr; static_object_library::init(); try { libdar_init(); try { ///////////////////////////////////////////////// // creating and launching all threads reminder_msg = string ("\n\n\tYou can now point your browser at:\n"); while(it != ecoute.end()) { string iface = it->interface == "" ? "127.0.0.1" : it->interface; if(! certificate.empty() && ! privateK.empty()) { cipher.reset(new (nothrow) ssl_context(certificate, privateK)); if(!cipher) throw exception_memory(); creport->report(info, "A new SSL context has been created"); } if(it->interface == "0.0.0.0") iface = ""; reminder_msg += string("\t\t") + (cipher ? "https://" : "http://") + (iface) + string(":") + to_string(it->port) + string("\n"); if(it->interface == "") tmp = new (nothrow) listener(creport, auth, cipher, pool, it->port); else tmp = new (nothrow) listener(creport, auth, cipher, pool, it->interface, it->port); if(tmp == nullptr) throw exception_memory(); else { taches.push_back(tmp); tmp->run(); } if(cipher) throw WEBDAR_BUG; ++it; } creport->report(debug, "all listener threads have been launched, main thread waiting for all of them to complete"); reminder_msg += string("\tand use the following to authenticate:\n") + string("\t\tuser name = ") + fixed_user + "\n" + string("\t\tpassword = ") + fixed_pass + "\n\n"; creport->report(warning, reminder_msg); ///////////////////////////////////////////////// // looping while not all (listener) thread have ended while(!taches.empty()) { if(taches.back() == nullptr) taches.pop_back(); else if(!taches.back()->is_running()) { taches.back()->join(); // may throw exception delete taches.back(); taches.back() = nullptr; } else taches.back()->join(); // we are suspended waiting for this task to end } creport->report(info, "all listener threads have ended"); ///////////////////////////////////////////////// // killing remaining server threads pool->join(); creport->report(info, "all server threads have ended"); } catch(...) { vector::iterator ta = taches.begin(); while(ta != taches.end()) { if(*ta != nullptr) { delete *ta; *ta = nullptr; ++ta; } } taches.clear(); pool->cancel(); throw; } } catch(...) { static_object_library::release(); throw; } static_object_library::release(); } catch(...) { creport.reset(); libdar_end(); throw; } creport.reset(); libdar_end(); } catch(exception_memory & e) { cerr << "Memory allocation failed, cannot get the necessary memory from the system in order to provided the expected service" << endl; ret = WEBDAR_EXIT_RESOURCE; } catch(exception_bug & e) { cerr << "Webdar met an internal condition flagged as a bug: please report the following output to maintainer: " << e.get_message() << endl; ret = WEBDAR_EXIT_WEBDAR_BUG; } catch(libthreadar::exception_thread & e) { cerr << "Uncaught exception_thread reached program boundary! " << e.get_message(": ") << endl; ret = WEBDAR_EXIT_WEBDAR_BUG; } catch(libthreadar::exception_base & e) { cerr << "Uncaught libthreadar exception: " << e.get_message(": ") << endl; ret = WEBDAR_EXIT_WEBDAR_BUG; } catch(exception_system & e) { cerr << "Cannot proceed to the requested action, operating system reported: " << endl; cerr << e.get_message() << endl; ret = WEBDAR_EXIT_RESOURCE; } catch(exception_range & e) { cerr << "Out of range value or parameter: " << e.get_message() << endl; ret = WEBDAR_EXIT_WEBDAR_BUG; // if this exception is not caught at this level, this is a bug } catch(exception_feature & e) { cerr << e.get_message() << endl; // ret is unchanged } catch(exception_base & e) { cerr << "Unknown and unhandled webdar exception: " << endl << e.get_message() << endl; ret = WEBDAR_EXIT_WEBDAR_BUG; } catch(libdar::Ebug & e) { cerr << "Libdar bug met: " << endl; cerr << e.get_message() << endl; ret = WEBDAR_EXIT_LIBDAR_BUG; } catch(libdar::Egeneric & e) { cerr << "LIBDAR exception caught: "<< e.get_message() << endl; ret = WEBDAR_EXIT_RESOURCE; } catch(...) { cerr << "Unknown non webdar exception met" << endl; ret = WEBDAR_EXIT_WEBDAR_BUG; } return ret; } static void parse_cmd(int argc, char *argv[], vector & ecoute, bool & verbose, bool & background, int & facility, string & certificate, string & privateK, unsigned int & max_srv) { bool default_basic_auth = true; int lu; // prevents getopt to show a message when unknown option is met // we will report that ourselfves: opterr = 0; verbose = false; background = false; facility = LOG_USER; max_srv = DEFAULT_POOL_SIZE; ecoute.clear(); while((lu = getopt(argc, argv, "vl:bC:K:hm:w:V")) != -1) { switch(lu) { case 'v': verbose = true; break; case 'l': if(optarg == nullptr) throw exception_range("-l option needs an argument"); add_item_to_list(optarg, ecoute); break; case 'b': background = true; break; case 'C': certificate = optarg; if(certificate.empty()) throw exception_range("-C option needs a file name"); break; case 'K': privateK = optarg; if(privateK.empty()) throw exception_range("-K option needs a file name"); break; case 'h': usage(argv[0]); break; case '?': cerr << "Ignoring Unknown argument given on command line: " << lu << endl; break; case 'm': max_srv = webdar_tools_convert_to_int(optarg); break; case 'w': if(optarg != nullptr && strncasecmp("yes", optarg, strlen("yes")) == 0) { server::force_disconnection_at_end_of_session(false); html_disconnect::force_disconnection_at_end_of_session(false); } else if(optarg != nullptr && strncasecmp("no", optarg, strlen("no")) == 0) { server::force_disconnection_at_end_of_session(true); html_disconnect::force_disconnection_at_end_of_session(true); } else throw exception_range("-w option needs \"yes\" or \"no\" as argument"); break; case 'V': show_ver(); break; default: throw WEBDAR_BUG; // "known option by getopt but not known by webdar! } } if(optind < argc) { cerr << "Unknown options passed to " << argv[0] << ": "; for(int i = optind; i < argc; ++i) cerr << argv[i]; cerr << endl; } if(ecoute.size() < 1) { if(argc < 1 || argv[0] == nullptr) throw WEBDAR_BUG; else add_item_to_list((string("127.0.0.1:") + to_string(DEFAULT_TCP_PORT)).c_str(), ecoute); } if(background) throw exception_feature("webdar in background as a daemon"); } static void add_item_to_list(const char *optarg, vector & ecoute) { vector coma; interface_port couple; ecoute.clear(); webdar_tools_split_by(',', optarg, coma); for(vector::iterator itc = coma.begin(); itc != coma.end(); ++itc) { string m1, m2; if(itc->size() == 0) throw exception_range(string("Error while parsing argument, empty argument provided in comma separated list")); webdar_tools_split_in_two(']', *itc, m1, m2); if(m2 == "") // either final ']' or no ']' at all { if(*(itc->rbegin()) == ']') // there was a final ']' thus IPv6 is expected (without port specs) { string tmp; webdar_tools_split_in_two('[', m1, tmp, m2); if(tmp.empty() && ! m2.empty()) // full IPv6 specification { couple.port = DEFAULT_TCP_PORT; couple.interface = m2; } else throw exception_range(string("Error while parsing argument \"") + *itc + "\" : unbalanced '[' and ']'"); } else // no IPv6 provided, ':' are now only possible for port specification { webdar_tools_split_in_two(':', *itc, m1, m2); if(m2 == "") // no ':' or final ':' { if( *(itc->rbegin()) == ':') throw exception_range(string("Error while parsing argument \"") + *itc + "\" : unexpected ':' at end of argument"); else { couple.port = DEFAULT_TCP_PORT; couple.interface = m1; } } else // port specification provided { try { couple.port = webdar_tools_convert_to_int(m2); } catch(exception_base & e) { throw exception_range(string("Error while parsing argument \"") + *itc + "\" : " + e.get_message()); } if(m1.size() > 0) couple.interface = m1; else throw exception_range(string("Error while parsing argument \"") + *itc + "\" : missing IP of hostname specification before ':'"); } } } else // an IPv6 was given followed by a port specification { string tmp1, tmp2; if(m1.size() < 4 || *(m1.begin()) != '[') // smallest IPv6 specs if [::] throw exception_range(string("Error while parsing argument \"") + *itc + "\" : invalid IPv6 specification: " + m1); webdar_tools_split_in_two('[', m1, tmp1, tmp2); if(! tmp1.empty()) throw exception_range(string("unexpected string before IPv6 address in argument: ") + *itc); if(tmp2.empty()) throw exception_range(string("missing '[' before IPv6 address in argument: ") + *itc); couple.interface = tmp2; webdar_tools_split_in_two(':', m2, tmp1, tmp2); if(! tmp1.empty() || tmp2.empty()) // extra garbage between IPv6 and ':' throw exception_range(string("Port specification missing after IPV6 in argument: ") + *itc); try { couple.port = webdar_tools_convert_to_int(tmp2); } catch(exception_base & e) { throw exception_range(string("Error while parsing argument \"") + *itc + "\" : " + e.get_message()); } } ecoute.push_back(couple); } } static void close_all_listeners(int sig) { /// check if a current job is running bool job_running = false; vector current = session::get_summary(); vector::iterator it = current.begin(); while(it != current.end() && !it->libdar_running) ++it; job_running = (it != current.end()); /// if so report to central_report that we cannot interrupt the process /// either connect with appropriate rights and abort the running task if(job_running) creport->report(crit, "SIGNAL RECEIVED: A libdar job is currently running, cannot stop the operation, stop the running job(s) before from web interface"); else { creport->report(crit, "SIGNAL RECEIVED: propagating signal to all listener thread objects..."); for(vector::iterator it = taches.begin(); it != taches.end(); ++it) { if(*it == nullptr) throw WEBDAR_BUG; else (*it)->cancel(); } creport->report(crit, "SIGNAL RECEIVED: propagating signal to all server thread objects..."); if(pool) pool->cancel(); creport->report(crit, "SIGNAL RECEIVED: All listeners and server thread objects have been asked to end"); } } static void libdar_init() { libdar::U_I maj, med, min; libdar::get_version(maj, med, min, (libdar::U_I)(SECURED_MEM_BYTE_SIZE), true); if(maj != libdar::LIBDAR_COMPILE_TIME_MAJOR || med < libdar::LIBDAR_COMPILE_TIME_MEDIUM) throw libdar::Erange("initialization", "we are linking against a wrong libdar"); } static void libdar_end() { libdar::close_and_clean(); } static void signal_handler(int x) { static const int delta = 2; time_t now = time(nullptr); signal(x, signal_handler); if(now - last_trigger < delta) close_all_listeners(x); else { creport->report(warning, reminder_msg); creport->report(warning, string("\n\n\t\tfor real action instead of displaying this reminder message, hit twice this key combinaison in less than ") +to_string(delta)+string(" second(s)\n\n")); last_trigger = now; } } static void usage(const char* argv0) { string msg = "\n"; msg += libdar::tools_printf("Usage: %s [-l [:port]] [-v] [-b ] [-w ] [-m ] [-C -K ]\n", argv0); msg += libdar::tools_printf(" : %s -V\n", argv0); msg += libdar::tools_printf(" : %s -h\n\n", argv0); msg += libdar::tools_printf(" -l : IP/port webdar will listen on. Defaults to loopback IP on TCP port %d\n", DEFAULT_TCP_PORT); msg += libdar::tools_printf(" -v : verbose output\n"); msg += libdar::tools_printf(" -b : webdar in background sending messages to syslog (not yet implemented)\n"); msg += libdar::tools_printf(" -w : yes: basic auth (no disconnection from browser), no: authentication requested for each TCP session\n"); msg += libdar::tools_printf(" -m : max number of concurrent TCP sessions (%d by default)\n", DEFAULT_POOL_SIZE); msg += libdar::tools_printf(" -V : shows version information and exits\n"); msg += libdar::tools_printf(" -h : displays this short help\n"); msg += libdar::tools_printf(" -C : certificate from the PKI to authenticate the -K-given private key\n"); msg += libdar::tools_printf(" -K : private key to use to cipher exchanges with ssl (HTTPS sessions)\n\n"); msg += libdar::tools_printf("Creating a self signed certificate can be achieved with:\n"); msg += libdar::tools_printf(" openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout mycert.pem -out mycert.pem\n\n"); msg += libdar::tools_printf("Get the fingerprints of this self-signed certificate:\n"); msg += libdar::tools_printf(" openssl x509 -in mycert.pem -fingerprint -noout\n"); msg += libdar::tools_printf(" openssl x509 -in mycert.pem -fingerprint -sha256 -noout\n\n"); msg += libdar::tools_printf("You can then setup webdar for HTTPS this way:\n"); msg += libdar::tools_printf(" webdar -l 0.0.0.0 -v -C mycert.pem -K mycert.pem\n\n"); msg += libdar::tools_printf("Then compare the SHA1 and/or SHA256 fingerprints of the certificate\n"); msg += libdar::tools_printf("received by your browser, the first time when it will complain about a probable risk.\n"); msg += libdar::tools_printf("If they match the ones you calculated as shown above, you are good to drive your\n"); msg += libdar::tools_printf("browser to accept this certificate once and for all. Any subsequent warning from the\n"); msg += libdar::tools_printf("browser while connecting to Webdar using the same certificate on the same node should\n"); msg += libdar::tools_printf("be considered an attack. You should consider the network insecured, the Wedar or browser\n"); msg += libdar::tools_printf("nodes compromised... unless this is just the certifcate generated above that has expired!\n\n"); cout << msg << endl; exit(1); } static void show_ver() { string msg; msg += libdar::tools_printf("\nWebdar version %s, Copyright (C) 2002-2025 Denis Corbin\n", WEBDAR_VERSION); msg += libdar::tools_printf(gettext(" compiled the %s with %s version %s\n"), __DATE__, CC_NAT, __VERSION__); cout << msg << endl; exit(1); } webdar-1.0.0/src/actor.cpp0000644000175000017520000000246114773727243012325 00000000000000/*********************************************************************/ // webdar - a web server and interface program to libdar // Copyright (C) 2013-2025 Denis Corbin // // This file is part of Webdar // // Webdar is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // Webdar is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Webdar. If not, see // //---- // to contact the author: dar.linux@free.fr /*********************************************************************/ // C system header files #include "my_config.h" extern "C" { } // C++ system header files // webdar headers #include "exceptions.hpp" // #include "actor.hpp" using namespace std; actor & actor::operator = (actor && ref) noexcept(false) { static_cast(*this) = std::move(static_cast(ref)); return *this; } webdar-1.0.0/src/html_options_create.hpp0000644000175000017520000002655314773727243015274 00000000000000/*********************************************************************/ // webdar - a web server and interface program to libdar // Copyright (C) 2013-2025 Denis Corbin // // This file is part of Webdar // // Webdar is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // Webdar is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Webdar. If not, see // //---- // to contact the author: dar.linux@free.fr /*********************************************************************/ #ifndef HTML_OPTIONS_CREATE_HPP #define HTML_OPTIONS_CREATE_HPP // C system header files #include "my_config.h" extern "C" { } // C++ system header files #include #include // webdar headers #include "body_builder.hpp" #include "actor.hpp" #include "events.hpp" #include "html_form_input.hpp" #include "html_comparison_fields.hpp" #include "html_form_fieldset.hpp" #include "html_datetime.hpp" #include "html_form.hpp" #include "html_archive_read.hpp" #include "html_hash_algo.hpp" #include "html_derouleur.hpp" #include "html_text.hpp" #include "html_entrepot_landing.hpp" #include "html_web_user_interaction.hpp" #include "html_mask_form_filename.hpp" #include "html_mask_form_path.hpp" #include "html_form_select.hpp" #include "html_form_same_fs.hpp" #include "html_form_ignore_as_symlink.hpp" #include "html_form_sig_block_size.hpp" #include "html_form_input_unit.hpp" #include "html_compression_params.hpp" #include "html_slicing.hpp" #include "html_ciphering.hpp" #include "html_fsa_scope.hpp" #include "guichet.hpp" #include "jsoner.hpp" #include "bibliotheque_subconfig.hpp" /// html component used for the user to provide the parameters to create a new archive class html_options_create : public body_builder, public actor, public events, public jsoner, public bibliotheque_subconfig { public: static const std::string landing_path_changed; ///< only change is related to entrepot's landing_path static const std::string entrepot_changed; ///< only changes are related to entrepot (excluding landing_path) static const std::string changed; ///< any parameter change (including entrepot_changed, but excluding landing_path) html_options_create(); html_options_create(const html_options_create & ref) = delete; html_options_create(html_options_create && ref) noexcept = delete; html_options_create & operator = (const html_options_create & ref) = delete; html_options_create & operator = (html_options_create && ref) noexcept = delete; ~html_options_create() = default; /// mandatory call to invoke ASAP after constructor void set_biblio(const std::shared_ptr & ptr); /// inherited from jsoner virtual void load_json(const json & source) override; /// inherited from jsoner virtual json save_json() const override; /// inherited from jsoner virtual void clear_json() override; /// inherited from bibliotheque_subconfig virtual bibliotheque::using_set get_using_set() const override; /// inherited from actor virtual void on_event(const std::string & event_name) override; /// informations available for libdar /// /// \note if a reference is requested it implies openninng an archive /// and feeding the libdar::archive_options_create::set_reference(libdar::archive *) /// with the object built from this->get_reference().* libdar::archive_options_create get_options(std::shared_ptr & webui) const; /// obtain the current entrepot object where is expected to be create the archive std::shared_ptr get_entrepot(std::shared_ptr webui) const { return entrep->get_entrepot(webui); }; /// obtain the current landing path const std::string & get_landing_path() const { return entrep->get_landing_path(); }; /// needed for path based filtering to filter accordingly to the current root_fs void set_fs_root(const std::string & prefix) { path_mask->set_fs_root(prefix); }; /// set the object to webdar defaults void set_to_webdar_defaults(); protected: /// inherited from body_builder virtual std::string inherited_get_body_part(const chemin & path, const request & req) override; /// inherited from body_builder virtual void new_css_library_available() override; private: bool ignore_events; html_derouleur deroule; guichet guichet_entrep; std::shared_ptr entrep; html_form form_archtype; html_form form_delta_sig; html_form form_reading; html_form form_archgen; html_form form_shown; html_form form_perimeter; guichet guichet_filename_mask; std::shared_ptr filename_mask; guichet guichet_path_mask; std::shared_ptr path_mask; guichet guichet_ea_mask; std::shared_ptr ea_mask; html_form form_same_fs; html_form_fieldset archtype_fs; html_form_radio archtype; // fs_archtype member html_datetime fixed_date; // fs_archtype member html_archive_read reference; // fs_archtype member html_form_fieldset wrap_ref; // help make distinction at display between archive or ref options and archive options html_text binary_delta_note; // note about binary delta requirement html_text ref_placeholder; // shows when archtype is not differential/incremental html_form_fieldset delta_fs; html_form_input delta_sig; html_text delta_filter_params; guichet guichet_sig_block_size; std::shared_ptr sig_block_size; html_text delta_filter_title; guichet guichet_delta_mask; std::shared_ptr delta_mask; html_form_fieldset fs_alter_atime; html_form_radio alter_atime; html_form_input furtive_read_mode; html_form_input zeroing_neg_date; html_form_fieldset fs_mod_data_detect; html_form_radio mod_data_detect; html_form_ignore_as_symlink follow_symlinks; html_form_fieldset archgen_fs; html_form_input allow_over; html_form_input warn_over; html_form_input pause; html_form_input retry_on_change_times; html_form_input_unit retry_on_change_overhead; html_form_input sequential_marks; html_form_input_unit sparse_file_min_size; html_form_input user_comment; html_hash_algo hash_algo; html_form_input execute; html_comparison_fields what_to_check; html_form_input hourshift; // fs_archtype member html_form_input empty; html_form_fieldset shown_fs; html_form_input info_details; html_form_input display_treated; html_form_input display_treated_only_dir; html_form_input display_skipped; html_form_input display_dir_summary; html_form_input security_check; html_form_input dont_ignore_unknown_inode_type; html_form_fieldset perimeter_fs; html_form_input empty_dir; html_form_input cache_directory_tagging; html_form_input nodump; html_form_fieldset exclu_by_ea_fs; html_form_input exclude_by_ea; html_form_input default_ea; html_form_input exclude_by_ea_name; html_form_same_fs same_fs; html_form_fieldset same_fs_fs; guichet guichet_compr_params; std::shared_ptr compr_params; html_text compr_filter_title; guichet guichet_compr_mask; std::shared_ptr compr_mask; html_fsa_scope fsa_scope; guichet guichet_slicing; std::shared_ptr slicing; guichet guichet_ciphering; std::shared_ptr ciphering; void init(); void trigger_changed(); static constexpr const unsigned int format_version = 1; static constexpr const char* myclass_id = "html_form_options_create"; static constexpr const char* jlabel_entrep = "entrepot"; static constexpr const char* jlabel_file_mask = "file-mask"; static constexpr const char* jlabel_path_mask = "path-mask"; static constexpr const char* jlabel_ea_mask = "ea-mask"; static constexpr const char* jlabel_archtype = "archive-type"; static constexpr const char* jlabel_fixed_date = "fixed-date"; static constexpr const char* jlabel_reference = "reference"; static constexpr const char* jlabel_delta_sig = "delta-sig"; static constexpr const char* jlabel_sig_block_size = "delta-sig-block-size"; static constexpr const char* jlabel_delta_mask = "delta-mask"; static constexpr const char* jlabel_alter_atime = "alter-atime"; static constexpr const char* jlabel_furtive_read = "furtive-read"; static constexpr const char* jlabel_zeroing = "zeroing-neg-dates"; static constexpr const char* jlabel_mod_data = "modified-data-detection"; static constexpr const char* jlabel_follow_sym = "follow-symlinks"; static constexpr const char* jlabel_allow_over = "allow-overwrite"; static constexpr const char* jlabel_warn_over = "warn-overwrite"; static constexpr const char* jlabel_pause = "pause"; static constexpr const char* jlabel_retry_times = "retry-times"; static constexpr const char* jlabel_retry_overhead = "retry-overhead"; static constexpr const char* jlabel_sequential_marks = "tape-marks"; static constexpr const char* jlabel_sparse_min_size = "sparse-file-min-size"; static constexpr const char* jlabel_user_comment = "user-comment"; static constexpr const char* jlabel_hash_algo = "hash-algo"; static constexpr const char* jlabel_execute = "execute"; static constexpr const char* jlabel_what_to_check = "what-to-check"; static constexpr const char* jlabel_hourshift = "hourshift"; static constexpr const char* jlabel_empty = "dry-run"; static constexpr const char* jlabel_info_details = "info-details"; static constexpr const char* jlabel_display_treated = "display-treated"; static constexpr const char* jlabel_display_only_dir = "display-on-dirs"; static constexpr const char* jlabel_display_skipped = "display-skipped"; static constexpr const char* jlabel_display_dir_summ = "display-dir-summary"; static constexpr const char* jlabel_secu_check = "security-check"; static constexpr const char* jlabel_dont_ignore_unknown = "dont-ignore-unknown-inode-types"; static constexpr const char* jlabel_empty_dir = "empty-dirs"; static constexpr const char* jlabel_cache_dir_tag = "cache-dir-tagging"; static constexpr const char* jlabel_nodump = "nodump"; static constexpr const char* jlabel_exclude_by_ea = "exclude-by-ea"; static constexpr const char* jlabel_default_ea = "exclude-by-ea-default-name"; static constexpr const char* jlabel_exclude_by_ea_name = "exclude-by-ea-named"; static constexpr const char* jlabel_same_fs = "same-fs"; static constexpr const char* jlabel_compr_params = "compress-params"; static constexpr const char* jlabel_compr_mask = "compress-mask"; static constexpr const char* jlabel_fsa_scope = "fsa-scope"; static constexpr const char* jlabel_slicing = "slicing"; static constexpr const char* jlabel_ciphering = "ciphering"; }; #endif webdar-1.0.0/src/central_report.hpp0000644000175000017520000000640714775732544014253 00000000000000/*********************************************************************/ // webdar - a web server and interface program to libdar // Copyright (C) 2013-2025 Denis Corbin // // This file is part of Webdar // // Webdar is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // Webdar is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Webdar. If not, see // //---- // to contact the author: dar.linux@free.fr /*********************************************************************/ #ifndef CENTRAL_REPORT_HPP #define CENTRAL_REPORT_HPP // C system header files #include "my_config.h" extern "C" { #if HAVE_SYSLOG_H #include #endif #if HAVE_PTHREAD_H #include #endif } // C++ system header files #include #include // webdar headers /// means by which webdar event get reported either to stdout or to syslog enum priority_t { crit, err, warning, notice, info, debug }; /// pure virtual class defining the common interface of log centralization implementations class central_report { public: central_report(priority_t min_logged): min(min_logged) {}; central_report(const central_report & ref) = delete; central_report(central_report && ref) noexcept = delete; central_report & operator = (const central_report & ref) = delete; central_report & operator = (central_report && ref) noexcept = delete; virtual ~central_report() noexcept(false) {}; void report(priority_t priority, const std::string & message); protected: virtual void inherited_report(priority_t priority, const std::string & message) = 0; private: priority_t min; static libthreadar::mutex access; //< caller must acquire mutex before reporting }; /// implements a central_report logging centralization which output the logs on stdout class central_report_stdout : public central_report { public: central_report_stdout(priority_t min_logged): central_report(min_logged) {}; protected: virtual void inherited_report(priority_t priority, const std::string & message) override; }; /// implements a central_report logging centralization which send logs to syslog class central_report_syslog : public central_report { public: central_report_syslog(priority_t min_logged, const std::string & fixed_label, int facility); ~central_report_syslog() noexcept(false); protected: virtual void inherited_report(priority_t priority, const std::string & message) override; private: std::string label; //< need to exist during the whole life of the object for syslog(3) to work as expected // static fields static unsigned int num_obj; //< number of object created (only one is allowed as syslog routine is not re-entrant) static libthreadar::mutex num_obj_mod; //< controls the write access to num_obj }; #endif webdar-1.0.0/src/html_form_overwrite_chain_cell.cpp0000644000175000017520000000426014773727243017452 00000000000000/*********************************************************************/ // webdar - a web server and interface program to libdar // Copyright (C) 2013-2025 Denis Corbin // // This file is part of Webdar // // Webdar is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // Webdar is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Webdar. If not, see // //---- // to contact the author: dar.linux@free.fr /*********************************************************************/ // C system header files #include "my_config.h" extern "C" { } // C++ system header files // webdar headers // #include "html_form_overwrite_chain_cell.hpp" using namespace std; const string html_form_overwrite_chain_cell::changed = "hfo_chain_cell_changed"; html_form_overwrite_chain_cell::html_form_overwrite_chain_cell(unique_ptr & insert): incell(std::move(insert)) { // components setup if(!incell) throw WEBDAR_BUG; // adoption tree adopt(&line); adopt(incell.get()); // events incell->record_actor_on_event(this, html_form_overwrite_action::changed); register_name(changed); // css } html_form_overwrite_action & html_form_overwrite_chain_cell::get_cell_action() { html_form_overwrite_action* ptr = nullptr; if(!incell) throw WEBDAR_BUG; ptr = incell.get(); if(ptr == nullptr) throw WEBDAR_BUG; return *ptr; } unique_ptr html_form_overwrite_chain_cell::get_overwriting_action() const { return incell->get_overwriting_action(); } void html_form_overwrite_chain_cell::on_event(const string & event_name) { if(event_name == html_form_overwrite_action::changed) act(changed); else throw WEBDAR_BUG; } webdar-1.0.0/src/html_entrepot.cpp0000644000175000017520000004225415042200462014060 00000000000000/*********************************************************************/ // webdar - a web server and interface program to libdar // Copyright (C) 2013-2025 Denis Corbin // // This file is part of Webdar // // Webdar is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // Webdar is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Webdar. If not, see // //---- // to contact the author: dar.linux@free.fr /*********************************************************************/ // C system header files #include "my_config.h" extern "C" { } // C++ system header files #include // webdar headers #include "webdar_tools.hpp" #include "environment.hpp" #include "webdar_tools.hpp" #include "css.hpp" #include "tokens.hpp" #include "webdar_css_style.hpp" #include "tooltip_messages.hpp" // #include "html_entrepot.hpp" using namespace std; const string html_entrepot::changed = "html_entrep_changed"; const string html_entrepot::repo_type_changed = html_form_select::changed + "type"; // to be sure this is different from the default event name html_entrepot::html_entrepot(): form("Apply changes"), fs(""), repo_type("Repository type", repo_type_changed), host("Remote host", html_form_input::text, "", "", webdar_css_style::width_100vw_3em), port("Port", html_form_input::number, "0", "10", webdar_css_style::width_100vw_3em), login("Login", html_form_input::text, "", "", webdar_css_style::width_100vw_3em), auth_type("Authentication mode"), pass("Password", html_form_input::password, "", "", webdar_css_style::width_100vw_3em), auth_from_file("Fetch password from netrc file", html_form_input::check, "", "", ""), pub_keyfile("Public key file", "/", "", webdar_css_style::width_100vw, "Select the public key file..."), prv_keyfile("Private key file", "/", "", webdar_css_style::width_100vw, "Select the private key file..."), knownhosts_check("Check remote host from the known-hosts file", html_form_input::check, "1", "", ""), known_hosts_file("Known-hosts file", "/", "", webdar_css_style::width_100vw, "Select the knowhosts file..."), wait_time("Network retry delay (s)", html_form_input::number, default_waittime, "5", webdar_css_style::width_100vw_3em), verbose("Verbose network connection", html_form_input::check, default_verbose, "", ""), custom_event_name(changed), ignore_events(false), entrep_type_has_changed(false), entrep_need_update(false) { #ifdef LIBTHREADAR_STACK_FEATURE set_stack_size(DEFAULT_STACK_SIZE); #endif // component configuration repo_type.add_choice(type_local, "local file system"); // index 0 repo_type.add_choice(type_ftp, "FTP protocol (unciphered)"); // index 1 repo_type.add_choice(type_sftp, "SFTP protocol (ciphered)"); // index 2 repo_type.set_selected_num(0); port.set_range(1, 65536); // actually set to zero to track value change, but 0 is invalid wait_time.set_min_only(5); auth_type.add_choice(auth_pass, "Password authentication"); auth_type.add_choice(auth_key, "Keyfile authentication"); auth_type.set_selected_num(0); pub_keyfile.set_select_mode(html_form_input_file::select_file); pub_keyfile.set_can_create_dir(false); prv_keyfile.set_select_mode(html_form_input_file::select_file); prv_keyfile.set_can_create_dir(false); known_hosts_file.set_select_mode(html_form_input_file::select_file); known_hosts_file.set_can_create_dir(false); reset_ssh_files(); // adoption tree adopt(&repo_type); adopt(&host); adopt(&port); adopt(&login); adopt(&auth_type); adopt(&pass); adopt(&auth_from_file); adopt(&pub_keyfile); adopt(&prv_keyfile); adopt(&knownhosts_check); adopt(&known_hosts_file); adopt(&wait_time); adopt(&verbose); // events and actors repo_type.record_actor_on_event(this, repo_type_changed); auth_type.record_actor_on_event(this, html_form_select::changed); knownhosts_check.record_actor_on_event(this, html_form_input::changed); port.record_actor_on_event(this, html_form_input::changed); // my own events register_name(custom_event_name); // equal to "changed" at cosntruction time, here // css // update components visibility update_visible(); // tooltips repo_type.set_tooltip(TOOLTIP_HE_REPO_TYPE); host.set_tooltip(TOOLTIP_HE_HOST); port.set_tooltip(TOOLTIP_HE_PORT); login.set_tooltip(TOOLTIP_HE_LOGIN); pass.set_tooltip(TOOLTIP_HE_PASS); auth_type.set_tooltip(TOOLTIP_HE_AUTH); pub_keyfile.set_tooltip(TOOLTIP_HE_PUB); prv_keyfile.set_tooltip(TOOLTIP_HE_PRV); knownhosts_check.set_tooltip(TOOLTIP_HE_KNOWN_CHECK); known_hosts_file.set_tooltip(TOOLTIP_HE_KNOWN_FILE); wait_time.set_tooltip(TOOLTIP_HE_WAIT); verbose.set_tooltip(TOOLTIP_HE_VERBOSE); } shared_ptr & html_entrepot::get_entrepot(shared_ptr & webui) const { html_entrepot* me = const_cast(this); if(me == nullptr) throw WEBDAR_BUG; if(!webui) throw WEBDAR_BUG; entrep_ctrl.lock(); try { dialog = webui->get_user_interaction(); if(!dialog) throw WEBDAR_BUG; if(! entrep || entrep_need_update) { if(! webui->is_libdar_running()) webui->auto_hide(true, true); if(is_running()) throw WEBDAR_BUG; // this object should not have its own thread running if(! webui->is_libdar_running()) { webui->run_and_control_thread(me); // this launches a new thread running inherited_run() and the call returns webui->join_controlled_thread(); // we join() ourself, yes, we wait here for the thread launched above to complete or be interrupted } else me->inherited_run(); // run in the current thread } entrep_need_update = false; } catch(...) { entrep_ctrl.unlock(); throw; } entrep_ctrl.unlock(); if(!entrep) throw WEBDAR_BUG; // if an error had to succeed, an exception should be propagated from the join() above // as this is not the case (there is no try/catch statement to catch it here) the inherited_run // succeeded but did not provide a libdar::entrepot as it should return entrep; } void html_entrepot::on_event(const string & event_name) { if(ignore_events) return; if(event_name == repo_type_changed) { entrep_type_has_changed = true; // no need to trigger my_body_part_has_changed() // if the body_builder objects we adopted changed, // our body_builder changed status will be set accordingly ignore_events = true; try { switch(repo_type.get_selected_num()) { case 0: // nothing to do break; case 1: clear_form(); port.set_value("21"); break; case 2: clear_form(); port.set_value("22"); break; default: throw WEBDAR_BUG; } } catch(...) { ignore_events = false; throw; } ignore_events = false; } else if(event_name == html_form_select::changed || event_name == html_form_input::changed) entrep_type_has_changed = true; else throw WEBDAR_BUG; update_visible(); } void html_entrepot::set_event_name(const string & name) { rename_name(custom_event_name, name); custom_event_name = name; } void html_entrepot::load_json(const json & source) { try { unsigned int version; string class_id; json config = unwrap_config_from_json_header(source, version, class_id); if(class_id != myclass_id) throw exception_range(libdar::tools_printf("Unexpected class_id in json data, found %s while expecting %s", class_id.c_str(), myclass_id)); if(version > format_version) throw exception_range(libdar::tools_printf("Json format version too hight for %s, upgrade your webdar software", myclass_id)); ignore_events = true; try { repo_type.set_selected_id(config.at(jlabel_type)); host.set_value(config.at(jlabel_host)); port.set_value(config.at(jlabel_port)); login.set_value(config.at(jlabel_login)); auth_type.set_selected_num(config.at(jlabel_authtype)); pass.set_value(config.at(jlabel_pass)); auth_from_file.set_value_as_bool(config.at(jlabel_auth_from_file)); pub_keyfile.set_value(config.at(jlabel_pubkey)); prv_keyfile.set_value(config.at(jlabel_prvkey)); knownhosts_check.set_value_as_bool(config.at(jlabel_knownhosts)); known_hosts_file.set_value(config.at(jlabel_knownhosts_file)); wait_time.set_value(config.at(jlabel_waittime)); verbose.set_value_as_bool(config.at(jlabel_verbose)); } catch(...) { ignore_events = false; throw; } ignore_events = false; update_visible(); } catch(json::exception & e) { throw exception_json(libdar::tools_printf("Error loading %s config", myclass_id), e); } // the object may be changed by load_json() even when this // component is not visible, thus the entrep_need_update will // not be set as inherited_get_body_part() will not be invoked. // For that reason we force the entrep_need_update to true // in order for get_entrepot() to consider the changes and // return when requested a re-generated libdar::entrepot entrep_need_update = true; // the change event was disabled above to (ignore events) // to prevent the event generation for each parameter change, // we can/must now also force the change event for object // that depend on it be informed the component has change, // but doing that way, they will be only informed once and // when all parameters are set to their correct value trigger_changed_event(); } json html_entrepot::save_json() const { json config; config[jlabel_type] = repo_type.get_selected_id(); config[jlabel_host] = host.get_value(); config[jlabel_port] = port.get_value(); config[jlabel_login] = login.get_value(); config[jlabel_authtype] = auth_type.get_selected_num(); config[jlabel_pass] = pass.get_value(); config[jlabel_auth_from_file] = auth_from_file.get_value_as_bool(); config[jlabel_pubkey] = pub_keyfile.get_value(); config[jlabel_prvkey] = prv_keyfile.get_value(); config[jlabel_knownhosts] = knownhosts_check.get_value_as_bool(); config[jlabel_knownhosts_file] = known_hosts_file.get_value(); config[jlabel_waittime] = wait_time.get_value(); config[jlabel_verbose] = verbose.get_value_as_bool(); return wrap_config_with_json_header(format_version, myclass_id, config); } void html_entrepot::clear_json() { ignore_events = true; try { reset_ssh_files(); repo_type.set_selected_num(0); login.set_value(""); pass.set_value(""); auth_from_file.set_value_as_bool(false); knownhosts_check.set_value_as_bool(true); wait_time.set_value(default_waittime); verbose.set_value(default_verbose); } catch(...) { ignore_events = false; throw; } ignore_events = false; update_visible(); // same remark here as load_json() above entrep_need_update = true; trigger_changed_event(); } void html_entrepot::set_to_webdar_defaults() { repo_type.set_selected_id(type_local); } string html_entrepot::inherited_get_body_part(const chemin & path, const request & req) { string ret; entrep_type_has_changed = false; ret = get_body_part_from_all_children(path, req); // When a change has just been received: // we must record that the entrep will have // to be recreated when it will be requested // note: entrep_type_has_changed is local to the call // and needed to avoid generating the event in all case // read the comments below... entrep_need_update is // an object field and survives this method. entrep_need_update |= has_my_body_part_changed(); // reset by get_entrepot() if(has_my_body_part_changed() && (! entrep_type_has_changed || repo_type.get_selected_num() == 0)) // we trigger an event only if: // there was some change in the html parameters but if the // repo type has changed we only trigger if the new type is of // local file system. The reason is to avoid trying to generate // sftp or ftp entrepot while the user has just changed the type // to theses but has not yet got the opportunity to provide // parameters. Local file system is different because it has no // parameters to be set. trigger_changed_event(); return ret; } void html_entrepot::css_classes_have_changed() { set css_classes = get_css_classes_as_a_set(); form.clear_css_classes(); for(set::iterator it = css_classes.begin(); it != css_classes.end(); ++it) form.add_css_class(*it); } void html_entrepot::new_css_library_available() { unique_ptr & csslib = lookup_css_library(); if(!csslib) throw WEBDAR_BUG; webdar_css_style::update_library(*csslib); } void html_entrepot::inherited_run() { if(!dialog) throw WEBDAR_BUG; try { libdar::remote_entrepot_type proto; switch(repo_type.get_selected_num()) { case 0: entrep.reset(new (nothrow) libdar::entrepot_local("", "", true)); break; case 1: case 2: switch(repo_type.get_selected_num()) { case 1: proto = libdar::remote_entrepot_type::ftp; break; case 2: proto = libdar::remote_entrepot_type::sftp; break; default: throw WEBDAR_BUG; } cancellation_checkpoint(); entrep = libdar::create_remote_entrepot(dialog, proto, login.get_value(), libdar::secu_string(pass.get_value().c_str(), pass.get_value().size()), host.get_value(), port.get_value(), auth_from_file.get_value_as_bool(), pub_keyfile.get_value(), prv_keyfile.get_value(), knownhosts_check.get_value_as_bool() ? "" : known_hosts_file.get_value(), libdar::U_I(webdar_tools_convert_to_int(wait_time.get_value())), verbose.get_value_as_bool()); break; default: throw WEBDAR_BUG; } if(!entrep) throw exception_memory(); } catch(...) { dialog.reset(); throw; } dialog.reset(); } void html_entrepot::signaled_inherited_cancel() { pthread_t libdar_tid; libdar::thread_cancellation th; if(is_running(libdar_tid)) th.cancel(libdar_tid, true, 0); } void html_entrepot::update_visible() { switch(repo_type.get_selected_num()) { case 0: // local host.set_visible(false); port.set_visible(false); login.set_visible(false); auth_type.set_visible(false); pass.set_visible(false); auth_from_file.set_visible(false); pub_keyfile.set_visible(false); prv_keyfile.set_visible(false); knownhosts_check.set_visible(false); known_hosts_file.set_visible(false); wait_time.set_visible(false); verbose.set_visible(false); break; case 1: // ftp case 2: // sftp host.set_visible(true); port.set_visible(true); login.set_visible(true); if(repo_type.get_selected_num() == 1) // ftp { auth_type.set_visible(false); auth_from_file.set_visible(true); pub_keyfile.set_visible(false); prv_keyfile.set_visible(false); knownhosts_check.set_visible(false); known_hosts_file.set_visible(false); pass.set_visible(true); } else // sftp { auth_type.set_visible(true); switch(auth_type.get_selected_num()) { case 0: // pass pass.set_visible(true); auth_from_file.set_visible(true); pub_keyfile.set_visible(false); prv_keyfile.set_visible(false); break; case 1: // auth key pass.set_visible(false); auth_from_file.set_visible(false); pub_keyfile.set_visible(true); prv_keyfile.set_visible(true); break; default: throw WEBDAR_BUG; } knownhosts_check.set_visible(true); known_hosts_file.set_visible(knownhosts_check.get_value_as_bool()); } wait_time.set_visible(true); verbose.set_visible(true); break; default: throw WEBDAR_BUG; } } void html_entrepot::trigger_changed_event() { if(custom_event_name.empty()) act(changed); else act(custom_event_name); } void html_entrepot::clear_form() { host.set_value(""); port.set_value("0"); login.set_value(""); auth_type.set_selected_num(0); pass.set_value(""); auth_from_file.set_value(""); } void html_entrepot::reset_ssh_files() { chemin home = global_envir.get_value_with_default("HOME", "/"); string val; chemin tmp; if(global_envir.get_value_of("DAR_SFTP_PUBLIC_KEYFILE", val)) pub_keyfile.set_value(val); else { tmp = home; tmp.push_back(".ssh"); tmp.push_back("id_rsa.pub"); pub_keyfile.set_value(tmp.display()); } if(global_envir.get_value_of("DAR_SFTP_PRIVATE_KEYFILE", val)) prv_keyfile.set_value(val); else { tmp = home; tmp.push_back(".ssh"); tmp.push_back("id_rsa"); prv_keyfile.set_value(tmp.display()); } if(global_envir.get_value_of("DAR_SFTP_KNOWNHOSTS_FILE", val)) known_hosts_file.set_value(val); else { tmp = home; tmp.push_back(".ssh"); tmp.push_back("known_hosts"); known_hosts_file.set_value(tmp.display()); } } webdar-1.0.0/src/html_button.cpp0000644000175000017520000000661715001742024013536 00000000000000/*********************************************************************/ // webdar - a web server and interface program to libdar // Copyright (C) 2013-2025 Denis Corbin // // This file is part of Webdar // // Webdar is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // Webdar is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Webdar. If not, see // //---- // to contact the author: dar.linux@free.fr /*********************************************************************/ // C system header files #include "my_config.h" extern "C" { } // C++ system header files // webdar headers #include "html_page.hpp" // #include "html_button.hpp" using namespace std; const string html_button::action = "click"; html_button::html_button(const string & x_label, const string & x_event_name): label(x_label), inside(""), event_name(x_event_name) { change_label(x_label); reset_adoption_tree(true); // enabled by default path_has_changed(); // to set link value of "inside" field register_name(event_name); } void html_button::change_label(const string & x_label) { label = x_label; text.clear(); text.add_text(0, label); my_body_part_has_changed(); } string html_button::inherited_get_body_part(const chemin & path, const request & req) { chemin target = req.get_uri().get_path(); string choice; if(!target.empty()) { choice = target.back(); target.pop_back(); } else choice = ""; if(target == get_path() && choice == action) act(event_name); return get_body_part_from_all_children(path, req); } void html_button::path_has_changed() { chemin tmp = get_path(); tmp.push_back(action); inside.change_url(tmp.display()); } void html_button::css_classes_have_changed() { css_class_group assigned_css = get_css_class_group(); css_class_group assigned_inside = inside.get_css_class_group(); // we transfer to 'outside' the css classes assigned to 'this' outside.clear_css_classes(); outside.add_css_class(assigned_css); outside.add_css_class(assigned_inside); } void html_button::reset_adoption_tree(bool enabled) { orphan_all_children(); if(! text.is_adopted()) outside.adopt(&text); if(enabled) { if(! outside.is_adopted()) inside.adopt(&outside); // yes, historically the url was inside the box... :) // as we have orphaned all our children // if outside is still adopted this // means its parent is already 'inside' // else we must set inside as its parent adopt(&inside); // now we can adopt inside } else // button is disabled { if(outside.is_adopted()) inside.foresake(&outside); // as we have orphaned all our children // if outside is still adopted its parent // is 'inside', we must this orphan 'outside' // from 'inside' for we can adopt it directly // and avoid using 'inside' in the adoption tree adopt(&outside); } } webdar-1.0.0/src/uri.hpp0000644000175000017520000000560314773727243012022 00000000000000/*********************************************************************/ // webdar - a web server and interface program to libdar // Copyright (C) 2013-2025 Denis Corbin // // This file is part of Webdar // // Webdar is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // Webdar is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Webdar. If not, see // //---- // to contact the author: dar.linux@free.fr /*********************************************************************/ #ifndef URI_HPP #define URI_HPP // C system header files #include "my_config.h" extern "C" { } // C++ system header files #include #include // webdar headers #include "chemin.hpp" /// uri type holds the splitted list of the scheme / hostname / path # anchor class uri { public: /// constructors uri() { clear(); }; uri(const std::string & res) { read(res); }; uri(const uri & ref) = default; uri(uri && ref) noexcept = default; uri & operator = (const uri & ref) = default; uri & operator = (uri && ref) noexcept = default; ~uri() = default; /// the anchor part of the path is not used for comparison bool operator == (const uri & arg) const; /// convert an uri from a string void read(const std::string & res); /// clear the uri (empty uri) void clear() { path.clear(); hostname = scheme = anchor = ""; }; /// clear the path part only void trim_path() { path.clear(); }; /// obtain the URI scheme (http, https, ftp, etc.) const std::string & get_scheme() const { return scheme; }; /// obtain the URI host part const std::string & get_hostname() const { return hostname; }; /// retrieve a path of the uri const chemin & get_path() const { return path; }; /// retrieve the anchor previously assigned to this uri (empty string if none) const std::string & get_anchor() const { return anchor; }; /// assign/replace an anchor to this uri (or remove it "" is provided) void set_anchor_to(const std::string & val) { anchor = val; }; /// rebuid the uri as a single string std::string get_string() const; /// get relative url (path + anchor) std::string url_path_part() const; /// add members to the uri void add(const std::string & suppath) { path.push_back(suppath); }; void add(const chemin & suppath) { path += suppath; }; private: std::string scheme; std::string hostname; chemin path; std::string anchor; }; #endif webdar-1.0.0/src/cookies.hpp0000644000175000017520000000255014773727243012655 00000000000000/*********************************************************************/ // webdar - a web server and interface program to libdar // Copyright (C) 2013-2025 Denis Corbin // // This file is part of Webdar // // Webdar is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // Webdar is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Webdar. If not, see // //---- // to contact the author: dar.linux@free.fr /*********************************************************************/ #ifndef COOKIES_HPP #define COOKIES_HPP // C system header files #include "my_config.h" extern "C" { } // C++ system header files #include // webdar headers const unsigned int COOKIE_WIDTH = 30; const std::string COOKIE_NAME_AUTH = "webdar-session-id"; const std::string COOKIE_VAL_AUTH_REQ = "webdar_auth_request"; const std::string COOKIE_VAL_AUTH_ANS = "webdar_auth_answer"; #endif webdar-1.0.0/src/html_web_user_interaction.cpp0000644000175000017520000003725614777675625016477 00000000000000/*********************************************************************/ // webdar - a web server and interface program to libdar // Copyright (C) 2013-2025 Denis Corbin // // This file is part of Webdar // // Webdar is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // Webdar is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Webdar. If not, see // //---- // to contact the author: dar.linux@free.fr /*********************************************************************/ // C system header files #include "my_config.h" extern "C" { } // C++ system header files // webdar headers #include "webdar_css_style.hpp" // #include "html_web_user_interaction.hpp" using namespace std; // public events: const string html_web_user_interaction::display_started = "html_web_user_interaction_displaystarted"; const string html_web_user_interaction::can_refresh = "html_web_user_interaction_canrefresh"; const string html_web_user_interaction::dont_refresh = "html_web_user_interaction_dontrefresh"; const string html_web_user_interaction::libdar_has_finished = "html_web_user_interaction_libdarfinished"; // local css class names: const string html_web_user_interaction::class_button = "html_web_user_interaction_button"; const string html_web_user_interaction::class_web = "html_web_user_interaction_web"; const string html_web_user_interaction::class_inter = "html_web_user_interaction_inter"; // internal events: const string html_web_user_interaction::ask_end_libdar = "html_web_user_interaction_ask_end_libdar"; const string html_web_user_interaction::force_end_libdar = "html_web_user_interaction_force_end_libdar"; const string html_web_user_interaction::close_libdar_screen = "html_web_user_interaction_close_libdar_screen"; html_web_user_interaction::html_web_user_interaction(unsigned int x_warn_size): mode(closed), autohide(false), hide_unless_interrupted(false), was_interrupted(false), h_inter(""), h_gtstr_fs("Question regarding the above logs"), h_get_string("", html_form_input::text, "", "", webdar_css_style::width_100vw), h_form("Update"), h_logs("Last logs"), h_global("Interaction with libdar"), ask_close("Gracefully stop libdar", ask_end_libdar), force_close("Immediately stop libdar", force_end_libdar), finish("Close", close_libdar_screen), ignore_event(false), managed_thread(nullptr) { lib_data.reset(new (nothrow) web_user_interaction(x_warn_size)); if(!lib_data) throw exception_memory(); // status fields h_pause.add_choice("undefined", "please answer yes or no"); h_pause.add_choice("no", "No"); h_pause.add_choice("yes", "Yes"); helper_text.add_text(0, "you need to answer the question for this to take effect"); h_warnings.ignore_body_changed_from_my_children(true); // adoption tree h_logs.adopt(&h_warnings); h_inter.adopt(&h_inter_text); h_inter.adopt(&h_pause); h_form.adopt(&h_inter); h_gtstr_fs.adopt(&h_get_string); h_form.adopt(&h_gtstr_fs); h_global.adopt(&h_logs); h_global.adopt(&h_form); h_global.adopt(&stats); h_global.adopt(&ask_close); h_global.adopt(&force_close); h_global.adopt(&finish); h_global.adopt(&helper_text); adopt(&h_global); // events we provide register_name(display_started); register_name(can_refresh); register_name(dont_refresh); register_name(libdar_has_finished); // events we act upon h_pause.record_actor_on_event(this, html_form_radio::changed); h_get_string.record_actor_on_event(this, html_form_input::changed); ask_close.record_actor_on_event(this, ask_end_libdar); force_close.record_actor_on_event(this, force_end_libdar); finish.record_actor_on_event(this, close_libdar_screen); // visibility and object status clear(); // css h_inter_text.add_css_class(class_inter); stats.add_css_class(class_web); webdar_css_style::normal_button(ask_close); ask_close.add_css_class(class_button); webdar_css_style::active_button(force_close); force_close.add_css_class(class_button); webdar_css_style::normal_button(finish); finish.add_css_class(class_button); helper_text.add_css_class(class_button); } html_web_user_interaction::~html_web_user_interaction() { try { bool completed = false; while(!completed) { try { clean_threads_termination(true); update_controlled_thread_status(); // clean up pending threads completed = true; } catch(...) { // no exception propagation (destructor context) } } } catch(...) { // do not propagate any exception } } void html_web_user_interaction::run_and_control_thread(libthreadar::thread* arg) { if(arg == nullptr) throw WEBDAR_BUG; if(managed_thread != nullptr) throw WEBDAR_BUG; // already controlling a thread switch(mode) { case normal: // clear() has already been run break; case end_asked: throw WEBDAR_BUG; case end_forced: throw WEBDAR_BUG; case finished: throw WEBDAR_BUG; case closed: clear(); break; default: throw WEBDAR_BUG; } all_threads_pending.lock(); try { managed_thread = arg; set_visible(true); if(! get_visible_recursively()) throw WEBDAR_BUG; // the component will not work as it will not receive any request // to provide a body part, and thus allow user to control the thread arg->run(); } catch(...) { all_threads_pending.unlock(); throw; } all_threads_pending.unlock(); } void html_web_user_interaction::join_controlled_thread() { all_threads_pending.lock(); try { switch(mode) { case normal: case end_asked: case end_forced: all_threads_pending.wait(); break; case finished: case closed: break; default: throw WEBDAR_BUG; } } catch(...) { all_threads_pending.unlock(); throw; } all_threads_pending.unlock(); } bool html_web_user_interaction::is_libdar_running() const { bool ret = false; all_threads_pending.lock(); try { if(managed_thread != nullptr) ret = managed_thread->is_running(); else ret = false; } catch(...) { all_threads_pending.unlock(); throw; } all_threads_pending.unlock(); return ret; } string html_web_user_interaction::inherited_get_body_part(const chemin & path, const request & req) { string ret; all_threads_pending.lock(); try { // updating components from libdar status update_html_from_libdar_status(); // monitoring libdar thread status update_controlled_thread_status(); // now we return to the user the updated html interface // any event triggered during that first generation may // need further re-display (rebuild_body_part is set to true in that case) ret = get_body_part_from_all_children(path, req); // whether to display the helper_text helper_text.set_visible((h_inter.get_visible() || h_gtstr_fs.get_visible()) && mode != normal); } catch(...) { all_threads_pending.unlock(); throw; } all_threads_pending.unlock(); return ret; } void html_web_user_interaction::on_event(const string & event_name) { check_libdata(); if(!ignore_event) { if(event_name == html_form_radio::changed) { if(h_inter.get_visible()) { if(h_pause.get_selected_num() != 0) { try { lib_data->set_pause_answer(h_pause.get_selected_num() == 2); } catch(...) { h_inter.set_visible(false); my_body_part_has_changed(); throw; } h_inter.set_visible(false); my_body_part_has_changed(); } // else we do nothing here } else throw WEBDAR_BUG; // how could we get an event from h_pause // if its parent h_inter is hidden? } else if(event_name == html_form_input::changed) { if(h_gtstr_fs.get_visible()) { string tmpm; bool tmpe; try { if(lib_data->pending_get_string(tmpm, tmpe)) lib_data->set_get_string_answer(h_get_string.get_value()); else if(lib_data->pending_get_secu_string(tmpm, tmpe)) lib_data->set_get_secu_string_answer(libdar::secu_string(h_get_string.get_value().c_str(), h_get_string.get_value().size())); else throw WEBDAR_BUG; } catch(...) { h_gtstr_fs.set_visible(false); my_body_part_has_changed(); throw; } h_gtstr_fs.set_visible(false); my_body_part_has_changed(); } else throw WEBDAR_BUG; // how could we get an event from h_get_string // if if the parent box is not visible? } else if(event_name == ask_end_libdar) set_mode(end_asked); // eventually calls my_body_part_has_changed() else if(event_name == force_end_libdar) set_mode(end_forced); // eventually calls my_body_part_has_changed() else if(event_name == close_libdar_screen) set_mode(closed); // eventually calls my_body_part_has_changed() else throw WEBDAR_BUG; } } void html_web_user_interaction::clear() { update_controlled_thread_status(); all_threads_pending.lock(); try { check_libdata(); lib_data->clear(); h_inter.set_visible(false); h_gtstr_fs.set_visible(false); h_form.set_visible(false); adjust_visibility(); stats.clear_counters(); stats.clear_labels(); hide_statistics(); set_mode(normal); } catch(...) { all_threads_pending.unlock(); throw; } all_threads_pending.unlock(); } void html_web_user_interaction::new_css_library_available() { css tmp; unique_ptr & csslib = lookup_css_library(); if(!csslib) throw WEBDAR_BUG; if(! csslib->class_exists(class_inter)) { tmp.css_font_weight_bold(); tmp.css_color(COLOR_TEXT); define_css_class_in_library(class_inter, tmp); tmp.clear(); tmp.css_width("90%", true); csslib->add(class_web, tmp); tmp.clear(); tmp.css_float(css::fl_right); tmp.css_float_clear(css::fc_both); tmp.css_margin_right("1em"); csslib->add(class_button, tmp); } else { if(! csslib->class_exists(class_web) || ! csslib->class_exists(class_button)) throw WEBDAR_BUG; } webdar_css_style::update_library(*csslib); } void html_web_user_interaction::my_visibility_has_changed() { if(get_visible()) { act(display_started); trigger_refresh(); } } void html_web_user_interaction::adjust_visibility() { if(h_gtstr_fs.get_visible() || h_inter.get_visible()) { if(!h_form.get_visible()) { h_form.set_visible(true); act(dont_refresh); } // else nothing new to perform } else { if(h_form.get_visible()) { h_form.set_visible(false); if(mode != finished && mode != closed) act(can_refresh); } // else nothing new to perform } } void html_web_user_interaction::set_mode(mode_type m) { if(m == mode) return; switch(m) { case normal: ask_close.set_visible(true); force_close.set_visible(false); finish.set_visible(false); set_visible(true); was_interrupted = false; check_clean_status(); break; case end_asked: ask_close.set_visible(false); force_close.set_visible(true); finish.set_visible(false); clean_threads_termination(false); break; case end_forced: ask_close.set_visible(false); force_close.set_visible(false); finish.set_visible(false); clean_threads_termination(true); trigger_refresh(); break; case finished: ask_close.set_visible(false); force_close.set_visible(false); finish.set_visible(true); if(!autohide || (was_interrupted && hide_unless_interrupted)) { act(dont_refresh); break; // break for the 'case finished:' !!! } else // if auto hide is set, we go to the closed status, here below m = closed; // no break! case closed: set_visible(false); // we hide ourself act(dont_refresh); act(libdar_has_finished); break; default: throw WEBDAR_BUG; } mode = m; } void html_web_user_interaction::update_html_from_libdar_status() { check_libdata(); // in the following we need to ignore on_event() calls to be able to // se the html_interface without considering it as // an interaction from the user ignore_event = true; // we're about to change our own component which may trigger events, we ignore them here try { list logs = lib_data->get_warnings(); string msg; bool echo; h_warnings.clear(); for(list::iterator it = logs.begin(); it != logs.end(); ++it) { h_warnings.add_text(0, *it); h_warnings.add_nl(); } if(lib_data->pending_pause(msg)) { if(!h_inter.get_visible()) { h_inter.set_visible(true); h_inter_text.clear(); h_inter_text.add_text(0, msg); h_pause.set_selected_num(0); } } if(lib_data->pending_get_string(msg, echo) || lib_data->pending_get_secu_string(msg, echo)) { if(!h_gtstr_fs.get_visible()) { h_gtstr_fs.set_visible(true); h_get_string.change_label(msg); if(echo) h_get_string.change_type(html_form_input::text); else h_get_string.change_type(html_form_input::password); h_get_string.set_value(""); } } adjust_visibility(); } catch(...) { ignore_event = false; throw; } ignore_event = false; } void html_web_user_interaction::update_controlled_thread_status() { if(managed_thread == nullptr) return; try { if(! managed_thread->is_running()) { bool real_exception = true; try { managed_thread->join(); // may throw exception! real_exception = false; throw(real_exception); } catch(...) { // Pay attention! this code here beelow is always executed // even when join() does not throw exception above!!! // all_threads_pending.broadcast(); // awaking all thread waiting this thread to end managed_thread = nullptr; if(real_exception) was_interrupted = true; set_mode(finished); check_clean_status(); if(real_exception) throw; // caught exception is one thrown by join(), we propagate it } } } catch(exception_base & e) { e.change_message(string("Error reported from libdar: ") + e.get_message()); was_interrupted = true; throw; } catch(libthreadar::exception_base & e) { was_interrupted = true; throw; } catch(libdar::Egeneric & e) { was_interrupted = true; throw exception_libcall(e); } catch(...) { was_interrupted = true; throw; } } void html_web_user_interaction::clean_threads_termination(bool force) { was_interrupted = true; if(managed_thread == nullptr) return; // nothing to clean if(force) { if(managed_thread->is_running()) { managed_thread->cancel(); // the managed thread has in its // libthreadar::thread::inherited_cancel() // or libthreadar::thread_signal::signaled_inherited_cancel() method // the necessary call to stop libdar: libdar::thread_cancellation, // as the libdar threads do not rely on the // libthreadar::thread::cancellation_checkoint() way, // this is not a problem. } } else { pthread_t libdar_tid; if(managed_thread->is_running(libdar_tid)) { libdar::thread_cancellation th; th.cancel(libdar_tid, false, 0); } } } void html_web_user_interaction::trigger_refresh() { if(h_form.get_visible()) act(dont_refresh); else act(can_refresh); } void html_web_user_interaction::check_clean_status() { if(managed_thread != nullptr) throw WEBDAR_BUG; if(all_threads_pending.get_waiting_thread_count() != 0) throw WEBDAR_BUG; } webdar-1.0.0/src/html_archive_extract.cpp0000644000175000017520000001175515036520637015411 00000000000000/*********************************************************************/ // webdar - a web server and interface program to libdar // Copyright (C) 2013-2025 Denis Corbin // // This file is part of Webdar // // Webdar is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // Webdar is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Webdar. If not, see // //---- // to contact the author: dar.linux@free.fr /*********************************************************************/ // C system header files #include "my_config.h" extern "C" { } // C++ system header files // webdar headers #include "webdar_css_style.hpp" #include "environment.hpp" #include "tokens.hpp" #include "tooltip_messages.hpp" // #include "html_archive_extract.hpp" using namespace std; const string html_archive_extract::extract_root_changed = "extract_fs_root_changed"; html_archive_extract::html_archive_extract(): extract_fs_root_fs(""), extract_fs_root("Directory to take as root for restoration", global_envir.get_value_with_default("HOME", "/"), "", webdar_css_style::width_80vw, "Select a directory where to restore to..."), extract_fs_root_form("Update") { // components configuration static const char* sect_extract_params = "params"; static const char* sect_extract_options = "options"; opt_extract.reset(new (nothrow) html_options_extract()); if(! opt_extract) throw exception_memory(); extract_params.add_section(sect_extract_params, "Restoration Parameters"); extract_params.add_section(sect_extract_options, "Restoration Options"); extract_params.set_active_section(sect_extract_params); extract_fs_root.set_select_mode(html_form_input_file::select_dir); extract_fs_root.set_can_create_dir(true); extract_fs_root.set_change_event_name(extract_root_changed); opt_extract->set_fs_root(extract_fs_root.get_value()); in_place_msg.add_text(4, "Warning, \"in-place\" restoration is set!"); in_place_msg.add_text(0, "The field above will only be used if the in-place information is not present in the archive"); in_place_msg.add_nl(); in_place_msg.add_text(0, "You can disable \"in-place\" restoration below in the section [Restoration Options | How to proceed]"); // adoption tree extract_fs_root_fs.adopt(&extract_fs_root); extract_fs_root_fs.adopt(&in_place_msg); extract_fs_root_form.adopt(&extract_fs_root_fs); extract_params.adopt_in_section(sect_extract_params, &extract_fs_root_form); extract_params.adopt_in_section(sect_extract_options, &guichet_opt_extract); adopt(&extract_params); // events extract_fs_root.record_actor_on_event(this, extract_root_changed); opt_extract->record_actor_on_event(this, html_options_extract::changed); // visible in_place_msg.set_visible(false); // css webdar_css_style::normal_button(extract_params, true); in_place_msg.add_css_class(webdar_css_style::text_color_normal); in_place_msg.add_css_class(webdar_css_style::text_shadow_dark); // tooltips extract_fs_root.set_tooltip(TOOLTIP_HAE_FS_ROOT); } void html_archive_extract::set_biblio(const shared_ptr & ptr) { opt_extract->set_biblio(ptr); guichet_opt_extract.set_child(ptr, bibliotheque::confrest, opt_extract, false); if(ptr->has_config(bibliotheque::confrest, bibliotheque::default_config_name)) { try { guichet_opt_extract.load_from_bibliotheque(bibliotheque::default_config_name); } catch(...) { // ignore exception here, as this is called from constructor // of the session components and nothing is yet available to // display execeptions messages (due to old config in configuration file // or corrupted configuration file we read from) // The consequence is that we have a cleared configuration: guichet_opt_extract.clear_json(); } } } void html_archive_extract::on_event(const string & event_name) { if(event_name == extract_root_changed) { opt_extract->set_fs_root(extract_fs_root.get_value()); } else if(event_name == html_options_extract::changed) { in_place_msg.set_visible(opt_extract->get_in_place_mode()); } else throw WEBDAR_BUG; } string html_archive_extract::inherited_get_body_part(const chemin & path, const request & req) { return get_body_part_from_all_children(path, req); } void html_archive_extract::new_css_library_available() { unique_ptr & csslib = lookup_css_library(); if(!csslib) throw WEBDAR_BUG; webdar_css_style::update_library(*csslib); } webdar-1.0.0/src/html_mask_form_path.cpp0000644000175000017520000001763714773727244015247 00000000000000/*********************************************************************/ // webdar - a web server and interface program to libdar // Copyright (C) 2013-2025 Denis Corbin // // This file is part of Webdar // // Webdar is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // Webdar is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Webdar. If not, see // //---- // to contact the author: dar.linux@free.fr /*********************************************************************/ // C system header files #include "my_config.h" extern "C" { } // C++ system header files #include // webdar headers #include "html_form_mask_subdir.hpp" #include "html_form_mask_file.hpp" #include "html_over_guichet.hpp" // #include "html_mask_form_path.hpp" using namespace std; const string html_mask_form_path::changed = "hmff_changed"; html_mask_form_path::html_mask_form_path(bool allow_absolute_paths): form("Update"), allow_abs_paths(allow_absolute_paths) { fs_root.reset(new (nothrow) libdar::path(libdar::FAKE_ROOT)); if(!fs_root) throw exception_memory(); labels.push_back("Path expression"); labels.push_back("File listing"); labels.push_back("Logical combination"); labels.push_back("Recorded configuration"); init(); } html_mask_form_path::html_mask_form_path(const html_mask_form_path & ref): form(ref.form), root(ref.root.get_bool_mode()), allow_abs_paths(ref.allow_abs_paths), labels(ref.labels), fs_root(ref.fs_root), categ(ref.categ), biblio(ref.biblio) { init(); // both new and ref objects share the same fs_root // but only the ref one should have its set_fs_root() method // invoked, thus it does not matter that nobody acts upon // the new objects events. // But, the html_form_mask_subdirs objects created from this new // object will register to this new object events, thus this new one // must cascade the event from its parent: const_cast(&ref)->record_actor_on_event(this, html_form_mask_subdir::update); } void html_mask_form_path::set_child(const shared_ptr & ptr, bibliotheque::category cat) { biblio = ptr; categ = cat; } void html_mask_form_path::set_fs_root(const string & prefix) { try { if(!prefix.empty()) { check_ptr(); *fs_root = libdar::path(prefix); act(html_form_mask_subdir::update); // this to trigger objects of html_form_mask_subdir class // we created so far to reconsider both fs_root field } } catch(libdar::Egeneric & e) { e.prepend_message("Error while setting prefix for path base filtering"); throw exception_libcall(e); } } unique_ptr html_mask_form_path::provide_object_of_type(unsigned int num, const string & context, string & changed_event) const { unique_ptr ret; unique_ptr tmp; unique_ptr as_actor; unique_ptr ovgui; check_ptr(); switch(num) { case 0: // path expression as_actor.reset(new (nothrow) html_form_mask_subdir(allow_abs_paths, fs_root)); // to be able to inform this object upon fs_root change: if(as_actor) const_cast(this)->record_actor_on_event(as_actor.get(), html_form_mask_subdir::update); // for the dynamic_table we provide the object to be able to report // changes of the object we provide here: changed_event = html_form_mask_subdir::changed; ret = std::move(as_actor); // we check below globally for all cases that memory allocation succeeded break; case 1: /// file listing ret.reset(new (nothrow) html_form_mask_file(fs_root)); changed_event = html_form_mask_file::changed; break; case 2: // "logical combination" tmp.reset(new (nothrow) html_form_mask_bool(html_form_mask_bool::invert_logic(context))); if(!tmp) throw exception_memory(); init_bool_obj(*tmp); changed_event = html_form_mask_bool::changed; ret = std::move(tmp); break; case 3: // "recorded configuration" ret.reset(new (nothrow) html_mask_form_path(*this)); if(!ret) throw WEBDAR_BUG; ovgui.reset(new (nothrow) html_over_guichet()); if(!ovgui) throw exception_memory(); ovgui->set_child(biblio, ret, categ, html_mask_form_path::changed); if(ret) throw WEBDAR_BUG; // object pointed to by ret // should have been passed to the // object pointed to by ovgui changed_event = html_over_guichet::changed; ret = std::move(ovgui); break; default: if(num < labels.size()) throw WEBDAR_BUG; // problem in html_mask_form_path? else throw WEBDAR_BUG; // problem in html_form_mask_bool? } if(!ret) throw exception_memory(); return ret; } void html_mask_form_path::load_json(const json & source) { check_ptr(); try { unsigned int version; string class_id; json config = unwrap_config_from_json_header(source, version, class_id); if(class_id != myclass_id) throw exception_range(libdar::tools_printf("Unexpected class_id in json data, found %s while expecting %s", class_id.c_str(), myclass_id)); if(version > format_version) throw exception_range("Json format version too hight for html_form_mask_bool, upgrade your webdar software"); // setting back the bool mode and mask_type selected value root.load_json(config.at(jlabel_bool_config)); } catch(json::exception & e) { throw exception_json("Error loading html_form_mask_bool config", e); } act(html_form_mask_subdir::update); act(changed); } json html_mask_form_path::save_json() const { json ret; check_ptr(); // we do not save prefix nor allow_abs_paths as json // for these configurations stay local to the component // that has created/adopted an html_mask_form_path object ret[jlabel_bool_config] = root.save_json(); return wrap_config_with_json_header(format_version, myclass_id, ret); } void html_mask_form_path::clear_json() { check_ptr(); root.clear_json(); act(html_form_mask_subdir::update); act(changed); } bibliotheque::using_set html_mask_form_path::get_using_set() const { return root.get_using_set(); } void html_mask_form_path::on_event(const string & event_name) { if(event_name == html_form_mask_bool::changed) act(changed); else if(event_name == html_form_mask_subdir::update) act(html_form_mask_subdir::update); // cascading from copy constructed parent else throw WEBDAR_BUG; } string html_mask_form_path::inherited_get_body_part(const chemin & path, const request & req) { return get_body_part_from_all_children(path, req); } void html_mask_form_path::css_classes_have_changed() { set css_classes = get_css_classes_as_a_set(); form.clear_css_classes(); for(set::iterator it = css_classes.begin(); it != css_classes.end(); ++it) form.add_css_class(*it); } void html_mask_form_path::init() { init_bool_obj(root); // adoption tree form.adopt(&root); adopt(&form); // events register_name(changed); register_name(html_form_mask_subdir::update); root.record_actor_on_event(this, html_form_mask_bool::changed); } void html_mask_form_path::init_bool_obj(html_form_mask_bool & obj) const { obj.set_obj_type_provider(this); for(deque::const_iterator it = labels.begin(); it != labels.end(); ++it) obj.add_mask_type(*it); } void html_mask_form_path::check_ptr() const { if(!fs_root) throw WEBDAR_BUG; } webdar-1.0.0/src/html_demo.cpp0000644000175000017520000001627415044720672013163 00000000000000/*********************************************************************/ // webdar - a web server and interface program to libdar // Copyright (C) 2013-2025 Denis Corbin // // This file is part of Webdar // // Webdar is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // Webdar is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Webdar. If not, see // //---- // to contact the author: dar.linux@free.fr /*********************************************************************/ // C system header files #include "my_config.h" extern "C" { } // C++ system header files // webdar headers #include "webdar_tools.hpp" #include "webdar_css_style.hpp" #include "tokens.hpp" #include "tooltip_messages.hpp" // #include "html_demo.hpp" using namespace std; html_demo::html_demo(): html_popup(80, 80), table(2), left_input("Enter some text here", html_form_input::text, "", "", ""), left_fs("Information at Browser level"), form("Update"), btn_calc("Calculate", event_calc), right_input("Entered text", html_form_input::text, "", "", ""), right_fs("Information known by Webdar"), counter("Provided string size", html_form_input::number, "0", "10", ""), label("- this text is provided without additional information"), labelplus("- while this text is provided with helper information", TOOLTIP_D_LABEL), tutorial("https://edrusb.github.io/webdar/"), close("Close", event_close) { // components configuration description.add_text(2, "By Design"); description.add_text(0, "By design, Webdar does not use any script but only pure "); description.add_text(0, "HTML directives. This has the advantage of security but "); description.add_text(0, "the drawback of HTML and HTTP(S) limitations."); description.add_text(0, "In particular the information typed in the browser"); description.add_text(0, "is not immediately sent and available on the server side, where"); description.add_text(0, "Webdar is located. The below components illustrates the "); description.add_text(0, "HTML/HTTP limitations, so you can familiarize yourself with them."); description.add_nl(); description.add_text(2, "How to use this playground"); description.add_text(0, "On the left, you can enter text, select components and click on the different buttons."); description.add_nl(); description.add_text(0, "On the right, you will see when and what information Webdar will receive."); description.add_paragraph(); description.add_text(0, "Note also that positionning your pointer on some text for more than one second will show helper information as illustrated just below:"); description.add_nl(); tutorial.set_target_new_page(true); tutorial_desc.clear(); tutorial_desc.add_text(3, "For more read the full tutorial"); labelsep.add_nl(); static const char* choice1 = "hidden"; static const char* choice2 = "disabled"; static const char* choice3 = "enabled"; left_radio.add_choice("0", choice1); left_radio.add_choice("1", choice2); left_radio.add_choice("2", choice3); left_radio.set_selected_num(2); right_radio.add_choice("0", choice1); right_radio.add_choice("1", choice2); right_radio.add_choice("2", choice3); right_radio.set_selected_num(0); // adoption tree adopt(&desc_div); desc_div.adopt(&description); desc_div.adopt(&label); desc_div.adopt(&labelsep); desc_div.adopt(&labelplus); tutorial.adopt(&tutorial_desc); desc_div.adopt(&tutorial); adopt(&table); table.adopt(&form); form.adopt(&left_fs); left_fs.adopt(&left_input); left_fs.adopt(&left_radio); table.adopt(&right_fs); right_fs.adopt(&right_input); right_fs.adopt(&right_radio); table.adopt(&btn_div); btn_div.adopt(&btn_calc); table.adopt(&counter); adopt(&close); // events left_input.record_actor_on_event(this, html_form_input::changed); left_radio.record_actor_on_event(this, html_form_radio::changed); btn_calc.record_actor_on_event(this, event_calc); close.record_actor_on_event(this, event_close); // visibility and enablement right_input.set_enabled(false); counter.set_enabled(false); right_radio.set_enabled(false); // css desc_div.add_css_class(css_table); table.set_css_class_first_row(css_cells); table.set_css_class_cells(css_cells); table.css_border_collapsed(true); table.add_css_class(css_table); webdar_css_style::normal_button(btn_calc); webdar_css_style::normal_button(close); btn_calc.add_css_class(webdar_css_style::float_right); close.add_css_class(css_btn_close); // visibility & coherence on_event(html_form_input::changed); on_event(html_form_radio::changed); // tooltips left_radio.set_tooltip(0, TOOLTIP_D_LEFT0); left_radio.set_tooltip(1, TOOLTIP_D_LEFT1); left_radio.set_tooltip(2, TOOLTIP_D_LEFT2); left_input.set_tooltip(TOOLTIP_D_LI); right_input.set_tooltip(TOOLTIP_D_RI); counter.set_tooltip(TOOLTIP_D_COUNTER); } void html_demo::on_event(const string & event_name) { if(event_name == html_form_input::changed) right_input.set_value(left_input.get_value()); else if(event_name == html_form_radio::changed) { right_radio.set_selected_num(left_radio.get_selected_num()); switch(left_radio.get_selected_num()) { case 0: // hidden left_input.set_visible(false); break; case 1: // disabled left_input.set_visible(true); left_input.set_enabled(false); break; case 2: // enabled left_input.set_visible(true); left_input.set_enabled(true); break; default: throw WEBDAR_BUG; } } else if(event_name == event_calc) { counter.set_value(webdar_tools_convert_to_string(right_input.get_value().size())); } else if(event_name == event_close) set_visible(false); else throw WEBDAR_BUG; } void html_demo::new_css_library_available() { unique_ptr & csslib = lookup_css_library(); if(!csslib) throw WEBDAR_BUG; webdar_css_style::update_library(*csslib); if(! csslib->class_exists(css_table)) { css tmp; tmp.css_text_v_align(css::al_top); tmp.css_text_h_align(css::al_center); tmp.css_border_width(css::bd_all, css::bd_thin); tmp.css_border_style(css::bd_all, css::bd_solid); tmp.css_border_color(css::bd_all, COLOR_MENU_BORDER_GREY); csslib->add(css_cells, tmp); tmp.clear(); tmp.css_width("95%", true); tmp.css_margin_top("2em"); csslib->add(css_table, tmp); tmp.clear(); tmp.css_position_type(css::pos_sticky); tmp.css_float(css::fl_right); tmp.css_position_bottom("1em"); tmp.css_position_right("1em"); tmp.css_margin_top("1em"); csslib->add(css_btn_close, tmp); } html_popup::new_css_library_available(); } webdar-1.0.0/src/html_yes_no_box.cpp0000644000175000017520000000607614777450606014413 00000000000000/*********************************************************************/ // webdar - a web server and interface program to libdar // Copyright (C) 2013-2025 Denis Corbin // // This file is part of Webdar // // Webdar is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // Webdar is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Webdar. If not, see // //---- // to contact the author: dar.linux@free.fr /*********************************************************************/ // C system header files #include "my_config.h" extern "C" { } // C++ system header files // webdar headers #include "html_form_fieldset.hpp" // #include "html_yes_no_box.hpp" using namespace std; const string html_yes_no_box::answer_yes = "html_yes_no_box_y"; const string html_yes_no_box::answer_no = "html_yes_no_box_n"; html_yes_no_box::html_yes_no_box(): html_popup(50, 30), // parent class ignore_events(false), form("Confirm"), form_fs("") { rd.add_choice("no", "No"); rd.add_choice("yes", "Yes"); // building the body_builder tree adopt(&question); form_fs.adopt(&rd); form.adopt(&form_fs); adopt(&form); // events rd.record_actor_on_event(this, html_form_radio::changed); register_name(answer_yes); register_name(answer_no); // visibility set_visible(false); // css question.add_css_class(css_center); form.add_css_class(css_center); } void html_yes_no_box::ask_question(const string & message, bool default_value) { if(get_visible()) return; // ignoring subsequent request, as this can be // the consequence of the changes done during the // first invocation ignore_events = true; try { question.clear(); question.add_text(4, message); rd.set_emphase(default_value ? 1 : 0); rd.unset_selected(); } catch(...) { ignore_events = false; throw; } ignore_events = false; set_visible(true); } void html_yes_no_box::on_event(const string & event_name) { if(ignore_events) return; try { if(rd.get_selected_num() == 1) act(answer_yes); else act(answer_no); } catch(...) { set_visible(false); throw; } set_visible(false); } void html_yes_no_box::new_css_library_available() { css tmp; unique_ptr & csslib = lookup_css_library(); if(!csslib) throw WEBDAR_BUG; if(!csslib->class_exists(css_center)) { tmp.clear(); tmp.css_width("80%", true); tmp.css_text_h_align(css::al_center); csslib->add(css_center, tmp); } // we also need css class definitions from the parent class html_popup::new_css_library_available(); } webdar-1.0.0/src/web_user_interaction.cpp0000644000175000017520000002111714777676061015433 00000000000000/*********************************************************************/ // webdar - a web server and interface program to libdar // Copyright (C) 2013-2025 Denis Corbin // // This file is part of Webdar // // Webdar is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // Webdar is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Webdar. If not, see // //---- // to contact the author: dar.linux@free.fr /*********************************************************************/ // C system header files #include "my_config.h" extern "C" { } // C++ system header files // webdar headers #include "exceptions.hpp" // #include "web_user_interaction.hpp" using namespace std; web_user_interaction::web_user_interaction(unsigned int x_warn_size): warn_size(x_warn_size) { if(warn_size == 0) throw WEBDAR_BUG; clear(); } web_user_interaction::~web_user_interaction() { control.lock(); try { control.broadcast(); } catch(...) { // no throw (destructor context) } control.unlock(); } void web_user_interaction::set_warning_list_size(unsigned int size) { // critical section begins // control.lock(); try { warn_size = size; while(warnings.size() > size) warnings.pop_front(); } catch(...) { control.unlock(); throw; } control.unlock(); // // critical section ended } void web_user_interaction::clear() { control.lock(); try { pause_pending = false; pause_answered = false; get_string_pending = false; get_string_answered = false; get_secu_string_pending = false; get_secu_string_answered = false; warnings.clear(); control.broadcast(); // will only be effective when unlocking control! } catch(...) { control.unlock(); throw; } control.unlock(); } list web_user_interaction::get_warnings() { list ret; // critical section begins // control.lock(); try { ret = warnings; } catch(...) { control.unlock(); throw; } control.unlock(); // // critical section ended return ret; } bool web_user_interaction::pending_pause(string & msg) const { bool ret = false; // critical section begins // control.lock(); try { ret = pause_pending && ! pause_answered; if(ret) msg = pause_msg; } catch(...) { control.unlock(); throw; } control.unlock(); // // critical section ended return ret; } bool web_user_interaction::pending_get_string(string & msg, bool & echo) const { bool ret = false; // critical section begins // control.lock(); try { ret = get_string_pending && ! get_string_answered; if(ret) { msg = get_string_msg; echo = get_string_echo; } } catch(...) { control.unlock(); throw; } control.unlock(); // // critical section ended return ret; } bool web_user_interaction::pending_get_secu_string(string & msg, bool & echo) const { bool ret = false; // critical section begins // control.lock(); try { ret = get_secu_string_pending && ! get_secu_string_answered; if(ret) { msg = get_secu_string_msg; echo = get_secu_string_echo; } } catch(...) { control.unlock(); throw; } control.unlock(); // // critical section ended return ret; } void web_user_interaction::set_pause_answer(bool val) { // critical section begins // control.lock(); try { if(!pause_pending) throw WEBDAR_BUG; if(pause_answered) throw WEBDAR_BUG; pause_ans = val; pause_answered = true; control.signal(); } catch(...) { control.unlock(); throw; } control.unlock(); // // critical section ended } void web_user_interaction::set_get_string_answer(const string & val) { // critical section begins // control.lock(); try { if(!get_string_pending) throw WEBDAR_BUG; if(get_string_answered) throw WEBDAR_BUG; get_string_ans = val; get_string_answered = true; control.signal(); } catch(...) { control.unlock(); throw; } control.unlock(); // // critical section ended } void web_user_interaction::set_get_secu_string_answer(const libdar::secu_string & val) { // critical section begins // control.lock(); try { if(!get_secu_string_pending) throw WEBDAR_BUG; if(get_secu_string_answered) throw WEBDAR_BUG; get_secu_string_ans = val; get_secu_string_answered = true; control.signal(); } catch(...) { control.unlock(); throw; } control.unlock(); // // critical section ended } bool web_user_interaction::has_libdar_pending() const { // we do not use a critical section here // to access fields pointed to by data // because each field is boolean, thus has // an atomic *read* operation. The fact also // that these three reads may be out of sync // relative to one another is not a problem here. return (pause_pending || get_string_pending || get_secu_string_pending); } void web_user_interaction::inherited_message(const string & message) { // critical section begins // control.lock(); try { warnings.push_back(message); while(warnings.size() >= warn_size) warnings.pop_front(); } catch(...) { control.unlock(); throw; } control.unlock(); // // critical section ended } bool web_user_interaction::inherited_pause(const string & message) { bool ret; // critical section begins // control.lock(); try { if(pause_pending || get_string_pending || get_secu_string_pending) throw WEBDAR_BUG; // already waiting for an answer! if(pause_answered) throw WEBDAR_BUG; pause_msg = message; pause_pending = true; // thread releases the control condition and waits for a signal() or broadcast() to be called control.wait(); // acquired control.lock() while exiting from control.wait() if(!pause_pending) throw WEBDAR_BUG; // answer already read!?! if(!pause_answered) throw WEBDAR_BUG; // no answer provided?!? pause_pending = false; pause_answered = false; ret = pause_ans; pause_msg = ""; } catch(...) { control.unlock(); throw; } control.unlock(); // // critical section ended return ret; } string web_user_interaction::inherited_get_string(const string & message, bool echo) { string ret; // critical section begins // control.lock(); try { if(pause_pending || get_string_pending || get_secu_string_pending) throw WEBDAR_BUG; // already waiting for an answer! get_string_msg = message; get_string_echo = echo; get_string_pending = true; // thread releases the control condition and waits for a signal() or broadcast() to be called control.wait(); // acquired control.lock() while exiting from control.wait() if(!get_string_pending) throw WEBDAR_BUG; // answer already read! if(!get_string_answered) throw WEBDAR_BUG; // no answer provided! get_string_pending = false; get_string_answered = false; ret = get_string_ans; get_string_msg = ""; get_string_ans = ""; } catch(...) { control.unlock(); throw; } control.unlock(); // // critical section ended return ret; } libdar::secu_string web_user_interaction::inherited_get_secu_string(const string & message, bool echo) { libdar::secu_string ret; // critical section begins // control.lock(); try { if(pause_pending || get_string_pending || get_secu_string_pending) throw WEBDAR_BUG; // already waiting for an answer! get_secu_string_msg = message; get_secu_string_echo = echo; get_secu_string_pending = true; // thread releases the control condition and waits for a signal() or broadcast() to be called control.wait(); // acquired control.lock() while exiting from control.wait() if(!get_secu_string_pending) throw WEBDAR_BUG; // answer already read! if(!get_secu_string_answered) throw WEBDAR_BUG; // no answer provided! get_secu_string_pending = false; get_secu_string_answered = false; ret = get_secu_string_ans; get_string_msg = ""; get_string_ans = ""; } catch(...) { control.unlock(); throw; } control.unlock(); // // critical section ended return ret; } webdar-1.0.0/src/archive_repair.hpp0000644000175000017520000000536415024331334014170 00000000000000/*********************************************************************/ // webdar - a web server and interface program to libdar // Copyright (C) 2013-2025 Denis Corbin // // This file is part of Webdar // // Webdar is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // Webdar is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Webdar. If not, see // //---- // to contact the author: dar.linux@free.fr /*********************************************************************/ #ifndef ARCHIVE_REPAIR_HPP #define ARCHIVE_REPAIR_HPP // C system header files #include "my_config.h" extern "C" { } // C++ system header files #include #include // webdar headers #include "html_web_user_interaction.hpp" #include "saisie.hpp" /// class archive_repair run libdar reparation in a dedicated thread /// Accordingly to the libhtreadar::thread paradigm, this class /// provides methods to set parameter to the comparison operation /// these are not set at object construction time, nor the thread /// is run at that time, but once all parameter have been set by /// invoking the libthreadar::run() method /// \note this class is not a graphical class at all but relies /// on a provided web_user_interaction object to report status and /// intermediate information about the operation under process class archive_repair : public libthreadar::thread_signal { public: archive_repair(); archive_repair(const archive_repair & ref) = delete; archive_repair(archive_repair && ref) noexcept = default; archive_repair & operator = (const archive_repair & ref) = delete; archive_repair & operator = (archive_repair && ref) noexcept = default; ~archive_repair() { cancel(); join(); }; // parameters expected by the libdar::archive constructor void set_user_interaction(std::shared_ptr ref) { ui = ref; }; void set_parametrage(const saisie* x_param) { param = x_param; }; protected: /// inherited from class libthreadar::thread virtual void inherited_run() override; /// inherited from libthreadar::thread virtual void signaled_inherited_cancel() override; private: const saisie* param; std::shared_ptr ui; }; #endif webdar-1.0.0/src/html_form_radio.cpp0000644000175000017520000001411715036444102014342 00000000000000/*********************************************************************/ // webdar - a web server and interface program to libdar // Copyright (C) 2013-2025 Denis Corbin // // This file is part of Webdar // // Webdar is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // Webdar is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Webdar. If not, see // //---- // to contact the author: dar.linux@free.fr /*********************************************************************/ // C system header files #include "my_config.h" extern "C" { } // C++ system header files #include // webdar headers #include "webdar_css_style.hpp" // #include "html_form_radio.hpp" using namespace std; const string html_form_radio::changed = "html_form_radio::changed"; html_form_radio::html_form_radio(): enabled(true), selected(0), value_set(false), emphase(-1) { register_name(changed); } void html_form_radio::add_choice(const string & id, const string & label) { record x(id, label); css_class_group css_set = get_css_class_group(); x.label.set_for_field(webdar_tools_html_display(id)); x.label.add_css_class(css_set); choices.push_back(x); my_body_part_has_changed(); } void html_form_radio::set_selected_num(unsigned int x) { if(x >= choices.size()) { unsigned int next_val = choices.size() - 1; if(next_val != selected) { selected = next_val; my_act(); my_body_part_has_changed(); } } else { if(x != selected) { selected = x; my_act(); my_body_part_has_changed(); } } value_set = true; } void html_form_radio::set_selected_id(const string & id) { try { set_selected_id_with_warning(id, ""); } catch(exception_range & e) { throw WEBDAR_BUG; } } void html_form_radio::set_selected_id_with_warning(const string & id, const string & jlabel) { unsigned int val = 0; while(val < choices.size() && choices[val].id != id) ++val; if(val < choices.size()) set_selected_num(val); else throw exception_range(libdar::tools_printf("Unexpected requested id value %s read from key %s", id.c_str(), jlabel.c_str())); } void html_form_radio::unset_selected() { if(selected != choices.size()) { selected = choices.size(); my_body_part_has_changed(); } } const string & html_form_radio::get_selected_id() const { if(selected < choices.size()) return choices[selected].id; else throw WEBDAR_BUG; } void html_form_radio::set_emphase(unsigned int num) { if(emphase > 0 && emphase < choices.size()) choices[emphase].label.set_emphase(false); if(num < choices.size()) { emphase = num; choices[emphase].label.set_emphase(true); } else throw WEBDAR_BUG; my_body_part_has_changed(); } void html_form_radio::set_change_event_name(const string & name) { if(name.empty()) throw WEBDAR_BUG; if(modif_changed.empty()) rename_name(changed, name); else rename_name(modif_changed, name); modif_changed = name; } void html_form_radio::set_enabled(bool val) { if(enabled != val) { enabled = val; my_act(); my_body_part_has_changed(); } } void html_form_radio::set_tooltip(unsigned int index, const std::string & msg) { if(index >= num_choices()) throw exception_range("invalid index in html_form_radio::set_tooltip"); choices[index].label.set_tooltip(msg); } string html_form_radio::inherited_get_body_part(const chemin & path, const request & req) { string ret = ""; string radio_id = get_path().namify(); // for POST method only, extract user choice from the body of the request // and update this object's fields update_field_from_request(req); // for any request provide an updated HMTL content in response for(unsigned int i = 0; i < choices.size(); ++i) { ret += " & csslib = lookup_css_library(); if(!csslib) throw WEBDAR_BUG; webdar_css_style::update_library(*csslib); } void html_form_radio::update_field_from_request(const request & req) { if(req.get_method() == "POST" && ! value_set) { map bd = req.get_body_form(); map::const_iterator it = bd.find(get_path().namify()); if(it != bd.end()) { unsigned int u = 0; while(u < choices.size() && webdar_tools_html_display(choices[u].id) != webdar_tools_html_display(it->second)) ++u; if(u < choices.size()) { bool has_changed = selected != u; selected = u; if(has_changed) { my_act(); my_body_part_has_changed(); } } } } } void html_form_radio::unlock_update_field_from_request() { if(!has_my_body_part_changed()) value_set = false; } void html_form_radio::my_act() { if(modif_changed.empty()) act(changed); else act(modif_changed); } webdar-1.0.0/src/challenge.cpp0000644000175000017520000000447414773727245013147 00000000000000/*********************************************************************/ // webdar - a web server and interface program to libdar // Copyright (C) 2013-2025 Denis Corbin // // This file is part of Webdar // // Webdar is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // Webdar is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Webdar. If not, see // //---- // to contact the author: dar.linux@free.fr /*********************************************************************/ // C system header files #include "my_config.h" extern "C" { } // C++ system header files // webdar headers #include "base64.hpp" #include "session.hpp" #include "error_page.hpp" // #include "challenge.hpp" using namespace std; challenge::challenge(const shared_ptr & base): page("Webdar") { if(!base) throw WEBDAR_BUG; database = base; title.add_text(1, "Authentication required to access Webdar"); page.adopt(&title); } bool challenge::is_an_authoritative_request(const request & req, string & user) { bool ret = false; string val; if(req.find_attribute(HDR_AUTHORIZATION, val)) { string sp1, sp2; webdar_tools_split_in_two(' ', val, sp1, sp2); if(webdar_tools_to_canonical_case(sp1) == webdar_tools_to_canonical_case("Basic")) { string clear = base64().decode(sp2); webdar_tools_split_in_two(':', clear, sp1, sp2); if(database->valid_credentials(sp1, sp2)) { user = sp1; ret = true; } } } return ret; } answer challenge::give_answer(const request & req) { answer ret; // Request a login/password ret.set_status(STATUS_CODE_UNAUTHORIZED); ret.set_reason("login/password requested"); ret.set_attribute(HDR_WWW_AUTHENTICATE, "Basic realm=\"/Webdar\""); ret.add_body(page.get_body_part(req.get_uri().get_path(), req)); return ret; } webdar-1.0.0/src/html_listing_page.cpp0000644000175000017520000001036714773727245014714 00000000000000/*********************************************************************/ // webdar - a web server and interface program to libdar // Copyright (C) 2013-2025 Denis Corbin // // This file is part of Webdar // // Webdar is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // Webdar is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Webdar. If not, see // //---- // to contact the author: dar.linux@free.fr /*********************************************************************/ // C system header files #include "my_config.h" extern "C" { } // C++ system header files // webdar headers #include "webdar_css_style.hpp" #include "tokens.hpp" // #include "html_listing_page.hpp" using namespace std; const string html_listing_page::event_close = "html_listing_page::close"; static const char* css_page = "html_listing_page"; static const char* css_tree = "html_listing_page_tree"; static const char* css_title = "html_listing_page_title"; static const char* css_close = "html_listing_page_close"; static const char* css_focus = "html_listing_page_focus"; html_listing_page::html_listing_page(): tree(""), close("Close", event_close) { set_session_name(""); // the body_builder tree adopt(&tree); adopt(&focus); adopt(&title); adopt(&close); // event binding register_name(event_close); close.record_actor_on_event(this, event_close); // linking tree with focus tree.set_drop_content(&focus); tree.set_drop_path(&title); // css webdar_css_style::normal_button(close); close.add_css_class(css_close); tree.add_css_class(css_tree); title.add_css_class(css_title); title.add_css_class(webdar_css_style::btn_off); focus.add_css_class(css_focus); } void html_listing_page::on_event(const string & event_name) { if(event_name != event_close) throw WEBDAR_BUG; act(event_close); // propagate the event // not calling my_body_part_has_changed(); // as inherited_get_body_part() will not produce something // different due to this event } void html_listing_page::set_session_name(const string & session_name) { string title = "Webdar - "; if(session_name != "") title += session_name + " - "; title += "Archive listing"; set_title(title); } void html_listing_page::new_css_library_available() { css tmp; unique_ptr & csslib = lookup_css_library(); if(!csslib) throw WEBDAR_BUG; if(csslib->class_exists(css_tree)) return; // left dir tree tree.clear_css_classes(); tmp.clear(); tmp.css_box_sizing(css::bx_border); tmp.css_float(css::fl_left); tmp.css_max_height("calc(100vh - 1em)"); tmp.css_width("30%", false); tmp.css_padding("1em"); tmp.css_overflow(css::ov_scroll); csslib->add(css_tree, tmp); // title title.clear_css_classes(); tmp.clear(); tmp.css_box_sizing(css::bx_border); tmp.css_position_type(css::pos_fixed); tmp.css_position_top("1em"); tmp.css_position_right("1em"); tmp.css_width("calc(70% - 1em)", false); // 1em is the margin on the right csslib->add(css_title, tmp); // focus area focus.clear_css_classes(); tmp.clear(); tmp.css_box_sizing(css::bx_border); tmp.css_margin_top("5em"); tmp.css_margin_right("1em"); tmp.css_float(css::fl_right); tmp.css_overflow(css::ov_scroll); tmp.css_max_height("calc(100vh - 6em)"); tmp.css_width("calc(70% - 1em)", false); // 1em for the right margin csslib->add(css_focus, tmp); // close button close.clear_css_classes(); tmp.clear(); tmp.css_float(css::fl_right); tmp.css_float_clear(css::fc_both); tmp.css_position_type(css::pos_fixed); tmp.css_position_bottom("1em"); tmp.css_position_right("1em"); csslib->add(css_close, tmp); webdar_css_style::update_library(*csslib); } webdar-1.0.0/src/html_form_dynamic_table.hpp0000644000175000017520000003140514773727245016066 00000000000000/*********************************************************************/ // webdar - a web server and interface program to libdar // Copyright (C) 2013-2025 Denis Corbin // // This file is part of Webdar // // Webdar is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // Webdar is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Webdar. If not, see // //---- // to contact the author: dar.linux@free.fr /*********************************************************************/ #ifndef HTML_FORM_DYNAMIC_TABLE_HPP #define HTML_FORM_DYNAMIC_TABLE_HPP // C system header files #include "my_config.h" extern "C" { } // C++ system header files #include #include // webdar headers #include "actor.hpp" #include "events.hpp" #include "html_div.hpp" #include "html_table.hpp" #include "html_button.hpp" #include "html_text.hpp" #include "html_form_input.hpp" #include "html_form_select.hpp" #include "jsoner.hpp" /// class html_form_dynamic_table_object_provider /// is an interface for objets using an html_form_dynamic_table. This component /// will call back the recorded provider object when a new entry is asked from web /// interface to be added in the table. /// \note most of the time this will be the owner of a html_form_dynamic_table /// that will register itself as html_form_dynamic_table_object_provider to /// his owned dynamic table object class html_form_dynamic_table_object_provider { public: /// method invoked by a html_form_dynamic_table when a new line has to be created /// \param[in] num is the type number of the object to create /// \param[in] context is a arbitrary information provided by the table as defined /// by the set_obj_type_context() method of this table. /// \param[out] changed_event if not provided as an empty the dynamic_table will register for an event /// of that name on the provided object (which must thus inherit from events class), upon /// such event, the table will trigger its own html_form_dynamic_table::changed event /// propagating the change of any of its component (for those supporting the events interface and which /// event name has been provided here) virtual std::unique_ptr provide_object_of_type(unsigned int num, const std::string & context, std::string & changed_event) const = 0; }; /// class html_form_dynamic_table web user dynamically add new lines in a table /// The possible type of lines of the table are defined by the developper user of this class /// but this is the web user that defined the table content based on the available types /// /// this html components is consitued of: /** \verbatim +----html_table-----------------------------+-------+ | | | | |+-----+|+-------------------------------+ |+-+ | ||label|||body_builder objet | || | del| |+-----+|+-------------------------------- |+-+ | |+-----+|+-------------------------------+ |+-+ | ||label|||body_builder objet | || | del| |+-----+|+-------------------------------- |+-+ | |+-----+|+-------------------------------+ |+-+ | ||label|||body_builder objet | || | del| |+-----+|+-------------------------------- |+-+ | |+-----+|+-------------------------------+ |+-+ | ||label|||body_builder objet | || | del| |+-----+|+-------------------------------- |+-+ | |+-----+|+-------------------------------+ |+-+ | ||label|||body_builder objet | || | del| |+-----+|+-------------------------------- |+-+ | +-------+-----------------------------------+-------+ +---------------------+ | add drop down list | (or html_button if only one type to add +---------------------+ (option to position the button before the table or after) \endverbatim **/ /// \note this component must be adopted by an html_form /// \note the programmer should set an object provider /// to create object component of the requested type by the /// user. class html_form_dynamic_table : public html_div, public actor, public events, public jsoner { private: struct line; // referred before the public part for the ::iterator nested class public: static const std::string changed; /// default event name for all object of this clas /// constructor html_form_dynamic_table(bool has_left_labels, ///< whether to display label on a left column bool selector_below, ///< whether the selector is above or below the table const std::string & adder_text, ///< fixed label shown beside the add drop list const std::string & adder_default_choice ///< default choice in the drop list ); html_form_dynamic_table(const html_form_dynamic_table & ref) = delete; html_form_dynamic_table(html_form_dynamic_table && ref) noexcept = delete; html_form_dynamic_table & operator = (const html_form_dynamic_table & ref) = delete; html_form_dynamic_table & operator = (html_form_dynamic_table && ref) noexcept = delete; ~html_form_dynamic_table() = default; class iterator { public: iterator() {}; iterator(const iterator & ref) = default; iterator(iterator && ref) = default; iterator & operator = (const iterator & ref) = default; iterator & operator = (iterator && ref) = default; ~iterator() = default; iterator & operator ++ (signed int n) { ++ptr; return *this; }; iterator operator ++ () { iterator ret; ret.ptr = ptr; ++ptr; return ret; }; bool operator == (const iterator & ref) const { return ptr == ref.ptr; }; bool operator != (const iterator & ref) const { return ptr != ref.ptr; }; std::shared_ptr get_left_label() const { return ptr->left_label; }; unsigned int get_object_type() const { return ptr->object_type_index; }; std::shared_ptr get_object() const { return ptr->dynobj; }; private: std::list::const_iterator ptr; friend html_form_dynamic_table; }; iterator begin() const { iterator ret; ret.ptr = table_content.begin(); return ret; }; iterator end() const { iterator ret; ret.ptr = table_content.end(); return ret; }; iterator last() const { iterator ret; ret.ptr = prev(table_content.end()); return ret; }; /// whether the current dynamic_table is empty bool empty() const { return table_content.empty(); }; /// define a object provider ///\param[in] provider the object provider. /// when needed by this dynamic table, the object provider will be asked /// to create a new object of type "num", the argument of /// html_form_dynamic_table_object_provider::provide_object_of_type() /// for num = 0 the object type provided by the first call to /// add_obj_type(), num = 1 correspond to the type of object /// which label has been provide by the second time add_obj_type() /// was called. /// *before* adding types of objects that will be proposed to the web user, /// an object provider (and only one) must be recorded calling this method /// \note the object provider is not memory managed by the "this" /// object and must survive during the whole life of "this". /// \note only one and same provider must address all the possible type of /// object to build. Any previously added provider is replaced by the one /// give here. void set_obj_type_provider(const html_form_dynamic_table_object_provider* provider); /// get the current object provider const html_form_dynamic_table_object_provider* get_current_provider() const { return my_provider; }; /// set context passed to the object provider /// \note if context is not defined, an empty string is passed /// to the object provider void set_obj_type_context(const std::string & ctxt) { context = ctxt; }; /// add a new object type to be proposed to the user from the "adder" selector /// \param[in] label the column number for this object (starts at zero) void add_obj_type(const std::string & label); /// clear all object types added by mean of add_obj_type void clear_obj_type(); /// return the number of object type available to the user unsigned int obj_type_size() const { return adder.size() - 1; }; /// clear table content void clear() { table_content.clear(); del_event_to_content.clear(); events_to_delete.clear(); }; /// manually add an line in the table with the object type give in number /// \note this is only needed to build programmatically the dynamic_table, but /// a dynamic_table is more than a table, it is dynamic in the sense that this /// through user action in web interface that normally this method is invoked /// to add (but also remove) lines to the table void add_line(unsigned int typenum); /// inherited from jsoner virtual void load_json(const json & source) override; /// inherited from jsoner virtual json save_json() const override; /// inherited from jsoner virtual void clear_json() override; /// inherited from actor virtual void on_event(const std::string & event_name) override; /// exposed css method from underlying html_table void css_border_collapsed(bool mode) { table.css_border_collapsed(mode); }; /// exposed css method from underlying html_table void set_css_class_first_row(const std::string & val) { table.set_css_class_first_row(val); }; /// exposed css method from underlying html_table void set_css_class_first_row() { table.set_css_class_first_row(); }; /// exposed css method from underlying html_table void set_css_class_first_column(const std::string & val) { table.set_css_class_first_column(val); }; /// exposed css method from underlying html_table void set_css_class_first_column() { table.set_css_class_first_column(); }; /// exposed css method from underlying html_table void set_css_class_cells(const std::string & val) { table.set_css_class_cells(val); }; /// exposed css method from underlying html_table void set_css_class_cells() { table.set_css_class_cells(); }; protected: /// inherited methods from body_builder virtual std::string inherited_get_body_part(const chemin & path, const request & req) override; /// inherited from body_builder virtual void new_css_library_available() override; private: // events static constexpr const char* new_line_to_add = "new_line"; /// objects adopted for a given line of the "table" and managed by table_content struct line { line() { left_label.reset(); dynobj.reset(); del.reset(); }; std::shared_ptr left_label; unsigned int object_type_index; ///< index of the brother used in list_of_types std::shared_ptr dynobj; std::unique_ptr del; }; bool left_label; bool ignore_events; const html_form_dynamic_table_object_provider* my_provider; ///< the object provider to use std::string context; ///< the context string passed when to the object provider std::list table_content; ///< manages the objects adopted by "table" unsigned int event_del_count; ///< used to build new event name for each new "delete" button std::map::iterator> del_event_to_content; /// find the table_content entry corresponding to a given event std::deque events_to_delete; ///< temporary list of events pending for deletion std::string default_choice; ///< adder first choice used to invite user to select an option (provided with constructor) html_table table; html_form_select adder; void del_line(const std::string & event_name); void purge_to_delete(); static constexpr const unsigned int format_version = 1; static constexpr const char* myclass_id = "html_form_dynamic_table"; static constexpr const char* jlabel_has_left_label = "has-lef-labels"; static constexpr const char* jlabel_contents = "contents"; static constexpr const char* jlabel_left_label = "left-label"; static constexpr const char* jlabel_index_type = "type"; static constexpr const char* jlabel_dynobj = "object"; friend class html_form_dynamic_table::iterator; }; #endif webdar-1.0.0/src/html_options_compare.cpp0000644000175000017520000003500515036457242015432 00000000000000/*********************************************************************/ // webdar - a web server and interface program to libdar // Copyright (C) 2013-2025 Denis Corbin // // This file is part of Webdar // // Webdar is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // Webdar is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Webdar. If not, see // //---- // to contact the author: dar.linux@free.fr /*********************************************************************/ // C system header files #include "my_config.h" extern "C" { } // C++ system header files #include // webdar headers #include "webdar_tools.hpp" #include "html_form_mask_expression.hpp" #include "webdar_css_style.hpp" #include "tooltip_messages.hpp" // #include "html_options_compare.hpp" using namespace std; const string html_options_compare::changed = "hocompare_changed"; html_options_compare::html_options_compare(): form("Update"), fs(""), in_place("Ignore the provided root directory above and use instead the \"in place\" directory information stored in the archive", html_form_input::check, "", "", ""), form_reading("Update"), fs_alter_atime("What to alter if furtive read mode is not used"), furtive_read_mode("Furtive read mode (if available)", html_form_input::check, "", "", ""), zeroing_neg_date("Automatically zeroing negative dates while reading", html_form_input::check, "", "", ""), hourshift("Ignore difference of exactly +/- N hour(s)", html_form_input::number, "0", "5", ""), compare_symlink_date("Compare symlink mtime", html_form_input::check, "", "", ""), form_show("Update"), fs_show(""), info_details("Detailed information", html_form_input::check, "1", "", ""), display_treated("Display treated files", html_form_input::check, "1", "", ""), display_treated_only_dir("Display only treated directories", html_form_input::check, "", "", ""), display_skipped("Display skipped files", html_form_input::check, "1", "", ""), ignore_events(false) { filename_mask.reset(new (nothrow) html_mask_form_filename("file name")); if(!filename_mask) throw exception_memory(); ea_mask.reset(new (nothrow) html_mask_form_filename("extended attribute")); if(!ea_mask) throw exception_memory(); path_mask.reset(new (nothrow) html_mask_form_path(false)); if(!path_mask) throw exception_memory(); /// component setup hourshift.set_range(0, 23); libdar::archive_options_diff defaults; /// default values in_place.set_value_as_bool(defaults.get_in_place()); alter_atime.add_choice("atime", "Data last access time (atime)"); alter_atime.add_choice("ctime", "Inode last change time (ctime)"); if(defaults.get_alter_atime()) alter_atime.set_selected_num(0); else alter_atime.set_selected_num(1); what_to_check.set_value(defaults.get_what_to_check()); furtive_read_mode.set_value_as_bool(defaults.get_furtive_read_mode()); zeroing_neg_date.set_value_as_bool(defaults.get_auto_zeroing_neg_dates()); hourshift.set_value(webdar_tools_convert_to_string(defaults.get_hourshift())); compare_symlink_date.set_value_as_bool(defaults.get_compare_symlink_date()); // building adoption tree static const char* sect_source = "source reading mode"; static const char* sect_opt = "options"; static const char* sect_show = "archive show opt"; static const char* sect_mask_filename = "mask_file"; static const char* sect_mask_path = "mask_path"; static const char* sect_ea_mask = "EA masks"; static const char* sect_fsa_scope = "FSA Scope"; deroule.add_section(sect_source, "File system reading mode"); deroule.add_section(sect_opt, "How to process the operation"); deroule.add_section(sect_show, "What to show during the operation"); deroule.add_section(sect_mask_filename, "File name based filtering"); deroule.add_section(sect_mask_path, "Path based filtering"); deroule.add_section(sect_ea_mask, "Extended Attributes filtering"); deroule.add_section(sect_fsa_scope, "File system Specific Attributes filtering"); fs_alter_atime.adopt(&alter_atime); form_reading.adopt(&furtive_read_mode); form_reading.adopt(&fs_alter_atime); form_reading.adopt(&zeroing_neg_date); form_reading.adopt(&hourshift); deroule.adopt_in_section(sect_source, &form_reading); fs.adopt(&in_place); fs.adopt(&what_to_check); fs.adopt(&compare_symlink_date); form.adopt(&fs); deroule.adopt_in_section(sect_opt, &form); fs_show.adopt(&info_details); fs_show.adopt(&display_treated); fs_show.adopt(&display_treated_only_dir); fs_show.adopt(&display_skipped); form_show.adopt(&fs_show); deroule.adopt_in_section(sect_show, &form_show); deroule.adopt_in_section(sect_mask_filename, &guichet_filename_mask); deroule.adopt_in_section(sect_mask_path, &guichet_path_mask); deroule.adopt_in_section(sect_ea_mask, &guichet_ea_mask); deroule.adopt_in_section(sect_fsa_scope, &fsa_scope); adopt(&deroule); // events alter_atime.record_actor_on_event(this, html_form_radio::changed); furtive_read_mode.record_actor_on_event(this, html_form_input::changed); zeroing_neg_date.record_actor_on_event(this, html_form_input::changed); hourshift.record_actor_on_event(this, html_form_input::changed); in_place.record_actor_on_event(this, html_form_input::changed); what_to_check.record_actor_on_event(this, html_form_select::changed); compare_symlink_date.record_actor_on_event(this, html_form_input::changed); info_details.record_actor_on_event(this, html_form_input::changed); display_treated.record_actor_on_event(this, html_form_input::changed); display_treated_only_dir.record_actor_on_event(this, html_form_input::changed); display_skipped.record_actor_on_event(this, html_form_input::changed); filename_mask->record_actor_on_event(this, html_mask_form_filename::changed); path_mask->record_actor_on_event(this, html_mask_form_path::changed); ea_mask->record_actor_on_event(this, html_mask_form_filename::changed); fsa_scope.record_actor_on_event(this, html_fsa_scope::changed); register_name(changed); // css webdar_css_style::grey_button(deroule, true); display_treated_only_dir.add_css_class(webdar_css_style::indent); // components visibility setup on_event(html_form_input::changed); // tooltips furtive_read_mode.set_tooltip(TOOLTIP_HOC_FURTIVE); zeroing_neg_date.set_tooltip(TOOLTIP_HOC_ZEROING_DATES); hourshift.set_tooltip(TOOLTIP_HOC_HOURSHIFT); in_place.set_tooltip(TOOLTIP_HOC_IN_PLACE); what_to_check.set_tooltip(TOOLTIP_HOC_WTC); compare_symlink_date.set_tooltip(TOOLTIP_HOC_SYMLINK_DATE); info_details.set_tooltip(TOOLTIP_HOC_INFO_DETAILS); display_treated.set_tooltip(TOOLTIP_HOC_DISPLAY_TREATED); display_treated_only_dir.set_tooltip(TOOLTIP_HOC_DISPLAY_ONLY_DIR); display_skipped.set_tooltip(TOOLTIP_HOC_DISPLAY_SKIPPED); } void html_options_compare::set_biblio(const shared_ptr & ptr) { filename_mask->set_child(ptr, bibliotheque::filefilter); guichet_filename_mask.set_child(ptr, bibliotheque::filefilter, filename_mask, false); ea_mask->set_child(ptr, bibliotheque::filefilter); path_mask->set_child(ptr, bibliotheque::pathfilter); guichet_ea_mask.set_child(ptr, bibliotheque::filefilter, ea_mask, false); guichet_path_mask.set_child(ptr, bibliotheque::pathfilter, path_mask, false); } libdar::archive_options_diff html_options_compare::get_options() const { libdar::archive_options_diff ret; ret.set_in_place(in_place.get_value_as_bool()); ret.set_info_details(info_details.get_value_as_bool()); ret.set_display_treated(display_treated.get_value_as_bool(), display_treated_only_dir.get_value_as_bool()); ret.set_display_skipped(display_skipped.get_value_as_bool()); ret.set_what_to_check(what_to_check.get_value()); ret.set_alter_atime(alter_atime.get_selected_id() == "atime"); ret.set_furtive_read_mode(furtive_read_mode.get_value_as_bool()); ret.set_auto_zeroing_neg_dates(zeroing_neg_date.get_value_as_bool()); ret.set_hourshift(libdar::infinint(webdar_tools_convert_to_int(hourshift.get_value()))); ret.set_compare_symlink_date(compare_symlink_date.get_value_as_bool()); ret.set_selection(*(filename_mask->get_mask())); ret.set_subtree(*(path_mask->get_mask())); ret.set_ea_mask(*(ea_mask->get_mask())); ret.set_fsa_scope(fsa_scope.get_scope()); return ret; } void html_options_compare::load_json(const json & source) { try { unsigned int version; string class_id; json config = unwrap_config_from_json_header(source, version, class_id); if(class_id != myclass_id) throw exception_range(libdar::tools_printf("Unexpected class_id in json data, found %s while expecting %s", class_id.c_str(), myclass_id)); if(version > format_version) throw exception_range(libdar::tools_printf("Json format version too hight for %s, upgrade your webdar software", myclass_id)); ignore_events = true; try { alter_atime.set_selected_id(config.at(jlabel_alter_atime)); furtive_read_mode.set_value_as_bool(config.at(jlabel_furtive_read)); zeroing_neg_date.set_value_as_bool(config.at(jlabel_zeroing_neg_dates)); hourshift.set_value_as_int(config.at(jlabel_hourshift)); in_place.set_value_as_bool(config.at(jlabel_in_place)); what_to_check.set_selected_id_with_warning(config.at(jlabel_what_to_check), jlabel_what_to_check); compare_symlink_date.set_value_as_bool(config.at(jlabel_symlink_date)); info_details.set_value_as_bool(config.at(jlabel_info_details)); display_treated.set_value_as_bool(config.at(jlabel_disp_treated)); display_treated_only_dir.set_value_as_bool(config.at(jlabel_disp_only_dir)); display_skipped.set_value_as_bool(config.at(jlabel_disp_skipped)); guichet_filename_mask.load_json(config.at(jlabel_file_mask)); guichet_path_mask.load_json(config.at(jlabel_path_mask)); guichet_ea_mask.load_json(config.at(jlabel_fsa_scope)); } catch(...) { ignore_events = false; throw; } ignore_events = false; trigger_change(); } catch(json::exception & e) { throw exception_json(libdar::tools_printf("Error loading %s config", myclass_id), e); } } json html_options_compare::save_json() const { json config; config[jlabel_alter_atime] = alter_atime.get_selected_id(); config[jlabel_furtive_read] = furtive_read_mode.get_value_as_bool(); config[jlabel_zeroing_neg_dates] = zeroing_neg_date.get_value_as_bool(); config[jlabel_hourshift] = hourshift.get_value_as_int(); config[jlabel_in_place] = in_place.get_value_as_bool(); config[jlabel_what_to_check] = what_to_check.get_selected_id(); config[jlabel_symlink_date] = compare_symlink_date.get_value_as_bool(); config[jlabel_info_details] = info_details.get_value_as_bool(); config[jlabel_disp_treated] = display_treated.get_value_as_bool(); config[jlabel_disp_only_dir] = display_treated_only_dir.get_value_as_bool(); config[jlabel_disp_skipped] = display_skipped.get_value_as_bool(); config[jlabel_file_mask] = guichet_filename_mask.save_json(); config[jlabel_path_mask] = guichet_path_mask.save_json(); config[jlabel_fsa_scope] = guichet_ea_mask.save_json(); return wrap_config_with_json_header(format_version, myclass_id, config); } void html_options_compare::clear_json() { try { alter_atime.set_selected_num(0); furtive_read_mode.set_value_as_bool(true); zeroing_neg_date.set_value_as_bool(true); hourshift.set_value_as_int(0); in_place.set_value_as_bool(false); what_to_check.set_selected_num(0); compare_symlink_date.set_value_as_bool(true); info_details.set_value_as_bool(true); display_treated.set_value_as_bool(true); display_treated_only_dir.set_value_as_bool(false); display_skipped.set_value_as_bool(true); guichet_filename_mask.clear_json(); guichet_path_mask.clear_json(); guichet_ea_mask.clear_json(); } catch(...) { ignore_events = false; throw; } ignore_events = false; trigger_change(); } bibliotheque::using_set html_options_compare::get_using_set() const { bibliotheque::using_set ret; subconfig_add_to(ret, guichet_filename_mask.get_using_set()); subconfig_add_to(ret, guichet_path_mask.get_using_set()); subconfig_add_to(ret, guichet_ea_mask.get_using_set()); return ret; } void html_options_compare::on_event(const string & event_name) { if(event_name == html_form_input::changed) { display_treated_only_dir.set_visible(display_treated.get_value_as_bool()); } else if(event_name == html_form_radio::changed || event_name == html_form_select::changed || event_name == html_mask_form_filename::changed || event_name == html_mask_form_path::changed || event_name == html_fsa_scope::changed) { // nothing to do, because of trigger_change() below } else throw WEBDAR_BUG; trigger_change(); } void html_options_compare::set_to_webdar_defaults() { clear_json(); alter_atime.set_selected_num(0); furtive_read_mode.set_value_as_bool(true); zeroing_neg_date.set_value_as_bool(true); in_place.set_value_as_bool(false); info_details.set_value_as_bool(true); display_treated.set_value_as_bool(true); display_treated_only_dir.set_value_as_bool(false); display_skipped.set_value_as_bool(true); } string html_options_compare::inherited_get_body_part(const chemin & path, const request & req) { return get_body_part_from_all_children(path, req); } void html_options_compare::new_css_library_available() { unique_ptr & csslib = lookup_css_library(); if(!csslib) throw WEBDAR_BUG; webdar_css_style::update_library(*csslib); } void html_options_compare::trigger_change() { if(!ignore_events) act(changed); } webdar-1.0.0/src/listener.hpp0000644000175000017520000001062514773727245013052 00000000000000/*********************************************************************/ // webdar - a web server and interface program to libdar // Copyright (C) 2013-2025 Denis Corbin // // This file is part of Webdar // // Webdar is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // Webdar is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Webdar. If not, see // //---- // to contact the author: dar.linux@free.fr /*********************************************************************/ #ifndef LISTENER_HPP #define LISTENER_HPP #include "my_config.h" // C++ system header files #include #include // webdar headers #include "central_report.hpp" #include "exceptions.hpp" #include "authentication.hpp" #include "ssl_context.hpp" #include "server_pool.hpp" /// class listener /// listen to the defined TCP port for new proto_connexions. /// Upon new proto_connexion, it builds proto_connexion objects /// and assign it to a new server object that will /// manage incoming request on this proto_connexion accordingly class listener : public libthreadar::thread_signal { public: listener(const std::shared_ptr & log, ///< where to send reports, used but also passed to the generated server objects const std::shared_ptr & auth, ///< where to request for authentications (passed to generated server objects) std::unique_ptr & ciphering, ///< if emtpy, a connexion object is provided to the generated server objects else a ssl_connexion is passed instead std::shared_ptr & pool, ///< the server_pool which will create and manage servers objects for us unsigned int port ///< listen on localhost IPv4 or IPv6 ); listener(const std::shared_ptr & log, ///< where to send reports, used but also passed to the generated server objects const std::shared_ptr & auth, ///< where to request for authentications (passed to generated server objects) std::unique_ptr & ciphering, ///< if emtpy, a connexion object is provided to the generated server objects else a ssl_connexion is passed instead std::shared_ptr & pool, ///< the server_pool which will create and manage servers objects for us const std::string & ip, ///< interface to listen on unsigned int port ///< port to listen on ); listener(const listener & ref) = delete; listener(listener && ref) noexcept = delete; listener & operator = (const listener & ref) = delete; listener & operator = (listener && ref) noexcept = delete; ~listener() { close(sockfd); cancel(); join(); }; protected: // inherited from libthreadar::thread; virtual void inherited_run() override; // no need to override thread::signaled_inherited_cancel() // we rely on the cancellation_checkpoint() mechanism // in inherited_run() private: std::shared_ptr rep; ///< where to report events std::shared_ptr src; ///< where to validate authentications int sockfd; ///< socket descriptor int famille; ///< domain familly of the socket std::string l_ip; ///< listening IP address std::string l_port; ///< listening port std::unique_ptr ssl_ctx; ///< ciphering context std::shared_ptr srv; ///< current servers void set_sockfd(int domain); void init(const std::shared_ptr & log, const std::shared_ptr & auth, std::unique_ptr & ciphering, std::shared_ptr & pool, const std::string & ip, unsigned int port); }; #endif webdar-1.0.0/src/html_form_select.cpp0000644000175000017520000000631615035005127014524 00000000000000/*********************************************************************/ // webdar - a web server and interface program to libdar // Copyright (C) 2013-2025 Denis Corbin // // This file is part of Webdar // // Webdar is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // Webdar is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Webdar. If not, see // //---- // to contact the author: dar.linux@free.fr /*********************************************************************/ // C system header files #include "my_config.h" extern "C" { } // C++ system header files // webdar headers #include "webdar_tools.hpp" // #include "html_form_select.hpp" using namespace std; const string html_form_select::changed = "html_form_select_changed"; html_form_select::html_form_select(const string & label, const string & x_event_name): enabled(true), x_label(label) { if(x_event_name.empty()) event_name = changed; else event_name = x_event_name; register_name(event_name); record_actor_on_event(this, html_form_radio::changed); } html_form_select::html_form_select(const html_form_select & ref): html_form_radio(ref), actor(ref), x_label(ref.x_label), event_name(ref.event_name) { // no need to register_name(event_name), this has been copied (without // the referred actors to these events) by the copy constructor of class events record_actor_on_event(this, html_form_radio::changed); } void html_form_select::set_enabled(bool val) { if(enabled != val) { enabled = val; act(event_name); my_body_part_has_changed(); } } string html_form_select::inherited_get_body_part(const chemin & path, const request & req) { string ret = ""; string select_id = get_path().namify(); const vector & choices = get_choices(); vector::const_iterator it = choices.begin(); // for POST method only, extract used choice from the body of the request // and update this object's fields; update_field_from_request(req); // for any request provide an updated HTML content in response if(! x_label.get_label().empty()) { x_label.set_for_field(webdar_tools_html_display(select_id)); ret += x_label.get_body_part(); } ret += "\n"; if(!get_no_CR()) ret += "
\n"; unlock_update_field_from_request(); return ret; }; webdar-1.0.0/src/html_level.hpp0000644000175000017520000000626715035735075013357 00000000000000/*********************************************************************/ // webdar - a web server and interface program to libdar // Copyright (C) 2013-2025 Denis Corbin // // This file is part of Webdar // // Webdar is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // Webdar is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Webdar. If not, see // //---- // to contact the author: dar.linux@free.fr /*********************************************************************/ #ifndef HTML_LEVEL_HPP #define HTML_LEVEL_HPP // C system header files #include "my_config.h" extern "C" { } // C++ system header files #include #include // webdar headers #include "html_tooltip.hpp" /// class html_level is a pure virtual class /// it implements the management of a mixed list of object and static html text /// and provides method to read this list. This class does not implement the /// get_body_part() pure virtual method of its body_builder ancestor class /// this is left to its inherited classes class html_level : public html_tooltip { public: html_level(); html_level(const html_level & ref) = delete; html_level(html_level && ref) noexcept = delete; html_level & operator = (const html_level & ref) = delete; html_level & operator = (html_level && ref) noexcept = delete; ~html_level() = default; /// used in concurrency with body_builder::adopt() void adopt_static_html(const std::string & html); /// clear all adopted data void clear_children(); protected: /// inherited from body_builder virtual void has_adopted(body_builder *obj) override; /// inherited from body_builder virtual void will_foresake(body_builder *obj) override; /// struct recording the content of each level (dynamic or static html component) struct bundle { body_builder* obj; ///< if set to nullptr, using static_text instead std::string static_text; ///< used if obj is nullptr bundle() { obj = nullptr; }; }; void reset_read_next() { nxt = table.begin(); }; bool read_next(bundle & bdl) const; ///< return false if bdl could not be set (nor more entry to read) /// this is an alternative of using read_next, it creates the body from both static and body_builder objects /// /// \note to be used when all children body_part are needed as a single block of text std::string get_body_part_from_children_as_a_block(const chemin & path, const request & req); protected: /// inherited from body_builder virtual std::string inherited_get_body_part(const chemin & path, const request & req) override; private: mutable std::list::iterator nxt; /// < used by read_next() std::list table; }; #endif webdar-1.0.0/src/archive_repair.cpp0000644000175000017520000000730715030770722014167 00000000000000/*********************************************************************/ // webdar - a web server and interface program to libdar // Copyright (C) 2013-2025 Denis Corbin // // This file is part of Webdar // // Webdar is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // Webdar is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Webdar. If not, see // //---- // to contact the author: dar.linux@free.fr /*********************************************************************/ // C system header files #include "my_config.h" extern "C" { } // C++ system header files // webdar headers #include "tokens.hpp" #include "exceptions.hpp" // #include "archive_repair.hpp" using namespace std; archive_repair::archive_repair(): param(nullptr) { #ifdef LIBTHREADAR_STACK_FEATURE set_stack_size(DEFAULT_STACK_SIZE); #endif } void archive_repair::inherited_run() { try { shared_ptr ref = nullptr; // in case of differential / incremental backup // we must open the archive of reference // and obtain an libdar::archive object to // be added to the options passed to the repair // constructor if(!ui && ! ui->get_user_interaction()) throw WEBDAR_BUG; ui->clear(); ui->auto_hide(false, false); if(param == nullptr) throw WEBDAR_BUG; libdar::path ref_path(param->get_archive_path(), true); string ref_basename(param->get_archive_basename()); libdar::archive_options_read read_opt(param->get_read_options(ui)); libdar::path archpath(param->get_repairing_path()); string basename(param->get_repairing_basename()); libdar::archive_options_repair repair_opt(param->get_repairing_options(ui)); libdar::statistics* progressive_report = ui->get_statistics().get_libdar_statistics(); // resetting counters and logs ui->get_statistics().clear_counters(); ui->get_statistics().clear_labels(); // webdar do not provide (yet) counter for the repairing operation // commenting out the following statements // // ui->get_statistics().set_treated_label("item(s) treated"); // ui->get_statistics().set_hard_links_label("hard link(s) treated"); // ui->get_statistics().set_byte_amount_label("byte(s) wasted due to changing files at the time they were read"); // ui->get_statistics().set_errored_label("items(s) with error (file system error)"); // ui->get_statistics().set_deleted_label("item(s) recorded as deleted"); // ui->get_statistics().set_ea_treated_label("item(s) with Extended Attributes"); // let's now repair the archive cancellation_checkpoint(); libdar::archive target(ui->get_user_interaction(), ref_path, ref_basename, EXTENSION, read_opt, archpath, basename, EXTENSION, repair_opt, progressive_report); // as the object being local to the local block // it will be destroyed automatically (and the archive // will be closed) once we will have exit this local block } catch(libdar::Egeneric & e) { throw exception_libcall(e); } } void archive_repair::signaled_inherited_cancel() { pthread_t libdar_tid; libdar::thread_cancellation th; if(is_running(libdar_tid)) th.cancel(libdar_tid, true, 0); } webdar-1.0.0/src/html_options_test.cpp0000644000175000017520000002162115036454531014760 00000000000000/*********************************************************************/ // webdar - a web server and interface program to libdar // Copyright (C) 2013-2025 Denis Corbin // // This file is part of Webdar // // Webdar is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // Webdar is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Webdar. If not, see // //---- // to contact the author: dar.linux@free.fr /*********************************************************************/ // C system header files #include "my_config.h" extern "C" { } // C++ system header files #include // webdar headers #include "webdar_css_style.hpp" #include "tooltip_messages.hpp" // #include "html_options_test.hpp" using namespace std; const string html_options_test::changed = "hot_test"; html_options_test::html_options_test(): form("Update options"), fs(""), empty("Dry-run execution", html_form_input::check, "", "", ""), form_show("Update"), fs_show(""), info_details("Detailed informations", html_form_input::check, "1", "", ""), display_treated("Display treated files", html_form_input::check, "1", "", ""), display_treated_only_dir("Display only treated directories", html_form_input::check, "", "", ""), display_skipped("Display skipped files", html_form_input::check, "1", "", ""), ignore_events(false) { filename_mask.reset(new (nothrow) html_mask_form_filename("file name")); if(!filename_mask) throw exception_memory(); path_mask.reset(new (nothrow) html_mask_form_path(false)); if(!path_mask) throw exception_memory(); // default values reset_non_pointer_fields(); // building HTML structure static const char* sect_opt = "options"; static const char* sect_show = "archive show opt"; static const char* sect_mask = "mask"; static const char* sect_path = "path"; deroule.add_section(sect_opt, "How to process the operation"); deroule.add_section(sect_show, "What to show during the operation"); deroule.add_section(sect_mask, "File name based filtering"); deroule.add_section(sect_path, "Path based filtering"); fs.adopt(&empty); form.adopt(&fs); deroule.adopt_in_section(sect_opt, &form); fs_show.adopt(&info_details); fs_show.adopt(&display_treated); fs_show.adopt(&display_treated_only_dir); fs_show.adopt(&display_skipped); form_show.adopt(&fs_show); deroule.adopt_in_section(sect_show, &form_show); deroule.adopt_in_section(sect_mask, &guichet_filename_mask); deroule.adopt_in_section(sect_path, &guichet_path_mask); adopt(&deroule); // events empty.record_actor_on_event(this, html_form_input::changed); info_details.record_actor_on_event(this, html_form_input::changed); display_treated.record_actor_on_event(this, html_form_input::changed); display_treated_only_dir.record_actor_on_event(this, html_form_input::changed); display_skipped.record_actor_on_event(this, html_form_input::changed); filename_mask->record_actor_on_event(this, html_mask_form_filename::changed); path_mask->record_actor_on_event(this, html_mask_form_path::changed); register_name(changed); // css webdar_css_style::grey_button(deroule, true); display_treated_only_dir.add_css_class(webdar_css_style::indent); // components visibility status on_event(html_form_input::changed); // tooltips empty.set_tooltip(TOOLTIP_HOT_EMPTY); info_details.set_tooltip(TOOLTIP_HOT_INFO_DETAILS); display_treated.set_tooltip(TOOLTIP_HOT_DISPLAY_TREATED); display_treated_only_dir.set_tooltip(TOOLTIP_HOT_DISPLAY_ONLY_DIR); display_skipped.set_tooltip(TOOLTIP_HOT_DISPLAY_SKIPPED); } void html_options_test::set_biblio(const shared_ptr & ptr) { filename_mask->set_child(ptr, bibliotheque::filefilter); guichet_filename_mask.set_child(ptr, bibliotheque::filefilter, filename_mask, false); path_mask->set_child(ptr, bibliotheque::pathfilter); guichet_path_mask.set_child(ptr, bibliotheque::pathfilter, path_mask, false); } libdar::archive_options_test html_options_test::get_options() const { libdar::archive_options_test ret; ret.set_empty(empty.get_value_as_bool()); ret.set_info_details(info_details.get_value_as_bool()); ret.set_display_treated(display_treated.get_value_as_bool(), display_treated_only_dir.get_value_as_bool()); ret.set_display_skipped(display_skipped.get_value_as_bool()); ret.set_selection(*(filename_mask->get_mask())); ret.set_subtree(*(path_mask->get_mask())); return ret; } void html_options_test::load_json(const json & source) { try { unsigned int version; string class_id; json config = unwrap_config_from_json_header(source, version, class_id); if(class_id != myclass_id) throw exception_range(libdar::tools_printf("Unexpected class_id in json data, found %s while expecting %s", class_id.c_str(), myclass_id)); if(version > format_version) throw exception_range(libdar::tools_printf("Json format version too hight for %s, upgrade your webdar software", myclass_id)); ignore_events = true; try { empty.set_value_as_bool(config.at(jlabel_dry_run)); info_details.set_value_as_bool(config.at(jlabel_info_details)); display_treated.set_value_as_bool(config.at(jlabel_disp_treated)); display_treated_only_dir.set_value_as_bool(config.at(jlabel_disp_only_dir)); display_skipped.set_value_as_bool(config.at(jlabel_disp_skipped)); guichet_filename_mask.load_json(config.at(jlabel_file_mask)); guichet_path_mask.load_json(config.at(jlabel_path_mask)); } catch(...) { ignore_events = false; throw; } ignore_events = false; trigger_change(); } catch(json::exception & e) { throw exception_json(libdar::tools_printf("Error loading %s config", myclass_id), e); } } json html_options_test::save_json() const { json config; config[jlabel_dry_run] = empty.get_value_as_bool(); config[jlabel_info_details] = info_details.get_value_as_bool(); config[jlabel_disp_treated] = display_treated.get_value_as_bool(); config[jlabel_disp_only_dir] = display_treated_only_dir.get_value_as_bool(); config[jlabel_disp_skipped] = display_skipped.get_value_as_bool(); config[jlabel_file_mask] = guichet_filename_mask.save_json(); config[jlabel_path_mask] = guichet_path_mask.save_json(); return wrap_config_with_json_header(format_version, myclass_id, config); } void html_options_test::clear_json() { ignore_events = true; try { reset_non_pointer_fields(); guichet_filename_mask.clear_json(); guichet_path_mask.clear_json(); } catch(...) { ignore_events = false; throw; } ignore_events = false; trigger_change(); } bibliotheque::using_set html_options_test::get_using_set() const { bibliotheque::using_set ret; subconfig_add_to(ret, guichet_filename_mask.get_using_set()); subconfig_add_to(ret, guichet_path_mask.get_using_set()); return ret; } void html_options_test::on_event(const string & event_name) { if(event_name == html_form_input::changed) { display_treated_only_dir.set_visible(display_treated.get_value_as_bool()); } else if(event_name == html_mask_form_filename::changed || event_name == html_mask_form_path::changed) { } else throw WEBDAR_BUG; trigger_change(); } void html_options_test::set_to_webdar_defaults() { clear_json(); info_details.set_value_as_bool(true); display_treated.set_value_as_bool(true); display_treated_only_dir.set_value_as_bool(false); display_skipped.set_value_as_bool(true); } string html_options_test::inherited_get_body_part(const chemin & path, const request & req) { return get_body_part_from_all_children(path, req); } void html_options_test::new_css_library_available() { unique_ptr & csslib = lookup_css_library(); if(!csslib) throw WEBDAR_BUG; webdar_css_style::update_library(*csslib); } void html_options_test::reset_non_pointer_fields() { empty.set_value_as_bool(false); info_details.set_value_as_bool(true); display_treated.set_value_as_bool(true); display_treated_only_dir.set_value_as_bool(false); display_skipped.set_value_as_bool(true); } void html_options_test::trigger_change() { if(! ignore_events) act(changed); } webdar-1.0.0/src/html_archive_merge.hpp0000644000175000017520000000666314773727245015060 00000000000000/*********************************************************************/ // webdar - a web server and interface program to libdar // Copyright (C) 2013-2025 Denis Corbin // // This file is part of Webdar // // Webdar is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // Webdar is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Webdar. If not, see // //---- // to contact the author: dar.linux@free.fr /*********************************************************************/ #ifndef HTML_ARCHIVE_MERGE_HPP #define HTML_ARCHIVE_MERGE_HPP // C system header files #include "my_config.h" extern "C" { } // C++ system header files #include // webdar headers #include "body_builder.hpp" #include "actor.hpp" #include "html_form_input_file.hpp" #include "html_form_fieldset.hpp" #include "html_options_merge.hpp" #include "html_derouleur.hpp" #include "html_libdar_running_popup.hpp" #include "guichet.hpp" /// html component used to collect merging operation parameters from the user class html_archive_merge: public body_builder, public libthreadar::thread_signal, public actor { public: html_archive_merge(); html_archive_merge(const html_archive_merge & ref) = delete; html_archive_merge(html_archive_merge && ref) noexcept = delete; html_archive_merge & operator = (const html_archive_merge & ref) = delete; html_archive_merge & operator = (html_archive_merge && ref) noexcept = delete; ~html_archive_merge() { cancel(); join(); }; const std::string & get_archive_path() const { return sauv_path.get_value(); }; const std::string & get_archive_basename() const; libdar::archive_options_merge get_options_merge(std::shared_ptr dialog) const { return options->get_options(dialog); }; /// mandatory call to invoke ASAP after constructor void set_biblio(const std::shared_ptr & ptr); /// inherited from actor virtual void on_event(const std::string & event_name) override; protected: /// inherited from body_builder virtual std::string inherited_get_body_part(const chemin & path, const request & req) override; virtual void new_css_library_available() override; /// inherited from libthreadar::thread virtual void inherited_run() override; /// inherited from libthreadar::thread virtual void signaled_inherited_cancel() override; private: html_derouleur deroule; html_form form; html_form_fieldset fs; html_form_input_file sauv_path; html_form_input basename; html_libdar_running_popup repoxfer; guichet guichet_options; std::shared_ptr options; /// delay entrepot update when waiting inherited_get_body_part() to be executed /// \note not doing so may lead to run() this object which involves an html_web_user_interaction /// while the object is not visible and this this interaction component not operational bool need_entrepot_update; void update_entrepot(); }; #endif webdar-1.0.0/src/html_form_overwrite_action.cpp0000644000175000017520000002003415036443334016630 00000000000000/*********************************************************************/ // webdar - a web server and interface program to libdar // Copyright (C) 2013-2025 Denis Corbin // // This file is part of Webdar // // Webdar is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // Webdar is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Webdar. If not, see // //---- // to contact the author: dar.linux@free.fr /*********************************************************************/ // C system header files #include "my_config.h" extern "C" { } // C++ system header files #include // webdar headers #include "html_form_overwrite_conditional_action.hpp" #include "tooltip_messages.hpp" // #include "html_form_overwrite_action.hpp" using namespace std; const string html_form_overwrite_action::changed = "hfoa_changed"; html_form_overwrite_action::html_form_overwrite_action(const string & label): fs(label), chain_action("Chain of actions"), action_type("Action type", act_changed), need_conditional_action(false) { // components setup // conditional_action cannot be assigned right now // to avoid endless loop constructing an html_form_conditional_action // which in turn constructs two html_form_overwrite_action and so on. action_type.add_choice(action_type_const, "constant action"); action_type.add_choice(action_type_condition, "conditional action"); action_type.add_choice(action_type_chain, "chain action"); action_type.set_selected_num(0); set_visible(); // adoption tree fs.adopt(&action_type); fs.adopt(&constant_action); fs.adopt(&chain_action); adopt(&fs); // events action_type.record_actor_on_event(this, act_changed); constant_action.record_actor_on_event(this, html_form_overwrite_constant_action::changed); chain_action.record_actor_on_event(this, html_form_overwrite_chain_action::changed); register_name(changed); // css // tooltip action_type.set_tooltip(TOOLTIP_HFOA_TYPE); } html_form_overwrite_conditional_action & html_form_overwrite_action::get_action_when_type_condition() { html_form_overwrite_conditional_action *ptr = nullptr; if(need_conditional_action) make_conditional_action(); if(!conditional_action) throw WEBDAR_BUG; ptr = dynamic_cast(conditional_action.get()); if(ptr == nullptr) throw WEBDAR_BUG; return *ptr; } unique_ptr html_form_overwrite_action::get_overwriting_action() const { unique_ptr ret; switch(action_type.get_selected_num()) { case 0: ret = constant_action.get_overwriting_action(); break; case 1: if(!conditional_action) throw WEBDAR_BUG; ret = conditional_action->get_overwriting_action(); break; case 2: ret = chain_action.get_overwriting_action(); break; default: throw WEBDAR_BUG; } if(!ret) throw WEBDAR_BUG; return ret; } void html_form_overwrite_action::load_json(const json & source) { try { unsigned int version; string class_id; jsoner* jsnptr = nullptr; json config = unwrap_config_from_json_header(source, version, class_id); if(class_id != myclass_id) throw exception_range(libdar::tools_printf("Unexpected class_id in json data, found %s while expecting %s", class_id.c_str(), myclass_id)); if(version > format_version) throw exception_range(libdar::tools_printf("Json format version too hight for %s, upgrade your webdar software", myclass_id)); clear_json(); // we must clear also the currently not selected components action_type.set_selected_id_with_warning(config.at(jlabel_type), jlabel_type); switch(action_type.get_selected_num()) { case 0: constant_action.load_json(config.at(jlabel_value)); break; case 1: make_conditional_action(); if(!conditional_action) throw WEBDAR_BUG; jsnptr = dynamic_cast(conditional_action.get()); if(jsnptr == nullptr) throw WEBDAR_BUG; jsnptr->load_json(config.at(jlabel_value)); break; case 2: chain_action.load_json(config.at(jlabel_value)); break; default: throw WEBDAR_BUG; } } catch(json::exception & e) { throw exception_json(libdar::tools_printf("Error loading %s config", myclass_id), e); } } json html_form_overwrite_action::save_json() const { json config; const jsoner* jsnptr = nullptr; config[jlabel_type] = action_type.get_selected_id(); switch(action_type.get_selected_num()) { case 0: config[jlabel_value] = constant_action.save_json(); break; case 1: if(!conditional_action) throw WEBDAR_BUG; jsnptr = dynamic_cast(conditional_action.get()); if(jsnptr == nullptr) throw WEBDAR_BUG; config[jlabel_value] = jsnptr->save_json(); break; case 2: config[jlabel_value] = chain_action.save_json(); break; default: throw WEBDAR_BUG; } return wrap_config_with_json_header(format_version, myclass_id, config); } void html_form_overwrite_action::clear_json() { action_type.set_selected_num(0); constant_action.clear_json(); if(conditional_action) { jsoner* jsnptr = dynamic_cast(conditional_action.get()); if(jsnptr == nullptr) throw WEBDAR_BUG; jsnptr->clear_json(); } chain_action.clear_json(); } void html_form_overwrite_action::on_event(const string & event_name) { if(event_name == act_changed) { if(action_type.get_selected_num() == 1) { if(!conditional_action) need_conditional_action = true; } set_visible(); act(changed); } else if(event_name == html_form_overwrite_constant_action::changed || event_name == html_form_overwrite_chain_action::changed || event_name == html_form_overwrite_conditional_action::changed) { act(changed); } else // unexpected event name throw WEBDAR_BUG; } void html_form_overwrite_action::set_to_webdar_defaults() { clear_json(); action_type.set_selected_num(0); // constant action } string html_form_overwrite_action::inherited_get_body_part(const chemin & path, const request & req) { string ret; ret = html_div::inherited_get_body_part(path, req); if(need_conditional_action) make_conditional_action(); return ret; } void html_form_overwrite_action::make_conditional_action() { if(!conditional_action) { html_form_overwrite_conditional_action* ptr = nullptr; conditional_action.reset(new (nothrow) html_form_overwrite_conditional_action()); if(!conditional_action) throw exception_memory(); fs.adopt(conditional_action.get()); ptr = dynamic_cast(conditional_action.get()); if(!ptr) throw WEBDAR_BUG; ptr->record_actor_on_event(this, html_form_overwrite_conditional_action::changed); need_conditional_action = false; my_body_part_has_changed(); } } void html_form_overwrite_action::set_visible() { switch(action_type.get_selected_num()) { case 0: // constant action constant_action.set_visible(true); if(conditional_action) conditional_action->set_visible(false); chain_action.set_visible(false); break; case 1: // conditional action constant_action.set_visible(false); if(conditional_action) conditional_action->set_visible(true); else { if(!need_conditional_action) throw WEBDAR_BUG; } chain_action.set_visible(false); break; case 2: // chain action constant_action.set_visible(false); if(conditional_action) conditional_action->set_visible(false); chain_action.set_visible(true); break; default: throw WEBDAR_BUG; } } webdar-1.0.0/src/html_libdar_running_popup.cpp0000644000175000017520000001002614773727246016460 00000000000000/*********************************************************************/ // webdar - a web server and interface program to libdar // Copyright (C) 2013-2025 Denis Corbin // // This file is part of Webdar // // Webdar is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // Webdar is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Webdar. If not, see // //---- // to contact the author: dar.linux@free.fr /*********************************************************************/ // C system header files #include "my_config.h" extern "C" { } // C++ system header files // webdar headers #include "html_page.hpp" // #include "html_libdar_running_popup.hpp" using namespace std; const string html_libdar_running_popup::libdar_has_finished = "html_libdar_running_popup_finished"; html_libdar_running_popup::html_libdar_running_popup(): html_popup(90,90), enable_refresh(false) { web_ui.reset(new (nothrow) html_web_user_interaction()); if(!web_ui) throw exception_memory(); adopt(web_ui.get()); // signals and events register_name(libdar_has_finished); web_ui->record_actor_on_event(this, html_web_user_interaction::display_started); web_ui->record_actor_on_event(this, html_web_user_interaction::can_refresh); web_ui->record_actor_on_event(this, html_web_user_interaction::dont_refresh); web_ui->record_actor_on_event(this, html_web_user_interaction::libdar_has_finished); } string html_libdar_running_popup::inherited_get_body_part(const chemin & path, const request & req) { string ret; html_page* page = nullptr; closest_ancestor_of_type(page); if(page == nullptr) throw WEBDAR_BUG; // we want our visibility status to follow and act on // our html_web_user_interaction component visibility // such a way that changing either ours or this component // which we provide direct access to, to stay identical at anytime // the first direction webui -> this is done by the events // html_web_user_interaction::display_started we act upon // and html_web_user_interaction::libdar_has_finished in regard // to the auto_hide property // second, our component's visibilty should change ours accordingly // if we get running inherited_get_body_part, we are visible, web_ui // should also be set accordingly. If not, web_ui our adopted children // is neither called and nor visibile. if(!web_ui->get_visible()) set_visible(web_ui->get_visible()); // our component visibility has changed // we have to propagate this to ourself for // it be visible as expected ret = html_popup::inherited_get_body_part(path, req); if(enable_refresh) page->set_refresh_redirection(1, req.get_uri().url_path_part()); else page->set_refresh_redirection(0, ""); // disable refresh return ret; } void html_libdar_running_popup::my_visibility_has_changed() { if(!web_ui) throw WEBDAR_BUG; web_ui->set_visible(get_visible()); } void html_libdar_running_popup::on_event(const string & event_name) { if(event_name == html_web_user_interaction::display_started) { set_visible(true); my_body_part_has_changed(); // in case we were already visible } else if(event_name == html_web_user_interaction::libdar_has_finished) { my_body_part_has_changed(); set_visible(false); // nothing more to show act(libdar_has_finished); // propagating the event } else if(event_name == html_web_user_interaction::can_refresh) { enable_refresh = true; } else if(event_name == html_web_user_interaction::dont_refresh) { enable_refresh = false; } else throw WEBDAR_BUG; } webdar-1.0.0/src/css.hpp0000644000175000017520000003102415045120456011771 00000000000000/*********************************************************************/ // webdar - a web server and interface program to libdar // Copyright (C) 2013-2025 Denis Corbin // // This file is part of Webdar // // Webdar is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // Webdar is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Webdar. If not, see // //---- // to contact the author: dar.linux@free.fr /*********************************************************************/ #ifndef CSS_HPP #define CSS_HPP // C system header files #include "my_config.h" extern "C" { } // C++ system header files #include #include #include // webdar headers #include "css_property.hpp" /// class managing Cascading Style Sheets attributes /// contains a set of well-known css attributes and their values /// provide methods to reset each of them to a well-known default value class css { public: css() { clear(); }; css(const css & ref) = default; css(css && ref) noexcept = default; css & operator = (const css & ref) = default; css & operator = (css && ref) noexcept = default; virtual ~css() = default; /// update current object with argument ignoring all fields which are unset void update_from(const css & ref); /// set css attributes to their default void clear(); // colors void css_color(const std::string & col); void css_background_color(const std::string & col); void css_background_color() { bg_col.clear(); }; // unset previously set value // background image void css_background_image(const std::string & url, bool repeat_x, bool repeat_y, bool fixed); void css_background_image() { bg_img.clear(); }; void css_background_position(const std::string & x, const std::string & y); void css_background_position() { img_pos.clear(); }; // shadow void css_box_shadow() { box_shadow.clear(); }; void css_box_shadow(const std::string & x_shift, const std::string & y_shift, const std::string & blur_size, const std::string & color = "#444444"); void css_text_shadow() { text_shadow.clear(); }; void css_text_shadow(const std::string & x_shift, const std::string & y_shift, const std::string & blur_size, const std::string & color = "#444444"); // position in the window void css_margin(const std::string & all); void css_margin() { css_margin_top(); css_margin_right(); css_margin_bottom(); css_margin_left(); }; void css_margin_top(const std::string & top); void css_margin_top() { margin_top.clear(); }; void css_margin_right(const std::string & right); void css_margin_right() { margin_right.clear(); }; void css_margin_bottom(const std::string & bottom); void css_margin_bottom() { margin_bottom.clear(); }; void css_margin_left(const std::string & left); void css_margin_left() { margin_left.clear(); }; void css_height(const std::string & val, bool center); void css_height() { height.clear(); }; void css_min_height(const std::string & val); void css_min_height() { min_height.clear(); }; void css_max_height(const std::string & val); void css_max_height() { max_height.clear(); }; void css_width(const std::string & val, bool center); void css_width() { width.clear(); }; void css_min_width(const std::string & val); void css_min_width() { min_width.clear(); }; void css_max_width(const std::string & val); void css_max_width() { max_width.clear(); }; void css_z_index(unsigned int index); void css_z_index() { z_index.clear(); }; enum positionning { pos_absolute, ///< absolute in the document pos_relative, ///< shifted relative to its expected position pos_fixed, ///< fixed in the viewport pos_sticky ///< either relative or fixed depending on scrolling of parent object }; void css_position_type(positionning val); void css_position_type() { position_type.clear(); }; void css_position_top(const std::string & top); void css_position_top() { position_top.clear(); }; void css_position_left(const std::string & left); void css_position_left() { position_left.clear(); }; void css_position_bottom(const std::string & bottom); void css_position_bottom() { position_bottom.clear(); }; void css_position_right(const std::string & right); void css_position_right() { position_right.clear(); }; enum overflowing { ov_visible, // show even what exceed the parent dimensions ov_hidden, //< do not show what exceeds the parent dimensions ov_scroll, //< alsways add a scrollbar to see what's hidden ov_auto, //< scrollbar shows only if necessary ov_inherit }; //< inherited from HTML parent /// set both x and y overflow /// \note css_overflow, css_overflow_x and css_overflow_y are mutual exclusive void css_overflow(overflowing val); /// set only x overflow void css_overflow_x(overflowing val); /// set only y overflow void css_overflow_y(overflowing val); /// clear both x and y overflow (default value) void css_overflow() { overflow.clear(); }; // floating enum floating { fl_left, fl_right, fl_none }; enum floatclear { fc_left, fc_right, fc_both, fc_none }; void css_float(floating val); void css_float() { float_pos.clear(); }; void css_float_clear(floatclear val); void css_float_clear() { float_clear.clear(); }; // opacity void css_opacity(const std::string & opacity); // padding enum bx_sizing { bx_content, ///< width and height define the content (add padding and border size for the real size) bx_border ///< width and height define the box size (reduce content space to fit within the border+padding) }; void css_box_sizing(bx_sizing val); void css_display(const std::string & val); void css_padding(const std::string & val); void css_padding() { css_padding_top(); css_padding_right(); css_padding_bottom(); css_padding_left(); }; void css_padding_top(const std::string & top); void css_padding_top() { padding_top.clear(); }; void css_padding_right(const std::string & right); void css_padding_right() { padding_right.clear(); }; void css_padding_bottom(const std::string & bottom); void css_padding_bottom() { padding_bottom.clear(); }; void css_padding_left(const std::string & left); void css_padding_left() { padding_left.clear(); }; // text enum h_align { al_right, al_left, al_center, al_justify }; enum v_align { al_top, al_middle, al_bottom, al_baseline, al_sub, al_super, al_text_top, al_text_bottom }; enum decoration { dc_underline, dc_overline, dc_line_through, dc_none }; void css_font_size(const std::string & val); void css_font_style_italic(); void css_font_style_normal(); void css_font_style() { font_style.clear(); }; void css_font_weight_bold(); void css_font_weight_normal(); void css_font_weight() { font_weight.clear(); }; void css_text_h_align(h_align val); void css_text_h_align() { text_h_align.clear(); }; void css_text_v_align(v_align val); void css_text_v_align() { text_v_align.clear(); }; void css_text_decoration(decoration val); void css_text_decoration() { text_deco.clear(); }; // border enum border { bd_top, bd_right, bd_bottom, bd_left, bd_all, bd_clear }; //< remove specifications for any border enum bd_width { bd_thin, bd_medium, bd_thick }; enum bd_style { bd_dotted, bd_dashed, bd_solid, bd_double, bd_groove, bd_ridge, bd_inset, bd_outset, bd_none }; void css_border_width(border which, bd_width val); void css_border_width(border which, const std::string & val); void css_border_width() { border_width.clear(); }; void css_border_color(border which, const std::string & col); void css_border_color() { border_color.clear(); }; void css_border_style(border which, bd_style val); void css_border_style() { border_style.clear(); }; // round corners void css_corner_radius(const std::string & all); void css_corner_radius(const std::string & topleft, const std::string & topright, const std::string & botright, const std::string & botleft); // clear all css_corner radius relative information void css_corner_radius() { corner_radius.clear(); }; /// css_visibility does not prevent sending HTML code to the browser /// \note body_builder class has a set_visible() method that avoids a /// component to produce html code though it keeps it place in the adoption tree /// but no html code is sent to the browser. Here CSS visibility sends /// html code to the browser and may lead an object to change its visibility without /// webdar - browser communication (Responsive CSS) void css_visibility(bool val); /// css content property for "::after" and "::before" pseudo-elements void css_content(const std::string & name); /// css transition, this concerns all properties that changed within CSS style (hover, focus, and so on) enum transition_function { ease, linear, ease_in, ease_out, ease_in_out }; /// \note CSS is more precise and is able to define specific transition timing for different properties void css_transition(const std::string & duration, const std::string & delay = "0s", transition_function funct = ease); /// clear transition property void css_transition() { transition.clear(); }; /// returns the css raw string std::string css_get_raw_string() const; protected: /// this method is called when a property has been modified virtual void css_updated() {}; /// custom css properties, method available for inherited classes /// \note storing css properties by this css methods /// lead them to be integrated in the css_get_string/css_get_raw_string methods /// they also can be abstracted to html class by body builder derived class /// note, that this provided label must not have already been declared previously on that css void declare_custom_css(const std::string & label); /// set value to a previously declared custom css void set_custom_css(const std::string & label, const std::string & val); /// unset value of a previously declared custom css void clear_custom_css(const std::string & label); private: // colors properties css_property color; css_property bg_col; // background image properties css_property bg_img; css_property img_pos; // shadowing css_property box_shadow; css_property text_shadow; // position properties css_property box_sizing; css_property display; css_property margin_top; css_property margin_right; css_property margin_bottom; css_property margin_left; css_property height; css_property min_height; css_property max_height; css_property width; css_property min_width; css_property max_width; css_property z_index; css_property position_type; css_property position_top; css_property position_left; css_property position_bottom; css_property position_right; css_property overflow; // floating properties css_property float_pos; css_property float_clear; css_property opacity; // padding properties css_property padding_top; css_property padding_right; css_property padding_bottom; css_property padding_left; // text properties css_property font_size; css_property font_style; css_property font_weight; css_property text_h_align; css_property text_v_align; css_property text_deco; // border properties css_property border_width; css_property border_color; css_property border_style; // round corners css_property corner_radius; // CSS visibility css_property visibility; // content css_property content; // transition css_property transition; // custom css std::map custom_css; std::string border_to_string(border val); std::string overflow_to_string(overflowing val); }; #endif webdar-1.0.0/src/choose.cpp0000644000175000017520000002221314773727246012475 00000000000000/*********************************************************************/ // webdar - a web server and interface program to libdar // Copyright (C) 2013-2025 Denis Corbin // // This file is part of Webdar // // Webdar is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // Webdar is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Webdar. If not, see // //---- // to contact the author: dar.linux@free.fr /*********************************************************************/ // C system header files #include "my_config.h" extern "C" { } // C++ system header files #include #include // webdar headers #include "html_form.hpp" #include "html_table.hpp" #include "html_page.hpp" #include "html_static_url.hpp" #include "html_text.hpp" #include "html_form_fieldset.hpp" #include "tokens.hpp" #include "html_div.hpp" #include "html_yes_no_box.hpp" #include "webdar_css_style.hpp" // #include "choose.hpp" using namespace std; const string choose::css_class_normal_text = "choose_normal_text"; const string choose::url_new_session = "/choose/new"; choose::choose(): page("Webdar - Choose a session"), owner(""), disconnect_req(false), table(6), nouvelle(url_new_session, "Create a new session"), form("Kill the selected session(s)") { html_text tmp; css tmpcss; static const string css_class_text = "choose_text"; static const string css_class_table = "choose_table"; static const string css_class_table_cells = "choose_table_cells"; static const string css_class_table_title = "choose_table_title"; static const string css_class_form = "choose_form"; static const string css_class_div = "choose_div"; boxes.clear(); /// setup of session table page page.adopt(&disco); // attention disco will load the page's css_library with webdar_css_style // definitions // title above session table tmp.add_text(3, "Current sessions"); tmp.add_css_class(css_class_text); tmp.add_css_class(webdar_css_style::text_shadow_dark); page.adopt_static_html(tmp.get_body_part()); if(! page.is_css_class_defined_in_library(webdar_css_style::text_shadow_dark)) page.define_css_class_in_library(webdar_css_style::get_css_class(webdar_css_style::text_shadow_dark)); // overall table tmpcss.clear(); tmpcss.css_box_sizing(css::bx_border); tmpcss.css_text_h_align(css::al_center); tmpcss.css_border_width(css::bd_all, css::bd_thin); tmpcss.css_border_style(css::bd_all, css::bd_dashed); tmpcss.css_border_color(css::bd_all, COLOR_MENU_BORDER_OFF); tmpcss.css_width("90%", true); table.add_css_class(css_class_table); page.define_css_class_in_library(css_class_table, tmpcss); // all cells except the first row tmpcss.clear(); tmpcss.css_border_width(css::bd_top, css::bd_thin); tmpcss.css_border_style(css::bd_top, css::bd_dashed); tmpcss.css_border_color(css::bd_top, COLOR_MENU_BORDER_OFF); table.set_css_class_cells(css_class_table_cells); page.define_css_class_in_library(css_class_table_cells, tmpcss); // first row tmpcss = webdar_css_style::get_css_class(webdar_css_style::btn_off).get_value(); table.set_css_class_first_row(css_class_table_title); page.define_css_class_in_library(css_class_table_title, tmpcss); // form button around the table tmpcss.clear(); tmpcss.css_text_h_align(css::al_center); form.add_css_class(css_class_form); page.define_css_class_in_library(css_class_form, tmpcss); // new session url below the table tmpcss.clear(); tmpcss.css_text_h_align(css::al_center); tmpcss.css_width("90%", true); tmpcss.css_padding_bottom("1em"); div.add_css_class(css_class_div); box_nouvelle.add_css_class(css_class_div); page.define_css_class_in_library(css_class_div, tmpcss); // setting up genealogy of body_builder objects for object page div.adopt(&table); form.adopt(&div); page.adopt(&form); box_nouvelle.adopt(&nouvelle); page.adopt(&box_nouvelle); page.adopt(&confirmed); page.set_prefix(chemin("choose")); // events form.record_actor_on_event(this, html_form::changed); disco.record_actor_on_event(this, html_disconnect::event_disconn); confirmed.record_actor_on_event(this, html_yes_no_box::answer_yes); confirmed.record_actor_on_event(this, html_yes_no_box::answer_no); regenerate_table_page(); } void choose::set_owner(const string & user) { if(user.empty()) throw WEBDAR_BUG; else { owner = user; disco.set_username(user); } } answer choose::give_answer(const request & req) { answer ret; // sanity checks if(owner.empty()) throw WEBDAR_BUG; // update the form fields when request is a POST if(req.get_method() == "POST") (void)page.get_body_part(req.get_uri().get_path(), req); // generate response HTML page if(req.get_uri().get_path() == chemin(url_new_session)) { if(!session::create_new_session(owner, false, // not espetially an initial session (some other may already exist for that user req, ret)) // the response to return throw WEBDAR_BUG; // with initial set to false the // call should either succeed or // throw an exception regenerate_table_page(); } else { ret.set_status(STATUS_CODE_OK); ret.set_reason("ok"); regenerate_table_page(); ret.add_body(page.get_body_part(req.get_uri().get_path(), req)); } return ret; } void choose::on_event(const string & event_name) { if(event_name == html_form::changed) { string target_sessions; for(unsigned int i = 0; i < boxes.size(); ++i) { if(boxes[i] == nullptr) throw WEBDAR_BUG; if(boxes[i]->get_value_as_bool()) { if(! target_sessions.empty()) target_sessions += ", "; target_sessions += sess[i].session_name; } } if(!target_sessions.empty()) { if(!confirmed.get_visible()) { target_sessions = "Confirm destruction of the following sessions: " + target_sessions; confirmed.ask_question(target_sessions, false); } } } else if(event_name == html_disconnect::event_disconn) disconnect_req = true; else if(event_name == html_yes_no_box::answer_yes) { kill_selected_sessions(); regenerate_table_page(); } else if(event_name == html_yes_no_box::answer_no) { regenerate_table_page(); } else throw WEBDAR_BUG; } void choose::regenerate_table_page() { html_form_input *check = nullptr; set selected_ids; // recording session which box was checked for(unsigned int i = 0; i < boxes.size(); ++i) { if(boxes[i] != nullptr && boxes[i]->get_value_as_bool()) selected_ids.insert(sess[i].session_ID); } // releasing old objects of the table release_boxes(); table.clear(); // rebuilding the table based on existing sessions sess = session::get_summary(); table.adopt_static_html("Session ID"); table.adopt_static_html("owner"); table.adopt_static_html("Locked"); table.adopt_static_html("Libdar"); table.adopt_static_html("Closing"); table.adopt_static_html("Kill Session"); for(vector::iterator it = sess.begin(); it != sess.end(); ++it) { if(it->owner == owner) { string label = it->session_name; if(label == "") label = it->session_ID; table.adopt_static_html(html_static_url(string("/") + it->session_ID, label).get_body_part()); } else table.adopt_static_html(it->session_ID); table.adopt_static_html(it->owner); table.adopt_static_html(it->locked ? "locked" : " "); table.adopt_static_html(it->libdar_running ? "running" : " "); table.adopt_static_html(it->closing ? "closing" : " "); check = new (nothrow) html_form_input("", html_form_input::check, "", "", ""); if(check == nullptr) throw exception_memory(); try { boxes.push_back(check); } catch(...) { // we assume the check pointed to object // could not be passed under the responsibility // of the boxes delete check; throw; } if(selected_ids.find(it->session_ID) != selected_ids.end()) check->set_value_as_bool(true); // box was checked for this session ID if(it->owner != owner) check->set_enabled(false); table.adopt(check); } } void choose::release_boxes() { for(vector::iterator it = boxes.begin(); it != boxes.end(); ++it) { if(*it != nullptr) { delete (*it); *it = nullptr; } } boxes.clear(); } void choose::kill_selected_sessions() const { if(boxes.size() != sess.size()) throw WEBDAR_BUG; for(unsigned int i = 0; i < boxes.size(); ++i) { if(boxes[i] == nullptr) throw WEBDAR_BUG; if(boxes[i]->get_value() != "") // session to be killed (void)session::close_session(sess[i].session_ID); } } webdar-1.0.0/src/html_tooltip.cpp0000644000175000017520000001031315036414732013713 00000000000000/*********************************************************************/ // webdar - a web server and interface program to libdar // Copyright (C) 2013-2025 Denis Corbin // // This file is part of Webdar // // Webdar is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // Webdar is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Webdar. If not, see // //---- // to contact the author: dar.linux@free.fr /*********************************************************************/ // C system header files #include "my_config.h" extern "C" { } // C++ system header files #include // webdar headers #include "tokens.hpp" #include "css.hpp" #include "css_class.hpp" #include "webdar_css_style.hpp" // #include "html_tooltip.hpp" using namespace std; void html_tooltip::set_tooltip(const std::string & helper) { tooltip = helper; if(tooltip.empty()) { if(has_css_class(css_tooltip)) remove_css_class(css_tooltip); } else { if(!has_css_class(css_tooltip)) add_css_class(css_tooltip); } } void html_tooltip::new_css_library_available() { unique_ptr & csslib = lookup_css_library(); if(!csslib) throw WEBDAR_BUG; if(! csslib->class_exists(css_tooltip)) { css tmp; css_class tip(css_tooltip); css_class tiptext(css_tooltiptext); if(csslib->class_exists(css_tooltiptext)) throw WEBDAR_BUG; ///// // the dashes under the text having tooltip enabled // tmp.css_position_type(css::pos_relative); tmp.css_display("inline-block"); tmp.css_text_shadow("0.05em", "0.05em", "0.2em", COLOR_TEXT); tmp.css_font_style_italic(); tmp.css_transition("0.5s"); tip.set_selector(css_class::hover, tmp); ///// // making the tooltip show upon hover on the dashed bar // tmp.clear(); tmp.css_visibility(true); tmp.css_opacity("1"); tip.set_selector(css_class::hover, tmp, "." + string(css_tooltiptext)); csslib->add(tip); ///// // the box containing the helper message // tmp.clear(); tmp.css_visibility(false); tmp.css_opacity("0"); tmp.css_font_size("smaller"); tmp.css_background_color(COLOR_DAR_GREYBLUE); tmp.css_color(COLOR_TEXT); tmp.css_text_h_align(css::al_center); tmp.css_corner_radius("0.5em", "0", "0.5em", "0"); tmp.css_position_type(css::pos_absolute); tmp.css_z_index(2); tmp.css_position_bottom("125%"); tmp.css_position_right("0%"); tmp.css_position_left("40%"); tmp.css_min_width("15em"); tmp.css_margin_left("-60px"); tmp.css_border_style(css::bd_bottom, css::bd_solid); tmp.css_border_style(css::bd_right, css::bd_solid); tmp.css_border_color(css::bd_bottom, COLOR_MENU_BORDER_OFF); tmp.css_border_color(css::bd_right, COLOR_MENU_BORDER_OFF); tmp.css_font_style_italic(); tmp.css_transition("0.7s", "1s"); tiptext.set_value(tmp); ///// // the arrow below the tooltip (this is the top border of an empty box) // tmp.clear(); tmp.css_content(""); tmp.css_position_type(css::pos_absolute); tmp.css_position_bottom("-16px"); tmp.css_position_left("30%"); tmp.css_border_width(css::bd_top, "12px"); tmp.css_border_width(css::bd_left, "8px"); tmp.css_border_width(css::bd_right, "8px"); tmp.css_border_style(css::bd_all, css::bd_solid); tmp.css_border_color(css::bd_top, COLOR_MENU_BORDER_OFF); tmp.css_border_color(css::bd_right, "transparent"); tmp.css_border_color(css::bd_bottom, "transparent"); tmp.css_border_color(css::bd_left, "transparent"); tiptext.set_pseudo_element(css_class::after, tmp); csslib->add(tiptext); } } string html_tooltip::get_tooltip_body_part() const { string ret; if(!tooltip.empty()) { ret += string(""; ret += webdar_tools_html_display(tooltip); ret += ""; } return ret; } webdar-1.0.0/src/bibliotheque_subconfig.hpp0000644000175000017520000000410114773727246015731 00000000000000/*********************************************************************/ // webdar - a web server and interface program to libdar // Copyright (C) 2013-2025 Denis Corbin // // This file is part of Webdar // // Webdar is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // Webdar is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Webdar. If not, see // //---- // to contact the author: dar.linux@free.fr /*********************************************************************/ #ifndef BIBLIOTHEQUE_SUBCONFIG_HPP #define BIBLIOTHEQUE_SUBCONFIG_HPP #include "my_config.h" // C system header files extern "C" { } // C++ system header files // webdar headers #include "bibliotheque.hpp" /// class bibliotheque_subconfig is an interface (pure virtual class) /// jsoner objects added to a bibliotheque *MAY* implement this interface in addition to jsoner /// when their configuration is subject to depend on other configurations from the same bibliotheque /// they are about to be added to (bibliotheque::add_config) or updated in (bibliotheque::update_config). /// the class arriere_boutique checks whether this interface is implemented or not and managed this /// transparently. class bibliotheque_subconfig { public: /// provide a standard mean for an object to tell its configuration relies on other configuration(s) virtual bibliotheque::using_set get_using_set() const = 0; protected: /// helper routing for objects of inheriting of that class static void subconfig_add_to(bibliotheque::using_set & added_to, const bibliotheque::using_set & to_add); }; #endif webdar-1.0.0/src/archive_compare.cpp0000644000175000017520000000607715030770717014342 00000000000000/*********************************************************************/ // webdar - a web server and interface program to libdar // Copyright (C) 2013-2025 Denis Corbin // // This file is part of Webdar // // Webdar is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // Webdar is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Webdar. If not, see // //---- // to contact the author: dar.linux@free.fr /*********************************************************************/ // C system header files #include "my_config.h" extern "C" { } // C++ system header files // webdar headers #include "tokens.hpp" #include "exceptions.hpp" // #include "archive_compare.hpp" using namespace std; archive_compare::archive_compare(): param(nullptr) { #ifdef LIBTHREADAR_STACK_FEATURE set_stack_size(DEFAULT_STACK_SIZE); #endif } void archive_compare::inherited_run() { try { // we create a local libdar::archive // it will be destroyed exiting this try/catch block if(!ui && ! ui->get_user_interaction()) throw WEBDAR_BUG; ui->clear(); ui->auto_hide(false, false); if(param == nullptr) throw WEBDAR_BUG; libdar::path archpath(param->get_archive_path(), true); string basename(param->get_archive_basename()); libdar::path fs_root(param->get_fs_root(), true); libdar::archive_options_read read_opt(param->get_read_options(ui)); libdar::archive_options_diff diff_opt(param->get_comparison_options()); libdar::statistics* progressive_report = ui->get_statistics().get_libdar_statistics(); cancellation_checkpoint(); libdar::archive arch(ui->get_user_interaction(), archpath, basename, EXTENSION, read_opt); // if no exception has been raised, the object // has been created so we can compare // restting counters and logs ui->clear(); ui->get_statistics().clear_labels(); ui->get_statistics().set_treated_label("item(s) identical"); ui->get_statistics().set_errored_label("item(s) do not match those on file system"); ui->get_statistics().set_ignored_label("item(s) ignored (excluded by filters)"); ui->get_statistics().set_total_label("inode(s) considered"); cancellation_checkpoint(); libdar::statistics final = arch.op_diff(fs_root, diff_opt, progressive_report); } catch(libdar::Egeneric & e) { // converting libdar exceptions to exception_libcall // used within webdar throw exception_libcall(e); } } void archive_compare::signaled_inherited_cancel() { pthread_t libdar_tid; libdar::thread_cancellation th; if(is_running(libdar_tid)) th.cancel(libdar_tid, true, 0); } webdar-1.0.0/src/disconnected_page.hpp0000644000175000017520000000413314775733770014662 00000000000000/*********************************************************************/ // webdar - a web server and interface program to libdar // Copyright (C) 2013-2025 Denis Corbin // // This file is part of Webdar // // Webdar is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // Webdar is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Webdar. If not, see // //---- // to contact the author: dar.linux@free.fr /*********************************************************************/ #ifndef DISCONNECTED_PAGE_HPP #define DISCONNECTED_PAGE_HPP // C system header files #include "my_config.h" extern "C" { } // C++ system header files #include // webdar headers #include "responder.hpp" #include "html_page.hpp" #include "html_text.hpp" /// html component used for the user to define a has algorithm class disconnected_page : public responder { public: static const std::string changed; disconnected_page(); disconnected_page(const disconnected_page & ref) = delete; disconnected_page(disconnected_page && ref) noexcept = delete; disconnected_page & operator = (const disconnected_page & ref) = delete; disconnected_page & operator = (disconnected_page && ref) noexcept = delete; ~disconnected_page() = default; /// wether to redirect to the uri with trimmed path void set_redirect(bool mode) { redir = mode; }; /// inherited from responder virtual answer give_answer(const request & req) override; protected: /// inherited from responder virtual void prefix_has_changed() override; private: bool redir; html_page page; html_text msg; }; #endif webdar-1.0.0/src/html_over_guichet.hpp0000644000175000017520000001011315044137331014703 00000000000000/*********************************************************************/ // webdar - a web server and interface program to libdar // Copyright (C) 2013-2025 Denis Corbin // // This file is part of Webdar // // Webdar is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // Webdar is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Webdar. If not, see // //---- // to contact the author: dar.linux@free.fr /*********************************************************************/ #ifndef HTML_OVER_GUICHET_HPP #define HTML_OVER_GUICHET_HPP #include "my_config.h" // C system header files extern "C" { } // C++ system header files // webdar headers #include "body_builder.hpp" #include "html_mask.hpp" #include "jsoner.hpp" #include "bibliotheque_subconfig.hpp" #include "guichet.hpp" #include "events.hpp" #include "actor.hpp" /// class html_over_guichet is used to insert configuration from a bibliotheque in-place of a subconfiguration /// this allows configuration in a bibliotheque to rely on some other configurations from the same bibliotheque store. /// It is used for file and mask filtering mainly. class html_over_guichet : public body_builder, public html_mask, public jsoner, public bibliotheque_subconfig, public actor, public events { public: static const std::string changed; /// constructor html_over_guichet(); html_over_guichet(const html_over_guichet & ref) = delete; html_over_guichet(html_over_guichet && ref) noexcept = delete; html_over_guichet & operator = (const html_over_guichet & ref) = delete; html_over_guichet & operator = (html_over_guichet && ref) noexcept = delete; ~html_over_guichet() = default; /// mandatory call to provide the object to adopt and use to load/save json and get mask configurations /// \param[in] ptr pointer to a bibliotheque where from to fetch configurations /// \param[in] to_give object of the type corresponding to the category be given to this html_over_guichet /// \param[in] cat category in which to look for named in the bibliotheque /// \param[in] changed_event if not an empty string lead the over_guichet object to record itself on the to_give /// pointed-to object for the provided changed_event, upon which it will trigger its own changed event up change /// of the to_give object /// \note to_give must also be a jsoner and a html_mask, it pass under the managment responsibility of the /// html_over_guichet object. void set_child(const std::shared_ptr & ptr, std::unique_ptr & to_give, bibliotheque::category cat, const std::string & changed_event); /// inherited from html_mask virtual std::unique_ptr get_mask() const override; /// inherited from html_mask virtual bool is_relative() const override; /// inherited_from jsoner virtual void load_json(const json & source) override; /// inherited_from jsoner virtual json save_json() const override; /// inherited_from jsoner virtual void clear_json() override; /// inherited from bibliotheque_subconfig virtual bibliotheque::using_set get_using_set() const override; /// inherited from actor parent class virtual void on_event(const std::string & event_name) override; protected: /// inherited from body_builder virtual std::string inherited_get_body_part(const chemin & path, const request & req) override; private: std::string child_event; ///< used for sanity check in on_event() guichet wicket; std::shared_ptr inner; void check_inner() const { if(!inner) throw WEBDAR_BUG; }; }; #endif webdar-1.0.0/src/html_form_fieldset.hpp0000644000175000017520000000642515035257656015072 00000000000000/*********************************************************************/ // webdar - a web server and interface program to libdar // Copyright (C) 2013-2025 Denis Corbin // // This file is part of Webdar // // Webdar is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // Webdar is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Webdar. If not, see // //---- // to contact the author: dar.linux@free.fr /*********************************************************************/ #ifndef HTML_FORM_FIELDSET_HPP #define HTML_FORM_FIELDSET_HPP // C system header files #include "my_config.h" extern "C" { } // C++ system header files // webdar headers #include "body_builder.hpp" #include "html_legend.hpp" /// class html_form_fieldset implements HTML fieldset feature /// it is expected to be adopted by an html_form and to /// adopt itself some html_form_field objects like html_form_input /// html_comparison_field, html_form_radio, html_datetime /// Visually an html_form_fieldset object surrounds the objects /// it has adopted by a line and show a title on top, which is /// the argument provided to its constructor (the label) class html_form_fieldset : public body_builder { public: html_form_fieldset(const std::string & label):legend(label) { adopt(&legend); }; html_form_fieldset(const html_form_fieldset & ref) = default; html_form_fieldset(html_form_fieldset && ref) noexcept = delete; html_form_fieldset & operator = (const html_form_fieldset & ref) = default; html_form_fieldset & operator = (html_form_fieldset && ref) noexcept = delete; ~html_form_fieldset() = default; void change_label(const std::string & label) { legend.change_label(label); }; const std::string get_label() const { return legend.get_label(); }; /// css is only applied css to the title of the form fieldset void add_label_css_class(const std::string & name) { legend.add_css_class(name); }; /// css is only applied css to the title of the form fieldset void remove_label_css_class(const std::string & name) { legend.remove_css_class(name); }; /// clear and destroy previously added objects void clear() { orphan_all_children(); adopt(&legend); }; /// inherited from body_builder virtual void bind_to_anchor(const std::string & val) override { update_anchor(val); }; /// surfacing the tooltip feature of html_legend void set_tooltip(const std::string & val) { legend.set_tooltip(val); }; protected: /// inherited from body_builder virtual std::string inherited_get_body_part(const chemin & path, const request & req) override; /// inherited from body_builder virtual void has_adopted(body_builder *obj) override; private: html_legend legend; std::string bounded_anchor; void update_anchor(const std::string & val); }; #endif webdar-1.0.0/src/html_form_mask_file.cpp0000644000175000017520000001341615036445057015211 00000000000000/*********************************************************************/ // webdar - a web server and interface program to libdar // Copyright (C) 2013-2025 Denis Corbin // // This file is part of Webdar // // Webdar is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // Webdar is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Webdar. If not, see // //---- // to contact the author: dar.linux@free.fr /*********************************************************************/ // C system header files #include "my_config.h" extern "C" { } // C++ system header files #include #include // webdar headers #include "webdar_css_style.hpp" #include "tooltip_messages.hpp" // #include "html_form_mask_file.hpp" using namespace std; const string html_form_mask_file::changed = "hfmf_changed"; html_form_mask_file::html_form_mask_file(const shared_ptr & fs_root): filename("File name", "/", // see clear() for defaults "", webdar_css_style::width_100vw, "Select a listing text file..."), exclude_checkbox("Exclude listed files", html_form_input::check, "", // see clear() for defaults "", ""), casesensit("Case sensitivivity", html_form_input::check, "1", // see clear() for defaults "", ""), fs("File listing"), prefix(fs_root), ignore_events(false) { // adoption tree fs.adopt(&filename); fs.adopt(&exclude_checkbox); fs.adopt(&casesensit); adopt(&fs); fs.change_label(tell_action()); // events filename.record_actor_on_event(this, html_form_input_file::changed_event); exclude_checkbox.record_actor_on_event(this, html_form_input::changed); casesensit.record_actor_on_event(this, html_form_input::changed); register_name(changed); // css fs.add_label_css_class(webdar_css_style::text_bold); // tooltip filename.set_tooltip(TOOLTIP_HFMF_FILENAME); exclude_checkbox.set_tooltip(TOOLTIP_HFMF_EXCLUDE); casesensit.set_tooltip(TOOLTIP_HFMF_CASESENSIT); clear(); } void html_form_mask_file::clear() { ignore_events = true; try { filename.set_value("/"); exclude_checkbox.set_value_as_bool(false); casesensit.set_value_as_bool(true); } catch(...) { ignore_events = false; throw; } ignore_events = false; on_event(html_form_input::changed); } unique_ptr html_form_mask_file::get_mask() const { if(!prefix) throw WEBDAR_BUG; deque empty_list; unique_ptr tmp(new (nothrow) libdar::mask_list( filename.get_value(), casesensit.get_value_as_bool(), *prefix, ! exclude_checkbox.get_value_as_bool(), empty_list)); if(! tmp) throw exception_memory(); if(exclude_checkbox.get_value_as_bool()) { tmp.reset(new (nothrow) libdar::not_mask(*tmp)); if(! tmp) throw exception_memory(); } return tmp; } void html_form_mask_file::load_json(const json & source) { try { unsigned int version; string class_id; json config = unwrap_config_from_json_header(source, version, class_id); if(class_id != myclass_id) throw exception_range(libdar::tools_printf("Unexpected class_id in json data, found %s while expecting %s", class_id.c_str(), myclass_id)); if(version > format_version) throw exception_range(libdar::tools_printf("Json format version too hight for %s, upgrade your webdar software", myclass_id)); ignore_events = true; try { filename.set_value(config.at(jlabel_filename)); exclude_checkbox.set_value_as_bool(config.at(jlabel_exclude)); casesensit.set_value_as_bool(config.at(jlabel_casesensit)); } catch(...) { ignore_events = false; throw; } ignore_events = false; on_event(html_form_input::changed); } catch(json::exception & e) { throw exception_json("Error loading html_form_mask_expression config", e); } } json html_form_mask_file::save_json() const { json ret; ret[jlabel_filename] = filename.get_value(); ret[jlabel_exclude] = exclude_checkbox.get_value_as_bool(); ret[jlabel_casesensit] = casesensit.get_value_as_bool(); return wrap_config_with_json_header(format_version, myclass_id, ret); } void html_form_mask_file::on_event(const string & event_name) { if(ignore_events) return; if(event_name == html_form_input_file::changed_event || event_name == html_form_input::changed) { fs.change_label(tell_action()); } else throw WEBDAR_BUG; act(changed); } string html_form_mask_file::inherited_get_body_part(const chemin & path, const request & req) { return get_body_part_from_all_children(path, req); } void html_form_mask_file::new_css_library_available() { unique_ptr & csslib = lookup_css_library(); if(!csslib) throw WEBDAR_BUG; webdar_css_style::update_library(*csslib); } string html_form_mask_file::tell_action() const { string ret = "path "; if(exclude_checkbox.get_value_as_bool()) ret += "is not listed "; else ret += "is listed "; if(casesensit.get_value_as_bool()) ret += "(case sensitive) "; else ret += "(case INsensitive) "; ret += "in file named \"" + filename.get_value() + "\" "; return ret; } webdar-1.0.0/src/html_form_input_unit.cpp0000644000175000017520000002024015031200420015420 00000000000000/*********************************************************************/ // webdar - a web server and interface program to libdar // Copyright (C) 2013-2025 Denis Corbin // // This file is part of Webdar // // Webdar is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // Webdar is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Webdar. If not, see // //---- // to contact the author: dar.linux@free.fr /*********************************************************************/ // C system header files #include "my_config.h" extern "C" { } // C++ system header files #include // webdar headers #include "webdar_tools.hpp" #include "exceptions.hpp" #include "webdar_css_style.hpp" // #include "html_form_input_unit.hpp" using namespace std; const string html_form_input_unit::changed = "html_form_input_unit_changed"; const string html_form_input_unit::css_input = "hfiu_input"; const string html_form_input_unit::css_unit = "hfiu_unit"; html_form_input_unit::html_form_input_unit(const string & label, const libdar::infinint & initial_value, const string & size): ignore_events(false), no_act(false), field(label, html_form_input::number, "", // we will set the field value below "", ""), val(initial_value), min(0), max(0), modif_change("") { // components configuration field.set_no_CR(); set_field_val(); field.set_min_only(0); if(initial_value.is_zero()) unit_box.set_unit_and_ratio_indexes(1, 1); // SI and K -> kio by default when zero is given // else we use the biggest possible unit // adoption tree adopt(&field); adopt(&unit_box); // events register_name(changed); field.record_actor_on_event(this, html_form_input::changed); unit_box.record_actor_on_event(this, html_size_unit::changed); // updating the value representation set_value_to_largest_unit(); // css field.add_css_class(css_input); unit_box.add_css_class(css_unit); } void html_form_input_unit::set_range(const libdar::infinint & x_min, const libdar::infinint & x_max) { if(x_max.is_zero()) throw WEBDAR_BUG; if(x_max < x_min) throw WEBDAR_BUG; min = x_min; max = x_max; if(val < min) { set_value_as_infinint(min); set_field_val(); } if(val > max) { set_value_as_infinint(max); set_field_val(); } } void html_form_input_unit::set_min_only(const libdar::infinint & x_min) { min = x_min; max = 0; if(val < min) { set_value_as_infinint(min); set_field_val(); } } void html_form_input_unit::set_max_only(const libdar::infinint & x_max) { min = 0; max = x_max; if(val > max) { set_value_as_infinint(max); set_field_val(); } } void html_form_input_unit::set_value_as_infinint(const libdar::infinint & x_val) { val = x_val; set_value_to_largest_unit(); } void html_form_input_unit::on_event(const string & event_name) { if(ignore_events) return; if(event_name == html_form_input::changed) { val = libdar::infinint(field.get_value_as_int()) * unit_box.get_value(); check_min_max_compliance(); my_act(); } else if(event_name == html_size_unit::changed) { // reduce html_form_input value (and ignore the change event) no_act = true; try { val = libdar::infinint(field.get_value_as_int()) * unit_box.get_value(); check_min_max_compliance(); if(val < min) { val = min; set_field_val(); } if(max != 0 && val > max) { val = max; set_field_val(); } } catch(...) { no_act = false; throw; } no_act = false; my_act(); // acting only once even if we modified or not the "field" field } } void html_form_input_unit::new_css_library_available() { unique_ptr & csslib = lookup_css_library(); if(!csslib) throw WEBDAR_BUG; webdar_css_style::update_library(*csslib); if(! csslib->class_exists(css_input)) { css tmp; tmp.css_width("calc(100% - 8em)", false); tmp.css_float(css::fl_left); csslib->add(css_input, tmp); tmp.clear(); tmp.css_padding_top("0.2em"); csslib->add(css_unit, tmp); } } void html_form_input_unit::set_change_event_name(const string & name) { if(name == "") throw WEBDAR_BUG; // we expect non-empty string as valid event name if(modif_change.empty()) modif_change = changed; // leveraging new featur from events class // all registered actors are kept: rename_name(modif_change, name); modif_change = name; } void html_form_input_unit::set_field_val() { field.set_value(libdar::deci(reduce_to_unit(val, unit_box.get_value())).human()); } void html_form_input_unit::set_value_to_largest_unit() { unsigned int best_base_index = unit_box.get_current_base_index(); unsigned int best_power_index = 0; libdar::infinint reduced_val = val; signed int base_index = unit_box.get_max_base_unit_index(); do { unsigned int max_power = unit_box.get_max_power_for_base_unit(base_index); libdar::infinint base_unit = unit_box.get_base_unit_value(base_index); bool stop = false; unsigned int power = 0; libdar::infinint factor = 1; // to avoid recomputing power of base_unit at reach round in the // while loop that follows: while(!stop && val >= factor && power <= max_power) { if((val % factor).is_zero()) // val is an integer number of factor { libdar::infinint newval = val / factor; if(newval < reduced_val) // this is the best unit reduction so far { reduced_val = newval; best_power_index = power; best_base_index = base_index; } } else stop = true; // val is not divisible by factor (a power of base unit), // thus is is not divisible by further powers of the base unit. if(!stop) { ++power; factor *= base_unit; } } --base_index; } while(base_index >= 0); // we dont change the value of the field, just its representation // thus we must not trigger any change event, though this does hopefully // not provent the body_builder change to be propagated from the adopted // objects for the web output to be refreshed accordingly to the new // representation: ignore_events = true; try { unit_box.set_unit_and_ratio_indexes(best_base_index, best_power_index); } catch(...) { ignore_events = false; throw; } ignore_events = false; // we remind the current val value reduced_val = val; // this will recompute val according to the new unit/base // because of the event generated by field, which we now // take care of: set_field_val(); // checking whether the resulting val stays the same as it ought to be if(val != reduced_val) throw WEBDAR_BUG; } void html_form_input_unit::check_min_max_compliance() { bool keep_red = false; if(val < min) { if(field.box_get_css_class().empty()) { field.box_set_css_class(webdar_css_style::red_border); throw exception_range(libdar::tools_printf("Value (%i bytes) below minimum (%i bytes)", &val, &min)); } else keep_red = true; } if(max > 0 && val > max) { if(field.box_get_css_class().empty()) { field.box_set_css_class(webdar_css_style::red_border); throw exception_range(libdar::tools_printf("Value (%i bytes) above minimum (%i bytes)", &val, &max)); } else keep_red = true; } if(! field.box_get_css_class().empty() && ! keep_red) field.box_set_css_class(""); } libdar::infinint html_form_input_unit::reduce_to_unit(const libdar::infinint & val, const libdar::infinint & unit) { return val / unit; } libdar::infinint html_form_input_unit::reduce_to_unit_above(const libdar::infinint & val, const libdar::infinint & unit) { libdar::infinint target = val / unit; while(target * unit < val) ++target; return target; } webdar-1.0.0/src/html_slicing.hpp0000644000175000017520000001075714773727246013710 00000000000000/*********************************************************************/ // webdar - a web server and interface program to libdar // Copyright (C) 2013-2025 Denis Corbin // // This file is part of Webdar // // Webdar is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // Webdar is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Webdar. If not, see // //---- // to contact the author: dar.linux@free.fr /*********************************************************************/ #ifndef HTML_SLICING_HPP #define HTML_SLICING_HPP // C system header files #include "my_config.h" extern "C" { } // C++ system header files #include #include // webdar headers #include "body_builder.hpp" #include "actor.hpp" #include "events.hpp" #include "html_form.hpp" #include "html_form_fieldset.hpp" #include "html_form_input.hpp" #include "html_form_input_unit.hpp" #include "jsoner.hpp" /// html component used for the user to define a has algorithm class html_slicing : public body_builder, public actor, public events, public jsoner { public: static const std::string changed; html_slicing(); html_slicing(const html_slicing & ref) = delete; html_slicing(html_slicing && ref) noexcept = delete; html_slicing & operator = (const html_slicing & ref) = delete; html_slicing & operator = (html_slicing && ref) noexcept = delete; ~html_slicing() = default; void set_slicing(const libdar::infinint & x_slice_size, const libdar::infinint & x_first_slice_size); void set_permission(const std::string & perm); void set_user_ownership(const std::string & username); void set_group_ownership(const std::string & groupname); void set_min_digits(const libdar::infinint & val); void get_slicing(libdar::infinint & x_slice_size, libdar::infinint & x_first_slice_size) const; libdar::infinint get_min_digits() const; std::string get_permission() const; std::string get_user_ownership() const; std::string get_group_ownership() const; /// inherited from jsoner virtual void load_json(const json & source) override; /// inherited from jsoner virtual json save_json() const override; /// inherited from jsoner virtual void clear_json() override; /// inherited from class actor virtual void on_event(const std::string & event_name) override; /// set the object to webdar defaults void set_to_webdar_defaults(); /// inherited from body_builder virtual void bind_to_anchor(const std::string & val) override { form_slicing.bind_to_anchor(val); }; protected: /// inherited from body_builder virtual std::string inherited_get_body_part(const chemin & path, const request & req) override; /// inherited from body_builder virtual void css_classes_have_changed() override; /// inherited from body_builder virtual void new_css_library_available() override; private: html_form form_slicing; html_form_fieldset slicing_fs; html_form_input slicing; html_form_input_unit slice_size; html_form_input different_first_slice; html_form_input_unit first_slice_size; html_form_input slice_permission; html_form_input slice_user_ownership; html_form_input slice_group_ownership; html_form_input slice_min_digits; static constexpr const unsigned int format_version = 1; static constexpr const char* myclass_id = "html_slicing"; static constexpr const char* jlabel_slicing = "slicing"; // bool static constexpr const char* jlabel_diff_first = "specific-first-slice"; // bool static constexpr const char* jlabel_slice_size = "slice-size"; // infinint static constexpr const char* jlabel_first_slice_size = "first-slice-size"; // infinint static constexpr const char* jlabel_slice_permission = "permission"; // string static constexpr const char* jlabel_user_owner = "user-ownership"; // string static constexpr const char* jlabel_group_owner = "group-ownership"; // string static constexpr const char* jlabel_min_digits = "min-digits"; // num }; #endif webdar-1.0.0/src/arriere_boutique.hpp0000644000175000017520000004013215044153431014545 00000000000000/*********************************************************************/ // webdar - a web server and interface program to libdar // Copyright (C) 2013-2025 Denis Corbin // // This file is part of Webdar // // Webdar is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // Webdar is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Webdar. If not, see // //---- // to contact the author: dar.linux@free.fr /*********************************************************************/ #ifndef arriere_boutique_HPP #define arriere_boutique_HPP // C system header files #include "my_config.h" extern "C" { } // C++ system header files #include #include #include // webdar headers #include "body_builder.hpp" #include "actor.hpp" #include "events.hpp" #include "bibliotheque.hpp" #include "html_text.hpp" #include "html_form.hpp" #include "html_form_fieldset.hpp" #include "html_form_input.hpp" #include "html_form_radio.hpp" #include "html_double_button.hpp" #include "jsoner.hpp" #include "bibliotheque_subconfig.hpp" #include "webdar_css_style.hpp" #include "html_div.hpp" #include "tokens.hpp" #include "html_yes_no_box.hpp" #include "tooltip_messages.hpp" /// class arriere_boutique provides mean to add/load a given component type to/from a bibliotheque object /// this template receive as type the class to manipulate, which must: /// - inherit from a jsoner /// - inherit from body_builder /// - inherit from events and provide a event name triggered upon component changes /// - in option, it must inherit from bibliotheque_subconfig if its configuration depends on other configuration parts /// /** \verbatim +----+ [optional ] | +-----+ | +----------------------------------------------------+ | | selectable | | | | | | of available | | +-------------------------------------------------------------+ | | components | | +-----------------------------------------------------+| | for that type| | |+-----------------------------------------------------+|| | | | || configuration name ||| | | | |+----------------------------------------------------------------+|| | | | +----------------------------------------------------+| | | | | +--------------+ | +---+ +-----------------+ | delete loaded cf| +-----------------+ \endverbatim **/ template class arriere_boutique: public body_builder, public actor, public events { public: static const std::string changed; arriere_boutique(const std::shared_ptr & ptr, ///< bibliotheque object to read/save json config to bibliotheque::category cat, ///< category to use in the ptr pointed to bibliotheque std::unique_ptr & obj, ///< the child object to load and save from json data const std::string ch_event_name, ///< event name on obj triggered upon object changes bool add_form_around ///< whether to add a html_form around obj ); arriere_boutique(const arriere_boutique & ref) = delete; arriere_boutique(arriere_boutique && ref) noexcept = delete; arriere_boutique & operator = (const arriere_boutique & ref) = delete; arriere_boutique & operator = (arriere_boutique && ref) noexcept = delete; ~arriere_boutique() = default; /// inherited from class actor virtual void on_event(const std::string & event_name) override; /// get access to the wrapped object const jsoner* get_wrapped() const { if(!wrapped) throw WEBDAR_BUG; return wrapped.get(); }; protected: /// inherited from class body_builder virtual std::string inherited_get_body_part(const chemin & path, const request & req) override; /// inherited from class body_builder virtual void new_css_library_available() override; private: static constexpr const char* event_delete = "delete_conf"; static constexpr const char* event_clear = "clear_cur_conf"; static constexpr const char* css_float = "arriere_boutique_float"; static constexpr const char* css_warn = "arriere_boutique_warn"; static constexpr const char* css_margin_above = "arriere_boutique_margin"; std::string currently_loaded; std::shared_ptr biblio; bibliotheque::category categ; std::string change_event_name; bool ignore_events; std::unique_ptr wrapped; jsoner* wrapped_jsoner; body_builder* wrapped_body_builder; events* wrapped_events; bibliotheque_subconfig* wrapped_subconfig; html_text warning_message; html_text need_saving; html_form_fieldset config_fs; html_form config_form; html_form_input config_name; html_form listing_form; html_form_fieldset listing_fs; html_form_radio listing; html_double_button delete_selected; html_double_button clear_cur_config; html_div floteur; html_yes_no_box confirm; html_form_fieldset around_fs; html_form around_form; void load_listing(); ///< fills the listing from existing config in biblio and triggers html_form_radio::changed event void set_warning(const std::string & wm); void clear_warning() { warning_message.set_visible(false); }; void silently_update_config_name(const std::string & val); }; template const std::string arriere_boutique::changed = "ab_changed"; template arriere_boutique::arriere_boutique(const std::shared_ptr & ptr, bibliotheque::category cat, std::unique_ptr & obj, const std::string ch_event_name, bool add_form_around): currently_loaded(""), categ(cat), config_form("Save/Save as"), config_fs(""), config_name("Configuration name", html_form_input::text, "", "", webdar_css_style::width_100vw), listing_form("Load selected"), listing_fs("Available configurations"), delete_selected("Delete loaded config", event_delete), clear_cur_config("Clear", event_clear), change_event_name(ch_event_name), around_fs(""), around_form("Update"), ignore_events(false) { // non html field settup biblio = ptr; if(!biblio) throw WEBDAR_BUG; wrapped = std::move(obj); if(wrapped.get() == nullptr) throw WEBDAR_BUG; wrapped_jsoner = dynamic_cast(wrapped.get()); if(wrapped_jsoner == nullptr) throw WEBDAR_BUG; // should be object inheriting from class jsoner wrapped_body_builder = dynamic_cast(wrapped.get()); if(wrapped_body_builder == nullptr) throw WEBDAR_BUG; // should be object inheriting from class body_builder wrapped_events = dynamic_cast(wrapped.get()); if(wrapped_events == nullptr) throw WEBDAR_BUG; // shold also be object inheriting from class events wrapped_subconfig = dynamic_cast(wrapped.get()); // it is ok if wrapped_subconfig is nullptr, wrapped may not implement // the bibliotheque_subconfig interface if(change_event_name == html_form_input::changed) throw WEBDAR_BUG; // event name collides with our own components if(change_event_name == event_delete) throw WEBDAR_BUG; // event name collides with our own components if(change_event_name == html_form_radio::changed) throw WEBDAR_BUG; // event name collides with our own components if(change_event_name == bibliotheque::changed(categ)) throw WEBDAR_BUG; // event name collides with our own components if(change_event_name == html_form::changed) throw WEBDAR_BUG; // event name collides with our own components // html components setup clear_warning(); load_listing(); need_saving.clear(); need_saving.add_text(0, "configuration not saved"); need_saving.set_visible(false); // adoption tree listing_fs.adopt(&listing); listing_form.adopt(&listing_fs); floteur.adopt(&listing_form); floteur.adopt(&delete_selected); floteur.adopt(&clear_cur_config); adopt(&floteur); adopt(&warning_message); around_fs.adopt(wrapped_body_builder); if(add_form_around) { around_form.adopt(&around_fs); adopt(&around_form); } else adopt(&around_fs); config_fs.adopt(&config_name); config_fs.adopt(&need_saving); config_form.adopt(&config_fs); adopt(&config_form); adopt(&confirm); // events and actors register_name(changed); wrapped_events->record_actor_on_event(this, change_event_name); config_form.record_actor_on_event(this, html_form::changed); delete_selected.record_actor_on_event(this, event_delete); clear_cur_config.record_actor_on_event(this, event_clear); confirm.record_actor_on_event(this, html_yes_no_box::answer_yes); listing.record_actor_on_event(this, html_form_radio::changed); ptr->record_actor_on_event(this, bibliotheque::changed(categ)); // css webdar_css_style::normal_button(delete_selected); delete_selected.add_css_class(webdar_css_style::spacing_vertical); webdar_css_style::normal_button(clear_cur_config); clear_cur_config.add_css_class(webdar_css_style::spacing_vertical); floteur.add_css_class(css_float); warning_message.add_css_class(css_warn); need_saving.add_css_class(css_warn); config_form.add_css_class(css_margin_above); // tooltips config_name.set_tooltip(TOOLTIP_AB_CONFIG_NAME); listing_fs.set_tooltip(TOOLTIP_AB_SELECT); } template void arriere_boutique::on_event(const std::string & event_name) { if(ignore_events) return; if(!biblio) throw WEBDAR_BUG; if(event_name == change_event_name) { // the hosted object configuration has been changed by the user need_saving.set_visible(true); clear_warning(); act(changed); } else if(event_name == html_form::changed) { // save as form has changed (-> asked to save as) need_saving.set_visible(true); if(config_name.get_value().empty()) set_warning("Cannot save a configuration without a name"); else { // we use a config temporary variable here // to be sure the save_json() method is called // before the get_using_set() one, as the first // may have impact on the second, some components // making some cleanup (forgetting the unselected // alternatives) within save_json() json config = wrapped_jsoner->save_json(); try { if(config_name.get_value() != currently_loaded) { currently_loaded = config_name.get_value(); if(wrapped_subconfig == nullptr) biblio->add_config(categ, config_name.get_value(), config); else biblio->add_config(categ, config_name.get_value(), config, wrapped_subconfig->get_using_set()); } else { if(wrapped_subconfig == nullptr) biblio->update_config(categ, currently_loaded, config); else biblio->update_config(categ, currently_loaded, config, wrapped_subconfig->get_using_set()); } // these previous alternatives all trigger bibliotheque::changed(categ) event need_saving.set_visible(false); clear_warning(); } catch(exception_range & e) { set_warning(libdar::tools_printf("Failed saving configuration as %s: %s", config_name.get_value().c_str(), e.get_message().c_str())); } } } else if(event_name == event_delete) { // user asked to delete the selected configuration // asking confirmation confirm.ask_question("Are you sure to delete the loaded configuration?", false); } else if(event_name == html_yes_no_box::answer_yes) { // user confirm configuration deletion if(listing.is_selected()) { std::string todelete = listing.get_selected_id(); silently_update_config_name(currently_loaded); biblio->delete_config(categ, todelete); // this triggers bibliotheque::changed(categ) event currently_loaded = ""; need_saving.set_visible(true); clear_warning(); } else set_warning("Select and load first the configuration to be deleted"); } else if(event_name == event_clear) { currently_loaded = ""; config_name.set_value(""); wrapped_jsoner->clear_json(); need_saving.set_visible(true); listing.unset_selected(); clear_warning(); } else if(event_name == html_form_radio::changed) { // user selected a configuration to load ignore_events = true; try { if(listing.is_selected()) { currently_loaded = listing.get_selected_id(); silently_update_config_name(currently_loaded); wrapped_jsoner->load_json(biblio->fetch_config(categ, currently_loaded)); need_saving.set_visible(false); clear_warning(); } else set_warning("Select first the configuration to load"); } catch(...) { ignore_events = false; throw; } ignore_events = false; act(changed); } else if(event_name == bibliotheque::changed(categ)) { ignore_events = true; try { load_listing(); // repositionning the selected object to the currently loaded config if any if(!currently_loaded.empty()) { if(biblio->has_config(categ, currently_loaded)) listing.set_selected_id(currently_loaded); else { currently_loaded = ""; silently_update_config_name(currently_loaded); } } } catch(...) { ignore_events = false; throw; } ignore_events = false; } else throw WEBDAR_BUG; } template std::string arriere_boutique::inherited_get_body_part(const chemin & path, const request & req) { return get_body_part_from_all_children(path, req); } template void arriere_boutique::load_listing() { std::deque content = biblio->listing(categ); listing.clear(); for(std::deque::iterator it = content.begin(); it != content.end(); ++it) listing.add_choice(*it, *it); listing.unset_selected(); } template void arriere_boutique::new_css_library_available() { css tmp; std::unique_ptr & csslib = lookup_css_library(); if(!csslib) throw WEBDAR_BUG; if(!csslib->class_exists(css_float)) { tmp.clear(); tmp.css_border_width(css::bd_all, css::bd_medium); tmp.css_float(css::fl_right); tmp.css_margin_left("1em"); csslib->add(css_float, tmp); } if(!csslib->class_exists(css_warn)) { tmp.clear(); tmp.css_color(RED); tmp.css_font_weight_bold(); tmp.css_text_shadow("0.1em", "0.1em", "0.1em", "#888888"); csslib->add(css_warn, tmp); } if(!csslib->class_exists(css_margin_above)) { tmp.clear(); tmp.css_margin_top("2em"); csslib->add(css_margin_above, tmp); } webdar_css_style::update_library(*csslib); } template void arriere_boutique::set_warning(const std::string & wm) { warning_message.clear(); warning_message.add_text(0, wm); warning_message.set_visible(true); } template void arriere_boutique::silently_update_config_name(const std::string & val) { bool original_status = ignore_events; ignore_events = true; try { config_name.set_value(val); // without ignore_events, this would // trigger the html_form_input::changed event // leading to save the configuration } catch(...) { ignore_events = original_status; throw; } ignore_events = original_status; } #endif webdar-1.0.0/src/html_libdar_running_page.hpp0000644000175000017520000000654314773727246016247 00000000000000/*********************************************************************/ // webdar - a web server and interface program to libdar // Copyright (C) 2013-2025 Denis Corbin // // This file is part of Webdar // // Webdar is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // Webdar is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Webdar. If not, see // //---- // to contact the author: dar.linux@free.fr /*********************************************************************/ #ifndef HTML_LIBDAR_RUNNING_PAGE_HPP #define HTML_LIBDAR_RUNNING_PAGE_HPP // C system header files #include "my_config.h" extern "C" { } // C++ system header files // webdar headers #include "html_page.hpp" #include "events.hpp" #include "actor.hpp" #include "html_web_user_interaction.hpp" /// html_libdar_running_page wraps up an html_web_user_interaction in a html_page /// also handle page title and for that need to know the session name class html_libdar_running_page : public html_page, public events, public actor { public: // this class generates the following events: static const std::string libdar_has_finished; ///< libdar execution has ended and user has acknoledged it // constructor html_libdar_running_page(); html_libdar_running_page(const html_libdar_running_page & ref) = delete; html_libdar_running_page(html_libdar_running_page && ref) noexcept = delete; html_libdar_running_page & operator = (const html_libdar_running_page & ref) = delete; html_libdar_running_page & operator = (html_libdar_running_page && ref) noexcept = delete; ~html_libdar_running_page() = default; /// inherited from actor virtual void on_event(const std::string & event_name) override; /// defines the name of the session void set_session_name(const std::string & name) { sessname = name; set_title(webdar_tools_get_title(sessname, "Libdar is running")); }; /// propagate request to web_ui std::shared_ptr get_html_user_interaction() { return web_ui; }; /// propagate request to web_ui void run_and_control_thread(libthreadar::thread* arg) { web_ui->run_and_control_thread(arg); }; /// propagate request to web_ui void join_controlled_thread() { web_ui->join_controlled_thread(); }; /// whether a libdar thread is running under "this" management bool is_libdar_running() const { return web_ui->is_libdar_running(); }; /// whether libdar thread has been aborted (to be checked by the caller upon libdar_has_finished event) bool has_libdar_been_aborted() const { return web_ui->has_libdar_been_aborted(); }; protected: /// inherited from body_builder virtual std::string inherited_get_body_part(const chemin & path, const request & req) override; private: std::string sessname; std::shared_ptr web_ui; bool enable_refresh; ///< whether page refresh should be set }; #endif webdar-1.0.0/src/reference.cpp0000644000175000017520000000627614773727246013166 00000000000000/*********************************************************************/ // webdar - a web server and interface program to libdar // Copyright (C) 2013-2025 Denis Corbin // // This file is part of Webdar // // Webdar is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // Webdar is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Webdar. If not, see // //---- // to contact the author: dar.linux@free.fr /*********************************************************************/ // C system header files #include "my_config.h" extern "C" { } // C++ system header files // webdar headers #include "exceptions.hpp" // #include "reference.hpp" using namespace std; reference::reference(reference && ref) noexcept(false) { if(ref.is_empty()) reset(); else throw WEBDAR_BUG; // cannot copy-construct an object already linked with another one } reference & reference::operator = (const reference & ref) { if(ref.is_empty()) shut_all_peerings(); else throw WEBDAR_BUG; return *this; } reference & reference::operator = (reference && ref) noexcept(false) { if(ref.is_empty()) shut_all_peerings(); else throw WEBDAR_BUG; return *this; } void reference::peer_with(reference *obj) { if(obj == nullptr) throw WEBDAR_BUG; if(is_peer(obj)) { if(!obj->is_peer(this)) throw WEBDAR_BUG; } else { peers.insert(obj); try { obj->peers.insert(this); } catch(...) { peers.erase(obj); throw; } } } void reference::break_peer_with(reference* obj) { if(obj == nullptr) throw WEBDAR_BUG; if(is_peer(obj)) { try { erase_with_coherence(obj); } catch(...) { obj->erase_with_coherence(this); throw; } obj->erase_with_coherence(this); obj->broken_peering_from(this); } else throw WEBDAR_BUG; } bool reference::read_next_peer(reference * & peer) const { if(next_to_read != peers.end()) { peer = *next_to_read; ++next_to_read; return true; } else return false; } void reference::reset() { peers.clear(); next_to_read = peers.begin(); } void reference::shut_all_peerings() { while(peers.begin() != peers.end()) { if(*(peers.begin()) == nullptr) throw WEBDAR_BUG; break_peer_with(*(peers.begin())); } reset(); } void reference::erase_with_coherence(reference* ptr) { set::iterator it = peers.begin(); if(ptr == nullptr) throw WEBDAR_BUG; while(it != peers.end() && *it != ptr) ++it; if(it == peers.end()) throw WEBDAR_BUG; // asking to erase an non-peered reference object if(it == next_to_read) // erasing the next to read object ++next_to_read; // seeking past the element that we will // erase here: peers.erase(it); } webdar-1.0.0/src/html_mask_form_filename.cpp0000644000175000017520000001416514775734022016056 00000000000000/*********************************************************************/ // webdar - a web server and interface program to libdar // Copyright (C) 2013-2025 Denis Corbin // // This file is part of Webdar // // Webdar is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // Webdar is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Webdar. If not, see // //---- // to contact the author: dar.linux@free.fr /*********************************************************************/ // C system header files #include "my_config.h" extern "C" { } // C++ system header files #include // webdar headers #include "html_over_guichet.hpp" // #include "html_mask_form_filename.hpp" using namespace std; const string html_mask_form_filename::changed = "hmff_changed"; html_mask_form_filename::html_mask_form_filename(const string & subject): form("Update"), sujet(subject) { init(); } html_mask_form_filename::html_mask_form_filename(const html_mask_form_filename & ref): form(ref.form), root(ref.root.get_bool_mode()), sujet(ref.sujet), categ(ref.categ), biblio(ref.biblio) { init(); } void html_mask_form_filename::set_child(const shared_ptr & ptr, bibliotheque::category cat) { biblio = ptr; categ = cat; } unique_ptr html_mask_form_filename::provide_object_of_type(unsigned int num, const string & context, string & changed_event) const { unique_ptr ret; unique_ptr tmp; unique_ptr ovgui; switch(num) { case 0: // title provided in constructor ret.reset(new (nothrow) html_form_mask_expression(sujet)); changed_event = html_form_mask_expression::changed; break; case 1: // "logical combination" tmp.reset(new (nothrow) html_form_mask_bool(html_form_mask_bool::invert_logic(context))); if(!tmp) throw exception_memory(); changed_event = html_form_mask_bool::changed; init_bool_obj(*tmp); ret = std::move(tmp); break; case 2: // "recorded configuration" ret.reset(new (nothrow) html_mask_form_filename(*this)); if(!ret) throw exception_memory(); ovgui.reset(new (nothrow) html_over_guichet()); if(!ovgui) throw exception_memory(); ovgui->set_child(biblio, ret, categ, html_mask_form_filename::changed); if(ret) throw WEBDAR_BUG; // object pointed to by ret // should have been passed to the // object pointed to by ovgui changed_event = html_over_guichet::changed; ret = std::move(ovgui); break; default: if(num < labels.size()) throw WEBDAR_BUG; // problem in html_mask_form_filename? else throw WEBDAR_BUG; // problem in html_form_mask_bool? } if(!ret) throw exception_memory(); return ret; } void html_mask_form_filename::load_json(const json & source) { try { unsigned int version; string class_id; json config = unwrap_config_from_json_header(source, version, class_id); if(class_id != myclass_id) throw exception_range(libdar::tools_printf("Unexpected class_id in json data, found %s while expecting %s", class_id.c_str(), myclass_id)); if(version > format_version) throw exception_range(libdar::tools_printf("Json format version too hight for %s, upgrade your webdar software", myclass_id)); // setting back the bool mode and mask_type selected value root.load_json(config.at(jlabel_bool_config)); } catch(json::exception & e) { throw exception_json("Error loading html_form_mask_bool config", e); } act(changed); } json html_mask_form_filename::save_json() const { json ret; // the 'subjet' is not to be saved, // it depends on the context where // the html_mask_form_filename is used // file filtering, EA filtering, bibliotheque ret[jlabel_bool_config] = root.save_json(); return wrap_config_with_json_header(format_version, myclass_id, ret); } void html_mask_form_filename::clear_json() { root.clear_json(); act(changed); } bibliotheque::using_set html_mask_form_filename::get_using_set() const { return root.get_using_set(); } void html_mask_form_filename::on_event(const string & event_name) { if(event_name == html_form_mask_bool::changed) act(changed); else throw WEBDAR_BUG; } shared_ptr html_mask_form_filename::manually_add_object(const string & type_name) { unsigned int i = 0; while(i < labels.size() && labels[i] != type_name) ++i; if(i < labels.size()) return root.manually_add_object(i); else throw WEBDAR_BUG; // unknown label given as type_name } string html_mask_form_filename::inherited_get_body_part(const chemin & path, const request & req) { return get_body_part_from_all_children(path, req); } void html_mask_form_filename::css_classes_have_changed() { set css_classes = get_css_classes_as_a_set(); form.clear_css_classes(); for(set::iterator it = css_classes.begin(); it != css_classes.end(); ++it) form.add_css_class(*it); } void html_mask_form_filename::init() { labels.clear(); // we use tools_printf to ease future message translation // if in other languages the subject is not at the beginning // but in the middle or at the end of the translated string: labels.push_back(libdar::tools_printf("%S expression", &sujet)); labels.push_back("Logical combination"); labels.push_back("Recorded configuration"); // adoption tree form.adopt(&root); adopt(&form); // events register_name(changed); root.record_actor_on_event(this, html_form_mask_bool::changed); // must be done after event registration above init_bool_obj(root); } webdar-1.0.0/src/html_menu.hpp0000644000175000017520000001215514773727247013217 00000000000000/*********************************************************************/ // webdar - a web server and interface program to libdar // Copyright (C) 2013-2025 Denis Corbin // // This file is part of Webdar // // Webdar is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // Webdar is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Webdar. If not, see // //---- // to contact the author: dar.linux@free.fr /*********************************************************************/ #ifndef HTML_MENU_HPP #define HTML_MENU_HPP // C system header files #include "my_config.h" extern "C" { } // C++ system header files #include #include // webdar headers #include "body_builder.hpp" #include "html_button.hpp" #include "html_div.hpp" #include "events.hpp" /// class html_menu shows a menu and provides events to act on other objects /// class html_menu provides a menu of choices to dynamically /// change another part of the html user interface /// upon change the event "changed" is generated class html_menu : public html_div, protected events, protected actor { public: /// the available event for this class static const std::string changed; /// constructor html_menu(); html_menu(const html_menu & ref) = delete; html_menu(html_menu && ref) noexcept = delete; html_menu & operator = (const html_menu & ref) = delete; html_menu & operator = (html_menu && ref) noexcept = delete; /// destructor ~html_menu(); /// add an entry in the menu /// /// \param[in] label is any text that will be showed to the user /// \param[in] tag is to programmatically change the selected item (not translatable as the label) /// \note first added entry will get the index (or mode) zero, next /// added entry will have index 1, adding an empty string makes a non /// selectable space between buttons. void add_entry(const std::string & label, const std::string & tag); /// returns the reference of the current mode /// /// \return the selected item in the order of addition using add_entry /// starting from 0: First add_entry gives item number 0, second gives 1, etc. unsigned int get_current_mode() const { return current_mode; }; /// set html field accordingly to the given mode /// \param[in] mode is the mode to set, it start from 0 /// \param[in] force is set to true, will never take into consideration the current mode and avoid changing if the new mode is the same void set_current_mode(unsigned int mode, bool force = false); /// returns the reference of the previous mode (the mode that was selected before current mode) unsigned int get_previous_mode() const { return previous_mode; }; /// return the tage of the currently selected item std::string get_current_tag() const; /// set the current selected mode giving its tag void set_current_tag(const std::string & tag); /// get previous tag std::string get_previous_tag() const; /// get current label (what is shown to the user) std::string get_current_label() const; /// modified wrapper from class events for our inherited classes void record_actor_on_event(actor *ptr) { events::record_actor_on_event(ptr, changed); }; /// inherited from class actor virtual void on_event(const std::string & event_name) override; protected: /// inherited from body_builder virtual std::string inherited_get_body_part(const chemin & path, const request & req) override; /// inherited from body_builder, used to defines the css_class/css_selectors used by this class virtual void new_css_library_available() override; private: /// struct used to store the html components of the html_menu struct cell { std::string itag; ///< used in implementation html_button* ibtn; ///< object containing the visible (translatable) name of the item cell(const std::string & label, const std::string & event_name, const std::string & tag) { ibtn = new (std::nothrow) html_button(label, event_name); if(ibtn == nullptr) throw exception_memory(); itag = tag; }; cell(const cell &) = delete; // not implemented (not needed) cell(cell && ref) noexcept { ibtn = nullptr; std::swap(ref.ibtn, ibtn); std::swap(ref.itag, itag); }; cell & operator = (const cell &) = delete; // not implemented (not needed) cell & operator = (cell && ref) noexcept { std::swap(ref.ibtn, ibtn); std::swap(ref.itag, itag); return *this; }; ~cell() { if(ibtn != nullptr) { delete ibtn; ibtn = nullptr; } }; }; unsigned int current_mode; ///< which item is currently selected unsigned int previous_mode; ///< which item was previously selected std::deque item; ///< items for choices }; #endif webdar-1.0.0/src/html_popup.cpp0000644000175000017520000000673114773727247013414 00000000000000/*********************************************************************/ // webdar - a web server and interface program to libdar // Copyright (C) 2013-2025 Denis Corbin // // This file is part of Webdar // // Webdar is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // Webdar is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Webdar. If not, see // //---- // to contact the author: dar.linux@free.fr /*********************************************************************/ // C system header files #include "my_config.h" extern "C" { } // C++ system header files // webdar headers // #include "html_popup.hpp" using namespace std; const string html_popup::outerclassname = "html_popup_outer"; html_popup::html_popup(unsigned int width_pct, unsigned int height_pct) { if(width_pct > 100 || height_pct > 100) throw exception_range("html_popup constructor arguments must be less or equal to 100 (%)"); width = width_pct; height = height_pct; innerclassname = "html_popup_" + to_string(width) + "_" + to_string(height); // outerbox must not be adopted, it lives outside any parent/child relationship outerbox.add_css_class(outerclassname); add_css_class(innerclassname); } string html_popup::inherited_get_body_part(const chemin & path, const request & req) { string ret = outerbox.get_body_part(path, req); // should be invoked with sub_path where sub_path is path.pop_front() ret += html_div::inherited_get_body_part(path, req); return ret; } void html_popup::new_css_library_available() { unique_ptr & csslib = lookup_css_library(); if(!csslib) throw WEBDAR_BUG; if(!csslib->class_exists(innerclassname)) { css innerdef; innerdef.css_position_type(css::pos_fixed); innerdef.css_box_sizing(css::bx_border); innerdef.css_position_top(to_string((100-height)/2)+"vh"); innerdef.css_position_left(to_string((100-width)/2)+"vw"); innerdef.css_width(to_string(width)+"vw", true); innerdef.css_height(to_string(height)+"vh", true); innerdef.css_corner_radius("10px"); innerdef.css_box_shadow("10px", "10px", "5px"); innerdef.css_overflow(css::ov_auto); innerdef.css_z_index(2); innerdef.css_border_width(css::bd_all, css::bd_thin); innerdef.css_border_style(css::bd_all, css::bd_double); innerdef.css_border_color(css::bd_all, "rgb(0,0,0)"); innerdef.css_background_color("#FFFFFF"); innerdef.css_opacity("1"); csslib->add(innerclassname, innerdef); } if(!csslib->class_exists(outerclassname)) { css outerdef; // have the outerbox span the whole page outerdef.css_position_type(css::pos_fixed); outerdef.css_position_top("0"); outerdef.css_position_bottom("0"); outerdef.css_position_left("0"); outerdef.css_position_right("0"); // visible transparent color (should be parametrable in the future) outerdef.css_opacity("0.2"); outerdef.css_background_color("rgb(0, 90, 200)"); // and on top of the existing page outerdef.css_z_index(1); csslib->add(outerclassname,outerdef); } } webdar-1.0.0/src/listener.cpp0000644000175000017520000002445115030771400013022 00000000000000/*********************************************************************/ // webdar - a web server and interface program to libdar // Copyright (C) 2013-2025 Denis Corbin // // This file is part of Webdar // // Webdar is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // Webdar is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Webdar. If not, see // //---- // to contact the author: dar.linux@free.fr /*********************************************************************/ // C system header files #include "my_config.h" extern "C" { #if HAVE_SYS_TYPES_H #include #endif #if HAVE_SYS_SOCKET_H #include #endif #if HAVE_NETINET_IP_H #include #endif #if HAVE_NETINET_IN_H #include #endif #if HAVE_ARPA_INET_H #include #endif #if HAVE_STRINGS_H #include #endif #if HAVE_STRING_H #include #endif #if HAVE_UNISTD_H #include #endif #if HAVE_ERRNO_H #include #endif } // C++ system header files #include // libraries header files #include // webdar headers #include "listener.hpp" #include "connexion.hpp" #include "server.hpp" #include "webdar_tools.hpp" #include "ssl_connexion.hpp" #include "global_parameters.hpp" using namespace std; static struct in_addr string_to_network_IPv4(const string & ip); static struct in6_addr string_to_network_IPv6(const string & ip); static string network_IPv4_to_string(const struct in_addr & ip); static string network_IPv6_to_string(const struct in6_addr & ip); listener::listener(const shared_ptr & log, const shared_ptr & auth, unique_ptr & ciphering, shared_ptr & pool, unsigned int port) { #ifdef LIBTHREADAR_STACK_FEATURE set_stack_size(DEFAULT_STACK_SIZE); #endif try { init(log, auth, ciphering, pool, "::1", port); } catch(exception_bug & e) { throw; } catch(...) { init(log, auth, ciphering, pool, "127.0.0.1", port); // no throw; } } listener::listener(const shared_ptr & log, const shared_ptr & auth, unique_ptr & ciphering, shared_ptr & pool, const string & ip, unsigned int port) { init(log, auth, ciphering, pool, ip, port); } void listener::init(const shared_ptr & log, const shared_ptr & auth, unique_ptr & ciphering, shared_ptr & pool, const string & ip, unsigned int port) { sigset_t sigs; if(!log) throw WEBDAR_BUG; if(!auth) throw WEBDAR_BUG; if(!pool) throw WEBDAR_BUG; l_ip = ip; l_port = webdar_tools_convert_to_string(port); if(sigfillset(&sigs) != 0) throw exception_system("failed creating a full signal set", errno); if(sigdelset(&sigs, THREAD_SIGNAL) != 0) throw exception_system("failed removing the THREAD_SIGNAL from signal set", errno); set_signal_mask(sigs); rep = log; src = auth; sockfd = -1; ssl_ctx = std::move(ciphering); srv = pool; try { struct sockaddr *ptr; socklen_t ptr_len = 0; struct sockaddr_in sin; struct sockaddr_in6 sin6; try { (void)memset(&sin6, 0, sizeof(sin6)); sin6.sin6_family = AF_INET6; sin6.sin6_port = htons(port); // sin6.sin6_flowinfo is not modified (set to zero here) sin6.sin6_addr = string_to_network_IPv6(ip.c_str()); // sin6.sin6_scope_id is not modified (set to zero here) ptr = (struct sockaddr *)(&sin6); ptr_len = sizeof(sin6); set_sockfd(AF_INET6); rep->report(debug, "listener object: IPv6 socket datastructure setup done"); } catch(exception_bug & e) { throw; } catch(...) { rep->report(debug, "listener object: IPv6 socket datastructure failed, considering given IP as IPv4 address"); (void)memset(&sin, 0, sizeof(sin)); sin.sin_family = AF_INET; sin.sin_port = htons(port); sin.sin_addr = string_to_network_IPv4(ip.c_str()); ptr = (struct sockaddr *)(&sin); ptr_len = sizeof(sin); set_sockfd(AF_INET); // no throw rep->report(debug, "listener object: IPv4 socket datastructure setup done"); } if(::bind(sockfd, ptr, ptr_len) < 0) throw exception_system("Error while binding socket to network", errno); rep->report(debug, "listener object: Socket binding done"); // we use SOMAXCONN here because its meaning depends on OS implementations // So we do not use to control the max number of concurrent session if(listen(sockfd, SOMAXCONN) < 0) throw exception_system("Error while trying to set the socket to listen", errno); rep->report(debug, "listener object: Socket set as a listenning socket"); } catch(...) { if(sockfd >= 0) close(sockfd); sockfd = -1; throw; } } void listener::set_sockfd(int domain) { sockfd = socket(domain, SOCK_STREAM, IPPROTO_TCP); if(sockfd < 0) throw exception_system("Error creating socket", errno); int val = 1; if(setsockopt(sockfd, SOL_SOCKET, SO_KEEPALIVE, &val, sizeof(val)) != 0) throw exception_system("Error activating TCP keepalive on socket", errno); famille = domain; } void listener::inherited_run() { int ret = 0; struct sockaddr *addr = nullptr; socklen_t addrlen = 0; socklen_t addrlen_ref = 0; struct sockaddr_in sin; struct sockaddr_in6 sin6; string ip; unsigned int port; unique_ptr con; rep->report(debug, "listener object: started in its own thread"); switch(famille) { case AF_INET6: addr = (struct sockaddr *)(&sin6); addrlen = sizeof(sin6); break; case AF_INET: addr = (struct sockaddr *)(&sin); addrlen = sizeof(sin); break; default: throw WEBDAR_BUG; } addrlen_ref = addrlen; while(true) { cancellation_checkpoint(); rep->report(info, "listener object: waiting for incoming connections on " + l_ip + " port " + l_port); (void)memset(addr, 0, addrlen); ret = accept(sockfd, addr, &addrlen); rep->report(debug, "listener object: exiting from accept(), a new connection has come on " + l_ip + " port " + l_port + "?"); if(ret < 0) { switch(errno) { case ECONNABORTED: case EFAULT: case EINTR: case EPROTO: case EPERM: case ENOSR: case ETIMEDOUT: rep->report(err, "listener object: exiting from accept(), a new connection has come: NO"); break; case EMFILE: case ENOBUFS: case ENOMEM: rep->report(err, "listener object: exiting from accept(), a new connection has come: NO, sleeping 1s"); sleep(1); break; case EAGAIN: throw WEBDAR_BUG; case EBADF: throw WEBDAR_BUG; case EINVAL: throw WEBDAR_BUG; case ENOTSOCK: throw WEBDAR_BUG; case EOPNOTSUPP: throw WEBDAR_BUG; default: throw WEBDAR_BUG; } continue; } rep->report(debug, "listener object: exiting from accept(), a new connection has come: YES"); if(addrlen > addrlen_ref) // addr is truncated throw WEBDAR_BUG; switch(famille) { case AF_INET6: ip = network_IPv6_to_string(sin6.sin6_addr); port = ntohs(sin6.sin6_port); rep->report(warning, string("listener object: New IPv6 connection has come from ") + ip + " port " + webdar_tools_convert_to_string(port)); break; case AF_INET: ip = network_IPv4_to_string(sin.sin_addr); port = ntohs(sin.sin_port); rep->report(warning, string("listener object: New IPv4 connection has come from ") + ip + " port " + webdar_tools_convert_to_string(port)); break; default: throw WEBDAR_BUG; } if(ssl_ctx) { rep->report(debug, "listener object: creating a new \"ssl_connexion\" object"); con.reset(new (nothrow) ssl_connexion(ret, ssl_ctx->get_context(), ip, port)); } else { rep->report(debug, "listener object: creating a new \"connexion\" object"); con.reset(new (nothrow) connexion(ret, ip, port)); } if(!con) throw exception_memory(); else { rep->report(debug, "listener object: creating a server thread to answer requests received from the new connection"); if(!srv->run_new_server(src, con)) { rep->report(warning, "failed to create a new server maximum connection reached"); con.reset(); } else { if(con) throw WEBDAR_BUG; // con should have passed // the connexion pointed to // object to the server object/class } } } } static struct in_addr string_to_network_IPv4(const string & ip) { struct in_addr ret; switch(inet_pton(AF_INET, ip.c_str(), &ret.s_addr)) { case 0: throw exception_range("Badly formated IPv4 address"); case -1: throw exception_system("Error while parsing IPv4 address", errno); case 1: break; // success default: throw WEBDAR_BUG; } return ret; } static struct in6_addr string_to_network_IPv6(const string & ip) { struct in6_addr ret; switch(inet_pton(AF_INET6, ip.c_str(), &ret.s6_addr)) { case 0: throw exception_range("Badly formated IPv6 address"); case -1: throw exception_system("Error while parsing IPv6 address", errno); case 1: break; // success default: throw WEBDAR_BUG; } return ret; } static string network_IPv4_to_string(const struct in_addr & ip) { string ret; const int BUFSZ = 20; char buffer[BUFSZ]; const char *ptr = inet_ntop(AF_INET, &ip, buffer, BUFSZ); if(ptr == nullptr) throw exception_system("error converting IPv4 address to its textual representation", errno); else ret = *ptr; return ret; } static string network_IPv6_to_string(const struct in6_addr & ip) { string ret; const int BUFSZ = 50; char buffer[BUFSZ]; const char * ptr = inet_ntop(AF_INET6, &ip, buffer, BUFSZ); if(ptr == nullptr) throw exception_system("error converting IPv4 address to its textual representation", errno); else ret = *ptr; return ret; } webdar-1.0.0/src/ssl_context.cpp0000644000175000017520000000411114773727247013560 00000000000000/*********************************************************************/ // webdar - a web server and interface program to libdar // Copyright (C) 2013-2025 Denis Corbin // // This file is part of Webdar // // Webdar is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // Webdar is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Webdar. If not, see // //---- // to contact the author: dar.linux@free.fr /*********************************************************************/ // C system header files #include "my_config.h" extern "C" { } // webdar headers #include "ssl_context.hpp" using namespace std; bool ssl_context::initialized = false; ssl_context::ssl_context(const string & certificate, const string & privatekey) { go_init_openssl(); const SSL_METHOD *ssl_meth = TLS_server_method(); if(ssl_meth == nullptr) throw exception_openssl(); ctx = SSL_CTX_new(ssl_meth); if(ctx == nullptr) throw exception_openssl(); try { if(! SSL_CTX_use_certificate_file(ctx, certificate.c_str(), SSL_FILETYPE_PEM)) throw exception_openssl(); if(! SSL_CTX_use_PrivateKey_file(ctx, privatekey.c_str(), SSL_FILETYPE_PEM)) throw exception_openssl(); if(! SSL_CTX_check_private_key(ctx)) throw exception_openssl(); } catch(...) { SSL_CTX_free(ctx); throw; } } void ssl_context::go_init_openssl() { if(!initialized) { initialized = true; SSL_library_init(); SSL_load_error_strings(); // this one is deprecated. Should set the OPENSSL_API_COMPAT macro // https://www.openssl.org/docs/manmaster/man7/openssl_user_macros.html } } webdar-1.0.0/src/webdar_tools.cpp0000644000175000017520000002251215000221732013650 00000000000000/*********************************************************************/ // webdar - a web server and interface program to libdar // Copyright (C) 2013-2025 Denis Corbin // // This file is part of Webdar // // Webdar is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // Webdar is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Webdar. If not, see // //---- // to contact the author: dar.linux@free.fr /*********************************************************************/ #include "my_config.h" extern "C" { #if HAVE_CTYPE_H #include #endif #if HAVE_TIME_H #include #endif #if HAVE_SYS_STAT_H #include #endif #if HAVE_FCNTL_H #include #endif } // libraries header files #include // C++ system header files #include // webdar headers #include "webdar_tools.hpp" #include "exceptions.hpp" using namespace std; bool troncon::operator < (const troncon & ref) const { string::const_iterator itme = begin; string::const_iterator itref = ref.begin; while(itme != end && itref != ref.end && *itme == *itref) { ++itme; ++itref; } if(itme != end) { if(itref != ref.end) return *itme < *itref; else return false; // ref shorter string than me } else { if(itref != ref.end) return true; // we are a shorter string than ref else return false; // we are the exact same string as ref } } int webdar_tools_convert_to_int(const string & ref) { int ret = -1; stringstream buf; buf.str(ref); buf >> ret; if(buf.rdstate() != ios_base::goodbit && buf.rdstate() != ios_base::eofbit) throw exception_range(string("Cannot convert ") + ref + string(" to integer")); return ret; } void webdar_tools_split_by(char sep, const string & aggregate, vector & splitted) { splitted.clear(); string::const_iterator it = aggregate.begin(); string::const_iterator bk = it; while(it != aggregate.end()) { if(*it == sep) { splitted.push_back(string(bk, it)); ++it; bk = it; } else ++it; } if(bk != aggregate.end()) splitted.push_back(string(bk, it)); } void webdar_tools_split_in_two(char sep, const string &aggregate, string & first, string & second) { string::const_iterator it = aggregate.begin(); while(it != aggregate.end() && *it != sep) ++it; first = string(aggregate.begin(), it); if(it != aggregate.end()) ++it; second = string(it, aggregate.end()); } deque webdar_tools_split_by_substring(const string & substring, const troncon & aggregate) { deque ret; troncon tronc = aggregate; string::const_iterator first_match; do { first_match = webdar_tools_seek_to_substring(substring, tronc); if(first_match != tronc.end) { // fully matching string ret.push_back(troncon(tronc.begin, first_match)); // may push a empty troncon / string tronc.begin = first_match + substring.size(); } } while(first_match != tronc.end); ret.push_back(tronc); return ret; } string::const_iterator webdar_tools_seek_to_substring(const string & substring, const troncon & aggregate) { string::const_iterator ret = aggregate.begin; string::const_iterator offset; string::const_iterator suit = substring.begin(); bool matching = false; bool found = false; while(ret != aggregate.end && ! found) { if(!matching) { if(*ret == *suit) { matching = true; offset = ret; ++ret; ++suit; } else ++ret; } else // currently processing a matching substring { if(suit != substring.end()) // still not complete match { if(*ret != *suit) // failed fully matching substring { matching = false; suit = substring.begin(); ret = offset + 1; // yes, we may have portition of substring inside substring } else { ++ret; ++suit; } } else // fully matching string found = true; } } return found ? offset : ret; } string webdar_tools_remove_leading_spaces(const string & input) { string::const_iterator it = input.begin(); while(it != input.end() && *it == ' ') ++it; return string(it, input.end()); } void webdar_tools_init_randomization() { int pas = getpid() % getppid(); srand(time(nullptr)); if(pas == 0) pas = 10; for(int i = getpid() ; i > pas ; i -= pas) (void)rand(); } string webdar_tools_generate_random_string(unsigned int size) { string ret = ""; unsigned int x; for(unsigned int i = 0; i < size; ++i) { if(i == 0) x = (rand() % 52) + 10; else x = rand() % 62; if(x < 10) ret += char(x + 48); // digits 0 - 9 else if(x < 36) // 10 <= x < 36 ret += char(55 + x); // uppercase letters A - Z else // 36 <= x < 61 ret += char(61 + x); // lowercase letters a - z } return ret; } string webdar_tools_get_session_ID_from_URI(const uri & url) { const chemin & path = url.get_path(); if(!path.empty()) return path[0]; else return ""; } string webdar_tools_to_canonical_case(const string & ch) { string ret = ""; bool previous_is_alpha = false; for(string::const_iterator it = ch.begin(); it != ch.end(); ++it) { if(isalpha((*it))) { if(previous_is_alpha) ret += tolower(*it); else { ret+= toupper(*it); previous_is_alpha = true; } } else { ret += *it; previous_is_alpha = false; } } return ret; } string webdar_tools_decode_urlencoded(const string & ch) { string ret = ""; string::const_iterator it = ch.begin(); string::const_iterator bk = it; char x; while(it != ch.end()) { switch(*it) { case '+': ret += string(bk, it) + " "; ++it; bk = it; break; case '%': ret += string(bk, it); ++it; bk = it; if(it != ch.end()) { ++it; if(it != ch.end()) { ++it; x = webdar_tools_convert_hexa_to_int(string(bk, it)); ret += x; } bk = it; } break; default: ++it; } } ret += string(bk, it); return ret; } unsigned int webdar_tools_convert_hexa_to_int(const string & ref) { unsigned int ret = 0; unsigned int val = 0; string::const_iterator it = ref.begin(); while(it != ref.end()) { if(*it >= '0' && *it <= '9') val = *it - '0'; else if(*it >= 'a' && *it <= 'f') val = *it - 'a' + 10; else if(*it >= 'A' && *it <= 'F') val = *it - 'A' + 10; else throw exception_range("string does not represent an hexadecimal number"); ret *= 16; ret += val; ++it; } return ret; } string webdar_tools_get_title(const string & sessname, const string & status) { string ret = "Webdar - "; if(sessname == "") ret += status; else ret += sessname + " - " + status; return ret; } string webdar_tools_html_display(const string & arg) { string ret; string::const_iterator it = arg.begin(); bool first_antislash = true; while(it != arg.end()) { switch(*it) { case '<': ret += "<"; first_antislash = true; break; case '>': ret += ">"; first_antislash = true; break; case '"': ret += """; first_antislash = true; break; case '\'': ret += "'"; first_antislash = true; break; case '&': ret += "&"; first_antislash = true; break; case '\\': // a double quote (") may be returned as " or as \" // depending on the browser. Upon antislash notation we // ignore the antislash and let the double quote be substiued // bu " to have consistent notiation to compare with // what has been sent to the browser. Same thing with other // &* characters above. if(first_antislash) first_antislash = false; // ignoring the first one, even if this // is the last char of the string else { ret += *it; first_antislash = true; } break; default: ret += *it; first_antislash = true; } ++it; } return ret; } bool webdar_tools_exists_and_is_file(const string & path, bool follow_symlink) { struct stat info; int ret; if(follow_symlink) ret = stat(path.c_str(), & info); else ret = lstat(path.c_str(), & info); return ret == 0 && (info.st_mode & S_IFREG) != 0; } bool webdar_tools_exists_and_is_dir(const string & path, bool follow_symlink) { struct stat info; int ret; if(follow_symlink) ret = stat(path.c_str(), & info); else ret = lstat(path.c_str(), & info); return ret == 0 && (info.st_mode & S_IFDIR) != 0; } string webdar_tools_capitalize_first_letter_of_words(const string & source) { string ret; vector splitted; webdar_tools_split_by(' ', source, splitted); for(vector::iterator it = splitted.begin(); it != splitted.end(); ++it) { if(it->size() > 0) *(it->begin()) = toupper(*(it->begin())); if(!ret.empty()) ret += " "; ret += *it; } return ret; } webdar-1.0.0/src/html_aiguille.hpp0000644000175000017520000001355614773727247014054 00000000000000/*********************************************************************/ // webdar - a web server and interface program to libdar // Copyright (C) 2013-2025 Denis Corbin // // This file is part of Webdar // // Webdar is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // Webdar is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Webdar. If not, see // //---- // to contact the author: dar.linux@free.fr /*********************************************************************/ #ifndef HTML_AIGUILLE_HPP #define HTML_AIGUILLE_HPP /// \file html_aiguille.hpp /// /// html_aiguille class is a per section adoption tool that shows objects adopted /// in one section at a time (or no section at all), thanks to it set_active_section() method // C system header files #include "my_config.h" extern "C" { } // C++ system header files #include #include #include // webdar headers #include "body_builder.hpp" #include "actor.hpp" #include "html_void.hpp" /// class html_aiguille is a pure virtual class /// it groups adopted objets under several labeled sections /// at most one section is visible at a time and can be changed /// calling set_active_section(). If given "noactive" to set_active_section() /// no section will show. By default no section is created, one has /// to be created calling add_section() for the object to be able to /// adopt other objects. /// adopt() method from body_builder is replaced by adopt_in_section() class html_aiguille : public body_builder, public html_void_parent_notifier { public: static constexpr const signed int noactive = -1; html_aiguille() { clear(); }; html_aiguille(const html_aiguille & ref) = delete; html_aiguille(html_aiguille && ref) noexcept = delete; html_aiguille & operator = (const html_aiguille & ref) = delete; html_aiguille & operator = (html_aiguille && ref) noexcept = delete; ~html_aiguille() = default; /// clear all adopted data and remove all sections void clear(); /// add a new sections /// \param[in] name is the name of the section, not two sections /// can have the same name, this is code internal information which /// can be used to be referred to. /// \param[in] title is what can shows as a section title, may be the /// the same title of another section, can also be tranlated for /// localization, code should not assume anything based in the value /// of this field. void add_section(const std::string & name, const std::string & title); /// adopt another objet in the section which name is provided /// \note adopt_in_section replaces body_builder::adopt() but forsake() /// is still available do revent this action. void adopt_in_section(const std::string & section_name, body_builder* obj); /// adopt an object in seection which number is provided void adopt_in_section(signed int num, body_builder* obj); /// foresake all adopted objets in the given section void clear_section(const std::string & section_name); /// foresake all adopted objects in the given section void clear_section(signed int num); /// foresake objects and remove section of that name void remove_section(const std::string & section_name); /// foresake objects and remove section at that index void remove_section(signed int num); /// manually set the visible section, based on section name void set_active_section(const std::string & name); /// manually set the visible section number (numbered by ordre or addition, starting at zero) void set_active_section(signed int num); /// get the current active section signed int get_active_section() const { return active_section; }; /// return the total number of section unsigned int size() const { return order.size(); }; /// return the index of the provided section name unsigned int section_name_to_num(const std::string & name) const; /// return the name of the section knowing its index std::string num_to_section_name(unsigned int num) const { return order[num]; }; /// inherited from html_void_parent_notifier virtual void void_child_will_foresake(body_builder* voidobj, body_builder* obj) override; protected: // inherited from body_builder virtual std::string inherited_get_body_part(const chemin & path, const request & req) override; // hiding adopt() as it is replaced by adopt_in_section() using body_builder::adopt; // for inherited class to act upon new section addition virtual void section_added(const std::string & name, const std::string & title) {}; // for inherited class to act upon section removal virtual void section_removed(const std::string & name) {}; private: /// used to store the objects adopted in each section struct section { std::string title; html_void global_visibility; // parent of all objects from the adopted list, and child of "this" std::list adopted; }; std::deque order; ///< holds section name in order std::map sections; ///< map section name to its content std::map obj_to_section; ///< maps back an object to it section name signed int active_section; ///< set to noactive if no section is expanded bool selfcleaning; ///< when true, ignore will_foresake() calls, we are at the root of this void set_visibility(signed int section_num, bool visible); }; #endif webdar-1.0.0/src/ssl_context.hpp0000644000175000017520000000423014773727247013567 00000000000000/*********************************************************************/ // webdar - a web server and interface program to libdar // Copyright (C) 2013-2025 Denis Corbin // // This file is part of Webdar // // Webdar is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // Webdar is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Webdar. If not, see // //---- // to contact the author: dar.linux@free.fr /*********************************************************************/ #ifndef SSL_CONTEXT_HPP #define SSL_CONTEXT_HPP // C system header files #include "my_config.h" extern "C" { #if HAVE_OPENSSL_SSL_H #include #endif } // C++ system header files #include // webdar headers #include "exceptions.hpp" /// manages an SSL context and initiate openssl library /// SSL_CTX are openssl structure holding certificate, privatekey /// connection method and algorithms... they are used to create /// an SSL object that ciphers/deciphers/authenticate SSL exchanges /// on a particular connection (for example a TCP connection) class ssl_context { public: /// constructor ssl_context(const std::string & certificate, const std::string & privatekey); /// forbidding copy, allowing move ssl_context(const ssl_context & ref) = delete; ssl_context(ssl_context && ref) noexcept = default; ssl_context & operator = (const ssl_context & ref) = delete; ssl_context & operator = (ssl_context && ref) noexcept = default; /// destructor ~ssl_context() { SSL_CTX_free(ctx); }; SSL_CTX & get_context() { return *ctx; }; private: SSL_CTX *ctx; static bool initialized; static void go_init_openssl(); }; #endif webdar-1.0.0/src/html_demo.hpp0000644000175000017520000000741215044717066013165 00000000000000/*********************************************************************/ // webdar - a web server and interface program to libdar // Copyright (C) 2013-2025 Denis Corbin // // This file is part of Webdar // // Webdar is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // Webdar is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Webdar. If not, see // //---- // to contact the author: dar.linux@free.fr /*********************************************************************/ #ifndef HTML_DEMO_HPP #define HTML_DEMO_HPP // C system header files #include "my_config.h" extern "C" { } // C++ system header files // webdar headers #include "body_builder.hpp" #include "actor.hpp" #include "html_text.hpp" #include "html_table.hpp" #include "html_form_input.hpp" #include "html_form_radio.hpp" #include "html_form_fieldset.hpp" #include "html_form.hpp" #include "html_double_button.hpp" #include "html_div.hpp" #include "html_popup.hpp" #include "html_label.hpp" /// class html_demo show how webdar interacts with the browser /** \verbatim +------------------------------------------------+ | text explaing the left and right fields nature | +------------------------------------------------+ +----- table -----------+------------------------+ |+--- form ------------+| +-- right_fs ---------+| ||+-- left_fs --------+|| |right_input || ||| left_input ||| |right_radio || ||| left_radio ||| +---------------------+| ||+-------------------+|| | |+-[update btn]--------+| | +-----------------------+------------------------+ |+-- btn_div ----------+| | ||+--------++---------+|| | |||btn_incr||btn_clear||| counter | ||+--------++---------+|| | |+---------------------+| | +-----------------------+------------------------+ \endverbatim **/ class html_demo : public html_popup, public actor { public: html_demo(); html_demo(const html_demo & ref) = delete; html_demo(html_demo && ref) noexcept = delete; html_demo & operator = (const html_demo & ref) = delete; html_demo & operator = (html_demo && ref) noexcept = delete; ~html_demo() = default; /// inherited from actor virtual void on_event(const std::string & event_name) override; protected: /// inherited from body_builder virtual void new_css_library_available() override; private: static constexpr const char* event_calc = "go_compute"; static constexpr const char* event_close = "close"; static constexpr const char* css_cells = "html_demo_cells"; static constexpr const char* css_table = "html_demo_table"; static constexpr const char* css_btn_close = "html_demo_button_close"; html_div desc_div; html_text description; html_table table; html_form_input left_input; html_form_radio left_radio; html_form_fieldset left_fs; html_form form; html_double_button btn_calc; html_div btn_div; html_form_input right_input; html_form_radio right_radio; html_form_fieldset right_fs; html_form_input counter; html_label label; html_text labelsep; html_label labelplus; html_url tutorial; html_text tutorial_desc; html_button close; }; #endif webdar-1.0.0/src/css_library.hpp0000644000175000017520000000500714773727247013541 00000000000000/*********************************************************************/ // webdar - a web server and interface program to libdar // Copyright (C) 2013-2025 Denis Corbin // // This file is part of Webdar // // Webdar is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // Webdar is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Webdar. If not, see // //---- // to contact the author: dar.linux@free.fr /*********************************************************************/ #ifndef CSS_LIBRARY_HPP #define CSS_LIBRARY_HPP // C system header files #include "my_config.h" extern "C" { } // C++ system header files #include // webdar headers #include "css_class.hpp" /// class css_library /// holds a list of css classes (css name and its associated set of css properties (aka css object)) /// class css_library { public: css_library() = default; css_library(const css_library & ref) = default; css_library(css_library && ref) noexcept = default; css_library & operator = (const css_library & ref) = default; css_library & operator = (css_library && ref) noexcept = default; ~css_library() = default; /// add a new class to the library (must not already exist in the library) void add(const css_class & value); /// add on-fly a new class to the library from its name and a css object void add(const std::string & name, const css & value); /// check whether a class has a definition in this library object bool class_exists(const std::string & name) const; /// obtain the definition of the given class bool get_value(const std::string & name, std::string & stored_value) const; /// remove a class from the library void del(const std::string & name); /// return the number of class in that library unsigned int size() const { return content.size(); }; /// provide a css definition of all classes of the library suitable for HTML headers or CSS files std::string get_html_class_definitions() const; private: std::map content; }; #endif webdar-1.0.0/src/html_mask_form_path.hpp0000644000175000017520000001176215044134337015230 00000000000000/*********************************************************************/ // webdar - a web server and interface program to libdar // Copyright (C) 2013-2025 Denis Corbin // // This file is part of Webdar // // Webdar is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // Webdar is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Webdar. If not, see // //---- // to contact the author: dar.linux@free.fr /*********************************************************************/ #ifndef HTML_MASK_FORM_PATH_HPP #define HTML_MASK_FORM_PATH_HPP // C system header files #include "my_config.h" extern "C" { } // C++ system header files #include // webdar headers #include "body_builder.hpp" #include "actor.hpp" #include "events.hpp" #include "html_form_dynamic_table.hpp" #include "jsoner.hpp" #include "html_mask.hpp" #include "bibliotheque_subconfig.hpp" #include "html_form.hpp" #include "html_form_mask_bool.hpp" /// class html_mask_form_path let user define mask on paths /// at the difference of the html_form_* classes which are component to be included into html_form /// this class is a full html_form dedicated to the specific case of mask for path filtering class html_mask_form_path : public body_builder, public actor, public events, public html_form_dynamic_table_object_provider, public jsoner, public html_mask, public bibliotheque_subconfig { public: static const std::string changed; /// constructor /// \param[in] allow_absolute_paths determines if path masks we will generate /// will allow or not absolute paths. html_mask_form_path(bool allow_absolute_paths); html_mask_form_path(const html_mask_form_path & ref); html_mask_form_path(html_mask_form_path && ref) noexcept = delete; html_mask_form_path & operator = (const html_mask_form_path & ref) = delete; html_mask_form_path & operator = (html_mask_form_path && ref) noexcept = delete; ~html_mask_form_path() = default; /// should be invoked ASAP after object construction void set_child(const std::shared_ptr & ptr, bibliotheque::category cat); /// set filesystem root value /// \note this is used by some object we create to translate a relative path /// to an absolute path when context requires it void set_fs_root(const std::string & prefix); /// inherited from html_mask virtual std::unique_ptr get_mask() const override { return root.get_mask(); }; /// inherited from html_mask virtual bool is_relative() const override { return root.is_relative(); }; /// inherited from html_form_dynamic_table virtual std::unique_ptr provide_object_of_type(unsigned int num, const std::string & context, std::string & changed_event) const override; /// inherited from jsoner virtual void load_json(const json & source) override; /// inherited from jsoner virtual json save_json() const override; /// inherited from jsoner virtual void clear_json() override; /// inherited from bibliotheque_subconfig virtual bibliotheque::using_set get_using_set() const override; /// inherited from actor virtual void on_event(const std::string & event_name) override; /// inherited from body_builder virtual void bind_to_anchor(const std::string & val) override { form.bind_to_anchor(val); }; protected: /// inherited from body_builder virtual std::string inherited_get_body_part(const chemin & path, const request & req) override; /// inherited from body_builder virtual void css_classes_have_changed() override; private: bool allow_abs_paths; std::deque labels; bibliotheque::category categ; std::shared_ptr biblio; std::shared_ptr fs_root; // the use of a shared_ptr is done here because this // information will be shared with a possibly wide // range of objects we will provide (as object // provider) stored in a possibly rich tree-like structure // (html_form_mask_bool) and this info may be needed // to be updated from time to time. Other objects // get notified of changes by mean of events triggered // by this html_mask_form_path object html_form form; html_form_mask_bool root; void init(); void init_bool_obj(html_form_mask_bool & obj) const; void check_ptr() const; static constexpr const unsigned int format_version = 1; static constexpr const char* myclass_id = "html_mask_form_path"; static constexpr const char* jlabel_bool_config = "bool-config"; }; #endif webdar-1.0.0/src/html_options_isolate.cpp0000644000175000017520000005022615036464144015445 00000000000000/*********************************************************************/ // webdar - a web server and interface program to libdar // Copyright (C) 2013-2025 Denis Corbin // // This file is part of Webdar // // Webdar is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // Webdar is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Webdar. If not, see // //---- // to contact the author: dar.linux@free.fr /*********************************************************************/ // C system header files #include "my_config.h" extern "C" { } // C++ system header files #include #include // webdar headers #include "webdar_css_style.hpp" #include "webdar_tools.hpp" #include "tokens.hpp" #include "tooltip_messages.hpp" // #include "html_options_isolate.hpp" using namespace std; const string html_options_isolate::landing_path_changed = "html_options_isolate_landing_changed"; const string html_options_isolate::entrepot_changed = "html_options_isolate_entrep_changed"; const string html_options_isolate::changed = "html_options_isolate_changed"; html_options_isolate::html_options_isolate(): form_delta_sig("Update"), delta_fs(""), delta_sig("Transfer binary delta signature", html_form_input::check, "", "", ""), delta_transfer_mode("Compute delta signature when they are missing", html_form_input::check, "", "", ""), form_archgen("Update"), fs_archgen(""), pause("Pause at each N slices (zero = no pause)", html_form_input::number, "", "5", ""), allow_over("Allow slice overwriting", html_form_input::check, "", "", ""), warn_over("Warn before overwriting", html_form_input::check, "", "", ""), sequential_marks("Add sequential marks", html_form_input::check, "", "", ""), user_comment("User comment in slice header", html_form_input::text, "", "", ""), hash_algo("Hashing algorithm"), execute("Command to execute after each slice", html_form_input::text, "", "", ""), empty("Dry run execution", html_form_input::check, "", "", ""), repair_mode("Repair mode", html_form_input::check, "", "", ""), form_shown("Update"), fs_shown(""), info_details("Detailed informations", html_form_input::check, "1", "", ""), ignore_events(false) { entrep.reset(new (nothrow) html_entrepot_landing()); if(!entrep) throw exception_memory(); delta_mask.reset(new (nothrow) html_mask_form_path(false)); if(!delta_mask) throw exception_memory(); compr_params.reset(new (nothrow) html_compression_params(false, false, false)); if(!compr_params) throw exception_memory(); slicing.reset(new (nothrow) html_slicing()); if(! slicing) throw exception_memory(); ciphering.reset(new (nothrow) html_ciphering()); if(! ciphering) throw exception_memory(); sig_block_size.reset(new (nothrow) html_form_sig_block_size()); if(! sig_block_size) throw exception_memory(); delta_filter_params.add_paragraph(); delta_filter_params.add_text(3, "Delta signature parameters"); delta_filter_title.add_paragraph(); delta_filter_title.add_text(3, "Delta signature filename based filtering"); // configure html components libdar::archive_options_isolate defaults; ciphering->set_crypto_size_range(defaults.get_crypto_size(), libdar::infinint(4294967296)); // max is 2^32 pause.set_min_only(0); // setting default values from libdar /// init() is moved to set_child because it requires the bibliotheque due to the guichet objects involved // building HTML structure static const char* sect_entrep = "entrepot"; static const char* sect_delta = "delta_sig"; static const char* sect_general = "general"; static const char* sect_show = "show"; static const char* sect_compr = "compress"; static const char* sect_slice = "slicing"; static const char* sect_cipher = "ciphering"; deroule.add_section(sect_entrep, "Isolated Catalog Repository"); deroule.add_section(sect_delta, "Delta signatures"); deroule.add_section(sect_general, "How to process the operation"); deroule.add_section(sect_show, "What to show during the operation"); deroule.add_section(sect_compr, "Compression options"); deroule.add_section(sect_slice, "Slicing options"); deroule.add_section(sect_cipher, "Encryption options"); deroule.adopt_in_section(sect_entrep, &guichet_entrep); delta_fs.adopt(&delta_sig); delta_fs.adopt(&delta_transfer_mode); form_delta_sig.adopt(&delta_fs); deroule.adopt_in_section(sect_delta, &form_delta_sig); deroule.adopt_in_section(sect_delta, &delta_filter_params); deroule.adopt_in_section(sect_delta, &guichet_sig_block_size); deroule.adopt_in_section(sect_delta, &delta_filter_title); deroule.adopt_in_section(sect_delta, &guichet_delta_mask); // by-passing anchor assigned by deroule delta_filter_params.assign_anchor(true); guichet_sig_block_size.bind_to_anchor(delta_filter_params.get_assigned_anchor()); delta_filter_title.assign_anchor(true); guichet_delta_mask.bind_to_anchor(delta_filter_title.get_assigned_anchor()); fs_archgen.adopt(&allow_over); fs_archgen.adopt(&warn_over); fs_archgen.adopt(&pause); fs_archgen.adopt(&sequential_marks); fs_archgen.adopt(&user_comment); fs_archgen.adopt(&hash_algo); fs_archgen.adopt(&execute); fs_archgen.adopt(&empty); fs_archgen.adopt(&repair_mode); form_archgen.adopt(&fs_archgen); deroule.adopt_in_section(sect_general, &form_archgen); fs_shown.adopt(&info_details); form_shown.adopt(&fs_shown); deroule.adopt_in_section(sect_show, &form_shown); deroule.adopt_in_section(sect_compr, &guichet_compr_params); deroule.adopt_in_section(sect_slice, &guichet_slicing); deroule.adopt_in_section(sect_cipher, &guichet_ciphering); adopt(&deroule); // events and visibility register_name(landing_path_changed); register_name(entrepot_changed); register_name(changed); delta_sig.record_actor_on_event(this, html_form_input::changed); delta_transfer_mode.record_actor_on_event(this, html_form_input::changed); entrep->record_actor_on_event(this, html_entrepot_landing::entrepot_only_changed); entrep->record_actor_on_event(this, html_entrepot_landing::landing_path_only_changed); sig_block_size->record_actor_on_event(this, html_form_sig_block_size::changed); delta_mask->record_actor_on_event(this, html_mask_form_path::changed); allow_over.record_actor_on_event(this, html_form_input::changed); warn_over.record_actor_on_event(this, html_form_input::changed); pause.record_actor_on_event(this, html_form_input::changed); sequential_marks.record_actor_on_event(this, html_form_input::changed); user_comment.record_actor_on_event(this, html_form_input::changed); hash_algo.record_actor_on_event(this, html_hash_algo::changed); execute.record_actor_on_event(this, html_form_input::changed); empty.record_actor_on_event(this, html_form_input::changed); repair_mode.record_actor_on_event(this, html_form_input::changed); info_details.record_actor_on_event(this, html_form_input::changed); compr_params->record_actor_on_event(this, html_compression_params::changed); slicing->record_actor_on_event(this, html_slicing::changed); ciphering->record_actor_on_event(this, html_ciphering::changed); on_event(html_form_input::changed); // css webdar_css_style::grey_button(deroule, true); // tooltips delta_sig.set_tooltip(TOOLTIP_HOI_DELTA_SIG); delta_transfer_mode.set_tooltip(TOOLTIP_HOI_DELTA_TRANSFER); allow_over.set_tooltip(TOOLTIP_HOI_ALLOW_OVER); warn_over.set_tooltip(TOOLTIP_HOI_WARN_OVER); pause.set_tooltip(TOOLTIP_HOI_PAUSE); sequential_marks.set_tooltip(TOOLTIP_HOI_SEQ_MARKS); user_comment.set_tooltip(TOOLTIP_HOI_USER_COMMENT); hash_algo.set_tooltip(TOOLTIP_HOI_HASH_ALGO); execute.set_tooltip(TOOLTIP_HOI_EXECUTE); empty.set_tooltip(TOOLTIP_HOI_EMPTY); repair_mode.set_tooltip(TOOLTIP_HOI_REPAIR_MODE); info_details.set_tooltip(TOOLTIP_HOI_INFO_DETAILS); } void html_options_isolate::set_biblio(const shared_ptr & ptr) { guichet_entrep.set_child(ptr, bibliotheque::repo, entrep, false); delta_mask->set_child(ptr, bibliotheque::pathfilter); guichet_delta_mask.set_child(ptr, bibliotheque::pathfilter, delta_mask, false); guichet_compr_params.set_child(ptr, bibliotheque::compress, compr_params, false); guichet_slicing.set_child(ptr, bibliotheque::slicing, slicing, false); guichet_ciphering.set_child(ptr, bibliotheque::ciphering, ciphering, false); guichet_sig_block_size.set_child(ptr, bibliotheque::delta_sig, sig_block_size, true); init(); } void html_options_isolate::load_json(const json & source) { try { unsigned int version; string class_id; json config = unwrap_config_from_json_header(source, version, class_id); if(class_id != myclass_id) throw exception_range(libdar::tools_printf("Unexpected class_id in json data, found %s while expecting %s", class_id.c_str(), myclass_id)); if(version > format_version) throw exception_range(libdar::tools_printf("Json format version too hight for %s, upgrade your webdar software", myclass_id)); ignore_events = true; try { delta_sig.set_value_as_bool(config.at(jlabel_delta_sig)); delta_transfer_mode.set_value_as_bool(config.at(jlabel_delta_xfer)); if(delta_sig.get_value_as_bool() && delta_transfer_mode.get_value_as_bool()) { guichet_sig_block_size.load_json(config.at(jlabel_sig_block_size)); guichet_delta_mask.load_json(config.at(jlabel_delta_mask)); } else { guichet_sig_block_size.clear_json(); guichet_delta_mask.clear_json(); } guichet_entrep.load_json(config.at(jlabel_entrep)); allow_over.set_value_as_bool(config.at(jlabel_allow_over)); warn_over.set_value_as_bool(config.at(jlabel_warn_over)); sequential_marks.set_value_as_bool(config.at(jlabel_seq_masks)); user_comment.set_value(config.at(jlabel_user_comment)); hash_algo.set_selected_id(config.at(jlabel_hash_algo)); execute.set_value(config.at(jlabel_execute)); empty.set_value_as_bool(config.at(jlabel_empty)); repair_mode.set_value_as_bool(config.at(jlabel_repair_mode)); info_details.set_value_as_bool(config.at(jlabel_info_details)); guichet_compr_params.load_json(config.at(jlabel_compr_params)); guichet_slicing.load_json(config.at(jlabel_slicing)); guichet_ciphering.load_json(config.at(jlabel_ciphering)); } catch(...) { ignore_events = false; throw; } ignore_events = false; trigger_changed(); } catch(json::exception & e) { throw exception_json(libdar::tools_printf("Error loading %s config", myclass_id), e); } } json html_options_isolate::save_json() const { json config; html_options_isolate* me = const_cast(this); if(me == nullptr) throw WEBDAR_BUG; config[jlabel_delta_sig] = delta_sig.get_value_as_bool(); config[jlabel_delta_xfer] = delta_transfer_mode.get_value_as_bool(); if(delta_sig.get_value_as_bool() && delta_transfer_mode.get_value_as_bool()) { config[jlabel_sig_block_size] = guichet_sig_block_size.save_json(); config[jlabel_delta_mask] = guichet_delta_mask.save_json(); } else { me->guichet_sig_block_size.clear_json(); me->guichet_delta_mask.clear_json(); } config[jlabel_entrep] = guichet_entrep.save_json(); config[jlabel_allow_over] = allow_over.get_value_as_bool(); config[jlabel_warn_over] = warn_over.get_value_as_bool(); config[jlabel_seq_masks] = sequential_marks.get_value_as_bool(); config[jlabel_user_comment] = user_comment.get_value(); config[jlabel_hash_algo] = hash_algo.get_selected_id(); config[jlabel_execute] = execute.get_value(); config[jlabel_empty] = empty.get_value_as_bool(); config[jlabel_repair_mode] = repair_mode.get_value_as_bool(); config[jlabel_info_details] = info_details.get_value_as_bool(); config[jlabel_compr_params] = guichet_compr_params.save_json(); config[jlabel_slicing] = guichet_slicing.save_json(); config[jlabel_ciphering] = guichet_ciphering.save_json(); return wrap_config_with_json_header(format_version, myclass_id, config); } void html_options_isolate::clear_json() { ignore_events = true; try { init(); } catch(...) { ignore_events = false; throw; } ignore_events = false; trigger_changed(); } bibliotheque::using_set html_options_isolate::get_using_set() const { bibliotheque::using_set ret; subconfig_add_to(ret, guichet_sig_block_size.get_using_set()); subconfig_add_to(ret, guichet_delta_mask.get_using_set()); subconfig_add_to(ret, guichet_entrep.get_using_set()); subconfig_add_to(ret, guichet_compr_params.get_using_set()); subconfig_add_to(ret, guichet_slicing.get_using_set()); subconfig_add_to(ret, guichet_ciphering.get_using_set()); return ret; } void html_options_isolate::on_event(const string & event_name) { if(event_name == html_form_input::changed) { if(delta_sig.get_value_as_bool()) { delta_transfer_mode.set_visible(true); delta_filter_params.set_visible(delta_transfer_mode.get_value_as_bool()); guichet_sig_block_size.set_visible(delta_transfer_mode.get_value_as_bool()); delta_filter_title.set_visible(delta_transfer_mode.get_value_as_bool()); guichet_delta_mask.set_visible(delta_transfer_mode.get_value_as_bool()); } else { delta_transfer_mode.set_visible(false); delta_filter_params.set_visible(false); guichet_sig_block_size.set_visible(false); delta_filter_title.set_visible(false); guichet_delta_mask.set_visible(false); } // no need to call my_body_part_has_changed() // because changed done in on_event concern // body_builder objects we have adopted trigger_changed(); } else if(event_name == html_entrepot_landing::entrepot_only_changed) { act(entrepot_changed); trigger_changed(); } else if(event_name == html_form_sig_block_size::changed || event_name == html_mask_form_path::changed || event_name == html_hash_algo::changed || event_name == html_compression_params::changed || event_name == html_slicing::changed || event_name == html_ciphering::changed) { trigger_changed(); } else if(event_name == html_entrepot_landing::landing_path_only_changed) { act(landing_path_changed); } else throw WEBDAR_BUG; } libdar::archive_options_isolate html_options_isolate::get_options(shared_ptr & webui) const { libdar::archive_options_isolate ret; libdar::infinint compr_bs = compr_params->get_compression_block(); libdar::U_I val = 0; ret.set_entrepot(entrep->get_entrepot(webui)); ret.set_allow_over(allow_over.get_value_as_bool()); ret.set_warn_over(warn_over.get_value_as_bool()); ret.set_pause(libdar::deci(pause.get_value()).computer()); ret.set_slice_permission(slicing->get_permission()); ret.set_slice_user_ownership(slicing->get_user_ownership()); ret.set_slice_group_ownership(slicing->get_group_ownership()); ret.set_sequential_marks(sequential_marks.get_value_as_bool()); ret.set_user_comment(user_comment.get_value()); ret.set_slice_min_digits(slicing->get_min_digits()); ret.set_hash_algo(hash_algo.get_value()); ret.set_empty(empty.get_value_as_bool()); ret.set_repair_mode(repair_mode.get_value_as_bool()); ret.set_execute(execute.get_value()); ret.set_info_details(info_details.get_value_as_bool()); ret.set_compression(compr_params->get_compression_algo()); ret.set_compression_level(compr_params->get_compression_level()); ret.set_multi_threaded_compress(compr_params->get_num_threads()); ret.set_multi_threaded_crypto(ciphering->get_multi_threaded_crypto()); ret.set_delta_signature(delta_sig.get_value_as_bool()); if(delta_sig.get_value_as_bool() && delta_transfer_mode.get_value_as_bool()) { unique_ptr dmask = delta_mask->get_mask(); if(dmask) ret.set_delta_mask(*dmask); else throw WEBDAR_BUG; ret.set_sig_block_len(sig_block_size->get_value()); ret.set_delta_sig_min_size(sig_block_size->get_delta_sig_min_size()); } val = webdar_tools_convert_from_infinint(compr_bs, string("compression block size is too large for the underlying operating system, please reduce")); if(val < tokens_min_compr_bs && val != 0) throw exception_range(libdar::tools_printf("compression block size is too small, select either zero to disable compression per block or a block size greater or equal to %d", tokens_min_compr_bs)); ret.set_compression_block_size(val); libdar::infinint s_size; libdar::infinint f_s_size; slicing->get_slicing(s_size, f_s_size); ret.set_slicing(s_size, f_s_size); ret.set_crypto_algo(ciphering->get_crypto_algo()); if(ciphering->get_crypto_algo() != libdar::crypto_algo::none) { switch(ciphering->get_crypto_type()) { case html_ciphering::sym: ret.set_crypto_pass(ciphering->get_crypto_pass()); ret.set_iteration_count(ciphering->get_iteration_count()); ret.set_kdf_hash(ciphering->get_kdf_hash()); break; case html_ciphering::asym: ret.set_gnupg_recipients(ciphering->get_gnupg_recipients()); ret.set_gnupg_signatories(ciphering->get_gnupg_signatories()); break; default: throw WEBDAR_BUG; } ret.set_crypto_size(ciphering->get_crypto_size()); ret.set_multi_threaded_crypto(ciphering->get_multi_threaded_crypto()); } return ret; } void html_options_isolate::set_to_webdar_defaults() { clear_json(); delta_sig.set_value_as_bool(true); delta_transfer_mode.set_value_as_bool(false); guichet_entrep.load_from_bibliotheque(bibliotheque::default_config_name); allow_over.set_value_as_bool(true); warn_over.set_value_as_bool(true); sequential_marks.set_value_as_bool(true); hash_algo.set_value(libdar::hash_algo::whirlpool); info_details.set_value_as_bool(true); guichet_slicing.load_from_bibliotheque(bibliotheque::default_config_name); guichet_compr_params.load_from_bibliotheque(bibliotheque::default_config_name); guichet_ciphering.load_from_bibliotheque(bibliotheque::default_config_name); } string html_options_isolate::inherited_get_body_part(const chemin & path, const request & req) { return get_body_part_from_all_children(path, req); } void html_options_isolate::new_css_library_available() { unique_ptr & csslib = lookup_css_library(); if(!csslib) throw WEBDAR_BUG; webdar_css_style::update_library(*csslib); } void html_options_isolate::init() { libdar::archive_options_isolate defaults; delta_sig.set_value_as_bool(defaults.get_delta_signature()); delta_transfer_mode.set_value_as_bool(false); guichet_sig_block_size.clear_json(); guichet_delta_mask.clear_json(); guichet_entrep.clear_json(); allow_over.set_value_as_bool(defaults.get_allow_over()); warn_over.set_value_as_bool(defaults.get_warn_over()); pause.set_value(libdar::deci(defaults.get_pause()).human()); sequential_marks.set_value_as_bool(defaults.get_sequential_marks()); user_comment.set_value(defaults.get_user_comment()); hash_algo.set_value(defaults.get_hash_algo()); execute.set_value(defaults.get_execute()); empty.set_value_as_bool(defaults.get_empty()); repair_mode.set_value_as_bool(defaults.get_repair_mode()); info_details.set_value_as_bool(defaults.get_info_details()); guichet_compr_params.clear_json(); guichet_slicing.clear_json(); guichet_ciphering.clear_json(); } void html_options_isolate::trigger_changed() { if(! ignore_events) act(changed); } webdar-1.0.0/src/html_form_overwrite_base_criterium.cpp0000644000175000017520000002375715036443536020373 00000000000000/*********************************************************************/ // webdar - a web server and interface program to libdar // Copyright (C) 2013-2025 Denis Corbin // // This file is part of Webdar // // Webdar is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // Webdar is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Webdar. If not, see // //---- // to contact the author: dar.linux@free.fr /*********************************************************************/ // C system header files #include "my_config.h" extern "C" { } // C++ system header files #include // webdar headers #include "tooltip_messages.hpp" // #include "html_form_overwrite_base_criterium.hpp" using namespace std; const string html_form_overwrite_base_criterium::changed = "hfobc_changed"; html_form_overwrite_base_criterium::html_form_overwrite_base_criterium(): crit_fs(""), negate("Not", html_form_input::check, "", "", ""), invert("Invert roles", html_form_input::check, "", "", ""), base("Criterium"), date("Date"), hourshift("Hourshift", html_form_input::number, "0", "5", ""), trigger_change(false) { // components setup base.add_choice(crit_in_place_is_inode, crit_in_place_is_inode); base.add_choice(crit_in_place_is_dir, crit_in_place_is_dir); base.add_choice(crit_in_place_is_file, crit_in_place_is_file); base.add_choice(crit_in_place_is_hardlinked_inode, crit_in_place_is_hardlinked_inode); base.add_choice(crit_in_place_is_new_hardlinked_inode, crit_in_place_is_new_hardlinked_inode); base.add_choice(crit_in_place_data_more_recent, crit_in_place_data_more_recent); base.add_choice(crit_in_place_data_more_recent_or_equal_to, crit_in_place_data_more_recent_or_equal_to); base.add_choice(crit_in_place_data_bigger, crit_in_place_data_bigger); base.add_choice(crit_in_place_data_saved, crit_in_place_data_saved); base.add_choice(crit_in_place_data_dirty, crit_in_place_data_dirty); base.add_choice(crit_in_place_data_sparse, crit_in_place_data_sparse); base.add_choice(crit_in_place_has_delta_sig, crit_in_place_has_delta_sig); base.add_choice(crit_same_inode_data, crit_same_inode_data); base.add_choice(crit_in_place_EA_present, crit_in_place_EA_present); base.add_choice(crit_in_place_EA_more_recent, crit_in_place_EA_more_recent); base.add_choice(crit_in_place_EA_more_recent_or_equal_to, crit_in_place_EA_more_recent_or_equal_to); base.add_choice(crit_in_place_more_EA, crit_in_place_more_EA); base.add_choice(crit_in_place_EA_bigger, crit_in_place_EA_bigger); base.add_choice(crit_in_place_EA_saved, crit_in_place_EA_saved); base.add_choice(crit_same_type, crit_same_type); hourshift.set_range(0, 24); // adoption tree crit_fs.adopt(&negate); crit_fs.adopt(&invert); crit_fs.adopt(&base); crit_fs.adopt(&date); crit_fs.adopt(&hourshift); adopt(&crit_fs); // events register_name(changed); negate.record_actor_on_event(this, html_form_input::changed); invert.record_actor_on_event(this, html_form_input::changed); base.record_actor_on_event(this, html_form_select::changed); date.record_actor_on_event(this, html_datetime::changed); hourshift.record_actor_on_event(this, html_form_input::changed); // set default visibility on_event(html_form_select::changed); // css // tooltips negate.set_tooltip(TOOLTIP_HFOBC_NEGATE); invert.set_tooltip(TOOLTIP_HFOBC_INVERT); base.set_tooltip(TOOLTIP_HFOBC_BASE); } unique_ptr html_form_overwrite_base_criterium::get_overwriting_criterium() const { unique_ptr ret; if(base.get_selected_id() == crit_in_place_is_inode) ret.reset(new (nothrow) libdar::crit_in_place_is_inode()); else if(base.get_selected_id() == crit_in_place_is_dir) ret.reset(new (nothrow) libdar::crit_in_place_is_dir()); else if(base.get_selected_id() == crit_in_place_is_file) ret.reset(new (nothrow) libdar::crit_in_place_is_file()); else if(base.get_selected_id() == crit_in_place_is_hardlinked_inode) ret.reset(new (nothrow) libdar::crit_in_place_is_hardlinked_inode()); else if(base.get_selected_id() == crit_in_place_is_new_hardlinked_inode) ret.reset(new (nothrow) libdar::crit_in_place_is_new_hardlinked_inode()); else if(base.get_selected_id() == crit_in_place_data_more_recent) ret.reset(new (nothrow) libdar::crit_in_place_data_more_recent(libdar::deci(hourshift.get_value()).computer())); else if(base.get_selected_id() == crit_in_place_data_more_recent_or_equal_to) ret.reset(new (nothrow) libdar::crit_in_place_data_more_recent_or_equal_to(date.get_value(), libdar::deci(hourshift.get_value()).computer())); else if(base.get_selected_id() == crit_in_place_data_bigger) ret.reset(new (nothrow) libdar::crit_in_place_data_bigger()); else if(base.get_selected_id() == crit_in_place_data_saved) ret.reset(new (nothrow) libdar::crit_in_place_data_saved()); else if(base.get_selected_id() == crit_in_place_data_dirty) ret.reset(new (nothrow) libdar::crit_in_place_data_dirty()); else if(base.get_selected_id() == crit_in_place_data_sparse) ret.reset(new (nothrow) libdar::crit_in_place_data_sparse()); else if(base.get_selected_id() == crit_in_place_has_delta_sig) ret.reset(new (nothrow) libdar::crit_in_place_has_delta_sig()); else if(base.get_selected_id() == crit_same_inode_data) ret.reset(new (nothrow) libdar::crit_same_inode_data()); else if(base.get_selected_id() == crit_in_place_EA_present) ret.reset(new (nothrow) libdar::crit_in_place_EA_present()); else if(base.get_selected_id() == crit_in_place_EA_more_recent) ret.reset(new (nothrow) libdar::crit_in_place_EA_more_recent(libdar::deci(hourshift.get_value()).computer())); else if(base.get_selected_id() == crit_in_place_EA_more_recent_or_equal_to) ret.reset(new (nothrow) libdar::crit_in_place_EA_more_recent_or_equal_to(date.get_value(), libdar::deci(hourshift.get_value()).computer())); else if(base.get_selected_id() == crit_in_place_more_EA) ret.reset(new (nothrow) libdar::crit_in_place_more_EA()); else if(base.get_selected_id() == crit_in_place_EA_bigger) ret.reset(new (nothrow) libdar::crit_in_place_EA_bigger()); else if(base.get_selected_id() == crit_in_place_EA_saved) ret.reset(new (nothrow) libdar::crit_in_place_EA_saved()); else if(base.get_selected_id() == crit_same_type) ret.reset(new (nothrow) libdar::crit_same_type()); else throw WEBDAR_BUG; if(!ret) throw exception_memory(); if(invert.get_value_as_bool()) // "Invert role" checkbox is checked { ret.reset(new (nothrow) libdar::crit_invert(*ret)); if(!ret) throw exception_memory(); } if(negate.get_value_as_bool()) // "Not" checkbox is checked { ret.reset(new (nothrow) libdar::crit_not(*ret)); if(!ret) throw exception_memory(); } return ret; } void html_form_overwrite_base_criterium::load_json(const json & source) { trigger_change = false; try { unsigned int version; string class_id; json config = unwrap_config_from_json_header(source, version, class_id); if(class_id != myclass_id) throw exception_range(libdar::tools_printf("Unexpected class_id in json data, found %s while expecting %s", class_id.c_str(), myclass_id)); if(version > format_version) throw exception_range(libdar::tools_printf("Json format version too hight for %s, upgrade your webdar software", myclass_id)); negate.set_value_as_bool(config.at(jlabel_negate)); invert.set_value_as_bool(config.at(jlabel_invert)); base.set_selected_id_with_warning(config.at(jlabel_base), jlabel_base); date.set_value(libdar::deci(config.at(jlabel_date)).computer()); hourshift.set_value_as_int(config.at(jlabel_hourshift)); } catch(json::exception & e) { throw exception_json(libdar::tools_printf("Error loading %s config", myclass_id), e); } if(trigger_change) act(changed); } json html_form_overwrite_base_criterium::save_json() const { json config; config[jlabel_negate] = negate.get_value_as_bool(); config[jlabel_invert] = invert.get_value_as_bool(); config[jlabel_base] = base.get_selected_id(); config[jlabel_date] = libdar::deci(date.get_value()).human(); config[jlabel_hourshift] = hourshift.get_value_as_int(); return wrap_config_with_json_header(format_version, myclass_id, config); } void html_form_overwrite_base_criterium::clear_json() { trigger_change = false; negate.set_value_as_bool(false); invert.set_value_as_bool(false); base.set_selected_num(0); date.set_value(0); hourshift.set_value_as_int(0); if(trigger_change) act(changed); } void html_form_overwrite_base_criterium::on_event(const string & event_name) { if(event_name == html_form_select::changed) { if(base.get_selected_id() == "crit_in_place_data_more_recent_or_equal_to" || base.get_selected_id() == "crit_in_place_EA_more_recent_or_equal_to") { date.set_visible(true); hourshift.set_visible(true); } else { date.set_visible(false); hourshift.set_visible(false); } trigger_change = true; } else if(event_name == html_form_input::changed || event_name == html_datetime::changed) { trigger_change = true; } else throw WEBDAR_BUG; } string html_form_overwrite_base_criterium::inherited_get_body_part(const chemin & path, const request & req) { string ret; trigger_change = false; ret = get_body_part_from_all_children(path, req); if(trigger_change) act(changed); return ret; } webdar-1.0.0/src/html_form_overwrite_base_criterium.hpp0000644000175000017520000001622514775734057020402 00000000000000/*********************************************************************/ // webdar - a web server and interface program to libdar // Copyright (C) 2013-2025 Denis Corbin // // This file is part of Webdar // // Webdar is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // Webdar is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Webdar. If not, see // //---- // to contact the author: dar.linux@free.fr /*********************************************************************/ #ifndef HTML_FORM_OVERWRITE_BASE_CRITERIUM_HPP #define HTML_FORM_OVERWRITE_BASE_CRITERIUM_HPP // C system header files #include "my_config.h" extern "C" { } // C++ system header files // webdar headers #include "html_overwrite_criterium.hpp" #include "actor.hpp" #include "body_builder.hpp" #include "html_form_input.hpp" #include "html_datetime.hpp" #include "html_form_select.hpp" #include "html_form_fieldset.hpp" #include "jsoner.hpp" #include "events.hpp" /// html component to be adopted by an html_form that implements atomic/base actions for overwriting policies class html_form_overwrite_base_criterium: public html_overwrite_criterium, public actor, public jsoner, public events { public: // events static const std::string changed; // base modes for see set_mode() static constexpr const char* crit_in_place_is_inode = "in place entry is an inode"; static constexpr const char* crit_in_place_is_dir = "in place entry is a directory"; static constexpr const char* crit_in_place_is_file = "in place entry is a plain file"; static constexpr const char* crit_in_place_is_hardlinked_inode = "in place entry is a hard linked inode"; static constexpr const char* crit_in_place_is_new_hardlinked_inode = "in place entry is a hard linked inode we meet for the first time"; static constexpr const char* crit_in_place_data_more_recent = "in place inode has more recent data"; static constexpr const char* crit_in_place_data_more_recent_or_equal_to = "in place inode a data more recent than or equal to: "; static constexpr const char* crit_in_place_data_bigger = "both are plain files and in place one is bigger file"; static constexpr const char* crit_in_place_data_saved = "in place has its data saved or is not an inode"; static constexpr const char* crit_in_place_data_dirty = "in place entry is a dirty file"; static constexpr const char* crit_in_place_data_sparse = "in place entry is a sparse file"; static constexpr const char* crit_in_place_has_delta_sig = "in place entry has a delta signature attached"; static constexpr const char* crit_same_inode_data = "both entry are of the same type and have the same metadata"; static constexpr const char* crit_in_place_EA_present = "in place entry has Extended Attributes"; static constexpr const char* crit_in_place_EA_more_recent = "in place entry has more recent Extended Attributes"; static constexpr const char* crit_in_place_EA_more_recent_or_equal_to = "in place entry has EA more recent than or equal to:"; static constexpr const char* crit_in_place_more_EA = "in place entry has more Extended Attributes"; static constexpr const char* crit_in_place_EA_bigger = "in place entry has bigger Extended Attributes"; static constexpr const char* crit_in_place_EA_saved = "in place entry has Extended Attributes saved"; static constexpr const char* crit_same_type = "both entries are of the same type"; html_form_overwrite_base_criterium(); html_form_overwrite_base_criterium(const html_form_overwrite_base_criterium & ref) = delete; html_form_overwrite_base_criterium(html_form_overwrite_base_criterium && ref) noexcept = delete; html_form_overwrite_base_criterium & operator = (const html_form_overwrite_base_criterium & ref) = delete; html_form_overwrite_base_criterium & operator = (html_form_overwrite_base_criterium && ref) noexcept = delete; ~html_form_overwrite_base_criterium() = default; /// set the base mode (use crit_* static char* above) /// \note this call is to programmatically setup a component, normal way to setup is from Web user interaction void set_mode(const std::string & mode) { base.set_selected_id(mode); }; /// set invert value /// \note this call is to programmatically setup a component, normal way to setup is from Web user interaction void set_invert(bool val) { invert.set_value_as_bool(val); }; /// set invert value /// \note this call is to programmatically setup a component, normal way to setup is from Web user interaction void set_negate(bool val) { negate.set_value_as_bool(val); }; /// set date /// \note this call is to programmatically setup a component, normal way to setup is from Web user interaction void set_date(const libdar::infinint & val) { date.set_value(val); }; /// set hourshift /// \note this call is to programmatically setup a component, normal way to setup is from Web user interaction void set_hourshift(unsigned int shift) { hourshift.set_value_as_int(shift); }; /// obtain the crit_base_criterium object for libdar option virtual std::unique_ptr get_overwriting_criterium() const override; /// inherited from jsoner virtual void load_json(const json & source) override; /// inherited from jsoner virtual json save_json() const override; /// inherited from jsoner virtual void clear_json() override; /// inherited from actor virtual void on_event(const std::string & event_name) override; protected: /// inherited from body_builder from html_overwrite_criterium virtual std::string inherited_get_body_part(const chemin & path, const request & req) override; private: bool trigger_change; ///< whether a change occurred in subcomponent during a inherited_get_body_part_evaluation, json_load or json_clear html_form_fieldset crit_fs; ///< wrapps all html form components of this class html_form_input negate; ///< checkbox html_form_input invert; ///< checkbox html_form_select base; ///< selection of the base criterium html_datetime date; ///< for date related criterium html_form_input hourshift; ///< for date related criterium static constexpr const unsigned int format_version = 1; static constexpr const char* myclass_id = "html_form_overwrite_base_criterium"; static constexpr const char* jlabel_negate = "negate"; static constexpr const char* jlabel_invert = "invert"; static constexpr const char* jlabel_base = "base"; static constexpr const char* jlabel_date = "date"; static constexpr const char* jlabel_hourshift = "hourshift"; }; #endif webdar-1.0.0/src/html_overwrite_criterium.hpp0000644000175000017520000000421114775734003016344 00000000000000/*********************************************************************/ // webdar - a web server and interface program to libdar // Copyright (C) 2013-2025 Denis Corbin // // This file is part of Webdar // // Webdar is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // Webdar is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Webdar. If not, see // //---- // to contact the author: dar.linux@free.fr /*********************************************************************/ #ifndef HTML_OVERWRITE_CRITERIUM_HPP #define HTML_OVERWRITE_CRITERIUM_HPP // C system header files #include "my_config.h" extern "C" { } // C++ system header files #include // webdar headers #include "body_builder.hpp" /// html ancestor class used for the criterium in html_form_overwrite_conditional_action class /// \note this class is a pure virtual class and has no link with html_form class unlike /// its inherited classes (html_form_overwrite_base_criterium and /// html_form_overwrite_combining_criterium, for example). class html_overwrite_criterium : public body_builder { public: html_overwrite_criterium() {}; html_overwrite_criterium(const html_overwrite_criterium & ref) = default; html_overwrite_criterium(html_overwrite_criterium && ref) noexcept = delete; html_overwrite_criterium & operator = (const html_overwrite_criterium & ref) = default; html_overwrite_criterium & operator = (html_overwrite_criterium && ref) noexcept = delete; ~html_overwrite_criterium() = default; /// obtain the crit_criterium object for libdar option virtual std::unique_ptr get_overwriting_criterium() const = 0; }; #endif webdar-1.0.0/src/connexion.cpp0000644000175000017520000000706215045112166013200 00000000000000/*********************************************************************/ // webdar - a web server and interface program to libdar // Copyright (C) 2013-2025 Denis Corbin // // This file is part of Webdar // // Webdar is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // Webdar is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Webdar. If not, see // //---- // to contact the author: dar.linux@free.fr /*********************************************************************/ // C system header files #include "my_config.h" extern "C" { #if HAVE_ERRNO_H #include #endif #if HAVE_LIMITS_H #include #endif #if HAVE_STRING_H #include #endif #if HAVE_SYS_TYPES_H #include #endif #if HAVE_SYS_SOCKET_H #include #endif } // webdar headers #include "connexion.hpp" using namespace std; connexion::connexion(int fd, const string & peerip, unsigned int peerport): proto_connexion(peerip, peerport) { filedesc = fd; } connexion::~connexion() { try { fermeture(); } catch(...) { // ignore any exception due to // destructor context } } unsigned int connexion::read_impl(char *a, unsigned int size, bool blocking) { ssize_t lu = 0; int flag = blocking ? 0 : MSG_DONTWAIT; if(get_status() != connected) throw WEBDAR_BUG; lu = recv(filedesc, a, size, flag); if(lu == 0) { fermeture(); throw exception_range("reached end of data on socket"); } if(lu < 0) { switch(errno) { case EINTR: // system call interrupted by a signal throw exception_signal(); case EAGAIN: // means no data avaiable in non-blocking mode if(blocking) throw WEBDAR_BUG; else lu = 0; break; default: throw exception_system("Error met while receiving data: ", errno); } } return (unsigned int)lu; } void connexion::write_impl(const char *a, unsigned int size) { unsigned int wrote = 0; ssize_t tmp; if(get_status() != connected) throw WEBDAR_BUG; while(wrote < size) { tmp = send(filedesc, (void *)(a + wrote), size - wrote, MSG_NOSIGNAL); if(tmp < 0) { switch(errno) { case EPIPE: // the connection is broken / closed by the other end fermeture(); throw exception_system("Error met while sending data: ", errno); break; case EINTR: break; default: throw exception_system("Error met while sending data: ", errno); } } else wrote += tmp; } } void connexion::fermeture() { if(get_status() == connected) { int shuted; int errnono; if(filedesc < 0) throw WEBDAR_BUG; shuted = shutdown(filedesc, SHUT_RDWR); if(shuted != 0) errnono = errno; close(filedesc); filedesc = -1; set_status(not_connected); if(shuted != 0) throw exception_system("failed shutting down the socket", errnono); } } webdar-1.0.0/src/html_bibliotheque.hpp0000644000175000017520000002146715044143007014707 00000000000000/*********************************************************************/ // webdar - a web server and interface program to libdar // Copyright (C) 2013-2025 Denis Corbin // // This file is part of Webdar // // Webdar is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // Webdar is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Webdar. If not, see // //---- // to contact the author: dar.linux@free.fr /*********************************************************************/ #ifndef html_bibliotheque_HPP #define html_bibliotheque_HPP // C system header files #include "my_config.h" extern "C" { } // C++ system header files // webdar headers #include "body_builder.hpp" #include "actor.hpp" #include "events.hpp" #include "html_tabs.hpp" #include "html_form_input_file.hpp" #include "html_double_button.hpp" #include "html_form_fieldset.hpp" #include "html_form.hpp" #include "bibliotheque.hpp" #include "arriere_boutique.hpp" #include "html_entrepot_landing.hpp" #include "html_mask_form_filename.hpp" #include "html_mask_form_path.hpp" #include "html_compression_params.hpp" #include "html_slicing.hpp" #include "html_ciphering.hpp" #include "html_form_sig_block_size.hpp" #include "html_form_overwrite_action.hpp" #include "html_options_test.hpp" #include "html_options_compare.hpp" #include "html_options_read.hpp" #include "html_options_create.hpp" #include "html_options_isolate.hpp" #include "html_options_merge.hpp" #include "html_options_repair.hpp" #include "html_options_extract.hpp" #include "html_yes_no_box.hpp" /// class html_bibliotheque provide graphical mean to manipulate a bibliotheque object /// class html_bibliotheque let user (thanks to its web interface) to: /// - define, update, remove components to the bibliotheque (per category) /// - save/load, upload/download the whole bibliotheque to file or throw the http(s) channel /// /// \note the downloading process is the following: the download button triggers an event /// which drives the html_bibiliotheque to trigger its event_download event. But the download /// button has a link that lead the browser to save to file the body of the next http response. /// /** \verbatim +----------------------------------------------+ |+---------------------
------------+| || +--------------------------+---+|| || filename | | ||| || +------------------------------------+---+|| || || |+--------------------------------------------+| | | |+------+ +------+ | || save | | load | | |+------+ +------+ | +------------------------------------------------------+ +----------------------------------------------+ | +---- -----------+ | | | file selector | | | +----------------+ | +------------------------------------------------------+ | +----------------+ | | | Download | | | +----------------+ | +------------------------------------------------------+ | +----------------+ | | | clear configs | | | +----------------+ | +------------------------------------------------------+ \endverbatim **/ class html_bibliotheque: public body_builder, public actor, public events { public: static const std::string event_download; html_bibliotheque(std::shared_ptr & ptr, const std::string & bib_path); html_bibliotheque(const html_bibliotheque & ref) = delete; html_bibliotheque(html_bibliotheque && ref) noexcept = delete; html_bibliotheque & operator = (const html_bibliotheque & ref) = delete; html_bibliotheque & operator = (html_bibliotheque && ref) noexcept = delete; ~html_bibliotheque() = default; /// inherited from body_builder virtual void on_event(const std::string & event_name) override; protected: /// inherited from body_builder virtual std::string inherited_get_body_part(const chemin & path, const request & req) override; /// inherited from body_builder virtual void new_css_library_available() override; private: bool expect_upload; std::shared_ptr biblio; std::unique_ptr > ab_entrepot; std::unique_ptr > ab_filemask; html_text absolute_path_warning; std::unique_ptr > ab_pathmask; std::unique_ptr > ab_compr; std::unique_ptr > ab_slicing; std::unique_ptr > ab_ciphering; std::unique_ptr > ab_delta_sig; std::unique_ptr > ab_over_policy; std::unique_ptr > ab_options_test; std::unique_ptr > ab_options_compare; std::unique_ptr > ab_options_read; std::unique_ptr > ab_options_create; std::unique_ptr > ab_options_isolate; std::unique_ptr > ab_options_merge; std::unique_ptr > ab_options_repair; std::unique_ptr > ab_options_extract; html_tabs tabs; html_text intro; html_form_fieldset top_fs; html_form form; html_form_fieldset filename_fs; html_form_input_file filename; html_form_input autosave; html_double_button save; html_double_button load; html_form_fieldset bot_fs; html_form upload_form; html_form_input upload_file; html_form_fieldset down_fs; html_double_button download; html_form_fieldset clear_fs; html_double_button clear_conf; html_double_button generate_defaults; html_text ok_loaded; html_text ok_saved; html_text ok_uploaded; html_text ok_cleared; html_text nok_message; html_div statusbar; html_text saved_status; html_text unsaved_status; enum { context_undefined, context_clear_conf, context_load_conf, context_upload_conf } q_context; html_yes_no_box question; void set_saved_status(); void clear_ok_messages(); void set_default_configs(); void set_default_configs_no_compress(); // called by set_default_configs(), separated method for better readability void set_full_from_diff(); // called by set_default_configs(), separated method for better readability static constexpr const char* tab_main = "main"; static constexpr const char* tab_repo = "repo"; static constexpr const char* tab_filemask = "filemask"; static constexpr const char* tab_pathmask = "pathmask"; static constexpr const char* tab_compression = "compression"; static constexpr const char* tab_slicing = "slicing"; static constexpr const char* tab_ciphering = "ciphering"; static constexpr const char* tab_delta_sig = "delta-sig"; static constexpr const char* tab_over_policy = "over-policy"; static constexpr const char* tab_options_test = "options-test"; static constexpr const char* tab_options_compare = "options-compare"; static constexpr const char* tab_options_read = "options-read"; static constexpr const char* tab_options_create = "options-create"; static constexpr const char* tab_options_isolate = "options-isolate"; static constexpr const char* tab_options_merge = "options-merge"; static constexpr const char* tab_options_repair = "options-repair"; static constexpr const char* tab_options_extract = "options-extract"; static constexpr const char* event_save = "save"; static constexpr const char* event_load = "load"; static constexpr const char* event_clear = "clear"; static constexpr const char* event_defaults = "defaults"; static constexpr const char* css_statusbar = "html_biblio_bar"; }; #endif webdar-1.0.0/src/guichet.hpp0000644000175000017520000002255514775733051012654 00000000000000/*********************************************************************/ // webdar - a web server and interface program to libdar // Copyright (C) 2013-2025 Denis Corbin // // This file is part of Webdar // // Webdar is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // Webdar is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Webdar. If not, see // //---- // to contact the author: dar.linux@free.fr /*********************************************************************/ #ifndef GUICHET_HPP #define GUICHET_HPP #include "my_config.h" // C system header files extern "C" { } // C++ system header files // webdar headers #include "body_builder.hpp" #include "jsoner.hpp" #include "bibliotheque.hpp" #include "bibliotheque_subconfig.hpp" #include "actor.hpp" #include "html_form.hpp" #include "html_form_fieldset.hpp" #include "html_form_select.hpp" #include "html_double_button.hpp" #include "html_form_input.hpp" #include "html_text.hpp" /// class guichet let one fetch config from a bibliotheque, save as or setup manually for a given component type /// the given component is adopted by the guichet and is shown only in manual mode, else it is hidden, but /// it always updated by the config from the bibliotheque and used to fetch libdar formated options set. /// The guichet object adds a drop-down list of available configurations for that objects (found in the /// provided bibliotheque), beside several buttons: /// - edit : which lead the component to show and the dropbox to be set to manual mode /// - save-as : in manual mode to save the current configuration as a new one in the bibliotheque /// (the save-as button is associated to a box to provide a name) /** \verbatim +-------------------------------------------+ | +----------------------------------+ | | | list (incl. "manual")| | | +----------------------------------+ | | | +-----------------------------------------+ (to_adopt object show only in "manual" mode) +------------------+ | < to_adopt> | | | +-----------------------------------------+ (edit shows if non-"manual" choice is selected here above) (clear shows only in "manual" mode) +---------------+ +---------------+ | edit config | | clear config | +---------------+ +---------------+ (the below form only shows if to_adopt is visible ("manual" mode)) +-----------------------------------+ | +-------------------------+ | | configuration name | | | | +-------------------------+ | | | +----------------------------------------+ \endverbatim **/ class guichet: public body_builder, public jsoner, public bibliotheque_subconfig, public actor { public: /// constructor /// \param[in] subcomponent has to be set to true when it is used as indirect (or direct) subcomponent /// of another mask object (for example another guichet object) and used to refer existing configurations /// from a bibliotheque. This avoids the form to be used, the edit button to show, and other cosmetic things. /// By oposition, it should be left to false, when used directly in non-configuration components. guichet(bool subcomponent = false); guichet(const guichet & ref) = delete; guichet(guichet && ref) noexcept = delete; guichet & operator = (const guichet & ref) = delete; guichet & operator = (guichet && ref) noexcept = delete; virtual ~guichet(); /// mandatory call to provide the object to adopt and use to display configurations /// \param[in] ptr the bibliotheque object where to fetch from configurations /// \param[in] cat the category for configurations to use in the bibliotheque /// \param[in] to_adopt a body_builder and a jsoner inherited object to adopt and apply configurations to. /// Important: the pointed to object by to_adopt is not expected to be changed during the /// lifetime of this guichet object! /// \param[in] add_form_around adopt to_adopt in a form in turn adopted by "this" (needed for /// to update components manually when they do not include a form themselves). /// \note the to_adopt pointed to object is interrogated directly by owner of guichet to fetch the /// specific object properties, guichet only uses its jsoner interface, it is also expected to /// be a body_builder inherited object for it can be adopted by "this", and of course it must /// not have already been adopted. This object will not be visible when using an existing /// configuration in the bibliotheque, or visible when setup manually. /// \note the object that owns the guichet should not fetch json stuff from the to_adopt object /// but should pass through this guichet object to either get the to_adopted json config (wrapped /// with some metadata provided by guichet) or a guichet structure pointing to the configuration /// name to use in the bibliotheque. void set_child(const std::shared_ptr & ptr, bibliotheque::category cat, const std::shared_ptr & to_adopt, bool add_form_around); /// inherited from jsoner (used when this object is used as subconfig of another object) virtual void load_json(const json & source) override; /// inherited from jsoner (used when this object is used as subconfig of another object) virtual json save_json() const override; /// inherited from jsoner (used when this object is used as subconfig of another object) virtual void clear_json() override; /// inherited from bibliotheque_subconfig virtual bibliotheque::using_set get_using_set() const override; /// inherited from actor virtual void on_event(const std::string & event_name) override; /// load a config of given name (in the category defined by set_child)* /// \note exception thrown if the requested configuration does not exist void load_from_bibliotheque(const std::string & name) { select.set_selected_id(name); }; /// inherited from body_builder virtual void bind_to_anchor(const std::string & val) override; protected: /// inherited from body_builder virtual std::string inherited_get_body_part(const chemin & path, const request & req) override; /// inherited from body_builder virtual void new_css_library_available() override; private: std::string anchor_to; bibliotheque::category categ; std::shared_ptr biblio; std::shared_ptr adopted; jsoner* adopted_jsoner; bibliotheque_subconfig* adopted_subconfig; ///< may be null if adopted does not implement bibliotheque_subconfig interface bool ignore_events; body_builder* adopted_frame; ///< which wrapper object to change visibility of bool clear_adopted; ///< used to differentiate manual-mode selection (false) from clear button selection (true) bool is_sub; ///< true when guichet is used inside a config, false when it is the top level of a config recordable into a bibliotheque std::string currently_locked; ///< name of the config we locked in the bibliotheque for the categ category (empty string = no lock) html_div box; html_form select_form; html_form_fieldset select_fs; html_form_select select; html_form around_adopted; html_form_fieldset around_adopted_fs; html_double_button edit; html_double_button clear; html_form saveas_form; html_text saveas_text; html_form_fieldset saveas_fs; html_form_input saveas_name; void update_selected(); void set_adopted(); void set_visibility(); void check_adopted() const { if(!adopted) throw WEBDAR_BUG; }; static constexpr const char* event_select = "select"; static constexpr const char* event_edit = "edit"; static constexpr const char* event_clear = "clear"; static constexpr const char* event_saveas = "saveas"; static constexpr const unsigned int format_version = 1; static constexpr const char* myclass_id = "guichet"; static constexpr const char* class_id = "guichet"; static constexpr const char* jlabel_mode = "manual-mode"; // boolean (either categ+name or config) static constexpr const char* jlabel_categ = "category"; // string: config category static constexpr const char* jlabel_name = "configname"; // string: config name static constexpr const char* jlabel_conf = "config"; ; // json; object configuration static constexpr const char* css_left_margin = "guichet_left_margin"; static constexpr const char* css_below_margin = "guichet_below_margin"; static constexpr const char* css_above_margin = "guichet_above_margin"; static constexpr const char* css_border_left = "guichet_border_left"; static constexpr const char* fs_title_subcomp = "Matches configuration named"; }; #endif webdar-1.0.0/src/static_object.cpp0000644000175000017520000000513214773727247014034 00000000000000/*********************************************************************/ // webdar - a web server and interface program to libdar // Copyright (C) 2013-2025 Denis Corbin // // This file is part of Webdar // // Webdar is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // Webdar is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Webdar. If not, see // //---- // to contact the author: dar.linux@free.fr /*********************************************************************/ // C system header files #include "my_config.h" extern "C" { } // C++ system header files // webdar headers #include "tokens.hpp" #include "base64.hpp" // #include "static_object.hpp" using namespace std; answer static_object_text::give_answer() const { answer ret; ret.set_status(STATUS_CODE_OK); ret.set_reason("ok"); ret.set_attribute(HDR_CONTENT_TYPE, "text/plain"); ret.add_body(data); // recreating the answer at each request consume CPU cycles // at the advantage of avoiding permanently duplicating // text data in memory (present once as static data in data segment // and a second time in the answer object as std::string data, but // here this second time is temporary for the duration of the request return ret; } static_object_jpeg::static_object_jpeg(const char *base_64) { unsigned int num = strlen(base_64); unsigned int capa = ((num+1)/4)*3; if(num % 4 != 0) throw WEBDAR_BUG; if(capa > data.max_size()) throw exception_range("maximum std::string size exceeded"); else data.reserve(capa); data = base64().decode(base_64); } answer static_object_jpeg::give_answer() const { answer ret; ret.set_status(STATUS_CODE_OK); ret.set_reason("ok"); ret.set_attribute(HDR_CONTENT_TYPE, "image/jpeg"); ret.add_body(data); // recreating the answer at each request consume CPU cycles // at the advantage of avoiding permanently duplicating // text data in memory (present once as static data in data segment // and a second time in the answer object as std::string data, but // here this second time is temporary for the duration of the request return ret; } webdar-1.0.0/src/html_double_button.cpp0000644000175000017520000000516314773727250015106 00000000000000/*********************************************************************/ // webdar - a web server and interface program to libdar // Copyright (C) 2013-2025 Denis Corbin // // This file is part of Webdar // // Webdar is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // Webdar is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Webdar. If not, see // //---- // to contact the author: dar.linux@free.fr /*********************************************************************/ // C system header files #include "my_config.h" extern "C" { } // C++ system header files // webdar headers // #include "html_double_button.hpp" using namespace std; const string html_double_button::event_one = "evenement_un"; const string html_double_button::event_two = "evenement_deux"; html_double_button::html_double_button(const string & label, const string & x_event_name): one(label, event_one), two(label, event_two), my_event_name(x_event_name) { adopt(&one); adopt(&two); swap(true); register_name(my_event_name); one.record_actor_on_event(this, event_one); two.record_actor_on_event(this, event_two); } void html_double_button::on_event(const string & event_name) { if(event_name == event_one) // event generated by one { if(!one.get_visible()) throw WEBDAR_BUG; // should not occur! swap(false); // making two visible and one hidden } else if(event_name == event_two) // event generated by two { if(!two.get_visible()) throw WEBDAR_BUG; // should not occur! swap(true); // making one visible and two hidden } else throw WEBDAR_BUG; act(my_event_name); // propagate the event } string html_double_button::inherited_get_body_part(const chemin & path, const request & req) { return get_body_part_from_all_children(path, req); } void html_double_button::css_classes_have_changed() { css_class_group myset = get_css_class_group(); one.clear_css_classes(); two.clear_css_classes(); one.add_css_class(myset); two.add_css_class(myset); } void html_double_button::swap(bool show_one) { one.set_visible(show_one); two.set_visible(!show_one); } webdar-1.0.0/src/ssl_connexion.hpp0000644000175000017520000000434314775732431014101 00000000000000/*********************************************************************/ // webdar - a web server and interface program to libdar // Copyright (C) 2013-2025 Denis Corbin // // This file is part of Webdar // // Webdar is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // Webdar is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Webdar. If not, see // //---- // to contact the author: dar.linux@free.fr /*********************************************************************/ #ifndef SSL_CONNEXION_HPP #define SSL_CONNEXION_HPP #include "my_config.h" // C system header files extern "C" { #if HAVE_OPENSSL_SSL_H #include #endif } // C++ system header files #include // webdar headers #include "exceptions.hpp" #include "connexion.hpp" /// provides read/write implementation of a socket object /// \note used for http connections (non ssl/tls connections) class ssl_connexion : public connexion { public: /// constructor: create a new object based on a existing socket filedescriptor ssl_connexion(int fd, SSL_CTX & ctx, const std::string & peerip, unsigned int peerport); /// copy is forbidden, move is allowed ssl_connexion(const ssl_connexion & ref) = delete; ssl_connexion(ssl_connexion && ref) noexcept = delete; ssl_connexion & operator = (const ssl_connexion & ref) = delete; ssl_connexion & operator = (ssl_connexion && ref) noexcept = delete; /// destructor ~ssl_connexion(); protected: /// inherited from proto_connexion virtual void write_impl(const char *a, unsigned int size) override; /// inherited from proto_connexion virtual unsigned int read_impl(char *a, unsigned int size, bool blocking) override; private: SSL *ssl; ///< holds ssl status }; #endif webdar-1.0.0/src/html_dir_tree.hpp0000644000175000017520000001313314773727250014037 00000000000000/*********************************************************************/ // webdar - a web server and interface program to libdar // Copyright (C) 2013-2025 Denis Corbin // // This file is part of Webdar // // Webdar is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // Webdar is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Webdar. If not, see // //---- // to contact the author: dar.linux@free.fr /*********************************************************************/ #ifndef HTML_DIR_TREE_HPP #define HTML_DIR_TREE_HPP // C system header files #include "my_config.h" extern "C" { } // C++ system header files #include // webdar headers #include "html_div.hpp" #include "events.hpp" #include "chemin.hpp" #include "archive_init_list.hpp" #include "html_button.hpp" #include "html_focus.hpp" #include "html_table.hpp" /// class html_dir_tree show a directory content read from an existing dar archive /// this component is composed of a left button to shrink/expend the directory it points at /// followed by the directory name, followed on the right by the directory content if /// the object is expanded. The directory content read from the dar archive, when expanded /// it created child html_dir_tree for any direct subdirectory it contains which are not /// expanded by default. /// This object is a component used by html_listing_page class /** \verbatim . . . . . . . +-------------------- ----------------+ . . | +--+ +------------------------------------+| . . . . . . . . . . . . . . . . . . . . . | |()| | <name> || | +--+ +------------------------------------+| . . <set_drop_content() give object>. . . +--------------------------------------------+ . +-------<content> -------------------+ +----------------- <for subdirs> ------------+ . | Filename | Data | Ea.. | |. | | . +----------+------+--------+---------+ | | . | | | | |. | | . +----------+------+--------+---------+ | | . | | | | |. +--------------------------------------------+ . . . . . . . . . . . . . . . . . . . . . () is either "shrink", "expand" of "nosubdir" depending on the current path type and shrink/expansion status when it is a directory \endverbatim **/ class html_dir_tree: public html_div, public actor { public: html_dir_tree(const std::string & chemin); // minimal constructeur, must use set_source() ASAP html_dir_tree(const archive_init_list * ref, const std::string & chemin); html_dir_tree(const html_dir_tree & ref) = delete; html_dir_tree(html_dir_tree && ref) noexcept = delete; html_dir_tree & operator = (const html_dir_tree & ref) = delete; html_dir_tree & operator = (html_dir_tree && ref) noexcept = delete; ~html_dir_tree() { clear(); }; /// clear information learnt from a previously opened archive void clear(); /// where to fetch from archive content void set_source(const archive_init_list *ref); /// where to attach to the archive contents when "this" is selected void set_drop_content(html_focus *ref) { focus_place = ref; }; /// where to write the path when under focus void set_drop_path(html_div *ref) { focus_title = ref; }; /// shrink the directory void go_shrink(); /// expand the directory exposing all its subdirectories void go_expand(); /// show contents in the focus place void go_show() { on_event(event_click); }; /// inherited from actor virtual void on_event(const std::string & event_name) override; protected: /// inherite from html_div virtual std::string inherited_get_body_part(const chemin & path, const request & req) override; // inherited from body_builder virtual void new_css_library_available() override; private: static const std::string event_shrink; static const std::string event_expand; static const std::string event_click; chemin my_path; const archive_init_list *src; bool info_read; bool has_sub; bool visibility_has_changed; //< whether we need to rebuild the body_builder answer std::vector<html_dir_tree *> subdirs; //< subdirectories of the tree // HTML controls html_div line; //< contains shrink/expand/nosubdir buttons + name for alignment html_button shrink; //< alternatively visible button html_button expand; //< alternatively visible button html_button nosubdir; //< "shown" when no subdir exist html_button name; //< name of the directory html_div for_subdirs; //< where take place subdirs html_focus *focus_place; //< where to send contents upon focus html_table contents; //< directory contents html_div *focus_title; //< where to write title of the contents when are under focus void init(const std::string & chemin); void go_init_indent(); void go_hide(); void clear_contents(); }; #endif �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������webdar-1.0.0/src/html_form_input_unit.hpp�����������������������������������������������������������0000644�0001750�0001752�00000013053�15035451522�015450� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*********************************************************************/ // webdar - a web server and interface program to libdar // Copyright (C) 2013-2025 Denis Corbin // // This file is part of Webdar // // Webdar is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // Webdar is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Webdar. If not, see <http://www.gnu.org/licenses/> // //---- // to contact the author: dar.linux@free.fr /*********************************************************************/ #ifndef HTML_FORM_INPUT_UNIT_HPP #define HTML_FORM_INPUT_UNIT_HPP // C system header files #include "my_config.h" extern "C" { } // C++ system header files #include <dar/libdar.hpp> // webdar headers #include "html_form_input.hpp" #include "html_size_unit.hpp" #include "events.hpp" #include "actor.hpp" #include "html_div.hpp" /// class html_form_input_unit implements HTML input::number feature with added unit box /// it is expected to be adopted by an html_form directory /// or through an html_form_fieldset, to provide a mean for /// user to provide information. class html_form_input_unit : public html_div, public events, public actor { public: // default event name used to signal component change static const std::string changed; html_form_input_unit(const std::string & label, const libdar::infinint & initial_value, const std::string & size); html_form_input_unit(const html_form_input_unit & ref) = delete; html_form_input_unit(html_form_input_unit && ref) noexcept = delete; html_form_input_unit & operator = (const html_form_input_unit & ref) = delete; html_form_input_unit & operator = (html_form_input_unit && ref) noexcept = delete; ~html_form_input_unit() = default; /// set both min and max /// \note the condition must be respected 0 <= min < max void set_range(const libdar::infinint & x_min, const libdar::infinint & x_max); /// set min, min cannot be negative nor less than max if set void set_min_only(const libdar::infinint & x_min); /// set the max value (by default there is no maximum constraint applied /// \note setting this to zero disable max value void set_max_only(const libdar::infinint & x_max); /// apply css to the box (text box if checkbox, but not to the label) void box_set_css_class(const std::string & val) { field.box_set_css_class(val); }; /// change the label void change_label(const std::string & label) { field.change_label(label); }; void set_value_as_infinint(const libdar::infinint & x_val); libdar::infinint get_value_as_infinint() const { return val; }; /// get the displayed number value (not taking into account the unit) const std::string & get_raw_value() const { return field.get_value(); }; /// get unit display string const std::string get_unit_string() const { return unit_box.get_string(); }; /// whether the HTML control is enable or disabled void set_enabled(bool val) { field.set_enabled(val); unit_box.set_enabled(val); }; /// change the name of the event generated when this control changes /// \param[in] name must not be an empty string /// \note all actors already recorded on the changed event will be kept /// registered on this new event name. The old event will no more be triggered /// In consequences actor should be aware of the event name change asked to this /// component here. /// \note this call can be used any number of time, all actors will be kept void set_change_event_name(const std::string & name); /// get the event name used when the component changes std::string get_event_name() const { return modif_change.empty()? changed: modif_change; }; /// inherited from actor virtual void on_event(const std::string & event_name) override; /// surfacing the tooltip feature of the input form void set_tooltip(const std::string & val) { field.set_tooltip(val); }; protected: /// inherited from body_builder virtual void new_css_library_available() override; private: bool ignore_events; ///< do not act on received event bool no_act; ///< do not propagate event html_form_input field; html_size_unit unit_box; libdar::infinint val; ///< current absolute value libdar::infinint min; ///< at least zero as we only support positive intergers libdar::infinint max; ///< for max, zero means no maximum std::string modif_change; ///< name of the event "changed" to use, if set to an empty string default behavior is used void my_act() { if(!no_act) act(modif_change.empty() ? changed: modif_change); }; void reduce_val_and_unit(); void set_field_val(); void set_value_to_largest_unit(); void check_min_max_compliance(); /// returns the closest value to val expressed in number of "unit" static libdar::infinint reduce_to_unit(const libdar::infinint & val, const libdar::infinint & unit); /// returns the closest value to val but not less than val expresed in number of "unit" static libdar::infinint reduce_to_unit_above(const libdar::infinint & val, const libdar::infinint & unit); static const std::string css_input; static const std::string css_unit; }; #endif �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������webdar-1.0.0/src/static_object.hpp������������������������������������������������������������������0000644�0001750�0001752�00000005560�14773727250�014040� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*********************************************************************/ // webdar - a web server and interface program to libdar // Copyright (C) 2013-2025 Denis Corbin // // This file is part of Webdar // // Webdar is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // Webdar is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Webdar. If not, see <http://www.gnu.org/licenses/> // //---- // to contact the author: dar.linux@free.fr /*********************************************************************/ #ifndef STATIC_OBJECT_HPP #define STATIC_OBJECT_HPP // C system header files #include "my_config.h" extern "C" { } // C++ system header files // webdar headers #include "answer.hpp" /// common ancestor to all static object, this makes easier to add new object type in the future class static_object { public: static_object() = default; static_object(const static_object & ref) = default; static_object(static_object && ref) noexcept = default; static_object & operator = (const static_object & ref) = default; static_object & operator = (static_object && ref) noexcept = default; virtual ~static_object() {}; virtual answer give_answer() const = 0; }; /// static_object to return plain text as an answer class static_object_text : public static_object { public: static_object_text(const char *text) { data = text; }; static_object_text(const static_object_text & ref) = default; static_object_text(static_object_text && ref) noexcept = default; static_object_text & operator = (const static_object_text & ref) = default; static_object_text & operator = (static_object_text && ref) noexcept = default; ~static_object_text() = default; /// inherited from static_object virtual answer give_answer() const override; private: const char *data; }; /// static_object to return base64 encoded jpegs class static_object_jpeg : public static_object { public: static_object_jpeg(const char *base_64); static_object_jpeg(const static_object_jpeg & ref) = default; static_object_jpeg(static_object_jpeg && ref) noexcept = default; static_object_jpeg & operator = (const static_object_jpeg & ref) = default; static_object_jpeg & operator = (static_object_jpeg && ref) noexcept = default; ~static_object_jpeg() = default; /// inherited from static_object virtual answer give_answer() const override; private: std::string data; }; #endif ������������������������������������������������������������������������������������������������������������������������������������������������webdar-1.0.0/src/html_archive_create.hpp������������������������������������������������������������0000644�0001750�0001752�00000007276�14773727250�015221� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*********************************************************************/ // webdar - a web server and interface program to libdar // Copyright (C) 2013-2025 Denis Corbin // // This file is part of Webdar // // Webdar is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // Webdar is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Webdar. If not, see <http://www.gnu.org/licenses/> // //---- // to contact the author: dar.linux@free.fr /*********************************************************************/ #ifndef HTML_ARCHIVE_CREATE_HPP #define HTML_ARCHIVE_CREATE_HPP // C system header files #include "my_config.h" extern "C" { } // C++ system header files #include <libthreadar/libthreadar.hpp> // webdar headers #include "html_form_input_file.hpp" #include "html_form_fieldset.hpp" #include "html_options_create.hpp" #include "body_builder.hpp" #include "html_derouleur.hpp" #include "actor.hpp" #include "html_libdar_running_popup.hpp" #include "guichet.hpp" /// object providing html user interface component for the user to provide options to create a new archive class html_archive_create: public body_builder, public libthreadar::thread_signal, public actor { public: html_archive_create(); html_archive_create(const html_archive_create & ref) = delete; html_archive_create(html_archive_create && ref) noexcept = delete; html_archive_create & operator = (const html_archive_create & ref) = delete; html_archive_create & operator = (html_archive_create && ref) noexcept = delete; ~html_archive_create() { cancel(); join(); }; /// mandatory call to invoke ASAP after constructor void set_biblio(const std::shared_ptr<bibliotheque> & ptr); const std::string & get_archive_path() const { return sauv_path.get_value(); }; const std::string & get_archive_basename() const; const std::string & get_fs_root() const { return fs_root.get_value(); }; libdar::archive_options_create get_options_create(std::shared_ptr<html_web_user_interaction> dialog) const { return options->get_options(dialog); }; // inherited from actor virtual void on_event(const std::string & event_name) override; protected: /// inherited from body_builder virtual std::string inherited_get_body_part(const chemin & path, const request & req) override; virtual void new_css_library_available() override; /// inherited from libthreadar::thread virtual void inherited_run() override; /// inherited from libthreadar::thread virtual void signaled_inherited_cancel() override; private: static constexpr const char* fs_root_change_event = "fs_root_changed"; html_derouleur deroule; html_form form; html_form_fieldset fs; html_form_input_file fs_root; html_form_input_file sauv_path; html_form_input basename; html_libdar_running_popup repoxfer; guichet guichet_options; std::shared_ptr<html_options_create> options; /// delay entrepot update when waiting inherited_get_body_part() to be executed /// \note not doing so may lead to run() this object which involves an html_web_user_interaction /// while the object is not visible and this this interaction component not operational bool need_entrepot_update; void update_entrepot(); void update_landing_path(); }; #endif ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������webdar-1.0.0/src/html_form_mask_subdir.hpp����������������������������������������������������������0000644�0001750�0001752�00000012652�15044137445�015566� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*********************************************************************/ // webdar - a web server and interface program to libdar // Copyright (C) 2013-2025 Denis Corbin // // This file is part of Webdar // // Webdar is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // Webdar is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Webdar. If not, see <http://www.gnu.org/licenses/> // //---- // to contact the author: dar.linux@free.fr /*********************************************************************/ #ifndef HTML_FORM_MASK_SUBDIR_HPP #define HTML_FORM_MASK_SUBDIR_HPP // C system header files #include "my_config.h" extern "C" { } // C++ system header files #include <dar/libdar.hpp> #include <memory> // webdar headers #include "body_builder.hpp" #include "html_mask.hpp" #include "actor.hpp" #include "jsoner.hpp" #include "html_form_fieldset.hpp" #include "html_form_input.hpp" #include "html_form_select.hpp" /// class html_form_mask_subdir provide mean to setup libdar::mask component for included directories or full path files /// this html components is consitued of: /// /** \verbatim +----html_fieldset----------------------------------+ | | | mask type: +----------------+ | | |dropdown list | | | +----------------+ | | | | +--+ | | case sensit.| | | | +--+ | | | | concerned +----------------------------+ | | path | input form | | | +----------------------------+ | +---------------------------------------------------+ \endverbatim **/ /// \note: this component does must have an html_form object /// as parent or ancestor for validation to be processed and /// changes to be recorded. Avoiding including the html_form /// in that component let it be part of more complex masks /// like *and* and *or* combinasons. class html_form_mask_subdir : public body_builder, public html_mask, public actor, public events, public jsoner { public: static const std::string changed; /// event to be used to trigger this object to reconsider absolute_path and root_prefix /// \note this is a very different way, here, to use actor and events: /// here this event must be generated by other objects which will register this /// html_form_mask_subdir object to them on this event. This way, the other objects /// (mainly from html_mask_form_path class) can trigger this html_form_mask_subdir::update /// event for all the objects they have created to reconsider the shared_ptr pointed to /// values given at construction time. static const std::string update; html_form_mask_subdir(bool absolute_path_accepted, const std::shared_ptr<const libdar::path> & fs_root); html_form_mask_subdir(const html_form_mask_subdir & ref); html_form_mask_subdir(html_form_mask_subdir && ref) noexcept = delete; html_form_mask_subdir & operator = (const html_form_mask_subdir & ref) = delete; html_form_mask_subdir & operator = (html_form_mask_subdir && ref) noexcept = delete; ~html_form_mask_subdir() = default; /// reset object to default void clear(); /// inherited from html_mask virtual std::unique_ptr<libdar::mask> get_mask() const override; /// inherited from html_mask virtual bool is_relative() const override; /// inherited from jsoner virtual void load_json(const json & source) override; /// inherited from jsoner virtual json save_json() const override; /// inherited from jsoner virtual void clear_json() override { clear(); }; /// inherited from actor virtual void on_event(const std::string & event_name) override; protected: /// inherited methods from body_builder virtual std::string inherited_get_body_part(const chemin & path, const request & req) override; /// inherited from body_builder virtual void new_css_library_available() override; private: bool absolute_ok; std::shared_ptr<const libdar::path> prefix; html_form_fieldset fs; html_form_select mask_type; html_form_input casesensitivity; html_form_input regex; html_form_input mask_subdir; void init(); std::string tell_action() const; void check_ptr() const; libdar::path check_absolute_path_requirement() const; ///< throws exception if not coherent static constexpr const unsigned int format_version = 1; static constexpr const char* myclass_id = "html_form_mask_subdir"; static constexpr const char* jlabel_type = "type"; static constexpr const char* jlabel_casesensit = "casesensit"; static constexpr const char* jlabel_regex = "regex"; static constexpr const char* jlabel_mask = "mask"; }; #endif ��������������������������������������������������������������������������������������webdar-1.0.0/src/html_hr.cpp������������������������������������������������������������������������0000644�0001750�0001752�00000002557�14773727250�012656� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*********************************************************************/ // webdar - a web server and interface program to libdar // Copyright (C) 2013-2025 Denis Corbin // // This file is part of Webdar // // Webdar is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // Webdar is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Webdar. If not, see <http://www.gnu.org/licenses/> // //---- // to contact the author: dar.linux@free.fr /*********************************************************************/ // C system header files #include "my_config.h" extern "C" { } // C++ system header files // webdar headers // #include "html_hr.hpp" using namespace std; string html_hr::inherited_get_body_part(const chemin & path, const request & req) { string cssdef = get_css_classes(); if(cssdef.empty()) return "<hr />\n"; else // cssdef not empty return "<hr " + cssdef + " />\n"; } �������������������������������������������������������������������������������������������������������������������������������������������������webdar-1.0.0/src/html_form_gnupg_list.cpp�����������������������������������������������������������0000644�0001750�0001752�00000011610�14773727250�015431� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*********************************************************************/ // webdar - a web server and interface program to libdar // Copyright (C) 2013-2025 Denis Corbin // // This file is part of Webdar // // Webdar is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // Webdar is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Webdar. If not, see <http://www.gnu.org/licenses/> // //---- // to contact the author: dar.linux@free.fr /*********************************************************************/ // C system header files #include "my_config.h" extern "C" { } // C++ system header files #include <dar/tools.hpp> // webdar headers #include "webdar_css_style.hpp" // #include "html_form_gnupg_list.hpp" using namespace std; const string html_form_gnupg_list::changed = "hfgl_changed"; html_form_gnupg_list::html_form_gnupg_list(): table(false, true, "Gnupg persona to add", "--- select a type of persona ---") { table.set_obj_type_provider(this); table.add_obj_type("Gnupg recipient"); // index 0 in provide_object_of_type() table.add_obj_type("Gnupg signatory"); // index 1 in provide_object_of_type() adopt(&table); // events & actors register_name(changed); table.record_actor_on_event(this, html_form_dynamic_table::changed); } vector<string> html_form_gnupg_list::get_gnupg_recipients() const { return gather_content_of_type(0); } vector<string> html_form_gnupg_list::get_gnupg_signatories() const { return gather_content_of_type(1); } unique_ptr<body_builder> html_form_gnupg_list::provide_object_of_type(unsigned int num, const string & context, string & changed_event) const { unique_ptr<body_builder> ret; switch(num) { case 0: ret.reset(new (nothrow) html_form_input("Gnupg recipient key id or email", html_form_input::text, "", "", webdar_css_style::width_80vw)); changed_event = html_form_input::changed; break; case 1: ret.reset(new (nothrow) html_form_input("Gnupg signatory email", html_form_input::text, "", "", webdar_css_style::width_80vw)); changed_event = html_form_input::changed; break; default: throw WEBDAR_BUG; } if(! ret) throw exception_memory(); return ret; } void html_form_gnupg_list::load_json(const json & source) { try { unsigned int version; string class_id; json config = unwrap_config_from_json_header(source, version, class_id); if(class_id != myclass_id) throw exception_range(libdar::tools_printf("Unexpected class_id in json data, found %s while expecting %s", class_id.c_str(), myclass_id)); if(version > format_version) throw exception_range(libdar::tools_printf("Json format version too hight for %s, upgrade your webdar software", myclass_id)); table.load_json(config.at(jlabel_contents)); } catch(json::exception & e) { throw exception_json(libdar::tools_printf("Error loading %s config", myclass_id), e); } } json html_form_gnupg_list::save_json() const { json ret; ret[jlabel_contents] = table.save_json(); return wrap_config_with_json_header(format_version, myclass_id, ret); } void html_form_gnupg_list::clear_json() { table.clear_json(); } void html_form_gnupg_list::on_event(const string & event_name) { if(event_name == html_form_dynamic_table::changed) act(changed); else throw WEBDAR_BUG; } string html_form_gnupg_list::inherited_get_body_part(const chemin & path, const request & req) { return get_body_part_from_all_children(path, req); } void html_form_gnupg_list::new_css_library_available() { unique_ptr<css_library> & csslib = lookup_css_library(); if(!csslib) throw WEBDAR_BUG; webdar_css_style::update_library(*csslib); } vector<string> html_form_gnupg_list::gather_content_of_type(unsigned int type) const { vector<string> ret; html_form_dynamic_table::iterator it = table.begin(); while(it != table.end()) { if(it.get_object_type() == type) // this is an object of the the type we gather { shared_ptr<body_builder> obj = it.get_object(); if(!obj) throw WEBDAR_BUG; else { html_form_input* hfi = dynamic_cast<html_form_input*>(obj.get()); if(hfi == nullptr) throw WEBDAR_BUG; // the body_builder object is not an html_form_input ret.push_back(hfi->get_value()); } } // else we ignore other types ++it; } return ret; } ������������������������������������������������������������������������������������������������������������������������webdar-1.0.0/src/error_page.cpp���������������������������������������������������������������������0000644�0001750�0001752�00000006725�14773727250�013347� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*********************************************************************/ // webdar - a web server and interface program to libdar // Copyright (C) 2013-2025 Denis Corbin // // This file is part of Webdar // // Webdar is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // Webdar is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Webdar. If not, see <http://www.gnu.org/licenses/> // //---- // to contact the author: dar.linux@free.fr /*********************************************************************/ // C system header files #include "my_config.h" extern "C" { } // C++ system header files // webdar headers #include "html_div.hpp" #include "tokens.hpp" #include "html_menu.hpp" // #include "error_page.hpp" using namespace std; error_page::error_page(unsigned int status_code, const string & reason): page(reason) { static const char* page_css_name = "page"; static const char* body_css_name = "body"; static const char* div_css_name = "div"; static const char* text_css_name = "text"; css mystyle; // objects's fields status = status_code; msg = reason; // building the body_builder tree div.adopt(&body); div.adopt(&text); page.adopt(&div); // setting css properties for each object mystyle.clear(); mystyle.css_color(COLOR_TEXT); mystyle.css_background_color(COLOR_BACK); mystyle.css_padding("1em"); page.define_css_class_in_library(page_css_name, mystyle); page.add_css_class(page_css_name); mystyle.clear(); mystyle.css_font_weight_bold(); mystyle.css_color(WHITE); mystyle.css_background_color(RED); mystyle.css_text_h_align(css::al_center); mystyle.css_padding("1em"); mystyle.css_float(css::fl_left); mystyle.css_border_width(css::bd_all, css::bd_thick); mystyle.css_border_style(css::bd_all, css::bd_dashed); mystyle.css_border_color(css::bd_all, "rgb(100,0,0)"); mystyle.css_width("6em", false); page.define_css_class_in_library(body_css_name, mystyle); body.add_css_class(body_css_name); mystyle.clear(); mystyle.css_margin_left("13em"); page.define_css_class_in_library(div_css_name, mystyle); div.add_css_class(div_css_name); mystyle.clear(); mystyle.css_float(css::fl_left); mystyle.css_float_clear(css::fc_left); mystyle.css_margin_left("2em"); page.define_css_class_in_library(text_css_name, mystyle); text.add_css_class(text_css_name); } void error_page::set_message_body(const string & message) { body.clear(); body.add_text(3, message); } void error_page::set_return_uri(const uri &ref, const string & label) { text.clear(); text.add_text(0, html_static_url(ref.get_string(), label).get_body_part()); } answer error_page::give_answer(const request & req) { answer ret; ret.set_status(status); ret.set_reason(msg); ret.add_body(page.get_body_part(req.get_uri().get_path(), req)); return ret; } void error_page::prefix_has_changed() { page.set_prefix(get_prefix()); } �������������������������������������������webdar-1.0.0/src/html_form_input.cpp����������������������������������������������������������������0000644�0001750�0001752�00000024463�15035005127�014407� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*********************************************************************/ // webdar - a web server and interface program to libdar // Copyright (C) 2013-2025 Denis Corbin // // This file is part of Webdar // // Webdar is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // Webdar is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Webdar. If not, see <http://www.gnu.org/licenses/> // //---- // to contact the author: dar.linux@free.fr /*********************************************************************/ // C system header files #include "my_config.h" extern "C" { } // C++ system header files #include <dar/tools.hpp> // webdar headers #include "webdar_tools.hpp" #include "exceptions.hpp" #include "webdar_css_style.hpp" #include "css.hpp" // #include "html_form_input.hpp" using namespace std; const string html_form_input::changed = "html_form_input_changed"; const string html_form_input::css_label = "html_form_input_label"; const string html_form_input::css_input = "html_form_input_input"; const string html_form_input::css_check = "html_form_input_check"; const string html_form_input::css_checktitle = "html_form_input_checktitle"; const string html_form_input::css_vertical_space = "html_form_input_vertspc"; const string html_form_input::css_display_no_CR = "html_form_input_nocr"; html_form_input::html_form_input(const string & label, input_type type, const string & initial_value, const string & size, const string & css_class): enabled(true), x_type(string_for_type(type)), x_init(initial_value), x_size(size), x_min(""), x_max(""), value_set(false), modif_change(""), hlabel(label) { new_line.add_text(0,""); // there is no adoption tree in that component register_name(changed); if(! css_class.empty()) add_css_class(css_class); add_css_class(css_vertical_space); new_line.add_css_class(webdar_css_style::float_flush); hlabel.add_css_class(css_label); } void html_form_input::set_range(const libdar::infinint & min, const libdar::infinint & max) { string next_min = libdar::deci(min).human(); string next_max = libdar::deci(max).human(); check_min_max_change(next_min, next_max); } void html_form_input::set_min_only(const libdar::infinint & min) { string next_min = libdar::deci(min).human(); string next_max = ""; check_min_max_change(next_min, next_max); } void html_form_input::set_max_only(const libdar::infinint & max) { string next_min = ""; string next_max = libdar::deci(max).human(); check_min_max_change(next_min, next_max); } void html_form_input::change_label(const string & label) { if(label != hlabel.get_label()) { hlabel.set_label(label); my_body_part_has_changed(); value_set = true; } } void html_form_input::change_type(input_type type) { string next_type = string_for_type(type); if(next_type != x_type) { x_type = next_type; my_body_part_has_changed(); value_set = true; } } void html_form_input::set_value(const string & val) { if(x_init != val) { x_init = val; my_act(); my_body_part_has_changed(); value_set = true; } } void html_form_input::set_value_as_bool(bool val) { if(val != get_value_as_bool()) { x_init = val ? "x" : ""; my_act(); my_body_part_has_changed(); value_set = true; } } void html_form_input::set_value_as_int(int val) { if(x_type == string_for_type(number)) set_value(webdar_tools_convert_to_string(val)); else throw WEBDAR_BUG; } int html_form_input::get_value_as_int() const { if(x_type == string_for_type(number)) return webdar_tools_convert_to_int(x_init); else throw WEBDAR_BUG; } void html_form_input::set_enabled(bool val) { if(enabled != val) { enabled = val; my_act(); my_body_part_has_changed(); value_set = true; } } void html_form_input::load_json(const json & source) { try { unsigned int version; string class_id; json config = unwrap_config_from_json_header(source, version, class_id); if(class_id != myclass_id) throw exception_range(libdar::tools_printf("Unexpected class_id in json data, found %s while expecting %s", class_id.c_str(), myclass_id)); if(version > format_version) throw exception_range(libdar::tools_printf("Json format version too hight for %s, upgrade your webdar software", myclass_id)); x_init = config.at(jlabel_init); } catch(json::exception & e) { throw exception_json(libdar::tools_printf("Error loading %s config", myclass_id), e); } } json html_form_input::save_json() const { json config; config[jlabel_init] = x_init; return wrap_config_with_json_header(format_version, myclass_id, config); } void html_form_input::clear_json() { set_value(""); } string html_form_input::inherited_get_body_part(const chemin & path, const request & req) { string ret = ""; string x_id = get_path().namify(); // first we extract informations from the returned form in // the body of the request if(req.get_method() == "POST" && path.empty() && enabled && !value_set) { string old = x_init; bool trigger_change = false; map<string, string> fields = req.get_body_form(); map<string, string>::iterator it = fields.find(x_id); if(it != fields.end()) x_init = it->second; else { // checkboxes have specific behavior: unckecked, the browser does not // send any value and even not an empty value associated to this id. if(x_type == string_for_type(check)) x_init = ""; } if(x_type == string_for_type(check)) trigger_change = (x_init == "" ^ old == ""); // some browser may return a different non empty string to mean // a box is checked... comparing x_init and old value may lead // to thing something changed while it is wrong. else trigger_change = x_init != old; if(trigger_change) { my_act(); my_body_part_has_changed(); } } // we can now return the up to date value of // the field hlabel.set_for_field(x_id); ret += "<div " + get_css_classes() + ">\n"; if(x_type != "checkbox") { ret += hlabel.get_body_part(); ret += generate_input(css_input, x_id); } else { ret += hlabel.get_body_part(); ret += generate_input(css_check, x_id); } ret += "</div>\n"; if(! get_no_CR()) { ret += new_line.get_body_part(); if(has_css_class(css_display_no_CR)) remove_css_class(css_display_no_CR); } else { if(!has_css_class(css_display_no_CR)) add_css_class(css_display_no_CR); } if(!has_my_body_part_changed()) value_set = false; return ret; } void html_form_input::new_css_library_available() { unique_ptr<css_library> & csslib = lookup_css_library(); if(!csslib) throw WEBDAR_BUG; if(! csslib->class_exists(css_label)) { css tmp; int label_width = 50; if(csslib->class_exists(css_input)) throw WEBDAR_BUG; tmp.clear(); tmp.css_box_sizing(css::bx_border); tmp.css_width(libdar::tools_printf("%d%%", label_width), false); tmp.css_display("inline-block"); csslib->add(css_label, tmp); tmp.clear(); tmp.css_box_sizing(css::bx_border); tmp.css_width(libdar::tools_printf("calc(%d%% - 0.5em)", 100 - label_width), false); csslib->add(css_input, tmp); // we removed 9em from the whole width to keep place on the line // for other components like units of html_form_input_units that rely on us tmp.clear(); tmp.css_box_sizing(css::bx_border); tmp.css_width(libdar::tools_printf("%d%%", label_width), false); tmp.css_display("inline-block"); tmp.css_float(css::fl_left); csslib->add(css_checktitle, tmp); tmp.clear(); tmp.css_box_sizing(css::bx_border); tmp.css_width("3em", false); csslib->add(css_check, tmp); tmp.clear(); tmp.css_box_sizing(css::bx_border); tmp.css_margin_top("0.2em"); csslib->add(css_vertical_space, tmp); tmp.clear(); tmp.css_box_sizing(css::bx_border); tmp.css_display("inline-block"); csslib->add(css_display_no_CR, tmp); } else { if(! csslib->class_exists(css_input)) throw WEBDAR_BUG; } } void html_form_input::set_change_event_name(const string & name) { if(name == "") throw WEBDAR_BUG; // we expect non-empty string as valid event name if(modif_change.empty()) modif_change = changed; // leveraging new featur from events class // all registered actors are kept: rename_name(modif_change, name); modif_change = name; } void html_form_input::check_min_max_change(const string & next_min, const string & next_max) { if(next_min != x_min || next_max != x_max) { my_body_part_has_changed(); x_min = next_min; x_max = next_max; value_set = true; } } string html_form_input::string_for_type(input_type type) { string ret; switch(type) { case text: ret = "text"; break; case password: ret = "password"; break; case number: ret = "number"; break; case range: ret = "range"; break; case check: ret = "checkbox"; break; case file: ret = "file"; break; default: throw WEBDAR_BUG; } return ret; } string html_form_input::generate_input(const string & csscl, const string & id) { string ret; string css_classes = csscl; string area; if(csscl.empty()) if(box_css.empty()) css_classes = ""; else css_classes = box_css; else if(box_css.empty()) css_classes = csscl; else css_classes = csscl + " " + box_css; ret = "<input class=\"" + css_classes + "\"" + area + " type=\"" + x_type + "\" name=\"" + id + "\" id=\"" + id + "\" "; if(x_min != "") ret += "min=\"" + x_min + "\" "; if(x_max != "") ret += "max=\"" + x_max + "\" "; if(x_init != "") { if(x_type == "checkbox") ret += "checked "; else ret += "value=\"" + webdar_tools_html_display(x_init) +"\" "; } if(x_size != "") ret += "size=\"" + x_size + "\" "; if(!enabled) ret += "disabled "; ret += "/>"; return ret; } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������webdar-1.0.0/src/html_legend.cpp��������������������������������������������������������������������0000644�0001750�0001752�00000003236�15035733631�013466� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*********************************************************************/ // webdar - a web server and interface program to libdar // Copyright (C) 2013-2025 Denis Corbin // // This file is part of Webdar // // Webdar is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // Webdar is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Webdar. If not, see <http://www.gnu.org/licenses/> // //---- // to contact the author: dar.linux@free.fr /*********************************************************************/ // C system header files #include "my_config.h" extern "C" { } // C++ system header files // webdar headers #include "webdar_tools.hpp" // #include "html_legend.hpp" using namespace std; void html_legend::change_label(const string & label) { if(x_label != label) { x_label = label; my_body_part_has_changed(); } } string html_legend::inherited_get_body_part(const chemin & path, const request & req) { string ret = ""; if(! x_label.empty()) { ret += "<legend " + get_css_classes() + ">" + webdar_tools_html_display(x_label); ret += get_tooltip_body_part(); ret += "</legend>\n"; } ret += get_body_part_from_all_children(path, req); return ret; } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������webdar-1.0.0/src/archive_create.cpp�����������������������������������������������������������������0000644�0001750�0001752�00000007123�15030770720�014142� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*********************************************************************/ // webdar - a web server and interface program to libdar // Copyright (C) 2013-2025 Denis Corbin // // This file is part of Webdar // // Webdar is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // Webdar is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Webdar. If not, see <http://www.gnu.org/licenses/> // //---- // to contact the author: dar.linux@free.fr /*********************************************************************/ // C system header files #include "my_config.h" extern "C" { } // C++ system header files // webdar headers #include "tokens.hpp" #include "exceptions.hpp" // #include "archive_create.hpp" using namespace std; archive_create::archive_create(): param(nullptr) { #ifdef LIBTHREADAR_STACK_FEATURE set_stack_size(DEFAULT_STACK_SIZE); #endif } void archive_create::inherited_run() { try { shared_ptr<libdar::archive> ref = nullptr; // in case of differential / incremental backup // we must open the archive of reference // and obtain an libdar::archive object to // be added to the options passed to the create // constructor if(!ui && ! ui->get_user_interaction()) throw WEBDAR_BUG; ui->clear(); ui->auto_hide(false, false); if(param == nullptr) throw WEBDAR_BUG; libdar::path archpath(param->get_archive_path(), true); string basename(param->get_archive_basename()); libdar::path fs_root(param->get_fs_root(), true); libdar::archive_options_create opt(param->get_creating_options(ui)); libdar::statistics* progressive_report = ui->get_statistics().get_libdar_statistics(); // resetting counters and logs ui->get_statistics().clear_counters(); ui->get_statistics().clear_labels(); ui->get_statistics().set_treated_label("item(s) treated"); ui->get_statistics().set_hard_links_label("hard link(s) treated"); ui->get_statistics().set_tooold_label("item(s) modified while read for backup (dirty files)"); ui->get_statistics().set_byte_amount_label("byte(s) wasted due to changing files at the time they were read"); ui->get_statistics().set_skipped_label("item(s) not saved (no inode/file change)"); ui->get_statistics().set_errored_label("items(s) with error (file system error)"); ui->get_statistics().set_ignored_label("item(s) ignored (excluded by filters)"); ui->get_statistics().set_deleted_label("item(s) recorded as deleted"); ui->get_statistics().set_ea_treated_label("item(s) with Extended Attributes"); // let's now create the archive cancellation_checkpoint(); libdar::archive target(ui->get_user_interaction(), fs_root, archpath, basename, EXTENSION, opt, progressive_report); // as the object being local to the local block // it will be destroyed automatically (and the archive // will be closed) once we will have exit this local block } catch(libdar::Egeneric & e) { throw exception_libcall(e); } } void archive_create::signaled_inherited_cancel() { pthread_t libdar_tid; libdar::thread_cancellation th; if(is_running(libdar_tid)) th.cancel(libdar_tid, true, 0); } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������webdar-1.0.0/src/body_builder.hpp�������������������������������������������������������������������0000644�0001750�0001752�00000064440�15034667063�013664� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*********************************************************************/ // webdar - a web server and interface program to libdar // Copyright (C) 2013-2025 Denis Corbin // // This file is part of Webdar // // Webdar is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // Webdar is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Webdar. If not, see <http://www.gnu.org/licenses/> // //---- // to contact the author: dar.linux@free.fr /*********************************************************************/ #ifndef BODY_BUILDER_HPP #define BODY_BUILDER_HPP // C system header files #include "my_config.h" extern "C" { } // C++ system header files #include <string> #include <map> #include <vector> // webdar headers #include "request.hpp" #include "chemin.hpp" #include "css_library.hpp" #include "css_class_group.hpp" /// class body_builder is the root class of object generating HTML body /// - the inherited_get_body_part() method let inherited class define what is the HTML /// body to be generated based on the request passed in argument. Also passed /// in argument is the path, which is comes from the URI of the request. /// From the outside, this is the get_body_part() that is to be used it implements /// a caching layout over inherited_get_body_part(), manage visibility() attribute. /// About the caching layout, an inherited class can flush cache and force a new /// evaluation of its generated body by calling my_body_part_has_changed(). /// - A body_builder object is expected to be located at given path of the requested URL /// and this let define its behavior according to the path of the request and its own /// place in the path tree. This place is defined by the adoption() mechanism: /// - body_builder objects can adopt other body_builder object creating a tree /// topology of body_builder. The path of an object adopted by a parent object /// is a subdirectory of the parent's path. It is a unique name randomly chosen /// by the parent at adoption time. See get_path(), get_recorded_name() /// - the visibility property of an body_builder let it keep its place in the /// path and adoption tree without returning any HTML code temporarily, this is /// set using set_visible() method and managed inside get_body_part() /// - the get_body_part() of a parent can thus rely on the get_body_part() of its /// adopted children, this is the freedom of the parent class do decide how to /// compose or ignore its childen and the possible HTML code they can return, but several /// method are provided for common tasks: get_body_part_from_target_child() as well /// as get_body_part_from_all_children(). /// - Several protected hooks and methods are provided for inherited class to be /// informed of their adoption or foresake: has_adopted() has_been_adopted_by(), /// will_foresake(), will_be_foresaken_by() /// - the class also handle the CSS components associated to HTML objects or to child objects /// by mean of a css_library (usually only present in the root object of the tree) /// and accessible by any children to store CSS class name+definition and refer to them when /// needed. See store_css_library(), has_local_css_library(), lookup_css_library() and /// new_css_library_available() to manage and access to a css_library global to the adoption /// tree. See add_css_class() has_css_class() remove_css_class() clear_css_classes() /// get_css_classes_as_a_set(), get_css_class_group(), get_css_classes() to assign one or more /// css classes to a body_builder inherited object. See define_css_class_in_library() to /// associate a CSS class name to its definition and store this in the closest css_library /// available in the adoption tree (it is advised to only have one at the root of the tree) /// - objects of this class also produce HTML code referring to what should be displayed on /// on the browser (get_body_part()) /// \note more details about css. body_builder object can be associated to the name of one /// or more css_class or css_class_group at any time, those are just labels. The class /// definition is stored in a css_library. If a body_builder object has created /// a css_library (calling store_css_library()) all its adopted body_builder objects /// can access it and upload their class definitions using lookup_css_library(). /// a class can be informed of the availability of a css_library overriding the /// protected method new_css_library_available() and implement there the css class /// definition they or their components have been associated to by mean of /// add_css_class(). Last from the outside of a class it is possible to define /// a css_class using the public method define_css_class_in_library(), but for /// this to work a css_library must be reachable in an ancestors (in regard to /// the adoption relationship) of this object. class body_builder { public: /// constructor body_builder() { clear(); }; /// copy constructor /// \note the created object cannot have any equivalent children as the source /// may have, because those are not memory managed by the body_builder class but /// by a derived class. This is thus the duty or derived class to rebuild /// a children equivalent tree if that makes sense. The newly created object /// should however stay orphaned (no parent), even if the source had a parent. /// This will ease copy-construction of derived class having body_builder inherited /// objects as fields and children. body_builder(const body_builder & ref); /// move constructor /// \note if move operation (constructor or assignment) have to be implemented in the /// future, care should be taken not to copy parent and children pointer values but to /// have source object foresaken() from parent and new one adopted() by the same parent, /// as source and moved objects have different addresses. Children adoption should also /// be taken care the same as parent children would change due to the move operation. Worse /// as the child-parent relationship is independent from the memory allocation responsibility /// of children objects, this is the inherited classes that should manage the move operation /// of the children to the their own field and reset the parent-child relationship accordingly body_builder(body_builder && ref) noexcept = delete; /// assignment operator drops all existing children /// \note see the note of the copy constructor body_builder & operator = (const body_builder & ref); /// move operator /// \note see the note of the move constructor body_builder & operator = (body_builder && ref) noexcept = delete; /// the (virtual) destructor virtual ~body_builder(); /// set the root path at which this object will be located in the URL path /// /// \note this is only used if this object has no parent void set_prefix(const chemin & prefix); /// Common interface for classes that have to ask other body_builder to contribute in building their body_part() /// /// this call is not mandatory, but let a body_builder object the possibility to rely on the set of /// body_builder available protected routines to recursively build the body part from the list of /// adopted children. An object can only have one parent. /// \note this call semantic is that the adopted object becomes a child of the body_builder. /// The adopted child stays managed by its real parent, the adoption relationship builds a tree /// of dependant objects using one another to provide a body_part (see get_body_part() method). /// this tree is automatically broken when an object is destroyed, in that way all recorded /// children exist (the recorded addresses always points to real existing objects) void adopt(body_builder* obj); /// whether the object has currently a parent (= is adopted) bool is_adopted() const { return parent != nullptr; }; /// Common interface for class that have to ask other body_builder to provide their own body_part() /// /// this call is not mandatory, it is the opposite action of adopt(). After this call /// the given object is no more sollicited to build a body part. /// \note if the requested object is not known an exception is thrown void foresake(body_builder* obj); /// ask for the object to become visible in HTML page or temporarily hidden /// \note an object which as its visible property set to false still has its inherited_get_body_part() /// method evaluated when calling get_body_part(), though get_body_part does not return its output. /// The reason of doing that way is to keep hidden components being updated under the scene and ready /// to show at any time. void set_visible(bool mode); /// returns the current visible status of the object /// \note if the object is adopted by another object that is not visible, this first object will /// have get_visible() returning true (while its parent will return false) but will not be effectively /// visible to the user. See get_visible_recursively(). bool get_visible() const { return visible; }; /// return the effective visible status of an object taking into account all of ancestors that adopted it bool get_visible_recursively() const; /// set this object with a additional css_class (assuming it is defined in a css_library available for this object) void add_css_class(const std::string & name); /// set this object with an additional set of css_classes (assuming they are all defined in a css_library available for this object) void add_css_class(const css_class_group & cg); /// check the presence of the given class name bool has_css_class(const std::string & name) const; /// remove the provided css_class name from the list of css_class names this object has been assigned to void remove_css_class(const std::string & name); /// remove the provided css_class_group from the list void remove_css_class(const css_class_group & cg); /// clear the whole list of css_class names void clear_css_classes() { css_class_names.clear(); css_classes_have_changed(); }; /// provide the list of css_class names that this object has been set with const std::set<std::string> & get_css_classes_as_a_set() const { return css_class_names; }; /// provide the list of css_class names as a css_class_group css_class_group get_css_class_group() const; /// return the class_name as inlined css, suitable to be added in a html marker /// \param[in] extra a space sperated list of additional classes to add beside the ones assigned to this object. /// The use case for extra parameter is to temporarily add a css class without having the object /// considered modified (and his inherited_get_body_part() re-evaluated). /// \note the returned string if not empty is of the form: class="<classname> <classname>..." std::string get_css_classes(const std::string & extra = "") const; /// add a css definition on a css_library reachable by this object /// \note so far this object does not use it, a call to add_css_class must also be done /// \note the provided css class name must not already exist (exception raised else) void define_css_class_in_library(const css_class & csscl); void define_css_class_in_library(const std::string & name, const css & cssdef); /// check whether a css_class of given name already exists in a reachable css_library bool is_css_class_defined_in_library(const std::string & name) const; /// ask the object to provide a part of the body to answer the request /// /// \param[in] path is the full path, but the path.index points to the asked object name /// \param[in] req is the request to be answered, the uri's path part targets the /// choice of child to use for the sub-response /// \return the body part to be send in the response (html code or other depending /// on the request) as defined by inherited_get_body_part() /// \note if path is an empty list only this object "body_builder" object can be /// used to answer, no child object can be invoked by mean of its name. /// \note when going down to the leaf of the tree, the path get shorter by removing /// the first items one at each step. Empty path means the object itself /// \note the inherited class should take the visible status in consideration when /// returning HTML from this call std::string get_body_part(const chemin & path, const request & req); /// ignore my_body_part_has_changed() invoked from adopted children and myself /// some object (like html_statistics) are ever changing, but rely on some component /// that will trigger my_body_part_has_changed() to reflect the new value, leading the /// parent (here html_statistics) to be recorded as changed and the cycle is complete /// this process never ends. This call avoids propagating any future body_changed status /// toward the parents and set the caller as if it was a static, never changing, object. void ignore_body_changed_from_my_children(bool mode) { ignore_children_body_changed = mode; if(mode) body_changed = false; }; /// get the current status of ignore_body_changed_from_my_children() bool get_ignore_body_changed_from_my_children() const { return ignore_children_body_changed; }; /// ask for the implementation not to add a new line after this control /// \note originally set_no_CR() had no argument, but it was needed to revert /// to get back the Carriage Return (CR) after a component, where from the /// added argument, which sound to be a double negation to get the default /// behavior. void set_no_CR(bool no_cr = true); /// assign an anchor to this object (the object's inherited_get_body_part() will be wrapped into an HTML anchor: <a name="value"> </a> ) /// The objective is for page updates to stay scrolled down with the corresponding body builder object at the top /// of the viewport when the URL ends by "#value". The value is selected by the body builder class /// to provide unicity between all objects having been assigned an anchor. /// \param[in] mode if true an anchor is assigned to the object and inserted before its body builder part. If /// set to false (which is the default), no anchor is inserted before the body builder part of the object. /// \note see_also get_anchor() void assign_anchor(bool mode); /// return the anchor value that has been assiged to this object (without the leading #) /// \note an empty string is returned if no anchor has been assigned (see assign_anchor() above) std::string get_assigned_anchor() const { return anchor; }; /// ask inherited components to use this anchor in case they redirect to an new URL or generate new URLs within their body part. virtual void bind_to_anchor(const std::string & val) {}; protected: /// implementation of get_body_part() method for inherited classes /// \note this method defines what the class will return from the public method /// body_builder::get_body_part() which also make some housekeeping at body_builder level. /// In particular, the body_builder class record the "body_changed" status that is reset /// before calling inherited_get_body_part() and modified by the inherited class when they /// call the my_body_part_has_changed(). get_body_part() also caches the result of /// inherited_get_body_part() to avoid calling inherited_get_body_part() if for the same /// request it has not signaled (calling my_body_part_has_changed()) that for example an event /// lead its status to change and would require inherited_get_body_part() to be reevaluated virtual std::string inherited_get_body_part(const chemin & path, const request & req) = 0; /// let a class record a change in what inherited_get_body_part() would return if it was called again with the same request /// method provided to inherited class to signal a change since the previous time inherited_get_body_part() /// has changed. This should not concern changes that are triggered by a call to inherited_get_body_part(): /// \note A typical use case is when an body_builder is an actor on an event generated by another body_builder. /// If the first (actor) has its inherited_get_body_part() evaluated before the one of the event generator, /// when the inherited_get_body_part() is evaluated event leads to modify the first body_builder status and /// leads the already returned inherited_get_body_part() value to be wrong/obsolete. Having my_body_part_has_changed() /// invoked from the actor::on_event() method solves this dependency as get_body_part() will relaunch the /// evaluation of such objects that signaled they have changed. void my_body_part_has_changed(); /// available for inherited class to be informed when their visibility changes virtual void my_visibility_has_changed() {}; /// obtain the body_part changed status /// \note this is also set when adopted component triggered my_body_part_has_changed() bool has_my_body_part_changed() const { return body_changed; }; /// return the path of 'this' according to its descent in the body_builder tree of adopted children chemin get_path() const; /// returns the name of 'this' if it has been adopted by a parent body_builder object /// /// \note, an empty string is returned if the object has not been adopted std::string get_recorded_name() const; /// this creates a css_library accessible from adopted objects to hold html class definitions /// \note a child object, directly or indirectly (grand child, aso) will be /// able to access and populate this css_library using the lookup_css_library() method /// \note avoid calling store_css_library() from a class constructor, this would break inherited /// class automatic be informed thanks to the new_css_library_available() method void store_css_library() { library_asked = true; }; /// return true if this object has a css_library locally stored (not from a adopter object) bool has_local_css_library() const { return library_asked || bool(library); }; /// lookup toward registered parent body_builder object for the closest stored css_library /// \note if neither the present object nor any of its parent stores an css_library, /// the returned unique_ptr is false (points to nullptr), else it points to the found css_library std::unique_ptr<css_library> & lookup_css_library() const; /// let a parent obtain the body part from one of its children given its official name and seen the path of the request /// /// \param[in] path is the path exactly as received from the get_body_part call: /// the first member is the name of a child object. /// \param[in] req is the request exactly as received from the get_body_part call /// \note it is typically called from the parent get_body_part() method /// \note if path is an empty list, the call fails (throwing an exception) as no /// no further name is available to find an child object to return its body part. /// In consequence, the caller must check whether the path is empty() or not before /// invoking this method /// \note if the object is not visible, this call will return an empty string std::string get_body_part_from_target_child(const chemin & path, const request & req); /// let a parent obtain the body part from all children in the order the have been adopted /// /// \param[in] path is the body_builder path, it can be empty. If not the front member is poped from the target /// even if the poped part of the path does not match the name of the consulted child object /// \param[in] req this is the request exactly as received from the get_body_part call /// \note if the object is not visible, this call will return an empty string std::string get_body_part_from_all_children(const chemin & path, const request & req); /// For inherited classes, called when the path has changed, /// \note tipically this is when this object has been adopted or foresaken virtual void path_has_changed() {}; /// Be informed that a new child has been adopted virtual void has_adopted(body_builder *obj) {}; /// Be informed that a child is about to be foresaken virtual void will_foresake(body_builder *obj) {}; /// Be informed that we have been adopted by obj, our new parent virtual void has_been_adopted_by(body_builder *obj) {}; /// Be informed that we are about to be foresaken by obj, our soon former parent virtual void will_be_foresaken_by(body_builder *obj) {}; /// Be informed about css class modification virtual void css_classes_have_changed() {}; /// this is a trigger, ran when a css_library becomes available in a parent or "this" /// \note this may also be triggered upon adoption by a object having acces to a css_library virtual void new_css_library_available() {}; /// access to adopted childs unsigned int size() const { return order.size(); }; /// access to adopted childs body_builder *operator[] (unsigned int i) { return order[i]; }; /// return the parent object or nullptr if no object has adopted this object body_builder* get_parent() const { return parent; }; /// access to the closest ancestor (parent) matching (dynamic_cast) the provided type /// \param[in] ancestor point to the found ancestor if found (points to nullptr else) template <class T> void closest_ancestor_of_type(T* & ancestor) { body_builder* ptr = parent; do { if(ptr != nullptr) { ancestor = dynamic_cast<T*>(ptr); ptr = ptr->parent; } else ancestor = nullptr; } while(ptr != nullptr && ancestor == nullptr); } /// orphan all adopted children void orphan_all_children(); /// true if it has been requested no to add Carriage Return after the HTML object bool get_no_CR() const { return no_CR; }; private: bool visible; ///< whether this object is visible or not chemin x_prefix; ///< path of this object bool no_CR; ///< whether inherited class implementation should avoid adding a CR at end of HTML produced body part body_builder* parent; ///< our parent if we get adopted std::vector<body_builder*> order; ///< children by order or adoption std::map<std::string, body_builder*> children; ///< children and their name std::map<body_builder*, std::string> revert_child; ///< revert map to get name of a child chemin last_body_path; ///< last path value provided to get_body_part() uri last_body_req_uri; ///< last req uri value provided to get_body_part() std::string last_body_req_body; ///< last req body value provided to get_body_part() std::string last_body_part; ///< last return of inherited_get_body_part() bool body_changed; ///< change status of inherited_get_body_part()/get_body_part() bool ignore_children_body_changed; ///< ignore and propagate body_changed notif from adopted children bool library_asked; ///< whether store_css_library() has been called, ///< this will trigger creation of css_library from get_body_part, ///< to allow store_css_library() being invoked from constructors of inherited classes std::unique_ptr<css_library> library; ///< css library if stored by this object std::set<std::string> css_class_names; ///< list of CSS class that apply to this object std::string anchor; ///< value of the anchor /// unrecord 'this' from its parent as a adopted child void unrecord_from_parent(); /// inform children and all their descendant children that the path has changed calling their path_has_changed() method void recursive_path_has_changed(); /// ask inherited class to provide its css_classes void recursive_new_css_library_available(); /// (re)initialize fields to default sane values void clear(); /// create a css_library if it has been requested earlier void create_css_lib_if_needed(); /// flush cached body_part for me and all my children void flush_all_cached_body_part(); /// fetch cached body_part if the object has not changed since previous call /// \note several point have to be addresses: /// - an body_builder object can change after is inherited_get_body_part() has return /// due to the fact another object generated an event, which my_body_part_has_changed() keep trace of /// - some objects need not to be evaluated twice (toggle objects) to not avoid undoing /// the action that was request -> this must be avoided by using different events/objects to do an undo an action /// even if they have the same appearence and place /// - some other objects do not change but need to be evaluated at any time (html_button) /// to perform the desired action. std::string get_body_part_or_cache(const chemin & path, const request & req); static libthreadar::mutex assigned_anchors_ctrl; static std::set<unsigned int> assigned_anchors; ///< used/assigned anchors static std::string get_available_anchor(); static void release_anchor(std::string & val); }; #endif ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������webdar-1.0.0/src/archive_isolate.hpp����������������������������������������������������������������0000644�0001750�0001752�00000004422�15024332542�014342� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*********************************************************************/ // webdar - a web server and interface program to libdar // Copyright (C) 2013-2025 Denis Corbin // // This file is part of Webdar // // Webdar is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // Webdar is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Webdar. If not, see <http://www.gnu.org/licenses/> // //---- // to contact the author: dar.linux@free.fr /*********************************************************************/ #ifndef ARCHIVE_ISOLATE_HPP #define ARCHIVE_ISOLATE_HPP // C system header files #include "my_config.h" extern "C" { } // C++ system header files #include <dar/libdar.hpp> #include <libthreadar/libthreadar.hpp> // webdar headers #include "html_web_user_interaction.hpp" #include "html_options_isolate.hpp" #include "saisie.hpp" /// class archive_isolate gather parameters and libdar isolation in a dedicated thread class archive_isolate : public libthreadar::thread_signal { public: archive_isolate(); archive_isolate(const archive_isolate & ref) = delete; archive_isolate(archive_isolate && ref) noexcept = default; archive_isolate & operator = (const archive_isolate & ref) = delete; archive_isolate & operator = (archive_isolate && ref) noexcept = default; ~archive_isolate() { cancel(); join(); }; // needed to read the archive to isolate void set_user_interaction(std::shared_ptr<html_web_user_interaction> ref) { ui = ref; }; void set_parametrage(const saisie* x_param) { param = x_param; }; protected: /// inherited from class libthreadar::thread virtual void inherited_run() override; /// inherited from libthreadar::thread virtual void signaled_inherited_cancel() override; private: const saisie* param; std::shared_ptr<html_web_user_interaction> ui; }; #endif ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������webdar-1.0.0/src/answer.hpp�������������������������������������������������������������������������0000644�0001750�0001752�00000015505�14773727250�012522� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*********************************************************************/ // webdar - a web server and interface program to libdar // Copyright (C) 2013-2025 Denis Corbin // // This file is part of Webdar // // Webdar is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // Webdar is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Webdar. If not, see <http://www.gnu.org/licenses/> // //---- // to contact the author: dar.linux@free.fr /*********************************************************************/ #ifndef ANSWER_HPP #define ANSWER_HPP // C system header files #include "my_config.h" extern "C" { } // C++ system header files #include <string> #include <map> // webdar headers #include "uri.hpp" #include "webdar_tools.hpp" #include "exceptions.hpp" #include "proto_connexion.hpp" /// class answer provides easy means to set an HTTP answer and means to sent it back to a proto_connexion object /// \note the main consumers of class answer are objects from responder class and its inherited classes class answer { public: /// class constructor answer() { clear(); }; /// copy constructor answer(const answer & ref) { copy_from(ref); }; /// move constructor answer(answer && ref) noexcept = default; /// assignment copy operator answer & operator = (const answer & ref) { copy_from(ref); return *this; }; /// assignment move operator answer & operator = (answer && ref) noexcept = default; /// destructor ~answer() = default; /////// SETTING THE OBJECT /// clear all information from the object void clear(); /// set answer status code and reason [MANDATORY] void set_status(unsigned int status_code) { status = status_code; }; /// set reason [optional] void set_reason(const std::string & reason_phrase) { reason = reason_phrase; }; /// set version info [MANDATORY] void set_version(unsigned int maj, unsigned int min) { maj_vers = maj; min_vers = min; }; /// add cookie to the answer [optional] void add_cookie(const std::string & key, const std::string & value); /// adds the body to the answer [optional] /// \note this also set Content-Length accordingly void add_body(const std::string & key); /// removes the body keeping header untouched (Content-Length in particular) void drop_body_keep_header() { body = ""; }; /// set a given attribute to the HTTP header void set_attribute(const std::string & key, const std::string & value) { attributes[webdar_tools_to_canonical_case(key)] = value; }; /// add an attribute to a possibly already existing message header /// /// \note according to RFC1945: /// "Multiple HTTP-header fields with the same field-name may be present /// in a message if and only if the entire field-value for that header /// field is defined as a comma-separated list [i.e., #(values)]. It must /// be possible to combine the multiple header fields into one "field- /// name: field-value" pair, without changing the semantics of the /// message, by appending each subsequent field-value to the first, each /// separated by a comma. /// Multiple HTTP-header fields with the same field-name may be present /// in a message if and only if the entire field-value for that header /// field is defined as a comma-separated list [i.e., #(values)]. It must /// be possible to combine the multiple header fields into one "field- /// name: field-value" pair, without changing the semantics of the /// message, by appending each subsequent field-value to the first, each /// separated by a comma." /// This is the way add_attribute_member behaves. If the given key already /// exists, the given value is added to the existing value to form a new CSV f void add_attribute_member(const std::string & key, const std::string & value); /////// VALIDATING THE OBJECT /// whether the minimal parameters have been set bool is_valid() const; /////// GETTING INFORMATIONS ABOUT THE OBJECT /// get answer status code and reason unsigned int get_status_code() const { return status; }; /// get reason const std::string get_reason() const { return reason; }; /// get integer part of the version info unsigned int get_maj_version() const { return maj_vers; }; /// get decimal part of the version info unsigned int get_min_version() const { return min_vers; }; /// get the current body of the answer const std::string get_body() const { return body; }; /// retrieve the value of an attribute of the HTTP answer /// /// \param[in] key is the key's attribute to look for /// \param[out] value is the associated value of the attribute if such attribute exists /// \return true if the requested attribute has been found in this request bool find_attribute(const std::string & key, std::string & value) const; /////// SERIALIZING THE OBJECT TO AN EXISTING CONNECTION /// send the answer void write(proto_connexion & output); private: unsigned int status; ///< the HTTP status the answer should return std::string reason; ///< the HTTP reason the answer should return unsigned int maj_vers; ///< the HTTP version of the answer (in HTTP/1.0 maj_vers is 1) unsigned int min_vers; ///< the HTTP decimal version of the answer (in HTTP/1.0 min_vers is 0) std::map<std::string, std::string> attributes; ///< http answer attributes like cookies std::string body; ///< the HTTP body (HTML header + HTML Body) of the HTTP answer /// field used to sequentially read the map of attributes mutable std::map<std::string, std::string>::const_iterator next_read; /// reset the read_next_attribute to the beginning of the list void reset_read_next_attribute() const; /// reads the next attributes /// /// \param[out] key key of the next attribute /// \param[out] value value of that attribute /// \return true if a next attribute has been else, key and value are not set bool read_next_attribute(std::string & key, std::string & value) const; /// used in copy constructor and copy operators void copy_from(const answer & ref); }; #endif �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������webdar-1.0.0/src/exceptions.hpp���������������������������������������������������������������������0000644�0001750�0001752�00000012752�14773727250�013405� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*********************************************************************/ // webdar - a web server and interface program to libdar // Copyright (C) 2013-2025 Denis Corbin // // This file is part of Webdar // // Webdar is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // Webdar is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Webdar. If not, see <http://www.gnu.org/licenses/> // //---- // to contact the author: dar.linux@free.fr /*********************************************************************/ #ifndef EXCEPTIONS_HPP #define EXCEPTIONS_HPP // C system header files #include "my_config.h" extern "C" { #if HAVE_STRING_H #include <string.h> #endif } // C++ system header files #include <string> #include <new> // libraries header files #include <dar/libdar.hpp> /// pure virtual class parent of all webdar exceptions class exception_base { public: exception_base(const std::string & x_msg) {msg = x_msg; }; virtual ~exception_base() {}; const std::string & get_message() const { return msg; }; void change_message(const std::string & x_msg) { msg = x_msg; }; virtual exception_base *clone() const = 0; private: std::string msg; }; /// exception used to report memory allocation failures class exception_memory : public exception_base { public: exception_memory() : exception_base("lack of memory") {}; protected: virtual exception_base *clone() const override; }; template<class T> exception_base *cloner(void * const ptr) { exception_base *ret = new (std::nothrow) T(*(reinterpret_cast<T const *>(ptr))); if(ret == nullptr) throw exception_memory(); return ret; }; inline exception_base * exception_memory::clone() const { return cloner<exception_memory>((void *)this); }; /// exception used to report webdar internal bugs #define WEBDAR_BUG exception_bug(__FILE__, __LINE__) /// class used to signal bug condition class exception_bug : public exception_base { public: exception_bug(const std::string & file, int line) : exception_base(std::string("WEBDAR: BUG MET IN File ") + file + std::string(" line ") + std::to_string(line)) {}; protected: virtual exception_base *clone() const override { return cloner<exception_bug>((void *)this); }; }; /// exception used to report operating system errors class exception_system : public exception_base { public: exception_system(const std::string & context, int error_code); protected: virtual exception_base *clone() const override { return cloner<exception_system>((void *)this); }; }; /// exception used to report out or range value or argument class exception_range : public exception_base { public: exception_range(const std::string & msg): exception_base(msg) {}; protected: virtual exception_base *clone() const override { return cloner<exception_range>((void *)this); }; }; /// exception used to report an request error from the http client /// \note at the difference of the exception_range type, this exception /// is used when the user request is syntaxically correct but a field value has an /// unexpected value. This implies that we can and must answer to by a error HTTP answer /// which code and reason phrase is carried by this exception. Further request can be /// processed on the same connexion. class exception_input : public exception_base { public: exception_input(const std::string & msg, unsigned int error_code): exception_base(msg) {err = error_code; }; unsigned int get_error_code() const { return err; }; protected: virtual exception_base *clone() const override { return cloner<exception_input>((void *)this); }; private: unsigned int err; }; /// exception used to report an non-implemented feature class exception_feature : public exception_base { public: exception_feature(const std::string & feature_name): exception_base(std::string("Unimplemented feature: ") + feature_name) {}; protected: virtual exception_base *clone() const override { return cloner<exception_feature>((void *)this); }; }; /// transcription of libdar exception into the webdar exception type class exception_libcall : public exception_base { public: exception_libcall(const libdar::Egeneric & e); protected: virtual exception_base *clone() const override { return cloner<exception_libcall>((void *)this); }; }; /// class used to signal SSL related errors class exception_openssl : public exception_base { public: exception_openssl(); protected: virtual exception_base *clone() const override { return cloner<exception_openssl>((void *)this); }; private: static constexpr unsigned int ERR_BUF_LEN = 1024; static std::string get_ssl_error(); }; /// class used to propagate the reception of a signal by the current process/thread class exception_signal: public exception_base { public: exception_signal(): exception_base("system call interruted by a signal") {}; protected: virtual exception_base *clone() const override { return cloner<exception_signal>((void *)this); }; }; extern void throw_as_most_derivated_class(exception_base *ebase); #endif ����������������������webdar-1.0.0/src/html_table.cpp���������������������������������������������������������������������0000644�0001750�0001752�00000010757�14773727250�013335� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*********************************************************************/ // webdar - a web server and interface program to libdar // Copyright (C) 2013-2025 Denis Corbin // // This file is part of Webdar // // Webdar is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // Webdar is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Webdar. If not, see <http://www.gnu.org/licenses/> // //---- // to contact the author: dar.linux@free.fr /*********************************************************************/ // C system header files #include "my_config.h" extern "C" { } // C++ system header files // webdar headers #include "exceptions.hpp" // #include "html_table.hpp" using namespace std; html_table::html_table(unsigned int width) { dim_x = width; border_collapsed = ""; cells_title_set = false; css_class_title = ""; css_class_cells = ""; } void html_table::css_border_collapsed(bool mode) { string next_border_collapsed = string(" border-collapse: ") + (mode ? "collapse;" : "separate;"); if(border_collapsed != next_border_collapsed) { border_collapsed = next_border_collapsed; my_body_part_has_changed(); } } void html_table::set_css_class_first_row(const string & val) { if(!cells_title_set || css_class_title != val) { cells_title_set = true; css_class_title = val; my_body_part_has_changed(); } } void html_table::set_css_class_first_row() { if(cells_title_set) { cells_title_set = false; css_class_title = ""; my_body_part_has_changed(); } } void html_table::set_css_class_first_column(const string & val) { if(!cells_first_column_set || css_class_column1 != val) { cells_first_column_set = true; css_class_column1 = val; my_body_part_has_changed(); } } void html_table::set_css_class_first_column() { if(cells_first_column_set) { cells_first_column_set = false; css_class_column1 = ""; my_body_part_has_changed(); } } void html_table::set_css_class_cells(const string & val) { if(css_class_cells != val) { css_class_cells = val; my_body_part_has_changed(); } } void html_table::set_css_class_cells() { if(css_class_cells != "") { css_class_cells = ""; my_body_part_has_changed(); } } string html_table::inherited_get_body_part(const chemin & path, const request & req) { string ret = ""; bundle bdl; chemin sub_path = path; unsigned int line_length = 0; bool first_line = true; string table_css = ""; string class_set; if(border_collapsed != "") table_css = "style=\"" + border_collapsed + "\""; if(sub_path.size() > 0) sub_path.pop_front(); ret = "<table " + get_css_classes(); if(table_css != "") ret += " " + table_css; ret += ">\n"; reset_read_next(); while(read_next(bdl)) { /// the <tr> mark for each new line if(line_length == 0) ret += "<tr>\n"; /// the <td> ... cell ... </td> ret += "<td"; class_set = ""; // first line if(first_line) { if(!css_class_title.empty()) class_set = css_class_title; } else { if(!css_class_cells.empty()) class_set = css_class_cells; } // first column if(line_length == 0 && cells_first_column_set && ! css_class_column1.empty()) { if(class_set.empty()) class_set = css_class_column1; else class_set += " " + css_class_column1; } if(!class_set.empty()) ret += " class=\"" + class_set + "\""; ret += ">\n"; if(bdl.obj != nullptr) ret += bdl.obj->get_body_part(sub_path, req); else ret += bdl.static_text; ret += "</td>\n"; /// counting cell to known when to close and start a new row ++line_length; if(line_length == dim_x) { ret += "</tr>\n"; // end of raw line_length = 0; first_line = false; } } /// adding empty cells if necessary (well, ... that's a bit useless, but we can't know whether a particular browser will not cry on that) if(line_length != 0) { while(line_length < dim_x) { ret += "<td></td>\n"; ++line_length; } ret += "<tr>\n"; } ret += "</table>\n"; return ret; } �����������������webdar-1.0.0/src/request.cpp������������������������������������������������������������������������0000644�0001750�0001752�00000046104�15000225044�012657� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*********************************************************************/ // webdar - a web server and interface program to libdar // Copyright (C) 2013-2025 Denis Corbin // // This file is part of Webdar // // Webdar is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // Webdar is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Webdar. If not, see <http://www.gnu.org/licenses/> // //---- // to contact the author: dar.linux@free.fr /*********************************************************************/ #include <dar/tools.hpp> #include <string.h> #include "request.hpp" #include "exceptions.hpp" #include "webdar_tools.hpp" using namespace std; void request::clear() { status = init; cached_method = ""; coordinates.clear(); attributes.clear(); body = ""; clear_multipart(); } bool request::try_reading(proto_connexion & input) { return read_method_uri(input, false); } void request::read(proto_connexion & input) { string key; string val, valorig; clear_multipart(); /////////////////////////////////////////// // reading the first line of the request // if(!read_method_uri(input, true)) throw WEBDAR_BUG; status = reading_all; // VERSION field if(!get_word(input, true, true, val)) throw WEBDAR_BUG; if(val == "") val = "HTTP/0.9"; set_version(val); skip_line(input); /////////////////////////////////////////// // reading the request's header // while(!is_empty_line(input)) // which would mean the end of the header { if(!get_token(input, true, true, key)) throw WEBDAR_BUG; if(key == "") { string mesg = "non RFC1945 conformant message header: empty string as entity-header field name"; clog->report(debug, mesg); throw exception_range(mesg); } skip_over(input, ':'); skip_over(input, ' '); val = up_to_eol_with_LWS(input); if(find_attribute(key, valorig)) add_attribute(key, valorig + ',' + val); else add_attribute(key, val); } skip_line(input); // we now point to the beginning of the body /////////////////////////////////////////// // reading the body // if(find_attribute(HDR_CONTENT_LENGTH, val)) { int size; try { size = webdar_tools_convert_to_int(val); } catch(exception_bug & e) { throw; } catch(...) { string mesg = string("Value given to ") + HDR_CONTENT_LENGTH + " is not an integer: " + val; clog->report(debug, mesg); throw exception_range(mesg); } body = up_to_length(input, size); } else body = ""; status = completed; extract_cookies(); /////////////////////////////////////////// // Sanity checks // // HTTP version control if(maj_vers != 1 || (min_vers != 0 && min_vers != 1)) { string mesg = "The received request is using an unsupported HTTP version: "; mesg += webdar_tools_convert_to_string(maj_vers) + "." + webdar_tools_convert_to_string(min_vers); clog->report(info, mesg); throw exception_input(mesg, STATUS_CODE_NOT_IMPLEMENTED); } // URI scheme if(coordinates.get_scheme() != "http" && coordinates.get_scheme() != "") { string mesg = "Unsupported scheme in URI: "; mesg += coordinates.get_scheme(); clog->report(debug, mesg); throw exception_input(mesg, STATUS_CODE_BAD_REQUEST); } // HTTP method control if(cached_method != "GET" && cached_method != "POST" && cached_method != "HEAD") { string mesg = "The received request using an unknown method: "; mesg += cached_method; clog->report(debug, mesg); throw exception_input(mesg, STATUS_CODE_BAD_REQUEST); } } map<string,string> request::get_body_form() const { string tmp, aux; vector<string> split; vector<string>::iterator it; map<string, string> ret; if(!find_attribute(HDR_CONTENT_TYPE, tmp)) return ret; if(webdar_tools_to_canonical_case(tmp) != webdar_tools_to_canonical_case(VAL_CONTENT_TYPE_FORM)) return ret; tmp = webdar_tools_decode_urlencoded(get_body()); webdar_tools_split_by('&', tmp, split); for(vector<string>::iterator it = split.begin(); it != split.end(); ++it) { webdar_tools_split_in_two('=', *it, tmp, aux); ret[tmp] = aux; } return ret; } void request::add_cookie(const string & key, const string & value) const { const_cast<request *>(this)->cookies[key] = value; } bool request::find_cookie(const string & key, string & value) const { map<string, string>::const_iterator it = cookies.find(key); if(it != cookies.end()) { value = it->second; return true; } else return false; } bool request::find_attribute(const string & key, string & value) const { string lkey = webdar_tools_to_canonical_case(key); map<string, string>::const_iterator it = attributes.find(lkey); if(status < reading_all) throw WEBDAR_BUG; if(it != attributes.end()) { value = it->second; return true; } else return false; } unsigned int request::get_multipart_number() const { string tmp, tmp2; string boundary; // according to RFC1521 the header "MIME-Version: 1.0" // should be looked for, however it seems that several // browsers (firefox 128.5.0esr at least) do not include // it in HTTP requests if(find_attribute("MIME-Version", tmp)) { if(tmp != "1.0" && (tmp.size() <= 4 || strncmp("1.0 ", tmp.c_str(), 4) != 0)) throw exception_input(libdar::tools_printf("Unsupported Mime-Version type %s (only supported is 1.0)", tmp.c_str()), STATUS_CODE_EXPECTATION_FAILED); } // parsing the Content-Type to obtain the boundary string if(!find_attribute("Content-Type", tmp)) throw exception_input("Missing Content-Type field in request header", STATUS_CODE_EXPECTATION_FAILED); else { static const char* expected_type = "multipart/"; if(tmp.size() <= strlen(expected_type) || strncasecmp(tmp.c_str(), expected_type, strlen(expected_type)) != 0) throw exception_input(libdar::tools_printf("Content-Type is not of type %s", expected_type), STATUS_CODE_EXPECTATION_FAILED); vector<string> splitted; webdar_tools_split_by(';', tmp, splitted); if(splitted.size() <= 1) throw exception_input("Missing boundary field information in multipart Content-Type", STATUS_CODE_EXPECTATION_FAILED); vector<string>::iterator it = splitted.begin(); ++it; // skipping the "multipart/" part of the header value if(it == splitted.end()) throw WEBDAR_BUG; // splitted.size() > 1, this should not occur do { // we can reuse tmp here as its content is now stored in the splitted vector webdar_tools_split_in_two('=', *it, tmp, tmp2); tmp = webdar_tools_remove_leading_spaces(tmp); if(strcasecmp(tmp.c_str(), "boundary") == 0) boundary = tmp2; // which ends the while loop ++it; } while(it != splitted.end() && boundary.empty()); if(boundary.empty()) throw exception_input("Missing boundary field information in multipart Content-Type", STATUS_CODE_EXPECTATION_FAILED); if(*(boundary.begin()) == '"' && *(boundary.rbegin()) == '"') { if(boundary.size() > 2) { // removing enclosing quotes boundary.pop_back(); boundary.erase(boundary.begin()); } else throw exception_input("Invalid boundary value: quoted empty string", STATUS_CODE_EXPECTATION_FAILED); } boundary = "--" + boundary; } // boundary is now known // "Content-Transfer-Encoding" not (yet?) implemented. See RFC1521 paragraph 5. if(find_attribute("Content-Transfer-Encoding", tmp)) throw exception_input("Content-Transfer-Encoding not implemented", STATUS_CODE_EXPECTATION_FAILED); // analysing the body as a multipart structured data // split body from boundary occurence - // - the first occurence is not be preceeded by \r\n unlike the others // - the last occurence is followed by two dashes (--) deque<troncon> parts = webdar_tools_split_by_substring(boundary, troncon(body)); if(parts.empty()) throw exception_input("Body does not contain any multi-part data", STATUS_CODE_EXPECTATION_FAILED); else { parts.pop_front(); // dropping the preample part (any char before the first boundary) } if(parts.empty()) throw exception_input("Body does not contain any multi-part data", STATUS_CODE_EXPECTATION_FAILED); // check and dropping the the epilogue (which always exists because of the -- added // to the last boundary: if(strncmp(string(parts.rbegin()->begin, parts.rbegin()->end).c_str(), "--", 2) == 0) { // this is a well formated last boundary (with the added -- after it) parts.pop_back(); // dropping the epilogue for the available parts } else throw exception_input("Badly formated last boundary, missing the two dashes", STATUS_CODE_EXPECTATION_FAILED); // removing the initial CRLF (\r\n) at the beginning of all parts // as the bondary is always followed by CRLF (except for the last delimiter // which has been addressed with the epligue above). if(parts.empty()) throw exception_input("Body does not contain any multi-part data", STATUS_CODE_EXPECTATION_FAILED); for(deque<troncon>::iterator it = parts.begin(); it != parts.end(); ++it) { int num = 2; while(num > 0 && it->begin != it->end) { --num; ++(it->begin); } if(num > 0) throw exception_input("Badly formated multipart, missing CR+LF after boundary", STATUS_CODE_EXPECTATION_FAILED); } // now analysing each part // the expected stucture is a list of field: value one per line // we expect to find the field " // followed by an empty line // followed by the data static const string newline = "\r\n"; static const string header_sep = ": "; mp_headers.clear(); mp_body.clear(); for(deque<troncon>::iterator it = parts.begin(); it != parts.end(); ++it) { troncon tmp(*it); string::const_iterator offset; bool finished = false; mp_header_map headers; do { offset = webdar_tools_seek_to_substring(newline, tmp); if(offset == tmp.end) // no newline found and still no body found throw exception_input("Missing empty newline in multipart to signal the start of a multi-part body", STATUS_CODE_EXPECTATION_FAILED); if(offset == tmp.begin) // empty new line, we have reached the body! { tmp.begin = offset + newline.size(); mp_body.push_back(tmp); finished = true; } else // still in header part, hitting an end of line { troncon header_line(tmp.begin, offset); tmp.begin = offset + newline.size(); string::const_iterator sep = webdar_tools_seek_to_substring(header_sep, header_line); if(sep == header_line.end) throw exception_input("Invalid header in multipart, missing colon (:) on a line", STATUS_CODE_EXPECTATION_FAILED); headers[troncon(header_line.begin, sep)] = troncon(sep + header_sep.size(), header_line.end); } } while(!finished); mp_headers.push_back(headers); } if(mp_headers.size() != mp_body.size()) throw WEBDAR_BUG; return mp_headers.size(); } map<troncon,troncon> request::get_header_of_multipart(unsigned int num) const { if(num >= mp_headers.size()) throw WEBDAR_BUG; return mp_headers[num]; } troncon request::get_body_of_multipart(unsigned int num) const { if(num >= mp_body.size()) throw WEBDAR_BUG; return mp_body[num]; } void request::fake_valid_request() { clear(); status = completed; maj_vers = 1; min_vers = 0; } void request::extract_cookies() { string key, val; bool found = find_attribute(HDR_COOKIE, val); cookies.clear(); if(found) { vector<string> comma_sep; vector<string>::iterator it; vector<string> tmp; vector<string> semi_col_sep; webdar_tools_split_by(',', val, comma_sep); for(it = comma_sep.begin(); it != comma_sep.end(); ++it) { webdar_tools_split_by(';', *it, tmp); webdar_tools_concat_vectors(semi_col_sep, tmp); } for(it = semi_col_sep.begin(); it != semi_col_sep.end(); ++it) { webdar_tools_split_in_two('=', *it, key, val); cookies[key] = val; } drop_attribute(HDR_COOKIE); } } bool request::read_method_uri(proto_connexion & input, bool blocking) { string tmp; string cached_uri; if(status > uri_read) throw WEBDAR_BUG; if(status == init) { if(get_token(input, cached_method == "", blocking, tmp)) status = method_read; cached_method += tmp; } if(status == method_read) { if(status != uri_read) { if(get_word(input, cached_uri == "", blocking, tmp)) status = uri_read; cached_uri += tmp; if(status == uri_read) coordinates.read(cached_uri); } } switch(status) { case init: case method_read: case uri_read: break; case reading_all: case completed: throw WEBDAR_BUG; default: throw WEBDAR_BUG; } return status == uri_read; } void request::drop_attribute(const string & key) { map<string, string>::iterator it = attributes.find(key); if(it != attributes.end()) attributes.erase(it); } bool request::is_empty_line(proto_connexion & input) { bool ret; try { ret = (input.read_test_first(true) == '\r') && (input.read_test_second(true) == '\n'); } catch(exception_bug & e) { throw; } catch(exception_base & e) { ret = false; // no throw! } return ret; } string request::up_to_eol(proto_connexion & input) { string ret; try { while(input.read_test_first(true) != '\r' || input.read_test_second(true) != '\n') ret += input.read_one(true); skip_line(input); } catch(exception_bug & e) { throw; } catch(exception_base & e) { // we ignore here any end of connection } return ret; } string request::up_to_eof(proto_connexion & input) { string ret; try { while(true) ret += input.read_one(true); } catch(exception_bug & e) { throw; } catch(exception_base & e) { // this is the way we know that we reached eof } return ret; } void request::skip_over(proto_connexion & input, char a) { try { while(input.read_one(true) != a) ; } catch(exception_bug & e) { throw; } catch(exception_base & e) { // we ignore here any end of connection } } string request::up_to_length(proto_connexion & input, unsigned int length) { string ret; /// TO BE IMPROVED ADDING A READ CALL WITH INPUT BUFFER TO PROTO_CONNEXION CLASS while(length > 0) { ret += input.read_one(true); --length; } return ret; } void request::skip_line(proto_connexion & input) { bool loop = true; char a; try { while(loop) { a = input.read_one(true); if(a == '\r') { if(input.read_test_first(true) == '\n') { a = input.read_one(true); loop = false; } } } } catch(exception_bug & e) { throw; } catch(exception_base & e) { // we ignore here any end of connection } } string request::up_to_eol_with_LWS(proto_connexion & input) { string ret; bool loop = false; try { do { loop = false; ret += up_to_eol(input); if(input.read_test_first(true) == ' ' || input.read_test_first(true) == '\t') { loop = true; while(input.read_test_first(true) == ' ' || input.read_test_first(true) == '\t') (void)input.read_one(true); ret += ' '; // "All LWS including folding, have the same semantics as SP" } } while(loop); } catch(exception_bug & e) { throw; } catch(exception_range & e) { // nothing done, as we reached end of file // we return the data read so far } return ret; } bool request::get_token(proto_connexion & input, bool initial, bool blocking, string & token) { bool ret = true; bool loop = true; char a; token = ""; try { while(loop) { a = input.read_test_first(blocking); if((a == ' ' || a == '\t') && initial) a = input.read_one(blocking); else { // token is built of any char except CTLs or tspecials // tspecials are: ()<>@,;:\"/[]?={} space and tab // as defined by RFC 1945 paragraph 2.2 "Basic Rules". if(a < 127 && a > 31 && a != '(' && a != ')' && a != '<' && a != '>' && a != '@' && a != ',' && a != ';' && a != ':' && a != '\\' && a != '"' && a != '/' && a != '[' && a != ']' && a != '?' && a != '=' && a != '{' && a != '}' && a != ' ' && a != '\t') { token += input.read_one(blocking); initial = false; } else loop = false; } } } catch(exception_bug & e) { throw; } catch(exception_base & e) { if(!blocking) ret = false; else // blocking read: returning the read data or failing if not data has been read so far if(token == "") throw; } return ret; } bool request::get_word(proto_connexion & input, bool initial, bool blocking, string & word) { string tmp; char ctmp; bool loop = false; bool ret = false; word = ""; try { do { loop = false; ret = get_token(input, initial, blocking, tmp); if(tmp != "") { initial = false; word += tmp; } if(ret) { try { ctmp = input.read_test_first(blocking); } catch(exception_bug & e) { throw; } catch(...) { // EOF met if(word != "" || !blocking) break; // exiting the while loop else throw; // nothing to return so far so propagating the exception } switch(ctmp) { case '/': case ':': case '=': case '@': case '?': word += input.read_one(blocking); initial = false; loop = true; break; default: break; // nothing to do, as loop is already false } } } while(loop); } catch(exception_bug & e) { throw; } catch(exception_base & e) { if(word == "") throw; } return ret; } void request::set_version(const string & version) { static const char expected[] = { 'H', 'T', 'T', 'P', '/', '\0' }; const char *ptr = expected; string::const_iterator it = version.begin(); string::const_iterator bk = it; while(it != version.end() && *ptr != '\0' && *it == *ptr) { ++ptr; ++it; } if(*ptr != '\0' || it == version.end()) { string mesg = string("badly formated HTTP version field: ") + version; clog->report(debug, mesg); throw exception_range(mesg); } bk = it; while(it != version.end() && *it != '.') ++it; if(it == version.end()) { string mesg = string("badly formated HTTP version field: ") + version; clog->report(debug, mesg); throw exception_range(mesg); } maj_vers = webdar_tools_convert_to_int(string(bk, it)); ++it; if(it == version.end()) { string mesg = string("badly formated HTTP version field: ") + version; clog->report(debug, mesg); throw exception_range(mesg); } min_vers = webdar_tools_convert_to_int(string(it, version.end())); } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������webdar-1.0.0/src/connexion.hpp����������������������������������������������������������������������0000644�0001750�0001752�00000004225�15045112127�013200� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*********************************************************************/ // webdar - a web server and interface program to libdar // Copyright (C) 2013-2025 Denis Corbin // // This file is part of Webdar // // Webdar is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // Webdar is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Webdar. If not, see <http://www.gnu.org/licenses/> // //---- // to contact the author: dar.linux@free.fr /*********************************************************************/ #ifndef CONNEXION_HPP #define CONNEXION_HPP #include "my_config.h" // C++ system header files #include <string> // webdar headers #include "exceptions.hpp" #include "proto_connexion.hpp" /// provides read/write implementation of a socket object /// \note used for http connections (non ssl/tls connections) class connexion : public proto_connexion { public: /// constructor: create a new object based on a existing socket filedescriptor connexion(int fd, const std::string & peerip, unsigned int peerport); /// forbidding copy constuctor and assignment operator connexion(const connexion & ref) = delete; connexion(connexion && ref) noexcept = delete; connexion & operator = (const connexion & ref) = delete; connexion & operator = (connexion && ref) noexcept = delete; /// destructor ~connexion(); protected: /// inherited from proto_connexion virtual void write_impl(const char *a, unsigned int size) override; /// inherited from proto_connexion virtual unsigned int read_impl(char *a, unsigned int size, bool blocking) override; private: int filedesc; ///< file descriptor to operate on /// close the connexion void fermeture(); }; #endif ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������webdar-1.0.0/src/server.cpp�������������������������������������������������������������������������0000644�0001750�0001752�00000015546�15030770726�012522� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*********************************************************************/ // webdar - a web server and interface program to libdar // Copyright (C) 2013-2025 Denis Corbin // // This file is part of Webdar // // Webdar is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // Webdar is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Webdar. If not, see <http://www.gnu.org/licenses/> // //---- // to contact the author: dar.linux@free.fr /*********************************************************************/ // C system header files #include "my_config.h" extern "C" { #if HAVE_ERRNO_H #include <errno.h> #endif } // C++ system header files #include <new> // libraries header files #include <libthreadar/libthreadar.hpp> // webdar headers #include "exceptions.hpp" #include "central_report.hpp" #include "responder.hpp" #include "server.hpp" #include "webdar_tools.hpp" #include "error_page.hpp" #include "challenge.hpp" #include "choose.hpp" #include "static_object_library.hpp" #include "global_parameters.hpp" #include "disconnected_page.hpp" using namespace std; static string get_session_ID_from(const request & req); bool server::default_basic_auth = true; server::server(const shared_ptr<central_report> & log, const shared_ptr<const authentication> & auth, unique_ptr<proto_connexion> & source) : src(source, log), can_keep_session(true), locked_session(nullptr), ignore_auth(default_basic_auth? no_ignore: ignore_auth_steady) { #ifdef LIBTHREADAR_STACK_FEATURE set_stack_size(DEFAULT_STACK_SIZE); #endif if(!log) throw WEBDAR_BUG; rep = log; if(!auth) throw WEBDAR_BUG; authsrc = auth; } void server::inherited_run() { try { answer ans; string session_ID = ""; uri url; session *sess = nullptr; challenge chal(authsrc); session::session_summary info; string user; disconnected_page disconned; choose chooser; bool initial = true; try { // outer while loop(while we are in the same TCP session) while(src.get_status() == proto_connexion::connected) { try { // inner while loop (split the flow, request by request) while(sess == nullptr || (src.get_next_request_uri(url) && webdar_tools_get_session_ID_from_URI(url) == sess->get_session_ID())) { cancellation_checkpoint(); try { const request & req = src.get_request(); // pending for the next request to come ans.clear(); // extract session info if any session_ID = get_session_ID_from(req); if(session_ID == STATIC_PATH_ID) { try { const static_object *obj = nullptr; chemin tmp = req.get_uri().get_path(); string objname = tmp.back(); tmp.pop_back(); if(tmp.front() != STATIC_PATH_ID) throw WEBDAR_BUG; if(tmp.size() != 1) throw exception_range("local exception to trigger an answer with STATUS_CODE_NOT_FOUND"); obj = static_object_library::find_object(objname); if(obj == nullptr) throw WEBDAR_BUG; ans = obj->give_answer(); } catch(exception_range & e) { ans.set_reason("unknown static object"); ans.set_status(STATUS_CODE_NOT_FOUND); } } else // not a path to a static object { // show the disconnected page with uri cleaned from session info if(ignore_auth == ignore_auth_redir) { ignore_auth = ignore_auth_steady; disconned.set_redirect(false); ans = disconned.give_answer(req); } // check whether the session is authenticated else if(!chal.is_an_authoritative_request(req, user) || ignore_auth == ignore_auth_steady) { // ask for user authentication ans = chal.give_answer(req); ignore_auth = no_ignore; } else // session authenticated for user "user" { chooser.set_owner(user); if(!session::get_session_info(session_ID, info) || info.locked || info.owner != user) { // session in URL is not valid for that user // try creating a first session if just connected // and no other session was created so far for that // user, then go to that session (refresh in the provided answer) if(!initial || !session::create_new_session(user, true, req, ans)) { // else display the list of available sessions for that user initial = false; ans = chooser.give_answer(req); if(chooser.disconnection_requested() && !default_basic_auth) { ignore_auth = ignore_auth_redir; disconned.set_redirect(true); ans = disconned.give_answer(req); } } } else // this is a valid session for that user { if(sess != nullptr && sess->get_session_ID() != session_ID) throw WEBDAR_BUG; if(sess == nullptr) { sess = session::acquire_session(session_ID); if(sess == nullptr) throw WEBDAR_BUG; } // obtaining the answer from the session object ans = sess->give_answer(req); if(sess->disconnection_requested() && !default_basic_auth) { ignore_auth = ignore_auth_redir; disconned.set_redirect(true); ans = disconned.give_answer(req); } } } } // send back the anwser src.send_answer(ans); } catch(exception_signal & e) { // nothing to do } catch(exception_input & e) { // nothing to do } } // end of the inner while loop // release the lock for the current session if(sess != nullptr) { session::release_session(sess); sess = nullptr; } } catch(...) { // release the lock for the current session if(sess != nullptr) { session::release_session(sess); sess = nullptr; } src.close(); throw; } } // end of outler while loop } catch(exception_range & e) { rep->report(notice, string("Server thread ending: ") + e.get_message()); } } catch(...) { end_all_peers(); throw; } end_all_peers(); } void server::end_all_peers() { reference* ptr = nullptr; reset_read_peers(); while(read_next_peer(ptr)) break_peer_with(ptr); // there should only be at most one peer: the server_pool that if we have been created by such object } static string get_session_ID_from(const request & req) { return webdar_tools_get_session_ID_from_URI(req.get_uri()); } ����������������������������������������������������������������������������������������������������������������������������������������������������������webdar-1.0.0/src/archive_restore.cpp����������������������������������������������������������������0000644�0001750�0001752�00000006241�15030770722�014364� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*********************************************************************/ // webdar - a web server and interface program to libdar // Copyright (C) 2013-2025 Denis Corbin // // This file is part of Webdar // // Webdar is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // Webdar is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Webdar. If not, see <http://www.gnu.org/licenses/> // //---- // to contact the author: dar.linux@free.fr /*********************************************************************/ // C system header files #include "my_config.h" extern "C" { } // C++ system header files // webdar headers #include "tokens.hpp" #include "exceptions.hpp" // #include "archive_restore.hpp" using namespace std; archive_restore::archive_restore(): param(nullptr) { #ifdef LIBTHREADAR_STACK_FEATURE set_stack_size(DEFAULT_STACK_SIZE); #endif } void archive_restore::inherited_run() { try { if(!ui && ! ui->get_user_interaction()) throw WEBDAR_BUG; ui->clear(); ui->auto_hide(false, false); if(param == nullptr) throw WEBDAR_BUG; libdar::path archpath(param->get_archive_path(), true); libdar::path fs_root(param->get_fs_root(), true); string basename(param->get_archive_basename()); libdar::archive_options_extract extract_opt(param->get_extraction_options()); libdar::archive_options_read read_opt(param->get_read_options(ui)); libdar::statistics* progressive_report = ui->get_statistics().get_libdar_statistics(); cancellation_checkpoint(); libdar::archive arch(ui->get_user_interaction(), archpath, basename, EXTENSION, read_opt); // restting counters and logs ui->get_statistics().clear_counters(); ui->get_statistics().clear_labels(); ui->get_statistics().set_treated_label("item(s) restored"); ui->get_statistics().set_skipped_label("item(s) not restored (not saved in archive)"); ui->get_statistics().set_tooold_label("item(s) not restored (overwriting policy decision)"); ui->get_statistics().set_errored_label("item(s) failed to restore (file system error)"); ui->get_statistics().set_ignored_label("item(s) ignored (excluded by filters)"); ui->get_statistics().set_hard_links_label("hard link(s) restored"); ui->get_statistics().set_ea_treated_label("item(s) having their EA restored"); ui->get_statistics().set_total_label("item(s) considered"); cancellation_checkpoint(); libdar::statistics final = arch.op_extract(fs_root, extract_opt, progressive_report); } catch(libdar::Egeneric & e) { throw exception_libcall(e); } } void archive_restore::signaled_inherited_cancel() { pthread_t libdar_tid; libdar::thread_cancellation th; if(is_running(libdar_tid)) th.cancel(libdar_tid, true, 0); } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������webdar-1.0.0/src/html_level.cpp���������������������������������������������������������������������0000644�0001750�0001752�00000005567�14773727251�013361� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*********************************************************************/ // webdar - a web server and interface program to libdar // Copyright (C) 2013-2025 Denis Corbin // // This file is part of Webdar // // Webdar is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // Webdar is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Webdar. If not, see <http://www.gnu.org/licenses/> // //---- // to contact the author: dar.linux@free.fr /*********************************************************************/ // C system header files #include "my_config.h" extern "C" { } // C++ system header files // webdar headers // #include "html_level.hpp" using namespace std; html_level::html_level() { nxt = table.begin(); } void html_level::adopt_static_html(const string & html) { bundle tmp; tmp.obj = nullptr; tmp.static_text = html; table.push_back(tmp); reset_read_next(); my_body_part_has_changed(); } void html_level::clear_children() { orphan_all_children(); table.clear(); reset_read_next(); my_body_part_has_changed(); // not all children are body_builder inherited objects // we must call my_body_part_has_changed() for the // situation where no body_part::foresake() would be // invoked. } void html_level::has_adopted(body_builder *obj) { bundle tmp; if(obj == nullptr) throw WEBDAR_BUG; tmp.obj = obj; table.push_back(tmp); reset_read_next(); } void html_level::will_foresake(body_builder *obj) { list<bundle>::iterator it = table.begin(); while(it != table.end() && it->obj != obj) ++it; if(it != table.end()) { if(nxt == it) ++nxt; // pass over the object about to be removed table.erase(it); } } bool html_level::read_next(bundle & bdl) const { if(nxt != table.end()) { bdl = (*nxt); ++nxt; return true; } else return false; } string html_level::get_body_part_from_children_as_a_block(const chemin & path, const request & req) { string ret = ""; chemin sub_path = path; bundle bdl; if(sub_path.size() > 0) sub_path.pop_front(); reset_read_next(); while(read_next(bdl)) { if(bdl.obj != nullptr) ret += bdl.obj->get_body_part(sub_path, req); else ret += bdl.static_text; } return ret; } string html_level::inherited_get_body_part(const chemin & path, const request & req) { return get_body_part_from_children_as_a_block(path, req); } �����������������������������������������������������������������������������������������������������������������������������������������webdar-1.0.0/src/html_form_same_fs.hpp��������������������������������������������������������������0000644�0001750�0001752�00000010330�14773727251�014677� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*********************************************************************/ // webdar - a web server and interface program to libdar // Copyright (C) 2013-2025 Denis Corbin // // This file is part of Webdar // // Webdar is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // Webdar is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Webdar. If not, see <http://www.gnu.org/licenses/> // //---- // to contact the author: dar.linux@free.fr /*********************************************************************/ #ifndef HTML_FORM_SAME_FS_HPP #define HTML_FORM_SAME_FS_HPP // C system header files #include "my_config.h" extern "C" { } // C++ system header files // webdar headers #include "html_form_dynamic_table.hpp" #include "jsoner.hpp" #include "actor.hpp" #include "events.hpp" /// class html_form_same_fs provide interface for the user to filter base on mounted file system /// this html components is consitued of: /// /** \verbatim +----html_form_dynamic_table---------------+-------+ | | | +---------------------------------------+ |+-+ | |<html_form_input_file::text> | || | del| |---------------------------------------+ |+-+ | +---------------------------------------+ |+-+ | |<html_form_input_file::text> | || | del| |---------------------------------------+ |+-+ | +---------------------------------------+ |+-+ | |<html_form_input_file::text> | || | del| |---------------------------------------+ |+-+ | +---------------------------------------+ |+-+ | |<html_form_input_file::text> | || | del| |---------------------------------------+ |+-+ | +------------------------------------------+-------+ +------------+ | add entry | +------------+ \endverbatim **/ /// \note this component should be adopted by an html_form directly /// or not (through an html_form_fieldset for example) /// class html_form_same_fs : public body_builder, public html_form_dynamic_table_object_provider, public jsoner, public actor, public events { public: static const std::string changed; html_form_same_fs(); html_form_same_fs(const html_form_same_fs & ref); html_form_same_fs(html_form_same_fs && ref) noexcept = delete; html_form_same_fs & operator = (const html_form_same_fs & ref) = delete; html_form_same_fs & operator = (html_form_same_fs && ref) noexcept = delete; ~html_form_same_fs() = default; /// return the included fs std::vector<std::string> get_included_fs_path() const; /// return the excluded fs std::vector<std::string> get_excluded_fs_path() const; /// inherited from html_form_dynamic_table_object_provider virtual std::unique_ptr<body_builder> provide_object_of_type(unsigned int num, const std::string & context, std::string & changed_event) const override; /// inherited from jsoner virtual void load_json(const json & source) override; /// inherited from jsoner virtual json save_json() const override; /// inherited from jsoner virtual void clear_json() override; /// inherited from actor virtual void on_event(const std::string & event_name) override; protected: /// inherited methods from body_builder virtual std::string inherited_get_body_part(const chemin & path, const request & req) override; /// inherited from body_builder virtual void new_css_library_available() override; private: html_form_dynamic_table table; std::vector<std::string> gather_content_of_type(unsigned int type) const; static constexpr const unsigned int format_version = 1; static constexpr const char* myclass_id = "html_form_same_fs"; static constexpr const char* jlabel_contents = "contents"; }; #endif ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������webdar-1.0.0/src/html_archive_extract.hpp�����������������������������������������������������������0000644�0001750�0001752�00000005661�14773727251�015425� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*********************************************************************/ // webdar - a web server and interface program to libdar // Copyright (C) 2013-2025 Denis Corbin // // This file is part of Webdar // // Webdar is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // Webdar is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Webdar. If not, see <http://www.gnu.org/licenses/> // //---- // to contact the author: dar.linux@free.fr /*********************************************************************/ #ifndef HTML_ARCHIVE_EXTRACT_HPP #define HTML_ARCHIVE_EXTRACT_HPP // C system header files #include "my_config.h" extern "C" { } // C++ system header files #include <libthreadar/libthreadar.hpp> // webdar headers #include "body_builder.hpp" #include "actor.hpp" #include "html_derouleur.hpp" #include "html_form_input_file.hpp" #include "html_options_extract.hpp" #include "guichet.hpp" #include "html_text.hpp" /// html component used to let the user provide parameters for an isolation operation class html_archive_extract: public body_builder, public actor { public: html_archive_extract(); html_archive_extract(const html_archive_extract & ref) = delete; html_archive_extract(html_archive_extract && ref) noexcept = delete; html_archive_extract & operator = (const html_archive_extract & ref) = delete; html_archive_extract & operator = (html_archive_extract && ref) noexcept = delete; ~html_archive_extract() = default; /// mandatory call to invoke ASAP after constructor void set_biblio(const std::shared_ptr<bibliotheque> & ptr); const std::string & get_fs_root() const { return extract_fs_root.get_value(); }; libdar::archive_options_extract get_options() const { return opt_extract->get_options(); }; /// inherited from actor virtual void on_event(const std::string & event_name) override; protected: /// inherited from body_builder virtual std::string inherited_get_body_part(const chemin & path, const request & req) override; /// inherited from body_builder virtual void new_css_library_available() override; private: html_derouleur extract_params; html_form_fieldset extract_fs_root_fs; html_form_input_file extract_fs_root; html_form extract_fs_root_form; html_text in_place_msg; guichet guichet_opt_extract; std::shared_ptr<html_options_extract> opt_extract; static const std::string extract_root_changed; }; #endif �������������������������������������������������������������������������������webdar-1.0.0/src/html_form_mask_subdir.cpp����������������������������������������������������������0000644�0001750�0001752�00000022643�15044151201�015544� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*********************************************************************/ // webdar - a web server and interface program to libdar // Copyright (C) 2013-2025 Denis Corbin // // This file is part of Webdar // // Webdar is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // Webdar is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Webdar. If not, see <http://www.gnu.org/licenses/> // //---- // to contact the author: dar.linux@free.fr /*********************************************************************/ // C system header files #include "my_config.h" extern "C" { } // C++ system header files #include <dar/libdar.hpp> #include <dar/tools.hpp> // webdar headers #include "webdar_css_style.hpp" #include "tooltip_messages.hpp" // #include "html_form_mask_subdir.hpp" using namespace std; const string html_form_mask_subdir::changed = "hfms_changed"; const string html_form_mask_subdir::update = "hfms_update"; html_form_mask_subdir::html_form_mask_subdir(bool absolute_path_accepted, const shared_ptr<const libdar::path> & fs_root): absolute_ok(absolute_path_accepted), prefix(fs_root), fs(""), mask_type("Mask Type"), casesensitivity("Case Sensitive", html_form_input::check, "", // see clear() method for defaults "", ""), regex("Regular expression in place of glob expression", html_form_input::check, "", // see clear() method for defaults "", ""), mask_subdir("Concerned path", html_form_input::text, "", "", webdar_css_style::width_100vw) { check_ptr(); // component configuration mask_type.add_choice("0", "Include path and subdirs (no wildcard)"); mask_type.add_choice("1", "Exclude path and subdirs"); init(); clear(); } html_form_mask_subdir::html_form_mask_subdir(const html_form_mask_subdir & ref): html_mask(ref), // parent class absolute_ok(ref.absolute_ok), prefix(ref.prefix), fs(ref.fs), mask_type(ref.mask_type), casesensitivity(ref.casesensitivity), regex(ref.regex), mask_subdir(ref.mask_subdir) { check_ptr(); init(); } void html_form_mask_subdir::clear() { mask_type.set_selected_num(0); casesensitivity.set_value_as_bool(true); regex.set_value_as_bool(false); mask_subdir.set_value(""); } unique_ptr<libdar::mask> html_form_mask_subdir::get_mask() const { bool casesensit = casesensitivity.get_value_as_bool(); unique_ptr<libdar::mask> ret; libdar::path pathval("/"); check_ptr(); try { pathval = check_absolute_path_requirement(); if(! pathval.is_absolute()) pathval = *prefix + pathval; } catch(libdar::Egeneric & e) { e.prepend_message("Error met while creating file name based filtering"); throw exception_libcall(e); } switch(mask_type.get_selected_num()) { case 0: // Include path ret.reset(new (nothrow) libdar::simple_path_mask(pathval, casesensit)); break; case 1: // Exclude path if(! regex.get_value_as_bool()) { // glob expression libdar::et_mask* tmp = new (nothrow) libdar::et_mask(); ret.reset(tmp); // the object is now managed by the shared_ptr but we // still have tmp as a more specific pointer type on it if(!ret || tmp == nullptr) throw exception_memory(); tmp->add_mask(libdar::not_mask(libdar::simple_mask(pathval.display(), casesensit))); tmp->add_mask(libdar::not_mask(libdar::simple_mask(pathval.display() + "/*", casesensit))); } else { // regular expression (temporary variable used for debugging purposes if needed) string tmp = libdar::tools_build_regex_for_exclude_mask(prefix->display(), mask_subdir.get_value()); ret.reset(new (nothrow) libdar::not_mask(libdar::regular_mask(tmp, casesensit))); } break; default: throw WEBDAR_BUG; } if(!ret) throw exception_memory(); return ret; } bool html_form_mask_subdir::is_relative() const { string val = mask_subdir.get_value(); if(! val.empty()) { libdar::path valpath = libdar::path(val); return valpath.is_relative(); } else return true; // empty string is compatible with relative path } void html_form_mask_subdir::load_json(const json & source) { try { unsigned int version; string class_id; json config = unwrap_config_from_json_header(source, version, class_id); if(class_id != myclass_id) throw exception_range(libdar::tools_printf("Unexpected class_id in json data, found %s while expecting %s", class_id.c_str(), myclass_id)); if(version > format_version) throw exception_range(libdar::tools_printf("Json format version too hight for %s, upgrade your webdar software", myclass_id)); mask_type.set_selected_id_with_warning(config.at(jlabel_type), jlabel_type); casesensitivity.set_value_as_bool(config.at(jlabel_casesensit)); regex.set_value_as_bool(config.at(jlabel_regex)); mask_subdir.set_value(config.at(jlabel_mask)); } catch(json::exception & e) { throw exception_json("Error loading html_form_mask_expression config", e); } } json html_form_mask_subdir::save_json() const { json ret; // absolute_OK is not set nor saved as json // prefix is not set nor saved ret[jlabel_type] = mask_type.get_selected_id(); ret[jlabel_casesensit] = casesensitivity.get_value_as_bool(); ret[jlabel_regex] = regex.get_value_as_bool(); ret[jlabel_mask] = mask_subdir.get_value(); return wrap_config_with_json_header(format_version, myclass_id, ret); } void html_form_mask_subdir::on_event(const string & event_name) { if(event_name == html_form_select::changed) { regex.set_visible(mask_type.get_selected_num() == 1); // regex is only visible if excluding a path fs.change_label(tell_action()); } else if(event_name == html_form_input::changed) { fs.change_label(tell_action()); } else if(event_name == update) { fs.change_label(tell_action()); (void)check_absolute_path_requirement(); // we ignore the returned value } else throw WEBDAR_BUG; act(changed); } string html_form_mask_subdir::inherited_get_body_part(const chemin & path, const request & req) { string ret = get_body_part_from_all_children(path, req); if(! absolute_ok) { string val = mask_subdir.get_value(); if(! is_relative()) { if(mask_subdir.box_get_css_class() != webdar_css_style::red_border) { mask_subdir.box_set_css_class(webdar_css_style::red_border); throw exception_range("absolute path are not allowed for path filtering in that context"); } } else mask_subdir.box_set_css_class(""); } else mask_subdir.box_set_css_class(""); return ret; } void html_form_mask_subdir::new_css_library_available() { unique_ptr<css_library> & csslib = lookup_css_library(); if(!csslib) throw WEBDAR_BUG; webdar_css_style::update_library(*csslib); } void html_form_mask_subdir::init() { // adoption tree fs.adopt(&mask_type); fs.adopt(&casesensitivity); fs.adopt(®ex); fs.adopt(&mask_subdir); adopt(&fs); fs.change_label(tell_action()); // events mask_type.record_actor_on_event(this, html_form_select::changed); casesensitivity.record_actor_on_event(this, html_form_input::changed); regex.record_actor_on_event(this, html_form_input::changed); mask_subdir.record_actor_on_event(this, html_form_input::changed); register_name(changed); // visibity regex.set_visible(mask_type.get_selected_num() == 1); // css stuff fs.add_label_css_class(webdar_css_style::text_bold); // tooltips mask_type.set_tooltip(TOOLTIP_HFMS_TYPE); casesensitivity.set_tooltip(TOOLTIP_HFMS_CASE); regex.set_tooltip(TOOLTIP_HFMS_REGEX); mask_subdir.set_tooltip(TOOLTIP_HFMS_MASK); } string html_form_mask_subdir::tell_action() const { string ret = ""; check_ptr(); switch(mask_type.get_selected_num()) { case 0: ret += "path is or is a subdir of "; break; case 1: ret += "path does not match "; if(regex.get_value_as_bool()) ret += "the regular expression "; else ret += "the glob expression "; break; default: throw WEBDAR_BUG; } ret += "\""; if(! mask_subdir.get_value().empty()) { try { libdar::path tmp(mask_subdir.get_value()); if(! tmp.is_absolute()) tmp = *prefix + tmp; ret += tmp.display(); } catch(libdar::Egeneric & e) { e.prepend_message("Error met while evaluation path base filtering: "); throw exception_libcall(e); } } ret += "\" "; if(casesensitivity.get_value_as_bool()) ret += "(case sensitive)"; else ret += "(case INsensitive)"; return ret; } void html_form_mask_subdir::check_ptr() const { if(! prefix) throw WEBDAR_BUG; } libdar::path html_form_mask_subdir::check_absolute_path_requirement() const { libdar::path ret = libdar::path(mask_subdir.get_value()); if(ret.is_absolute() && ! absolute_ok) throw exception_range("Cannot proceed to the operation due to forbidden absolute paths. Please first remove absolute paths"); return ret; } ���������������������������������������������������������������������������������������������webdar-1.0.0/src/html_table.hpp���������������������������������������������������������������������0000644�0001750�0001752�00000006427�14773727251�013342� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*********************************************************************/ // webdar - a web server and interface program to libdar // Copyright (C) 2013-2025 Denis Corbin // // This file is part of Webdar // // Webdar is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // Webdar is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Webdar. If not, see <http://www.gnu.org/licenses/> // //---- // to contact the author: dar.linux@free.fr /*********************************************************************/ #ifndef HTML_TABLE_HPP #define HTML_TABLE_HPP // C system header files #include "my_config.h" extern "C" { } // C++ system header files #include <vector> #include <string> // webdar headers #include "html_level.hpp" #include "webdar_tools.hpp" #include "exceptions.hpp" /// html component implementing the html table structure /// this class inherit from html_level::adopt_static_html() /// and body_builder::adopt() methods. The adopted objects /// by either of these forms are placed one by one in a cell /// from the top row to the bottom and in each row from the /// left most cell to the right most cell. class html_table: public html_level { public: html_table(unsigned int width); html_table(const html_table & ref) = delete; html_table(html_table && ref) noexcept = delete; const html_table & operator = (const html_table & ref) = delete; html_table & operator = (html_table && ref) noexcept = delete; ~html_table() { clear_children(); }; /// whether border are collapsed or separated (collasped by default) void css_border_collapsed(bool mode); /// define a specific css object for the _cells_ first row void set_css_class_first_row(const std::string & val); /// clear a previously assigned css object to the title row void set_css_class_first_row(); /// define a specific css class for the _cells_ first column void set_css_class_first_column(const std::string & val); /// clears a previously assigned css object to the first column void set_css_class_first_column(); /// assigned to all cells except those of the first raw if set_css_cells_first_raw was set void set_css_class_cells(const std::string & val); /// clears a previously assigned css object to the non-title rows void set_css_class_cells(); /// clear table content void clear() { clear_children(); }; /// get value provided at construction time unsigned int get_width() const { return dim_x; }; protected: /// inherited from body_builder virtual std::string inherited_get_body_part(const chemin & path, const request & req) override; private: unsigned int dim_x; std::string border_collapsed; bool cells_title_set; bool cells_first_column_set; std::string css_class_title; std::string css_class_cells; std::string css_class_column1; }; #endif �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������webdar-1.0.0/src/html_mask_form_filename.hpp��������������������������������������������������������0000644�0001750�0001752�00000012645�15044133220�016043� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*********************************************************************/ // webdar - a web server and interface program to libdar // Copyright (C) 2013-2025 Denis Corbin // // This file is part of Webdar // // Webdar is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // Webdar is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Webdar. If not, see <http://www.gnu.org/licenses/> // //---- // to contact the author: dar.linux@free.fr /*********************************************************************/ #ifndef HTML_MASK_FORM_FILENAME_HPP #define HTML_MASK_FORM_FILENAME_HPP // C system header files #include "my_config.h" extern "C" { } // C++ system header files // webdar headers #include "body_builder.hpp" #include "actor.hpp" #include "events.hpp" #include "html_form_dynamic_table.hpp" #include "jsoner.hpp" #include "html_form.hpp" #include "html_mask.hpp" #include "bibliotheque_subconfig.hpp" #include "html_form_mask_bool.hpp" #include "html_form_mask_expression.hpp" /// class html_mask_form_filename let user define mask applied to strings (filename, extended attributes, ...) /// at the difference of the html_form_* classes which are component to be included into html_form /// this class is a full html_form dedicated to the specific case of mask for filename filtering class html_mask_form_filename : public body_builder, public actor, public events, public html_form_dynamic_table_object_provider, public jsoner, public html_mask, public bibliotheque_subconfig { public: static const std::string changed; /// constructor /// \param[in] subject is the name of the type of object we filter like "file name" or "extended attributes" /// this string is used to build the summary phrase describing the action the filter will perform html_mask_form_filename(const std::string & subject); html_mask_form_filename(const html_mask_form_filename & ref); html_mask_form_filename(html_mask_form_filename && ref) noexcept = delete; html_mask_form_filename & operator = (const html_mask_form_filename & ref) = delete; html_mask_form_filename & operator = (html_mask_form_filename && ref) noexcept = delete; ~html_mask_form_filename() = default; /// should be invoked ASAP after object construction void set_child(const std::shared_ptr<bibliotheque> & ptr, bibliotheque::category cat); /// inherited from html_mask virtual std::unique_ptr<libdar::mask> get_mask() const override { return root.get_mask(); }; /// inherited from html_mask virtual bool is_relative() const override { return root.is_relative(); }; /// inherited from html_form_dynamic_table virtual std::unique_ptr<body_builder> provide_object_of_type(unsigned int num, const std::string & context, std::string & changed_event) const override; /// inherited from jsoner virtual void load_json(const json & source) override; /// inherited from jsoner virtual json save_json() const override; /// inherited from jsoner virtual void clear_json() override; /// inherited from bibliotheque_subconfig virtual bibliotheque::using_set get_using_set() const override; /// inherited from actor virtual void on_event(const std::string & event_name) override; /// manually set the bool mode of the root bool object /// \param[in] mode should be either in html_form_mask_bool::and_op or html_form_mask_bool::and_or or other bool mode of that /// class if more exist in the future. void manually_set_bool_mode(const std::string & mode) { root.manually_set_bool_mode(mode); }; /// manually add an object and return its address /// \param[in] type_name is to one of the available labels (see get_labels()). std::shared_ptr<body_builder> manually_add_object(const std::string & type_name); /// obtain the available labels defining the different available types of this mask std::deque<std::string> get_labels() const { return labels; }; /// inherited from body_builder virtual void bind_to_anchor(const std::string & val) override { form.bind_to_anchor(val); }; protected: /// inherited from body_builder virtual std::string inherited_get_body_part(const chemin & path, const request & req) override; /// inherited from body_builder virtual void css_classes_have_changed() override; private: std::deque<std::string> labels; std::string sujet; bibliotheque::category categ; std::shared_ptr<bibliotheque> biblio; html_form form; html_form_mask_bool root; void init(); template <class T> void init_bool_obj(T & obj) const; static constexpr const unsigned int format_version = 1; static constexpr const char* myclass_id = "html_mask_form_filename"; static constexpr const char* jlabel_bool_config = "bool-config"; }; template <class T> void html_mask_form_filename::init_bool_obj(T & obj) const { obj.set_obj_type_provider(this); for(std::deque<std::string>::const_iterator it = labels.begin(); it != labels.end(); ++it) obj.add_mask_type(*it); } #endif �������������������������������������������������������������������������������������������webdar-1.0.0/src/css_class.hpp����������������������������������������������������������������������0000644�0001750�0001752�00000013521�15045120420�013147� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*********************************************************************/ // webdar - a web server and interface program to libdar // Copyright (C) 2013-2025 Denis Corbin // // This file is part of Webdar // // Webdar is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // Webdar is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Webdar. If not, see <http://www.gnu.org/licenses/> // //---- // to contact the author: dar.linux@free.fr /*********************************************************************/ #ifndef CSS_CLASS_HPP #define CSS_CLASS_HPP // C system header files #include "my_config.h" extern "C" { } // C++ system header files #include <string> #include <map> // webdar headers #include "css.hpp" /// class css_class gather css attributed under a given label /// associate a name to a css object /// in other words contains what HTML standard /// defines as a css class: a name associated /// to a list of CSS properties. /// this class also include selectors like :hover and so on class css_class { public: /// selector_type is ordered for :hover being defined after :link and :visited enum selector_type { active, checked, disabled, enabled, focus, hover, link, in_range, invalid, out_of_range, read_only, read_write, root, target, valid, visited }; enum pseudo_element_type { first_line, first_letter, before, after, marker, selection }; css_class(const std::string & name = ""); css_class(const std::string & name, const css & ref); css_class(const css_class & ref) = default; css_class(css_class && ref) noexcept = default; css_class & operator = (const css_class & ref) = default; css_class & operator = (css_class && ref) noexcept = default; virtual ~css_class() = default; /// change css_class name void change_name(const std::string & newname) { class_name = newname; }; /// get the css_class name const std::string & get_name() const { return class_name; }; /// defines or overwirte the css_class value from a css object void set_value(const css & ref) { class_value = ref; }; /// obtain the current value const css & get_value() const { if(class_name.empty()) throw WEBDAR_BUG; return class_value; }; /// clear css_class value and all selector values void clear_value() { class_value.clear(); }; /// defines the value for a given css_selector on that class (or pseudo-class in CSS parlance) /// \param[in] sel the selector to be defined /// \param[in] ref the css definition to give to that selector (= pseudo-class) /// \param[in] descendant not an empty string, the definition applies to the specified /// descendant components (html type, like "p" for paragraph, "div" or other) or subcomponent with the /// provided class name. /// \note a descendant component is any component specified inside the current component, for example /// in the following html string "<div> demo <p> something </p> something else</div>" "<p>" /// is a descendant of "<div>". If one wants a specific css definition for /// "<p>" inside "<div>", the descendant string here should be "p" and the current css_class object /// be used (or rather referred by its name) by an html_div component. if the descendant is to be /// a class name rather than an HTML component name, it should be preceeded by a dot like ".myclassname". /// combining HTML component name with class is possible: "p.myclassname" and restricts the /// css definition to only "<p>" descendant having the "class=myclassname" attributes. void set_selector(selector_type sel, const css & ref, const std::string & descendant = ""); /// remove definition for the given selector type void clear_selector(selector_type sel, const std::string & descendant = ""); /// defines the value of a given pseudo-element /// \note same behavior of set_selector() above, but for pseudo-elements instead of pseudo-classes void set_pseudo_element(pseudo_element_type pe, const css & val, const std::string & descendant = ""); /// remove definition for the given pseudo-element void clear_pseudo_element(pseudo_element_type pe, const std::string & descendant = ""); /// clear all css definition, including those provided with selector, only the css name is kept void clear() { class_value.clear(); selectors.clear(); }; /// returns the css class definition std::string get_definition() const; private: template<class T> struct sujet { T type; std::string subcomp; sujet(T t): type(t) { subcomp.clear(); }; sujet(T t, const std::string & sub): type(t), subcomp(sub) {}; sujet(const sujet & ref) = default; sujet(sujet && ref) = default; sujet & operator = (const sujet & ref) = default; sujet & operator = (sujet && ref) = default; ~sujet() = default; // to be used a index of std::map bool operator < (const sujet & ref) const; }; std::string class_name; std::string descendant; css class_value; std::map<sujet<selector_type>, css> selectors; std::map<sujet<pseudo_element_type>, css> pseudo_elements; static std::string get_selector_name(selector_type sel); static std::string get_pseudo_element_name(pseudo_element_type pe); }; template<class T> bool css_class::sujet<T>::operator < (const sujet & ref) const { if(type < ref.type) return true; else if(type == ref.type) return subcomp < ref.subcomp; else return false; } #endif �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������webdar-1.0.0/src/css_class_group.cpp����������������������������������������������������������������0000644�0001750�0001752�00000004254�14773727251�014407� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*********************************************************************/ // webdar - a web server and interface program to libdar // Copyright (C) 2013-2025 Denis Corbin // // This file is part of Webdar // // Webdar is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // Webdar is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Webdar. If not, see <http://www.gnu.org/licenses/> // //---- // to contact the author: dar.linux@free.fr /*********************************************************************/ // C system header files #include "my_config.h" extern "C" { } // C++ system header files // webdar headers #include "exceptions.hpp" // #include "css_class_group.hpp" using namespace std; void css_class_group::add_css_class(const string & name) { if(content.find(name) != content.end()) throw exception_range(string("the css_class name to add is already present: ") + name); content.insert(name); } void css_class_group::add_css_class(const css_class_group & cg) { set<string>::iterator it = cg.content.begin(); while(it != cg.content.end()) { add_css_class(*it); ++it; } } void css_class_group::remove_css_class(const string & name) { if(content.find(name) == content.end()) throw exception_range(string("the css_class name to remove is not present in the list: ") + name); content.erase(name); reader = content.begin(); } void css_class_group::clear_css_classes() { content.clear(); reader = content.begin(); } void css_class_group::reset_read() const { reader = content.begin(); } bool css_class_group::read_next(string & next_class) const { if(reader == content.end()) return false; else { next_class = *reader; ++reader; return true; } } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������webdar-1.0.0/src/html_bibliotheque.cpp��������������������������������������������������������������0000644�0001750�0001752�00000112342�15044144574�014705� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*********************************************************************/ // webdar - a web server and interface program to libdar // Copyright (C) 2013-2025 Denis Corbin // // This file is part of Webdar // // Webdar is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // Webdar is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Webdar. If not, see <http://www.gnu.org/licenses/> // //---- // to contact the author: dar.linux@free.fr /*********************************************************************/ // C system header files #include "my_config.h" extern "C" { } // C++ system header files #include <fstream> #include <dar/tools.hpp> // webdar headers #include "environment.hpp" #include "tokens.hpp" #include "html_form_overwrite_action.hpp" #include "html_form_overwrite_chain_action.hpp" #include "html_form_overwrite_conditional_action.hpp" #include "html_form_overwrite_combining_criterium.hpp" #include "html_form_overwrite_base_criterium.hpp" #include "html_form_overwrite_constant_action.hpp" #include "tooltip_messages.hpp" // #include "html_bibliotheque.hpp" using namespace std; const string html_bibliotheque::event_download = "html_bibl_download"; html_bibliotheque::html_bibliotheque(shared_ptr<bibliotheque> & ptr, const string & bib_path): top_fs(""), form("Update"), filename_fs(""), filename("Filename", bib_path, "", webdar_css_style::width_80vw, "Select file used to store configurations"), autosave("Auto-saving to file", html_form_input::check, "x", "", ""), save("Save", event_save), load("Load", event_load), bot_fs(""), upload_form("Upload"), upload_file("Webdar configuration to upload", html_form_input::file, "", "", ""), down_fs(""), download("Download", event_download), clear_fs(""), clear_conf("Clear all configurations", event_clear), generate_defaults("Regenerate missing default configs", event_defaults), expect_upload(false), q_context(context_undefined) { unique_ptr<html_entrepot_landing> tmp_e; unique_ptr<html_mask_form_filename> tmp_fm; unique_ptr<html_mask_form_path> tmp_fp; unique_ptr<html_compression_params> tmp_compr; unique_ptr<html_slicing> tmp_slicing; unique_ptr<html_ciphering> tmp_ciphering; unique_ptr<html_form_sig_block_size> tmp_delta_sig; unique_ptr<html_form_overwrite_action> tmp_over_policy; unique_ptr<html_options_test> tmp_options_test; unique_ptr<html_options_compare> tmp_options_compare; unique_ptr<html_options_read> tmp_options_read; unique_ptr<html_options_create> tmp_options_create; unique_ptr<html_options_isolate> tmp_options_isolate; unique_ptr<html_options_merge> tmp_options_merge; unique_ptr<html_options_repair> tmp_options_repair; unique_ptr<html_options_extract> tmp_options_extract; if(!ptr) throw WEBDAR_BUG; biblio = ptr; if(! biblio) throw WEBDAR_BUG; upload_form.set_enctype("multipart/form-data"); ok_loaded.add_text(0, "Configuration loaded successfully!"); ok_saved.add_text(0, "Configuration saved successfully!"); ok_uploaded.add_text(0, "Configuration uploaded successfully!"); ok_cleared.add_text(0, "Configuration cleared successfully!"); download.set_download(true); download.set_filename("webdar.json"); intro.add_text(3, "Configurations"); intro.add_text(0, "This main tab gives the ability to save to file, load from file,"); intro.add_text(0, "download and upload through HTTP(s) the whole configurations defined in all the following tabs."); intro.add_paragraph(); intro.add_text(0, "Note: If saving to file or loading from file should usually be fine in term of security (this is saved locally, on the host where webdar is running),"); intro.add_text(0, "this is not true while downloading or uploading over a non-secured session (not secured for http sessions, but OK for https session):"); intro.add_text(0, "All configuration information, including login and passwords used to cipher archive and backups or to connect to remote repositories, if you have enterred such type of information"); intro.add_text(0, "in the followin tabs, would be transmitted in clear and accessible to anyone"); intro.add_text(0, "having access to the underneath network used between Webdar and your browser."); intro.add_paragraph(); intro.add_text(0, "This security warning also applies when using untrusted SSL certificates for Webdar (risk of man-in-the-middle attack)."); saved_status.add_text(0, "All configurations saved to file"); unsaved_status.add_text(0, "Not all configurations saved to file!"); // main tab filename_fs.adopt(&filename); filename_fs.adopt(&autosave); form.adopt(&filename_fs); top_fs.adopt(&form); top_fs.adopt(&save); top_fs.adopt(&load); top_fs.adopt(&ok_loaded); top_fs.adopt(&ok_saved); upload_form.adopt(&upload_file); bot_fs.adopt(&upload_form); bot_fs.adopt(&ok_uploaded); down_fs.adopt(&download); clear_fs.adopt(&clear_conf); clear_fs.adopt(&generate_defaults); clear_fs.adopt(&ok_cleared); // entrepot tab tmp_e.reset(new (nothrow) html_entrepot_landing()); if(! tmp_e) throw exception_memory(); ab_entrepot.reset(new (nothrow) arriere_boutique<html_entrepot_landing>(ptr, bibliotheque::repo, tmp_e, html_entrepot_landing::changed, false)); if(! ab_entrepot) throw exception_memory(); // file mask tab tmp_fm.reset(new (nothrow) html_mask_form_filename("mask")); if(!tmp_fm) throw exception_memory(); else tmp_fm->set_child(ptr, bibliotheque::filefilter); ab_filemask.reset(new (nothrow) arriere_boutique<html_mask_form_filename>(ptr, bibliotheque::filefilter, tmp_fm, html_mask_form_filename::changed, false)); if(!ab_filemask) throw exception_memory(); // path warning absolute_path_warning.clear(); absolute_path_warning.add_text(0, "Warning, absolute path based filters, cannot be used in testing or merging operations"); // path mask tab tmp_fp.reset(new (nothrow) html_mask_form_path(true)); // allowing forbidding absolute path in bibliotheque, if used in a context where not allowed // this will trigger error and red-highlight the concerned fields. if(! tmp_fp) throw exception_memory(); else tmp_fp->set_child(ptr, bibliotheque::pathfilter); ab_pathmask.reset(new (nothrow) arriere_boutique<html_mask_form_path>(ptr, bibliotheque::pathfilter, tmp_fp, html_mask_form_path::changed, false)); if(! ab_pathmask) throw exception_memory(); // compression tab tmp_compr.reset(new (nothrow) html_compression_params(true, // resave uncompressed true, // min size true)); // show keep compressed if(! tmp_compr) throw exception_memory(); ab_compr.reset(new (nothrow) arriere_boutique<html_compression_params>(ptr, bibliotheque::compress, tmp_compr, html_compression_params::changed, false)); if(!ab_compr) throw exception_memory(); // slicing tab tmp_slicing.reset(new (nothrow) html_slicing()); if(! tmp_slicing) throw exception_memory(); ab_slicing.reset(new (nothrow) arriere_boutique<html_slicing>(ptr, bibliotheque::slicing, tmp_slicing, html_slicing::changed, false)); if(! ab_slicing) throw exception_memory(); // ciphering tab tmp_ciphering.reset(new (nothrow) html_ciphering()); if(! tmp_ciphering) throw exception_memory(); ab_ciphering.reset(new (nothrow) arriere_boutique<html_ciphering>(ptr, bibliotheque::ciphering, tmp_ciphering, html_ciphering::changed, false)); if(!ab_ciphering) throw exception_memory(); // delta sig tab tmp_delta_sig.reset(new (nothrow) html_form_sig_block_size()); if(! tmp_delta_sig) throw exception_memory(); ab_delta_sig.reset(new (nothrow) arriere_boutique<html_form_sig_block_size>(ptr, bibliotheque::delta_sig, tmp_delta_sig, html_form_sig_block_size::changed, true)); if(!ab_delta_sig) throw exception_memory(); // overwriting policy tmp_over_policy.reset(new (nothrow) html_form_overwrite_action("")); if(! tmp_over_policy) throw exception_memory(); ab_over_policy.reset(new (nothrow) arriere_boutique<html_form_overwrite_action>(ptr, bibliotheque::over_policy, tmp_over_policy, html_form_overwrite_action::changed, true)); if(!ab_over_policy) throw exception_memory(); // options test tmp_options_test.reset(new (nothrow) html_options_test()); if(! tmp_options_test) throw exception_memory(); else tmp_options_test->set_biblio(ptr); ab_options_test.reset(new (nothrow) arriere_boutique<html_options_test>(ptr, bibliotheque::conftest, tmp_options_test, html_options_test::changed, false)); if(! ab_options_test) throw exception_memory(); // options compare tmp_options_compare.reset(new (nothrow) html_options_compare()); if(!tmp_options_compare) throw exception_memory(); else tmp_options_compare->set_biblio(ptr); ab_options_compare.reset(new (nothrow) arriere_boutique<html_options_compare>(ptr, bibliotheque::confdiff, tmp_options_compare, html_options_compare::changed, false)); if(! ab_options_compare) throw exception_memory(); // options read tmp_options_read.reset(new (nothrow) html_options_read()); if(! tmp_options_read) throw exception_memory(); else tmp_options_read->set_biblio(ptr); ab_options_read.reset(new (nothrow) arriere_boutique<html_options_read>(ptr, bibliotheque::confread, tmp_options_read, html_options_read::changed, false)); if(! ab_options_read) throw exception_memory(); // options create tmp_options_create.reset(new (nothrow) html_options_create()); if(! tmp_options_create) throw exception_memory(); else tmp_options_create->set_biblio(ptr); ab_options_create.reset(new (nothrow) arriere_boutique<html_options_create>(ptr, bibliotheque::confsave, tmp_options_create, html_options_create::changed, false)); if(! ab_options_create) throw exception_memory(); // options isolate tmp_options_isolate.reset(new (nothrow) html_options_isolate()); if(! tmp_options_isolate) throw exception_memory(); else tmp_options_isolate->set_biblio(ptr); ab_options_isolate.reset(new (nothrow) arriere_boutique<html_options_isolate>(ptr, bibliotheque::confisolate, tmp_options_isolate, html_options_isolate::changed, false)); if(! ab_options_isolate) throw exception_memory(); // options merge tmp_options_merge.reset(new (nothrow) html_options_merge()); if(! tmp_options_merge) throw exception_memory(); else tmp_options_merge->set_biblio(ptr); ab_options_merge.reset(new (nothrow) arriere_boutique<html_options_merge>(ptr, bibliotheque::confmerge, tmp_options_merge, html_options_merge::changed, false)); if(! ab_options_merge) throw exception_memory(); // options repair tmp_options_repair.reset(new (nothrow) html_options_repair()); if(! tmp_options_repair) throw exception_memory(); else tmp_options_repair->set_biblio(ptr); ab_options_repair.reset(new (nothrow) arriere_boutique<html_options_repair>(ptr, bibliotheque::confrepair, tmp_options_repair, html_options_repair::changed, false)); if(! ab_options_repair) throw exception_memory(); // options extract tmp_options_extract.reset(new (nothrow) html_options_extract()); if(! tmp_options_extract) throw exception_memory(); else tmp_options_extract->set_biblio(ptr); ab_options_extract.reset(new (nothrow) arriere_boutique<html_options_extract>(ptr, bibliotheque::confrest, tmp_options_extract, html_options_extract::changed, false)); if(! ab_options_extract) throw exception_memory(); // global component setups tabs.add_tab("Global Settings", tab_main); tabs.add_tab(bibliotheque::category_description(bibliotheque::repo, true), tab_repo); tabs.add_tab(bibliotheque::category_description(bibliotheque::delta_sig, true), tab_delta_sig); tabs.add_tab(bibliotheque::category_description(bibliotheque::filefilter, true), tab_filemask); tabs.add_tab(bibliotheque::category_description(bibliotheque::pathfilter, true), tab_pathmask); tabs.add_tab(bibliotheque::category_description(bibliotheque::compress, true), tab_compression); tabs.add_tab(bibliotheque::category_description(bibliotheque::slicing, true), tab_slicing); tabs.add_tab(bibliotheque::category_description(bibliotheque::ciphering, true), tab_ciphering); tabs.add_tab(bibliotheque::category_description(bibliotheque::over_policy, true), tab_over_policy); tabs.add_tab(bibliotheque::category_description(bibliotheque::confsave, true), tab_options_create); tabs.add_tab(bibliotheque::category_description(bibliotheque::confread, true), tab_options_read); tabs.add_tab(bibliotheque::category_description(bibliotheque::conftest, true), tab_options_test); tabs.add_tab(bibliotheque::category_description(bibliotheque::confdiff, true), tab_options_compare); tabs.add_tab(bibliotheque::category_description(bibliotheque::confisolate, true), tab_options_isolate); tabs.add_tab(bibliotheque::category_description(bibliotheque::confmerge, true), tab_options_merge); tabs.add_tab(bibliotheque::category_description(bibliotheque::confrepair, true), tab_options_repair); tabs.add_tab(bibliotheque::category_description(bibliotheque::confrest, true), tab_options_extract); // global adoption tree statusbar.adopt(&saved_status); statusbar.adopt(&unsaved_status); adopt(&statusbar); tabs.adopt_in_section(tab_main, &intro); tabs.adopt_in_section(tab_main, &top_fs); tabs.adopt_in_section(tab_main, &bot_fs); tabs.adopt_in_section(tab_main, &down_fs); tabs.adopt_in_section(tab_main, &clear_fs); tabs.adopt_in_section(tab_main, &nok_message); tabs.adopt_in_section(tab_repo, ab_entrepot.get()); tabs.adopt_in_section(tab_filemask, ab_filemask.get()); tabs.adopt_in_section(tab_pathmask, &absolute_path_warning); tabs.adopt_in_section(tab_pathmask, ab_pathmask.get()); tabs.adopt_in_section(tab_compression, ab_compr.get()); tabs.adopt_in_section(tab_slicing, ab_slicing.get()); tabs.adopt_in_section(tab_ciphering, ab_ciphering.get()); tabs.adopt_in_section(tab_delta_sig, ab_delta_sig.get()); tabs.adopt_in_section(tab_over_policy, ab_over_policy.get()); tabs.adopt_in_section(tab_options_test, ab_options_test.get()); tabs.adopt_in_section(tab_options_compare, ab_options_compare.get()); tabs.adopt_in_section(tab_options_read, ab_options_read.get()); tabs.adopt_in_section(tab_options_create, ab_options_create.get()); tabs.adopt_in_section(tab_options_isolate, ab_options_isolate.get()); tabs.adopt_in_section(tab_options_merge, ab_options_merge.get()); tabs.adopt_in_section(tab_options_repair, ab_options_repair.get()); tabs.adopt_in_section(tab_options_extract, ab_options_extract.get()); adopt(&tabs); // the popup question box adopt(&question); // actors and events register_name(event_download); save.record_actor_on_event(this, event_save); load.record_actor_on_event(this, event_load); autosave.record_actor_on_event(this, html_form_input::changed); download.record_actor_on_event(this, event_download); upload_form.record_actor_on_event(this, html_form::changed); clear_conf.record_actor_on_event(this, event_clear); generate_defaults.record_actor_on_event(this, event_defaults); question.record_actor_on_event(this, html_yes_no_box::answer_yes); question.record_actor_on_event(this, html_yes_no_box::answer_no); ab_pathmask->record_actor_on_event(this, arriere_boutique<html_mask_form_path>::changed); // visibility clear_ok_messages(); set_saved_status(); absolute_path_warning.set_visible(false); // css webdar_css_style::normal_button(load); webdar_css_style::normal_button(save); webdar_css_style::normal_button(download); webdar_css_style::normal_button(clear_conf); webdar_css_style::normal_button(generate_defaults); load.add_css_class(webdar_css_style::float_right); save.add_css_class(webdar_css_style::float_right); download.add_css_class(webdar_css_style::float_right); clear_conf.add_css_class(webdar_css_style::float_right); generate_defaults.add_css_class(webdar_css_style::float_right); upload_form.add_button_css_class(webdar_css_style::btn_off); upload_form.add_button_css_class(webdar_css_style::url_normal); upload_form.add_button_css_class(webdar_css_style::width_8em); upload_form.add_button_css_class(webdar_css_style::float_right); ok_loaded.add_css_class(webdar_css_style::text_color_green); ok_saved.add_css_class(webdar_css_style::text_color_green); ok_uploaded.add_css_class(webdar_css_style::text_color_green); ok_cleared.add_css_class(webdar_css_style::text_color_green); nok_message.add_css_class(webdar_css_style::text_color_red); saved_status.add_css_class(webdar_css_style::text_color_green); unsaved_status.add_css_class(webdar_css_style::text_color_red); absolute_path_warning.add_css_class(webdar_css_style::text_color_green); statusbar.add_css_class(css_statusbar); // loading the default configuration if present try { if(webdar_tools_exists_and_is_file(bib_path, true)) on_event(event_load); else set_default_configs(); } catch(exception_bug & e) { throw; } catch(exception_base & e) { nok_message.clear(); nok_message.add_text(0, libdar::tools_printf("Error while loading the configuration file %s: %s", bib_path.c_str(), e.get_message().c_str())); nok_message.set_visible(true); } // tooltips filename.set_tooltip(TOOLTIP_HB_FILENAME); autosave.set_tooltip(TOOLTIP_HB_AUTOSAVE); upload_file.set_tooltip(TOOLTIP_HB_UPLOAD); } void html_bibliotheque::on_event(const string & event_name) { if(!biblio) throw WEBDAR_BUG; if(event_name == event_save) { clear_ok_messages(); string config = biblio->save_json().dump(); ofstream output(filename.get_value()); if(output) { output.write(config.c_str(), config.size()); if(!output) throw exception_system(libdar::tools_printf("Failed writing configuration to %s", filename.get_value().c_str()), errno); output.close(); } else throw exception_system(libdar::tools_printf("Failed openning %s", filename.get_value().c_str()), errno); ok_saved.set_visible(true); } else if(event_name == event_load) { if(q_context != context_undefined) throw WEBDAR_BUG; q_context = context_load_conf; if(! biblio->is_empty()) question.ask_question("Loading a configuration from a file will erase all already loaded configurations to memory, do you confirm this action?", false); else on_event(html_yes_no_box::answer_yes); } else if(event_name == html_form_input::changed) { bool target_autosave = autosave.get_value_as_bool(); biblio->set_autosave_status(target_autosave); } else if(event_name == html_form::changed) { clear_ok_messages(); expect_upload = true; } else if(event_name == event_download) { clear_ok_messages(); act(event_download); } else if(event_name == event_clear) { if(q_context != context_undefined) throw WEBDAR_BUG; q_context = context_clear_conf; if(! biblio->is_empty()) question.ask_question("Warning, do you really wan to delete all configurations not saved to file?", false); else on_event(html_yes_no_box::answer_yes); } else if(event_name == event_defaults) { clear_ok_messages(); set_default_configs(); } else if(event_name == html_yes_no_box::answer_yes) { switch(q_context) { case context_clear_conf: clear_ok_messages(); if(! biblio) throw WEBDAR_BUG; else { biblio->clear(); autosave.set_value_as_bool(biblio->get_autosave_status()); } ok_cleared.set_visible(true); break; case context_load_conf: if(true) // used to declare the input ifstream variable inside a switch/case structure { clear_ok_messages(); ifstream input(filename.get_value()); if(input) { json config = json::parse(input); if(!input) throw exception_system(libdar::tools_printf("Failed reading configuration from %s", filename.get_value().c_str()), errno); input.close(); biblio->load_json(config); autosave.set_value_as_bool(biblio->get_autosave_status()); } else throw exception_system(libdar::tools_printf("Failed openning %s", filename.get_value().c_str()), errno); ok_loaded.set_visible(true); } break; case context_upload_conf: break; default: throw WEBDAR_BUG; } q_context = context_undefined; } else if(event_name == html_yes_no_box::answer_no) { q_context = context_undefined; } else if(event_name == arriere_boutique<html_mask_form_path>::changed) { const html_mask_form_path* tmp = dynamic_cast<const html_mask_form_path*>(ab_pathmask->get_wrapped()); if(tmp == nullptr) throw WEBDAR_BUG; else absolute_path_warning.set_visible(! tmp->is_relative()); } else throw WEBDAR_BUG; } string html_bibliotheque::inherited_get_body_part(const chemin & path, const request & req) { string ret; expect_upload = false; ret = get_body_part_from_all_children(path, req); if(expect_upload) { try { unsigned int num = req.get_multipart_number(); if(num >= 1) // we look only for the first part as a json configuration { try { troncon tronc = req.get_body_of_multipart(0); istringstream str(string(tronc.begin, tronc.end)); json data = json::parse(str); biblio->load_json(data); autosave.set_value_as_bool(biblio->get_autosave_status()); ok_uploaded.set_visible(true); } catch(json::exception & e) { throw exception_json("Error reading configuration from json data", e); } } else throw exception_input("Missing uploaded configuration in http request", STATUS_CODE_EXPECTATION_FAILED); } catch(...) { expect_upload = false; throw; } expect_upload = false; } set_saved_status(); return ret; } void html_bibliotheque::new_css_library_available() { css tmp; unique_ptr<css_library> & csslib = lookup_css_library(); if(!csslib) throw WEBDAR_BUG; if(!csslib->class_exists(css_statusbar)) { tmp.clear(); tmp.css_text_h_align(css::al_center); tmp.css_margin("0px"); tmp.css_padding_top("0.1em"); tmp.css_padding_bottom("0.5em"); tmp.css_box_sizing(css::bx_border); tmp.css_width("100%", false); tmp.css_background_color(COLOR_TOPBAR_BACK); tmp.css_font_weight_bold(); csslib->add(css_statusbar, tmp); } webdar_css_style::update_library(*csslib); } void html_bibliotheque::set_saved_status() { if(!biblio) throw WEBDAR_BUG; if(!autosave.get_value_as_bool()) { statusbar.set_visible(true); saved_status.set_visible(biblio->get_saved_status()); unsaved_status.set_visible(! biblio->get_saved_status()); } else { statusbar.set_visible(false); if(! biblio->get_saved_status()) on_event(event_save); // auto saving the bibliotheque } } void html_bibliotheque::clear_ok_messages() { ok_loaded.set_visible(false); ok_saved.set_visible(false); ok_uploaded.set_visible(false); ok_cleared.set_visible(false); nok_message.set_visible(false); } void html_bibliotheque::set_default_configs() { unique_ptr<html_entrepot_landing> entrep; unique_ptr<html_compression_params> compr_params; unique_ptr<html_slicing> slicing; unique_ptr<html_ciphering> ciphering; unique_ptr<html_form_overwrite_action> overwrite; unique_ptr<html_options_read> read_default; unique_ptr<html_options_create> create_default; unique_ptr<html_options_test> test_default; unique_ptr<html_options_compare> compare_default; unique_ptr<html_options_isolate> isolate_default; unique_ptr<html_options_merge> merge_default; unique_ptr<html_options_repair> repair_default; unique_ptr<html_options_extract> extract_default; entrep.reset(new (nothrow) html_entrepot_landing()); compr_params.reset(new (nothrow) html_compression_params(true, true, false)); slicing.reset(new (nothrow) html_slicing()); ciphering.reset(new (nothrow) html_ciphering()); overwrite.reset(new (nothrow) html_form_overwrite_action("")); read_default.reset(new (nothrow) html_options_read()); create_default.reset(new (nothrow) html_options_create()); test_default.reset(new (nothrow) html_options_test()); compare_default.reset(new (nothrow) html_options_compare()); isolate_default.reset(new (nothrow) html_options_isolate()); merge_default.reset(new (nothrow) html_options_merge()); repair_default.reset(new (nothrow) html_options_repair()); extract_default.reset(new (nothrow) html_options_extract()); if(!entrep || ! compr_params || ! slicing || ! ciphering || ! overwrite || ! read_default || ! create_default || ! test_default || ! isolate_default || ! merge_default || ! repair_default || ! extract_default) throw exception_memory(); if(!biblio) throw WEBDAR_BUG; // set biblio() methods must be invoked now for the object to be informed upon new configuration addition to the bibliotheque read_default->set_biblio(biblio); create_default->set_biblio(biblio); test_default->set_biblio(biblio); compare_default->set_biblio(biblio); isolate_default->set_biblio(biblio); merge_default->set_biblio(biblio); repair_default->set_biblio(biblio); extract_default->set_biblio(biblio); // adding no-compress filemask configuration set_default_configs_no_compress(); // adding diff to full overwriting policy set_full_from_diff(); // adding default entrepot if(!biblio->has_config(bibliotheque::repo, bibliotheque::default_config_name)) { entrep->set_to_webdar_defaults(); biblio->add_config(bibliotheque::repo, bibliotheque::default_config_name, entrep->save_json(), bibliotheque::using_set()); // html_entrept not inheriting from bibliotheque_subconfig class } // adding default compression params if(!biblio->has_config(bibliotheque::compress, bibliotheque::default_config_name)) { compr_params->set_to_webdar_defaults(); biblio->add_config(bibliotheque::compress, bibliotheque::default_config_name, compr_params->save_json(), bibliotheque::using_set()); // html_compression_params not inheriting from bibliotheque_subconfig class } // adding default slicing if(!biblio->has_config(bibliotheque::slicing, bibliotheque::default_config_name)) { slicing->set_to_webdar_defaults(); biblio->add_config(bibliotheque::slicing, bibliotheque::default_config_name, slicing->save_json(), bibliotheque::using_set()); // html_slicing not inheriting from bibliotheque_subconfig class } // adding default ciphering if(!biblio->has_config(bibliotheque::ciphering, bibliotheque::default_config_name)) { ciphering->set_to_webdar_defaults(); biblio->add_config(bibliotheque::ciphering, bibliotheque::default_config_name, ciphering->save_json(), bibliotheque::using_set()); // html_slicing not inheriting from bibliotheque_subconfig class } // adding default overwriting policy if(!biblio->has_config(bibliotheque::over_policy, bibliotheque::default_config_name)) { overwrite->set_to_webdar_defaults(); biblio->add_config(bibliotheque::over_policy, bibliotheque::default_config_name, overwrite->save_json(), bibliotheque::using_set()); // html_form_overwrite_action not inheriting from bibliotheque_subconfig class } // adding default read options if(!biblio->has_config(bibliotheque::confread, bibliotheque::default_config_name)) { read_default->set_to_webdar_defaults(); biblio->add_config(bibliotheque::confread, bibliotheque::default_config_name, read_default->save_json(), read_default->get_using_set()); } // adding default create options if(!biblio->has_config(bibliotheque::confsave, bibliotheque::default_config_name)) { create_default->set_to_webdar_defaults(); biblio->add_config(bibliotheque::confsave, bibliotheque::default_config_name, create_default->save_json(), create_default->get_using_set()); } // adding default test options if(!biblio->has_config(bibliotheque::conftest, bibliotheque::default_config_name)) { test_default->set_to_webdar_defaults(); biblio->add_config(bibliotheque::conftest, bibliotheque::default_config_name, test_default->save_json(), test_default->get_using_set()); } // adding default compare options if(!biblio->has_config(bibliotheque::confdiff, bibliotheque::default_config_name)) { compare_default->set_to_webdar_defaults(); biblio->add_config(bibliotheque::confdiff, bibliotheque::default_config_name, compare_default->save_json(), compare_default->get_using_set()); } // adding default isolate options if(!biblio->has_config(bibliotheque::confisolate, bibliotheque::default_config_name)) { isolate_default->set_to_webdar_defaults(); biblio->add_config(bibliotheque::confisolate, bibliotheque::default_config_name, isolate_default->save_json(), isolate_default->get_using_set()); } // adding default merge options if(!biblio->has_config(bibliotheque::confmerge, bibliotheque::default_config_name)) { merge_default->set_to_webdar_defaults(); biblio->add_config(bibliotheque::confmerge, bibliotheque::default_config_name, merge_default->save_json(), merge_default->get_using_set()); } // adding default repair options if(!biblio->has_config(bibliotheque::confrepair, bibliotheque::default_config_name)) { repair_default->set_to_webdar_defaults(); biblio->add_config(bibliotheque::confrepair, bibliotheque::default_config_name, repair_default->save_json(), repair_default->get_using_set()); } // adding default extract options if(!biblio->has_config(bibliotheque::confrest, bibliotheque::default_config_name)) { extract_default->set_to_webdar_defaults(); biblio->add_config(bibliotheque::confrest, bibliotheque::default_config_name, extract_default->save_json(), extract_default->get_using_set()); } } void html_bibliotheque::set_default_configs_no_compress() { static const char* subject = bibliotheque::default_no_compression; html_mask_form_filename no_compress(subject); bibliotheque::using_set depends; // empty set by default, as we don not have any dependency deque<string> labels = no_compress.get_labels(); shared_ptr<body_builder> shptr; html_form_mask_expression* ptr; if(!biblio) throw WEBDAR_BUG; if(biblio->has_config(bibliotheque::filefilter, subject)) return; // already created or creatged and modified... if(labels.empty()) throw WEBDAR_BUG; if(labels[0].find(subject) == string::npos) throw WEBDAR_BUG; no_compress.manually_set_bool_mode(html_form_mask_bool::and_op); deque<string> no_compress_glob_expressions; // filling no_compress_glob_expressions from this /// included file, generated from ../data/darrc file #include "no_compress_glob_expression_list.cpp" for(deque<string>::const_iterator it = no_compress_glob_expressions.begin(); it != no_compress_glob_expressions.end(); ++it) { shptr = no_compress.manually_add_object(labels[0]); if(!shptr) throw WEBDAR_BUG; ptr = dynamic_cast<html_form_mask_expression*>(shptr.get()); if(ptr == nullptr) throw WEBDAR_BUG; ptr->manually_set_mask_type(html_form_mask_expression::type_glob); ptr->manually_set_negate(true); ptr->manually_set_casesensitivity(false); ptr->manually_set_expression(*it); } biblio->add_config(bibliotheque::filefilter, subject, no_compress.save_json(), depends); } void html_bibliotheque::set_full_from_diff() { if(!biblio) throw WEBDAR_BUG; if(biblio->has_config(bibliotheque::over_policy, bibliotheque::default_full_from_diff)) return; // already created or creatged and modified... html_form_overwrite_action full_from_diff(""); full_from_diff.set_action_type(html_form_overwrite_action::action_type_chain); html_form_overwrite_chain_action & chain = full_from_diff.get_action_when_type_chain(); //////// // setting the first entry of the chain (for Data) // chain.add_new_entry(); html_form_overwrite_action & entry1 = chain.get_last_added(); entry1.set_action_type(html_form_overwrite_action::action_type_condition); html_form_overwrite_conditional_action & cond1 = entry1.get_action_when_type_condition(); html_form_overwrite_combining_criterium & crit = cond1.get_access_to_condition(); html_form_overwrite_action & if_true = cond1.get_access_to_action_true(); html_form_overwrite_action & if_false = cond1.get_access_to_action_false(); html_form_overwrite_base_criterium & base_crit = crit.add_base_criterium(); base_crit.set_mode(html_form_overwrite_base_criterium::crit_in_place_is_inode); base_crit.set_invert(true); base_crit.set_negate(true); if_true.set_action_type(html_form_overwrite_action::action_type_const); html_form_overwrite_constant_action & if_true_act = if_true.get_action_when_type_const(); if_true_act.set_data_action(html_form_overwrite_constant_action::data_remove); if_true_act.set_ea_action(html_form_overwrite_constant_action::ea_clear); if_false.set_action_type(html_form_overwrite_action::action_type_condition); html_form_overwrite_conditional_action & if_false_act = if_false.get_action_when_type_condition(); html_form_overwrite_combining_criterium & sub_crit = if_false_act.get_access_to_condition(); html_form_overwrite_action & sub_if_true = if_false_act.get_access_to_action_true(); html_form_overwrite_action & sub_if_false = if_false_act.get_access_to_action_false(); html_form_overwrite_base_criterium & sub_base_crit = sub_crit.add_base_criterium(); sub_base_crit.set_mode(html_form_overwrite_base_criterium::crit_in_place_data_saved); sub_base_crit.set_invert(true); sub_base_crit.set_negate(false); sub_if_true.set_action_type(html_form_overwrite_action::action_type_const); html_form_overwrite_constant_action & sub_if_true_act = sub_if_true.get_action_when_type_const(); sub_if_true_act.set_data_action(html_form_overwrite_constant_action::data_overwrite); sub_if_true_act.set_ea_action(html_form_overwrite_constant_action::ea_undefined); sub_if_false.set_action_type(html_form_overwrite_action::action_type_const); html_form_overwrite_constant_action & sub_if_false_act = sub_if_false.get_action_when_type_const(); sub_if_false_act.set_data_action(html_form_overwrite_constant_action::data_preserve); sub_if_false_act.set_ea_action(html_form_overwrite_constant_action::ea_undefined); //////// // setting the second entry of the chain (for EA) chain.add_new_entry(); html_form_overwrite_action & entry2 = chain.get_last_added(); entry2.set_action_type(html_form_overwrite_action::action_type_condition); html_form_overwrite_conditional_action & cond2 = entry2.get_action_when_type_condition(); html_form_overwrite_combining_criterium & crit2 = cond2.get_access_to_condition(); html_form_overwrite_action & if_true2 = cond2.get_access_to_action_true(); html_form_overwrite_action & if_false2 = cond2.get_access_to_action_false(); html_form_overwrite_base_criterium & base_crit2 = crit2.add_base_criterium(); base_crit2.set_mode(html_form_overwrite_base_criterium::crit_in_place_EA_saved); base_crit2.set_invert(true); base_crit2.set_negate(false); if_true2.set_action_type(html_form_overwrite_action::action_type_const); html_form_overwrite_constant_action & if_true2_act = if_true2.get_action_when_type_const(); if_true2_act.set_data_action(html_form_overwrite_constant_action::data_undefined); if_true2_act.set_ea_action(html_form_overwrite_constant_action::ea_overwrite); if_false2.set_action_type(html_form_overwrite_action::action_type_const); html_form_overwrite_constant_action & if_false2_act = if_false2.get_action_when_type_const(); if_false2_act.set_data_action(html_form_overwrite_constant_action::data_undefined); if_false2_act.set_ea_action(html_form_overwrite_constant_action::ea_preserve); biblio->add_config(bibliotheque::over_policy, bibliotheque::default_full_from_diff, full_from_diff.save_json(), bibliotheque::using_set()); } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������webdar-1.0.0/src/html_form_overwrite_conditional_action.cpp�����������������������������������������0000644�0001750�0001752�00000011053�14773727251�021226� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*********************************************************************/ // webdar - a web server and interface program to libdar // Copyright (C) 2013-2025 Denis Corbin // // This file is part of Webdar // // Webdar is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // Webdar is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Webdar. If not, see <http://www.gnu.org/licenses/> // //---- // to contact the author: dar.linux@free.fr /*********************************************************************/ // C system header files #include "my_config.h" extern "C" { } // C++ system header files #include <dar/tools.hpp> // webdar headers #include "html_form_overwrite_constant_action.hpp" // #include "html_form_overwrite_conditional_action.hpp" using namespace std; const string html_form_overwrite_conditional_action::changed = "hfo_cond_action_changed"; html_form_overwrite_conditional_action::html_form_overwrite_conditional_action(): when_true("If condition is true"), when_false("If condition is false") { // components setup // adoption tree adopt(&condition); adopt(&when_true); adopt(&when_false); // events condition.record_actor_on_event(this, html_form_overwrite_combining_criterium::changed); when_true.record_actor_on_event(this, html_form_overwrite_action::changed); when_false.record_actor_on_event(this, html_form_overwrite_action::changed); register_name(changed); // css when_true.add_css_class(css_cond); when_false.add_css_class(css_cond); } unique_ptr<libdar::crit_action> html_form_overwrite_conditional_action::get_overwriting_action() const { unique_ptr<libdar::crit_action> ret; unique_ptr<libdar::criterium> crit; unique_ptr<libdar::crit_action> if_true, if_false; crit = condition.get_overwriting_criterium(); if(!crit) throw WEBDAR_BUG; if_true = when_true.get_overwriting_action(); if(!if_true) throw WEBDAR_BUG; if_false = when_false.get_overwriting_action(); if(!if_false) throw WEBDAR_BUG; ret.reset(new (nothrow) libdar::testing(*crit, *if_true, *if_false)); if(!ret) throw exception_memory(); return ret; } void html_form_overwrite_conditional_action::load_json(const json & source) { try { unsigned int version; string class_id; json config = unwrap_config_from_json_header(source, version, class_id); if(class_id != myclass_id) throw exception_range(libdar::tools_printf("Unexpected class_id in json data, found %s while expecting %s", class_id.c_str(), myclass_id)); if(version > format_version) throw exception_range(libdar::tools_printf("Json format version too hight for %s, upgrade your webdar software", myclass_id)); condition.load_json(config.at(jlabel_condition)); when_true.load_json(config.at(jlabel_when_true)); when_false.load_json(config.at(jlabel_when_false)); } catch(json::exception & e) { throw exception_json(libdar::tools_printf("Error loading %s config", myclass_id), e); } } json html_form_overwrite_conditional_action::save_json() const { json config; config[jlabel_condition] = condition.save_json(); config[jlabel_when_true] = when_true.save_json(); config[jlabel_when_false] = when_false.save_json(); return wrap_config_with_json_header(format_version, myclass_id, config); } void html_form_overwrite_conditional_action::clear_json() { condition.clear_json(); when_true.clear_json(); when_false.clear_json(); } void html_form_overwrite_conditional_action::on_event(const string & event_name) { if(event_name == html_form_overwrite_combining_criterium::changed || event_name == html_form_overwrite_action::changed) act(changed); else throw WEBDAR_BUG; } void html_form_overwrite_conditional_action::new_css_library_available() { unique_ptr<css_library> & csslib = lookup_css_library(); if(!csslib) throw WEBDAR_BUG; if(! csslib->class_exists(css_cond)) { css tmp; tmp.css_float(css::fl_left); tmp.css_width("50%", false); tmp.css_overflow_x(css::ov_auto); csslib->add(css_cond, tmp); } } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������webdar-1.0.0/src/html_page.hpp����������������������������������������������������������������������0000644�0001750�0001752�00000005550�14775732572�013167� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*********************************************************************/ // webdar - a web server and interface program to libdar // Copyright (C) 2013-2025 Denis Corbin // // This file is part of Webdar // // Webdar is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // Webdar is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Webdar. If not, see <http://www.gnu.org/licenses/> // //---- // to contact the author: dar.linux@free.fr /*********************************************************************/ #ifndef HTML_PAGE_HPP #define HTML_PAGE_HPP // C system header files #include "my_config.h" extern "C" { } // C++ system header files #include <string> #include <vector> // webdar headers #include "html_level.hpp" #include "exceptions.hpp" /// html page root component class html_page : public html_level { public: html_page(const std::string & title = "") { x_title = title; store_css_library(); }; html_page(const html_page & ref) = delete; html_page(html_page && ref) noexcept = delete; html_page & operator = (const html_page & ref) = delete; html_page & operator = (html_page && ref) noexcept = delete; ~html_page() = default; /// change page title void set_title(const std::string & title); /// get current title const std::string & get_title() const { return x_title; }; /// activate HTML redirection /// /// \note if url is set to an empty string redirection is disabled /// \note the change of refresh info does not lead to a body_change /// of the html page, which would break the no refresh request or /// would be useless if referesh was requested. This tranparency to the /// body_builder changed status is also used in class saisie to be able /// to get back to that session later when user requests to see the list /// of existing sessions void set_refresh_redirection(unsigned int seconds, const std::string & url); /// get current deridection url const std::string & get_refresh_redirection() const { return redirect; }; protected: /// inherited from body_builder virtual std::string inherited_get_body_part(const chemin & path, const request & req) override; /// encapsulate the provided body into an complete html formatted page std::string get_body_part_given_the_body(const chemin & path, const request & req, const std::string & body); private: std::string x_title; std::string redirect; }; #endif ��������������������������������������������������������������������������������������������������������������������������������������������������������webdar-1.0.0/src/guichet.cpp������������������������������������������������������������������������0000644�0001750�0001752�00000034741�15036421023�012627� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*********************************************************************/ // webdar - a web server and interface program to libdar // Copyright (C) 2013-2025 Denis Corbin // // This file is part of Webdar // // Webdar is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // Webdar is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Webdar. If not, see <http://www.gnu.org/licenses/> // //---- // to contact the author: dar.linux@free.fr /*********************************************************************/ // C system header files extern "C" { } // C++ system header files #include <dar/tools.hpp> // webdar headers #include "webdar_css_style.hpp" #include "tokens.hpp" #include "tooltip_messages.hpp" // #include "guichet.hpp" using namespace std; guichet::guichet(bool subcomponent): anchor_to(""), is_sub(subcomponent), ignore_events(false), clear_adopted(true), select_form("Update"), select_fs(""), select("Configuration", event_select), around_adopted("Update"), around_adopted_fs(""), edit("Edit", event_edit), clear("Clear", event_clear), saveas_form("Save As"), saveas_fs(""), saveas_name("New configuration name", html_form_input::text, "", "", "") { // all the rest of initialization is done in set_child() adopted_jsoner = nullptr; adopted_subconfig = nullptr; adopted_frame = nullptr; saveas_text.clear(); saveas_text.add_text(0, "The configuration exposed above can be saved (or not) for reuse later, and will be editable from the \"Configure\" menu on the left"); saveas_text.add_nl(); saveas_text.add_nl(); // tooltips if(subcomponent) select.set_tooltip(TOOLTIP_G_SELECT_SUBCOMP); else select.set_tooltip(TOOLTIP_G_SELECT); saveas_name.set_tooltip(TOOLTIP_G_SAVE); } guichet::~guichet() { if(!currently_locked.empty()) { biblio->delete_external_ref_to(categ, currently_locked, this); currently_locked.clear(); } } void guichet::set_child(const shared_ptr<bibliotheque> & ptr, bibliotheque::category cat, const shared_ptr<body_builder> & to_adopt, bool add_form_around) { // set_child should be run only once if(biblio) throw WEBDAR_BUG; if(adopted) throw WEBDAR_BUG; // and run with correct arguments biblio = ptr; if(!biblio) throw WEBDAR_BUG; categ = cat; adopted = to_adopt; check_adopted(); adopted_jsoner = dynamic_cast<jsoner*>(adopted.get()); if(adopted_jsoner == nullptr) throw WEBDAR_BUG; adopted_subconfig = dynamic_cast<bibliotheque_subconfig*>(adopted.get()); // adopted_subconfig may be null if the adopted object // does not implement this optional interface // component configuration saveas_name.set_change_event_name(event_saveas); // adption tree box.adopt(&edit); select_fs.adopt(&select); // adding a form around fieldset to select config when not a subconfig if(is_sub) box.adopt(&select_fs); else { select_form.adopt(&select_fs); box.adopt(&select_form); } box.adopt(&clear); if(add_form_around) { around_adopted_fs.adopt(adopted.get()); around_adopted.adopt(&around_adopted_fs); box.adopt(&around_adopted); adopted_frame = &around_adopted; } else { around_adopted_fs.adopt(adopted.get()); box.adopt(&around_adopted_fs); adopted_frame = &around_adopted_fs; } if(adopted_frame == nullptr) throw WEBDAR_BUG; adopted_frame->add_css_class(css_left_margin); saveas_fs.adopt(&saveas_text); saveas_fs.adopt(&saveas_name); saveas_form.adopt(&saveas_fs); box.adopt(&saveas_form); adopt(&box); // visibility & config // this is done before events cabling to avoid // a lot of useless events firing that may lead // to a lot of useless cascade of events. update_selected(); set_visibility(); // events select.record_actor_on_event(this, event_select); edit.record_actor_on_event(this, event_edit); clear.record_actor_on_event(this, event_clear); saveas_name.record_actor_on_event(this, event_saveas); biblio->record_actor_on_event(this, bibliotheque::changed(categ)); // anchor bind_to_anchor(anchor_to); // csss webdar_css_style::normal_button(edit); webdar_css_style::normal_button(clear); edit.add_css_class(webdar_css_style::float_right); clear.add_css_class(webdar_css_style::float_right); select_fs.add_label_css_class(webdar_css_style::text_bold); select_form.add_css_class(css_below_margin); saveas_fs.add_css_class(css_above_margin); box.clear_css_classes(); box.add_css_class(css_border_left); } void guichet::load_json(const json & source) { json conf; unsigned int vers; string id; bool mode; check_adopted(); try { conf = unwrap_config_from_json_header(source, vers, id); if(id != string(class_id)) throw exception_range(libdar::tools_printf("Unexpected class_id in json data, found %s while expecting %s", id.c_str(), class_id)); if(vers > format_version) throw exception_range(libdar::tools_printf("Json format version too hight for class %s, upgrade your webdar software", myclass_id)); mode = conf.at(jlabel_mode); update_selected(); // be sure to have all config name recorded if(mode) { // manual mode select.set_selected_num(0); adopted_jsoner->load_json(conf.at(jlabel_conf)); } else { // config mode string conf_cat = conf.at(jlabel_categ); string conf_name = conf.at(jlabel_name); bibliotheque::category newcateg = bibliotheque::string_to_category(conf_cat); if(newcateg != categ) throw exception_range(libdar::tools_printf("Unexpected configuration category in json data: found %s, expected %s", conf_cat.c_str(), bibliotheque::category_to_string(categ).c_str())); try { select.set_selected_id_with_warning(conf_name, jlabel_name); } catch(exception_bug & e) { throw; } catch(exception_base & e) { // any exception, include exception_bug means the config name does not exist throw exception_range(libdar::tools_printf("Exception met while setting configuration \"%s\" in category \"%s\": %s", conf_name.c_str(), conf_cat.c_str(), e.get_message().c_str())); } update_selected(); // this will load the configuration from the bibliotheque } } catch(exception_bug & e) { throw; } catch(exception_base & e) { e.change_message(libdar::tools_printf("Error met while parsing json configuration for %s object: %s", myclass_id, e.get_message().c_str())); throw; } set_visibility(); } json guichet::save_json() const { json ret; check_adopted(); if(select.get_selected_num() == 0) { // manual mode ret[jlabel_mode] = true; ret[jlabel_conf] = adopted_jsoner->save_json(); } else { // config mode ret[jlabel_mode] = false; ret[jlabel_categ] = bibliotheque::category_to_string(categ); ret[jlabel_name] = select.get_selected_id(); } return wrap_config_with_json_header(format_version, class_id, ret); } void guichet::clear_json() { check_adopted(); clear_adopted = true; select.set_selected_num(0); adopted_jsoner->clear_json(); } bibliotheque::using_set guichet::get_using_set() const { bibliotheque::using_set ret; check_adopted(); if(select.get_selected_num() != 0) { bibliotheque::coordinates coord(categ, select.get_selected_id()); ret.insert(coord); } if(adopted_subconfig != nullptr) subconfig_add_to(ret, adopted_subconfig->get_using_set()); return ret; } void guichet::on_event(const string & event_name) { check_adopted(); if(ignore_events) return; if(event_name == event_select) { if(select.get_selected_num() == 0) { if(!biblio) throw WEBDAR_BUG; if(! currently_locked.empty()) { biblio->delete_external_ref_to(categ, currently_locked, this); currently_locked.clear(); } if(clear_adopted) adopted_jsoner->clear_json(); // clear_adopted is true when the user has selected "manual mode" // but is false when the user clicked the "edit" button box.clear_css_classes(); box.add_css_class(css_border_left); } else set_adopted(); if(is_sub) { string fs_title = string(fs_title_subcomp); if(select.get_selected_num() == 0) fs_title += "..."; else fs_title += " " + select.get_selected_id(); select_fs.change_label(fs_title); } set_visibility(); } else if(event_name == event_edit) { if(select.get_selected_num() != 0) { clear_adopted = false; select.set_selected_num(0); // this trigers an new event // which in particular sets visibility() // (see just above the event_select) } else throw WEBDAR_BUG; } else if(event_name == event_clear) { if(select.get_selected_num() == 0) { adopted_jsoner->clear_json(); } else throw WEBDAR_BUG; } else if(event_name == event_saveas) { if(!biblio) throw WEBDAR_BUG; if(saveas_name.get_value().empty()) throw exception_range("Cannot save component with an empty name"); if(adopted_subconfig != nullptr) { bibliotheque::using_set sub = adopted_subconfig->get_using_set(); biblio->add_config(categ, saveas_name.get_value(), adopted_jsoner->save_json(), sub); } else { biblio->add_config(categ, saveas_name.get_value(), adopted_jsoner->save_json()); } // config addition as here, does not trigger bibliotheque::changed update_selected(); // setting the selected to the new created configuration try { select.set_selected_id(saveas_name.get_value()); } catch(exception_base & e) { throw WEBDAR_BUG; } } else if(event_name == bibliotheque::changed(categ)) { update_selected(); } else throw WEBDAR_BUG; } void guichet::bind_to_anchor(const string & val) { anchor_to = val; if(adopted) adopted->bind_to_anchor(anchor_to); select_form.bind_to_anchor(anchor_to); edit.bind_to_anchor(anchor_to); clear.bind_to_anchor(anchor_to); saveas_form.bind_to_anchor(anchor_to); around_adopted.bind_to_anchor(anchor_to); } string guichet::inherited_get_body_part(const chemin & path, const request & req) { check_adopted(); clear_adopted = true; return get_body_part_from_all_children(path, req); } void guichet::new_css_library_available() { css tmp; unique_ptr<css_library> & csslib = lookup_css_library(); if(!csslib) throw WEBDAR_BUG; if(!csslib->class_exists(css_left_margin)) { css tmp; tmp.css_margin_left("2em"); csslib->add(css_left_margin, tmp); } if(!csslib->class_exists(css_below_margin)) { css tmp; tmp.css_margin_bottom("2em"); csslib->add(css_below_margin, tmp); } if(!csslib->class_exists(css_above_margin)) { css tmp; tmp.css_margin_top("2em"); csslib->add(css_above_margin, tmp); } if(!csslib->class_exists(css_border_left)) { css tmp; tmp.css_border_width(css::bd_left, css::bd_medium); tmp.css_border_style(css::bd_left, css::bd_solid); tmp.css_margin_left("1em"); tmp.css_padding_left("0.2em"); tmp.css_margin_top("1em"); tmp.css_border_color(css::bd_left, COLOR_MENU_BORDER_GREY); csslib->add(css_border_left, tmp); } webdar_css_style::update_library(*csslib); } void guichet::update_selected() { deque<string> available; bool try_keep_selected = select.num_choices() > 0; string current_choice = try_keep_selected ? select.get_selected_id(): ""; bool still_exists = false; bool manual_mode = select.get_selected_num() == 0; check_adopted(); if(!biblio) throw WEBDAR_BUG; available = biblio->listing(categ); ignore_events = true; try { select.clear(); if(is_sub) select.add_choice("0", "---- select a configuration ----"); else select.add_choice("0", "---- manual config ----"); for(deque<string>::iterator it = available.begin(); it != available.end(); ++it) { select.add_choice(*it, *it); // id and label are the same if(try_keep_selected && *it == current_choice) still_exists = true; } if(still_exists) select.set_selected_id(current_choice); // does not triggers event_select // because ignore_event is true } catch(...) { ignore_events = false; throw; } ignore_events = false; if(! manual_mode) on_event(event_select); // calling the event only once // we do not trigger a event_select event // when current selection is the manual mode // because first this is the same selection number // and second a change of configuration for a given // configuration name in the bibliotheque has no impact // here in manual mode as the configuration is local // to the guichet object. } void guichet::set_adopted() { check_adopted(); if(select.get_selected_num() > 0) // not the "manual config" { if(!biblio) throw WEBDAR_BUG; try { if(!currently_locked.empty()) { biblio->delete_external_ref_to(categ, currently_locked, this); currently_locked.clear(); } adopted_jsoner->load_json(biblio->fetch_config(categ, select.get_selected_id())); currently_locked = select.get_selected_id(); biblio->add_external_ref_to(categ, currently_locked, this); } catch(...) { clear_adopted = false; select.set_selected_num(0); // passing on manual mode throw; } box.clear_css_classes(); } // else adopted is unchanged } void guichet::set_visibility() { bool manualmode = select.get_selected_num() == 0; check_adopted(); if(adopted_frame == nullptr) throw WEBDAR_BUG; if(is_sub) { adopted_frame->set_visible(false); edit.set_visible(false); clear.set_visible(false); saveas_form.set_visible(false); } else { adopted_frame->set_visible(manualmode); edit.set_visible(!manualmode); clear.set_visible(manualmode); saveas_form.set_visible(manualmode); if(!manualmode) { ignore_events = true; try { saveas_name.set_value(""); } catch(...) { ignore_events = false; throw; } ignore_events = false; } } } �������������������������������webdar-1.0.0/src/html_form_overwrite_conditional_action.hpp�����������������������������������������0000644�0001750�0001752�00000011042�14775734150�021227� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*********************************************************************/ // webdar - a web server and interface program to libdar // Copyright (C) 2013-2025 Denis Corbin // // This file is part of Webdar // // Webdar is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // Webdar is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Webdar. If not, see <http://www.gnu.org/licenses/> // //---- // to contact the author: dar.linux@free.fr /*********************************************************************/ #ifndef HTML_FORM_OVERWRITE_CONDITIONAL_ACTION_HPP #define HTML_FORM_OVERWRITE_CONDITIONAL_ACTION_HPP // C system header files #include "my_config.h" extern "C" { } // C++ system header files // webdar headers #include "html_overwrite_action.hpp" #include "html_form_overwrite_combining_criterium.hpp" #include "body_builder.hpp" #include "actor.hpp" #include "html_form_fieldset.hpp" #include "html_form_overwrite_action.hpp" #include "jsoner.hpp" #include "events.hpp" #include "actor.hpp" /// html component to be adopted by an html_form that implements conditional actions for overwriting policies class html_form_overwrite_conditional_action: public html_overwrite_action, public jsoner, public actor, public events { public: static const std::string changed; html_form_overwrite_conditional_action(); html_form_overwrite_conditional_action(const html_form_overwrite_conditional_action & ref) = delete; html_form_overwrite_conditional_action(html_form_overwrite_conditional_action && ref) noexcept = delete; html_form_overwrite_conditional_action & operator = (const html_form_overwrite_conditional_action & ref) = delete; html_form_overwrite_conditional_action & operator = (html_form_overwrite_conditional_action && ref) noexcept = delete; ~html_form_overwrite_conditional_action() = default; /// provide access to the condition object /// \note this call is to programmatically setup a component, normal way to setup is from Web user interaction html_form_overwrite_combining_criterium & get_access_to_condition() { return condition; }; /// provide access to the action used when condition is false /// \note this call is to programmatically setup a component, normal way to setup is from Web user interaction html_form_overwrite_action & get_access_to_action_true() { return when_true; }; /// provide access to the action used when condition is false /// \note this call is to programmatically setup a component, normal way to setup is from Web user interaction html_form_overwrite_action & get_access_to_action_false() { return when_false; }; /// obtain the crit_conditional_action object for libdar option virtual std::unique_ptr<libdar::crit_action> get_overwriting_action() const override; /// inherited from jsoner virtual void load_json(const json & source) override; /// inherited from jsoner virtual json save_json() const override; /// inherited from jsoner virtual void clear_json() override; /// inherited from actor virtual void on_event(const std::string & event_name) override; protected: /// inherited from body_builder virtual void new_css_library_available() override; private: html_form_overwrite_combining_criterium condition; html_form_overwrite_action when_true; html_form_overwrite_action when_false; static constexpr const char* act_true_changed = "true changed"; static constexpr const char* act_false_changed = "false changed"; static constexpr const char* action_type_undefined = "undefined"; static constexpr const char* action_type_const = "constant"; static constexpr const char* action_type_condition = "condition"; static constexpr const char* css_cond = "html_form_overwrite_cond_act"; static constexpr const unsigned int format_version = 1; static constexpr const char* myclass_id = "html_form_overwrite_conditional_action"; static constexpr const char* jlabel_condition = "condition"; static constexpr const char* jlabel_when_true = "when-true"; static constexpr const char* jlabel_when_false = "when-false"; }; #endif ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������webdar-1.0.0/src/html_popup.hpp���������������������������������������������������������������������0000644�0001750�0001752�00000006203�14775732706�013411� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*********************************************************************/ // webdar - a web server and interface program to libdar // Copyright (C) 2013-2025 Denis Corbin // // This file is part of Webdar // // Webdar is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // Webdar is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Webdar. If not, see <http://www.gnu.org/licenses/> // //---- // to contact the author: dar.linux@free.fr /*********************************************************************/ #ifndef HTML_POPUP_HPP #define HTML_POPUP_HPP // C system header files #include "my_config.h" extern "C" { } // C++ system header files // webdar headers #include "body_builder.hpp" #include "html_div.hpp" /// class html_popup is the implementation of <div> </div> as popup over rest of the the screen /// the object shows a full screen with partial opacity (outerbox) on top of which a fully opaque box (innerbox) /// sits. Object adopted by the html_popup are passed to this inner box and take place inside it /// There is no mechanism (button) to remove this box from the screen. This is duty of the class using /// or inheriting from that class to provide such mechanism (making this object invisible() or /// foresaken from the body_building tree for example). class html_popup : public html_div { public: html_popup(unsigned int width_pct, unsigned int height_pct); html_popup(const html_popup & ref) = delete; html_popup(html_popup && ref) noexcept = delete; html_popup & operator = (const html_popup & ref) = delete; html_popup & operator = (html_popup && ref) noexcept = delete; ~html_popup() = default; protected: /// inherited from body_builder virtual std::string inherited_get_body_part(const chemin & path, const request & req) override; /// inherited from body_builder virtual void new_css_library_available() override; private: static const std::string outerclassname; ///< class name is global to the class std::string innerclassname; ///< class name depends on the width and height given at construction time unsigned int width; ///< width in percent of the inner div (innerbox) unsigned int height; ///< height in percent of the inner div (innerbox) bool self_css; ///< true during initial setup of css class (do not react on css_class_have_chaged()), false otherwise /// the outerbox hides (or partially transparent) and interecpt interaction from the user to /// UI behind the popup. The innerbox shows on top of the outerbox and contains all the components /// the html_popup has adopted. /// the innerbox is us (= this) html_div outerbox; }; #endif ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������webdar-1.0.0/src/session.cpp������������������������������������������������������������������������0000644�0001750�0001752�00000022035�14773727251�012676� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*********************************************************************/ // webdar - a web server and interface program to libdar // Copyright (C) 2013-2025 Denis Corbin // // This file is part of Webdar // // Webdar is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // Webdar is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Webdar. If not, see <http://www.gnu.org/licenses/> // //---- // to contact the author: dar.linux@free.fr /*********************************************************************/ // C system header files #include "my_config.h" extern "C" { } // C++ system header files #include <libthreadar/libthreadar.hpp> // webdar headers #include "webdar_tools.hpp" #include "user_interface.hpp" // #include "session.hpp" using namespace std; const unsigned int INITIAL_SESSION_ID_WIDTH = 4; const unsigned int MAXIMUM_SESSION_ID_WIDTH = 20; const unsigned int MAX_COLLISION = 300; ////////////////////////// // object method implementation // session::session(): lock_wui(1) { session_ID = ""; tid = 0; wui.record_actor_on_event(this, user_interface::closing); } void session::set_session_id(const string & sessid) { session_ID = sessid; wui.set_prefix(chemin(sessid)); } void session::check_caller() const { if(pthread_self() != tid) throw WEBDAR_BUG; if(session_ID == "") throw WEBDAR_BUG; } answer session::give_answer(const request & req) { check_caller(); return wui.give_answer(req); } bool session::disconnection_requested() const { check_caller(); return wui.disconnection_requested(); } void session::on_event(const string & event_name) { if(event_name == user_interface::closing) close_session(get_session_ID()); // will kill libdar thread if running else throw WEBDAR_BUG; // what's that event !?! } ////////////////////////// // class fields and methods implementation // libthreadar::mutex session::lock_running; map<string, session::table> session::running_session; unsigned int session::get_num_session() { unsigned int ret = 0; lock_running.lock(); try { ret = running_session.size(); } catch(...) { lock_running.unlock(); throw; } lock_running.unlock(); return ret; } unsigned int session::get_num_session(const string & user) { unsigned int ret = 0; map<string, table>::iterator it; lock_running.lock(); try { for(it = running_session.begin(); it != running_session.end(); ++it) { if(it->second.owner == user) ++ret; } } catch(...) { lock_running.unlock(); throw; } lock_running.unlock(); return ret; } vector<session::session_summary> session::get_summary() { vector<session_summary> ret; map<string, table>::iterator it; session_summary tmp; lock_running.lock(); try { it = running_session.begin(); while(it != running_session.end()) { if(it->second.reference == nullptr) throw WEBDAR_BUG; tmp = publish(it); ret.push_back(tmp); ++it; } } catch(...) { lock_running.unlock(); throw; } lock_running.unlock(); return ret; } bool session::get_session_info(const string & session_ID, session_summary & val) { bool ret = false; map<string, table>::iterator it; lock_running.lock(); try { it = running_session.find(session_ID); if(it != running_session.end()) { val = publish(it); if(val.session_ID != session_ID) throw WEBDAR_BUG; ret = true; } } catch(...) { lock_running.unlock(); throw; } lock_running.unlock(); return ret; } string session::create_new(const string & owner) { table entry; string sessID; session *obj = new (nothrow) session(); unsigned int collision = 0; unsigned id_width = INITIAL_SESSION_ID_WIDTH; if(obj == nullptr) throw exception_range("Cannot create a new session, lack of memory to do so"); else obj->wui.set_username(owner); try { entry.clear(); lock_running.lock(); try { // looking whether the new session_ID is not already used do { sessID = webdar_tools_generate_random_string(id_width); // OK, this may lead to an endless loop if all sessions // are used so we count up to MAX_FAILURE and then // increase the session_ID length by one ++collision; if(collision > MAX_COLLISION) { collision = 0; ++id_width; if(id_width > MAXIMUM_SESSION_ID_WIDTH) throw exception_range("Cannot allocate new session, namespace full"); } } while(running_session.find(sessID) != running_session.end()); obj->set_session_id(sessID); entry.owner = owner; entry.reference = obj; running_session[sessID] = entry; } catch(...) { lock_running.unlock(); throw; } lock_running.unlock(); } catch(...) { if(obj != nullptr) delete obj; throw; } return sessID; } session *session::acquire_session(const string & session_ID) { session *ret = nullptr; map<string,table>::iterator it; lock_running.lock(); try { it = running_session.find(session_ID); if(it != running_session.end() && !(it->second.closing)) { if(it->second.reference == nullptr) throw WEBDAR_BUG; ret = it->second.reference; ++(it->second.ref_given); } } catch(...) { lock_running.unlock(); throw; } lock_running.unlock(); if(ret != nullptr) { ret->lock_wui.lock(); // eventually waiting for another thread to release the mutex ret->tid = pthread_self(); } return ret; } void session::release_session(session *sess) { map<string,table>::iterator it; if(sess == nullptr) throw WEBDAR_BUG; lock_running.lock(); try { it = running_session.begin(); while(it != running_session.end() && it->second.reference != sess) ++it; // checks if(it == running_session.end()) throw WEBDAR_BUG; // releasing an unknown session !?! sess->check_caller(); // all check passed, we can proceed --(it->second.ref_given); sess->lock_wui.unlock(); if(it->second.ref_given == 0 && it->second.closing) { if(it->second.reference == nullptr) throw WEBDAR_BUG; if(it->second.reference->has_working_server()) throw WEBDAR_BUG; delete it->second.reference; running_session.erase(it); } } catch(...) { lock_running.unlock(); throw; } lock_running.unlock(); } bool session::close_session(const string & session_ID) { lock_running.lock(); map<string, table>::iterator it; bool ret = false; try { it = running_session.find(session_ID); if(it != running_session.end()) { if(!it->second.closing) { it->second.closing = true; if(it->second.ref_given == 0) { if(it->second.reference != nullptr) { try { delete it->second.reference; } catch(...) { running_session.erase(it); throw; } running_session.erase(it); } else throw WEBDAR_BUG; } // else the object will be destroyed when no more reference will point it ret = true; // session will be destroyed as soon as possible } else ret = true; // this session end has already been asked } else ret = false; } catch(...) { lock_running.unlock(); throw; } lock_running.unlock(); return ret; } session::session_summary session::publish(map<string, table>::iterator it) { session_summary ret; if(it->second.reference == nullptr) throw WEBDAR_BUG; ret.clear(); ret.owner = it->second.owner; ret.session_ID = it->first; ret.session_name = it->second.reference->wui.get_session_name(); // yes session name is stored and managed in the GUI component ret.locked = it->second.reference->has_working_server(); ret.libdar_running = it->second.reference->wui.is_libdar_running(); // yes an access without locking the object but read only and on an atomic field ret.closing = it->second.closing; return ret; } bool session::create_new_session(const string & user, bool initial, const request & req, answer & ret) { vector<session_summary> inventaire = get_summary(); vector<session_summary>::iterator it = inventaire.begin(); while(initial && it != inventaire.end() && it->owner != user) ++it; if(!initial || it == inventaire.end()) // no existing session for that user { html_page page("redirection to newly created session page"); string session_ID = create_new(user); page.set_refresh_redirection(0, session_ID); ret.set_status(STATUS_CODE_OK); ret.set_reason("new session created"); ret.add_body(page.get_body_part(chemin("/"), req)); return true; } else return false; } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������webdar-1.0.0/src/environment.cpp��������������������������������������������������������������������0000644�0001750�0001752�00000003725�14773727251�013564� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*********************************************************************/ // webdar - a web server and interface program to libdar // Copyright (C) 2013-2025 Denis Corbin // // This file is part of Webdar // // Webdar is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // Webdar is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Webdar. If not, see <http://www.gnu.org/licenses/> // //---- // to contact the author: dar.linux@free.fr /*********************************************************************/ // C system header files #include "my_config.h" extern "C" { } // C++ system header files // webdar headers #include "webdar_tools.hpp" #include "exceptions.hpp" // #include "environment.hpp" using namespace std; void environment::feed(char** env) { char** ptr = nullptr; string tmp; string var, val; if(env == nullptr) throw exception_range("empty environment variable set provided"); envir.clear(); ptr = env; while(*ptr != nullptr) { webdar_tools_split_in_two('=', *ptr, var, val); envir[var] = val; ++ptr; } } bool environment::get_value_of(const string & var, string & value) const { map<string, string>::const_iterator it = envir.find(var); if(it == envir.end()) return false; else { value = it->second; return true; } } string environment::get_value_with_default(const string & var, const string & defaulted) const { string ret; if(! get_value_of(var, ret)) ret = defaulted; return ret; } environment global_envir; �������������������������������������������webdar-1.0.0/src/html_select_file.hpp���������������������������������������������������������������0000644�0001750�0001752�00000033252�15000170265�014502� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*********************************************************************/ // webdar - a web server and interface program to libdar // Copyright (C) 2013-2025 Denis Corbin // // This file is part of Webdar // // Webdar is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // Webdar is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Webdar. If not, see <http://www.gnu.org/licenses/> // //---- // to contact the author: dar.linux@free.fr /*********************************************************************/ #ifndef HTML_SELECT_FILE_HPP #define HTML_SELECT_FILE_HPP // C system header files #include "my_config.h" extern "C" { } // C++ system header files #include <map> #include <dar/libdar.hpp> #include <memory> #include <libthreadar/libthreadar.hpp> // webdar headers #include "events.hpp" #include "actor.hpp" #include "html_div.hpp" #include "html_text.hpp" #include "html_form_fieldset.hpp" #include "html_button.hpp" #include "html_double_button.hpp" #include "html_table.hpp" #include "html_popup.hpp" #include "html_form.hpp" #include "html_form_input.hpp" #include "html_web_user_interaction.hpp" /// \file html_select_file.hpp defines html_select_file class /// class html_select_file /// given a libdar::entrepot object, the class html_select_file /// shows a popup for the user to navigate in the directory tree /// and select a file or a directory depending on the parameter set /// to this object /// /// usage for the caller is to: ///- adopt() this object ///- register for entry_selected and op_cancelled events /// on this object, events which will be triggered once the user will /// have selected a file or cancelled choice selection ///- call the different set_* methods /// when needed: ///- then call go_select() giving a libdar::entrepot (the object becomes visible) ///- and upon event entry_selected fetch the path selected by the user /// calling get_selected_path() ///\note the object visibility is managed by go_select() and before triggering /// entry_select and op_cancelled events /// /** \verbatim +------------------------popup----------------------------+ |+----------------title box------------------------------+| || title || || entrepot_url || || warning (hidden by default) || || webui (hidden by default) || |+-------------------------------------------------------+| |+--------------- fieldset ------------------------------+| || parentdir || || +--------------+-----content------------------------+ || || | | | || || +--------------+------------------------------------+ || || | | | || || +--------------+------------------------------------+ || || | | | || || +--------------+------------------------------------+ || |+-------------------------------------------------------+| |+-------------------btn_box-----------------------------+| ||+--------+ +--------++-------+|| |||creatdir| |cancel ||validate|| ||+--------+ +--------++-------+|| ||+----- createdir_form------+ || ||| createdir_input | || ||+--------------------------+ || |+-------------------------------------------------------+| | | +---------------------------------------------------------+ \endverbatim **/ class html_select_file: public html_popup, public events, public actor, public libthreadar::thread_signal { public: /// event when user selected a file static const std::string entry_selected; /// event when the user cancelled file selection static const std::string op_cancelled; enum select_mode { sel_file, ///< only non dir and symlinks and non symlink should be selectable sel_dir, ///< only directories and symlinks pointing to dir sel_symlinks ///< only symlinks should be selectable }; /// constructor /// \param[in] message is show to the user and should tell what it is expected to select for html_select_file(const std::string & message); html_select_file(const html_select_file & ref) = delete; html_select_file(html_select_file && ref) noexcept(false) = delete; html_select_file & operator = (const html_select_file & ref) = delete; html_select_file & operator = (html_select_file && ref) noexcept(false) = delete; virtual ~html_select_file() { clear_content(); cancel(); join(); }; /// ask the user to select a file path (false) or a directory path (true) /// \note should be setup before calling go_select() void set_select_mode(select_mode val) { if(status != st_init) throw WEBDAR_BUG; cur_select_mode = val; }; /// whether to show the button allowing the user to create a subdirectory /// \note should be setup before calling go_select() void set_can_create_dir(bool val) { if(status != st_init) throw WEBDAR_BUG; btn_createdir.set_visible(val); }; /// only show directories and files matching the given glob expression (shell wildcards) /// \note giving an empty string disable filtering, all entries are shown /// which is the default behavior void set_filter(const std::string & mask) { filter = mask; }; /// start the user interaction for a path selection /// \param[in] x_entr entrepot to scan directory from /// \param[in] start_dir absolute path in x_entr to take as starting directory /// \note if start_dir is not a directory not is an absolute path /// an exception is thrown void go_select(const std::shared_ptr<libdar::entrepot> & x_entr, const std::string & start_dir); /// obtain the path selected by the user (mandatory after entry_selected event, in order to reuse this object) std::string get_selected_path() const { if(status != st_completed) throw WEBDAR_BUG; status = st_init; return fieldset.get_label(); }; /// action triggered from html_buttons internally used in this class implementation (do not use, even if it must stay a public method) virtual void on_event(const std::string & event_name) override; /// returns the message argument passed at construction time std::string get_message() const { return x_message; }; protected: /// inherited from body_builder (via html_div) virtual std::string inherited_get_body_part(const chemin & path, const request & req) override; /// inherited from body_builder (via html_div) virtual void new_css_library_available() override; /// inherited from libthreadar::thread virtual void inherited_run() override; /// inherited from libthreadar::thread virtual void signaled_inherited_cancel() override; private: // event name for the 'change to parent directory' button (parentdir) static const std::string op_chdir_parent; static const std::string op_createdir; static const std::string op_hide_createdir; // internal css class names static const std::string css_sticky_top; static const std::string css_sticky_bot; // popup size of browser windows static constexpr const unsigned int width_pct = 80; static constexpr const unsigned int height_pct = 80; /// internal datastructure struct item { html_button* btn; libdar::inode_type type; libdar::inode_type target_type; ///< used when type is symlink or unknown (else equals type) item() { btn = nullptr; type = target_type = libdar::inode_type::unknown; }; item(html_button* ptr) { btn = ptr; type = target_type = libdar::inode_type::unknown; }; }; // object status libthreadar::mutex content_mutex; ///< to avoid a subthread launched from on_event() to modify 'content' while also building body parts mutable enum { st_init, ///< not showing popup for user selection and not path available st_go_select, ///< currently showing popup for user to select a file/directory st_completed ///< not showing popup but path available using get_selected_path() } status; ///< used to know when get_selected_path() is ready enum thread_to_run { run_nothing, ///< nothing is expected to be run in inherited_run (error condition) run_create_dir,///< create_dir should be run run_init_fill, ///< init_fieldset_target_type() + fill_content() should be run sequentially run_fill_only ///< fill_content() should be run }; mutable thread_to_run which_thread; ///< used by inherited_run to know which subroutine to run in the separated thread // status field about html components bool is_loading_mode; ///< whether the content placeholder shows bool new_warning; ///< whether the warning field should not be cleared libdar::inode_type fieldset_target_type;///< whether fieldset points to a directory or not libdar::inode_type fieldset_type; ///< inode type of the inode itself (the symlink not the pointed to symlink for example) // settings std::string x_message; ///< message passed at constructor time select_mode cur_select_mode; ///< whether user is expected to select a directory, symlink or file std::string filter; ///< only display files matching this filter (glob expression) bool should_refresh; ///< expected status of the page refresh std::shared_ptr<libdar::entrepot> entr; ///< the entrepot we should fetch info from std::shared_ptr<libdar::user_interaction> mem_ui; ///< the original UI the entrepot had when given to go_select() // html components html_text title; ///< shows the message request for the user (provided at constructor time) html_text entrepot_url; ///< url of the entrepot html_text warning; ///< shows warnings when needed (permission pb, etc.) html_web_user_interaction webui; ///< used to control and interact with libdar thread used to act on the entrepot html_div title_box; ///< contains title and warning and stay visible as a sticky box html_form_fieldset fieldset; ///< shows the current directory path // std::string path_loaded; ///< path displayed (empty string means not initialized) std::map<std::string, item> listed; ///< associate a event message to each listed items html_double_button parentdir; ///< change to parent dir html_text content_placeholder; ///< replace content and *parentdir* when loading the directory content bool need_reload_content; ///< whether a force content reload is needed html_table content; ///< parent of content objects html_div btn_box; ///< box containing the bottom buttons html_button btn_cancel; ///< triggers the entry_cancelled event html_button btn_validate; ///< trigger the entry_selected event html_button btn_createdir; ///< leads to create a new directory html_button btn_hide_createdir; ///< hide the create dir form html_form createdir_form; ///< form for new directory html_form_input createdir_input; ///< field to let user provide new dir name // internal routines /// initialize fieldset_target_type field based on the content of fieldset, exception thrown if file/dir does not exist /// \return true if initialization could be performed bool init_fieldset_target_type(); /// fills content and listed from entry located in fieldset.get_label() directory of the entr libdar::entrepot void fill_content(); /// creates the requested directory void create_dir(); /// used by fill_content() to add a single entry to the "listed" field void add_content_entry(const std::string & event_name,///< event name libdar::inode_type tp, ///< entry type libdar::inode_type target_tp, ///< target type of the entry (for symlinks or unknown type entries) const std::string & entry); ///< entry name /// run requested thread after sanity checks /// \note if run_nothing is provided an exception is thrown void run_thread(thread_to_run val); /// free up and clean all html_button of listed and clear content too in coherence void clear_content(); /// set the display to show either the dir content or an "loading..." message /// \param[in] mode if set to true, change visibility to display the content_placeholder /// component, else show the normal components and available directory content void loading_mode(bool mode); /// return the parent path of the provided path static std::string get_parent_path(const std::string & somepath); /// join() wrapper /// \param[in] last whether we have to set back entrepot and forget about it /// \note when 'last' is false it only cleans up and restore states changed by run_thread() /// but if 'last' is true, this cleans up and restore states changed by go_select() void my_closing(); /// for symlinks or unknown type entries tries to open it as a directory and return the status bool is_a_valid_dir(const std::string & pathval, const std::string & name) const; /// update url displayed for the current selected entry void update_entrepot_url(); }; #endif ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������webdar-1.0.0/src/base64.cpp�������������������������������������������������������������������������0000644�0001750�0001752�00000011626�14773727251�012303� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*********************************************************************/ // webdar - a web server and interface program to libdar // Copyright (C) 2013-2025 Denis Corbin // // This file is part of Webdar // // Webdar is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // Webdar is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Webdar. If not, see <http://www.gnu.org/licenses/> // //---- // to contact the author: dar.linux@free.fr /*********************************************************************/ // C system header files #include "my_config.h" extern "C" { } // C++ system header files // webdar headers #include "exceptions.hpp" // #include "base64.hpp" using namespace std; string base64::decode(const string & str) const { string ret = ""; string tmp = str; unsigned int num; unsigned int res; unsigned int len; complement(tmp); len = tmp.size(); res = len % 4; if(len == 0) return ret; if(res != 0) // missing extra bytes, should have been handled by the constructor throw WEBDAR_BUG; for(unsigned int i = 0; i < len; i += 4) ret += convert(tmp[i], tmp[i+1], tmp[i+2], tmp[i+3]); return ret; } void base64::small_decode(const encoded_block & b64, decoded_block & out) const { string tmp = convert(b64[0], b64[1], b64[2], b64[3]); if(tmp.size() != 3) throw WEBDAR_BUG; for(unsigned int i = 0; i < 3; ++i) out[i] = tmp[i]; } void base64::small_encode(unsigned int num_bytes, const decoded_block & bin, encoded_block & out) const { string tmp = unconvert(num_bytes, bin[0], bin[1], bin[2]); if(tmp.size() != 4) throw WEBDAR_BUG; for(unsigned int i = 0; i < 4; ++i) out[i] = tmp[i]; } string base64::encode(const string & str) const { string ret = ""; unsigned int num = str.size() / 3; unsigned int res = str.size() % 3; if(str.size() == 0) return str; for(unsigned int i = 0; i < num; i += 3) ret += unconvert(3, str[i], str[i+1], str[i+2]); num *= 3; switch(res) { case 0: break; case 1: ret += unconvert(1, str[num], 0, 0); break; case 2: ret += unconvert(2, str[num], str[num+1], 0); break; default: throw WEBDAR_BUG; } return ret; } string base64::convert(char a, char b, char c, char d) { string ret = ""; unsigned int v1, v2, v3, v4; char c1, c2, c3; v1 = value64(a); v2 = value64(b); v3 = value64(c); v4 = value64(d); c1 = (char)((v1 << 2) + (v2 >> 4)); c2 = (char)(((v2 & 0x0F) << 4) + (v3 >> 2)); c3 = (char)(((v3 & 0x03) << 6) + v4); ret.push_back(c1); ret.push_back(c2); ret.push_back(c3); if(ret.size() != 3) throw WEBDAR_BUG; return ret; } string base64::unconvert(int num_char, unsigned char a, unsigned char b, unsigned char c) { string ret = ""; unsigned char c1[2], c2[2], c3[2], c4[2]; switch(num_char) { case 0: throw WEBDAR_BUG; case 1: b = c = 0; break; case 2: c = 0; break; case 3: break; default: throw WEBDAR_BUG; } c1[0] = a >> 2; c2[0] = ((a & 0x03) << 4) + (b >> 4); c3[0] = ((b & 0x0F) << 2) + (c >> 6); c4[0] = c & 0x3F; c1[0] = to_value64(c1[0]); c2[0] = to_value64(c2[0]); c3[0] = to_value64(c3[0]); c4[0] = to_value64(c4[0]); // padding switch(num_char) { case 1: c3[0] = '='; c4[0] = '='; break; case 2: c4[0] = '='; break; case 3: break; default: throw WEBDAR_BUG; } // building the resulting string portion c1[1] = c2[1] = c3[1] = c4[1] = '\0'; ret += string((char*)c1) + string((char*)c2) + string((char*)c3) + string((char*)c4); return ret; } unsigned int base64::value64(char a) { if(a >= 'A' && a <= 'Z') return a - 'A'; if(a >= 'a' && a <= 'z') return a - 'a' + 26; if(a >= '0' && a <= '9') return a - '0' + 52; if(a == '+') return 62; if(a == '/') return 63; if(a == '=') return 0; throw exception_range("not a valid base64 character met"); } char base64::to_value64(unsigned int val) { if(val < 26) return 'A' + val; if(val < 52) // val is in [26..52[ return 'a' + (val - 26); if(val < 62) // val is in [52..62[ return '0' + (val - 52); switch(val) { case 62: return '+'; case 63: return '/'; default: throw WEBDAR_BUG; } } void base64::complement(string & str) { unsigned int alone = str.size() % 4; unsigned int missing = alone != 0 ? 4 - alone : 0; while(missing > 0) { str += '='; --missing; } } ����������������������������������������������������������������������������������������������������������webdar-1.0.0/src/base64.hpp�������������������������������������������������������������������������0000644�0001750�0001752�00000004650�14773727251�012307� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*********************************************************************/ // webdar - a web server and interface program to libdar // Copyright (C) 2013-2025 Denis Corbin // // This file is part of Webdar // // Webdar is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // Webdar is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Webdar. If not, see <http://www.gnu.org/licenses/> // //---- // to contact the author: dar.linux@free.fr /*********************************************************************/ #ifndef BASE64_HPP #define BASE64_HPP // C system header files #include "my_config.h" extern "C" { } // C++ system header files #include <string> // webdar headers #include "exceptions.hpp" /// implements the encoding to and decoding from base64 class base64 { public: base64() {}; base64(const base64 & ref) = default; base64(base64 && ref) noexcept = default; base64 & operator = (const base64 & ref) = default; base64 & operator = (base64 && ref) noexcept = default; ~base64() = default; std::string decode(const std::string & str) const; std::string encode(const std::string & str) const; typedef char decoded_block[3]; typedef char encoded_block[4]; void small_decode(const encoded_block & b64, decoded_block & out) const; void small_encode(unsigned int num_bytes, const decoded_block & bin, encoded_block & out) const; private: static std::string convert(char a, char b, char c, char d); ///< output 3 chars of the original binary data static std::string unconvert(int num_char, unsigned char a, unsigned char b, unsigned char c); ///< outputs 4 chars in base64 static unsigned int value64(char a); ///< convert base64 char to its corresponding value static char to_value64(unsigned int val); ///< convert integer < 64 to base64 its char representation static void complement(std::string & ref); ///< add '=' bytes at the end to get a length multiple of 4 chars }; #endif ����������������������������������������������������������������������������������������webdar-1.0.0/src/html_archive_read.cpp��������������������������������������������������������������0000644�0001750�0001752�00000020724�15036514677�014655� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*********************************************************************/ // webdar - a web server and interface program to libdar // Copyright (C) 2013-2025 Denis Corbin // // This file is part of Webdar // // Webdar is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // Webdar is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Webdar. If not, see <http://www.gnu.org/licenses/> // //---- // to contact the author: dar.linux@free.fr /*********************************************************************/ // C system header files #include "my_config.h" extern "C" { } // C++ system header files #include <dar/tools.hpp> // webdar headers #include "chemin.hpp" #include "webdar_css_style.hpp" #include "environment.hpp" #include "tooltip_messages.hpp" // #include "html_archive_read.hpp" using namespace std; const string html_archive_read::changed = "haread-changed"; html_archive_read::html_archive_read(const string & archive_description): form("Update"), fs(archive_description), arch_path("Backup Path", "/", "", webdar_css_style::width_80vw, "Select the backup to read..."), need_entrepot_update(false), ignore_events_st(event_propagated) { opt_read.reset(new (nothrow) html_options_read()); if(! opt_read) throw exception_memory(); // components setup static const char* sect_archive = "archive"; static const char* sect_options = "options"; #ifdef LIBTHREADAR_STACK_FEATURE set_stack_size(DEFAULT_STACK_SIZE); #endif deroule.add_section(sect_archive, "Read Parameters"); deroule.add_section(sect_options, "Read Options"); deroule.set_active_section(0); // web components layout fs.adopt(&arch_path); form.adopt(&fs); deroule.adopt_in_section(sect_archive, &form); deroule.adopt_in_section(sect_options, &guichet_opt_read); adopt(&deroule); adopt(&libdarexec); // events and actor opt_read->record_actor_on_event(this, html_options_read::entrepot_has_changed); opt_read->record_actor_on_event(this, html_options_read::changed); opt_read->record_actor_on_event(this, html_options_read::landing_path_changed); arch_path.record_actor_on_event(this, html_form_input_file::changed_event); libdarexec.record_actor_on_event(this, html_libdar_running_popup::libdar_has_finished); register_name(changed); // initial values arch_path.set_select_mode(html_form_input_file::select_slice); libdarexec.set_visible(false); // css webdar_css_style::normal_button(deroule, true); // tooltips arch_path.set_tooltip(TOOLTIP_HAR_ARCH_PATH); } void html_archive_read::set_biblio(const shared_ptr<bibliotheque> & ptr) { opt_read->set_biblio(ptr); guichet_opt_read.set_child(ptr, bibliotheque::confread, opt_read, false); if(ptr->has_config(bibliotheque::confread, bibliotheque::default_config_name)) { try { guichet_opt_read.load_from_bibliotheque(bibliotheque::default_config_name); } catch(...) { // ignore exception here, as this is called from constructor // of the session components and nothing is yet available to // display execeptions messages (due to old config in configuration file // or corrupted configuration file we read from) // The consequence is that we have a cleared configuration: guichet_opt_read.clear_json(); } } } void html_archive_read::load_json(const json & source) { try { unsigned int version; string class_id; json config = unwrap_config_from_json_header(source, version, class_id); if(class_id != myclass_id) throw exception_range(libdar::tools_printf("Unexpected class_id in json data, found %s while expecting %s", class_id.c_str(), myclass_id)); if(version > format_version) throw exception_range(libdar::tools_printf("Json format version too hight for %s, upgrade your webdar software", myclass_id)); ignore_events(true); try { arch_path.set_value(config.at(jlabel_path)); guichet_opt_read.load_json(config.at(jlabel_opt_read)); } catch(...) { ignore_events(false); throw; } ignore_events(false); } catch(json::exception & e) { throw exception_json(libdar::tools_printf("Error loading %s config", myclass_id), e); } } json html_archive_read::save_json() const { json config; config[jlabel_path] = arch_path.get_value(); config[jlabel_opt_read] = guichet_opt_read.save_json(); return wrap_config_with_json_header(format_version, myclass_id, config); } void html_archive_read::clear_json() { ignore_events(true); try { arch_path.set_value(""); guichet_opt_read.clear_json(); } catch(...) { ignore_events(false); throw; } ignore_events(false); } void html_archive_read::on_event(const string & event_name) { if(event_name == html_options_read::entrepot_has_changed) { if(!is_running()) { need_entrepot_update = true; my_body_part_has_changed(); // force rerun of inherited_body_builder to update entrepot } else { throw WEBDAR_BUG; // should not succeed as the popup // should display during the subthread running // and only vanish once the subtread has completed // while the popup forbids any change of entrepot configuration } } else if(event_name == html_form_input_file::changed_event) { if(! arch_path.get_min_digits().empty()) opt_read->set_src_min_digits(arch_path.get_min_digits()); trigger_changed(); } else if(event_name == html_libdar_running_popup::libdar_has_finished) { libdarexec.set_visible(false); // now hiding the popup my_body_part_has_changed(); join(); } else if(event_name == html_options_read::changed) { trigger_changed(); } else if(event_name == html_options_read::landing_path_changed) { arch_path.set_value(opt_read->get_landing_path()); } else throw WEBDAR_BUG; } string html_archive_read::inherited_get_body_part(const chemin & path, const request & req) { if(need_entrepot_update) update_entrepot(); return get_body_part_from_all_children(path, req); } void html_archive_read::new_css_library_available() { unique_ptr<css_library> & csslib = lookup_css_library(); if(!csslib) throw WEBDAR_BUG; webdar_css_style::update_library(*csslib); } string html_archive_read::get_archive_path() const { chemin chem(arch_path.get_value()); if(chem.size() >= 1) { chem.pop_back(); return chem.display(); } else return ""; } string html_archive_read::get_archive_basename() const { string ret; chemin chem(arch_path.get_value()); if(chem.size() > 0) ret = chem.back(); else ret = arch_path.get_value(); return ret; } void html_archive_read::inherited_run() { arch_path.set_entrepot(opt_read->get_entrepot(libdarexec.get_html_user_interaction())); } void html_archive_read::signaled_inherited_cancel() { pthread_t libdar_tid; libdar::thread_cancellation th; if(is_running(libdar_tid)) th.cancel(libdar_tid, true, 0); } void html_archive_read::update_entrepot() { shared_ptr<html_web_user_interaction> webui(libdarexec.get_html_user_interaction()); if(!webui) throw WEBDAR_BUG; webui->clear(); webui->auto_hide(true, true); if(is_running()) throw WEBDAR_BUG; libdarexec.set_visible(true); need_entrepot_update = false; libdarexec.run_and_control_thread(this); } void html_archive_read::trigger_changed() { switch(ignore_events_st) { case event_propagated: act(changed); break; case event_ignored: ignore_events_st = event_pending; break; case event_pending: break; default: throw WEBDAR_BUG; } } void html_archive_read::ignore_events(bool mode) { switch(ignore_events_st) { case event_propagated: if(mode) ignore_events_st = event_ignored; break; case event_ignored: if(! mode) ignore_events_st = event_propagated; break; case event_pending: if(mode) throw WEBDAR_BUG; ignore_events_st = event_propagated; trigger_changed(); break; default: throw WEBDAR_BUG; } } ��������������������������������������������webdar-1.0.0/src/html_form_mask_bool.cpp������������������������������������������������������������0000644�0001750�0001752�00000021057�15044146765�015230� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*********************************************************************/ // webdar - a web server and interface program to libdar // Copyright (C) 2013-2025 Denis Corbin // // This file is part of Webdar // // Webdar is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // Webdar is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Webdar. If not, see <http://www.gnu.org/licenses/> // //---- // to contact the author: dar.linux@free.fr /*********************************************************************/ // C system header files #include "my_config.h" extern "C" { } // C++ system header files #include <dar/tools.hpp> // webdar headers #include "webdar_css_style.hpp" // #include "html_form_mask_bool.hpp" using namespace std; const string html_form_mask_bool::changed = "hfmb_changed"; html_form_mask_bool::html_form_mask_bool(const string & initial_mode): fs(""), mask_type("Combining with", bool_changed_event), table(true, true, "Add a new mask", "--- select a mask type ---"), ignore_events(false) { // components configuration mask_type.add_choice(and_op, "AND"); mask_type.add_choice(or_op, "OR"); if(mask_type.num_choices() != 2) throw WEBDAR_BUG; mask_type.set_selected_id(initial_mode); current_bool_mode = mask_type.get_selected_id(); fs.change_label(tell_action()); // adoption tree fs.adopt(&mask_type); fs.adopt(&table); adopt(&fs); // events mask_type.record_actor_on_event(this, bool_changed_event); table.record_actor_on_event(this, html_form_dynamic_table::changed); register_name(changed); // visibility // css stuff table.set_css_class_first_column(webdar_css_style::text_top_right); fs.add_label_css_class(webdar_css_style::text_bold); // final table update update_table_content_logic(true); // true = update unconditionally } unique_ptr<libdar::mask> html_form_mask_bool::get_mask() const { unique_ptr<libdar::mask> ret; bool and_mode; if(mask_type.get_selected_id() == and_op) and_mode = true; else if(mask_type.get_selected_id() == or_op) and_mode = false; else throw WEBDAR_BUG; if(table.empty()) ret.reset(new (nothrow) libdar::bool_mask(true)); else { html_form_dynamic_table::iterator it = table.begin(); shared_ptr<body_builder> obj; html_mask* ptr = nullptr; unique_ptr<libdar::mask> toadd; unique_ptr<libdar::et_mask> tmp; if(and_mode) tmp.reset(new (nothrow) libdar::et_mask()); else tmp.reset(new (nothrow) libdar::ou_mask()); if(!tmp) throw exception_memory(); // adding member to the mask while(it != table.end()) { obj = it.get_object(); if(!obj) throw WEBDAR_BUG; ptr = dynamic_cast<html_mask*>(obj.get()); if(ptr == nullptr) throw WEBDAR_BUG; toadd = ptr->get_mask(); if(!toadd) throw WEBDAR_BUG; tmp->add_mask(*toadd); ++it; } ret.reset(tmp.release()); } if(!ret) throw exception_memory(); return ret; } bool html_form_mask_bool::is_relative() const { bool ret = true; html_mask* ptr_mask = nullptr; shared_ptr<body_builder> ptr = nullptr; html_form_dynamic_table::iterator it = table.begin(); while(it != table.end() && ret) { ptr = it.get_object(); if(!ptr) throw WEBDAR_BUG; ptr_mask = dynamic_cast<html_mask*>(ptr.get()); if(ptr_mask == nullptr) throw WEBDAR_BUG; ret &= ptr_mask->is_relative(); ++it; } return ret; } void html_form_mask_bool::on_event(const string & event_name) { if(event_name == bool_changed_event) update_table_content_logic(false); else if(event_name == html_form_dynamic_table::changed) update_table_content_logic(true); else throw WEBDAR_BUG; fs.change_label(tell_action()); trigger_change(); } shared_ptr<body_builder> html_form_mask_bool::manually_add_object(unsigned int num_type) { shared_ptr<body_builder> ret; table.add_line(num_type); if(!table.empty()) { html_form_dynamic_table::iterator last = table.last(); ret = last.get_object(); if(! ret) throw WEBDAR_BUG; } fs.change_label(tell_action()); return ret; } void html_form_mask_bool::manually_set_bool_mode(const string & mode) { mask_type.set_selected_id(mode); update_table_content_logic(false); } string html_form_mask_bool::invert_logic(const string & logic) { if(logic == and_op) return or_op; else if(logic == or_op) return and_op; else throw WEBDAR_BUG; } void html_form_mask_bool::load_json(const json & source) { try { unsigned int version; string class_id; json config = unwrap_config_from_json_header(source, version, class_id); if(class_id != myclass_id) throw exception_range(libdar::tools_printf("Unexpected class_id in json data, found %s while expecting %s", class_id.c_str(), myclass_id)); if(version > format_version) throw exception_range(libdar::tools_printf("Json format version too hight for %s, upgrade your webdar software", myclass_id)); ignore_events = true; try { // setting back the bool mode and mask_type selected value current_bool_mode = config.at(jlabel_logic); mask_type.set_selected_id_with_warning(current_bool_mode, jlabel_logic); // filling the table (this will call back the object provider according the json content) json components = config.at(jlabel_components); table.load_json(components); } catch(...) { ignore_events = false; throw; } ignore_events = false; // we can now trigger the change event once for all times that // have been ignore previously during the table and mask_type setup fs.change_label(tell_action()); trigger_change(); } catch(json::exception & e) { throw exception_json(libdar::tools_printf("Error loading %s config", myclass_id), e); } } json html_form_mask_bool::save_json() const { json ret; json tmp; jsoner* itjson = nullptr; ret[jlabel_logic] = current_bool_mode; ret[jlabel_components] = table.save_json(); return wrap_config_with_json_header(format_version, myclass_id, ret); } void html_form_mask_bool::clear_json() { table.clear(); fs.change_label(tell_action()); } bibliotheque::using_set html_form_mask_bool::get_using_set() const { bibliotheque::using_set ret; bibliotheque_subconfig* subconf = nullptr; for(html_form_dynamic_table::iterator it = table.begin(); it != table.end(); ++it) { subconf = dynamic_cast<bibliotheque_subconfig*>(it.get_object().get()); if(subconf != nullptr) subconfig_add_to(ret, subconf->get_using_set()); } return ret; } string html_form_mask_bool::inherited_get_body_part(const chemin & path, const request & req) { return get_body_part_from_all_children(path, req); } void html_form_mask_bool::new_css_library_available() { unique_ptr<css_library> & csslib = lookup_css_library(); if(!csslib) throw WEBDAR_BUG; webdar_css_style::update_library(*csslib); } string html_form_mask_bool::bool_op_to_name(const string & op) { if(op == and_op) return "and"; else if(op == or_op) return "or"; else throw WEBDAR_BUG; } void html_form_mask_bool::update_table_content_logic(bool unconditionally) { string target_bool_mode = mask_type.get_selected_id(); if((target_bool_mode != current_bool_mode) || unconditionally) { string logic_text = bool_op_to_name(target_bool_mode); html_form_dynamic_table::iterator it = table.begin(); // first line is empty if(it != table.end()) { shared_ptr<html_text> label = it.get_left_label(); if(!label) throw WEBDAR_BUG; label->clear(); ++it; } while(it != table.end()) { shared_ptr<html_text> label = it.get_left_label(); if(!label) throw WEBDAR_BUG; label->clear(); label->add_text(0, logic_text); ++it; } current_bool_mode = target_bool_mode; table.set_obj_type_context(current_bool_mode); } } string html_form_mask_bool::tell_action() const { string ret; if(table.empty()) ret += "match everything"; else ret += "invovled if..."; return ret; } void html_form_mask_bool::trigger_change() { if(! ignore_events) act(changed); } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������webdar-1.0.0/src/css_property.hpp�������������������������������������������������������������������0000644�0001750�0001752�00000004027�14773727251�013755� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*********************************************************************/ // webdar - a web server and interface program to libdar // Copyright (C) 2013-2025 Denis Corbin // // This file is part of Webdar // // Webdar is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // Webdar is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Webdar. If not, see <http://www.gnu.org/licenses/> // //---- // to contact the author: dar.linux@free.fr /*********************************************************************/ #ifndef CSS_PROPERTY_HPP #define CSS_PROPERTY_HPP // C system header files #include "my_config.h" extern "C" { } // C++ system header files #include <string> // webdar headers #include "exceptions.hpp" /// class css_property hold the value of a single css property ///. it does not only record the value but also the absence of value /// when a property is not defined. class css_property { public: css_property() { clear(); }; css_property(const css_property & ref) = default; css_property(css_property && ref) noexcept = default; css_property & operator = (const css_property & ref) = default; css_property & operator = (css_property && ref) noexcept = default; ~css_property() = default; void clear(); void set_value(const std::string & val); const std::string & get_value() const { return value; }; bool is_unset() const { return unset; }; /// update current object with argument ignoring if the field is unset void update_from(const css_property & ref); private: std::string value; bool unset; }; #endif ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������webdar-1.0.0/src/uri.cpp����������������������������������������������������������������������������0000644�0001750�0001752�00000006603�14773727251�012015� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*********************************************************************/ // webdar - a web server and interface program to libdar // Copyright (C) 2013-2025 Denis Corbin // // This file is part of Webdar // // Webdar is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // Webdar is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Webdar. If not, see <http://www.gnu.org/licenses/> // //---- // to contact the author: dar.linux@free.fr /*********************************************************************/ // C system header files #include "my_config.h" extern "C" { } // C++ system header files // webdar headers #include "exceptions.hpp" #include "webdar_tools.hpp" // #include "uri.hpp" using namespace std; bool uri::operator == (const uri & arg) const { return scheme == arg.scheme && hostname == arg.hostname && path == arg.path; // anchor is only used for display purposes } string uri::get_string() const { string ret = ""; if(scheme != "") ret += scheme + ":"; if(hostname != "") ret += "//" + hostname; ret += url_path_part(); if(ret == "") ret = "/"; return ret; } string uri::url_path_part() const { string ret; if(path.empty() && hostname != "") ret += "/"; else ret += path.display(); if(!anchor.empty()) ret += "#" + anchor; return ret; } void uri::read(const string & res) { enum { l_scheme, l_hostname, l_host_path, l_path, l_anchor } lookup = l_scheme; string::const_iterator it = res.begin(); string::const_iterator bk = it; clear(); while(it != res.end()) { switch(lookup) { case l_scheme: if(*it != ':' && *it != '/') ++it; else { if(*it == '/') { scheme = ""; lookup = l_hostname; it = bk; } else { scheme = string(bk, it); ++it; bk = it; lookup = l_hostname; } } break; case l_hostname: if(*it == '/') { ++it; if(it != res.end() && *it == '/') // this a URI with a net_path { ++it; bk = it; lookup = l_host_path; // well, here the first member of the path will be the hostname, we do not need here to add an empty string } else // just an absolute path { hostname = ""; // empty host, the URL is not a net_path bk = it; lookup = l_path; } } else // just a relative path { hostname = ""; // empty host, the URL is not a net_path bk = it; lookup = l_path; } break; case l_host_path: if(*it == '/') { hostname = string(bk, it); ++it; bk = it; lookup = l_path; } else ++it; break; case l_path: if(*it == '#') { path = chemin(string(bk, it)); ++it; bk = it; lookup = l_anchor; } else { ++it; if(it == res.end()) path = chemin(string(bk, it)); } break; case l_anchor: it = res.end(); anchor = string(string(bk, it)); break; default: throw WEBDAR_BUG; } } } �����������������������������������������������������������������������������������������������������������������������������webdar-1.0.0/src/html_datetime.cpp������������������������������������������������������������������0000644�0001750�0001752�00000021506�14773727251�014035� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*********************************************************************/ // webdar - a web server and interface program to libdar // Copyright (C) 2013-2025 Denis Corbin // // This file is part of Webdar // // Webdar is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // Webdar is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Webdar. If not, see <http://www.gnu.org/licenses/> // //---- // to contact the author: dar.linux@free.fr /*********************************************************************/ // C system header files #include "my_config.h" extern "C" { #if HAVE_TIME_H #include <time.h> #endif } // C++ system header files // webdar headers // #include "html_datetime.hpp" using namespace std; const string html_datetime::changed = "html_datetime_changed"; html_datetime::html_datetime(const string & title): year(title, html_form_input::number, "1970", "6", ""), month(""), day(""), hour("At"), minute(":") { month.add_choice("Jan","Jan"); month.add_choice("Feb","Feb"); month.add_choice("Mar","Mar"); month.add_choice("Apr","Apr"); month.add_choice("May","May"); month.add_choice("Jun","Jun"); month.add_choice("Jul","Jul"); month.add_choice("Aug","Aug"); month.add_choice("Sep","Sep"); month.add_choice("Oct","Oct"); month.add_choice("Nov","Nov"); month.add_choice("Dec","Dec"); day.add_choice(" 1"," 1"); day.add_choice(" 2"," 2"); day.add_choice(" 3"," 3"); day.add_choice(" 4"," 4"); day.add_choice(" 5"," 5"); day.add_choice(" 6"," 6"); day.add_choice(" 7"," 7"); day.add_choice(" 8"," 8"); day.add_choice(" 9"," 9"); day.add_choice("10","10"); day.add_choice("11","11"); day.add_choice("12","12"); day.add_choice("13","13"); day.add_choice("14","14"); day.add_choice("15","15"); day.add_choice("16","16"); day.add_choice("17","17"); day.add_choice("18","18"); day.add_choice("19","19"); day.add_choice("20","20"); day.add_choice("21","21"); day.add_choice("22","22"); day.add_choice("23","23"); day.add_choice("24","24"); day.add_choice("25","25"); day.add_choice("26","26"); day.add_choice("27","27"); day.add_choice("28","28"); day.add_choice("29","29"); day.add_choice("30","30"); day.add_choice("31","31"); hour.add_choice("00","00"); hour.add_choice("01","01"); hour.add_choice("02","02"); hour.add_choice("03","03"); hour.add_choice("04","04"); hour.add_choice("05","05"); hour.add_choice("06","06"); hour.add_choice("07","07"); hour.add_choice("08","08"); hour.add_choice("09","09"); hour.add_choice("10","10"); hour.add_choice("11","11"); hour.add_choice("12","12"); hour.add_choice("13","13"); hour.add_choice("14","14"); hour.add_choice("15","15"); hour.add_choice("16","16"); hour.add_choice("17","17"); hour.add_choice("18","18"); hour.add_choice("19","19"); hour.add_choice("20","20"); hour.add_choice("21","21"); hour.add_choice("22","22"); hour.add_choice("23","23"); minute.add_choice("00","00"); minute.add_choice("01","01"); minute.add_choice("02","02"); minute.add_choice("03","03"); minute.add_choice("04","04"); minute.add_choice("05","05"); minute.add_choice("06","06"); minute.add_choice("07","07"); minute.add_choice("08","08"); minute.add_choice("09","09"); minute.add_choice("10","10"); minute.add_choice("11","11"); minute.add_choice("12","12"); minute.add_choice("13","13"); minute.add_choice("14","14"); minute.add_choice("15","15"); minute.add_choice("16","16"); minute.add_choice("17","17"); minute.add_choice("18","18"); minute.add_choice("19","19"); minute.add_choice("20","20"); minute.add_choice("21","21"); minute.add_choice("22","22"); minute.add_choice("23","23"); minute.add_choice("24","24"); minute.add_choice("25","25"); minute.add_choice("28","28"); minute.add_choice("27","27"); minute.add_choice("28","28"); minute.add_choice("29","29"); minute.add_choice("30","30"); minute.add_choice("31","31"); minute.add_choice("32","32"); minute.add_choice("33","33"); minute.add_choice("34","34"); minute.add_choice("35","35"); minute.add_choice("36","36"); minute.add_choice("37","37"); minute.add_choice("38","38"); minute.add_choice("39","39"); minute.add_choice("40","40"); minute.add_choice("41","41"); minute.add_choice("42","42"); minute.add_choice("43","43"); minute.add_choice("44","44"); minute.add_choice("45","45"); minute.add_choice("46","46"); minute.add_choice("47","47"); minute.add_choice("48","48"); minute.add_choice("49","49"); minute.add_choice("50","50"); minute.add_choice("51","51"); minute.add_choice("52","52"); minute.add_choice("53","53"); minute.add_choice("54","54"); minute.add_choice("55","55"); minute.add_choice("56","56"); minute.add_choice("57","57"); minute.add_choice("58","58"); minute.add_choice("59","59"); year.set_min_only(1970); year.set_no_CR(); month.set_no_CR(); day.set_no_CR(); hour.set_no_CR(); // adoption tree adopt(&year); adopt(&month); adopt(&day); adopt(&hour); adopt(&minute); // events year.record_actor_on_event(this, html_form_input::changed); month.record_actor_on_event(this, html_form_select::changed); day.record_actor_on_event(this, html_form_select::changed); hour.record_actor_on_event(this, html_form_select::changed); minute.record_actor_on_event(this, html_form_select::changed); register_name(changed); } libdar::infinint html_datetime::get_value() const { time_t tmp_ret; struct tm splitted; unsigned int tmp = webdar_tools_convert_to_int(year.get_value()); if(tmp < 1900) throw WEBDAR_BUG; splitted.tm_sec = 0; splitted.tm_min = minute.get_selected_num(); splitted.tm_hour = hour.get_selected_num(); splitted.tm_mday = day.get_selected_num() + 1; // tm_mday starts at 1 unlike the other fields... splitted.tm_mon = month.get_selected_num(); splitted.tm_year = tmp - 1900; splitted.tm_wday = 0; splitted.tm_yday = 0; splitted.tm_isdst = 0; // never consider daylight saving, but always and only GMT tmp_ret = timegm(&splitted); if(tmp_ret == -1) throw WEBDAR_BUG; if(tmp_ret < 0) throw WEBDAR_BUG; // not supporting dates before year 1970 (a year of great things ;) //timegm() should never be return negative dates but just in case return libdar::infinint(tmp_ret); } void html_datetime::set_value(const libdar::infinint & val) { time_t tmp; struct tm splitted; struct tm *ret; tmp = webdar_tools_convert_from_infinint<time_t>(val, string("value given from libdar is not possible to be stored as time_t system type")); ret = gmtime_r(&tmp, &splitted); if(ret == nullptr) throw WEBDAR_BUG; // system failed representing this date in splitted fields update_from(splitted); } void html_datetime::on_event(const string & event_name) { if(event_name == html_form_input::changed || event_name == html_form_select::changed) act(changed); else throw WEBDAR_BUG; } string html_datetime::inherited_get_body_part(const chemin & path, const request & req) { string ret; bool err = false; int annees; if(get_no_CR()) minute.set_no_CR(); ret = get_body_part_from_all_children(path, req); try { annees = webdar_tools_convert_to_int(year.get_value()); } catch(exception_range & e) { err = true; } if(err || annees < 70) { year.set_value("1970"); if(req.get_method() == "POST") { request tmpreq = req; tmpreq.change_method("GET"); ret = get_body_part_from_all_children(path, tmpreq); } else ret = get_body_part_from_all_children(path, req); } return ret; } void html_datetime::update_from(struct tm val) { unsigned int year_int = val.tm_year + 1900; if(year_int < 1970) // sanity check, should not occur { val.tm_min = 0; val.tm_hour = 0; val.tm_mday = 0; val.tm_mon = 0; year_int = 1970; } minute.set_selected_num(val.tm_min); hour.set_selected_num(val.tm_hour); day.set_selected_num(val.tm_mday - 1); // day starts at 1 unlike other fields month.set_selected_num(val.tm_mon); year.set_value(webdar_tools_convert_to_string(year_int)); } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������webdar-1.0.0/src/Makefile.am������������������������������������������������������������������������0000644�0001750�0001752�00000020534�15044724022�012526� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������######################################################################## # webdar - a web server and interface program to libdar # Copyright (C) 2013-2025 Denis Corbin # # This file is part of Webdar # # Webdar is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # Webdar is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with Webdar. If not, see <http://www.gnu.org/licenses/> # #---- # to contact the author: dar.linux@free.fr ######################################################################## # # conditional part webdar_static # if BUILD_WEBDAR_STATIC ALSO_BUILD = webdar_static ALSO_BUILD_INST = $(ALSO_BUILD)$(EXEEXT) else ALSO_BUILD = ALSO_BUILD_INST = endif # # conditionnal part UPX # if USE_UPX install-exec-hook : cd $(DESTDIR)$(bindir) ; $(UPX_PROG) -9 webdar$(EXEEXT) $(ALSO_BUILD_INST) || exit 0 else install-exec-hook: echo "no executable packing, UPX not found or disabled" endif # # unconditionnal part # bin_PROGRAMS = webdar $(ALSO_BUILD) noinst_PROGRAMS = static_object_builder LDADD = @LIBDAR_LIBS@ @LIBTHREADAR_LIBS@ @OPENSSL_LIBS@ static_object_builder_SOURCES = static_object_builder.cpp base64.cpp base64.hpp static_object.sto: static_object_batch static_object_builder ../resources/favicon.jpg ../resources/webdar_logo.jpg ../resources/webdar_title_logo.jpg ./static_object_batch > static_object.sto no_compress_glob_expression_list.cpp: ../data/darrc sed -rnE -e 's/[ \t]*#.*//' -e 's/[ \t]*-Z[ \t]+(".*")/no_compress_glob_expressions.push_back(\1);/p' $< > $@ dist_noinst_DATA = static_object_batch ../resources/favicon.jpg ../resources/webdar_logo.jpg ../resources/webdar_title_logo.jpg ../data/darrc all-local: static_object.sto clean-local: rm -f static_object.sto no_compress_glob_expression_list.cpp COMMON = my_config.h global_parameters.hpp central_report.cpp central_report.hpp proto_connexion.cpp proto_connexion.hpp connexion.cpp connexion.hpp authentication.hpp cookies.hpp ssl_connexion.cpp ssl_connexion.hpp ssl_context.cpp ssl_context.hpp exceptions.cpp exceptions.hpp listener.cpp listener.hpp parser.cpp parser.hpp webdar_tools.cpp webdar_tools.hpp server.cpp server.hpp uri.cpp uri.hpp session.cpp session.hpp date.cpp date.hpp request.cpp request.hpp answer.cpp answer.hpp tokens.cpp tokens.hpp base64.cpp base64.hpp challenge.cpp challenge.hpp choose.cpp choose.hpp css.cpp css.hpp css_library.cpp css_library.hpp html_text.cpp html_text.hpp html_page.cpp html_page.hpp html_table.cpp html_table.hpp html_image.cpp html_image.hpp html_static_url.cpp html_static_url.hpp html_url.hpp html_url.cpp responder.hpp error_page.cpp error_page.hpp html_form.cpp html_form.hpp html_form_fieldset.cpp html_form_fieldset.hpp html_form_input.cpp html_form_input.hpp html_form_radio.cpp html_form_radio.hpp html_form_select.cpp html_form_select.hpp body_builder.cpp body_builder.hpp static_body_builder.hpp chemin.cpp chemin.hpp css_property.cpp css_property.hpp html_level.cpp html_level.hpp html_div.cpp html_div.hpp html_menu.cpp html_menu.hpp html_aiguille.cpp html_aiguille.hpp saisie.cpp saisie.hpp user_interface.cpp user_interface.hpp events.cpp events.hpp actor.cpp actor.hpp reference.cpp reference.hpp html_yes_no_box.cpp html_yes_no_box.hpp html_options_extract.cpp html_options_extract.hpp html_options_read.cpp html_options_read.hpp html_crypto_algo.cpp html_crypto_algo.hpp html_comparison_fields.cpp html_comparison_fields.hpp html_options_compare.cpp html_options_compare.hpp html_options_test.cpp html_options_test.hpp html_archive_read.cpp html_archive_read.hpp html_compression.cpp html_compression.hpp html_size_unit.cpp html_size_unit.hpp html_hash_algo.cpp html_hash_algo.hpp html_datetime.cpp html_datetime.hpp html_options_create.cpp html_options_create.hpp html_archive_create.cpp html_archive_create.hpp web_user_interaction.cpp web_user_interaction.hpp html_web_user_interaction.cpp html_web_user_interaction.hpp html_button.cpp html_button.hpp html_statistics.cpp html_statistics.hpp archive_test.cpp archive_test.hpp html_error.cpp html_error.hpp html_libdar_running_page.cpp html_libdar_running_page.hpp archive_restore.cpp archive_restore.hpp archive_compare.cpp archive_compare.hpp archive_create.cpp archive_create.hpp html_options_isolate.cpp html_options_isolate.hpp archive_isolate.cpp archive_isolate.hpp html_archive_isolate.cpp html_archive_isolate.hpp html_options_merge.cpp html_options_merge.hpp html_archive_merge.cpp html_archive_merge.hpp archive_merge.cpp archive_merge.hpp archive_init_list.cpp archive_init_list.hpp html_dir_tree.cpp html_dir_tree.hpp html_listing_page.cpp html_listing_page.hpp html_focus.cpp html_focus.hpp static_object.cpp static_object.hpp static_object_library.cpp static_object_library.hpp css_class.cpp css_class.hpp webdar_css_style.cpp webdar_css_style.hpp css_class_group.cpp css_class_group.hpp html_tabs.cpp html_tabs.hpp html_select_file.cpp html_select_file.hpp html_popup.cpp html_popup.hpp html_form_input_file.cpp html_form_input_file.hpp jsoner.hpp jsoner.cpp html_derouleur.cpp html_derouleur.hpp html_entrepot.hpp html_entrepot.cpp environment.hpp environment.cpp html_libdar_running_popup.hpp html_libdar_running_popup.cpp html_mask.hpp html_mask.cpp html_form_mask_expression.hpp html_form_mask_expression.cpp html_form_mask_bool.hpp html_form_mask_bool.cpp html_mask_form_filename.hpp html_mask_form_filename.cpp html_form_mask_subdir.hpp html_form_mask_subdir.cpp html_mask_form_path.hpp html_mask_form_path.cpp html_double_button.hpp html_double_button.cpp html_demo.hpp html_demo.cpp html_form_mask_file.hpp html_form_mask_file.cpp html_archive_repair.cpp html_archive_repair.hpp archive_repair.hpp archive_repair.cpp html_archive_compare.hpp html_archive_compare.cpp html_archive_extract.hpp html_archive_extract.cpp html_options_repair.hpp html_options_repair.cpp html_overwrite_action.hpp html_form_overwrite_constant_action.hpp html_form_overwrite_constant_action.cpp html_overwrite_criterium.hpp html_form_overwrite_base_criterium.hpp html_form_overwrite_base_criterium.cpp html_form_overwrite_combining_criterium.hpp html_form_overwrite_combining_criterium.cpp html_form_overwrite_conditional_action.hpp html_form_overwrite_conditional_action.cpp html_form_overwrite_action.hpp html_form_overwrite_action.cpp html_hr.hpp html_hr.cpp html_form_overwrite_chain_action.hpp html_form_overwrite_chain_action.cpp html_form_dynamic_table.hpp html_form_dynamic_table.cpp html_form_gnupg_list.hpp html_form_gnupg_list.cpp html_form_overwrite_chain_cell.hpp html_form_overwrite_chain_cell.cpp html_legend.hpp html_legend.cpp html_form_same_fs.cpp html_form_same_fs.hpp html_form_ignore_as_symlink.hpp html_form_ignore_as_symlink.cpp html_form_sig_block_size.hpp html_form_sig_block_size.cpp html_form_input_unit.hpp html_form_input_unit.cpp html_compression_params.hpp html_compression_params.cpp html_slicing.hpp html_slicing.cpp html_ciphering.hpp html_ciphering.cpp html_fsa_scope.hpp html_fsa_scope.cpp html_disconnect.hpp html_disconnect.cpp disconnected_page.hpp disconnected_page.cpp server_pool.hpp server_pool.cpp html_options_list.hpp html_options_list.cpp html_summary_page.hpp html_summary_page.cpp bibliotheque.cpp bibliotheque.hpp arriere_boutique.hpp html_bibliotheque.hpp html_bibliotheque.cpp html_fichier.hpp bibliotheque_subconfig.hpp bibliotheque_subconfig.cpp guichet.cpp guichet.hpp html_over_guichet.hpp html_over_guichet.cpp html_void.hpp html_void.cpp html_entrepot_landing.hpp html_entrepot_landing.cpp html_span.hpp html_span.cpp html_version.hpp html_version.cpp html_label.hpp html_label.cpp html_tooltip.hpp html_tooltip.cpp tooltip_messages.hpp webdar_SOURCES = $(COMMON) webdar.cpp webdar_CPPFLAGS = $(LIBDAR_CFLAGS) $(OPENSSL_CFLAGS) webdar_LDFLAGS = $(AM_LDFLAGS) $(LIBDAR_LIBS) $(OPENSSL_LIBS) webdar_static_SOURCES = $(COMMON) webdar.cpp webdar_static_CPPFLAGS = $(LIBDAR_CFLAGS) $(OPENSSL_CFLAGS) webdar_static_LDFLAGS = -all-static $(AM_LDFLAGS) $(LIBDAR_LIBS) $(OPENSSL_LIBS) static_object_library.cpp: static_object.sto html_bibliotheque.cpp: no_compress_glob_expression_list.cpp ��������������������������������������������������������������������������������������������������������������������������������������������������������������������webdar-1.0.0/src/archive_init_list.cpp��������������������������������������������������������������0000644�0001750�0001752�00000006142�15030770720�014675� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*********************************************************************/ // webdar - a web server and interface program to libdar // Copyright (C) 2013-2025 Denis Corbin // // This file is part of Webdar // // Webdar is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // Webdar is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Webdar. If not, see <http://www.gnu.org/licenses/> // //---- // to contact the author: dar.linux@free.fr /*********************************************************************/ // C system header files #include "my_config.h" extern "C" { } // C++ system header files // webdar headers #include "tokens.hpp" #include "exceptions.hpp" // #include "archive_init_list.hpp" using namespace std; archive_init_list::archive_init_list(): param(nullptr) { #ifdef LIBTHREADAR_STACK_FEATURE set_stack_size(DEFAULT_STACK_SIZE); #endif } const vector<libdar::list_entry> archive_init_list::get_children_in_table(const string & dir) const { if(!ptr) throw WEBDAR_BUG; return ptr->get_children_in_table(dir); } bool archive_init_list::has_subdirectory(const string & dir) const { if(!ptr) throw WEBDAR_BUG; return ptr->has_subdirectory(dir); } libdar::archive_summary archive_init_list::get_summary() const { if(!ptr) throw WEBDAR_BUG; return ptr->summary_data(); } string archive_init_list::get_archive_full_name() const { if(!ptr) throw WEBDAR_BUG; if(param == nullptr) throw WEBDAR_BUG; return (libdar::path(param->get_archive_path()) + param->get_archive_basename()).display(); } void archive_init_list::inherited_run() { if(ptr) throw WEBDAR_BUG; try { if(!ui && ! ui->get_user_interaction()) throw WEBDAR_BUG; ui->clear(); ui->auto_hide(false, false); if(param == nullptr) throw WEBDAR_BUG; libdar::path archpath(param->get_archive_path(), true); string basename(param->get_archive_basename()); libdar::archive_options_read read_opt(param->get_read_options(ui)); ui->auto_hide(true, true); cancellation_checkpoint(); ptr.reset(new (nothrow) libdar::archive(ui->get_user_interaction(), archpath, basename, EXTENSION, read_opt)); if(!ptr) throw exception_memory(); try { cancellation_checkpoint(); // this is necessary before calling get_children_in_table ptr->init_catalogue(); } catch(...) { ptr.reset(); throw; } } catch(libdar::Egeneric & e) { if(ptr) throw WEBDAR_BUG; throw exception_libcall(e); } } void archive_init_list::signaled_inherited_cancel() { pthread_t libdar_tid; libdar::thread_cancellation th; if(is_running(libdar_tid)) th.cancel(libdar_tid, true, 0); } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������webdar-1.0.0/src/html_entrepot.hpp������������������������������������������������������������������0000644�0001750�0001752�00000015117�14773727251�014107� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*********************************************************************/ // webdar - a web server and interface program to libdar // Copyright (C) 2013-2025 Denis Corbin // // This file is part of Webdar // // Webdar is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // Webdar is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Webdar. If not, see <http://www.gnu.org/licenses/> // //---- // to contact the author: dar.linux@free.fr /*********************************************************************/ #ifndef HTML_ENTREPOT_HPP #define HTML_ENTREPOT_HPP // C system header files #include "my_config.h" extern "C" { } // C++ system header files #include <memory> #include <string> #include <libthreadar/libthreadar.hpp> // webdar headers #include "body_builder.hpp" #include "html_form.hpp" #include "html_form_input.hpp" #include "html_form_input_file.hpp" #include "html_form_fieldset.hpp" #include "html_form_select.hpp" #include "actor.hpp" #include "events.hpp" #include "html_web_user_interaction.hpp" #include "jsoner.hpp" /// class html_entrepot let user define an entrepot parameters class html_entrepot: public body_builder, public actor, public events, public libthreadar::thread_signal, public jsoner { public: /// event triggered when any entrepot parameters has changed // the use case is for the caller to know when to call get_entrepot() static const std::string changed; html_entrepot(); html_entrepot(const html_entrepot & ref) = delete; html_entrepot(html_entrepot && ref) noexcept = delete; html_entrepot & operator = (const html_entrepot & ref) = delete; html_entrepot & operator = (html_entrepot && ref) noexcept = delete; ~html_entrepot() { cancel(); join(); }; /// run the entrepot building in a dedicated thread and display/control this thread /// from the provided html_web_user_interaction object, which must run from another /// thread than the one calling this method for the user to be able to interrupt the operation /// \note if the provided webui already managed a thread, this method will not spawn a thread /// for its inherited_run() but call it directly in the same thread, assuming another thread /// already managed the webui for it get refreshed can react to user actions. std::shared_ptr<libdar::entrepot> & get_entrepot(std::shared_ptr<html_web_user_interaction> & webui) const; /// inherited from actor parent class virtual void on_event(const std::string & event_name) override; /// change the change event name void set_event_name(const std::string & name); /// inherited from jsoner virtual void load_json(const json & source) override; /// inherited from jsoner virtual json save_json() const override; /// inherited from jsoner virtual void clear_json() override; /// set the object to webdar defaults void set_to_webdar_defaults(); /// inherited from body_builder virtual void bind_to_anchor(const std::string & val) override { form.bind_to_anchor(val); }; protected: /// inherited from body_builder virtual std::string inherited_get_body_part(const chemin & path, const request & req) override; /// inherited from body_builder virtual void css_classes_have_changed() override; /// inherited from body_builder virtual void new_css_library_available() override; /// inherited from libthreadar::thread virtual void inherited_run() override; /// inherited from libthreadar::thread virtual void signaled_inherited_cancel() override; private: static constexpr const char* type_local = "local"; static constexpr const char* type_ftp = "ftp"; static constexpr const char* type_sftp = "sftp"; static constexpr const char* auth_pass = "password"; static constexpr const char* auth_key = "keyfile"; static const std::string repo_type_changed; std::string custom_event_name; bool ignore_events; mutable std::shared_ptr<libdar::user_interaction> dialog; ///< used by inherited_run mutable std::shared_ptr<libdar::entrepot> entrep; ///< set by inherited_run mutable libthreadar::mutex entrep_ctrl; ///< control the write access to entrep mutable bool entrep_type_has_changed; ///< variable local to inherited_get_body_part() and methods called from there mutable bool entrep_need_update; html_form form; html_form_fieldset fs; html_form_select repo_type; // local, ftp or sftp html_form_input host; // ftp and sftp html_form_input port; // ftp and sftp html_form_input login; // ftp and sftp html_form_select auth_type; // (sftp only) login or keyfile html_form_input pass; // ftp and sftp html_form_input auth_from_file; // ftp and sftp html_form_input_file pub_keyfile; // sftp only html_form_input_file prv_keyfile; // sftp only html_form_input knownhosts_check; // sftp only html_form_input_file known_hosts_file; // sftp only html_form_input wait_time; // ftp and sftp html_form_input verbose; // ftp and sftp void update_visible(); void trigger_changed_event(); void clear_form(); void reset_ssh_files(); static constexpr const unsigned int format_version = 1; static constexpr const char* myclass_id = "html_entrepot"; static constexpr const char* jlabel_type = "type"; static constexpr const char* jlabel_host = "host"; static constexpr const char* jlabel_port = "port"; static constexpr const char* jlabel_authtype = "authtype"; static constexpr const char* jlabel_login = "login"; static constexpr const char* jlabel_pass = "pass"; static constexpr const char* jlabel_auth_from_file = "auth_file"; static constexpr const char* jlabel_pubkey = "pubkey"; static constexpr const char* jlabel_prvkey = "prvkey"; static constexpr const char* jlabel_knownhosts = "knownhosts"; static constexpr const char* jlabel_knownhosts_file = "knownhosts_file"; static constexpr const char* jlabel_waittime = "wait"; static constexpr const char* jlabel_verbose = "verbose"; static constexpr const char* default_waittime = "30"; static constexpr const char* default_verbose = ""; }; #endif �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������webdar-1.0.0/src/html_options_read.cpp��������������������������������������������������������������0000644�0001750�0001752�00000056434�15036453672�014733� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*********************************************************************/ // webdar - a web server and interface program to libdar // Copyright (C) 2013-2025 Denis Corbin // // This file is part of Webdar // // Webdar is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // Webdar is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Webdar. If not, see <http://www.gnu.org/licenses/> // //---- // to contact the author: dar.linux@free.fr /*********************************************************************/ // C system header files #include "my_config.h" extern "C" { } // C++ system header files #include <dar/tools.hpp> // webdar headers #include "webdar_tools.hpp" #include "webdar_css_style.hpp" #include "tooltip_messages.hpp" // #include "html_options_read.hpp" using namespace std; const string html_options_read::landing_path_changed = "landing_path_changed"; const string html_options_read::entrepot_has_changed = "entrep_has_changed"; const string html_options_read::ref_entrepot_landing_path_changed = "ref_landing_path_changed"; const string html_options_read::ref_entrepot_has_changed = "ref_entrep_has_changed"; const string html_options_read::changed = "horead_changed"; html_options_read::html_options_read(): form_src("Update Options"), fs_src(""), fs_ref(""), src_crypto_algo("Cipher (for old archives/backups only), this is now auto-detected, select no cipher)"), src_crypto_pass("Passphrase (will be asked later if not provided here)", html_form_input::password, "", "", webdar_css_style::width_100vw), src_crypto_size("Cipher block size", 0, "80%"), src_ignore_sig_failure("Ignore signature failure", html_form_input::check, "", "", ""), src_execute("Command to execute locally before reading each slice", html_form_input::text, "", "", webdar_css_style::width_100vw), src_slice_min_digits("Slice minimum digit", html_form_input::number, "0", "6", ""), multi_thread_crypto("Number of thread for cryptography", html_form_input::number, "2", "5", ""), multi_thread_compress("Number of thread for decompression", html_form_input::number, "2", "5", ""), info_details("Detailed information", html_form_input::check, "1", "", ""), lax("Laxist check mode", html_form_input::check, "", "", ""), sequential_read("Sequential read", html_form_input::check, "", "", ""), force_first_slice("Fetch the archive format reading the first instead of the last slice", html_form_input::check, "", "", ""), ref_use_external_catalogue("Use external catalog to open the archive", html_form_input::check, "", "", ""), form_ref("Update Options"), ref_path("External catalog path", "/", "", "", "Select the external catalog..."), ref_crypto_algo("Cipher (for recent archives/backups, this is auto-detected, do not select any cipher)"), ref_crypto_pass("Passphrase", html_form_input::password, "", "", ""), ref_crypto_size("Cipher block size", 0, "80%"), ref_execute("Command to execute locally before reading each slice", html_form_input::text, "", "", webdar_css_style::width_100vw), ref_slice_min_digits("Slice minimum digit", html_form_input::number, "0", "6", ""), need_ref_entrepot_update(false), updating_entrepot(false), update_from_load_json(false), ignore_events(false) { #ifdef LIBTHREADAR_STACK_FEATURE set_stack_size(DEFAULT_STACK_SIZE); #endif entrep.reset(new (nothrow) html_entrepot_landing()); if(!entrep) throw exception_memory(); ref_entrep.reset(new (nothrow) html_entrepot_landing()); if(!ref_entrep) throw exception_memory(); ref_path.set_select_mode(html_form_input_file::select_slice); ref_path.set_can_create_dir(false); multi_thread_crypto.set_min_only(1); multi_thread_compress.set_min_only(1); src_slice_min_digits.set_min_only(0); ref_slice_min_digits.set_min_only(0); // set default values from libdar // settings need to be done once guichet have been fully // initialized in set_biblio() // build the adoption tree deroule.add_section(sect_entrep, "Backup Location"); deroule.add_section(sect_opt, "Reading options"); deroule.add_section(sect_extcat, "External Catalog"); deroule.add_section(sect_ref_entrep, "External Catalog location"); deroule.adopt_in_section(sect_entrep, &guichet_entrep); fs_src.adopt(&src_crypto_algo); fs_src.adopt(&src_crypto_pass); fs_src.adopt(&src_crypto_size); fs_src.adopt(&src_ignore_sig_failure); fs_src.adopt(&src_execute); fs_src.adopt(&src_slice_min_digits); fs_src.adopt(&info_details); fs_src.adopt(&lax); fs_src.adopt(&sequential_read); fs_src.adopt(&force_first_slice); fs_src.adopt(&multi_thread_crypto); fs_src.adopt(&multi_thread_compress); form_src.adopt(&fs_src); deroule.adopt_in_section(sect_opt, &form_src); deroule.adopt_in_section(sect_ref_entrep, &guichet_ref_entrep); fs_ref.adopt(&ref_use_external_catalogue); fs_ref.adopt(&ref_path); fs_ref.adopt(&ref_crypto_algo); fs_ref.adopt(&ref_crypto_pass); fs_ref.adopt(&ref_crypto_size); fs_ref.adopt(&ref_execute); fs_ref.adopt(&ref_slice_min_digits); form_ref.adopt(&fs_ref); deroule.adopt_in_section(sect_extcat, &form_ref); adopt(&deroule); adopt(&ref_webui); // events // modyfing entrepot objects to be able to differentiate which one has changed: entrep->set_event_entrepot(entrepot_has_changed); ref_entrep->set_event_entrepot(ref_entrepot_has_changed); ref_entrep->set_event_landing_path(ref_entrepot_landing_path_changed); // these are the same event name as the ones we used for ourself entrep->record_actor_on_event(this, entrepot_has_changed); entrep->record_actor_on_event(this, html_entrepot_landing::landing_path_only_changed); ref_entrep->record_actor_on_event(this, ref_entrepot_has_changed); ref_entrep->record_actor_on_event(this, ref_entrepot_landing_path_changed); ref_path.record_actor_on_event(this, html_form_input_file::changed_entrepot); ref_path.record_actor_on_event(this, html_form_input_file::changed_event); src_crypto_algo.record_actor_on_event(this, html_crypto_algo::changed); ref_use_external_catalogue.record_actor_on_event(this, html_form_input::changed); ref_crypto_algo.record_actor_on_event(this, html_crypto_algo::changed); // to track component changes from subcomponents changes src_crypto_pass.record_actor_on_event(this, html_form_input::changed); src_crypto_size.record_actor_on_event(this, html_form_input_unit::changed); src_ignore_sig_failure.record_actor_on_event(this, html_form_input::changed); src_execute.record_actor_on_event(this, html_form_input::changed); src_slice_min_digits.record_actor_on_event(this, html_form_input::changed); info_details.record_actor_on_event(this, html_form_input::changed); lax.record_actor_on_event(this, html_form_input::changed); sequential_read.record_actor_on_event(this, html_form_input::changed); force_first_slice.record_actor_on_event(this, html_form_input::changed); multi_thread_crypto.record_actor_on_event(this, html_form_input::changed); multi_thread_compress.record_actor_on_event(this, html_form_input::changed); ref_crypto_pass.record_actor_on_event(this, html_form_input::changed); ref_crypto_size.record_actor_on_event(this, html_form_input_unit::changed); ref_execute.record_actor_on_event(this, html_form_input::changed); ref_slice_min_digits.record_actor_on_event(this, html_form_input::changed); ref_webui.record_actor_on_event(this, html_libdar_running_popup::libdar_has_finished); // setting up our own events register_name(landing_path_changed); register_name(entrepot_has_changed); register_name(changed); // visible ref_webui.set_visible(false); // css webdar_css_style::grey_button(deroule, true); src_crypto_pass.add_css_class(webdar_css_style::width_100vw_8em); src_ignore_sig_failure.add_css_class(webdar_css_style::width_100vw_8em); src_execute.add_css_class(webdar_css_style::width_100vw_8em); src_slice_min_digits.add_css_class(webdar_css_style::width_100vw_8em); info_details.add_css_class(webdar_css_style::width_100vw_8em); lax.add_css_class(webdar_css_style::width_100vw_8em); sequential_read.add_css_class(webdar_css_style::width_100vw_8em); force_first_slice.add_css_class(webdar_css_style::width_100vw_8em); multi_thread_crypto.add_css_class(webdar_css_style::width_100vw_8em); multi_thread_compress.add_css_class(webdar_css_style::width_100vw_8em); ref_use_external_catalogue.add_css_class(webdar_css_style::width_100vw_8em); ref_path.add_css_class(webdar_css_style::width_100vw_5em); ref_crypto_pass.add_css_class(webdar_css_style::width_100vw_8em); ref_execute.add_css_class(webdar_css_style::width_100vw_8em); ref_slice_min_digits.add_css_class(webdar_css_style::width_100vw_8em); // tooltip src_crypto_algo.set_tooltip(TOOLTIP_HOR_ALGO); src_crypto_pass.set_tooltip(TOOLTIP_HOR_PASS); src_crypto_size.set_tooltip(TOOLTIP_HOR_SIZE); src_ignore_sig_failure.set_tooltip(TOOLTIP_HOR_SIG_FAILURE); src_execute.set_tooltip(TOOLTIP_HOR_EXECUTE); src_slice_min_digits.set_tooltip(TOOLTIP_HOR_MIN_DIGITS); info_details.set_tooltip(TOOLTIP_HOR_INFO_DETAILS); lax.set_tooltip(TOOLTIP_HOR_LAX); sequential_read.set_tooltip(TOOLTIP_HOR_SEQ_READ); force_first_slice.set_tooltip(TOOLTIP_HOR_FORCE_FIRST_SLICE); multi_thread_compress.set_tooltip(TOOLTIP_HOR_THREADS_COMPR); ref_use_external_catalogue.set_tooltip(TOOLTIP_HOR_EXTERNAL_CAT); } void html_options_read::set_biblio(const shared_ptr<bibliotheque> & ptr) { guichet_entrep.set_child(ptr, bibliotheque::repo, entrep, false); guichet_ref_entrep.set_child(ptr, bibliotheque::repo, ref_entrep, false); set_defaults(); // manually launching on event to have coherent visibility between fields on_event(html_crypto_algo::changed); } libdar::archive_options_read html_options_read::get_options(shared_ptr<html_web_user_interaction> & webui) const { libdar::archive_options_read opts; opts.clear(); opts.set_crypto_algo(src_crypto_algo.get_value()); if(!src_crypto_pass.get_value().empty()) opts.set_crypto_pass(libdar::secu_string(src_crypto_pass.get_value().c_str(), src_crypto_pass.get_value().size())); opts.set_crypto_size(webdar_tools_convert_from_infinint<libdar::U_32>(src_crypto_size.get_value_as_infinint(), "Error converting value of crypto block size")); opts.set_ignore_signature_check_failure(src_ignore_sig_failure.get_value_as_bool()); opts.set_execute(src_execute.get_value()); opts.set_slice_min_digits(libdar::infinint(webdar_tools_convert_to_int(src_slice_min_digits.get_value()))); opts.set_entrepot(entrep->get_entrepot(webui)); opts.set_info_details(info_details.get_value_as_bool()); opts.set_lax(lax.get_value_as_bool()); opts.set_sequential_read(sequential_read.get_value_as_bool()); opts.set_multi_threaded_crypto(webdar_tools_convert_to_int(multi_thread_crypto.get_value())); opts.set_multi_threaded_compress(webdar_tools_convert_to_int(multi_thread_compress.get_value())); if(ref_use_external_catalogue.get_value_as_bool()) { chemin chem(ref_path.get_value()); if(chem.size() > 1) { string basename = chem.back(); chem.pop_back(); opts.set_external_catalogue(chem.display(), basename); } else opts.set_external_catalogue(string(""), chem.display()); opts.set_ref_crypto_algo(ref_crypto_algo.get_value()); if(!ref_crypto_pass.get_value().empty()) opts.set_ref_crypto_pass(libdar::secu_string(ref_crypto_pass.get_value().c_str(), ref_crypto_pass.get_value().size())); opts.set_ref_crypto_size(webdar_tools_convert_from_infinint<libdar::U_32>(ref_crypto_size.get_value_as_infinint(), "Error converting value of crypto block size for the reference catalog")); opts.set_ref_execute(ref_execute.get_value()); opts.set_ref_slice_min_digits(libdar::infinint(webdar_tools_convert_to_int(ref_slice_min_digits.get_value()))); opts.set_ref_entrepot(ref_entrep->get_entrepot(webui)); opts.set_force_first_slice(force_first_slice.get_value_as_bool()); } else opts.unset_external_catalogue(); return opts; } void html_options_read::set_src_min_digits(const string & val) { try { webdar_tools_convert_to_int(val); } catch(exception_base & e) { e.change_message(string("Invalid min-digits: ") + e.get_message()); throw; } src_slice_min_digits.set_value(val); } void html_options_read::load_json(const json & source) { try { unsigned int version; string class_id; json config = unwrap_config_from_json_header(source, version, class_id); if(class_id != myclass_id) throw exception_range(libdar::tools_printf("Unexpected class_id in json data, found %s while expecting %s", class_id.c_str(), myclass_id)); if(version > format_version) throw exception_range(libdar::tools_printf("Json format version too hight for %s, upgrade your webdar software", myclass_id)); ignore_events = true; try { guichet_entrep.load_json(config.at(jlabel_entrep)); src_crypto_algo.set_selected_id(config.at(jlabel_crypto_algo)); src_crypto_pass.set_value(config.at(jlabel_crypto_pass)); src_crypto_size.set_value_as_infinint(libdar::deci(config.at(jlabel_crypto_size)).computer()); src_ignore_sig_failure.set_value_as_bool(config.at(jlabel_ignore_sig_failure)); src_execute.set_value(config.at(jlabel_execute)); src_slice_min_digits.set_value_as_bool(config.at(jlabel_slice_min_digits)); info_details.set_value_as_bool(config.at(jlabel_info_details)); lax.set_value_as_bool(config.at(jlabel_lax)); sequential_read.set_value_as_bool(config.at(jlabel_seq_read)); force_first_slice.set_value_as_bool(config.at(jlabel_force_first_slice)); multi_thread_crypto.set_value_as_int(config.at(jlabel_thread_crypto)); multi_thread_compress.set_value_as_bool(config.at(jlabel_thread_compress)); ref_use_external_catalogue.set_value_as_bool(config.at(jlabel_ref_used)); if(ref_use_external_catalogue.get_value_as_bool()) { guichet_ref_entrep.load_json(config.at(jlabel_ref_entrep)); ref_path.set_value(config.at(jlabel_ref_path)); ref_crypto_algo.set_selected_id(config.at(jlabel_ref_crypto_algo)); ref_crypto_pass.set_value(config.at(jlabel_ref_crypto_pass)); ref_crypto_size.set_value_as_infinint(libdar::deci(config.at(jlabel_ref_crypto_size)).computer()); ref_execute.set_value(config.at(jlabel_ref_execute)); ref_slice_min_digits.set_value(config.at(jlabel_ref_slice_min_digits)); } else { set_defaults_for_ref(); guichet_ref_entrep.clear_json(); } } catch(...) { ignore_events = false; throw; } ignore_events = false; trigger_changed(); // we can trigger events within the load_json() call // but must prevent those later triggered from inherited_run() from inherited_get_body_part() update_from_load_json = true; } catch(json::exception & e) { throw exception_json(libdar::tools_printf("Error loading %s config", myclass_id), e); } } json html_options_read::save_json() const { json config; config[jlabel_entrep] = guichet_entrep.save_json(); config[jlabel_crypto_algo] = src_crypto_algo.get_selected_id(); config[jlabel_crypto_pass] = src_crypto_pass.get_value(); config[jlabel_crypto_size] = libdar::deci(src_crypto_size.get_value_as_infinint()).human(); config[jlabel_ignore_sig_failure] = src_ignore_sig_failure.get_value_as_bool(); config[jlabel_execute] = src_execute.get_value(); config[jlabel_slice_min_digits] = src_slice_min_digits.get_value_as_bool(); config[jlabel_info_details] = info_details.get_value_as_bool(); config[jlabel_lax] = lax.get_value_as_bool(); config[jlabel_seq_read] = sequential_read.get_value_as_bool(); config[jlabel_force_first_slice] = force_first_slice.get_value_as_bool(); config[jlabel_thread_crypto] = multi_thread_crypto.get_value_as_int(); config[jlabel_thread_compress] = multi_thread_compress.get_value_as_bool(); config[jlabel_ref_used] = ref_use_external_catalogue.get_value_as_bool(); if(ref_use_external_catalogue.get_value_as_bool()) { config[jlabel_ref_entrep] = guichet_ref_entrep.save_json(); config[jlabel_ref_path] = ref_path.get_value(); config[jlabel_ref_crypto_algo] = ref_crypto_algo.get_selected_id(); config[jlabel_ref_crypto_pass] = ref_crypto_pass.get_value(); config[jlabel_ref_crypto_size] = libdar::deci(ref_crypto_size.get_value_as_infinint()).human(); config[jlabel_ref_execute] = ref_execute.get_value(); config[jlabel_ref_slice_min_digits] = ref_slice_min_digits.get_value(); } return wrap_config_with_json_header(format_version, myclass_id, config); } void html_options_read::clear_json() { ignore_events = true; try { set_defaults(); } catch(...) { ignore_events = false; throw; } ignore_events = false; trigger_changed(); } bibliotheque::using_set html_options_read::get_using_set() const { bibliotheque::using_set ret; subconfig_add_to(ret, guichet_entrep.get_using_set()); subconfig_add_to(ret, guichet_ref_entrep.get_using_set()); return ret; } void html_options_read::on_event(const string & event_name) { if(event_name == entrepot_has_changed) { act(entrepot_has_changed); trigger_changed(); } else if(event_name == ref_entrepot_has_changed) { if(! updating_entrepot) need_ref_entrepot_update = true; // this is necessary to avoid loop where // the entrepot update in inherited_run // triggers a ref_entrepot_has_changed // event. } else if(event_name == html_crypto_algo::changed || event_name == html_form_input::changed || event_name == html_form_input_unit::changed || event_name == html_form_input_file::changed_entrepot) { if(ref_use_external_catalogue.get_value_as_bool()) { ref_path.set_visible(true); ref_crypto_algo.set_visible(true); ref_execute.set_visible(true); ref_slice_min_digits.set_visible(true); ref_crypto_pass.set_visible(true); ref_crypto_size.set_visible(true); deroule.section_set_visible(sect_ref_entrep, true); if(sequential_read.get_value_as_bool()) { force_first_slice.set_value_as_bool(true); force_first_slice.set_enabled(false); } else force_first_slice.set_enabled(true); } else { ref_path.set_visible(false); ref_crypto_algo.set_visible(false); ref_execute.set_visible(false); ref_slice_min_digits.set_visible(false); ref_crypto_pass.set_visible(false); ref_crypto_size.set_visible(false); deroule.section_set_visible(sect_ref_entrep, false); force_first_slice.set_value_as_bool(sequential_read.get_value_as_bool()); force_first_slice.set_enabled(false); ignore_events = true; try { guichet_ref_entrep.clear_json(); // avoiding dependency of a repo hidden to the user } catch(...) { ignore_events = false; throw; } ignore_events = false; } if(! update_from_load_json) // no need to call my_body_part_has_changed() // because changed done in on_event concern // body_builder objects we have adopted trigger_changed(); else update_from_load_json = false; } else if(event_name == html_form_input_file::changed_event) { if(! ref_path.get_min_digits().empty()) ref_slice_min_digits.set_value(ref_path.get_min_digits()); } else if(event_name == html_entrepot_landing::landing_path_only_changed) act(landing_path_changed); // propagate the event else if(event_name == ref_entrepot_landing_path_changed) { ref_path.set_value(ref_entrep->get_landing_path()); } else if(event_name == html_libdar_running_popup::libdar_has_finished) { updating_entrepot = false; } else throw WEBDAR_BUG; // unexpected event } void html_options_read::set_to_webdar_defaults() { set_defaults(); // libdar defaults guichet_entrep.load_from_bibliotheque(bibliotheque::default_config_name); info_details.set_value_as_bool(true); multi_thread_crypto.set_value_as_int(2); multi_thread_compress.set_value_as_int(4); guichet_ref_entrep.load_from_bibliotheque(bibliotheque::default_config_name); } string html_options_read::inherited_get_body_part(const chemin & path, const request & req) { if(need_ref_entrepot_update && ! updating_entrepot) { updating_entrepot = true; update_ref_entrepot(); } return get_body_part_from_all_children(path, req); } void html_options_read::new_css_library_available() { unique_ptr<css_library> & csslib = lookup_css_library(); if(!csslib) throw WEBDAR_BUG; webdar_css_style::update_library(*csslib); } void html_options_read::inherited_run() { // below is a shortcut to the webui owned by ref_webui shared_ptr<html_web_user_interaction> localui = ref_webui.get_html_user_interaction(); if(!localui) throw WEBDAR_BUG; ref_path.set_entrepot(ref_entrep->get_entrepot(localui)); } void html_options_read::signaled_inherited_cancel() { pthread_t libdar_tid; libdar::thread_cancellation th; if(is_running(libdar_tid)) th.cancel(libdar_tid, true, 0); } void html_options_read::update_ref_entrepot() { shared_ptr<html_web_user_interaction> localui = ref_webui.get_html_user_interaction(); if(!localui) throw WEBDAR_BUG; localui->clear(); localui->auto_hide(true, true); if(is_running()) throw WEBDAR_BUG; ref_webui.set_visible(true); need_ref_entrepot_update = false; ref_webui.run_and_control_thread(this); } void html_options_read::set_defaults() { libdar::archive_options_read defaults; guichet_entrep.clear_json(); src_crypto_algo.set_value(defaults.get_crypto_algo()); src_crypto_pass.set_value(""); src_crypto_size.set_value_as_infinint(defaults.get_crypto_size()); src_execute.set_value(defaults.get_execute()); src_slice_min_digits.set_value(webdar_tools_convert_to_string(defaults.get_slice_min_digits())); lax.set_value_as_bool(defaults.get_lax()); sequential_read.set_value_as_bool(defaults.get_sequential_read()); force_first_slice.set_value_as_bool(defaults.get_force_first_slice()); set_defaults_for_ref(); } void html_options_read::set_defaults_for_ref() { libdar::archive_options_read defaults; guichet_ref_entrep.clear_json(); ref_use_external_catalogue.set_value_as_bool(defaults.is_external_catalogue_set()); if(ref_use_external_catalogue.get_value_as_bool()) ref_path.set_value(defaults.get_ref_path().display()); else ref_path.set_value(""); ref_crypto_algo.set_value(defaults.get_ref_crypto_algo()); ref_crypto_pass.set_value(""); ref_crypto_size.set_value_as_infinint(defaults.get_ref_crypto_size()); ref_execute.set_value(defaults.get_ref_execute()); ref_slice_min_digits.set_value(webdar_tools_convert_to_string(defaults.get_ref_slice_min_digits())); } void html_options_read::trigger_changed() { if(! ignore_events) act(changed); } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������webdar-1.0.0/src/webdar_css_style.hpp���������������������������������������������������������������0000644�0001750�0001752�00000013201�14773727251�014547� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*********************************************************************/ // webdar - a web server and interface program to libdar // Copyright (C) 2013-2025 Denis Corbin // // This file is part of Webdar // // Webdar is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // Webdar is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Webdar. If not, see <http://www.gnu.org/licenses/> // //---- // to contact the author: dar.linux@free.fr /*********************************************************************/ #ifndef WEBDAR_CSS_STYLE_HPP #define WEBDAR_CSS_STYLE_HPP // C system header files #include "my_config.h" extern "C" { } // C++ system header files // webdar headers #include "css_library.hpp" /// the webdar_css_style namespace defines a set of global css objets and some routines to use them namespace webdar_css_style { /// update a css_library with all css definitions of this webdar_css_style module extern void update_library(css_library & ref); constexpr const char* text_grey = "wcs_tg"; constexpr const char* text_bold = "wcs_tb"; constexpr const char* text_shadow_dark = "wcs_tsd"; constexpr const char* text_shadow_bright = "wcs_tsb"; constexpr const char* text_color_normal = "wcs_cn"; constexpr const char* text_color_red = "wcs_cr"; constexpr const char* text_color_green = "wcs_cg"; constexpr const char* text_top_right = "wcs_ttr"; constexpr const char* text_top_center = "wcs_tc"; constexpr const char* text_right = "wcs_tr"; constexpr const char* float_left = "wcs_fll"; constexpr const char* float_right = "wcs_flr"; constexpr const char* float_flush = "wcs_flf"; constexpr const char* spacing_vertical = "wcs_spcv"; constexpr const char* spacing_horizontal = "wcs_spch"; constexpr const char* width_100vw = "wcs_w100"; constexpr const char* width_100vw_3em = "wcs_w100_3em"; // 100% - 3em / to align html_form_input with html_form_input_file constexpr const char* width_100vw_8em = "wcs_w100_8em"; // 100% - 3em / to align html_form_input with html_form_input_unit constexpr const char* width_100vw_5em = "wcs_w100_5em"; // 100% - 3em / to align html_form_input_file with html_form_input_unit constexpr const char* width_80vw = "wcs_w80"; constexpr const char* width_60vw = "wcs_w60"; constexpr const char* red_border = "wcs_red_border"; constexpr const char* indent = "wcs_indent"; /// obtain the css_class object corresponding to the given name /// \param[in] name must correspond to an existing class name defined above (text_grey, text_bold,...) /// \exception exception throw if the povided name does not exist const css_class & get_css_class(const std::string & name); // class used by the *_button templates below (should not be used directly, it is publicly // available because template body need to be stored in header file") constexpr const char* width_8em = "wcs_w8em"; constexpr const char* width_full = "fullwidth"; constexpr const char* btn_off = "wcs_btn_off"; constexpr const char* btn_small = "wcs_btn_small"; constexpr const char* btn_on = "wcs_btn_on"; constexpr const char* btn_void = "wcs_btn_void"; constexpr const char* btn_grey = "wcs_btn_grey"; constexpr const char* url_selected = "wcs_url_selected"; constexpr const char* url_normal = "wcs_url_normal"; constexpr const char* url_void = "wcs_url_void"; constexpr const char* url_grey = "wcs_url_grey"; /// apply to the given button the css_classe names defined by update_library to get a normal button style template <class T> void normal_button(T & obj, bool fullwidth = false) { obj.clear_css_classes(); obj.add_css_class(btn_off); obj.url_clear_css_classes(); obj.url_add_css_class(url_normal); if(!fullwidth) obj.add_css_class(width_8em); } template <class T> void small_button(T & obj) { obj.clear_css_classes(); obj.add_css_class(btn_small); obj.url_clear_css_classes(); obj.url_add_css_class(url_normal); } /// apply to the given button the css_classe names defined by update_library to get an active button style template <class T> void active_button(T & obj, bool fullwidth = false) { obj.clear_css_classes(); obj.add_css_class(btn_on); obj.url_clear_css_classes(); obj.url_add_css_class(url_selected); if(!fullwidth) obj.add_css_class(width_8em); } /// apply to the given button the css_classe names defined by update_library to get an void/invisible button style template <class T> void void_button(T & obj, bool fullwidth = false) { obj.clear_css_classes(); obj.add_css_class(btn_void); obj.url_clear_css_classes(); obj.url_add_css_class(url_void); if(!fullwidth) obj.add_css_class(width_8em); } template <class T> void grey_button(T & obj, bool fullwidth = false) { obj.clear_css_classes(); obj.add_css_class(btn_grey); obj.url_clear_css_classes(); obj.url_add_css_class(url_grey); if(!fullwidth) obj.add_css_class(width_8em); } } // namespace end #endif �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������webdar-1.0.0/src/html_form_radio.hpp����������������������������������������������������������������0000644�0001750�0001752�00000013707�15035005127�014352� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*********************************************************************/ // webdar - a web server and interface program to libdar // Copyright (C) 2013-2025 Denis Corbin // // This file is part of Webdar // // Webdar is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // Webdar is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Webdar. If not, see <http://www.gnu.org/licenses/> // //---- // to contact the author: dar.linux@free.fr /*********************************************************************/ #ifndef HTML_FORM_RADIO_HPP #define HTML_FORM_RADIO_HPP // C system header files #include "my_config.h" extern "C" { } // C++ system header files #include <vector> // webdar headers #include "body_builder.hpp" #include "events.hpp" #include "html_label.hpp" /// class html_form_radio implements HTML "input" of type "radio" /// these html_form_field objects are set calling add_choice(), clear() /// set_selected() methods and provide in return the menu selected by /// the user using get_selected_id() or get_selected_num() /// These object provide an event "changed" that is triggered when user /// change the selection of the radio button set. This change is only /// visible to the application once the user validated the change by clicking /// the button of the parent or grand-parent html_form. class html_form_radio : public body_builder, public events { public: static const std::string changed; /// default event name for all object of this class html_form_radio(); html_form_radio(const html_form_radio & ref) = default; html_form_radio(html_form_radio && ref) noexcept = delete; html_form_radio & operator = (const html_form_radio & ref) = default; html_form_radio & operator = (html_form_radio && ref) noexcept = delete; ~html_form_radio() = default; void add_choice(const std::string & id, const std::string & label); void clear() { choices.clear(); unset_selected(); emphase = -1; my_body_part_has_changed(); }; /// set the radio buttons to item given in argument /// \note index zero is the first choice void set_selected_num(unsigned int x); /// set the radio buttons to the item id given in argument /// \note set_selected() and set_selected_id() do the same /// thing but using different way to design the radio button /// to select /// \note if provided id is not valid a bug is reported void set_selected_id(const std::string & id); /// same as set_selected_id but issue a friendly warning build with jlabel for user understanding void set_selected_id_with_warning(const std::string & id, const std::string & jlabel); /// unselect all radio buttons void unset_selected(); /// returns whether a radio button is selected bool is_selected() const { return selected < choices.size(); }; /// obtain the index (starts at zero) of the selected radio button /// \note if nothing is selected the index passed the last valid /// index is returned unsigned int get_selected_num() const { return selected; }; /// obtain the id of the selected radio button /// \note if no item is selected exception is thrown (BUG). /// first check with is_selected() before calling this method const std::string & get_selected_id() const; /// index of the item to display in bold void set_emphase(unsigned int num); /// disable emphasing a particular item (default behavior) void set_emphase() { emphase = -1; my_body_part_has_changed(); }; /// the number of currently available options const unsigned int num_choices() const { return choices.size(); }; /// change the default value for the "changed" event void set_change_event_name(const std::string & name); /// set whether the HTML control is enable or disabled void set_enabled(bool val); /// set tooltip for item at the given index (index starts at zero) /// \note index must stay less than the value returned by num_choices() void set_tooltip(unsigned int index, const std::string & msg); protected: /// inherited from body_builder virtual std::string inherited_get_body_part(const chemin & path, const request & req) override; /// inherited from body_builder virtual void css_classes_have_changed() override; /// inherited from html_div/body_builder virtual void new_css_library_available() override; /// used to record parameters of each option of the radio button struct record { std::string id; html_label label; record(const std::string x_id, const std::string & x_label): id(x_id), label(x_label) {}; }; const std::vector<record> & get_choices() const { return choices; }; void update_field_from_request(const request & req); /// unlock update_field_from_request() /// \note when a set_select() call is invoked to avoid /// a POST request to overwrite at the time of inherited_get_body_part(), /// update_field_from_request() is ignored and the POST /// request is not taken into account, until an call to /// unlock_update_field_from_request() is done. This should /// be done at the end of inherited_get_body_part() void unlock_update_field_from_request(); private: bool enabled; ///< whether the control is enabled or disabled std::vector<record> choices; unsigned int selected; bool value_set; ///< avoid POST request to overwrite set_seleected*() int emphase; ///< item displayed in bold, unless emphase < 0 std::string modif_changed; ///< name of the event "changed" to use, empty string for the default void my_act(); }; #endif ���������������������������������������������������������webdar-1.0.0/src/html_archive_create.cpp������������������������������������������������������������0000644�0001750�0001752�00000015035�15036513517�015174� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*********************************************************************/ // webdar - a web server and interface program to libdar // Copyright (C) 2013-2025 Denis Corbin // // This file is part of Webdar // // Webdar is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // Webdar is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Webdar. If not, see <http://www.gnu.org/licenses/> // //---- // to contact the author: dar.linux@free.fr /*********************************************************************/ // C system header files #include "my_config.h" extern "C" { } // C++ system header files // webdar headers #include "webdar_css_style.hpp" #include "environment.hpp" #include "tooltip_messages.hpp" // #include "html_archive_create.hpp" using namespace std; html_archive_create::html_archive_create(): form("Update"), fs(""), fs_root("Directory to take as root for the backup", global_envir.get_value_with_default("HOME", "/"), "", webdar_css_style::width_100vw, "Select root directory to backup..."), sauv_path("Where to create the backup", "/", "", webdar_css_style::width_100vw, "Select path where to create the backup..."), basename("Backup basename", html_form_input::text, "", "", webdar_css_style::width_100vw_3em), need_entrepot_update(false) { static const char* sect_archive = "archive"; static const char* sect_options = "options"; #ifdef LIBTHREADAR_STACK_FEATURE set_stack_size(DEFAULT_STACK_SIZE); #endif options.reset(new (nothrow) html_options_create()); if(! options) throw exception_memory(); deroule.add_section(sect_archive, "Creation Parameters"); deroule.add_section(sect_options, "Creation Options"); deroule.set_active_section(0); fs_root.set_select_mode(html_form_input_file::select_dir); fs_root.set_can_create_dir(false); fs_root.set_change_event_name(fs_root_change_event); sauv_path.set_select_mode(html_form_input_file::select_dir); sauv_path.set_can_create_dir(true); if(repoxfer.get_html_user_interaction()) repoxfer.get_html_user_interaction()->auto_hide(true, false); else throw WEBDAR_BUG; options->set_fs_root(fs_root.get_value()); // will be kept updat to date by mean on events // adoption tree fs.adopt(&fs_root); fs.adopt(&sauv_path); fs.adopt(&basename); form.adopt(&fs); deroule.adopt_in_section(sect_archive, &form); deroule.adopt_in_section(sect_options, &guichet_options); adopt(&deroule); adopt(&repoxfer); // events fs_root.record_actor_on_event(this, fs_root_change_event); options->record_actor_on_event(this, html_options_create::entrepot_changed); options->record_actor_on_event(this, html_options_create::landing_path_changed); repoxfer.record_actor_on_event(this, html_libdar_running_popup::libdar_has_finished); basename.record_actor_on_event(this, html_form_input::changed); // visibility repoxfer.set_visible(false); // css stuff webdar_css_style::normal_button(deroule, true); // tooltip fs_root.set_tooltip(TOOLTIP_HAC_FS_ROOT); sauv_path.set_tooltip(TOOLTIP_HAC_SAUV_PATH); basename.set_tooltip(TOOLTIP_HAC_BASENAME); } void html_archive_create::set_biblio(const shared_ptr<bibliotheque> & ptr) { options->set_biblio(ptr); guichet_options.set_child(ptr, bibliotheque::confsave, options, false); if(ptr->has_config(bibliotheque::confsave, bibliotheque::default_config_name)) { try { guichet_options.load_from_bibliotheque(bibliotheque::default_config_name); } catch(...) { // ignore exception here, as this is called from constructor // of the session components and nothing is yet available to // display execeptions messages (due to old config in configuration file // or corrupted configuration file we read from) // The consequence is that we have a cleared configuration: guichet_options.clear_json(); } } } const string & html_archive_create::get_archive_basename() const { if(basename.get_value().empty()) { const_cast<html_archive_create*>(this)->basename.box_set_css_class(webdar_css_style::red_border); throw exception_range("Archive basename cannot be an empty string"); } return basename.get_value(); } void html_archive_create::on_event(const string & event_name) { if(event_name == html_options_create::entrepot_changed) { need_entrepot_update = true; } else if(event_name == html_libdar_running_popup::libdar_has_finished) { repoxfer.set_visible(false); } else if(event_name == fs_root_change_event) { options->set_fs_root(fs_root.get_value()); } else if(event_name == html_options_create::landing_path_changed) { update_landing_path(); } else if(event_name == html_form_input::changed) { if(basename.get_value().empty()) basename.box_set_css_class(webdar_css_style::red_border); else basename.box_set_css_class(""); } else throw WEBDAR_BUG; } string html_archive_create::inherited_get_body_part(const chemin & path, const request & req) { if(need_entrepot_update) update_entrepot(); return get_body_part_from_all_children(path, req); } void html_archive_create::new_css_library_available() { unique_ptr<css_library> & csslib = lookup_css_library(); if(!csslib) throw WEBDAR_BUG; webdar_css_style::update_library(*csslib); } void html_archive_create::inherited_run() { shared_ptr<html_web_user_interaction> ptr(repoxfer.get_html_user_interaction()); if(!ptr) throw WEBDAR_BUG; sauv_path.set_entrepot(options->get_entrepot(ptr)); } void html_archive_create::signaled_inherited_cancel() { pthread_t libdar_tid; libdar::thread_cancellation th; if(is_running(libdar_tid)) th.cancel(libdar_tid, true, 0); } void html_archive_create::update_entrepot() { if(is_running()) throw WEBDAR_BUG; repoxfer.set_visible(true); need_entrepot_update = false; repoxfer.run_and_control_thread(this); } void html_archive_create::update_landing_path() { if(! options) throw WEBDAR_BUG; sauv_path.set_value(options->get_landing_path()); } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������webdar-1.0.0/src/responder.hpp����������������������������������������������������������������������0000644�0001750�0001752�00000004520�14773727252�013221� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*********************************************************************/ // webdar - a web server and interface program to libdar // Copyright (C) 2013-2025 Denis Corbin // // This file is part of Webdar // // Webdar is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // Webdar is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Webdar. If not, see <http://www.gnu.org/licenses/> // //---- // to contact the author: dar.linux@free.fr /*********************************************************************/ #ifndef RESPONDER_HPP #define RESPONDER_HPP #include "my_config.h" // C++ system header files #include <string> #include <vector> #include <map> // webdar headers #include "uri.hpp" #include "webdar_tools.hpp" #include "exceptions.hpp" #include "request.hpp" #include "answer.hpp" #include "chemin.hpp" ///////////////////////////////////////////////////////////////////////////////////// /// pure virtual class, base class for all classes that can generate an answer to a request class responder { public: responder() = default; responder(const responder & ref) = default; responder(responder && ref) noexcept = default; responder & operator = (const responder & ref) = default; responder & operator = (responder && ref) noexcept = default; virtual ~responder() {}; /// used for body_builder object for they have a proper prefix in path void set_prefix(const chemin & chem) { prefix = chem; prefix_has_changed(); }; /// get the recorded URI path prefix for body_builder root hierarchy const chemin & get_prefix() const { return prefix; }; /// provides a standard mean for inherited class to provide answer to requests virtual answer give_answer(const request & req) = 0; protected: /// hook for inherited class, when the body builder object had its prefix changed virtual void prefix_has_changed() {}; private: chemin prefix; }; #endif ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������webdar-1.0.0/src/html_libdar_running_popup.hpp������������������������������������������������������0000644�0001750�0001752�00000006446�14773727252�016475� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*********************************************************************/ // webdar - a web server and interface program to libdar // Copyright (C) 2013-2025 Denis Corbin // // This file is part of Webdar // // Webdar is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // Webdar is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Webdar. If not, see <http://www.gnu.org/licenses/> // //---- // to contact the author: dar.linux@free.fr /*********************************************************************/ #ifndef HTML_LIBDAR_RUNNING_POPUP_HPP #define HTML_LIBDAR_RUNNING_POPUP_HPP // C system header files #include "my_config.h" extern "C" { } // C++ system header files #include <libthreadar/libthreadar.hpp> // webdar headers #include "html_popup.hpp" #include "events.hpp" #include "actor.hpp" #include "html_web_user_interaction.hpp" /// html_libdar_running_popup wraps up an html_web_user_interaction in a html_popup component /// also handle page title and for that need to know the session name class html_libdar_running_popup : public html_popup, public events, public actor { public: // this class generates the following events: static const std::string libdar_has_finished; ///< libdar execution has ended and user has acknoledged it // constructor html_libdar_running_popup(); html_libdar_running_popup(const html_libdar_running_popup & ref) = delete; html_libdar_running_popup(html_libdar_running_popup && ref) noexcept = delete; html_libdar_running_popup & operator = (const html_libdar_running_popup & ref) = delete; html_libdar_running_popup & operator = (html_libdar_running_popup && ref) noexcept = delete; ~html_libdar_running_popup() = default; /// inherited from actor virtual void on_event(const std::string & event_name) override; /// propagate request to web_ui std::shared_ptr<html_web_user_interaction> & get_html_user_interaction() { return web_ui; }; /// propagate request to web_ui void run_and_control_thread(libthreadar::thread* arg) { web_ui->run_and_control_thread(arg); }; /// propagate request to web_ui void join_controlled_thread() { web_ui->join_controlled_thread(); }; /// whether a libdar thread is running under "this" management bool is_libdar_running() const { return web_ui->is_libdar_running(); }; /// whether libdar thread has been aborted (to be checked by the caller upon libdar_has_finished event) bool has_libdar_been_aborted() const { return web_ui->has_libdar_been_aborted(); }; protected: /// inherited from body_builder virtual std::string inherited_get_body_part(const chemin & path, const request & req) override; /// inherited from body_builder virtual void my_visibility_has_changed() override; private: bool enable_refresh; ///< refresh mode status std::shared_ptr<html_web_user_interaction> web_ui; }; #endif ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������webdar-1.0.0/src/archive_merge.cpp������������������������������������������������������������������0000644�0001750�0001752�00000007352�15030770721�014003� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*********************************************************************/ // webdar - a web server and interface program to libdar // Copyright (C) 2013-2025 Denis Corbin // // This file is part of Webdar // // Webdar is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // Webdar is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Webdar. If not, see <http://www.gnu.org/licenses/> // //---- // to contact the author: dar.linux@free.fr /*********************************************************************/ // C system header files #include "my_config.h" extern "C" { } // C++ system header files // webdar headers #include "tokens.hpp" // #include "archive_merge.hpp" using namespace std; archive_merge::archive_merge(): param(nullptr) { #ifdef LIBTHREADAR_STACK_FEATURE set_stack_size(DEFAULT_STACK_SIZE); #endif } void archive_merge::inherited_run() { try { if(!ui && ! ui->get_user_interaction()) throw WEBDAR_BUG; ui->clear(); ui->auto_hide(false, false); if(param == nullptr) throw WEBDAR_BUG; libdar::path ref_path(param->get_archive_path(), true); string ref_basename(param->get_archive_basename()); libdar::archive_options_read ref_opt(param->get_read_options(ui)); libdar::path archpath(param->get_merge_path()); string basename(param->get_merge_basename()); libdar::archive_options_merge opt(param->get_merging_options(ui)); libdar::statistics* progressive_report(ui->get_statistics().get_libdar_statistics()); shared_ptr<libdar::archive> ref = nullptr; // we must open the archive of reference // and obtain an libdar::archive object to // be added to the options passed to the merge // constructor ui->get_user_interaction()->message("--- Opening the archive of reference..."); cancellation_checkpoint(); ref.reset(new (nothrow) libdar::archive(ui->get_user_interaction(), ref_path, ref_basename, EXTENSION, ref_opt)); if(!ref) throw exception_memory(); ui->get_user_interaction()->message("--- The archive of reference is now opened"); // now we can merge the archive // resetting counters and logs ui->get_statistics().clear_labels(); ui->get_statistics().set_treated_label("item(s) treated"); ui->get_statistics().set_hard_links_label("hard link(s) treated"); ui->get_statistics().set_ignored_label("item(s) ignored (excluded by filters)"); ui->get_statistics().set_deleted_label("item(s) recorded as deleted"); ui->get_statistics().set_ea_treated_label("item(s) with Extended Attributes"); ui->get_statistics().set_total_label("item(s) considered"); ui->get_user_interaction()->message("--- Proceeding to the merging operation..."); cancellation_checkpoint(); libdar::archive(ui->get_user_interaction(), archpath, ref, basename, EXTENSION, opt, progressive_report); // as the object being local to the local block // it will be destroyed automatically (and the archive // will be closed) once we will have exit this local block ui->get_user_interaction()->message("--- Merging operation completed"); } catch(libdar::Egeneric & e) { throw exception_libcall(e); } } void archive_merge::signaled_inherited_cancel() { pthread_t libdar_tid; libdar::thread_cancellation th; if(is_running(libdar_tid)) th.cancel(libdar_tid, true, 0); } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������webdar-1.0.0/src/html_double_button.hpp�������������������������������������������������������������0000644�0001750�0001752�00000011036�15036420514�015071� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*********************************************************************/ // webdar - a web server and interface program to libdar // Copyright (C) 2013-2025 Denis Corbin // // This file is part of Webdar // // Webdar is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // Webdar is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Webdar. If not, see <http://www.gnu.org/licenses/> // //---- // to contact the author: dar.linux@free.fr /*********************************************************************/ #ifndef HTML_DOUBLE_BUTTON_HPP #define HTML_DOUBLE_BUTTON_HPP // C system header files #include "my_config.h" extern "C" { } // C++ system header files #include <string> // webdar headers #include "events.hpp" #include "actor.hpp" #include "html_static_url.hpp" #include "html_div.hpp" #include "css_class_group.hpp" #include "html_button.hpp" /// html_button equivalent with changing path to trigger the button event class html_double_button : public body_builder, public events, public actor { public: html_double_button(const std::string & label, const std::string & x_event_name); html_double_button(const html_double_button & ref) = delete; html_double_button(html_double_button && ref) noexcept = delete; html_double_button & operator = (const html_double_button & ref) = delete; html_double_button & operator = (html_double_button && ref) noexcept = delete; ~html_double_button() = default; /// the inherited add_css_class() applies to the html_div around, this one to the url inside void url_add_css_class(const std::string & name) { one.url_add_css_class(name); two.url_add_css_class(name); }; /// add a several CSS classes at once for the url inside the double_button void url_add_css_class(const css_class_group & cg) { one.url_add_css_class(cg); two.url_add_css_class(cg); }; /// the inherited add_css_class() applies to the html_div around, this one to the url inside void url_remove_css_class(const std::string & name) { one.url_remove_css_class(name); two.url_remove_css_class(name); }; /// the inherited add_css_class() applies to the html_div around, this one to the url inside void url_clear_css_classes() { one.url_clear_css_classes(); two.url_clear_css_classes(); }; /// the label is the text show for the URL void change_label(const std::string & label) { one.change_label(label); two.change_label(label); }; std::string get_label() const { return one.get_label(); }; /// get the URL that will lead this double_button to be clicked std::string get_url() const { return one.get_url(); }; /// change the name of the event generating by a click on the html_double_button /// all registered actor are kept on the renamed event void change_event_name_to(const std::string & x_event_name) { one.change_event_name_to(x_event_name); two.change_event_name_to(x_event_name); }; /// get the name of the event generated by this object const std::string & get_event_name() const { return one.get_event_name(); }; /// whether to download or display the URL target void set_download(bool mode) { one.set_download(mode); two.set_download(mode); }; /// change the filename to create on client/browser side if download is set to true /// \note providing a empty string get to the default behavior (no filename specified in URL) void set_filename(const std::string & name) { one.set_filename(name); two.set_filename(name); }; /// inherited from actor virtual void on_event(const std::string & event_name) override; /// inherited from body_builder virtual void bind_to_anchor(const std::string & val) override { one.bind_to_anchor(val); two.bind_to_anchor(val); }; protected: /// inherited from body_builder virtual std::string inherited_get_body_part(const chemin & path, const request & req) override; /// inheroted from body_builder virtual void css_classes_have_changed() override; private: static const std::string event_one; static const std::string event_two; std::string my_event_name; html_button one; html_button two; void swap(bool show_one); }; #endif ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������webdar-1.0.0/src/archive_isolate.cpp����������������������������������������������������������������0000644�0001750�0001752�00000005557�15030770721�014351� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*********************************************************************/ // webdar - a web server and interface program to libdar // Copyright (C) 2013-2025 Denis Corbin // // This file is part of Webdar // // Webdar is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // Webdar is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Webdar. If not, see <http://www.gnu.org/licenses/> // //---- // to contact the author: dar.linux@free.fr /*********************************************************************/ // C system header files #include "my_config.h" extern "C" { } // C++ system header files // webdar headers #include "tokens.hpp" // #include "archive_isolate.hpp" using namespace std; archive_isolate::archive_isolate(): param(nullptr) { #ifdef LIBTHREADAR_STACK_FEATURE set_stack_size(DEFAULT_STACK_SIZE); #endif } void archive_isolate::inherited_run() { try { shared_ptr<libdar::archive> source; if(!ui && ! ui->get_user_interaction()) throw WEBDAR_BUG; ui->clear(); ui->auto_hide(false, false); if(param == nullptr) throw WEBDAR_BUG; libdar::path archpath(param->get_archive_path(), true); string basename(param->get_archive_basename()); libdar::archive_options_read read_opt(param->get_read_options(ui)); libdar::path dest_path(param->get_isolating_path(), true); string dest_basename(param->get_isolating_basename()); libdar::archive_options_isolate isol_opt(param->get_isolating_options(ui)); // first creating the archive object to isolate cancellation_checkpoint(); source.reset(new (nothrow) libdar::archive(ui->get_user_interaction(), archpath, basename, EXTENSION, read_opt)); if(!source) throw exception_memory(); // resetting counters and logs ui->get_statistics().clear_counters(); ui->get_statistics().clear_labels(); // now we can isolate the archive cancellation_checkpoint(); source->op_isolate(dest_path, dest_basename, EXTENSION, isol_opt); // as the ref object being local to the local block // it will be destroyed automatically (and the archive // will be closed) once we will have exit this local block } catch(libdar::Egeneric & e) { throw exception_libcall(e); } } void archive_isolate::signaled_inherited_cancel() { pthread_t libdar_tid; libdar::thread_cancellation th; if(is_running(libdar_tid)) th.cancel(libdar_tid, true, 0); } �������������������������������������������������������������������������������������������������������������������������������������������������webdar-1.0.0/src/Makefile.in������������������������������������������������������������������������0000644�0001750�0001752�00002604566�15045134062�012556� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Makefile.in generated by automake 1.16.5 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2021 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ ######################################################################## # webdar - a web server and interface program to libdar # Copyright (C) 2013-2025 Denis Corbin # # This file is part of Webdar # # Webdar is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # Webdar is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with Webdar. If not, see <http://www.gnu.org/licenses/> # #---- # to contact the author: dar.linux@free.fr ######################################################################## # # conditional part webdar_static # VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ bin_PROGRAMS = webdar$(EXEEXT) $(am__EXEEXT_1) noinst_PROGRAMS = static_object_builder$(EXEEXT) subdir = src ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/gettext.m4 \ $(top_srcdir)/m4/host-cpu-c-abi.m4 $(top_srcdir)/m4/iconv.m4 \ $(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/lib-ld.m4 \ $(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \ $(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/po.m4 \ $(top_srcdir)/m4/progtest.m4 $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(dist_noinst_DATA) \ $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = @BUILD_WEBDAR_STATIC_TRUE@am__EXEEXT_1 = webdar_static$(EXEEXT) am__installdirs = "$(DESTDIR)$(bindir)" PROGRAMS = $(bin_PROGRAMS) $(noinst_PROGRAMS) am_static_object_builder_OBJECTS = static_object_builder.$(OBJEXT) \ base64.$(OBJEXT) static_object_builder_OBJECTS = $(am_static_object_builder_OBJECTS) static_object_builder_LDADD = $(LDADD) static_object_builder_DEPENDENCIES = AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent am__v_lt_1 = am__objects_1 = webdar-central_report.$(OBJEXT) \ webdar-proto_connexion.$(OBJEXT) webdar-connexion.$(OBJEXT) \ webdar-ssl_connexion.$(OBJEXT) webdar-ssl_context.$(OBJEXT) \ webdar-exceptions.$(OBJEXT) webdar-listener.$(OBJEXT) \ webdar-parser.$(OBJEXT) webdar-webdar_tools.$(OBJEXT) \ webdar-server.$(OBJEXT) webdar-uri.$(OBJEXT) \ webdar-session.$(OBJEXT) webdar-date.$(OBJEXT) \ webdar-request.$(OBJEXT) webdar-answer.$(OBJEXT) \ webdar-tokens.$(OBJEXT) webdar-base64.$(OBJEXT) \ webdar-challenge.$(OBJEXT) webdar-choose.$(OBJEXT) \ webdar-css.$(OBJEXT) webdar-css_library.$(OBJEXT) \ webdar-html_text.$(OBJEXT) webdar-html_page.$(OBJEXT) \ webdar-html_table.$(OBJEXT) webdar-html_image.$(OBJEXT) \ webdar-html_static_url.$(OBJEXT) webdar-html_url.$(OBJEXT) \ webdar-error_page.$(OBJEXT) webdar-html_form.$(OBJEXT) \ webdar-html_form_fieldset.$(OBJEXT) \ webdar-html_form_input.$(OBJEXT) \ webdar-html_form_radio.$(OBJEXT) \ webdar-html_form_select.$(OBJEXT) \ webdar-body_builder.$(OBJEXT) webdar-chemin.$(OBJEXT) \ webdar-css_property.$(OBJEXT) webdar-html_level.$(OBJEXT) \ webdar-html_div.$(OBJEXT) webdar-html_menu.$(OBJEXT) \ webdar-html_aiguille.$(OBJEXT) webdar-saisie.$(OBJEXT) \ webdar-user_interface.$(OBJEXT) webdar-events.$(OBJEXT) \ webdar-actor.$(OBJEXT) webdar-reference.$(OBJEXT) \ webdar-html_yes_no_box.$(OBJEXT) \ webdar-html_options_extract.$(OBJEXT) \ webdar-html_options_read.$(OBJEXT) \ webdar-html_crypto_algo.$(OBJEXT) \ webdar-html_comparison_fields.$(OBJEXT) \ webdar-html_options_compare.$(OBJEXT) \ webdar-html_options_test.$(OBJEXT) \ webdar-html_archive_read.$(OBJEXT) \ webdar-html_compression.$(OBJEXT) \ webdar-html_size_unit.$(OBJEXT) \ webdar-html_hash_algo.$(OBJEXT) webdar-html_datetime.$(OBJEXT) \ webdar-html_options_create.$(OBJEXT) \ webdar-html_archive_create.$(OBJEXT) \ webdar-web_user_interaction.$(OBJEXT) \ webdar-html_web_user_interaction.$(OBJEXT) \ webdar-html_button.$(OBJEXT) webdar-html_statistics.$(OBJEXT) \ webdar-archive_test.$(OBJEXT) webdar-html_error.$(OBJEXT) \ webdar-html_libdar_running_page.$(OBJEXT) \ webdar-archive_restore.$(OBJEXT) \ webdar-archive_compare.$(OBJEXT) \ webdar-archive_create.$(OBJEXT) \ webdar-html_options_isolate.$(OBJEXT) \ webdar-archive_isolate.$(OBJEXT) \ webdar-html_archive_isolate.$(OBJEXT) \ webdar-html_options_merge.$(OBJEXT) \ webdar-html_archive_merge.$(OBJEXT) \ webdar-archive_merge.$(OBJEXT) \ webdar-archive_init_list.$(OBJEXT) \ webdar-html_dir_tree.$(OBJEXT) \ webdar-html_listing_page.$(OBJEXT) webdar-html_focus.$(OBJEXT) \ webdar-static_object.$(OBJEXT) \ webdar-static_object_library.$(OBJEXT) \ webdar-css_class.$(OBJEXT) webdar-webdar_css_style.$(OBJEXT) \ webdar-css_class_group.$(OBJEXT) webdar-html_tabs.$(OBJEXT) \ webdar-html_select_file.$(OBJEXT) webdar-html_popup.$(OBJEXT) \ webdar-html_form_input_file.$(OBJEXT) webdar-jsoner.$(OBJEXT) \ webdar-html_derouleur.$(OBJEXT) webdar-html_entrepot.$(OBJEXT) \ webdar-environment.$(OBJEXT) \ webdar-html_libdar_running_popup.$(OBJEXT) \ webdar-html_mask.$(OBJEXT) \ webdar-html_form_mask_expression.$(OBJEXT) \ webdar-html_form_mask_bool.$(OBJEXT) \ webdar-html_mask_form_filename.$(OBJEXT) \ webdar-html_form_mask_subdir.$(OBJEXT) \ webdar-html_mask_form_path.$(OBJEXT) \ webdar-html_double_button.$(OBJEXT) webdar-html_demo.$(OBJEXT) \ webdar-html_form_mask_file.$(OBJEXT) \ webdar-html_archive_repair.$(OBJEXT) \ webdar-archive_repair.$(OBJEXT) \ webdar-html_archive_compare.$(OBJEXT) \ webdar-html_archive_extract.$(OBJEXT) \ webdar-html_options_repair.$(OBJEXT) \ webdar-html_form_overwrite_constant_action.$(OBJEXT) \ webdar-html_form_overwrite_base_criterium.$(OBJEXT) \ webdar-html_form_overwrite_combining_criterium.$(OBJEXT) \ webdar-html_form_overwrite_conditional_action.$(OBJEXT) \ webdar-html_form_overwrite_action.$(OBJEXT) \ webdar-html_hr.$(OBJEXT) \ webdar-html_form_overwrite_chain_action.$(OBJEXT) \ webdar-html_form_dynamic_table.$(OBJEXT) \ webdar-html_form_gnupg_list.$(OBJEXT) \ webdar-html_form_overwrite_chain_cell.$(OBJEXT) \ webdar-html_legend.$(OBJEXT) \ webdar-html_form_same_fs.$(OBJEXT) \ webdar-html_form_ignore_as_symlink.$(OBJEXT) \ webdar-html_form_sig_block_size.$(OBJEXT) \ webdar-html_form_input_unit.$(OBJEXT) \ webdar-html_compression_params.$(OBJEXT) \ webdar-html_slicing.$(OBJEXT) webdar-html_ciphering.$(OBJEXT) \ webdar-html_fsa_scope.$(OBJEXT) \ webdar-html_disconnect.$(OBJEXT) \ webdar-disconnected_page.$(OBJEXT) \ webdar-server_pool.$(OBJEXT) \ webdar-html_options_list.$(OBJEXT) \ webdar-html_summary_page.$(OBJEXT) \ webdar-bibliotheque.$(OBJEXT) \ webdar-html_bibliotheque.$(OBJEXT) \ webdar-bibliotheque_subconfig.$(OBJEXT) \ webdar-guichet.$(OBJEXT) webdar-html_over_guichet.$(OBJEXT) \ webdar-html_void.$(OBJEXT) \ webdar-html_entrepot_landing.$(OBJEXT) \ webdar-html_span.$(OBJEXT) webdar-html_version.$(OBJEXT) \ webdar-html_label.$(OBJEXT) webdar-html_tooltip.$(OBJEXT) am_webdar_OBJECTS = $(am__objects_1) webdar-webdar.$(OBJEXT) webdar_OBJECTS = $(am_webdar_OBJECTS) webdar_LDADD = $(LDADD) webdar_DEPENDENCIES = webdar_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CXXLD) $(AM_CXXFLAGS) \ $(CXXFLAGS) $(webdar_LDFLAGS) $(LDFLAGS) -o $@ am__objects_2 = webdar_static-central_report.$(OBJEXT) \ webdar_static-proto_connexion.$(OBJEXT) \ webdar_static-connexion.$(OBJEXT) \ webdar_static-ssl_connexion.$(OBJEXT) \ webdar_static-ssl_context.$(OBJEXT) \ webdar_static-exceptions.$(OBJEXT) \ webdar_static-listener.$(OBJEXT) \ webdar_static-parser.$(OBJEXT) \ webdar_static-webdar_tools.$(OBJEXT) \ webdar_static-server.$(OBJEXT) webdar_static-uri.$(OBJEXT) \ webdar_static-session.$(OBJEXT) webdar_static-date.$(OBJEXT) \ webdar_static-request.$(OBJEXT) webdar_static-answer.$(OBJEXT) \ webdar_static-tokens.$(OBJEXT) webdar_static-base64.$(OBJEXT) \ webdar_static-challenge.$(OBJEXT) \ webdar_static-choose.$(OBJEXT) webdar_static-css.$(OBJEXT) \ webdar_static-css_library.$(OBJEXT) \ webdar_static-html_text.$(OBJEXT) \ webdar_static-html_page.$(OBJEXT) \ webdar_static-html_table.$(OBJEXT) \ webdar_static-html_image.$(OBJEXT) \ webdar_static-html_static_url.$(OBJEXT) \ webdar_static-html_url.$(OBJEXT) \ webdar_static-error_page.$(OBJEXT) \ webdar_static-html_form.$(OBJEXT) \ webdar_static-html_form_fieldset.$(OBJEXT) \ webdar_static-html_form_input.$(OBJEXT) \ webdar_static-html_form_radio.$(OBJEXT) \ webdar_static-html_form_select.$(OBJEXT) \ webdar_static-body_builder.$(OBJEXT) \ webdar_static-chemin.$(OBJEXT) \ webdar_static-css_property.$(OBJEXT) \ webdar_static-html_level.$(OBJEXT) \ webdar_static-html_div.$(OBJEXT) \ webdar_static-html_menu.$(OBJEXT) \ webdar_static-html_aiguille.$(OBJEXT) \ webdar_static-saisie.$(OBJEXT) \ webdar_static-user_interface.$(OBJEXT) \ webdar_static-events.$(OBJEXT) webdar_static-actor.$(OBJEXT) \ webdar_static-reference.$(OBJEXT) \ webdar_static-html_yes_no_box.$(OBJEXT) \ webdar_static-html_options_extract.$(OBJEXT) \ webdar_static-html_options_read.$(OBJEXT) \ webdar_static-html_crypto_algo.$(OBJEXT) \ webdar_static-html_comparison_fields.$(OBJEXT) \ webdar_static-html_options_compare.$(OBJEXT) \ webdar_static-html_options_test.$(OBJEXT) \ webdar_static-html_archive_read.$(OBJEXT) \ webdar_static-html_compression.$(OBJEXT) \ webdar_static-html_size_unit.$(OBJEXT) \ webdar_static-html_hash_algo.$(OBJEXT) \ webdar_static-html_datetime.$(OBJEXT) \ webdar_static-html_options_create.$(OBJEXT) \ webdar_static-html_archive_create.$(OBJEXT) \ webdar_static-web_user_interaction.$(OBJEXT) \ webdar_static-html_web_user_interaction.$(OBJEXT) \ webdar_static-html_button.$(OBJEXT) \ webdar_static-html_statistics.$(OBJEXT) \ webdar_static-archive_test.$(OBJEXT) \ webdar_static-html_error.$(OBJEXT) \ webdar_static-html_libdar_running_page.$(OBJEXT) \ webdar_static-archive_restore.$(OBJEXT) \ webdar_static-archive_compare.$(OBJEXT) \ webdar_static-archive_create.$(OBJEXT) \ webdar_static-html_options_isolate.$(OBJEXT) \ webdar_static-archive_isolate.$(OBJEXT) \ webdar_static-html_archive_isolate.$(OBJEXT) \ webdar_static-html_options_merge.$(OBJEXT) \ webdar_static-html_archive_merge.$(OBJEXT) \ webdar_static-archive_merge.$(OBJEXT) \ webdar_static-archive_init_list.$(OBJEXT) \ webdar_static-html_dir_tree.$(OBJEXT) \ webdar_static-html_listing_page.$(OBJEXT) \ webdar_static-html_focus.$(OBJEXT) \ webdar_static-static_object.$(OBJEXT) \ webdar_static-static_object_library.$(OBJEXT) \ webdar_static-css_class.$(OBJEXT) \ webdar_static-webdar_css_style.$(OBJEXT) \ webdar_static-css_class_group.$(OBJEXT) \ webdar_static-html_tabs.$(OBJEXT) \ webdar_static-html_select_file.$(OBJEXT) \ webdar_static-html_popup.$(OBJEXT) \ webdar_static-html_form_input_file.$(OBJEXT) \ webdar_static-jsoner.$(OBJEXT) \ webdar_static-html_derouleur.$(OBJEXT) \ webdar_static-html_entrepot.$(OBJEXT) \ webdar_static-environment.$(OBJEXT) \ webdar_static-html_libdar_running_popup.$(OBJEXT) \ webdar_static-html_mask.$(OBJEXT) \ webdar_static-html_form_mask_expression.$(OBJEXT) \ webdar_static-html_form_mask_bool.$(OBJEXT) \ webdar_static-html_mask_form_filename.$(OBJEXT) \ webdar_static-html_form_mask_subdir.$(OBJEXT) \ webdar_static-html_mask_form_path.$(OBJEXT) \ webdar_static-html_double_button.$(OBJEXT) \ webdar_static-html_demo.$(OBJEXT) \ webdar_static-html_form_mask_file.$(OBJEXT) \ webdar_static-html_archive_repair.$(OBJEXT) \ webdar_static-archive_repair.$(OBJEXT) \ webdar_static-html_archive_compare.$(OBJEXT) \ webdar_static-html_archive_extract.$(OBJEXT) \ webdar_static-html_options_repair.$(OBJEXT) \ webdar_static-html_form_overwrite_constant_action.$(OBJEXT) \ webdar_static-html_form_overwrite_base_criterium.$(OBJEXT) \ webdar_static-html_form_overwrite_combining_criterium.$(OBJEXT) \ webdar_static-html_form_overwrite_conditional_action.$(OBJEXT) \ webdar_static-html_form_overwrite_action.$(OBJEXT) \ webdar_static-html_hr.$(OBJEXT) \ webdar_static-html_form_overwrite_chain_action.$(OBJEXT) \ webdar_static-html_form_dynamic_table.$(OBJEXT) \ webdar_static-html_form_gnupg_list.$(OBJEXT) \ webdar_static-html_form_overwrite_chain_cell.$(OBJEXT) \ webdar_static-html_legend.$(OBJEXT) \ webdar_static-html_form_same_fs.$(OBJEXT) \ webdar_static-html_form_ignore_as_symlink.$(OBJEXT) \ webdar_static-html_form_sig_block_size.$(OBJEXT) \ webdar_static-html_form_input_unit.$(OBJEXT) \ webdar_static-html_compression_params.$(OBJEXT) \ webdar_static-html_slicing.$(OBJEXT) \ webdar_static-html_ciphering.$(OBJEXT) \ webdar_static-html_fsa_scope.$(OBJEXT) \ webdar_static-html_disconnect.$(OBJEXT) \ webdar_static-disconnected_page.$(OBJEXT) \ webdar_static-server_pool.$(OBJEXT) \ webdar_static-html_options_list.$(OBJEXT) \ webdar_static-html_summary_page.$(OBJEXT) \ webdar_static-bibliotheque.$(OBJEXT) \ webdar_static-html_bibliotheque.$(OBJEXT) \ webdar_static-bibliotheque_subconfig.$(OBJEXT) \ webdar_static-guichet.$(OBJEXT) \ webdar_static-html_over_guichet.$(OBJEXT) \ webdar_static-html_void.$(OBJEXT) \ webdar_static-html_entrepot_landing.$(OBJEXT) \ webdar_static-html_span.$(OBJEXT) \ webdar_static-html_version.$(OBJEXT) \ webdar_static-html_label.$(OBJEXT) \ webdar_static-html_tooltip.$(OBJEXT) am_webdar_static_OBJECTS = $(am__objects_2) \ webdar_static-webdar.$(OBJEXT) webdar_static_OBJECTS = $(am_webdar_static_OBJECTS) webdar_static_LDADD = $(LDADD) webdar_static_DEPENDENCIES = webdar_static_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX \ $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CXXLD) \ $(AM_CXXFLAGS) $(CXXFLAGS) $(webdar_static_LDFLAGS) $(LDFLAGS) \ -o $@ AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/depcomp am__maybe_remake_depfiles = depfiles am__depfiles_remade = ./$(DEPDIR)/base64.Po \ ./$(DEPDIR)/static_object_builder.Po \ ./$(DEPDIR)/webdar-actor.Po ./$(DEPDIR)/webdar-answer.Po \ ./$(DEPDIR)/webdar-archive_compare.Po \ ./$(DEPDIR)/webdar-archive_create.Po \ ./$(DEPDIR)/webdar-archive_init_list.Po \ ./$(DEPDIR)/webdar-archive_isolate.Po \ ./$(DEPDIR)/webdar-archive_merge.Po \ ./$(DEPDIR)/webdar-archive_repair.Po \ ./$(DEPDIR)/webdar-archive_restore.Po \ ./$(DEPDIR)/webdar-archive_test.Po \ ./$(DEPDIR)/webdar-base64.Po \ ./$(DEPDIR)/webdar-bibliotheque.Po \ ./$(DEPDIR)/webdar-bibliotheque_subconfig.Po \ ./$(DEPDIR)/webdar-body_builder.Po \ ./$(DEPDIR)/webdar-central_report.Po \ ./$(DEPDIR)/webdar-challenge.Po ./$(DEPDIR)/webdar-chemin.Po \ ./$(DEPDIR)/webdar-choose.Po ./$(DEPDIR)/webdar-connexion.Po \ ./$(DEPDIR)/webdar-css.Po ./$(DEPDIR)/webdar-css_class.Po \ ./$(DEPDIR)/webdar-css_class_group.Po \ ./$(DEPDIR)/webdar-css_library.Po \ ./$(DEPDIR)/webdar-css_property.Po ./$(DEPDIR)/webdar-date.Po \ ./$(DEPDIR)/webdar-disconnected_page.Po \ ./$(DEPDIR)/webdar-environment.Po \ ./$(DEPDIR)/webdar-error_page.Po ./$(DEPDIR)/webdar-events.Po \ ./$(DEPDIR)/webdar-exceptions.Po ./$(DEPDIR)/webdar-guichet.Po \ ./$(DEPDIR)/webdar-html_aiguille.Po \ ./$(DEPDIR)/webdar-html_archive_compare.Po \ ./$(DEPDIR)/webdar-html_archive_create.Po \ ./$(DEPDIR)/webdar-html_archive_extract.Po \ ./$(DEPDIR)/webdar-html_archive_isolate.Po \ ./$(DEPDIR)/webdar-html_archive_merge.Po \ ./$(DEPDIR)/webdar-html_archive_read.Po \ ./$(DEPDIR)/webdar-html_archive_repair.Po \ ./$(DEPDIR)/webdar-html_bibliotheque.Po \ ./$(DEPDIR)/webdar-html_button.Po \ ./$(DEPDIR)/webdar-html_ciphering.Po \ ./$(DEPDIR)/webdar-html_comparison_fields.Po \ ./$(DEPDIR)/webdar-html_compression.Po \ ./$(DEPDIR)/webdar-html_compression_params.Po \ ./$(DEPDIR)/webdar-html_crypto_algo.Po \ ./$(DEPDIR)/webdar-html_datetime.Po \ ./$(DEPDIR)/webdar-html_demo.Po \ ./$(DEPDIR)/webdar-html_derouleur.Po \ ./$(DEPDIR)/webdar-html_dir_tree.Po \ ./$(DEPDIR)/webdar-html_disconnect.Po \ ./$(DEPDIR)/webdar-html_div.Po \ ./$(DEPDIR)/webdar-html_double_button.Po \ ./$(DEPDIR)/webdar-html_entrepot.Po \ ./$(DEPDIR)/webdar-html_entrepot_landing.Po \ ./$(DEPDIR)/webdar-html_error.Po \ ./$(DEPDIR)/webdar-html_focus.Po \ ./$(DEPDIR)/webdar-html_form.Po \ ./$(DEPDIR)/webdar-html_form_dynamic_table.Po \ ./$(DEPDIR)/webdar-html_form_fieldset.Po \ ./$(DEPDIR)/webdar-html_form_gnupg_list.Po \ ./$(DEPDIR)/webdar-html_form_ignore_as_symlink.Po \ ./$(DEPDIR)/webdar-html_form_input.Po \ ./$(DEPDIR)/webdar-html_form_input_file.Po \ ./$(DEPDIR)/webdar-html_form_input_unit.Po \ ./$(DEPDIR)/webdar-html_form_mask_bool.Po \ ./$(DEPDIR)/webdar-html_form_mask_expression.Po \ ./$(DEPDIR)/webdar-html_form_mask_file.Po \ ./$(DEPDIR)/webdar-html_form_mask_subdir.Po \ ./$(DEPDIR)/webdar-html_form_overwrite_action.Po \ ./$(DEPDIR)/webdar-html_form_overwrite_base_criterium.Po \ ./$(DEPDIR)/webdar-html_form_overwrite_chain_action.Po \ ./$(DEPDIR)/webdar-html_form_overwrite_chain_cell.Po \ ./$(DEPDIR)/webdar-html_form_overwrite_combining_criterium.Po \ ./$(DEPDIR)/webdar-html_form_overwrite_conditional_action.Po \ ./$(DEPDIR)/webdar-html_form_overwrite_constant_action.Po \ ./$(DEPDIR)/webdar-html_form_radio.Po \ ./$(DEPDIR)/webdar-html_form_same_fs.Po \ ./$(DEPDIR)/webdar-html_form_select.Po \ ./$(DEPDIR)/webdar-html_form_sig_block_size.Po \ ./$(DEPDIR)/webdar-html_fsa_scope.Po \ ./$(DEPDIR)/webdar-html_hash_algo.Po \ ./$(DEPDIR)/webdar-html_hr.Po ./$(DEPDIR)/webdar-html_image.Po \ ./$(DEPDIR)/webdar-html_label.Po \ ./$(DEPDIR)/webdar-html_legend.Po \ ./$(DEPDIR)/webdar-html_level.Po \ ./$(DEPDIR)/webdar-html_libdar_running_page.Po \ ./$(DEPDIR)/webdar-html_libdar_running_popup.Po \ ./$(DEPDIR)/webdar-html_listing_page.Po \ ./$(DEPDIR)/webdar-html_mask.Po \ ./$(DEPDIR)/webdar-html_mask_form_filename.Po \ ./$(DEPDIR)/webdar-html_mask_form_path.Po \ ./$(DEPDIR)/webdar-html_menu.Po \ ./$(DEPDIR)/webdar-html_options_compare.Po \ ./$(DEPDIR)/webdar-html_options_create.Po \ ./$(DEPDIR)/webdar-html_options_extract.Po \ ./$(DEPDIR)/webdar-html_options_isolate.Po \ ./$(DEPDIR)/webdar-html_options_list.Po \ ./$(DEPDIR)/webdar-html_options_merge.Po \ ./$(DEPDIR)/webdar-html_options_read.Po \ ./$(DEPDIR)/webdar-html_options_repair.Po \ ./$(DEPDIR)/webdar-html_options_test.Po \ ./$(DEPDIR)/webdar-html_over_guichet.Po \ ./$(DEPDIR)/webdar-html_page.Po \ ./$(DEPDIR)/webdar-html_popup.Po \ ./$(DEPDIR)/webdar-html_select_file.Po \ ./$(DEPDIR)/webdar-html_size_unit.Po \ ./$(DEPDIR)/webdar-html_slicing.Po \ ./$(DEPDIR)/webdar-html_span.Po \ ./$(DEPDIR)/webdar-html_static_url.Po \ ./$(DEPDIR)/webdar-html_statistics.Po \ ./$(DEPDIR)/webdar-html_summary_page.Po \ ./$(DEPDIR)/webdar-html_table.Po \ ./$(DEPDIR)/webdar-html_tabs.Po \ ./$(DEPDIR)/webdar-html_text.Po \ ./$(DEPDIR)/webdar-html_tooltip.Po \ ./$(DEPDIR)/webdar-html_url.Po \ ./$(DEPDIR)/webdar-html_version.Po \ ./$(DEPDIR)/webdar-html_void.Po \ ./$(DEPDIR)/webdar-html_web_user_interaction.Po \ ./$(DEPDIR)/webdar-html_yes_no_box.Po \ ./$(DEPDIR)/webdar-jsoner.Po ./$(DEPDIR)/webdar-listener.Po \ ./$(DEPDIR)/webdar-parser.Po \ ./$(DEPDIR)/webdar-proto_connexion.Po \ ./$(DEPDIR)/webdar-reference.Po ./$(DEPDIR)/webdar-request.Po \ ./$(DEPDIR)/webdar-saisie.Po ./$(DEPDIR)/webdar-server.Po \ ./$(DEPDIR)/webdar-server_pool.Po \ ./$(DEPDIR)/webdar-session.Po \ ./$(DEPDIR)/webdar-ssl_connexion.Po \ ./$(DEPDIR)/webdar-ssl_context.Po \ ./$(DEPDIR)/webdar-static_object.Po \ ./$(DEPDIR)/webdar-static_object_library.Po \ ./$(DEPDIR)/webdar-tokens.Po ./$(DEPDIR)/webdar-uri.Po \ ./$(DEPDIR)/webdar-user_interface.Po \ ./$(DEPDIR)/webdar-web_user_interaction.Po \ ./$(DEPDIR)/webdar-webdar.Po \ ./$(DEPDIR)/webdar-webdar_css_style.Po \ ./$(DEPDIR)/webdar-webdar_tools.Po \ ./$(DEPDIR)/webdar_static-actor.Po \ ./$(DEPDIR)/webdar_static-answer.Po \ ./$(DEPDIR)/webdar_static-archive_compare.Po \ ./$(DEPDIR)/webdar_static-archive_create.Po \ ./$(DEPDIR)/webdar_static-archive_init_list.Po \ ./$(DEPDIR)/webdar_static-archive_isolate.Po \ ./$(DEPDIR)/webdar_static-archive_merge.Po \ ./$(DEPDIR)/webdar_static-archive_repair.Po \ ./$(DEPDIR)/webdar_static-archive_restore.Po \ ./$(DEPDIR)/webdar_static-archive_test.Po \ ./$(DEPDIR)/webdar_static-base64.Po \ ./$(DEPDIR)/webdar_static-bibliotheque.Po \ ./$(DEPDIR)/webdar_static-bibliotheque_subconfig.Po \ ./$(DEPDIR)/webdar_static-body_builder.Po \ ./$(DEPDIR)/webdar_static-central_report.Po \ ./$(DEPDIR)/webdar_static-challenge.Po \ ./$(DEPDIR)/webdar_static-chemin.Po \ ./$(DEPDIR)/webdar_static-choose.Po \ ./$(DEPDIR)/webdar_static-connexion.Po \ ./$(DEPDIR)/webdar_static-css.Po \ ./$(DEPDIR)/webdar_static-css_class.Po \ ./$(DEPDIR)/webdar_static-css_class_group.Po \ ./$(DEPDIR)/webdar_static-css_library.Po \ ./$(DEPDIR)/webdar_static-css_property.Po \ ./$(DEPDIR)/webdar_static-date.Po \ ./$(DEPDIR)/webdar_static-disconnected_page.Po \ ./$(DEPDIR)/webdar_static-environment.Po \ ./$(DEPDIR)/webdar_static-error_page.Po \ ./$(DEPDIR)/webdar_static-events.Po \ ./$(DEPDIR)/webdar_static-exceptions.Po \ ./$(DEPDIR)/webdar_static-guichet.Po \ ./$(DEPDIR)/webdar_static-html_aiguille.Po \ ./$(DEPDIR)/webdar_static-html_archive_compare.Po \ ./$(DEPDIR)/webdar_static-html_archive_create.Po \ ./$(DEPDIR)/webdar_static-html_archive_extract.Po \ ./$(DEPDIR)/webdar_static-html_archive_isolate.Po \ ./$(DEPDIR)/webdar_static-html_archive_merge.Po \ ./$(DEPDIR)/webdar_static-html_archive_read.Po \ ./$(DEPDIR)/webdar_static-html_archive_repair.Po \ ./$(DEPDIR)/webdar_static-html_bibliotheque.Po \ ./$(DEPDIR)/webdar_static-html_button.Po \ ./$(DEPDIR)/webdar_static-html_ciphering.Po \ ./$(DEPDIR)/webdar_static-html_comparison_fields.Po \ ./$(DEPDIR)/webdar_static-html_compression.Po \ ./$(DEPDIR)/webdar_static-html_compression_params.Po \ ./$(DEPDIR)/webdar_static-html_crypto_algo.Po \ ./$(DEPDIR)/webdar_static-html_datetime.Po \ ./$(DEPDIR)/webdar_static-html_demo.Po \ ./$(DEPDIR)/webdar_static-html_derouleur.Po \ ./$(DEPDIR)/webdar_static-html_dir_tree.Po \ ./$(DEPDIR)/webdar_static-html_disconnect.Po \ ./$(DEPDIR)/webdar_static-html_div.Po \ ./$(DEPDIR)/webdar_static-html_double_button.Po \ ./$(DEPDIR)/webdar_static-html_entrepot.Po \ ./$(DEPDIR)/webdar_static-html_entrepot_landing.Po \ ./$(DEPDIR)/webdar_static-html_error.Po \ ./$(DEPDIR)/webdar_static-html_focus.Po \ ./$(DEPDIR)/webdar_static-html_form.Po \ ./$(DEPDIR)/webdar_static-html_form_dynamic_table.Po \ ./$(DEPDIR)/webdar_static-html_form_fieldset.Po \ ./$(DEPDIR)/webdar_static-html_form_gnupg_list.Po \ ./$(DEPDIR)/webdar_static-html_form_ignore_as_symlink.Po \ ./$(DEPDIR)/webdar_static-html_form_input.Po \ ./$(DEPDIR)/webdar_static-html_form_input_file.Po \ ./$(DEPDIR)/webdar_static-html_form_input_unit.Po \ ./$(DEPDIR)/webdar_static-html_form_mask_bool.Po \ ./$(DEPDIR)/webdar_static-html_form_mask_expression.Po \ ./$(DEPDIR)/webdar_static-html_form_mask_file.Po \ ./$(DEPDIR)/webdar_static-html_form_mask_subdir.Po \ ./$(DEPDIR)/webdar_static-html_form_overwrite_action.Po \ ./$(DEPDIR)/webdar_static-html_form_overwrite_base_criterium.Po \ ./$(DEPDIR)/webdar_static-html_form_overwrite_chain_action.Po \ ./$(DEPDIR)/webdar_static-html_form_overwrite_chain_cell.Po \ ./$(DEPDIR)/webdar_static-html_form_overwrite_combining_criterium.Po \ ./$(DEPDIR)/webdar_static-html_form_overwrite_conditional_action.Po \ ./$(DEPDIR)/webdar_static-html_form_overwrite_constant_action.Po \ ./$(DEPDIR)/webdar_static-html_form_radio.Po \ ./$(DEPDIR)/webdar_static-html_form_same_fs.Po \ ./$(DEPDIR)/webdar_static-html_form_select.Po \ ./$(DEPDIR)/webdar_static-html_form_sig_block_size.Po \ ./$(DEPDIR)/webdar_static-html_fsa_scope.Po \ ./$(DEPDIR)/webdar_static-html_hash_algo.Po \ ./$(DEPDIR)/webdar_static-html_hr.Po \ ./$(DEPDIR)/webdar_static-html_image.Po \ ./$(DEPDIR)/webdar_static-html_label.Po \ ./$(DEPDIR)/webdar_static-html_legend.Po \ ./$(DEPDIR)/webdar_static-html_level.Po \ ./$(DEPDIR)/webdar_static-html_libdar_running_page.Po \ ./$(DEPDIR)/webdar_static-html_libdar_running_popup.Po \ ./$(DEPDIR)/webdar_static-html_listing_page.Po \ ./$(DEPDIR)/webdar_static-html_mask.Po \ ./$(DEPDIR)/webdar_static-html_mask_form_filename.Po \ ./$(DEPDIR)/webdar_static-html_mask_form_path.Po \ ./$(DEPDIR)/webdar_static-html_menu.Po \ ./$(DEPDIR)/webdar_static-html_options_compare.Po \ ./$(DEPDIR)/webdar_static-html_options_create.Po \ ./$(DEPDIR)/webdar_static-html_options_extract.Po \ ./$(DEPDIR)/webdar_static-html_options_isolate.Po \ ./$(DEPDIR)/webdar_static-html_options_list.Po \ ./$(DEPDIR)/webdar_static-html_options_merge.Po \ ./$(DEPDIR)/webdar_static-html_options_read.Po \ ./$(DEPDIR)/webdar_static-html_options_repair.Po \ ./$(DEPDIR)/webdar_static-html_options_test.Po \ ./$(DEPDIR)/webdar_static-html_over_guichet.Po \ ./$(DEPDIR)/webdar_static-html_page.Po \ ./$(DEPDIR)/webdar_static-html_popup.Po \ ./$(DEPDIR)/webdar_static-html_select_file.Po \ ./$(DEPDIR)/webdar_static-html_size_unit.Po \ ./$(DEPDIR)/webdar_static-html_slicing.Po \ ./$(DEPDIR)/webdar_static-html_span.Po \ ./$(DEPDIR)/webdar_static-html_static_url.Po \ ./$(DEPDIR)/webdar_static-html_statistics.Po \ ./$(DEPDIR)/webdar_static-html_summary_page.Po \ ./$(DEPDIR)/webdar_static-html_table.Po \ ./$(DEPDIR)/webdar_static-html_tabs.Po \ ./$(DEPDIR)/webdar_static-html_text.Po \ ./$(DEPDIR)/webdar_static-html_tooltip.Po \ ./$(DEPDIR)/webdar_static-html_url.Po \ ./$(DEPDIR)/webdar_static-html_version.Po \ ./$(DEPDIR)/webdar_static-html_void.Po \ ./$(DEPDIR)/webdar_static-html_web_user_interaction.Po \ ./$(DEPDIR)/webdar_static-html_yes_no_box.Po \ ./$(DEPDIR)/webdar_static-jsoner.Po \ ./$(DEPDIR)/webdar_static-listener.Po \ ./$(DEPDIR)/webdar_static-parser.Po \ ./$(DEPDIR)/webdar_static-proto_connexion.Po \ ./$(DEPDIR)/webdar_static-reference.Po \ ./$(DEPDIR)/webdar_static-request.Po \ ./$(DEPDIR)/webdar_static-saisie.Po \ ./$(DEPDIR)/webdar_static-server.Po \ ./$(DEPDIR)/webdar_static-server_pool.Po \ ./$(DEPDIR)/webdar_static-session.Po \ ./$(DEPDIR)/webdar_static-ssl_connexion.Po \ ./$(DEPDIR)/webdar_static-ssl_context.Po \ ./$(DEPDIR)/webdar_static-static_object.Po \ ./$(DEPDIR)/webdar_static-static_object_library.Po \ ./$(DEPDIR)/webdar_static-tokens.Po \ ./$(DEPDIR)/webdar_static-uri.Po \ ./$(DEPDIR)/webdar_static-user_interface.Po \ ./$(DEPDIR)/webdar_static-web_user_interaction.Po \ ./$(DEPDIR)/webdar_static-webdar.Po \ ./$(DEPDIR)/webdar_static-webdar_css_style.Po \ ./$(DEPDIR)/webdar_static-webdar_tools.Po am__mv = mv -f CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) LTCXXCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CXXFLAGS) $(CXXFLAGS) AM_V_CXX = $(am__v_CXX_@AM_V@) am__v_CXX_ = $(am__v_CXX_@AM_DEFAULT_V@) am__v_CXX_0 = @echo " CXX " $@; am__v_CXX_1 = CXXLD = $(CXX) CXXLINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CXXLD) $(AM_CXXFLAGS) \ $(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CXXLD = $(am__v_CXXLD_@AM_V@) am__v_CXXLD_ = $(am__v_CXXLD_@AM_DEFAULT_V@) am__v_CXXLD_0 = @echo " CXXLD " $@; am__v_CXXLD_1 = COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_@AM_V@) am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) am__v_CC_0 = @echo " CC " $@; am__v_CC_1 = CCLD = $(CC) LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_@AM_V@) am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) am__v_CCLD_0 = @echo " CCLD " $@; am__v_CCLD_1 = SOURCES = $(static_object_builder_SOURCES) $(webdar_SOURCES) \ $(webdar_static_SOURCES) DIST_SOURCES = $(static_object_builder_SOURCES) $(webdar_SOURCES) \ $(webdar_static_SOURCES) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac DATA = $(dist_noinst_DATA) am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/depcomp DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPPFLAGS = @CPPFLAGS@ CSCOPE = @CSCOPE@ CTAGS = @CTAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CXXSTDFLAGS = @CXXSTDFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DOXYGEN_PROG = @DOXYGEN_PROG@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ ETAGS = @ETAGS@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ FILECMD = @FILECMD@ GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@ GMSGFMT = @GMSGFMT@ GMSGFMT_015 = @GMSGFMT_015@ GREP = @GREP@ HAS_DOT = @HAS_DOT@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INTLLIBS = @INTLLIBS@ INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBDAR_CFLAGS = @LIBDAR_CFLAGS@ LIBDAR_LIBS = @LIBDAR_LIBS@ LIBICONV = @LIBICONV@ LIBINTL = @LIBINTL@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTHREADAR_CFLAGS = @LIBTHREADAR_CFLAGS@ LIBTHREADAR_LIBS = @LIBTHREADAR_LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBICONV = @LTLIBICONV@ LTLIBINTL = @LTLIBINTL@ LTLIBOBJS = @LTLIBOBJS@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ MSGFMT = @MSGFMT@ MSGMERGE = @MSGMERGE@ MSGMERGE_FOR_MSGFMT_OPTION = @MSGMERGE_FOR_MSGFMT_OPTION@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OPENSSL_CFLAGS = @OPENSSL_CFLAGS@ OPENSSL_LIBS = @OPENSSL_LIBS@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ POSUB = @POSUB@ RANLIB = @RANLIB@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ UPX_PROG = @UPX_PROG@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ XGETTEXT = @XGETTEXT@ XGETTEXT_015 = @XGETTEXT_015@ XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dot = @dot@ doxygen = @doxygen@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ groff = @groff@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ pkgconfigdir = @pkgconfigdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ tmp = @tmp@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ upx = @upx@ @BUILD_WEBDAR_STATIC_FALSE@ALSO_BUILD = @BUILD_WEBDAR_STATIC_TRUE@ALSO_BUILD = webdar_static @BUILD_WEBDAR_STATIC_FALSE@ALSO_BUILD_INST = @BUILD_WEBDAR_STATIC_TRUE@ALSO_BUILD_INST = $(ALSO_BUILD)$(EXEEXT) LDADD = @LIBDAR_LIBS@ @LIBTHREADAR_LIBS@ @OPENSSL_LIBS@ static_object_builder_SOURCES = static_object_builder.cpp base64.cpp base64.hpp dist_noinst_DATA = static_object_batch ../resources/favicon.jpg ../resources/webdar_logo.jpg ../resources/webdar_title_logo.jpg ../data/darrc COMMON = my_config.h global_parameters.hpp central_report.cpp \ central_report.hpp proto_connexion.cpp proto_connexion.hpp \ connexion.cpp connexion.hpp authentication.hpp cookies.hpp \ ssl_connexion.cpp ssl_connexion.hpp ssl_context.cpp \ ssl_context.hpp exceptions.cpp exceptions.hpp listener.cpp \ listener.hpp parser.cpp parser.hpp webdar_tools.cpp \ webdar_tools.hpp server.cpp server.hpp uri.cpp uri.hpp \ session.cpp session.hpp date.cpp date.hpp request.cpp \ request.hpp answer.cpp answer.hpp tokens.cpp tokens.hpp \ base64.cpp base64.hpp challenge.cpp challenge.hpp choose.cpp \ choose.hpp css.cpp css.hpp css_library.cpp css_library.hpp \ html_text.cpp html_text.hpp html_page.cpp html_page.hpp \ html_table.cpp html_table.hpp html_image.cpp html_image.hpp \ html_static_url.cpp html_static_url.hpp html_url.hpp \ html_url.cpp responder.hpp error_page.cpp error_page.hpp \ html_form.cpp html_form.hpp html_form_fieldset.cpp \ html_form_fieldset.hpp html_form_input.cpp html_form_input.hpp \ html_form_radio.cpp html_form_radio.hpp html_form_select.cpp \ html_form_select.hpp body_builder.cpp body_builder.hpp \ static_body_builder.hpp chemin.cpp chemin.hpp css_property.cpp \ css_property.hpp html_level.cpp html_level.hpp html_div.cpp \ html_div.hpp html_menu.cpp html_menu.hpp html_aiguille.cpp \ html_aiguille.hpp saisie.cpp saisie.hpp user_interface.cpp \ user_interface.hpp events.cpp events.hpp actor.cpp actor.hpp \ reference.cpp reference.hpp html_yes_no_box.cpp \ html_yes_no_box.hpp html_options_extract.cpp \ html_options_extract.hpp html_options_read.cpp \ html_options_read.hpp html_crypto_algo.cpp \ html_crypto_algo.hpp html_comparison_fields.cpp \ html_comparison_fields.hpp html_options_compare.cpp \ html_options_compare.hpp html_options_test.cpp \ html_options_test.hpp html_archive_read.cpp \ html_archive_read.hpp html_compression.cpp \ html_compression.hpp html_size_unit.cpp html_size_unit.hpp \ html_hash_algo.cpp html_hash_algo.hpp html_datetime.cpp \ html_datetime.hpp html_options_create.cpp \ html_options_create.hpp html_archive_create.cpp \ html_archive_create.hpp web_user_interaction.cpp \ web_user_interaction.hpp html_web_user_interaction.cpp \ html_web_user_interaction.hpp html_button.cpp html_button.hpp \ html_statistics.cpp html_statistics.hpp archive_test.cpp \ archive_test.hpp html_error.cpp html_error.hpp \ html_libdar_running_page.cpp html_libdar_running_page.hpp \ archive_restore.cpp archive_restore.hpp archive_compare.cpp \ archive_compare.hpp archive_create.cpp archive_create.hpp \ html_options_isolate.cpp html_options_isolate.hpp \ archive_isolate.cpp archive_isolate.hpp \ html_archive_isolate.cpp html_archive_isolate.hpp \ html_options_merge.cpp html_options_merge.hpp \ html_archive_merge.cpp html_archive_merge.hpp \ archive_merge.cpp archive_merge.hpp archive_init_list.cpp \ archive_init_list.hpp html_dir_tree.cpp html_dir_tree.hpp \ html_listing_page.cpp html_listing_page.hpp html_focus.cpp \ html_focus.hpp static_object.cpp static_object.hpp \ static_object_library.cpp static_object_library.hpp \ css_class.cpp css_class.hpp webdar_css_style.cpp \ webdar_css_style.hpp css_class_group.cpp css_class_group.hpp \ html_tabs.cpp html_tabs.hpp html_select_file.cpp \ html_select_file.hpp html_popup.cpp html_popup.hpp \ html_form_input_file.cpp html_form_input_file.hpp jsoner.hpp \ jsoner.cpp html_derouleur.cpp html_derouleur.hpp \ html_entrepot.hpp html_entrepot.cpp environment.hpp \ environment.cpp html_libdar_running_popup.hpp \ html_libdar_running_popup.cpp html_mask.hpp html_mask.cpp \ html_form_mask_expression.hpp html_form_mask_expression.cpp \ html_form_mask_bool.hpp html_form_mask_bool.cpp \ html_mask_form_filename.hpp html_mask_form_filename.cpp \ html_form_mask_subdir.hpp html_form_mask_subdir.cpp \ html_mask_form_path.hpp html_mask_form_path.cpp \ html_double_button.hpp html_double_button.cpp html_demo.hpp \ html_demo.cpp html_form_mask_file.hpp html_form_mask_file.cpp \ html_archive_repair.cpp html_archive_repair.hpp \ archive_repair.hpp archive_repair.cpp html_archive_compare.hpp \ html_archive_compare.cpp html_archive_extract.hpp \ html_archive_extract.cpp html_options_repair.hpp \ html_options_repair.cpp html_overwrite_action.hpp \ html_form_overwrite_constant_action.hpp \ html_form_overwrite_constant_action.cpp \ html_overwrite_criterium.hpp \ html_form_overwrite_base_criterium.hpp \ html_form_overwrite_base_criterium.cpp \ html_form_overwrite_combining_criterium.hpp \ html_form_overwrite_combining_criterium.cpp \ html_form_overwrite_conditional_action.hpp \ html_form_overwrite_conditional_action.cpp \ html_form_overwrite_action.hpp html_form_overwrite_action.cpp \ html_hr.hpp html_hr.cpp html_form_overwrite_chain_action.hpp \ html_form_overwrite_chain_action.cpp \ html_form_dynamic_table.hpp html_form_dynamic_table.cpp \ html_form_gnupg_list.hpp html_form_gnupg_list.cpp \ html_form_overwrite_chain_cell.hpp \ html_form_overwrite_chain_cell.cpp html_legend.hpp \ html_legend.cpp html_form_same_fs.cpp html_form_same_fs.hpp \ html_form_ignore_as_symlink.hpp \ html_form_ignore_as_symlink.cpp html_form_sig_block_size.hpp \ html_form_sig_block_size.cpp html_form_input_unit.hpp \ html_form_input_unit.cpp html_compression_params.hpp \ html_compression_params.cpp html_slicing.hpp html_slicing.cpp \ html_ciphering.hpp html_ciphering.cpp html_fsa_scope.hpp \ html_fsa_scope.cpp html_disconnect.hpp html_disconnect.cpp \ disconnected_page.hpp disconnected_page.cpp server_pool.hpp \ server_pool.cpp html_options_list.hpp html_options_list.cpp \ html_summary_page.hpp html_summary_page.cpp bibliotheque.cpp \ bibliotheque.hpp arriere_boutique.hpp html_bibliotheque.hpp \ html_bibliotheque.cpp html_fichier.hpp \ bibliotheque_subconfig.hpp bibliotheque_subconfig.cpp \ guichet.cpp guichet.hpp html_over_guichet.hpp \ html_over_guichet.cpp html_void.hpp html_void.cpp \ html_entrepot_landing.hpp html_entrepot_landing.cpp \ html_span.hpp html_span.cpp html_version.hpp html_version.cpp \ html_label.hpp html_label.cpp html_tooltip.hpp \ html_tooltip.cpp tooltip_messages.hpp webdar_SOURCES = $(COMMON) webdar.cpp webdar_CPPFLAGS = $(LIBDAR_CFLAGS) $(OPENSSL_CFLAGS) webdar_LDFLAGS = $(AM_LDFLAGS) $(LIBDAR_LIBS) $(OPENSSL_LIBS) webdar_static_SOURCES = $(COMMON) webdar.cpp webdar_static_CPPFLAGS = $(LIBDAR_CFLAGS) $(OPENSSL_CFLAGS) webdar_static_LDFLAGS = -all-static $(AM_LDFLAGS) $(LIBDAR_LIBS) $(OPENSSL_LIBS) all: all-am .SUFFIXES: .SUFFIXES: .cpp .lo .o .obj $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu src/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): install-binPROGRAMS: $(bin_PROGRAMS) @$(NORMAL_INSTALL) @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(bindir)'"; \ $(MKDIR_P) "$(DESTDIR)$(bindir)" || exit 1; \ fi; \ for p in $$list; do echo "$$p $$p"; done | \ sed 's/$(EXEEXT)$$//' | \ while read p p1; do if test -f $$p \ || test -f $$p1 \ ; then echo "$$p"; echo "$$p"; else :; fi; \ done | \ sed -e 'p;s,.*/,,;n;h' \ -e 's|.*|.|' \ -e 'p;x;s,.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/' | \ sed 'N;N;N;s,\n, ,g' | \ $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1 } \ { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \ if ($$2 == $$4) files[d] = files[d] " " $$1; \ else { print "f", $$3 "/" $$4, $$1; } } \ END { for (d in files) print "f", d, files[d] }' | \ while read type dir files; do \ if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \ test -z "$$files" || { \ echo " $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files '$(DESTDIR)$(bindir)$$dir'"; \ $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files "$(DESTDIR)$(bindir)$$dir" || exit $$?; \ } \ ; done uninstall-binPROGRAMS: @$(NORMAL_UNINSTALL) @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ files=`for p in $$list; do echo "$$p"; done | \ sed -e 'h;s,^.*/,,;s/$(EXEEXT)$$//;$(transform)' \ -e 's/$$/$(EXEEXT)/' \ `; \ test -n "$$list" || exit 0; \ echo " ( cd '$(DESTDIR)$(bindir)' && rm -f" $$files ")"; \ cd "$(DESTDIR)$(bindir)" && rm -f $$files clean-binPROGRAMS: @list='$(bin_PROGRAMS)'; test -n "$$list" || exit 0; \ echo " rm -f" $$list; \ rm -f $$list || exit $$?; \ test -n "$(EXEEXT)" || exit 0; \ list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \ echo " rm -f" $$list; \ rm -f $$list clean-noinstPROGRAMS: @list='$(noinst_PROGRAMS)'; test -n "$$list" || exit 0; \ echo " rm -f" $$list; \ rm -f $$list || exit $$?; \ test -n "$(EXEEXT)" || exit 0; \ list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \ echo " rm -f" $$list; \ rm -f $$list static_object_builder$(EXEEXT): $(static_object_builder_OBJECTS) $(static_object_builder_DEPENDENCIES) $(EXTRA_static_object_builder_DEPENDENCIES) @rm -f static_object_builder$(EXEEXT) $(AM_V_CXXLD)$(CXXLINK) $(static_object_builder_OBJECTS) $(static_object_builder_LDADD) $(LIBS) webdar$(EXEEXT): $(webdar_OBJECTS) $(webdar_DEPENDENCIES) $(EXTRA_webdar_DEPENDENCIES) @rm -f webdar$(EXEEXT) $(AM_V_CXXLD)$(webdar_LINK) $(webdar_OBJECTS) $(webdar_LDADD) $(LIBS) webdar_static$(EXEEXT): $(webdar_static_OBJECTS) $(webdar_static_DEPENDENCIES) $(EXTRA_webdar_static_DEPENDENCIES) @rm -f webdar_static$(EXEEXT) $(AM_V_CXXLD)$(webdar_static_LINK) $(webdar_static_OBJECTS) $(webdar_static_LDADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/base64.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/static_object_builder.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/webdar-actor.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/webdar-answer.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/webdar-archive_compare.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/webdar-archive_create.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/webdar-archive_init_list.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/webdar-archive_isolate.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/webdar-archive_merge.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/webdar-archive_repair.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/webdar-archive_restore.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/webdar-archive_test.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/webdar-base64.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/webdar-bibliotheque.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/webdar-bibliotheque_subconfig.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/webdar-body_builder.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/webdar-central_report.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/webdar-challenge.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/webdar-chemin.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/webdar-choose.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/webdar-connexion.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/webdar-css.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/webdar-css_class.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/webdar-css_class_group.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/webdar-css_library.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/webdar-css_property.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/webdar-date.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/webdar-disconnected_page.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/webdar-environment.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/webdar-error_page.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/webdar-events.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/webdar-exceptions.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/webdar-guichet.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/webdar-html_aiguille.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/webdar-html_archive_compare.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/webdar-html_archive_create.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/webdar-html_archive_extract.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/webdar-html_archive_isolate.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/webdar-html_archive_merge.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/webdar-html_archive_read.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/webdar-html_archive_repair.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/webdar-html_bibliotheque.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/webdar-html_button.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/webdar-html_ciphering.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/webdar-html_comparison_fields.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/webdar-html_compression.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/webdar-html_compression_params.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/webdar-html_crypto_algo.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/webdar-html_datetime.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/webdar-html_demo.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/webdar-html_derouleur.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/webdar-html_dir_tree.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/webdar-html_disconnect.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/webdar-html_div.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/webdar-html_double_button.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/webdar-html_entrepot.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/webdar-html_entrepot_landing.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/webdar-html_error.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/webdar-html_focus.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/webdar-html_form.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/webdar-html_form_dynamic_table.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/webdar-html_form_fieldset.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/webdar-html_form_gnupg_list.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/webdar-html_form_ignore_as_symlink.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/webdar-html_form_input.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/webdar-html_form_input_file.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/webdar-html_form_input_unit.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/webdar-html_form_mask_bool.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/webdar-html_form_mask_expression.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/webdar-html_form_mask_file.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/webdar-html_form_mask_subdir.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/webdar-html_form_overwrite_action.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/webdar-html_form_overwrite_base_criterium.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/webdar-html_form_overwrite_chain_action.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/webdar-html_form_overwrite_chain_cell.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/webdar-html_form_overwrite_combining_criterium.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/webdar-html_form_overwrite_conditional_action.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/webdar-html_form_overwrite_constant_action.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/webdar-html_form_radio.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/webdar-html_form_same_fs.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/webdar-html_form_select.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/webdar-html_form_sig_block_size.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/webdar-html_fsa_scope.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/webdar-html_hash_algo.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/webdar-html_hr.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/webdar-html_image.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/webdar-html_label.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/webdar-html_legend.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/webdar-html_level.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/webdar-html_libdar_running_page.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/webdar-html_libdar_running_popup.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/webdar-html_listing_page.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/webdar-html_mask.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/webdar-html_mask_form_filename.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/webdar-html_mask_form_path.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/webdar-html_menu.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/webdar-html_options_compare.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/webdar-html_options_create.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/webdar-html_options_extract.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/webdar-html_options_isolate.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/webdar-html_options_list.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/webdar-html_options_merge.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/webdar-html_options_read.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/webdar-html_options_repair.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/webdar-html_options_test.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/webdar-html_over_guichet.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/webdar-html_page.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/webdar-html_popup.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/webdar-html_select_file.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/webdar-html_size_unit.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/webdar-html_slicing.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/webdar-html_span.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/webdar-html_static_url.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/webdar-html_statistics.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/webdar-html_summary_page.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/webdar-html_table.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/webdar-html_tabs.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/webdar-html_text.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/webdar-html_tooltip.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/webdar-html_url.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/webdar-html_version.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/webdar-html_void.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/webdar-html_web_user_interaction.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/webdar-html_yes_no_box.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/webdar-jsoner.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/webdar-listener.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/webdar-parser.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/webdar-proto_connexion.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/webdar-reference.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/webdar-request.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/webdar-saisie.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/webdar-server.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/webdar-server_pool.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/webdar-session.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/webdar-ssl_connexion.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/webdar-ssl_context.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/webdar-static_object.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/webdar-static_object_library.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/webdar-tokens.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/webdar-uri.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/webdar-user_interface.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/webdar-web_user_interaction.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/webdar-webdar.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/webdar-webdar_css_style.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/webdar-webdar_tools.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/webdar_static-actor.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/webdar_static-answer.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/webdar_static-archive_compare.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/webdar_static-archive_create.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/webdar_static-archive_init_list.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/webdar_static-archive_isolate.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/webdar_static-archive_merge.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/webdar_static-archive_repair.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/webdar_static-archive_restore.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/webdar_static-archive_test.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/webdar_static-base64.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/webdar_static-bibliotheque.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/webdar_static-bibliotheque_subconfig.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/webdar_static-body_builder.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/webdar_static-central_report.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/webdar_static-challenge.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/webdar_static-chemin.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/webdar_static-choose.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/webdar_static-connexion.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/webdar_static-css.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/webdar_static-css_class.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/webdar_static-css_class_group.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/webdar_static-css_library.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/webdar_static-css_property.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/webdar_static-date.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/webdar_static-disconnected_page.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/webdar_static-environment.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/webdar_static-error_page.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/webdar_static-events.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/webdar_static-exceptions.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/webdar_static-guichet.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/webdar_static-html_aiguille.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/webdar_static-html_archive_compare.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/webdar_static-html_archive_create.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/webdar_static-html_archive_extract.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/webdar_static-html_archive_isolate.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/webdar_static-html_archive_merge.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/webdar_static-html_archive_read.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/webdar_static-html_archive_repair.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/webdar_static-html_bibliotheque.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/webdar_static-html_button.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/webdar_static-html_ciphering.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/webdar_static-html_comparison_fields.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/webdar_static-html_compression.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/webdar_static-html_compression_params.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/webdar_static-html_crypto_algo.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/webdar_static-html_datetime.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/webdar_static-html_demo.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/webdar_static-html_derouleur.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/webdar_static-html_dir_tree.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/webdar_static-html_disconnect.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/webdar_static-html_div.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/webdar_static-html_double_button.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/webdar_static-html_entrepot.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/webdar_static-html_entrepot_landing.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/webdar_static-html_error.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/webdar_static-html_focus.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/webdar_static-html_form.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/webdar_static-html_form_dynamic_table.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/webdar_static-html_form_fieldset.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/webdar_static-html_form_gnupg_list.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/webdar_static-html_form_ignore_as_symlink.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/webdar_static-html_form_input.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/webdar_static-html_form_input_file.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/webdar_static-html_form_input_unit.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/webdar_static-html_form_mask_bool.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/webdar_static-html_form_mask_expression.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/webdar_static-html_form_mask_file.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/webdar_static-html_form_mask_subdir.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/webdar_static-html_form_overwrite_action.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/webdar_static-html_form_overwrite_base_criterium.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/webdar_static-html_form_overwrite_chain_action.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/webdar_static-html_form_overwrite_chain_cell.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/webdar_static-html_form_overwrite_combining_criterium.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/webdar_static-html_form_overwrite_conditional_action.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/webdar_static-html_form_overwrite_constant_action.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/webdar_static-html_form_radio.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/webdar_static-html_form_same_fs.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/webdar_static-html_form_select.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/webdar_static-html_form_sig_block_size.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/webdar_static-html_fsa_scope.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/webdar_static-html_hash_algo.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/webdar_static-html_hr.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/webdar_static-html_image.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/webdar_static-html_label.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/webdar_static-html_legend.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/webdar_static-html_level.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/webdar_static-html_libdar_running_page.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/webdar_static-html_libdar_running_popup.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/webdar_static-html_listing_page.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/webdar_static-html_mask.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/webdar_static-html_mask_form_filename.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/webdar_static-html_mask_form_path.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/webdar_static-html_menu.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/webdar_static-html_options_compare.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/webdar_static-html_options_create.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/webdar_static-html_options_extract.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/webdar_static-html_options_isolate.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/webdar_static-html_options_list.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/webdar_static-html_options_merge.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/webdar_static-html_options_read.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/webdar_static-html_options_repair.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/webdar_static-html_options_test.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/webdar_static-html_over_guichet.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/webdar_static-html_page.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/webdar_static-html_popup.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/webdar_static-html_select_file.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/webdar_static-html_size_unit.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/webdar_static-html_slicing.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/webdar_static-html_span.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/webdar_static-html_static_url.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/webdar_static-html_statistics.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/webdar_static-html_summary_page.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/webdar_static-html_table.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/webdar_static-html_tabs.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/webdar_static-html_text.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/webdar_static-html_tooltip.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/webdar_static-html_url.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/webdar_static-html_version.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/webdar_static-html_void.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/webdar_static-html_web_user_interaction.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/webdar_static-html_yes_no_box.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/webdar_static-jsoner.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/webdar_static-listener.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/webdar_static-parser.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/webdar_static-proto_connexion.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/webdar_static-reference.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/webdar_static-request.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/webdar_static-saisie.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/webdar_static-server.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/webdar_static-server_pool.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/webdar_static-session.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/webdar_static-ssl_connexion.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/webdar_static-ssl_context.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/webdar_static-static_object.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/webdar_static-static_object_library.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/webdar_static-tokens.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/webdar_static-uri.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/webdar_static-user_interface.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/webdar_static-web_user_interaction.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/webdar_static-webdar.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/webdar_static-webdar_css_style.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/webdar_static-webdar_tools.Po@am__quote@ # am--include-marker $(am__depfiles_remade): @$(MKDIR_P) $(@D) @echo '# dummy' >$@-t && $(am__mv) $@-t $@ am--depfiles: $(am__depfiles_remade) .cpp.o: @am__fastdepCXX_TRUE@ $(AM_V_CXX)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.o$$||'`;\ @am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\ @am__fastdepCXX_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXXCOMPILE) -c -o $@ $< .cpp.obj: @am__fastdepCXX_TRUE@ $(AM_V_CXX)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.obj$$||'`;\ @am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ `$(CYGPATH_W) '$<'` &&\ @am__fastdepCXX_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .cpp.lo: @am__fastdepCXX_TRUE@ $(AM_V_CXX)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.lo$$||'`;\ @am__fastdepCXX_TRUE@ $(LTCXXCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\ @am__fastdepCXX_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Plo @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LTCXXCOMPILE) -c -o $@ $< webdar-central_report.o: central_report.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar-central_report.o -MD -MP -MF $(DEPDIR)/webdar-central_report.Tpo -c -o webdar-central_report.o `test -f 'central_report.cpp' || echo '$(srcdir)/'`central_report.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar-central_report.Tpo $(DEPDIR)/webdar-central_report.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='central_report.cpp' object='webdar-central_report.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar-central_report.o `test -f 'central_report.cpp' || echo '$(srcdir)/'`central_report.cpp webdar-central_report.obj: central_report.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar-central_report.obj -MD -MP -MF $(DEPDIR)/webdar-central_report.Tpo -c -o webdar-central_report.obj `if test -f 'central_report.cpp'; then $(CYGPATH_W) 'central_report.cpp'; else $(CYGPATH_W) '$(srcdir)/central_report.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar-central_report.Tpo $(DEPDIR)/webdar-central_report.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='central_report.cpp' object='webdar-central_report.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar-central_report.obj `if test -f 'central_report.cpp'; then $(CYGPATH_W) 'central_report.cpp'; else $(CYGPATH_W) '$(srcdir)/central_report.cpp'; fi` webdar-proto_connexion.o: proto_connexion.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar-proto_connexion.o -MD -MP -MF $(DEPDIR)/webdar-proto_connexion.Tpo -c -o webdar-proto_connexion.o `test -f 'proto_connexion.cpp' || echo '$(srcdir)/'`proto_connexion.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar-proto_connexion.Tpo $(DEPDIR)/webdar-proto_connexion.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='proto_connexion.cpp' object='webdar-proto_connexion.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar-proto_connexion.o `test -f 'proto_connexion.cpp' || echo '$(srcdir)/'`proto_connexion.cpp webdar-proto_connexion.obj: proto_connexion.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar-proto_connexion.obj -MD -MP -MF $(DEPDIR)/webdar-proto_connexion.Tpo -c -o webdar-proto_connexion.obj `if test -f 'proto_connexion.cpp'; then $(CYGPATH_W) 'proto_connexion.cpp'; else $(CYGPATH_W) '$(srcdir)/proto_connexion.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar-proto_connexion.Tpo $(DEPDIR)/webdar-proto_connexion.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='proto_connexion.cpp' object='webdar-proto_connexion.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar-proto_connexion.obj `if test -f 'proto_connexion.cpp'; then $(CYGPATH_W) 'proto_connexion.cpp'; else $(CYGPATH_W) '$(srcdir)/proto_connexion.cpp'; fi` webdar-connexion.o: connexion.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar-connexion.o -MD -MP -MF $(DEPDIR)/webdar-connexion.Tpo -c -o webdar-connexion.o `test -f 'connexion.cpp' || echo '$(srcdir)/'`connexion.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar-connexion.Tpo $(DEPDIR)/webdar-connexion.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='connexion.cpp' object='webdar-connexion.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar-connexion.o `test -f 'connexion.cpp' || echo '$(srcdir)/'`connexion.cpp webdar-connexion.obj: connexion.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar-connexion.obj -MD -MP -MF $(DEPDIR)/webdar-connexion.Tpo -c -o webdar-connexion.obj `if test -f 'connexion.cpp'; then $(CYGPATH_W) 'connexion.cpp'; else $(CYGPATH_W) '$(srcdir)/connexion.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar-connexion.Tpo $(DEPDIR)/webdar-connexion.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='connexion.cpp' object='webdar-connexion.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar-connexion.obj `if test -f 'connexion.cpp'; then $(CYGPATH_W) 'connexion.cpp'; else $(CYGPATH_W) '$(srcdir)/connexion.cpp'; fi` webdar-ssl_connexion.o: ssl_connexion.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar-ssl_connexion.o -MD -MP -MF $(DEPDIR)/webdar-ssl_connexion.Tpo -c -o webdar-ssl_connexion.o `test -f 'ssl_connexion.cpp' || echo '$(srcdir)/'`ssl_connexion.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar-ssl_connexion.Tpo $(DEPDIR)/webdar-ssl_connexion.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='ssl_connexion.cpp' object='webdar-ssl_connexion.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar-ssl_connexion.o `test -f 'ssl_connexion.cpp' || echo '$(srcdir)/'`ssl_connexion.cpp webdar-ssl_connexion.obj: ssl_connexion.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar-ssl_connexion.obj -MD -MP -MF $(DEPDIR)/webdar-ssl_connexion.Tpo -c -o webdar-ssl_connexion.obj `if test -f 'ssl_connexion.cpp'; then $(CYGPATH_W) 'ssl_connexion.cpp'; else $(CYGPATH_W) '$(srcdir)/ssl_connexion.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar-ssl_connexion.Tpo $(DEPDIR)/webdar-ssl_connexion.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='ssl_connexion.cpp' object='webdar-ssl_connexion.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar-ssl_connexion.obj `if test -f 'ssl_connexion.cpp'; then $(CYGPATH_W) 'ssl_connexion.cpp'; else $(CYGPATH_W) '$(srcdir)/ssl_connexion.cpp'; fi` webdar-ssl_context.o: ssl_context.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar-ssl_context.o -MD -MP -MF $(DEPDIR)/webdar-ssl_context.Tpo -c -o webdar-ssl_context.o `test -f 'ssl_context.cpp' || echo '$(srcdir)/'`ssl_context.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar-ssl_context.Tpo $(DEPDIR)/webdar-ssl_context.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='ssl_context.cpp' object='webdar-ssl_context.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar-ssl_context.o `test -f 'ssl_context.cpp' || echo '$(srcdir)/'`ssl_context.cpp webdar-ssl_context.obj: ssl_context.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar-ssl_context.obj -MD -MP -MF $(DEPDIR)/webdar-ssl_context.Tpo -c -o webdar-ssl_context.obj `if test -f 'ssl_context.cpp'; then $(CYGPATH_W) 'ssl_context.cpp'; else $(CYGPATH_W) '$(srcdir)/ssl_context.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar-ssl_context.Tpo $(DEPDIR)/webdar-ssl_context.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='ssl_context.cpp' object='webdar-ssl_context.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar-ssl_context.obj `if test -f 'ssl_context.cpp'; then $(CYGPATH_W) 'ssl_context.cpp'; else $(CYGPATH_W) '$(srcdir)/ssl_context.cpp'; fi` webdar-exceptions.o: exceptions.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar-exceptions.o -MD -MP -MF $(DEPDIR)/webdar-exceptions.Tpo -c -o webdar-exceptions.o `test -f 'exceptions.cpp' || echo '$(srcdir)/'`exceptions.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar-exceptions.Tpo $(DEPDIR)/webdar-exceptions.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='exceptions.cpp' object='webdar-exceptions.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar-exceptions.o `test -f 'exceptions.cpp' || echo '$(srcdir)/'`exceptions.cpp webdar-exceptions.obj: exceptions.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar-exceptions.obj -MD -MP -MF $(DEPDIR)/webdar-exceptions.Tpo -c -o webdar-exceptions.obj `if test -f 'exceptions.cpp'; then $(CYGPATH_W) 'exceptions.cpp'; else $(CYGPATH_W) '$(srcdir)/exceptions.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar-exceptions.Tpo $(DEPDIR)/webdar-exceptions.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='exceptions.cpp' object='webdar-exceptions.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar-exceptions.obj `if test -f 'exceptions.cpp'; then $(CYGPATH_W) 'exceptions.cpp'; else $(CYGPATH_W) '$(srcdir)/exceptions.cpp'; fi` webdar-listener.o: listener.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar-listener.o -MD -MP -MF $(DEPDIR)/webdar-listener.Tpo -c -o webdar-listener.o `test -f 'listener.cpp' || echo '$(srcdir)/'`listener.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar-listener.Tpo $(DEPDIR)/webdar-listener.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='listener.cpp' object='webdar-listener.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar-listener.o `test -f 'listener.cpp' || echo '$(srcdir)/'`listener.cpp webdar-listener.obj: listener.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar-listener.obj -MD -MP -MF $(DEPDIR)/webdar-listener.Tpo -c -o webdar-listener.obj `if test -f 'listener.cpp'; then $(CYGPATH_W) 'listener.cpp'; else $(CYGPATH_W) '$(srcdir)/listener.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar-listener.Tpo $(DEPDIR)/webdar-listener.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='listener.cpp' object='webdar-listener.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar-listener.obj `if test -f 'listener.cpp'; then $(CYGPATH_W) 'listener.cpp'; else $(CYGPATH_W) '$(srcdir)/listener.cpp'; fi` webdar-parser.o: parser.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar-parser.o -MD -MP -MF $(DEPDIR)/webdar-parser.Tpo -c -o webdar-parser.o `test -f 'parser.cpp' || echo '$(srcdir)/'`parser.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar-parser.Tpo $(DEPDIR)/webdar-parser.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='parser.cpp' object='webdar-parser.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar-parser.o `test -f 'parser.cpp' || echo '$(srcdir)/'`parser.cpp webdar-parser.obj: parser.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar-parser.obj -MD -MP -MF $(DEPDIR)/webdar-parser.Tpo -c -o webdar-parser.obj `if test -f 'parser.cpp'; then $(CYGPATH_W) 'parser.cpp'; else $(CYGPATH_W) '$(srcdir)/parser.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar-parser.Tpo $(DEPDIR)/webdar-parser.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='parser.cpp' object='webdar-parser.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar-parser.obj `if test -f 'parser.cpp'; then $(CYGPATH_W) 'parser.cpp'; else $(CYGPATH_W) '$(srcdir)/parser.cpp'; fi` webdar-webdar_tools.o: webdar_tools.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar-webdar_tools.o -MD -MP -MF $(DEPDIR)/webdar-webdar_tools.Tpo -c -o webdar-webdar_tools.o `test -f 'webdar_tools.cpp' || echo '$(srcdir)/'`webdar_tools.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar-webdar_tools.Tpo $(DEPDIR)/webdar-webdar_tools.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='webdar_tools.cpp' object='webdar-webdar_tools.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar-webdar_tools.o `test -f 'webdar_tools.cpp' || echo '$(srcdir)/'`webdar_tools.cpp webdar-webdar_tools.obj: webdar_tools.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar-webdar_tools.obj -MD -MP -MF $(DEPDIR)/webdar-webdar_tools.Tpo -c -o webdar-webdar_tools.obj `if test -f 'webdar_tools.cpp'; then $(CYGPATH_W) 'webdar_tools.cpp'; else $(CYGPATH_W) '$(srcdir)/webdar_tools.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar-webdar_tools.Tpo $(DEPDIR)/webdar-webdar_tools.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='webdar_tools.cpp' object='webdar-webdar_tools.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar-webdar_tools.obj `if test -f 'webdar_tools.cpp'; then $(CYGPATH_W) 'webdar_tools.cpp'; else $(CYGPATH_W) '$(srcdir)/webdar_tools.cpp'; fi` webdar-server.o: server.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar-server.o -MD -MP -MF $(DEPDIR)/webdar-server.Tpo -c -o webdar-server.o `test -f 'server.cpp' || echo '$(srcdir)/'`server.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar-server.Tpo $(DEPDIR)/webdar-server.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='server.cpp' object='webdar-server.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar-server.o `test -f 'server.cpp' || echo '$(srcdir)/'`server.cpp webdar-server.obj: server.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar-server.obj -MD -MP -MF $(DEPDIR)/webdar-server.Tpo -c -o webdar-server.obj `if test -f 'server.cpp'; then $(CYGPATH_W) 'server.cpp'; else $(CYGPATH_W) '$(srcdir)/server.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar-server.Tpo $(DEPDIR)/webdar-server.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='server.cpp' object='webdar-server.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar-server.obj `if test -f 'server.cpp'; then $(CYGPATH_W) 'server.cpp'; else $(CYGPATH_W) '$(srcdir)/server.cpp'; fi` webdar-uri.o: uri.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar-uri.o -MD -MP -MF $(DEPDIR)/webdar-uri.Tpo -c -o webdar-uri.o `test -f 'uri.cpp' || echo '$(srcdir)/'`uri.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar-uri.Tpo $(DEPDIR)/webdar-uri.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='uri.cpp' object='webdar-uri.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar-uri.o `test -f 'uri.cpp' || echo '$(srcdir)/'`uri.cpp webdar-uri.obj: uri.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar-uri.obj -MD -MP -MF $(DEPDIR)/webdar-uri.Tpo -c -o webdar-uri.obj `if test -f 'uri.cpp'; then $(CYGPATH_W) 'uri.cpp'; else $(CYGPATH_W) '$(srcdir)/uri.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar-uri.Tpo $(DEPDIR)/webdar-uri.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='uri.cpp' object='webdar-uri.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar-uri.obj `if test -f 'uri.cpp'; then $(CYGPATH_W) 'uri.cpp'; else $(CYGPATH_W) '$(srcdir)/uri.cpp'; fi` webdar-session.o: session.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar-session.o -MD -MP -MF $(DEPDIR)/webdar-session.Tpo -c -o webdar-session.o `test -f 'session.cpp' || echo '$(srcdir)/'`session.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar-session.Tpo $(DEPDIR)/webdar-session.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='session.cpp' object='webdar-session.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar-session.o `test -f 'session.cpp' || echo '$(srcdir)/'`session.cpp webdar-session.obj: session.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar-session.obj -MD -MP -MF $(DEPDIR)/webdar-session.Tpo -c -o webdar-session.obj `if test -f 'session.cpp'; then $(CYGPATH_W) 'session.cpp'; else $(CYGPATH_W) '$(srcdir)/session.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar-session.Tpo $(DEPDIR)/webdar-session.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='session.cpp' object='webdar-session.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar-session.obj `if test -f 'session.cpp'; then $(CYGPATH_W) 'session.cpp'; else $(CYGPATH_W) '$(srcdir)/session.cpp'; fi` webdar-date.o: date.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar-date.o -MD -MP -MF $(DEPDIR)/webdar-date.Tpo -c -o webdar-date.o `test -f 'date.cpp' || echo '$(srcdir)/'`date.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar-date.Tpo $(DEPDIR)/webdar-date.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='date.cpp' object='webdar-date.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar-date.o `test -f 'date.cpp' || echo '$(srcdir)/'`date.cpp webdar-date.obj: date.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar-date.obj -MD -MP -MF $(DEPDIR)/webdar-date.Tpo -c -o webdar-date.obj `if test -f 'date.cpp'; then $(CYGPATH_W) 'date.cpp'; else $(CYGPATH_W) '$(srcdir)/date.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar-date.Tpo $(DEPDIR)/webdar-date.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='date.cpp' object='webdar-date.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar-date.obj `if test -f 'date.cpp'; then $(CYGPATH_W) 'date.cpp'; else $(CYGPATH_W) '$(srcdir)/date.cpp'; fi` webdar-request.o: request.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar-request.o -MD -MP -MF $(DEPDIR)/webdar-request.Tpo -c -o webdar-request.o `test -f 'request.cpp' || echo '$(srcdir)/'`request.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar-request.Tpo $(DEPDIR)/webdar-request.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='request.cpp' object='webdar-request.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar-request.o `test -f 'request.cpp' || echo '$(srcdir)/'`request.cpp webdar-request.obj: request.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar-request.obj -MD -MP -MF $(DEPDIR)/webdar-request.Tpo -c -o webdar-request.obj `if test -f 'request.cpp'; then $(CYGPATH_W) 'request.cpp'; else $(CYGPATH_W) '$(srcdir)/request.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar-request.Tpo $(DEPDIR)/webdar-request.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='request.cpp' object='webdar-request.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar-request.obj `if test -f 'request.cpp'; then $(CYGPATH_W) 'request.cpp'; else $(CYGPATH_W) '$(srcdir)/request.cpp'; fi` webdar-answer.o: answer.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar-answer.o -MD -MP -MF $(DEPDIR)/webdar-answer.Tpo -c -o webdar-answer.o `test -f 'answer.cpp' || echo '$(srcdir)/'`answer.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar-answer.Tpo $(DEPDIR)/webdar-answer.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='answer.cpp' object='webdar-answer.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar-answer.o `test -f 'answer.cpp' || echo '$(srcdir)/'`answer.cpp webdar-answer.obj: answer.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar-answer.obj -MD -MP -MF $(DEPDIR)/webdar-answer.Tpo -c -o webdar-answer.obj `if test -f 'answer.cpp'; then $(CYGPATH_W) 'answer.cpp'; else $(CYGPATH_W) '$(srcdir)/answer.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar-answer.Tpo $(DEPDIR)/webdar-answer.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='answer.cpp' object='webdar-answer.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar-answer.obj `if test -f 'answer.cpp'; then $(CYGPATH_W) 'answer.cpp'; else $(CYGPATH_W) '$(srcdir)/answer.cpp'; fi` webdar-tokens.o: tokens.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar-tokens.o -MD -MP -MF $(DEPDIR)/webdar-tokens.Tpo -c -o webdar-tokens.o `test -f 'tokens.cpp' || echo '$(srcdir)/'`tokens.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar-tokens.Tpo $(DEPDIR)/webdar-tokens.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='tokens.cpp' object='webdar-tokens.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar-tokens.o `test -f 'tokens.cpp' || echo '$(srcdir)/'`tokens.cpp webdar-tokens.obj: tokens.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar-tokens.obj -MD -MP -MF $(DEPDIR)/webdar-tokens.Tpo -c -o webdar-tokens.obj `if test -f 'tokens.cpp'; then $(CYGPATH_W) 'tokens.cpp'; else $(CYGPATH_W) '$(srcdir)/tokens.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar-tokens.Tpo $(DEPDIR)/webdar-tokens.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='tokens.cpp' object='webdar-tokens.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar-tokens.obj `if test -f 'tokens.cpp'; then $(CYGPATH_W) 'tokens.cpp'; else $(CYGPATH_W) '$(srcdir)/tokens.cpp'; fi` webdar-base64.o: base64.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar-base64.o -MD -MP -MF $(DEPDIR)/webdar-base64.Tpo -c -o webdar-base64.o `test -f 'base64.cpp' || echo '$(srcdir)/'`base64.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar-base64.Tpo $(DEPDIR)/webdar-base64.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='base64.cpp' object='webdar-base64.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar-base64.o `test -f 'base64.cpp' || echo '$(srcdir)/'`base64.cpp webdar-base64.obj: base64.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar-base64.obj -MD -MP -MF $(DEPDIR)/webdar-base64.Tpo -c -o webdar-base64.obj `if test -f 'base64.cpp'; then $(CYGPATH_W) 'base64.cpp'; else $(CYGPATH_W) '$(srcdir)/base64.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar-base64.Tpo $(DEPDIR)/webdar-base64.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='base64.cpp' object='webdar-base64.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar-base64.obj `if test -f 'base64.cpp'; then $(CYGPATH_W) 'base64.cpp'; else $(CYGPATH_W) '$(srcdir)/base64.cpp'; fi` webdar-challenge.o: challenge.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar-challenge.o -MD -MP -MF $(DEPDIR)/webdar-challenge.Tpo -c -o webdar-challenge.o `test -f 'challenge.cpp' || echo '$(srcdir)/'`challenge.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar-challenge.Tpo $(DEPDIR)/webdar-challenge.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='challenge.cpp' object='webdar-challenge.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar-challenge.o `test -f 'challenge.cpp' || echo '$(srcdir)/'`challenge.cpp webdar-challenge.obj: challenge.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar-challenge.obj -MD -MP -MF $(DEPDIR)/webdar-challenge.Tpo -c -o webdar-challenge.obj `if test -f 'challenge.cpp'; then $(CYGPATH_W) 'challenge.cpp'; else $(CYGPATH_W) '$(srcdir)/challenge.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar-challenge.Tpo $(DEPDIR)/webdar-challenge.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='challenge.cpp' object='webdar-challenge.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar-challenge.obj `if test -f 'challenge.cpp'; then $(CYGPATH_W) 'challenge.cpp'; else $(CYGPATH_W) '$(srcdir)/challenge.cpp'; fi` webdar-choose.o: choose.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar-choose.o -MD -MP -MF $(DEPDIR)/webdar-choose.Tpo -c -o webdar-choose.o `test -f 'choose.cpp' || echo '$(srcdir)/'`choose.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar-choose.Tpo $(DEPDIR)/webdar-choose.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='choose.cpp' object='webdar-choose.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar-choose.o `test -f 'choose.cpp' || echo '$(srcdir)/'`choose.cpp webdar-choose.obj: choose.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar-choose.obj -MD -MP -MF $(DEPDIR)/webdar-choose.Tpo -c -o webdar-choose.obj `if test -f 'choose.cpp'; then $(CYGPATH_W) 'choose.cpp'; else $(CYGPATH_W) '$(srcdir)/choose.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar-choose.Tpo $(DEPDIR)/webdar-choose.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='choose.cpp' object='webdar-choose.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar-choose.obj `if test -f 'choose.cpp'; then $(CYGPATH_W) 'choose.cpp'; else $(CYGPATH_W) '$(srcdir)/choose.cpp'; fi` webdar-css.o: css.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar-css.o -MD -MP -MF $(DEPDIR)/webdar-css.Tpo -c -o webdar-css.o `test -f 'css.cpp' || echo '$(srcdir)/'`css.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar-css.Tpo $(DEPDIR)/webdar-css.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='css.cpp' object='webdar-css.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar-css.o `test -f 'css.cpp' || echo '$(srcdir)/'`css.cpp webdar-css.obj: css.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar-css.obj -MD -MP -MF $(DEPDIR)/webdar-css.Tpo -c -o webdar-css.obj `if test -f 'css.cpp'; then $(CYGPATH_W) 'css.cpp'; else $(CYGPATH_W) '$(srcdir)/css.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar-css.Tpo $(DEPDIR)/webdar-css.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='css.cpp' object='webdar-css.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar-css.obj `if test -f 'css.cpp'; then $(CYGPATH_W) 'css.cpp'; else $(CYGPATH_W) '$(srcdir)/css.cpp'; fi` webdar-css_library.o: css_library.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar-css_library.o -MD -MP -MF $(DEPDIR)/webdar-css_library.Tpo -c -o webdar-css_library.o `test -f 'css_library.cpp' || echo '$(srcdir)/'`css_library.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar-css_library.Tpo $(DEPDIR)/webdar-css_library.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='css_library.cpp' object='webdar-css_library.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar-css_library.o `test -f 'css_library.cpp' || echo '$(srcdir)/'`css_library.cpp webdar-css_library.obj: css_library.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar-css_library.obj -MD -MP -MF $(DEPDIR)/webdar-css_library.Tpo -c -o webdar-css_library.obj `if test -f 'css_library.cpp'; then $(CYGPATH_W) 'css_library.cpp'; else $(CYGPATH_W) '$(srcdir)/css_library.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar-css_library.Tpo $(DEPDIR)/webdar-css_library.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='css_library.cpp' object='webdar-css_library.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar-css_library.obj `if test -f 'css_library.cpp'; then $(CYGPATH_W) 'css_library.cpp'; else $(CYGPATH_W) '$(srcdir)/css_library.cpp'; fi` webdar-html_text.o: html_text.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar-html_text.o -MD -MP -MF $(DEPDIR)/webdar-html_text.Tpo -c -o webdar-html_text.o `test -f 'html_text.cpp' || echo '$(srcdir)/'`html_text.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar-html_text.Tpo $(DEPDIR)/webdar-html_text.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='html_text.cpp' object='webdar-html_text.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar-html_text.o `test -f 'html_text.cpp' || echo '$(srcdir)/'`html_text.cpp webdar-html_text.obj: html_text.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar-html_text.obj -MD -MP -MF $(DEPDIR)/webdar-html_text.Tpo -c -o webdar-html_text.obj `if test -f 'html_text.cpp'; then $(CYGPATH_W) 'html_text.cpp'; else $(CYGPATH_W) '$(srcdir)/html_text.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar-html_text.Tpo $(DEPDIR)/webdar-html_text.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='html_text.cpp' object='webdar-html_text.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar-html_text.obj `if test -f 'html_text.cpp'; then $(CYGPATH_W) 'html_text.cpp'; else $(CYGPATH_W) '$(srcdir)/html_text.cpp'; fi` webdar-html_page.o: html_page.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar-html_page.o -MD -MP -MF $(DEPDIR)/webdar-html_page.Tpo -c -o webdar-html_page.o `test -f 'html_page.cpp' || echo '$(srcdir)/'`html_page.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar-html_page.Tpo $(DEPDIR)/webdar-html_page.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='html_page.cpp' object='webdar-html_page.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar-html_page.o `test -f 'html_page.cpp' || echo '$(srcdir)/'`html_page.cpp webdar-html_page.obj: html_page.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar-html_page.obj -MD -MP -MF $(DEPDIR)/webdar-html_page.Tpo -c -o webdar-html_page.obj `if test -f 'html_page.cpp'; then $(CYGPATH_W) 'html_page.cpp'; else $(CYGPATH_W) '$(srcdir)/html_page.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar-html_page.Tpo $(DEPDIR)/webdar-html_page.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='html_page.cpp' object='webdar-html_page.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar-html_page.obj `if test -f 'html_page.cpp'; then $(CYGPATH_W) 'html_page.cpp'; else $(CYGPATH_W) '$(srcdir)/html_page.cpp'; fi` webdar-html_table.o: html_table.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar-html_table.o -MD -MP -MF $(DEPDIR)/webdar-html_table.Tpo -c -o webdar-html_table.o `test -f 'html_table.cpp' || echo '$(srcdir)/'`html_table.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar-html_table.Tpo $(DEPDIR)/webdar-html_table.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='html_table.cpp' object='webdar-html_table.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar-html_table.o `test -f 'html_table.cpp' || echo '$(srcdir)/'`html_table.cpp webdar-html_table.obj: html_table.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar-html_table.obj -MD -MP -MF $(DEPDIR)/webdar-html_table.Tpo -c -o webdar-html_table.obj `if test -f 'html_table.cpp'; then $(CYGPATH_W) 'html_table.cpp'; else $(CYGPATH_W) '$(srcdir)/html_table.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar-html_table.Tpo $(DEPDIR)/webdar-html_table.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='html_table.cpp' object='webdar-html_table.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar-html_table.obj `if test -f 'html_table.cpp'; then $(CYGPATH_W) 'html_table.cpp'; else $(CYGPATH_W) '$(srcdir)/html_table.cpp'; fi` webdar-html_image.o: html_image.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar-html_image.o -MD -MP -MF $(DEPDIR)/webdar-html_image.Tpo -c -o webdar-html_image.o `test -f 'html_image.cpp' || echo '$(srcdir)/'`html_image.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar-html_image.Tpo $(DEPDIR)/webdar-html_image.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='html_image.cpp' object='webdar-html_image.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar-html_image.o `test -f 'html_image.cpp' || echo '$(srcdir)/'`html_image.cpp webdar-html_image.obj: html_image.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar-html_image.obj -MD -MP -MF $(DEPDIR)/webdar-html_image.Tpo -c -o webdar-html_image.obj `if test -f 'html_image.cpp'; then $(CYGPATH_W) 'html_image.cpp'; else $(CYGPATH_W) '$(srcdir)/html_image.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar-html_image.Tpo $(DEPDIR)/webdar-html_image.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='html_image.cpp' object='webdar-html_image.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar-html_image.obj `if test -f 'html_image.cpp'; then $(CYGPATH_W) 'html_image.cpp'; else $(CYGPATH_W) '$(srcdir)/html_image.cpp'; fi` webdar-html_static_url.o: html_static_url.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar-html_static_url.o -MD -MP -MF $(DEPDIR)/webdar-html_static_url.Tpo -c -o webdar-html_static_url.o `test -f 'html_static_url.cpp' || echo '$(srcdir)/'`html_static_url.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar-html_static_url.Tpo $(DEPDIR)/webdar-html_static_url.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='html_static_url.cpp' object='webdar-html_static_url.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar-html_static_url.o `test -f 'html_static_url.cpp' || echo '$(srcdir)/'`html_static_url.cpp webdar-html_static_url.obj: html_static_url.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar-html_static_url.obj -MD -MP -MF $(DEPDIR)/webdar-html_static_url.Tpo -c -o webdar-html_static_url.obj `if test -f 'html_static_url.cpp'; then $(CYGPATH_W) 'html_static_url.cpp'; else $(CYGPATH_W) '$(srcdir)/html_static_url.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar-html_static_url.Tpo $(DEPDIR)/webdar-html_static_url.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='html_static_url.cpp' object='webdar-html_static_url.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar-html_static_url.obj `if test -f 'html_static_url.cpp'; then $(CYGPATH_W) 'html_static_url.cpp'; else $(CYGPATH_W) '$(srcdir)/html_static_url.cpp'; fi` webdar-html_url.o: html_url.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar-html_url.o -MD -MP -MF $(DEPDIR)/webdar-html_url.Tpo -c -o webdar-html_url.o `test -f 'html_url.cpp' || echo '$(srcdir)/'`html_url.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar-html_url.Tpo $(DEPDIR)/webdar-html_url.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='html_url.cpp' object='webdar-html_url.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar-html_url.o `test -f 'html_url.cpp' || echo '$(srcdir)/'`html_url.cpp webdar-html_url.obj: html_url.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar-html_url.obj -MD -MP -MF $(DEPDIR)/webdar-html_url.Tpo -c -o webdar-html_url.obj `if test -f 'html_url.cpp'; then $(CYGPATH_W) 'html_url.cpp'; else $(CYGPATH_W) '$(srcdir)/html_url.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar-html_url.Tpo $(DEPDIR)/webdar-html_url.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='html_url.cpp' object='webdar-html_url.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar-html_url.obj `if test -f 'html_url.cpp'; then $(CYGPATH_W) 'html_url.cpp'; else $(CYGPATH_W) '$(srcdir)/html_url.cpp'; fi` webdar-error_page.o: error_page.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar-error_page.o -MD -MP -MF $(DEPDIR)/webdar-error_page.Tpo -c -o webdar-error_page.o `test -f 'error_page.cpp' || echo '$(srcdir)/'`error_page.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar-error_page.Tpo $(DEPDIR)/webdar-error_page.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='error_page.cpp' object='webdar-error_page.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar-error_page.o `test -f 'error_page.cpp' || echo '$(srcdir)/'`error_page.cpp webdar-error_page.obj: error_page.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar-error_page.obj -MD -MP -MF $(DEPDIR)/webdar-error_page.Tpo -c -o webdar-error_page.obj `if test -f 'error_page.cpp'; then $(CYGPATH_W) 'error_page.cpp'; else $(CYGPATH_W) '$(srcdir)/error_page.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar-error_page.Tpo $(DEPDIR)/webdar-error_page.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='error_page.cpp' object='webdar-error_page.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar-error_page.obj `if test -f 'error_page.cpp'; then $(CYGPATH_W) 'error_page.cpp'; else $(CYGPATH_W) '$(srcdir)/error_page.cpp'; fi` webdar-html_form.o: html_form.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar-html_form.o -MD -MP -MF $(DEPDIR)/webdar-html_form.Tpo -c -o webdar-html_form.o `test -f 'html_form.cpp' || echo '$(srcdir)/'`html_form.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar-html_form.Tpo $(DEPDIR)/webdar-html_form.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='html_form.cpp' object='webdar-html_form.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar-html_form.o `test -f 'html_form.cpp' || echo '$(srcdir)/'`html_form.cpp webdar-html_form.obj: html_form.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar-html_form.obj -MD -MP -MF $(DEPDIR)/webdar-html_form.Tpo -c -o webdar-html_form.obj `if test -f 'html_form.cpp'; then $(CYGPATH_W) 'html_form.cpp'; else $(CYGPATH_W) '$(srcdir)/html_form.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar-html_form.Tpo $(DEPDIR)/webdar-html_form.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='html_form.cpp' object='webdar-html_form.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar-html_form.obj `if test -f 'html_form.cpp'; then $(CYGPATH_W) 'html_form.cpp'; else $(CYGPATH_W) '$(srcdir)/html_form.cpp'; fi` webdar-html_form_fieldset.o: html_form_fieldset.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar-html_form_fieldset.o -MD -MP -MF $(DEPDIR)/webdar-html_form_fieldset.Tpo -c -o webdar-html_form_fieldset.o `test -f 'html_form_fieldset.cpp' || echo '$(srcdir)/'`html_form_fieldset.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar-html_form_fieldset.Tpo $(DEPDIR)/webdar-html_form_fieldset.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='html_form_fieldset.cpp' object='webdar-html_form_fieldset.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar-html_form_fieldset.o `test -f 'html_form_fieldset.cpp' || echo '$(srcdir)/'`html_form_fieldset.cpp webdar-html_form_fieldset.obj: html_form_fieldset.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar-html_form_fieldset.obj -MD -MP -MF $(DEPDIR)/webdar-html_form_fieldset.Tpo -c -o webdar-html_form_fieldset.obj `if test -f 'html_form_fieldset.cpp'; then $(CYGPATH_W) 'html_form_fieldset.cpp'; else $(CYGPATH_W) '$(srcdir)/html_form_fieldset.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar-html_form_fieldset.Tpo $(DEPDIR)/webdar-html_form_fieldset.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='html_form_fieldset.cpp' object='webdar-html_form_fieldset.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar-html_form_fieldset.obj `if test -f 'html_form_fieldset.cpp'; then $(CYGPATH_W) 'html_form_fieldset.cpp'; else $(CYGPATH_W) '$(srcdir)/html_form_fieldset.cpp'; fi` webdar-html_form_input.o: html_form_input.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar-html_form_input.o -MD -MP -MF $(DEPDIR)/webdar-html_form_input.Tpo -c -o webdar-html_form_input.o `test -f 'html_form_input.cpp' || echo '$(srcdir)/'`html_form_input.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar-html_form_input.Tpo $(DEPDIR)/webdar-html_form_input.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='html_form_input.cpp' object='webdar-html_form_input.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar-html_form_input.o `test -f 'html_form_input.cpp' || echo '$(srcdir)/'`html_form_input.cpp webdar-html_form_input.obj: html_form_input.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar-html_form_input.obj -MD -MP -MF $(DEPDIR)/webdar-html_form_input.Tpo -c -o webdar-html_form_input.obj `if test -f 'html_form_input.cpp'; then $(CYGPATH_W) 'html_form_input.cpp'; else $(CYGPATH_W) '$(srcdir)/html_form_input.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar-html_form_input.Tpo $(DEPDIR)/webdar-html_form_input.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='html_form_input.cpp' object='webdar-html_form_input.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar-html_form_input.obj `if test -f 'html_form_input.cpp'; then $(CYGPATH_W) 'html_form_input.cpp'; else $(CYGPATH_W) '$(srcdir)/html_form_input.cpp'; fi` webdar-html_form_radio.o: html_form_radio.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar-html_form_radio.o -MD -MP -MF $(DEPDIR)/webdar-html_form_radio.Tpo -c -o webdar-html_form_radio.o `test -f 'html_form_radio.cpp' || echo '$(srcdir)/'`html_form_radio.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar-html_form_radio.Tpo $(DEPDIR)/webdar-html_form_radio.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='html_form_radio.cpp' object='webdar-html_form_radio.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar-html_form_radio.o `test -f 'html_form_radio.cpp' || echo '$(srcdir)/'`html_form_radio.cpp webdar-html_form_radio.obj: html_form_radio.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar-html_form_radio.obj -MD -MP -MF $(DEPDIR)/webdar-html_form_radio.Tpo -c -o webdar-html_form_radio.obj `if test -f 'html_form_radio.cpp'; then $(CYGPATH_W) 'html_form_radio.cpp'; else $(CYGPATH_W) '$(srcdir)/html_form_radio.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar-html_form_radio.Tpo $(DEPDIR)/webdar-html_form_radio.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='html_form_radio.cpp' object='webdar-html_form_radio.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar-html_form_radio.obj `if test -f 'html_form_radio.cpp'; then $(CYGPATH_W) 'html_form_radio.cpp'; else $(CYGPATH_W) '$(srcdir)/html_form_radio.cpp'; fi` webdar-html_form_select.o: html_form_select.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar-html_form_select.o -MD -MP -MF $(DEPDIR)/webdar-html_form_select.Tpo -c -o webdar-html_form_select.o `test -f 'html_form_select.cpp' || echo '$(srcdir)/'`html_form_select.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar-html_form_select.Tpo $(DEPDIR)/webdar-html_form_select.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='html_form_select.cpp' object='webdar-html_form_select.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar-html_form_select.o `test -f 'html_form_select.cpp' || echo '$(srcdir)/'`html_form_select.cpp webdar-html_form_select.obj: html_form_select.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar-html_form_select.obj -MD -MP -MF $(DEPDIR)/webdar-html_form_select.Tpo -c -o webdar-html_form_select.obj `if test -f 'html_form_select.cpp'; then $(CYGPATH_W) 'html_form_select.cpp'; else $(CYGPATH_W) '$(srcdir)/html_form_select.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar-html_form_select.Tpo $(DEPDIR)/webdar-html_form_select.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='html_form_select.cpp' object='webdar-html_form_select.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar-html_form_select.obj `if test -f 'html_form_select.cpp'; then $(CYGPATH_W) 'html_form_select.cpp'; else $(CYGPATH_W) '$(srcdir)/html_form_select.cpp'; fi` webdar-body_builder.o: body_builder.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar-body_builder.o -MD -MP -MF $(DEPDIR)/webdar-body_builder.Tpo -c -o webdar-body_builder.o `test -f 'body_builder.cpp' || echo '$(srcdir)/'`body_builder.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar-body_builder.Tpo $(DEPDIR)/webdar-body_builder.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='body_builder.cpp' object='webdar-body_builder.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar-body_builder.o `test -f 'body_builder.cpp' || echo '$(srcdir)/'`body_builder.cpp webdar-body_builder.obj: body_builder.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar-body_builder.obj -MD -MP -MF $(DEPDIR)/webdar-body_builder.Tpo -c -o webdar-body_builder.obj `if test -f 'body_builder.cpp'; then $(CYGPATH_W) 'body_builder.cpp'; else $(CYGPATH_W) '$(srcdir)/body_builder.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar-body_builder.Tpo $(DEPDIR)/webdar-body_builder.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='body_builder.cpp' object='webdar-body_builder.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar-body_builder.obj `if test -f 'body_builder.cpp'; then $(CYGPATH_W) 'body_builder.cpp'; else $(CYGPATH_W) '$(srcdir)/body_builder.cpp'; fi` webdar-chemin.o: chemin.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar-chemin.o -MD -MP -MF $(DEPDIR)/webdar-chemin.Tpo -c -o webdar-chemin.o `test -f 'chemin.cpp' || echo '$(srcdir)/'`chemin.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar-chemin.Tpo $(DEPDIR)/webdar-chemin.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='chemin.cpp' object='webdar-chemin.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar-chemin.o `test -f 'chemin.cpp' || echo '$(srcdir)/'`chemin.cpp webdar-chemin.obj: chemin.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar-chemin.obj -MD -MP -MF $(DEPDIR)/webdar-chemin.Tpo -c -o webdar-chemin.obj `if test -f 'chemin.cpp'; then $(CYGPATH_W) 'chemin.cpp'; else $(CYGPATH_W) '$(srcdir)/chemin.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar-chemin.Tpo $(DEPDIR)/webdar-chemin.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='chemin.cpp' object='webdar-chemin.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar-chemin.obj `if test -f 'chemin.cpp'; then $(CYGPATH_W) 'chemin.cpp'; else $(CYGPATH_W) '$(srcdir)/chemin.cpp'; fi` webdar-css_property.o: css_property.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar-css_property.o -MD -MP -MF $(DEPDIR)/webdar-css_property.Tpo -c -o webdar-css_property.o `test -f 'css_property.cpp' || echo '$(srcdir)/'`css_property.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar-css_property.Tpo $(DEPDIR)/webdar-css_property.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='css_property.cpp' object='webdar-css_property.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar-css_property.o `test -f 'css_property.cpp' || echo '$(srcdir)/'`css_property.cpp webdar-css_property.obj: css_property.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar-css_property.obj -MD -MP -MF $(DEPDIR)/webdar-css_property.Tpo -c -o webdar-css_property.obj `if test -f 'css_property.cpp'; then $(CYGPATH_W) 'css_property.cpp'; else $(CYGPATH_W) '$(srcdir)/css_property.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar-css_property.Tpo $(DEPDIR)/webdar-css_property.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='css_property.cpp' object='webdar-css_property.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar-css_property.obj `if test -f 'css_property.cpp'; then $(CYGPATH_W) 'css_property.cpp'; else $(CYGPATH_W) '$(srcdir)/css_property.cpp'; fi` webdar-html_level.o: html_level.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar-html_level.o -MD -MP -MF $(DEPDIR)/webdar-html_level.Tpo -c -o webdar-html_level.o `test -f 'html_level.cpp' || echo '$(srcdir)/'`html_level.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar-html_level.Tpo $(DEPDIR)/webdar-html_level.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='html_level.cpp' object='webdar-html_level.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar-html_level.o `test -f 'html_level.cpp' || echo '$(srcdir)/'`html_level.cpp webdar-html_level.obj: html_level.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar-html_level.obj -MD -MP -MF $(DEPDIR)/webdar-html_level.Tpo -c -o webdar-html_level.obj `if test -f 'html_level.cpp'; then $(CYGPATH_W) 'html_level.cpp'; else $(CYGPATH_W) '$(srcdir)/html_level.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar-html_level.Tpo $(DEPDIR)/webdar-html_level.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='html_level.cpp' object='webdar-html_level.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar-html_level.obj `if test -f 'html_level.cpp'; then $(CYGPATH_W) 'html_level.cpp'; else $(CYGPATH_W) '$(srcdir)/html_level.cpp'; fi` webdar-html_div.o: html_div.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar-html_div.o -MD -MP -MF $(DEPDIR)/webdar-html_div.Tpo -c -o webdar-html_div.o `test -f 'html_div.cpp' || echo '$(srcdir)/'`html_div.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar-html_div.Tpo $(DEPDIR)/webdar-html_div.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='html_div.cpp' object='webdar-html_div.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar-html_div.o `test -f 'html_div.cpp' || echo '$(srcdir)/'`html_div.cpp webdar-html_div.obj: html_div.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar-html_div.obj -MD -MP -MF $(DEPDIR)/webdar-html_div.Tpo -c -o webdar-html_div.obj `if test -f 'html_div.cpp'; then $(CYGPATH_W) 'html_div.cpp'; else $(CYGPATH_W) '$(srcdir)/html_div.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar-html_div.Tpo $(DEPDIR)/webdar-html_div.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='html_div.cpp' object='webdar-html_div.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar-html_div.obj `if test -f 'html_div.cpp'; then $(CYGPATH_W) 'html_div.cpp'; else $(CYGPATH_W) '$(srcdir)/html_div.cpp'; fi` webdar-html_menu.o: html_menu.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar-html_menu.o -MD -MP -MF $(DEPDIR)/webdar-html_menu.Tpo -c -o webdar-html_menu.o `test -f 'html_menu.cpp' || echo '$(srcdir)/'`html_menu.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar-html_menu.Tpo $(DEPDIR)/webdar-html_menu.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='html_menu.cpp' object='webdar-html_menu.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar-html_menu.o `test -f 'html_menu.cpp' || echo '$(srcdir)/'`html_menu.cpp webdar-html_menu.obj: html_menu.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar-html_menu.obj -MD -MP -MF $(DEPDIR)/webdar-html_menu.Tpo -c -o webdar-html_menu.obj `if test -f 'html_menu.cpp'; then $(CYGPATH_W) 'html_menu.cpp'; else $(CYGPATH_W) '$(srcdir)/html_menu.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar-html_menu.Tpo $(DEPDIR)/webdar-html_menu.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='html_menu.cpp' object='webdar-html_menu.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar-html_menu.obj `if test -f 'html_menu.cpp'; then $(CYGPATH_W) 'html_menu.cpp'; else $(CYGPATH_W) '$(srcdir)/html_menu.cpp'; fi` webdar-html_aiguille.o: html_aiguille.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar-html_aiguille.o -MD -MP -MF $(DEPDIR)/webdar-html_aiguille.Tpo -c -o webdar-html_aiguille.o `test -f 'html_aiguille.cpp' || echo '$(srcdir)/'`html_aiguille.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar-html_aiguille.Tpo $(DEPDIR)/webdar-html_aiguille.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='html_aiguille.cpp' object='webdar-html_aiguille.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar-html_aiguille.o `test -f 'html_aiguille.cpp' || echo '$(srcdir)/'`html_aiguille.cpp webdar-html_aiguille.obj: html_aiguille.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar-html_aiguille.obj -MD -MP -MF $(DEPDIR)/webdar-html_aiguille.Tpo -c -o webdar-html_aiguille.obj `if test -f 'html_aiguille.cpp'; then $(CYGPATH_W) 'html_aiguille.cpp'; else $(CYGPATH_W) '$(srcdir)/html_aiguille.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar-html_aiguille.Tpo $(DEPDIR)/webdar-html_aiguille.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='html_aiguille.cpp' object='webdar-html_aiguille.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar-html_aiguille.obj `if test -f 'html_aiguille.cpp'; then $(CYGPATH_W) 'html_aiguille.cpp'; else $(CYGPATH_W) '$(srcdir)/html_aiguille.cpp'; fi` webdar-saisie.o: saisie.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar-saisie.o -MD -MP -MF $(DEPDIR)/webdar-saisie.Tpo -c -o webdar-saisie.o `test -f 'saisie.cpp' || echo '$(srcdir)/'`saisie.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar-saisie.Tpo $(DEPDIR)/webdar-saisie.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='saisie.cpp' object='webdar-saisie.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar-saisie.o `test -f 'saisie.cpp' || echo '$(srcdir)/'`saisie.cpp webdar-saisie.obj: saisie.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar-saisie.obj -MD -MP -MF $(DEPDIR)/webdar-saisie.Tpo -c -o webdar-saisie.obj `if test -f 'saisie.cpp'; then $(CYGPATH_W) 'saisie.cpp'; else $(CYGPATH_W) '$(srcdir)/saisie.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar-saisie.Tpo $(DEPDIR)/webdar-saisie.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='saisie.cpp' object='webdar-saisie.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar-saisie.obj `if test -f 'saisie.cpp'; then $(CYGPATH_W) 'saisie.cpp'; else $(CYGPATH_W) '$(srcdir)/saisie.cpp'; fi` webdar-user_interface.o: user_interface.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar-user_interface.o -MD -MP -MF $(DEPDIR)/webdar-user_interface.Tpo -c -o webdar-user_interface.o `test -f 'user_interface.cpp' || echo '$(srcdir)/'`user_interface.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar-user_interface.Tpo $(DEPDIR)/webdar-user_interface.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='user_interface.cpp' object='webdar-user_interface.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar-user_interface.o `test -f 'user_interface.cpp' || echo '$(srcdir)/'`user_interface.cpp webdar-user_interface.obj: user_interface.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar-user_interface.obj -MD -MP -MF $(DEPDIR)/webdar-user_interface.Tpo -c -o webdar-user_interface.obj `if test -f 'user_interface.cpp'; then $(CYGPATH_W) 'user_interface.cpp'; else $(CYGPATH_W) '$(srcdir)/user_interface.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar-user_interface.Tpo $(DEPDIR)/webdar-user_interface.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='user_interface.cpp' object='webdar-user_interface.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar-user_interface.obj `if test -f 'user_interface.cpp'; then $(CYGPATH_W) 'user_interface.cpp'; else $(CYGPATH_W) '$(srcdir)/user_interface.cpp'; fi` webdar-events.o: events.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar-events.o -MD -MP -MF $(DEPDIR)/webdar-events.Tpo -c -o webdar-events.o `test -f 'events.cpp' || echo '$(srcdir)/'`events.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar-events.Tpo $(DEPDIR)/webdar-events.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='events.cpp' object='webdar-events.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar-events.o `test -f 'events.cpp' || echo '$(srcdir)/'`events.cpp webdar-events.obj: events.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar-events.obj -MD -MP -MF $(DEPDIR)/webdar-events.Tpo -c -o webdar-events.obj `if test -f 'events.cpp'; then $(CYGPATH_W) 'events.cpp'; else $(CYGPATH_W) '$(srcdir)/events.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar-events.Tpo $(DEPDIR)/webdar-events.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='events.cpp' object='webdar-events.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar-events.obj `if test -f 'events.cpp'; then $(CYGPATH_W) 'events.cpp'; else $(CYGPATH_W) '$(srcdir)/events.cpp'; fi` webdar-actor.o: actor.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar-actor.o -MD -MP -MF $(DEPDIR)/webdar-actor.Tpo -c -o webdar-actor.o `test -f 'actor.cpp' || echo '$(srcdir)/'`actor.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar-actor.Tpo $(DEPDIR)/webdar-actor.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='actor.cpp' object='webdar-actor.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar-actor.o `test -f 'actor.cpp' || echo '$(srcdir)/'`actor.cpp webdar-actor.obj: actor.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar-actor.obj -MD -MP -MF $(DEPDIR)/webdar-actor.Tpo -c -o webdar-actor.obj `if test -f 'actor.cpp'; then $(CYGPATH_W) 'actor.cpp'; else $(CYGPATH_W) '$(srcdir)/actor.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar-actor.Tpo $(DEPDIR)/webdar-actor.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='actor.cpp' object='webdar-actor.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar-actor.obj `if test -f 'actor.cpp'; then $(CYGPATH_W) 'actor.cpp'; else $(CYGPATH_W) '$(srcdir)/actor.cpp'; fi` webdar-reference.o: reference.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar-reference.o -MD -MP -MF $(DEPDIR)/webdar-reference.Tpo -c -o webdar-reference.o `test -f 'reference.cpp' || echo '$(srcdir)/'`reference.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar-reference.Tpo $(DEPDIR)/webdar-reference.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='reference.cpp' object='webdar-reference.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar-reference.o `test -f 'reference.cpp' || echo '$(srcdir)/'`reference.cpp webdar-reference.obj: reference.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar-reference.obj -MD -MP -MF $(DEPDIR)/webdar-reference.Tpo -c -o webdar-reference.obj `if test -f 'reference.cpp'; then $(CYGPATH_W) 'reference.cpp'; else $(CYGPATH_W) '$(srcdir)/reference.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar-reference.Tpo $(DEPDIR)/webdar-reference.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='reference.cpp' object='webdar-reference.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar-reference.obj `if test -f 'reference.cpp'; then $(CYGPATH_W) 'reference.cpp'; else $(CYGPATH_W) '$(srcdir)/reference.cpp'; fi` webdar-html_yes_no_box.o: html_yes_no_box.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar-html_yes_no_box.o -MD -MP -MF $(DEPDIR)/webdar-html_yes_no_box.Tpo -c -o webdar-html_yes_no_box.o `test -f 'html_yes_no_box.cpp' || echo '$(srcdir)/'`html_yes_no_box.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar-html_yes_no_box.Tpo $(DEPDIR)/webdar-html_yes_no_box.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='html_yes_no_box.cpp' object='webdar-html_yes_no_box.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar-html_yes_no_box.o `test -f 'html_yes_no_box.cpp' || echo '$(srcdir)/'`html_yes_no_box.cpp webdar-html_yes_no_box.obj: html_yes_no_box.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar-html_yes_no_box.obj -MD -MP -MF $(DEPDIR)/webdar-html_yes_no_box.Tpo -c -o webdar-html_yes_no_box.obj `if test -f 'html_yes_no_box.cpp'; then $(CYGPATH_W) 'html_yes_no_box.cpp'; else $(CYGPATH_W) '$(srcdir)/html_yes_no_box.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar-html_yes_no_box.Tpo $(DEPDIR)/webdar-html_yes_no_box.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='html_yes_no_box.cpp' object='webdar-html_yes_no_box.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar-html_yes_no_box.obj `if test -f 'html_yes_no_box.cpp'; then $(CYGPATH_W) 'html_yes_no_box.cpp'; else $(CYGPATH_W) '$(srcdir)/html_yes_no_box.cpp'; fi` webdar-html_options_extract.o: html_options_extract.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar-html_options_extract.o -MD -MP -MF $(DEPDIR)/webdar-html_options_extract.Tpo -c -o webdar-html_options_extract.o `test -f 'html_options_extract.cpp' || echo '$(srcdir)/'`html_options_extract.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar-html_options_extract.Tpo $(DEPDIR)/webdar-html_options_extract.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='html_options_extract.cpp' object='webdar-html_options_extract.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar-html_options_extract.o `test -f 'html_options_extract.cpp' || echo '$(srcdir)/'`html_options_extract.cpp webdar-html_options_extract.obj: html_options_extract.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar-html_options_extract.obj -MD -MP -MF $(DEPDIR)/webdar-html_options_extract.Tpo -c -o webdar-html_options_extract.obj `if test -f 'html_options_extract.cpp'; then $(CYGPATH_W) 'html_options_extract.cpp'; else $(CYGPATH_W) '$(srcdir)/html_options_extract.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar-html_options_extract.Tpo $(DEPDIR)/webdar-html_options_extract.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='html_options_extract.cpp' object='webdar-html_options_extract.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar-html_options_extract.obj `if test -f 'html_options_extract.cpp'; then $(CYGPATH_W) 'html_options_extract.cpp'; else $(CYGPATH_W) '$(srcdir)/html_options_extract.cpp'; fi` webdar-html_options_read.o: html_options_read.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar-html_options_read.o -MD -MP -MF $(DEPDIR)/webdar-html_options_read.Tpo -c -o webdar-html_options_read.o `test -f 'html_options_read.cpp' || echo '$(srcdir)/'`html_options_read.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar-html_options_read.Tpo $(DEPDIR)/webdar-html_options_read.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='html_options_read.cpp' object='webdar-html_options_read.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar-html_options_read.o `test -f 'html_options_read.cpp' || echo '$(srcdir)/'`html_options_read.cpp webdar-html_options_read.obj: html_options_read.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar-html_options_read.obj -MD -MP -MF $(DEPDIR)/webdar-html_options_read.Tpo -c -o webdar-html_options_read.obj `if test -f 'html_options_read.cpp'; then $(CYGPATH_W) 'html_options_read.cpp'; else $(CYGPATH_W) '$(srcdir)/html_options_read.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar-html_options_read.Tpo $(DEPDIR)/webdar-html_options_read.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='html_options_read.cpp' object='webdar-html_options_read.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar-html_options_read.obj `if test -f 'html_options_read.cpp'; then $(CYGPATH_W) 'html_options_read.cpp'; else $(CYGPATH_W) '$(srcdir)/html_options_read.cpp'; fi` webdar-html_crypto_algo.o: html_crypto_algo.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar-html_crypto_algo.o -MD -MP -MF $(DEPDIR)/webdar-html_crypto_algo.Tpo -c -o webdar-html_crypto_algo.o `test -f 'html_crypto_algo.cpp' || echo '$(srcdir)/'`html_crypto_algo.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar-html_crypto_algo.Tpo $(DEPDIR)/webdar-html_crypto_algo.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='html_crypto_algo.cpp' object='webdar-html_crypto_algo.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar-html_crypto_algo.o `test -f 'html_crypto_algo.cpp' || echo '$(srcdir)/'`html_crypto_algo.cpp webdar-html_crypto_algo.obj: html_crypto_algo.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar-html_crypto_algo.obj -MD -MP -MF $(DEPDIR)/webdar-html_crypto_algo.Tpo -c -o webdar-html_crypto_algo.obj `if test -f 'html_crypto_algo.cpp'; then $(CYGPATH_W) 'html_crypto_algo.cpp'; else $(CYGPATH_W) '$(srcdir)/html_crypto_algo.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar-html_crypto_algo.Tpo $(DEPDIR)/webdar-html_crypto_algo.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='html_crypto_algo.cpp' object='webdar-html_crypto_algo.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar-html_crypto_algo.obj `if test -f 'html_crypto_algo.cpp'; then $(CYGPATH_W) 'html_crypto_algo.cpp'; else $(CYGPATH_W) '$(srcdir)/html_crypto_algo.cpp'; fi` webdar-html_comparison_fields.o: html_comparison_fields.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar-html_comparison_fields.o -MD -MP -MF $(DEPDIR)/webdar-html_comparison_fields.Tpo -c -o webdar-html_comparison_fields.o `test -f 'html_comparison_fields.cpp' || echo '$(srcdir)/'`html_comparison_fields.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar-html_comparison_fields.Tpo $(DEPDIR)/webdar-html_comparison_fields.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='html_comparison_fields.cpp' object='webdar-html_comparison_fields.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar-html_comparison_fields.o `test -f 'html_comparison_fields.cpp' || echo '$(srcdir)/'`html_comparison_fields.cpp webdar-html_comparison_fields.obj: html_comparison_fields.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar-html_comparison_fields.obj -MD -MP -MF $(DEPDIR)/webdar-html_comparison_fields.Tpo -c -o webdar-html_comparison_fields.obj `if test -f 'html_comparison_fields.cpp'; then $(CYGPATH_W) 'html_comparison_fields.cpp'; else $(CYGPATH_W) '$(srcdir)/html_comparison_fields.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar-html_comparison_fields.Tpo $(DEPDIR)/webdar-html_comparison_fields.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='html_comparison_fields.cpp' object='webdar-html_comparison_fields.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar-html_comparison_fields.obj `if test -f 'html_comparison_fields.cpp'; then $(CYGPATH_W) 'html_comparison_fields.cpp'; else $(CYGPATH_W) '$(srcdir)/html_comparison_fields.cpp'; fi` webdar-html_options_compare.o: html_options_compare.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar-html_options_compare.o -MD -MP -MF $(DEPDIR)/webdar-html_options_compare.Tpo -c -o webdar-html_options_compare.o `test -f 'html_options_compare.cpp' || echo '$(srcdir)/'`html_options_compare.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar-html_options_compare.Tpo $(DEPDIR)/webdar-html_options_compare.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='html_options_compare.cpp' object='webdar-html_options_compare.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar-html_options_compare.o `test -f 'html_options_compare.cpp' || echo '$(srcdir)/'`html_options_compare.cpp webdar-html_options_compare.obj: html_options_compare.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar-html_options_compare.obj -MD -MP -MF $(DEPDIR)/webdar-html_options_compare.Tpo -c -o webdar-html_options_compare.obj `if test -f 'html_options_compare.cpp'; then $(CYGPATH_W) 'html_options_compare.cpp'; else $(CYGPATH_W) '$(srcdir)/html_options_compare.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar-html_options_compare.Tpo $(DEPDIR)/webdar-html_options_compare.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='html_options_compare.cpp' object='webdar-html_options_compare.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar-html_options_compare.obj `if test -f 'html_options_compare.cpp'; then $(CYGPATH_W) 'html_options_compare.cpp'; else $(CYGPATH_W) '$(srcdir)/html_options_compare.cpp'; fi` webdar-html_options_test.o: html_options_test.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar-html_options_test.o -MD -MP -MF $(DEPDIR)/webdar-html_options_test.Tpo -c -o webdar-html_options_test.o `test -f 'html_options_test.cpp' || echo '$(srcdir)/'`html_options_test.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar-html_options_test.Tpo $(DEPDIR)/webdar-html_options_test.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='html_options_test.cpp' object='webdar-html_options_test.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar-html_options_test.o `test -f 'html_options_test.cpp' || echo '$(srcdir)/'`html_options_test.cpp webdar-html_options_test.obj: html_options_test.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar-html_options_test.obj -MD -MP -MF $(DEPDIR)/webdar-html_options_test.Tpo -c -o webdar-html_options_test.obj `if test -f 'html_options_test.cpp'; then $(CYGPATH_W) 'html_options_test.cpp'; else $(CYGPATH_W) '$(srcdir)/html_options_test.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar-html_options_test.Tpo $(DEPDIR)/webdar-html_options_test.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='html_options_test.cpp' object='webdar-html_options_test.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar-html_options_test.obj `if test -f 'html_options_test.cpp'; then $(CYGPATH_W) 'html_options_test.cpp'; else $(CYGPATH_W) '$(srcdir)/html_options_test.cpp'; fi` webdar-html_archive_read.o: html_archive_read.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar-html_archive_read.o -MD -MP -MF $(DEPDIR)/webdar-html_archive_read.Tpo -c -o webdar-html_archive_read.o `test -f 'html_archive_read.cpp' || echo '$(srcdir)/'`html_archive_read.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar-html_archive_read.Tpo $(DEPDIR)/webdar-html_archive_read.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='html_archive_read.cpp' object='webdar-html_archive_read.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar-html_archive_read.o `test -f 'html_archive_read.cpp' || echo '$(srcdir)/'`html_archive_read.cpp webdar-html_archive_read.obj: html_archive_read.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar-html_archive_read.obj -MD -MP -MF $(DEPDIR)/webdar-html_archive_read.Tpo -c -o webdar-html_archive_read.obj `if test -f 'html_archive_read.cpp'; then $(CYGPATH_W) 'html_archive_read.cpp'; else $(CYGPATH_W) '$(srcdir)/html_archive_read.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar-html_archive_read.Tpo $(DEPDIR)/webdar-html_archive_read.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='html_archive_read.cpp' object='webdar-html_archive_read.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar-html_archive_read.obj `if test -f 'html_archive_read.cpp'; then $(CYGPATH_W) 'html_archive_read.cpp'; else $(CYGPATH_W) '$(srcdir)/html_archive_read.cpp'; fi` webdar-html_compression.o: html_compression.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar-html_compression.o -MD -MP -MF $(DEPDIR)/webdar-html_compression.Tpo -c -o webdar-html_compression.o `test -f 'html_compression.cpp' || echo '$(srcdir)/'`html_compression.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar-html_compression.Tpo $(DEPDIR)/webdar-html_compression.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='html_compression.cpp' object='webdar-html_compression.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar-html_compression.o `test -f 'html_compression.cpp' || echo '$(srcdir)/'`html_compression.cpp webdar-html_compression.obj: html_compression.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar-html_compression.obj -MD -MP -MF $(DEPDIR)/webdar-html_compression.Tpo -c -o webdar-html_compression.obj `if test -f 'html_compression.cpp'; then $(CYGPATH_W) 'html_compression.cpp'; else $(CYGPATH_W) '$(srcdir)/html_compression.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar-html_compression.Tpo $(DEPDIR)/webdar-html_compression.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='html_compression.cpp' object='webdar-html_compression.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar-html_compression.obj `if test -f 'html_compression.cpp'; then $(CYGPATH_W) 'html_compression.cpp'; else $(CYGPATH_W) '$(srcdir)/html_compression.cpp'; fi` webdar-html_size_unit.o: html_size_unit.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar-html_size_unit.o -MD -MP -MF $(DEPDIR)/webdar-html_size_unit.Tpo -c -o webdar-html_size_unit.o `test -f 'html_size_unit.cpp' || echo '$(srcdir)/'`html_size_unit.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar-html_size_unit.Tpo $(DEPDIR)/webdar-html_size_unit.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='html_size_unit.cpp' object='webdar-html_size_unit.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar-html_size_unit.o `test -f 'html_size_unit.cpp' || echo '$(srcdir)/'`html_size_unit.cpp webdar-html_size_unit.obj: html_size_unit.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar-html_size_unit.obj -MD -MP -MF $(DEPDIR)/webdar-html_size_unit.Tpo -c -o webdar-html_size_unit.obj `if test -f 'html_size_unit.cpp'; then $(CYGPATH_W) 'html_size_unit.cpp'; else $(CYGPATH_W) '$(srcdir)/html_size_unit.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar-html_size_unit.Tpo $(DEPDIR)/webdar-html_size_unit.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='html_size_unit.cpp' object='webdar-html_size_unit.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar-html_size_unit.obj `if test -f 'html_size_unit.cpp'; then $(CYGPATH_W) 'html_size_unit.cpp'; else $(CYGPATH_W) '$(srcdir)/html_size_unit.cpp'; fi` webdar-html_hash_algo.o: html_hash_algo.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar-html_hash_algo.o -MD -MP -MF $(DEPDIR)/webdar-html_hash_algo.Tpo -c -o webdar-html_hash_algo.o `test -f 'html_hash_algo.cpp' || echo '$(srcdir)/'`html_hash_algo.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar-html_hash_algo.Tpo $(DEPDIR)/webdar-html_hash_algo.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='html_hash_algo.cpp' object='webdar-html_hash_algo.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar-html_hash_algo.o `test -f 'html_hash_algo.cpp' || echo '$(srcdir)/'`html_hash_algo.cpp webdar-html_hash_algo.obj: html_hash_algo.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar-html_hash_algo.obj -MD -MP -MF $(DEPDIR)/webdar-html_hash_algo.Tpo -c -o webdar-html_hash_algo.obj `if test -f 'html_hash_algo.cpp'; then $(CYGPATH_W) 'html_hash_algo.cpp'; else $(CYGPATH_W) '$(srcdir)/html_hash_algo.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar-html_hash_algo.Tpo $(DEPDIR)/webdar-html_hash_algo.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='html_hash_algo.cpp' object='webdar-html_hash_algo.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar-html_hash_algo.obj `if test -f 'html_hash_algo.cpp'; then $(CYGPATH_W) 'html_hash_algo.cpp'; else $(CYGPATH_W) '$(srcdir)/html_hash_algo.cpp'; fi` webdar-html_datetime.o: html_datetime.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar-html_datetime.o -MD -MP -MF $(DEPDIR)/webdar-html_datetime.Tpo -c -o webdar-html_datetime.o `test -f 'html_datetime.cpp' || echo '$(srcdir)/'`html_datetime.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar-html_datetime.Tpo $(DEPDIR)/webdar-html_datetime.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='html_datetime.cpp' object='webdar-html_datetime.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar-html_datetime.o `test -f 'html_datetime.cpp' || echo '$(srcdir)/'`html_datetime.cpp webdar-html_datetime.obj: html_datetime.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar-html_datetime.obj -MD -MP -MF $(DEPDIR)/webdar-html_datetime.Tpo -c -o webdar-html_datetime.obj `if test -f 'html_datetime.cpp'; then $(CYGPATH_W) 'html_datetime.cpp'; else $(CYGPATH_W) '$(srcdir)/html_datetime.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar-html_datetime.Tpo $(DEPDIR)/webdar-html_datetime.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='html_datetime.cpp' object='webdar-html_datetime.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar-html_datetime.obj `if test -f 'html_datetime.cpp'; then $(CYGPATH_W) 'html_datetime.cpp'; else $(CYGPATH_W) '$(srcdir)/html_datetime.cpp'; fi` webdar-html_options_create.o: html_options_create.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar-html_options_create.o -MD -MP -MF $(DEPDIR)/webdar-html_options_create.Tpo -c -o webdar-html_options_create.o `test -f 'html_options_create.cpp' || echo '$(srcdir)/'`html_options_create.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar-html_options_create.Tpo $(DEPDIR)/webdar-html_options_create.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='html_options_create.cpp' object='webdar-html_options_create.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar-html_options_create.o `test -f 'html_options_create.cpp' || echo '$(srcdir)/'`html_options_create.cpp webdar-html_options_create.obj: html_options_create.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar-html_options_create.obj -MD -MP -MF $(DEPDIR)/webdar-html_options_create.Tpo -c -o webdar-html_options_create.obj `if test -f 'html_options_create.cpp'; then $(CYGPATH_W) 'html_options_create.cpp'; else $(CYGPATH_W) '$(srcdir)/html_options_create.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar-html_options_create.Tpo $(DEPDIR)/webdar-html_options_create.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='html_options_create.cpp' object='webdar-html_options_create.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar-html_options_create.obj `if test -f 'html_options_create.cpp'; then $(CYGPATH_W) 'html_options_create.cpp'; else $(CYGPATH_W) '$(srcdir)/html_options_create.cpp'; fi` webdar-html_archive_create.o: html_archive_create.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar-html_archive_create.o -MD -MP -MF $(DEPDIR)/webdar-html_archive_create.Tpo -c -o webdar-html_archive_create.o `test -f 'html_archive_create.cpp' || echo '$(srcdir)/'`html_archive_create.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar-html_archive_create.Tpo $(DEPDIR)/webdar-html_archive_create.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='html_archive_create.cpp' object='webdar-html_archive_create.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar-html_archive_create.o `test -f 'html_archive_create.cpp' || echo '$(srcdir)/'`html_archive_create.cpp webdar-html_archive_create.obj: html_archive_create.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar-html_archive_create.obj -MD -MP -MF $(DEPDIR)/webdar-html_archive_create.Tpo -c -o webdar-html_archive_create.obj `if test -f 'html_archive_create.cpp'; then $(CYGPATH_W) 'html_archive_create.cpp'; else $(CYGPATH_W) '$(srcdir)/html_archive_create.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar-html_archive_create.Tpo $(DEPDIR)/webdar-html_archive_create.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='html_archive_create.cpp' object='webdar-html_archive_create.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar-html_archive_create.obj `if test -f 'html_archive_create.cpp'; then $(CYGPATH_W) 'html_archive_create.cpp'; else $(CYGPATH_W) '$(srcdir)/html_archive_create.cpp'; fi` webdar-web_user_interaction.o: web_user_interaction.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar-web_user_interaction.o -MD -MP -MF $(DEPDIR)/webdar-web_user_interaction.Tpo -c -o webdar-web_user_interaction.o `test -f 'web_user_interaction.cpp' || echo '$(srcdir)/'`web_user_interaction.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar-web_user_interaction.Tpo $(DEPDIR)/webdar-web_user_interaction.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='web_user_interaction.cpp' object='webdar-web_user_interaction.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar-web_user_interaction.o `test -f 'web_user_interaction.cpp' || echo '$(srcdir)/'`web_user_interaction.cpp webdar-web_user_interaction.obj: web_user_interaction.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar-web_user_interaction.obj -MD -MP -MF $(DEPDIR)/webdar-web_user_interaction.Tpo -c -o webdar-web_user_interaction.obj `if test -f 'web_user_interaction.cpp'; then $(CYGPATH_W) 'web_user_interaction.cpp'; else $(CYGPATH_W) '$(srcdir)/web_user_interaction.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar-web_user_interaction.Tpo $(DEPDIR)/webdar-web_user_interaction.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='web_user_interaction.cpp' object='webdar-web_user_interaction.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar-web_user_interaction.obj `if test -f 'web_user_interaction.cpp'; then $(CYGPATH_W) 'web_user_interaction.cpp'; else $(CYGPATH_W) '$(srcdir)/web_user_interaction.cpp'; fi` webdar-html_web_user_interaction.o: html_web_user_interaction.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar-html_web_user_interaction.o -MD -MP -MF $(DEPDIR)/webdar-html_web_user_interaction.Tpo -c -o webdar-html_web_user_interaction.o `test -f 'html_web_user_interaction.cpp' || echo '$(srcdir)/'`html_web_user_interaction.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar-html_web_user_interaction.Tpo $(DEPDIR)/webdar-html_web_user_interaction.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='html_web_user_interaction.cpp' object='webdar-html_web_user_interaction.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar-html_web_user_interaction.o `test -f 'html_web_user_interaction.cpp' || echo '$(srcdir)/'`html_web_user_interaction.cpp webdar-html_web_user_interaction.obj: html_web_user_interaction.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar-html_web_user_interaction.obj -MD -MP -MF $(DEPDIR)/webdar-html_web_user_interaction.Tpo -c -o webdar-html_web_user_interaction.obj `if test -f 'html_web_user_interaction.cpp'; then $(CYGPATH_W) 'html_web_user_interaction.cpp'; else $(CYGPATH_W) '$(srcdir)/html_web_user_interaction.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar-html_web_user_interaction.Tpo $(DEPDIR)/webdar-html_web_user_interaction.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='html_web_user_interaction.cpp' object='webdar-html_web_user_interaction.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar-html_web_user_interaction.obj `if test -f 'html_web_user_interaction.cpp'; then $(CYGPATH_W) 'html_web_user_interaction.cpp'; else $(CYGPATH_W) '$(srcdir)/html_web_user_interaction.cpp'; fi` webdar-html_button.o: html_button.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar-html_button.o -MD -MP -MF $(DEPDIR)/webdar-html_button.Tpo -c -o webdar-html_button.o `test -f 'html_button.cpp' || echo '$(srcdir)/'`html_button.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar-html_button.Tpo $(DEPDIR)/webdar-html_button.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='html_button.cpp' object='webdar-html_button.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar-html_button.o `test -f 'html_button.cpp' || echo '$(srcdir)/'`html_button.cpp webdar-html_button.obj: html_button.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar-html_button.obj -MD -MP -MF $(DEPDIR)/webdar-html_button.Tpo -c -o webdar-html_button.obj `if test -f 'html_button.cpp'; then $(CYGPATH_W) 'html_button.cpp'; else $(CYGPATH_W) '$(srcdir)/html_button.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar-html_button.Tpo $(DEPDIR)/webdar-html_button.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='html_button.cpp' object='webdar-html_button.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar-html_button.obj `if test -f 'html_button.cpp'; then $(CYGPATH_W) 'html_button.cpp'; else $(CYGPATH_W) '$(srcdir)/html_button.cpp'; fi` webdar-html_statistics.o: html_statistics.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar-html_statistics.o -MD -MP -MF $(DEPDIR)/webdar-html_statistics.Tpo -c -o webdar-html_statistics.o `test -f 'html_statistics.cpp' || echo '$(srcdir)/'`html_statistics.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar-html_statistics.Tpo $(DEPDIR)/webdar-html_statistics.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='html_statistics.cpp' object='webdar-html_statistics.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar-html_statistics.o `test -f 'html_statistics.cpp' || echo '$(srcdir)/'`html_statistics.cpp webdar-html_statistics.obj: html_statistics.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar-html_statistics.obj -MD -MP -MF $(DEPDIR)/webdar-html_statistics.Tpo -c -o webdar-html_statistics.obj `if test -f 'html_statistics.cpp'; then $(CYGPATH_W) 'html_statistics.cpp'; else $(CYGPATH_W) '$(srcdir)/html_statistics.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar-html_statistics.Tpo $(DEPDIR)/webdar-html_statistics.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='html_statistics.cpp' object='webdar-html_statistics.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar-html_statistics.obj `if test -f 'html_statistics.cpp'; then $(CYGPATH_W) 'html_statistics.cpp'; else $(CYGPATH_W) '$(srcdir)/html_statistics.cpp'; fi` webdar-archive_test.o: archive_test.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar-archive_test.o -MD -MP -MF $(DEPDIR)/webdar-archive_test.Tpo -c -o webdar-archive_test.o `test -f 'archive_test.cpp' || echo '$(srcdir)/'`archive_test.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar-archive_test.Tpo $(DEPDIR)/webdar-archive_test.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='archive_test.cpp' object='webdar-archive_test.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar-archive_test.o `test -f 'archive_test.cpp' || echo '$(srcdir)/'`archive_test.cpp webdar-archive_test.obj: archive_test.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar-archive_test.obj -MD -MP -MF $(DEPDIR)/webdar-archive_test.Tpo -c -o webdar-archive_test.obj `if test -f 'archive_test.cpp'; then $(CYGPATH_W) 'archive_test.cpp'; else $(CYGPATH_W) '$(srcdir)/archive_test.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar-archive_test.Tpo $(DEPDIR)/webdar-archive_test.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='archive_test.cpp' object='webdar-archive_test.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar-archive_test.obj `if test -f 'archive_test.cpp'; then $(CYGPATH_W) 'archive_test.cpp'; else $(CYGPATH_W) '$(srcdir)/archive_test.cpp'; fi` webdar-html_error.o: html_error.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar-html_error.o -MD -MP -MF $(DEPDIR)/webdar-html_error.Tpo -c -o webdar-html_error.o `test -f 'html_error.cpp' || echo '$(srcdir)/'`html_error.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar-html_error.Tpo $(DEPDIR)/webdar-html_error.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='html_error.cpp' object='webdar-html_error.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar-html_error.o `test -f 'html_error.cpp' || echo '$(srcdir)/'`html_error.cpp webdar-html_error.obj: html_error.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar-html_error.obj -MD -MP -MF $(DEPDIR)/webdar-html_error.Tpo -c -o webdar-html_error.obj `if test -f 'html_error.cpp'; then $(CYGPATH_W) 'html_error.cpp'; else $(CYGPATH_W) '$(srcdir)/html_error.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar-html_error.Tpo $(DEPDIR)/webdar-html_error.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='html_error.cpp' object='webdar-html_error.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar-html_error.obj `if test -f 'html_error.cpp'; then $(CYGPATH_W) 'html_error.cpp'; else $(CYGPATH_W) '$(srcdir)/html_error.cpp'; fi` webdar-html_libdar_running_page.o: html_libdar_running_page.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar-html_libdar_running_page.o -MD -MP -MF $(DEPDIR)/webdar-html_libdar_running_page.Tpo -c -o webdar-html_libdar_running_page.o `test -f 'html_libdar_running_page.cpp' || echo '$(srcdir)/'`html_libdar_running_page.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar-html_libdar_running_page.Tpo $(DEPDIR)/webdar-html_libdar_running_page.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='html_libdar_running_page.cpp' object='webdar-html_libdar_running_page.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar-html_libdar_running_page.o `test -f 'html_libdar_running_page.cpp' || echo '$(srcdir)/'`html_libdar_running_page.cpp webdar-html_libdar_running_page.obj: html_libdar_running_page.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar-html_libdar_running_page.obj -MD -MP -MF $(DEPDIR)/webdar-html_libdar_running_page.Tpo -c -o webdar-html_libdar_running_page.obj `if test -f 'html_libdar_running_page.cpp'; then $(CYGPATH_W) 'html_libdar_running_page.cpp'; else $(CYGPATH_W) '$(srcdir)/html_libdar_running_page.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar-html_libdar_running_page.Tpo $(DEPDIR)/webdar-html_libdar_running_page.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='html_libdar_running_page.cpp' object='webdar-html_libdar_running_page.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar-html_libdar_running_page.obj `if test -f 'html_libdar_running_page.cpp'; then $(CYGPATH_W) 'html_libdar_running_page.cpp'; else $(CYGPATH_W) '$(srcdir)/html_libdar_running_page.cpp'; fi` webdar-archive_restore.o: archive_restore.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar-archive_restore.o -MD -MP -MF $(DEPDIR)/webdar-archive_restore.Tpo -c -o webdar-archive_restore.o `test -f 'archive_restore.cpp' || echo '$(srcdir)/'`archive_restore.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar-archive_restore.Tpo $(DEPDIR)/webdar-archive_restore.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='archive_restore.cpp' object='webdar-archive_restore.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar-archive_restore.o `test -f 'archive_restore.cpp' || echo '$(srcdir)/'`archive_restore.cpp webdar-archive_restore.obj: archive_restore.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar-archive_restore.obj -MD -MP -MF $(DEPDIR)/webdar-archive_restore.Tpo -c -o webdar-archive_restore.obj `if test -f 'archive_restore.cpp'; then $(CYGPATH_W) 'archive_restore.cpp'; else $(CYGPATH_W) '$(srcdir)/archive_restore.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar-archive_restore.Tpo $(DEPDIR)/webdar-archive_restore.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='archive_restore.cpp' object='webdar-archive_restore.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar-archive_restore.obj `if test -f 'archive_restore.cpp'; then $(CYGPATH_W) 'archive_restore.cpp'; else $(CYGPATH_W) '$(srcdir)/archive_restore.cpp'; fi` webdar-archive_compare.o: archive_compare.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar-archive_compare.o -MD -MP -MF $(DEPDIR)/webdar-archive_compare.Tpo -c -o webdar-archive_compare.o `test -f 'archive_compare.cpp' || echo '$(srcdir)/'`archive_compare.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar-archive_compare.Tpo $(DEPDIR)/webdar-archive_compare.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='archive_compare.cpp' object='webdar-archive_compare.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar-archive_compare.o `test -f 'archive_compare.cpp' || echo '$(srcdir)/'`archive_compare.cpp webdar-archive_compare.obj: archive_compare.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar-archive_compare.obj -MD -MP -MF $(DEPDIR)/webdar-archive_compare.Tpo -c -o webdar-archive_compare.obj `if test -f 'archive_compare.cpp'; then $(CYGPATH_W) 'archive_compare.cpp'; else $(CYGPATH_W) '$(srcdir)/archive_compare.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar-archive_compare.Tpo $(DEPDIR)/webdar-archive_compare.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='archive_compare.cpp' object='webdar-archive_compare.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar-archive_compare.obj `if test -f 'archive_compare.cpp'; then $(CYGPATH_W) 'archive_compare.cpp'; else $(CYGPATH_W) '$(srcdir)/archive_compare.cpp'; fi` webdar-archive_create.o: archive_create.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar-archive_create.o -MD -MP -MF $(DEPDIR)/webdar-archive_create.Tpo -c -o webdar-archive_create.o `test -f 'archive_create.cpp' || echo '$(srcdir)/'`archive_create.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar-archive_create.Tpo $(DEPDIR)/webdar-archive_create.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='archive_create.cpp' object='webdar-archive_create.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar-archive_create.o `test -f 'archive_create.cpp' || echo '$(srcdir)/'`archive_create.cpp webdar-archive_create.obj: archive_create.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar-archive_create.obj -MD -MP -MF $(DEPDIR)/webdar-archive_create.Tpo -c -o webdar-archive_create.obj `if test -f 'archive_create.cpp'; then $(CYGPATH_W) 'archive_create.cpp'; else $(CYGPATH_W) '$(srcdir)/archive_create.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar-archive_create.Tpo $(DEPDIR)/webdar-archive_create.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='archive_create.cpp' object='webdar-archive_create.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar-archive_create.obj `if test -f 'archive_create.cpp'; then $(CYGPATH_W) 'archive_create.cpp'; else $(CYGPATH_W) '$(srcdir)/archive_create.cpp'; fi` webdar-html_options_isolate.o: html_options_isolate.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar-html_options_isolate.o -MD -MP -MF $(DEPDIR)/webdar-html_options_isolate.Tpo -c -o webdar-html_options_isolate.o `test -f 'html_options_isolate.cpp' || echo '$(srcdir)/'`html_options_isolate.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar-html_options_isolate.Tpo $(DEPDIR)/webdar-html_options_isolate.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='html_options_isolate.cpp' object='webdar-html_options_isolate.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar-html_options_isolate.o `test -f 'html_options_isolate.cpp' || echo '$(srcdir)/'`html_options_isolate.cpp webdar-html_options_isolate.obj: html_options_isolate.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar-html_options_isolate.obj -MD -MP -MF $(DEPDIR)/webdar-html_options_isolate.Tpo -c -o webdar-html_options_isolate.obj `if test -f 'html_options_isolate.cpp'; then $(CYGPATH_W) 'html_options_isolate.cpp'; else $(CYGPATH_W) '$(srcdir)/html_options_isolate.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar-html_options_isolate.Tpo $(DEPDIR)/webdar-html_options_isolate.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='html_options_isolate.cpp' object='webdar-html_options_isolate.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar-html_options_isolate.obj `if test -f 'html_options_isolate.cpp'; then $(CYGPATH_W) 'html_options_isolate.cpp'; else $(CYGPATH_W) '$(srcdir)/html_options_isolate.cpp'; fi` webdar-archive_isolate.o: archive_isolate.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar-archive_isolate.o -MD -MP -MF $(DEPDIR)/webdar-archive_isolate.Tpo -c -o webdar-archive_isolate.o `test -f 'archive_isolate.cpp' || echo '$(srcdir)/'`archive_isolate.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar-archive_isolate.Tpo $(DEPDIR)/webdar-archive_isolate.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='archive_isolate.cpp' object='webdar-archive_isolate.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar-archive_isolate.o `test -f 'archive_isolate.cpp' || echo '$(srcdir)/'`archive_isolate.cpp webdar-archive_isolate.obj: archive_isolate.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar-archive_isolate.obj -MD -MP -MF $(DEPDIR)/webdar-archive_isolate.Tpo -c -o webdar-archive_isolate.obj `if test -f 'archive_isolate.cpp'; then $(CYGPATH_W) 'archive_isolate.cpp'; else $(CYGPATH_W) '$(srcdir)/archive_isolate.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar-archive_isolate.Tpo $(DEPDIR)/webdar-archive_isolate.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='archive_isolate.cpp' object='webdar-archive_isolate.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar-archive_isolate.obj `if test -f 'archive_isolate.cpp'; then $(CYGPATH_W) 'archive_isolate.cpp'; else $(CYGPATH_W) '$(srcdir)/archive_isolate.cpp'; fi` webdar-html_archive_isolate.o: html_archive_isolate.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar-html_archive_isolate.o -MD -MP -MF $(DEPDIR)/webdar-html_archive_isolate.Tpo -c -o webdar-html_archive_isolate.o `test -f 'html_archive_isolate.cpp' || echo '$(srcdir)/'`html_archive_isolate.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar-html_archive_isolate.Tpo $(DEPDIR)/webdar-html_archive_isolate.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='html_archive_isolate.cpp' object='webdar-html_archive_isolate.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar-html_archive_isolate.o `test -f 'html_archive_isolate.cpp' || echo '$(srcdir)/'`html_archive_isolate.cpp webdar-html_archive_isolate.obj: html_archive_isolate.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar-html_archive_isolate.obj -MD -MP -MF $(DEPDIR)/webdar-html_archive_isolate.Tpo -c -o webdar-html_archive_isolate.obj `if test -f 'html_archive_isolate.cpp'; then $(CYGPATH_W) 'html_archive_isolate.cpp'; else $(CYGPATH_W) '$(srcdir)/html_archive_isolate.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar-html_archive_isolate.Tpo $(DEPDIR)/webdar-html_archive_isolate.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='html_archive_isolate.cpp' object='webdar-html_archive_isolate.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar-html_archive_isolate.obj `if test -f 'html_archive_isolate.cpp'; then $(CYGPATH_W) 'html_archive_isolate.cpp'; else $(CYGPATH_W) '$(srcdir)/html_archive_isolate.cpp'; fi` webdar-html_options_merge.o: html_options_merge.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar-html_options_merge.o -MD -MP -MF $(DEPDIR)/webdar-html_options_merge.Tpo -c -o webdar-html_options_merge.o `test -f 'html_options_merge.cpp' || echo '$(srcdir)/'`html_options_merge.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar-html_options_merge.Tpo $(DEPDIR)/webdar-html_options_merge.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='html_options_merge.cpp' object='webdar-html_options_merge.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar-html_options_merge.o `test -f 'html_options_merge.cpp' || echo '$(srcdir)/'`html_options_merge.cpp webdar-html_options_merge.obj: html_options_merge.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar-html_options_merge.obj -MD -MP -MF $(DEPDIR)/webdar-html_options_merge.Tpo -c -o webdar-html_options_merge.obj `if test -f 'html_options_merge.cpp'; then $(CYGPATH_W) 'html_options_merge.cpp'; else $(CYGPATH_W) '$(srcdir)/html_options_merge.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar-html_options_merge.Tpo $(DEPDIR)/webdar-html_options_merge.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='html_options_merge.cpp' object='webdar-html_options_merge.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar-html_options_merge.obj `if test -f 'html_options_merge.cpp'; then $(CYGPATH_W) 'html_options_merge.cpp'; else $(CYGPATH_W) '$(srcdir)/html_options_merge.cpp'; fi` webdar-html_archive_merge.o: html_archive_merge.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar-html_archive_merge.o -MD -MP -MF $(DEPDIR)/webdar-html_archive_merge.Tpo -c -o webdar-html_archive_merge.o `test -f 'html_archive_merge.cpp' || echo '$(srcdir)/'`html_archive_merge.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar-html_archive_merge.Tpo $(DEPDIR)/webdar-html_archive_merge.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='html_archive_merge.cpp' object='webdar-html_archive_merge.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar-html_archive_merge.o `test -f 'html_archive_merge.cpp' || echo '$(srcdir)/'`html_archive_merge.cpp webdar-html_archive_merge.obj: html_archive_merge.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar-html_archive_merge.obj -MD -MP -MF $(DEPDIR)/webdar-html_archive_merge.Tpo -c -o webdar-html_archive_merge.obj `if test -f 'html_archive_merge.cpp'; then $(CYGPATH_W) 'html_archive_merge.cpp'; else $(CYGPATH_W) '$(srcdir)/html_archive_merge.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar-html_archive_merge.Tpo $(DEPDIR)/webdar-html_archive_merge.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='html_archive_merge.cpp' object='webdar-html_archive_merge.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar-html_archive_merge.obj `if test -f 'html_archive_merge.cpp'; then $(CYGPATH_W) 'html_archive_merge.cpp'; else $(CYGPATH_W) '$(srcdir)/html_archive_merge.cpp'; fi` webdar-archive_merge.o: archive_merge.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar-archive_merge.o -MD -MP -MF $(DEPDIR)/webdar-archive_merge.Tpo -c -o webdar-archive_merge.o `test -f 'archive_merge.cpp' || echo '$(srcdir)/'`archive_merge.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar-archive_merge.Tpo $(DEPDIR)/webdar-archive_merge.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='archive_merge.cpp' object='webdar-archive_merge.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar-archive_merge.o `test -f 'archive_merge.cpp' || echo '$(srcdir)/'`archive_merge.cpp webdar-archive_merge.obj: archive_merge.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar-archive_merge.obj -MD -MP -MF $(DEPDIR)/webdar-archive_merge.Tpo -c -o webdar-archive_merge.obj `if test -f 'archive_merge.cpp'; then $(CYGPATH_W) 'archive_merge.cpp'; else $(CYGPATH_W) '$(srcdir)/archive_merge.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar-archive_merge.Tpo $(DEPDIR)/webdar-archive_merge.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='archive_merge.cpp' object='webdar-archive_merge.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar-archive_merge.obj `if test -f 'archive_merge.cpp'; then $(CYGPATH_W) 'archive_merge.cpp'; else $(CYGPATH_W) '$(srcdir)/archive_merge.cpp'; fi` webdar-archive_init_list.o: archive_init_list.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar-archive_init_list.o -MD -MP -MF $(DEPDIR)/webdar-archive_init_list.Tpo -c -o webdar-archive_init_list.o `test -f 'archive_init_list.cpp' || echo '$(srcdir)/'`archive_init_list.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar-archive_init_list.Tpo $(DEPDIR)/webdar-archive_init_list.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='archive_init_list.cpp' object='webdar-archive_init_list.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar-archive_init_list.o `test -f 'archive_init_list.cpp' || echo '$(srcdir)/'`archive_init_list.cpp webdar-archive_init_list.obj: archive_init_list.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar-archive_init_list.obj -MD -MP -MF $(DEPDIR)/webdar-archive_init_list.Tpo -c -o webdar-archive_init_list.obj `if test -f 'archive_init_list.cpp'; then $(CYGPATH_W) 'archive_init_list.cpp'; else $(CYGPATH_W) '$(srcdir)/archive_init_list.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar-archive_init_list.Tpo $(DEPDIR)/webdar-archive_init_list.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='archive_init_list.cpp' object='webdar-archive_init_list.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar-archive_init_list.obj `if test -f 'archive_init_list.cpp'; then $(CYGPATH_W) 'archive_init_list.cpp'; else $(CYGPATH_W) '$(srcdir)/archive_init_list.cpp'; fi` webdar-html_dir_tree.o: html_dir_tree.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar-html_dir_tree.o -MD -MP -MF $(DEPDIR)/webdar-html_dir_tree.Tpo -c -o webdar-html_dir_tree.o `test -f 'html_dir_tree.cpp' || echo '$(srcdir)/'`html_dir_tree.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar-html_dir_tree.Tpo $(DEPDIR)/webdar-html_dir_tree.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='html_dir_tree.cpp' object='webdar-html_dir_tree.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar-html_dir_tree.o `test -f 'html_dir_tree.cpp' || echo '$(srcdir)/'`html_dir_tree.cpp webdar-html_dir_tree.obj: html_dir_tree.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar-html_dir_tree.obj -MD -MP -MF $(DEPDIR)/webdar-html_dir_tree.Tpo -c -o webdar-html_dir_tree.obj `if test -f 'html_dir_tree.cpp'; then $(CYGPATH_W) 'html_dir_tree.cpp'; else $(CYGPATH_W) '$(srcdir)/html_dir_tree.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar-html_dir_tree.Tpo $(DEPDIR)/webdar-html_dir_tree.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='html_dir_tree.cpp' object='webdar-html_dir_tree.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar-html_dir_tree.obj `if test -f 'html_dir_tree.cpp'; then $(CYGPATH_W) 'html_dir_tree.cpp'; else $(CYGPATH_W) '$(srcdir)/html_dir_tree.cpp'; fi` webdar-html_listing_page.o: html_listing_page.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar-html_listing_page.o -MD -MP -MF $(DEPDIR)/webdar-html_listing_page.Tpo -c -o webdar-html_listing_page.o `test -f 'html_listing_page.cpp' || echo '$(srcdir)/'`html_listing_page.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar-html_listing_page.Tpo $(DEPDIR)/webdar-html_listing_page.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='html_listing_page.cpp' object='webdar-html_listing_page.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar-html_listing_page.o `test -f 'html_listing_page.cpp' || echo '$(srcdir)/'`html_listing_page.cpp webdar-html_listing_page.obj: html_listing_page.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar-html_listing_page.obj -MD -MP -MF $(DEPDIR)/webdar-html_listing_page.Tpo -c -o webdar-html_listing_page.obj `if test -f 'html_listing_page.cpp'; then $(CYGPATH_W) 'html_listing_page.cpp'; else $(CYGPATH_W) '$(srcdir)/html_listing_page.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar-html_listing_page.Tpo $(DEPDIR)/webdar-html_listing_page.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='html_listing_page.cpp' object='webdar-html_listing_page.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar-html_listing_page.obj `if test -f 'html_listing_page.cpp'; then $(CYGPATH_W) 'html_listing_page.cpp'; else $(CYGPATH_W) '$(srcdir)/html_listing_page.cpp'; fi` webdar-html_focus.o: html_focus.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar-html_focus.o -MD -MP -MF $(DEPDIR)/webdar-html_focus.Tpo -c -o webdar-html_focus.o `test -f 'html_focus.cpp' || echo '$(srcdir)/'`html_focus.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar-html_focus.Tpo $(DEPDIR)/webdar-html_focus.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='html_focus.cpp' object='webdar-html_focus.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar-html_focus.o `test -f 'html_focus.cpp' || echo '$(srcdir)/'`html_focus.cpp webdar-html_focus.obj: html_focus.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar-html_focus.obj -MD -MP -MF $(DEPDIR)/webdar-html_focus.Tpo -c -o webdar-html_focus.obj `if test -f 'html_focus.cpp'; then $(CYGPATH_W) 'html_focus.cpp'; else $(CYGPATH_W) '$(srcdir)/html_focus.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar-html_focus.Tpo $(DEPDIR)/webdar-html_focus.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='html_focus.cpp' object='webdar-html_focus.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar-html_focus.obj `if test -f 'html_focus.cpp'; then $(CYGPATH_W) 'html_focus.cpp'; else $(CYGPATH_W) '$(srcdir)/html_focus.cpp'; fi` webdar-static_object.o: static_object.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar-static_object.o -MD -MP -MF $(DEPDIR)/webdar-static_object.Tpo -c -o webdar-static_object.o `test -f 'static_object.cpp' || echo '$(srcdir)/'`static_object.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar-static_object.Tpo $(DEPDIR)/webdar-static_object.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='static_object.cpp' object='webdar-static_object.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar-static_object.o `test -f 'static_object.cpp' || echo '$(srcdir)/'`static_object.cpp webdar-static_object.obj: static_object.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar-static_object.obj -MD -MP -MF $(DEPDIR)/webdar-static_object.Tpo -c -o webdar-static_object.obj `if test -f 'static_object.cpp'; then $(CYGPATH_W) 'static_object.cpp'; else $(CYGPATH_W) '$(srcdir)/static_object.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar-static_object.Tpo $(DEPDIR)/webdar-static_object.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='static_object.cpp' object='webdar-static_object.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar-static_object.obj `if test -f 'static_object.cpp'; then $(CYGPATH_W) 'static_object.cpp'; else $(CYGPATH_W) '$(srcdir)/static_object.cpp'; fi` webdar-static_object_library.o: static_object_library.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar-static_object_library.o -MD -MP -MF $(DEPDIR)/webdar-static_object_library.Tpo -c -o webdar-static_object_library.o `test -f 'static_object_library.cpp' || echo '$(srcdir)/'`static_object_library.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar-static_object_library.Tpo $(DEPDIR)/webdar-static_object_library.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='static_object_library.cpp' object='webdar-static_object_library.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar-static_object_library.o `test -f 'static_object_library.cpp' || echo '$(srcdir)/'`static_object_library.cpp webdar-static_object_library.obj: static_object_library.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar-static_object_library.obj -MD -MP -MF $(DEPDIR)/webdar-static_object_library.Tpo -c -o webdar-static_object_library.obj `if test -f 'static_object_library.cpp'; then $(CYGPATH_W) 'static_object_library.cpp'; else $(CYGPATH_W) '$(srcdir)/static_object_library.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar-static_object_library.Tpo $(DEPDIR)/webdar-static_object_library.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='static_object_library.cpp' object='webdar-static_object_library.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar-static_object_library.obj `if test -f 'static_object_library.cpp'; then $(CYGPATH_W) 'static_object_library.cpp'; else $(CYGPATH_W) '$(srcdir)/static_object_library.cpp'; fi` webdar-css_class.o: css_class.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar-css_class.o -MD -MP -MF $(DEPDIR)/webdar-css_class.Tpo -c -o webdar-css_class.o `test -f 'css_class.cpp' || echo '$(srcdir)/'`css_class.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar-css_class.Tpo $(DEPDIR)/webdar-css_class.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='css_class.cpp' object='webdar-css_class.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar-css_class.o `test -f 'css_class.cpp' || echo '$(srcdir)/'`css_class.cpp webdar-css_class.obj: css_class.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar-css_class.obj -MD -MP -MF $(DEPDIR)/webdar-css_class.Tpo -c -o webdar-css_class.obj `if test -f 'css_class.cpp'; then $(CYGPATH_W) 'css_class.cpp'; else $(CYGPATH_W) '$(srcdir)/css_class.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar-css_class.Tpo $(DEPDIR)/webdar-css_class.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='css_class.cpp' object='webdar-css_class.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar-css_class.obj `if test -f 'css_class.cpp'; then $(CYGPATH_W) 'css_class.cpp'; else $(CYGPATH_W) '$(srcdir)/css_class.cpp'; fi` webdar-webdar_css_style.o: webdar_css_style.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar-webdar_css_style.o -MD -MP -MF $(DEPDIR)/webdar-webdar_css_style.Tpo -c -o webdar-webdar_css_style.o `test -f 'webdar_css_style.cpp' || echo '$(srcdir)/'`webdar_css_style.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar-webdar_css_style.Tpo $(DEPDIR)/webdar-webdar_css_style.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='webdar_css_style.cpp' object='webdar-webdar_css_style.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar-webdar_css_style.o `test -f 'webdar_css_style.cpp' || echo '$(srcdir)/'`webdar_css_style.cpp webdar-webdar_css_style.obj: webdar_css_style.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar-webdar_css_style.obj -MD -MP -MF $(DEPDIR)/webdar-webdar_css_style.Tpo -c -o webdar-webdar_css_style.obj `if test -f 'webdar_css_style.cpp'; then $(CYGPATH_W) 'webdar_css_style.cpp'; else $(CYGPATH_W) '$(srcdir)/webdar_css_style.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar-webdar_css_style.Tpo $(DEPDIR)/webdar-webdar_css_style.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='webdar_css_style.cpp' object='webdar-webdar_css_style.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar-webdar_css_style.obj `if test -f 'webdar_css_style.cpp'; then $(CYGPATH_W) 'webdar_css_style.cpp'; else $(CYGPATH_W) '$(srcdir)/webdar_css_style.cpp'; fi` webdar-css_class_group.o: css_class_group.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar-css_class_group.o -MD -MP -MF $(DEPDIR)/webdar-css_class_group.Tpo -c -o webdar-css_class_group.o `test -f 'css_class_group.cpp' || echo '$(srcdir)/'`css_class_group.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar-css_class_group.Tpo $(DEPDIR)/webdar-css_class_group.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='css_class_group.cpp' object='webdar-css_class_group.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar-css_class_group.o `test -f 'css_class_group.cpp' || echo '$(srcdir)/'`css_class_group.cpp webdar-css_class_group.obj: css_class_group.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar-css_class_group.obj -MD -MP -MF $(DEPDIR)/webdar-css_class_group.Tpo -c -o webdar-css_class_group.obj `if test -f 'css_class_group.cpp'; then $(CYGPATH_W) 'css_class_group.cpp'; else $(CYGPATH_W) '$(srcdir)/css_class_group.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar-css_class_group.Tpo $(DEPDIR)/webdar-css_class_group.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='css_class_group.cpp' object='webdar-css_class_group.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar-css_class_group.obj `if test -f 'css_class_group.cpp'; then $(CYGPATH_W) 'css_class_group.cpp'; else $(CYGPATH_W) '$(srcdir)/css_class_group.cpp'; fi` webdar-html_tabs.o: html_tabs.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar-html_tabs.o -MD -MP -MF $(DEPDIR)/webdar-html_tabs.Tpo -c -o webdar-html_tabs.o `test -f 'html_tabs.cpp' || echo '$(srcdir)/'`html_tabs.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar-html_tabs.Tpo $(DEPDIR)/webdar-html_tabs.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='html_tabs.cpp' object='webdar-html_tabs.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar-html_tabs.o `test -f 'html_tabs.cpp' || echo '$(srcdir)/'`html_tabs.cpp webdar-html_tabs.obj: html_tabs.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar-html_tabs.obj -MD -MP -MF $(DEPDIR)/webdar-html_tabs.Tpo -c -o webdar-html_tabs.obj `if test -f 'html_tabs.cpp'; then $(CYGPATH_W) 'html_tabs.cpp'; else $(CYGPATH_W) '$(srcdir)/html_tabs.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar-html_tabs.Tpo $(DEPDIR)/webdar-html_tabs.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='html_tabs.cpp' object='webdar-html_tabs.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar-html_tabs.obj `if test -f 'html_tabs.cpp'; then $(CYGPATH_W) 'html_tabs.cpp'; else $(CYGPATH_W) '$(srcdir)/html_tabs.cpp'; fi` webdar-html_select_file.o: html_select_file.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar-html_select_file.o -MD -MP -MF $(DEPDIR)/webdar-html_select_file.Tpo -c -o webdar-html_select_file.o `test -f 'html_select_file.cpp' || echo '$(srcdir)/'`html_select_file.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar-html_select_file.Tpo $(DEPDIR)/webdar-html_select_file.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='html_select_file.cpp' object='webdar-html_select_file.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar-html_select_file.o `test -f 'html_select_file.cpp' || echo '$(srcdir)/'`html_select_file.cpp webdar-html_select_file.obj: html_select_file.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar-html_select_file.obj -MD -MP -MF $(DEPDIR)/webdar-html_select_file.Tpo -c -o webdar-html_select_file.obj `if test -f 'html_select_file.cpp'; then $(CYGPATH_W) 'html_select_file.cpp'; else $(CYGPATH_W) '$(srcdir)/html_select_file.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar-html_select_file.Tpo $(DEPDIR)/webdar-html_select_file.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='html_select_file.cpp' object='webdar-html_select_file.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar-html_select_file.obj `if test -f 'html_select_file.cpp'; then $(CYGPATH_W) 'html_select_file.cpp'; else $(CYGPATH_W) '$(srcdir)/html_select_file.cpp'; fi` webdar-html_popup.o: html_popup.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar-html_popup.o -MD -MP -MF $(DEPDIR)/webdar-html_popup.Tpo -c -o webdar-html_popup.o `test -f 'html_popup.cpp' || echo '$(srcdir)/'`html_popup.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar-html_popup.Tpo $(DEPDIR)/webdar-html_popup.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='html_popup.cpp' object='webdar-html_popup.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar-html_popup.o `test -f 'html_popup.cpp' || echo '$(srcdir)/'`html_popup.cpp webdar-html_popup.obj: html_popup.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar-html_popup.obj -MD -MP -MF $(DEPDIR)/webdar-html_popup.Tpo -c -o webdar-html_popup.obj `if test -f 'html_popup.cpp'; then $(CYGPATH_W) 'html_popup.cpp'; else $(CYGPATH_W) '$(srcdir)/html_popup.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar-html_popup.Tpo $(DEPDIR)/webdar-html_popup.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='html_popup.cpp' object='webdar-html_popup.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar-html_popup.obj `if test -f 'html_popup.cpp'; then $(CYGPATH_W) 'html_popup.cpp'; else $(CYGPATH_W) '$(srcdir)/html_popup.cpp'; fi` webdar-html_form_input_file.o: html_form_input_file.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar-html_form_input_file.o -MD -MP -MF $(DEPDIR)/webdar-html_form_input_file.Tpo -c -o webdar-html_form_input_file.o `test -f 'html_form_input_file.cpp' || echo '$(srcdir)/'`html_form_input_file.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar-html_form_input_file.Tpo $(DEPDIR)/webdar-html_form_input_file.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='html_form_input_file.cpp' object='webdar-html_form_input_file.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar-html_form_input_file.o `test -f 'html_form_input_file.cpp' || echo '$(srcdir)/'`html_form_input_file.cpp webdar-html_form_input_file.obj: html_form_input_file.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar-html_form_input_file.obj -MD -MP -MF $(DEPDIR)/webdar-html_form_input_file.Tpo -c -o webdar-html_form_input_file.obj `if test -f 'html_form_input_file.cpp'; then $(CYGPATH_W) 'html_form_input_file.cpp'; else $(CYGPATH_W) '$(srcdir)/html_form_input_file.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar-html_form_input_file.Tpo $(DEPDIR)/webdar-html_form_input_file.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='html_form_input_file.cpp' object='webdar-html_form_input_file.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar-html_form_input_file.obj `if test -f 'html_form_input_file.cpp'; then $(CYGPATH_W) 'html_form_input_file.cpp'; else $(CYGPATH_W) '$(srcdir)/html_form_input_file.cpp'; fi` webdar-jsoner.o: jsoner.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar-jsoner.o -MD -MP -MF $(DEPDIR)/webdar-jsoner.Tpo -c -o webdar-jsoner.o `test -f 'jsoner.cpp' || echo '$(srcdir)/'`jsoner.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar-jsoner.Tpo $(DEPDIR)/webdar-jsoner.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='jsoner.cpp' object='webdar-jsoner.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar-jsoner.o `test -f 'jsoner.cpp' || echo '$(srcdir)/'`jsoner.cpp webdar-jsoner.obj: jsoner.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar-jsoner.obj -MD -MP -MF $(DEPDIR)/webdar-jsoner.Tpo -c -o webdar-jsoner.obj `if test -f 'jsoner.cpp'; then $(CYGPATH_W) 'jsoner.cpp'; else $(CYGPATH_W) '$(srcdir)/jsoner.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar-jsoner.Tpo $(DEPDIR)/webdar-jsoner.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='jsoner.cpp' object='webdar-jsoner.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar-jsoner.obj `if test -f 'jsoner.cpp'; then $(CYGPATH_W) 'jsoner.cpp'; else $(CYGPATH_W) '$(srcdir)/jsoner.cpp'; fi` webdar-html_derouleur.o: html_derouleur.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar-html_derouleur.o -MD -MP -MF $(DEPDIR)/webdar-html_derouleur.Tpo -c -o webdar-html_derouleur.o `test -f 'html_derouleur.cpp' || echo '$(srcdir)/'`html_derouleur.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar-html_derouleur.Tpo $(DEPDIR)/webdar-html_derouleur.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='html_derouleur.cpp' object='webdar-html_derouleur.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar-html_derouleur.o `test -f 'html_derouleur.cpp' || echo '$(srcdir)/'`html_derouleur.cpp webdar-html_derouleur.obj: html_derouleur.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar-html_derouleur.obj -MD -MP -MF $(DEPDIR)/webdar-html_derouleur.Tpo -c -o webdar-html_derouleur.obj `if test -f 'html_derouleur.cpp'; then $(CYGPATH_W) 'html_derouleur.cpp'; else $(CYGPATH_W) '$(srcdir)/html_derouleur.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar-html_derouleur.Tpo $(DEPDIR)/webdar-html_derouleur.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='html_derouleur.cpp' object='webdar-html_derouleur.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar-html_derouleur.obj `if test -f 'html_derouleur.cpp'; then $(CYGPATH_W) 'html_derouleur.cpp'; else $(CYGPATH_W) '$(srcdir)/html_derouleur.cpp'; fi` webdar-html_entrepot.o: html_entrepot.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar-html_entrepot.o -MD -MP -MF $(DEPDIR)/webdar-html_entrepot.Tpo -c -o webdar-html_entrepot.o `test -f 'html_entrepot.cpp' || echo '$(srcdir)/'`html_entrepot.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar-html_entrepot.Tpo $(DEPDIR)/webdar-html_entrepot.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='html_entrepot.cpp' object='webdar-html_entrepot.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar-html_entrepot.o `test -f 'html_entrepot.cpp' || echo '$(srcdir)/'`html_entrepot.cpp webdar-html_entrepot.obj: html_entrepot.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar-html_entrepot.obj -MD -MP -MF $(DEPDIR)/webdar-html_entrepot.Tpo -c -o webdar-html_entrepot.obj `if test -f 'html_entrepot.cpp'; then $(CYGPATH_W) 'html_entrepot.cpp'; else $(CYGPATH_W) '$(srcdir)/html_entrepot.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar-html_entrepot.Tpo $(DEPDIR)/webdar-html_entrepot.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='html_entrepot.cpp' object='webdar-html_entrepot.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar-html_entrepot.obj `if test -f 'html_entrepot.cpp'; then $(CYGPATH_W) 'html_entrepot.cpp'; else $(CYGPATH_W) '$(srcdir)/html_entrepot.cpp'; fi` webdar-environment.o: environment.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar-environment.o -MD -MP -MF $(DEPDIR)/webdar-environment.Tpo -c -o webdar-environment.o `test -f 'environment.cpp' || echo '$(srcdir)/'`environment.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar-environment.Tpo $(DEPDIR)/webdar-environment.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='environment.cpp' object='webdar-environment.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar-environment.o `test -f 'environment.cpp' || echo '$(srcdir)/'`environment.cpp webdar-environment.obj: environment.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar-environment.obj -MD -MP -MF $(DEPDIR)/webdar-environment.Tpo -c -o webdar-environment.obj `if test -f 'environment.cpp'; then $(CYGPATH_W) 'environment.cpp'; else $(CYGPATH_W) '$(srcdir)/environment.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar-environment.Tpo $(DEPDIR)/webdar-environment.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='environment.cpp' object='webdar-environment.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar-environment.obj `if test -f 'environment.cpp'; then $(CYGPATH_W) 'environment.cpp'; else $(CYGPATH_W) '$(srcdir)/environment.cpp'; fi` webdar-html_libdar_running_popup.o: html_libdar_running_popup.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar-html_libdar_running_popup.o -MD -MP -MF $(DEPDIR)/webdar-html_libdar_running_popup.Tpo -c -o webdar-html_libdar_running_popup.o `test -f 'html_libdar_running_popup.cpp' || echo '$(srcdir)/'`html_libdar_running_popup.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar-html_libdar_running_popup.Tpo $(DEPDIR)/webdar-html_libdar_running_popup.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='html_libdar_running_popup.cpp' object='webdar-html_libdar_running_popup.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar-html_libdar_running_popup.o `test -f 'html_libdar_running_popup.cpp' || echo '$(srcdir)/'`html_libdar_running_popup.cpp webdar-html_libdar_running_popup.obj: html_libdar_running_popup.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar-html_libdar_running_popup.obj -MD -MP -MF $(DEPDIR)/webdar-html_libdar_running_popup.Tpo -c -o webdar-html_libdar_running_popup.obj `if test -f 'html_libdar_running_popup.cpp'; then $(CYGPATH_W) 'html_libdar_running_popup.cpp'; else $(CYGPATH_W) '$(srcdir)/html_libdar_running_popup.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar-html_libdar_running_popup.Tpo $(DEPDIR)/webdar-html_libdar_running_popup.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='html_libdar_running_popup.cpp' object='webdar-html_libdar_running_popup.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar-html_libdar_running_popup.obj `if test -f 'html_libdar_running_popup.cpp'; then $(CYGPATH_W) 'html_libdar_running_popup.cpp'; else $(CYGPATH_W) '$(srcdir)/html_libdar_running_popup.cpp'; fi` webdar-html_mask.o: html_mask.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar-html_mask.o -MD -MP -MF $(DEPDIR)/webdar-html_mask.Tpo -c -o webdar-html_mask.o `test -f 'html_mask.cpp' || echo '$(srcdir)/'`html_mask.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar-html_mask.Tpo $(DEPDIR)/webdar-html_mask.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='html_mask.cpp' object='webdar-html_mask.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar-html_mask.o `test -f 'html_mask.cpp' || echo '$(srcdir)/'`html_mask.cpp webdar-html_mask.obj: html_mask.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar-html_mask.obj -MD -MP -MF $(DEPDIR)/webdar-html_mask.Tpo -c -o webdar-html_mask.obj `if test -f 'html_mask.cpp'; then $(CYGPATH_W) 'html_mask.cpp'; else $(CYGPATH_W) '$(srcdir)/html_mask.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar-html_mask.Tpo $(DEPDIR)/webdar-html_mask.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='html_mask.cpp' object='webdar-html_mask.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar-html_mask.obj `if test -f 'html_mask.cpp'; then $(CYGPATH_W) 'html_mask.cpp'; else $(CYGPATH_W) '$(srcdir)/html_mask.cpp'; fi` webdar-html_form_mask_expression.o: html_form_mask_expression.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar-html_form_mask_expression.o -MD -MP -MF $(DEPDIR)/webdar-html_form_mask_expression.Tpo -c -o webdar-html_form_mask_expression.o `test -f 'html_form_mask_expression.cpp' || echo '$(srcdir)/'`html_form_mask_expression.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar-html_form_mask_expression.Tpo $(DEPDIR)/webdar-html_form_mask_expression.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='html_form_mask_expression.cpp' object='webdar-html_form_mask_expression.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar-html_form_mask_expression.o `test -f 'html_form_mask_expression.cpp' || echo '$(srcdir)/'`html_form_mask_expression.cpp webdar-html_form_mask_expression.obj: html_form_mask_expression.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar-html_form_mask_expression.obj -MD -MP -MF $(DEPDIR)/webdar-html_form_mask_expression.Tpo -c -o webdar-html_form_mask_expression.obj `if test -f 'html_form_mask_expression.cpp'; then $(CYGPATH_W) 'html_form_mask_expression.cpp'; else $(CYGPATH_W) '$(srcdir)/html_form_mask_expression.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar-html_form_mask_expression.Tpo $(DEPDIR)/webdar-html_form_mask_expression.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='html_form_mask_expression.cpp' object='webdar-html_form_mask_expression.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar-html_form_mask_expression.obj `if test -f 'html_form_mask_expression.cpp'; then $(CYGPATH_W) 'html_form_mask_expression.cpp'; else $(CYGPATH_W) '$(srcdir)/html_form_mask_expression.cpp'; fi` webdar-html_form_mask_bool.o: html_form_mask_bool.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar-html_form_mask_bool.o -MD -MP -MF $(DEPDIR)/webdar-html_form_mask_bool.Tpo -c -o webdar-html_form_mask_bool.o `test -f 'html_form_mask_bool.cpp' || echo '$(srcdir)/'`html_form_mask_bool.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar-html_form_mask_bool.Tpo $(DEPDIR)/webdar-html_form_mask_bool.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='html_form_mask_bool.cpp' object='webdar-html_form_mask_bool.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar-html_form_mask_bool.o `test -f 'html_form_mask_bool.cpp' || echo '$(srcdir)/'`html_form_mask_bool.cpp webdar-html_form_mask_bool.obj: html_form_mask_bool.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar-html_form_mask_bool.obj -MD -MP -MF $(DEPDIR)/webdar-html_form_mask_bool.Tpo -c -o webdar-html_form_mask_bool.obj `if test -f 'html_form_mask_bool.cpp'; then $(CYGPATH_W) 'html_form_mask_bool.cpp'; else $(CYGPATH_W) '$(srcdir)/html_form_mask_bool.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar-html_form_mask_bool.Tpo $(DEPDIR)/webdar-html_form_mask_bool.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='html_form_mask_bool.cpp' object='webdar-html_form_mask_bool.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar-html_form_mask_bool.obj `if test -f 'html_form_mask_bool.cpp'; then $(CYGPATH_W) 'html_form_mask_bool.cpp'; else $(CYGPATH_W) '$(srcdir)/html_form_mask_bool.cpp'; fi` webdar-html_mask_form_filename.o: html_mask_form_filename.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar-html_mask_form_filename.o -MD -MP -MF $(DEPDIR)/webdar-html_mask_form_filename.Tpo -c -o webdar-html_mask_form_filename.o `test -f 'html_mask_form_filename.cpp' || echo '$(srcdir)/'`html_mask_form_filename.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar-html_mask_form_filename.Tpo $(DEPDIR)/webdar-html_mask_form_filename.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='html_mask_form_filename.cpp' object='webdar-html_mask_form_filename.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar-html_mask_form_filename.o `test -f 'html_mask_form_filename.cpp' || echo '$(srcdir)/'`html_mask_form_filename.cpp webdar-html_mask_form_filename.obj: html_mask_form_filename.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar-html_mask_form_filename.obj -MD -MP -MF $(DEPDIR)/webdar-html_mask_form_filename.Tpo -c -o webdar-html_mask_form_filename.obj `if test -f 'html_mask_form_filename.cpp'; then $(CYGPATH_W) 'html_mask_form_filename.cpp'; else $(CYGPATH_W) '$(srcdir)/html_mask_form_filename.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar-html_mask_form_filename.Tpo $(DEPDIR)/webdar-html_mask_form_filename.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='html_mask_form_filename.cpp' object='webdar-html_mask_form_filename.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar-html_mask_form_filename.obj `if test -f 'html_mask_form_filename.cpp'; then $(CYGPATH_W) 'html_mask_form_filename.cpp'; else $(CYGPATH_W) '$(srcdir)/html_mask_form_filename.cpp'; fi` webdar-html_form_mask_subdir.o: html_form_mask_subdir.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar-html_form_mask_subdir.o -MD -MP -MF $(DEPDIR)/webdar-html_form_mask_subdir.Tpo -c -o webdar-html_form_mask_subdir.o `test -f 'html_form_mask_subdir.cpp' || echo '$(srcdir)/'`html_form_mask_subdir.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar-html_form_mask_subdir.Tpo $(DEPDIR)/webdar-html_form_mask_subdir.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='html_form_mask_subdir.cpp' object='webdar-html_form_mask_subdir.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar-html_form_mask_subdir.o `test -f 'html_form_mask_subdir.cpp' || echo '$(srcdir)/'`html_form_mask_subdir.cpp webdar-html_form_mask_subdir.obj: html_form_mask_subdir.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar-html_form_mask_subdir.obj -MD -MP -MF $(DEPDIR)/webdar-html_form_mask_subdir.Tpo -c -o webdar-html_form_mask_subdir.obj `if test -f 'html_form_mask_subdir.cpp'; then $(CYGPATH_W) 'html_form_mask_subdir.cpp'; else $(CYGPATH_W) '$(srcdir)/html_form_mask_subdir.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar-html_form_mask_subdir.Tpo $(DEPDIR)/webdar-html_form_mask_subdir.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='html_form_mask_subdir.cpp' object='webdar-html_form_mask_subdir.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar-html_form_mask_subdir.obj `if test -f 'html_form_mask_subdir.cpp'; then $(CYGPATH_W) 'html_form_mask_subdir.cpp'; else $(CYGPATH_W) '$(srcdir)/html_form_mask_subdir.cpp'; fi` webdar-html_mask_form_path.o: html_mask_form_path.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar-html_mask_form_path.o -MD -MP -MF $(DEPDIR)/webdar-html_mask_form_path.Tpo -c -o webdar-html_mask_form_path.o `test -f 'html_mask_form_path.cpp' || echo '$(srcdir)/'`html_mask_form_path.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar-html_mask_form_path.Tpo $(DEPDIR)/webdar-html_mask_form_path.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='html_mask_form_path.cpp' object='webdar-html_mask_form_path.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar-html_mask_form_path.o `test -f 'html_mask_form_path.cpp' || echo '$(srcdir)/'`html_mask_form_path.cpp webdar-html_mask_form_path.obj: html_mask_form_path.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar-html_mask_form_path.obj -MD -MP -MF $(DEPDIR)/webdar-html_mask_form_path.Tpo -c -o webdar-html_mask_form_path.obj `if test -f 'html_mask_form_path.cpp'; then $(CYGPATH_W) 'html_mask_form_path.cpp'; else $(CYGPATH_W) '$(srcdir)/html_mask_form_path.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar-html_mask_form_path.Tpo $(DEPDIR)/webdar-html_mask_form_path.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='html_mask_form_path.cpp' object='webdar-html_mask_form_path.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar-html_mask_form_path.obj `if test -f 'html_mask_form_path.cpp'; then $(CYGPATH_W) 'html_mask_form_path.cpp'; else $(CYGPATH_W) '$(srcdir)/html_mask_form_path.cpp'; fi` webdar-html_double_button.o: html_double_button.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar-html_double_button.o -MD -MP -MF $(DEPDIR)/webdar-html_double_button.Tpo -c -o webdar-html_double_button.o `test -f 'html_double_button.cpp' || echo '$(srcdir)/'`html_double_button.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar-html_double_button.Tpo $(DEPDIR)/webdar-html_double_button.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='html_double_button.cpp' object='webdar-html_double_button.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar-html_double_button.o `test -f 'html_double_button.cpp' || echo '$(srcdir)/'`html_double_button.cpp webdar-html_double_button.obj: html_double_button.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar-html_double_button.obj -MD -MP -MF $(DEPDIR)/webdar-html_double_button.Tpo -c -o webdar-html_double_button.obj `if test -f 'html_double_button.cpp'; then $(CYGPATH_W) 'html_double_button.cpp'; else $(CYGPATH_W) '$(srcdir)/html_double_button.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar-html_double_button.Tpo $(DEPDIR)/webdar-html_double_button.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='html_double_button.cpp' object='webdar-html_double_button.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar-html_double_button.obj `if test -f 'html_double_button.cpp'; then $(CYGPATH_W) 'html_double_button.cpp'; else $(CYGPATH_W) '$(srcdir)/html_double_button.cpp'; fi` webdar-html_demo.o: html_demo.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar-html_demo.o -MD -MP -MF $(DEPDIR)/webdar-html_demo.Tpo -c -o webdar-html_demo.o `test -f 'html_demo.cpp' || echo '$(srcdir)/'`html_demo.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar-html_demo.Tpo $(DEPDIR)/webdar-html_demo.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='html_demo.cpp' object='webdar-html_demo.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar-html_demo.o `test -f 'html_demo.cpp' || echo '$(srcdir)/'`html_demo.cpp webdar-html_demo.obj: html_demo.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar-html_demo.obj -MD -MP -MF $(DEPDIR)/webdar-html_demo.Tpo -c -o webdar-html_demo.obj `if test -f 'html_demo.cpp'; then $(CYGPATH_W) 'html_demo.cpp'; else $(CYGPATH_W) '$(srcdir)/html_demo.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar-html_demo.Tpo $(DEPDIR)/webdar-html_demo.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='html_demo.cpp' object='webdar-html_demo.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar-html_demo.obj `if test -f 'html_demo.cpp'; then $(CYGPATH_W) 'html_demo.cpp'; else $(CYGPATH_W) '$(srcdir)/html_demo.cpp'; fi` webdar-html_form_mask_file.o: html_form_mask_file.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar-html_form_mask_file.o -MD -MP -MF $(DEPDIR)/webdar-html_form_mask_file.Tpo -c -o webdar-html_form_mask_file.o `test -f 'html_form_mask_file.cpp' || echo '$(srcdir)/'`html_form_mask_file.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar-html_form_mask_file.Tpo $(DEPDIR)/webdar-html_form_mask_file.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='html_form_mask_file.cpp' object='webdar-html_form_mask_file.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar-html_form_mask_file.o `test -f 'html_form_mask_file.cpp' || echo '$(srcdir)/'`html_form_mask_file.cpp webdar-html_form_mask_file.obj: html_form_mask_file.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar-html_form_mask_file.obj -MD -MP -MF $(DEPDIR)/webdar-html_form_mask_file.Tpo -c -o webdar-html_form_mask_file.obj `if test -f 'html_form_mask_file.cpp'; then $(CYGPATH_W) 'html_form_mask_file.cpp'; else $(CYGPATH_W) '$(srcdir)/html_form_mask_file.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar-html_form_mask_file.Tpo $(DEPDIR)/webdar-html_form_mask_file.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='html_form_mask_file.cpp' object='webdar-html_form_mask_file.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar-html_form_mask_file.obj `if test -f 'html_form_mask_file.cpp'; then $(CYGPATH_W) 'html_form_mask_file.cpp'; else $(CYGPATH_W) '$(srcdir)/html_form_mask_file.cpp'; fi` webdar-html_archive_repair.o: html_archive_repair.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar-html_archive_repair.o -MD -MP -MF $(DEPDIR)/webdar-html_archive_repair.Tpo -c -o webdar-html_archive_repair.o `test -f 'html_archive_repair.cpp' || echo '$(srcdir)/'`html_archive_repair.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar-html_archive_repair.Tpo $(DEPDIR)/webdar-html_archive_repair.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='html_archive_repair.cpp' object='webdar-html_archive_repair.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar-html_archive_repair.o `test -f 'html_archive_repair.cpp' || echo '$(srcdir)/'`html_archive_repair.cpp webdar-html_archive_repair.obj: html_archive_repair.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar-html_archive_repair.obj -MD -MP -MF $(DEPDIR)/webdar-html_archive_repair.Tpo -c -o webdar-html_archive_repair.obj `if test -f 'html_archive_repair.cpp'; then $(CYGPATH_W) 'html_archive_repair.cpp'; else $(CYGPATH_W) '$(srcdir)/html_archive_repair.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar-html_archive_repair.Tpo $(DEPDIR)/webdar-html_archive_repair.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='html_archive_repair.cpp' object='webdar-html_archive_repair.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar-html_archive_repair.obj `if test -f 'html_archive_repair.cpp'; then $(CYGPATH_W) 'html_archive_repair.cpp'; else $(CYGPATH_W) '$(srcdir)/html_archive_repair.cpp'; fi` webdar-archive_repair.o: archive_repair.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar-archive_repair.o -MD -MP -MF $(DEPDIR)/webdar-archive_repair.Tpo -c -o webdar-archive_repair.o `test -f 'archive_repair.cpp' || echo '$(srcdir)/'`archive_repair.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar-archive_repair.Tpo $(DEPDIR)/webdar-archive_repair.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='archive_repair.cpp' object='webdar-archive_repair.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar-archive_repair.o `test -f 'archive_repair.cpp' || echo '$(srcdir)/'`archive_repair.cpp webdar-archive_repair.obj: archive_repair.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar-archive_repair.obj -MD -MP -MF $(DEPDIR)/webdar-archive_repair.Tpo -c -o webdar-archive_repair.obj `if test -f 'archive_repair.cpp'; then $(CYGPATH_W) 'archive_repair.cpp'; else $(CYGPATH_W) '$(srcdir)/archive_repair.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar-archive_repair.Tpo $(DEPDIR)/webdar-archive_repair.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='archive_repair.cpp' object='webdar-archive_repair.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar-archive_repair.obj `if test -f 'archive_repair.cpp'; then $(CYGPATH_W) 'archive_repair.cpp'; else $(CYGPATH_W) '$(srcdir)/archive_repair.cpp'; fi` webdar-html_archive_compare.o: html_archive_compare.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar-html_archive_compare.o -MD -MP -MF $(DEPDIR)/webdar-html_archive_compare.Tpo -c -o webdar-html_archive_compare.o `test -f 'html_archive_compare.cpp' || echo '$(srcdir)/'`html_archive_compare.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar-html_archive_compare.Tpo $(DEPDIR)/webdar-html_archive_compare.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='html_archive_compare.cpp' object='webdar-html_archive_compare.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar-html_archive_compare.o `test -f 'html_archive_compare.cpp' || echo '$(srcdir)/'`html_archive_compare.cpp webdar-html_archive_compare.obj: html_archive_compare.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar-html_archive_compare.obj -MD -MP -MF $(DEPDIR)/webdar-html_archive_compare.Tpo -c -o webdar-html_archive_compare.obj `if test -f 'html_archive_compare.cpp'; then $(CYGPATH_W) 'html_archive_compare.cpp'; else $(CYGPATH_W) '$(srcdir)/html_archive_compare.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar-html_archive_compare.Tpo $(DEPDIR)/webdar-html_archive_compare.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='html_archive_compare.cpp' object='webdar-html_archive_compare.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar-html_archive_compare.obj `if test -f 'html_archive_compare.cpp'; then $(CYGPATH_W) 'html_archive_compare.cpp'; else $(CYGPATH_W) '$(srcdir)/html_archive_compare.cpp'; fi` webdar-html_archive_extract.o: html_archive_extract.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar-html_archive_extract.o -MD -MP -MF $(DEPDIR)/webdar-html_archive_extract.Tpo -c -o webdar-html_archive_extract.o `test -f 'html_archive_extract.cpp' || echo '$(srcdir)/'`html_archive_extract.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar-html_archive_extract.Tpo $(DEPDIR)/webdar-html_archive_extract.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='html_archive_extract.cpp' object='webdar-html_archive_extract.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar-html_archive_extract.o `test -f 'html_archive_extract.cpp' || echo '$(srcdir)/'`html_archive_extract.cpp webdar-html_archive_extract.obj: html_archive_extract.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar-html_archive_extract.obj -MD -MP -MF $(DEPDIR)/webdar-html_archive_extract.Tpo -c -o webdar-html_archive_extract.obj `if test -f 'html_archive_extract.cpp'; then $(CYGPATH_W) 'html_archive_extract.cpp'; else $(CYGPATH_W) '$(srcdir)/html_archive_extract.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar-html_archive_extract.Tpo $(DEPDIR)/webdar-html_archive_extract.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='html_archive_extract.cpp' object='webdar-html_archive_extract.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar-html_archive_extract.obj `if test -f 'html_archive_extract.cpp'; then $(CYGPATH_W) 'html_archive_extract.cpp'; else $(CYGPATH_W) '$(srcdir)/html_archive_extract.cpp'; fi` webdar-html_options_repair.o: html_options_repair.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar-html_options_repair.o -MD -MP -MF $(DEPDIR)/webdar-html_options_repair.Tpo -c -o webdar-html_options_repair.o `test -f 'html_options_repair.cpp' || echo '$(srcdir)/'`html_options_repair.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar-html_options_repair.Tpo $(DEPDIR)/webdar-html_options_repair.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='html_options_repair.cpp' object='webdar-html_options_repair.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar-html_options_repair.o `test -f 'html_options_repair.cpp' || echo '$(srcdir)/'`html_options_repair.cpp webdar-html_options_repair.obj: html_options_repair.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar-html_options_repair.obj -MD -MP -MF $(DEPDIR)/webdar-html_options_repair.Tpo -c -o webdar-html_options_repair.obj `if test -f 'html_options_repair.cpp'; then $(CYGPATH_W) 'html_options_repair.cpp'; else $(CYGPATH_W) '$(srcdir)/html_options_repair.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar-html_options_repair.Tpo $(DEPDIR)/webdar-html_options_repair.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='html_options_repair.cpp' object='webdar-html_options_repair.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar-html_options_repair.obj `if test -f 'html_options_repair.cpp'; then $(CYGPATH_W) 'html_options_repair.cpp'; else $(CYGPATH_W) '$(srcdir)/html_options_repair.cpp'; fi` webdar-html_form_overwrite_constant_action.o: html_form_overwrite_constant_action.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar-html_form_overwrite_constant_action.o -MD -MP -MF $(DEPDIR)/webdar-html_form_overwrite_constant_action.Tpo -c -o webdar-html_form_overwrite_constant_action.o `test -f 'html_form_overwrite_constant_action.cpp' || echo '$(srcdir)/'`html_form_overwrite_constant_action.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar-html_form_overwrite_constant_action.Tpo $(DEPDIR)/webdar-html_form_overwrite_constant_action.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='html_form_overwrite_constant_action.cpp' object='webdar-html_form_overwrite_constant_action.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar-html_form_overwrite_constant_action.o `test -f 'html_form_overwrite_constant_action.cpp' || echo '$(srcdir)/'`html_form_overwrite_constant_action.cpp webdar-html_form_overwrite_constant_action.obj: html_form_overwrite_constant_action.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar-html_form_overwrite_constant_action.obj -MD -MP -MF $(DEPDIR)/webdar-html_form_overwrite_constant_action.Tpo -c -o webdar-html_form_overwrite_constant_action.obj `if test -f 'html_form_overwrite_constant_action.cpp'; then $(CYGPATH_W) 'html_form_overwrite_constant_action.cpp'; else $(CYGPATH_W) '$(srcdir)/html_form_overwrite_constant_action.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar-html_form_overwrite_constant_action.Tpo $(DEPDIR)/webdar-html_form_overwrite_constant_action.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='html_form_overwrite_constant_action.cpp' object='webdar-html_form_overwrite_constant_action.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar-html_form_overwrite_constant_action.obj `if test -f 'html_form_overwrite_constant_action.cpp'; then $(CYGPATH_W) 'html_form_overwrite_constant_action.cpp'; else $(CYGPATH_W) '$(srcdir)/html_form_overwrite_constant_action.cpp'; fi` webdar-html_form_overwrite_base_criterium.o: html_form_overwrite_base_criterium.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar-html_form_overwrite_base_criterium.o -MD -MP -MF $(DEPDIR)/webdar-html_form_overwrite_base_criterium.Tpo -c -o webdar-html_form_overwrite_base_criterium.o `test -f 'html_form_overwrite_base_criterium.cpp' || echo '$(srcdir)/'`html_form_overwrite_base_criterium.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar-html_form_overwrite_base_criterium.Tpo $(DEPDIR)/webdar-html_form_overwrite_base_criterium.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='html_form_overwrite_base_criterium.cpp' object='webdar-html_form_overwrite_base_criterium.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar-html_form_overwrite_base_criterium.o `test -f 'html_form_overwrite_base_criterium.cpp' || echo '$(srcdir)/'`html_form_overwrite_base_criterium.cpp webdar-html_form_overwrite_base_criterium.obj: html_form_overwrite_base_criterium.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar-html_form_overwrite_base_criterium.obj -MD -MP -MF $(DEPDIR)/webdar-html_form_overwrite_base_criterium.Tpo -c -o webdar-html_form_overwrite_base_criterium.obj `if test -f 'html_form_overwrite_base_criterium.cpp'; then $(CYGPATH_W) 'html_form_overwrite_base_criterium.cpp'; else $(CYGPATH_W) '$(srcdir)/html_form_overwrite_base_criterium.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar-html_form_overwrite_base_criterium.Tpo $(DEPDIR)/webdar-html_form_overwrite_base_criterium.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='html_form_overwrite_base_criterium.cpp' object='webdar-html_form_overwrite_base_criterium.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar-html_form_overwrite_base_criterium.obj `if test -f 'html_form_overwrite_base_criterium.cpp'; then $(CYGPATH_W) 'html_form_overwrite_base_criterium.cpp'; else $(CYGPATH_W) '$(srcdir)/html_form_overwrite_base_criterium.cpp'; fi` webdar-html_form_overwrite_combining_criterium.o: html_form_overwrite_combining_criterium.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar-html_form_overwrite_combining_criterium.o -MD -MP -MF $(DEPDIR)/webdar-html_form_overwrite_combining_criterium.Tpo -c -o webdar-html_form_overwrite_combining_criterium.o `test -f 'html_form_overwrite_combining_criterium.cpp' || echo '$(srcdir)/'`html_form_overwrite_combining_criterium.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar-html_form_overwrite_combining_criterium.Tpo $(DEPDIR)/webdar-html_form_overwrite_combining_criterium.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='html_form_overwrite_combining_criterium.cpp' object='webdar-html_form_overwrite_combining_criterium.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar-html_form_overwrite_combining_criterium.o `test -f 'html_form_overwrite_combining_criterium.cpp' || echo '$(srcdir)/'`html_form_overwrite_combining_criterium.cpp webdar-html_form_overwrite_combining_criterium.obj: html_form_overwrite_combining_criterium.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar-html_form_overwrite_combining_criterium.obj -MD -MP -MF $(DEPDIR)/webdar-html_form_overwrite_combining_criterium.Tpo -c -o webdar-html_form_overwrite_combining_criterium.obj `if test -f 'html_form_overwrite_combining_criterium.cpp'; then $(CYGPATH_W) 'html_form_overwrite_combining_criterium.cpp'; else $(CYGPATH_W) '$(srcdir)/html_form_overwrite_combining_criterium.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar-html_form_overwrite_combining_criterium.Tpo $(DEPDIR)/webdar-html_form_overwrite_combining_criterium.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='html_form_overwrite_combining_criterium.cpp' object='webdar-html_form_overwrite_combining_criterium.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar-html_form_overwrite_combining_criterium.obj `if test -f 'html_form_overwrite_combining_criterium.cpp'; then $(CYGPATH_W) 'html_form_overwrite_combining_criterium.cpp'; else $(CYGPATH_W) '$(srcdir)/html_form_overwrite_combining_criterium.cpp'; fi` webdar-html_form_overwrite_conditional_action.o: html_form_overwrite_conditional_action.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar-html_form_overwrite_conditional_action.o -MD -MP -MF $(DEPDIR)/webdar-html_form_overwrite_conditional_action.Tpo -c -o webdar-html_form_overwrite_conditional_action.o `test -f 'html_form_overwrite_conditional_action.cpp' || echo '$(srcdir)/'`html_form_overwrite_conditional_action.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar-html_form_overwrite_conditional_action.Tpo $(DEPDIR)/webdar-html_form_overwrite_conditional_action.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='html_form_overwrite_conditional_action.cpp' object='webdar-html_form_overwrite_conditional_action.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar-html_form_overwrite_conditional_action.o `test -f 'html_form_overwrite_conditional_action.cpp' || echo '$(srcdir)/'`html_form_overwrite_conditional_action.cpp webdar-html_form_overwrite_conditional_action.obj: html_form_overwrite_conditional_action.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar-html_form_overwrite_conditional_action.obj -MD -MP -MF $(DEPDIR)/webdar-html_form_overwrite_conditional_action.Tpo -c -o webdar-html_form_overwrite_conditional_action.obj `if test -f 'html_form_overwrite_conditional_action.cpp'; then $(CYGPATH_W) 'html_form_overwrite_conditional_action.cpp'; else $(CYGPATH_W) '$(srcdir)/html_form_overwrite_conditional_action.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar-html_form_overwrite_conditional_action.Tpo $(DEPDIR)/webdar-html_form_overwrite_conditional_action.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='html_form_overwrite_conditional_action.cpp' object='webdar-html_form_overwrite_conditional_action.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar-html_form_overwrite_conditional_action.obj `if test -f 'html_form_overwrite_conditional_action.cpp'; then $(CYGPATH_W) 'html_form_overwrite_conditional_action.cpp'; else $(CYGPATH_W) '$(srcdir)/html_form_overwrite_conditional_action.cpp'; fi` webdar-html_form_overwrite_action.o: html_form_overwrite_action.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar-html_form_overwrite_action.o -MD -MP -MF $(DEPDIR)/webdar-html_form_overwrite_action.Tpo -c -o webdar-html_form_overwrite_action.o `test -f 'html_form_overwrite_action.cpp' || echo '$(srcdir)/'`html_form_overwrite_action.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar-html_form_overwrite_action.Tpo $(DEPDIR)/webdar-html_form_overwrite_action.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='html_form_overwrite_action.cpp' object='webdar-html_form_overwrite_action.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar-html_form_overwrite_action.o `test -f 'html_form_overwrite_action.cpp' || echo '$(srcdir)/'`html_form_overwrite_action.cpp webdar-html_form_overwrite_action.obj: html_form_overwrite_action.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar-html_form_overwrite_action.obj -MD -MP -MF $(DEPDIR)/webdar-html_form_overwrite_action.Tpo -c -o webdar-html_form_overwrite_action.obj `if test -f 'html_form_overwrite_action.cpp'; then $(CYGPATH_W) 'html_form_overwrite_action.cpp'; else $(CYGPATH_W) '$(srcdir)/html_form_overwrite_action.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar-html_form_overwrite_action.Tpo $(DEPDIR)/webdar-html_form_overwrite_action.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='html_form_overwrite_action.cpp' object='webdar-html_form_overwrite_action.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar-html_form_overwrite_action.obj `if test -f 'html_form_overwrite_action.cpp'; then $(CYGPATH_W) 'html_form_overwrite_action.cpp'; else $(CYGPATH_W) '$(srcdir)/html_form_overwrite_action.cpp'; fi` webdar-html_hr.o: html_hr.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar-html_hr.o -MD -MP -MF $(DEPDIR)/webdar-html_hr.Tpo -c -o webdar-html_hr.o `test -f 'html_hr.cpp' || echo '$(srcdir)/'`html_hr.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar-html_hr.Tpo $(DEPDIR)/webdar-html_hr.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='html_hr.cpp' object='webdar-html_hr.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar-html_hr.o `test -f 'html_hr.cpp' || echo '$(srcdir)/'`html_hr.cpp webdar-html_hr.obj: html_hr.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar-html_hr.obj -MD -MP -MF $(DEPDIR)/webdar-html_hr.Tpo -c -o webdar-html_hr.obj `if test -f 'html_hr.cpp'; then $(CYGPATH_W) 'html_hr.cpp'; else $(CYGPATH_W) '$(srcdir)/html_hr.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar-html_hr.Tpo $(DEPDIR)/webdar-html_hr.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='html_hr.cpp' object='webdar-html_hr.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar-html_hr.obj `if test -f 'html_hr.cpp'; then $(CYGPATH_W) 'html_hr.cpp'; else $(CYGPATH_W) '$(srcdir)/html_hr.cpp'; fi` webdar-html_form_overwrite_chain_action.o: html_form_overwrite_chain_action.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar-html_form_overwrite_chain_action.o -MD -MP -MF $(DEPDIR)/webdar-html_form_overwrite_chain_action.Tpo -c -o webdar-html_form_overwrite_chain_action.o `test -f 'html_form_overwrite_chain_action.cpp' || echo '$(srcdir)/'`html_form_overwrite_chain_action.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar-html_form_overwrite_chain_action.Tpo $(DEPDIR)/webdar-html_form_overwrite_chain_action.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='html_form_overwrite_chain_action.cpp' object='webdar-html_form_overwrite_chain_action.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar-html_form_overwrite_chain_action.o `test -f 'html_form_overwrite_chain_action.cpp' || echo '$(srcdir)/'`html_form_overwrite_chain_action.cpp webdar-html_form_overwrite_chain_action.obj: html_form_overwrite_chain_action.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar-html_form_overwrite_chain_action.obj -MD -MP -MF $(DEPDIR)/webdar-html_form_overwrite_chain_action.Tpo -c -o webdar-html_form_overwrite_chain_action.obj `if test -f 'html_form_overwrite_chain_action.cpp'; then $(CYGPATH_W) 'html_form_overwrite_chain_action.cpp'; else $(CYGPATH_W) '$(srcdir)/html_form_overwrite_chain_action.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar-html_form_overwrite_chain_action.Tpo $(DEPDIR)/webdar-html_form_overwrite_chain_action.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='html_form_overwrite_chain_action.cpp' object='webdar-html_form_overwrite_chain_action.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar-html_form_overwrite_chain_action.obj `if test -f 'html_form_overwrite_chain_action.cpp'; then $(CYGPATH_W) 'html_form_overwrite_chain_action.cpp'; else $(CYGPATH_W) '$(srcdir)/html_form_overwrite_chain_action.cpp'; fi` webdar-html_form_dynamic_table.o: html_form_dynamic_table.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar-html_form_dynamic_table.o -MD -MP -MF $(DEPDIR)/webdar-html_form_dynamic_table.Tpo -c -o webdar-html_form_dynamic_table.o `test -f 'html_form_dynamic_table.cpp' || echo '$(srcdir)/'`html_form_dynamic_table.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar-html_form_dynamic_table.Tpo $(DEPDIR)/webdar-html_form_dynamic_table.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='html_form_dynamic_table.cpp' object='webdar-html_form_dynamic_table.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar-html_form_dynamic_table.o `test -f 'html_form_dynamic_table.cpp' || echo '$(srcdir)/'`html_form_dynamic_table.cpp webdar-html_form_dynamic_table.obj: html_form_dynamic_table.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar-html_form_dynamic_table.obj -MD -MP -MF $(DEPDIR)/webdar-html_form_dynamic_table.Tpo -c -o webdar-html_form_dynamic_table.obj `if test -f 'html_form_dynamic_table.cpp'; then $(CYGPATH_W) 'html_form_dynamic_table.cpp'; else $(CYGPATH_W) '$(srcdir)/html_form_dynamic_table.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar-html_form_dynamic_table.Tpo $(DEPDIR)/webdar-html_form_dynamic_table.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='html_form_dynamic_table.cpp' object='webdar-html_form_dynamic_table.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar-html_form_dynamic_table.obj `if test -f 'html_form_dynamic_table.cpp'; then $(CYGPATH_W) 'html_form_dynamic_table.cpp'; else $(CYGPATH_W) '$(srcdir)/html_form_dynamic_table.cpp'; fi` webdar-html_form_gnupg_list.o: html_form_gnupg_list.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar-html_form_gnupg_list.o -MD -MP -MF $(DEPDIR)/webdar-html_form_gnupg_list.Tpo -c -o webdar-html_form_gnupg_list.o `test -f 'html_form_gnupg_list.cpp' || echo '$(srcdir)/'`html_form_gnupg_list.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar-html_form_gnupg_list.Tpo $(DEPDIR)/webdar-html_form_gnupg_list.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='html_form_gnupg_list.cpp' object='webdar-html_form_gnupg_list.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar-html_form_gnupg_list.o `test -f 'html_form_gnupg_list.cpp' || echo '$(srcdir)/'`html_form_gnupg_list.cpp webdar-html_form_gnupg_list.obj: html_form_gnupg_list.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar-html_form_gnupg_list.obj -MD -MP -MF $(DEPDIR)/webdar-html_form_gnupg_list.Tpo -c -o webdar-html_form_gnupg_list.obj `if test -f 'html_form_gnupg_list.cpp'; then $(CYGPATH_W) 'html_form_gnupg_list.cpp'; else $(CYGPATH_W) '$(srcdir)/html_form_gnupg_list.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar-html_form_gnupg_list.Tpo $(DEPDIR)/webdar-html_form_gnupg_list.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='html_form_gnupg_list.cpp' object='webdar-html_form_gnupg_list.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar-html_form_gnupg_list.obj `if test -f 'html_form_gnupg_list.cpp'; then $(CYGPATH_W) 'html_form_gnupg_list.cpp'; else $(CYGPATH_W) '$(srcdir)/html_form_gnupg_list.cpp'; fi` webdar-html_form_overwrite_chain_cell.o: html_form_overwrite_chain_cell.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar-html_form_overwrite_chain_cell.o -MD -MP -MF $(DEPDIR)/webdar-html_form_overwrite_chain_cell.Tpo -c -o webdar-html_form_overwrite_chain_cell.o `test -f 'html_form_overwrite_chain_cell.cpp' || echo '$(srcdir)/'`html_form_overwrite_chain_cell.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar-html_form_overwrite_chain_cell.Tpo $(DEPDIR)/webdar-html_form_overwrite_chain_cell.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='html_form_overwrite_chain_cell.cpp' object='webdar-html_form_overwrite_chain_cell.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar-html_form_overwrite_chain_cell.o `test -f 'html_form_overwrite_chain_cell.cpp' || echo '$(srcdir)/'`html_form_overwrite_chain_cell.cpp webdar-html_form_overwrite_chain_cell.obj: html_form_overwrite_chain_cell.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar-html_form_overwrite_chain_cell.obj -MD -MP -MF $(DEPDIR)/webdar-html_form_overwrite_chain_cell.Tpo -c -o webdar-html_form_overwrite_chain_cell.obj `if test -f 'html_form_overwrite_chain_cell.cpp'; then $(CYGPATH_W) 'html_form_overwrite_chain_cell.cpp'; else $(CYGPATH_W) '$(srcdir)/html_form_overwrite_chain_cell.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar-html_form_overwrite_chain_cell.Tpo $(DEPDIR)/webdar-html_form_overwrite_chain_cell.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='html_form_overwrite_chain_cell.cpp' object='webdar-html_form_overwrite_chain_cell.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar-html_form_overwrite_chain_cell.obj `if test -f 'html_form_overwrite_chain_cell.cpp'; then $(CYGPATH_W) 'html_form_overwrite_chain_cell.cpp'; else $(CYGPATH_W) '$(srcdir)/html_form_overwrite_chain_cell.cpp'; fi` webdar-html_legend.o: html_legend.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar-html_legend.o -MD -MP -MF $(DEPDIR)/webdar-html_legend.Tpo -c -o webdar-html_legend.o `test -f 'html_legend.cpp' || echo '$(srcdir)/'`html_legend.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar-html_legend.Tpo $(DEPDIR)/webdar-html_legend.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='html_legend.cpp' object='webdar-html_legend.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar-html_legend.o `test -f 'html_legend.cpp' || echo '$(srcdir)/'`html_legend.cpp webdar-html_legend.obj: html_legend.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar-html_legend.obj -MD -MP -MF $(DEPDIR)/webdar-html_legend.Tpo -c -o webdar-html_legend.obj `if test -f 'html_legend.cpp'; then $(CYGPATH_W) 'html_legend.cpp'; else $(CYGPATH_W) '$(srcdir)/html_legend.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar-html_legend.Tpo $(DEPDIR)/webdar-html_legend.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='html_legend.cpp' object='webdar-html_legend.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar-html_legend.obj `if test -f 'html_legend.cpp'; then $(CYGPATH_W) 'html_legend.cpp'; else $(CYGPATH_W) '$(srcdir)/html_legend.cpp'; fi` webdar-html_form_same_fs.o: html_form_same_fs.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar-html_form_same_fs.o -MD -MP -MF $(DEPDIR)/webdar-html_form_same_fs.Tpo -c -o webdar-html_form_same_fs.o `test -f 'html_form_same_fs.cpp' || echo '$(srcdir)/'`html_form_same_fs.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar-html_form_same_fs.Tpo $(DEPDIR)/webdar-html_form_same_fs.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='html_form_same_fs.cpp' object='webdar-html_form_same_fs.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar-html_form_same_fs.o `test -f 'html_form_same_fs.cpp' || echo '$(srcdir)/'`html_form_same_fs.cpp webdar-html_form_same_fs.obj: html_form_same_fs.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar-html_form_same_fs.obj -MD -MP -MF $(DEPDIR)/webdar-html_form_same_fs.Tpo -c -o webdar-html_form_same_fs.obj `if test -f 'html_form_same_fs.cpp'; then $(CYGPATH_W) 'html_form_same_fs.cpp'; else $(CYGPATH_W) '$(srcdir)/html_form_same_fs.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar-html_form_same_fs.Tpo $(DEPDIR)/webdar-html_form_same_fs.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='html_form_same_fs.cpp' object='webdar-html_form_same_fs.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar-html_form_same_fs.obj `if test -f 'html_form_same_fs.cpp'; then $(CYGPATH_W) 'html_form_same_fs.cpp'; else $(CYGPATH_W) '$(srcdir)/html_form_same_fs.cpp'; fi` webdar-html_form_ignore_as_symlink.o: html_form_ignore_as_symlink.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar-html_form_ignore_as_symlink.o -MD -MP -MF $(DEPDIR)/webdar-html_form_ignore_as_symlink.Tpo -c -o webdar-html_form_ignore_as_symlink.o `test -f 'html_form_ignore_as_symlink.cpp' || echo '$(srcdir)/'`html_form_ignore_as_symlink.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar-html_form_ignore_as_symlink.Tpo $(DEPDIR)/webdar-html_form_ignore_as_symlink.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='html_form_ignore_as_symlink.cpp' object='webdar-html_form_ignore_as_symlink.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar-html_form_ignore_as_symlink.o `test -f 'html_form_ignore_as_symlink.cpp' || echo '$(srcdir)/'`html_form_ignore_as_symlink.cpp webdar-html_form_ignore_as_symlink.obj: html_form_ignore_as_symlink.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar-html_form_ignore_as_symlink.obj -MD -MP -MF $(DEPDIR)/webdar-html_form_ignore_as_symlink.Tpo -c -o webdar-html_form_ignore_as_symlink.obj `if test -f 'html_form_ignore_as_symlink.cpp'; then $(CYGPATH_W) 'html_form_ignore_as_symlink.cpp'; else $(CYGPATH_W) '$(srcdir)/html_form_ignore_as_symlink.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar-html_form_ignore_as_symlink.Tpo $(DEPDIR)/webdar-html_form_ignore_as_symlink.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='html_form_ignore_as_symlink.cpp' object='webdar-html_form_ignore_as_symlink.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar-html_form_ignore_as_symlink.obj `if test -f 'html_form_ignore_as_symlink.cpp'; then $(CYGPATH_W) 'html_form_ignore_as_symlink.cpp'; else $(CYGPATH_W) '$(srcdir)/html_form_ignore_as_symlink.cpp'; fi` webdar-html_form_sig_block_size.o: html_form_sig_block_size.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar-html_form_sig_block_size.o -MD -MP -MF $(DEPDIR)/webdar-html_form_sig_block_size.Tpo -c -o webdar-html_form_sig_block_size.o `test -f 'html_form_sig_block_size.cpp' || echo '$(srcdir)/'`html_form_sig_block_size.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar-html_form_sig_block_size.Tpo $(DEPDIR)/webdar-html_form_sig_block_size.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='html_form_sig_block_size.cpp' object='webdar-html_form_sig_block_size.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar-html_form_sig_block_size.o `test -f 'html_form_sig_block_size.cpp' || echo '$(srcdir)/'`html_form_sig_block_size.cpp webdar-html_form_sig_block_size.obj: html_form_sig_block_size.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar-html_form_sig_block_size.obj -MD -MP -MF $(DEPDIR)/webdar-html_form_sig_block_size.Tpo -c -o webdar-html_form_sig_block_size.obj `if test -f 'html_form_sig_block_size.cpp'; then $(CYGPATH_W) 'html_form_sig_block_size.cpp'; else $(CYGPATH_W) '$(srcdir)/html_form_sig_block_size.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar-html_form_sig_block_size.Tpo $(DEPDIR)/webdar-html_form_sig_block_size.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='html_form_sig_block_size.cpp' object='webdar-html_form_sig_block_size.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar-html_form_sig_block_size.obj `if test -f 'html_form_sig_block_size.cpp'; then $(CYGPATH_W) 'html_form_sig_block_size.cpp'; else $(CYGPATH_W) '$(srcdir)/html_form_sig_block_size.cpp'; fi` webdar-html_form_input_unit.o: html_form_input_unit.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar-html_form_input_unit.o -MD -MP -MF $(DEPDIR)/webdar-html_form_input_unit.Tpo -c -o webdar-html_form_input_unit.o `test -f 'html_form_input_unit.cpp' || echo '$(srcdir)/'`html_form_input_unit.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar-html_form_input_unit.Tpo $(DEPDIR)/webdar-html_form_input_unit.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='html_form_input_unit.cpp' object='webdar-html_form_input_unit.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar-html_form_input_unit.o `test -f 'html_form_input_unit.cpp' || echo '$(srcdir)/'`html_form_input_unit.cpp webdar-html_form_input_unit.obj: html_form_input_unit.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar-html_form_input_unit.obj -MD -MP -MF $(DEPDIR)/webdar-html_form_input_unit.Tpo -c -o webdar-html_form_input_unit.obj `if test -f 'html_form_input_unit.cpp'; then $(CYGPATH_W) 'html_form_input_unit.cpp'; else $(CYGPATH_W) '$(srcdir)/html_form_input_unit.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar-html_form_input_unit.Tpo $(DEPDIR)/webdar-html_form_input_unit.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='html_form_input_unit.cpp' object='webdar-html_form_input_unit.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar-html_form_input_unit.obj `if test -f 'html_form_input_unit.cpp'; then $(CYGPATH_W) 'html_form_input_unit.cpp'; else $(CYGPATH_W) '$(srcdir)/html_form_input_unit.cpp'; fi` webdar-html_compression_params.o: html_compression_params.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar-html_compression_params.o -MD -MP -MF $(DEPDIR)/webdar-html_compression_params.Tpo -c -o webdar-html_compression_params.o `test -f 'html_compression_params.cpp' || echo '$(srcdir)/'`html_compression_params.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar-html_compression_params.Tpo $(DEPDIR)/webdar-html_compression_params.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='html_compression_params.cpp' object='webdar-html_compression_params.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar-html_compression_params.o `test -f 'html_compression_params.cpp' || echo '$(srcdir)/'`html_compression_params.cpp webdar-html_compression_params.obj: html_compression_params.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar-html_compression_params.obj -MD -MP -MF $(DEPDIR)/webdar-html_compression_params.Tpo -c -o webdar-html_compression_params.obj `if test -f 'html_compression_params.cpp'; then $(CYGPATH_W) 'html_compression_params.cpp'; else $(CYGPATH_W) '$(srcdir)/html_compression_params.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar-html_compression_params.Tpo $(DEPDIR)/webdar-html_compression_params.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='html_compression_params.cpp' object='webdar-html_compression_params.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar-html_compression_params.obj `if test -f 'html_compression_params.cpp'; then $(CYGPATH_W) 'html_compression_params.cpp'; else $(CYGPATH_W) '$(srcdir)/html_compression_params.cpp'; fi` webdar-html_slicing.o: html_slicing.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar-html_slicing.o -MD -MP -MF $(DEPDIR)/webdar-html_slicing.Tpo -c -o webdar-html_slicing.o `test -f 'html_slicing.cpp' || echo '$(srcdir)/'`html_slicing.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar-html_slicing.Tpo $(DEPDIR)/webdar-html_slicing.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='html_slicing.cpp' object='webdar-html_slicing.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar-html_slicing.o `test -f 'html_slicing.cpp' || echo '$(srcdir)/'`html_slicing.cpp webdar-html_slicing.obj: html_slicing.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar-html_slicing.obj -MD -MP -MF $(DEPDIR)/webdar-html_slicing.Tpo -c -o webdar-html_slicing.obj `if test -f 'html_slicing.cpp'; then $(CYGPATH_W) 'html_slicing.cpp'; else $(CYGPATH_W) '$(srcdir)/html_slicing.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar-html_slicing.Tpo $(DEPDIR)/webdar-html_slicing.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='html_slicing.cpp' object='webdar-html_slicing.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar-html_slicing.obj `if test -f 'html_slicing.cpp'; then $(CYGPATH_W) 'html_slicing.cpp'; else $(CYGPATH_W) '$(srcdir)/html_slicing.cpp'; fi` webdar-html_ciphering.o: html_ciphering.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar-html_ciphering.o -MD -MP -MF $(DEPDIR)/webdar-html_ciphering.Tpo -c -o webdar-html_ciphering.o `test -f 'html_ciphering.cpp' || echo '$(srcdir)/'`html_ciphering.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar-html_ciphering.Tpo $(DEPDIR)/webdar-html_ciphering.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='html_ciphering.cpp' object='webdar-html_ciphering.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar-html_ciphering.o `test -f 'html_ciphering.cpp' || echo '$(srcdir)/'`html_ciphering.cpp webdar-html_ciphering.obj: html_ciphering.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar-html_ciphering.obj -MD -MP -MF $(DEPDIR)/webdar-html_ciphering.Tpo -c -o webdar-html_ciphering.obj `if test -f 'html_ciphering.cpp'; then $(CYGPATH_W) 'html_ciphering.cpp'; else $(CYGPATH_W) '$(srcdir)/html_ciphering.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar-html_ciphering.Tpo $(DEPDIR)/webdar-html_ciphering.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='html_ciphering.cpp' object='webdar-html_ciphering.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar-html_ciphering.obj `if test -f 'html_ciphering.cpp'; then $(CYGPATH_W) 'html_ciphering.cpp'; else $(CYGPATH_W) '$(srcdir)/html_ciphering.cpp'; fi` webdar-html_fsa_scope.o: html_fsa_scope.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar-html_fsa_scope.o -MD -MP -MF $(DEPDIR)/webdar-html_fsa_scope.Tpo -c -o webdar-html_fsa_scope.o `test -f 'html_fsa_scope.cpp' || echo '$(srcdir)/'`html_fsa_scope.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar-html_fsa_scope.Tpo $(DEPDIR)/webdar-html_fsa_scope.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='html_fsa_scope.cpp' object='webdar-html_fsa_scope.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar-html_fsa_scope.o `test -f 'html_fsa_scope.cpp' || echo '$(srcdir)/'`html_fsa_scope.cpp webdar-html_fsa_scope.obj: html_fsa_scope.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar-html_fsa_scope.obj -MD -MP -MF $(DEPDIR)/webdar-html_fsa_scope.Tpo -c -o webdar-html_fsa_scope.obj `if test -f 'html_fsa_scope.cpp'; then $(CYGPATH_W) 'html_fsa_scope.cpp'; else $(CYGPATH_W) '$(srcdir)/html_fsa_scope.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar-html_fsa_scope.Tpo $(DEPDIR)/webdar-html_fsa_scope.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='html_fsa_scope.cpp' object='webdar-html_fsa_scope.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar-html_fsa_scope.obj `if test -f 'html_fsa_scope.cpp'; then $(CYGPATH_W) 'html_fsa_scope.cpp'; else $(CYGPATH_W) '$(srcdir)/html_fsa_scope.cpp'; fi` webdar-html_disconnect.o: html_disconnect.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar-html_disconnect.o -MD -MP -MF $(DEPDIR)/webdar-html_disconnect.Tpo -c -o webdar-html_disconnect.o `test -f 'html_disconnect.cpp' || echo '$(srcdir)/'`html_disconnect.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar-html_disconnect.Tpo $(DEPDIR)/webdar-html_disconnect.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='html_disconnect.cpp' object='webdar-html_disconnect.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar-html_disconnect.o `test -f 'html_disconnect.cpp' || echo '$(srcdir)/'`html_disconnect.cpp webdar-html_disconnect.obj: html_disconnect.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar-html_disconnect.obj -MD -MP -MF $(DEPDIR)/webdar-html_disconnect.Tpo -c -o webdar-html_disconnect.obj `if test -f 'html_disconnect.cpp'; then $(CYGPATH_W) 'html_disconnect.cpp'; else $(CYGPATH_W) '$(srcdir)/html_disconnect.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar-html_disconnect.Tpo $(DEPDIR)/webdar-html_disconnect.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='html_disconnect.cpp' object='webdar-html_disconnect.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar-html_disconnect.obj `if test -f 'html_disconnect.cpp'; then $(CYGPATH_W) 'html_disconnect.cpp'; else $(CYGPATH_W) '$(srcdir)/html_disconnect.cpp'; fi` webdar-disconnected_page.o: disconnected_page.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar-disconnected_page.o -MD -MP -MF $(DEPDIR)/webdar-disconnected_page.Tpo -c -o webdar-disconnected_page.o `test -f 'disconnected_page.cpp' || echo '$(srcdir)/'`disconnected_page.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar-disconnected_page.Tpo $(DEPDIR)/webdar-disconnected_page.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='disconnected_page.cpp' object='webdar-disconnected_page.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar-disconnected_page.o `test -f 'disconnected_page.cpp' || echo '$(srcdir)/'`disconnected_page.cpp webdar-disconnected_page.obj: disconnected_page.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar-disconnected_page.obj -MD -MP -MF $(DEPDIR)/webdar-disconnected_page.Tpo -c -o webdar-disconnected_page.obj `if test -f 'disconnected_page.cpp'; then $(CYGPATH_W) 'disconnected_page.cpp'; else $(CYGPATH_W) '$(srcdir)/disconnected_page.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar-disconnected_page.Tpo $(DEPDIR)/webdar-disconnected_page.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='disconnected_page.cpp' object='webdar-disconnected_page.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar-disconnected_page.obj `if test -f 'disconnected_page.cpp'; then $(CYGPATH_W) 'disconnected_page.cpp'; else $(CYGPATH_W) '$(srcdir)/disconnected_page.cpp'; fi` webdar-server_pool.o: server_pool.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar-server_pool.o -MD -MP -MF $(DEPDIR)/webdar-server_pool.Tpo -c -o webdar-server_pool.o `test -f 'server_pool.cpp' || echo '$(srcdir)/'`server_pool.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar-server_pool.Tpo $(DEPDIR)/webdar-server_pool.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='server_pool.cpp' object='webdar-server_pool.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar-server_pool.o `test -f 'server_pool.cpp' || echo '$(srcdir)/'`server_pool.cpp webdar-server_pool.obj: server_pool.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar-server_pool.obj -MD -MP -MF $(DEPDIR)/webdar-server_pool.Tpo -c -o webdar-server_pool.obj `if test -f 'server_pool.cpp'; then $(CYGPATH_W) 'server_pool.cpp'; else $(CYGPATH_W) '$(srcdir)/server_pool.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar-server_pool.Tpo $(DEPDIR)/webdar-server_pool.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='server_pool.cpp' object='webdar-server_pool.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar-server_pool.obj `if test -f 'server_pool.cpp'; then $(CYGPATH_W) 'server_pool.cpp'; else $(CYGPATH_W) '$(srcdir)/server_pool.cpp'; fi` webdar-html_options_list.o: html_options_list.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar-html_options_list.o -MD -MP -MF $(DEPDIR)/webdar-html_options_list.Tpo -c -o webdar-html_options_list.o `test -f 'html_options_list.cpp' || echo '$(srcdir)/'`html_options_list.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar-html_options_list.Tpo $(DEPDIR)/webdar-html_options_list.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='html_options_list.cpp' object='webdar-html_options_list.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar-html_options_list.o `test -f 'html_options_list.cpp' || echo '$(srcdir)/'`html_options_list.cpp webdar-html_options_list.obj: html_options_list.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar-html_options_list.obj -MD -MP -MF $(DEPDIR)/webdar-html_options_list.Tpo -c -o webdar-html_options_list.obj `if test -f 'html_options_list.cpp'; then $(CYGPATH_W) 'html_options_list.cpp'; else $(CYGPATH_W) '$(srcdir)/html_options_list.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar-html_options_list.Tpo $(DEPDIR)/webdar-html_options_list.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='html_options_list.cpp' object='webdar-html_options_list.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar-html_options_list.obj `if test -f 'html_options_list.cpp'; then $(CYGPATH_W) 'html_options_list.cpp'; else $(CYGPATH_W) '$(srcdir)/html_options_list.cpp'; fi` webdar-html_summary_page.o: html_summary_page.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar-html_summary_page.o -MD -MP -MF $(DEPDIR)/webdar-html_summary_page.Tpo -c -o webdar-html_summary_page.o `test -f 'html_summary_page.cpp' || echo '$(srcdir)/'`html_summary_page.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar-html_summary_page.Tpo $(DEPDIR)/webdar-html_summary_page.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='html_summary_page.cpp' object='webdar-html_summary_page.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar-html_summary_page.o `test -f 'html_summary_page.cpp' || echo '$(srcdir)/'`html_summary_page.cpp webdar-html_summary_page.obj: html_summary_page.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar-html_summary_page.obj -MD -MP -MF $(DEPDIR)/webdar-html_summary_page.Tpo -c -o webdar-html_summary_page.obj `if test -f 'html_summary_page.cpp'; then $(CYGPATH_W) 'html_summary_page.cpp'; else $(CYGPATH_W) '$(srcdir)/html_summary_page.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar-html_summary_page.Tpo $(DEPDIR)/webdar-html_summary_page.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='html_summary_page.cpp' object='webdar-html_summary_page.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar-html_summary_page.obj `if test -f 'html_summary_page.cpp'; then $(CYGPATH_W) 'html_summary_page.cpp'; else $(CYGPATH_W) '$(srcdir)/html_summary_page.cpp'; fi` webdar-bibliotheque.o: bibliotheque.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar-bibliotheque.o -MD -MP -MF $(DEPDIR)/webdar-bibliotheque.Tpo -c -o webdar-bibliotheque.o `test -f 'bibliotheque.cpp' || echo '$(srcdir)/'`bibliotheque.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar-bibliotheque.Tpo $(DEPDIR)/webdar-bibliotheque.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='bibliotheque.cpp' object='webdar-bibliotheque.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar-bibliotheque.o `test -f 'bibliotheque.cpp' || echo '$(srcdir)/'`bibliotheque.cpp webdar-bibliotheque.obj: bibliotheque.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar-bibliotheque.obj -MD -MP -MF $(DEPDIR)/webdar-bibliotheque.Tpo -c -o webdar-bibliotheque.obj `if test -f 'bibliotheque.cpp'; then $(CYGPATH_W) 'bibliotheque.cpp'; else $(CYGPATH_W) '$(srcdir)/bibliotheque.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar-bibliotheque.Tpo $(DEPDIR)/webdar-bibliotheque.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='bibliotheque.cpp' object='webdar-bibliotheque.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar-bibliotheque.obj `if test -f 'bibliotheque.cpp'; then $(CYGPATH_W) 'bibliotheque.cpp'; else $(CYGPATH_W) '$(srcdir)/bibliotheque.cpp'; fi` webdar-html_bibliotheque.o: html_bibliotheque.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar-html_bibliotheque.o -MD -MP -MF $(DEPDIR)/webdar-html_bibliotheque.Tpo -c -o webdar-html_bibliotheque.o `test -f 'html_bibliotheque.cpp' || echo '$(srcdir)/'`html_bibliotheque.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar-html_bibliotheque.Tpo $(DEPDIR)/webdar-html_bibliotheque.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='html_bibliotheque.cpp' object='webdar-html_bibliotheque.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar-html_bibliotheque.o `test -f 'html_bibliotheque.cpp' || echo '$(srcdir)/'`html_bibliotheque.cpp webdar-html_bibliotheque.obj: html_bibliotheque.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar-html_bibliotheque.obj -MD -MP -MF $(DEPDIR)/webdar-html_bibliotheque.Tpo -c -o webdar-html_bibliotheque.obj `if test -f 'html_bibliotheque.cpp'; then $(CYGPATH_W) 'html_bibliotheque.cpp'; else $(CYGPATH_W) '$(srcdir)/html_bibliotheque.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar-html_bibliotheque.Tpo $(DEPDIR)/webdar-html_bibliotheque.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='html_bibliotheque.cpp' object='webdar-html_bibliotheque.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar-html_bibliotheque.obj `if test -f 'html_bibliotheque.cpp'; then $(CYGPATH_W) 'html_bibliotheque.cpp'; else $(CYGPATH_W) '$(srcdir)/html_bibliotheque.cpp'; fi` webdar-bibliotheque_subconfig.o: bibliotheque_subconfig.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar-bibliotheque_subconfig.o -MD -MP -MF $(DEPDIR)/webdar-bibliotheque_subconfig.Tpo -c -o webdar-bibliotheque_subconfig.o `test -f 'bibliotheque_subconfig.cpp' || echo '$(srcdir)/'`bibliotheque_subconfig.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar-bibliotheque_subconfig.Tpo $(DEPDIR)/webdar-bibliotheque_subconfig.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='bibliotheque_subconfig.cpp' object='webdar-bibliotheque_subconfig.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar-bibliotheque_subconfig.o `test -f 'bibliotheque_subconfig.cpp' || echo '$(srcdir)/'`bibliotheque_subconfig.cpp webdar-bibliotheque_subconfig.obj: bibliotheque_subconfig.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar-bibliotheque_subconfig.obj -MD -MP -MF $(DEPDIR)/webdar-bibliotheque_subconfig.Tpo -c -o webdar-bibliotheque_subconfig.obj `if test -f 'bibliotheque_subconfig.cpp'; then $(CYGPATH_W) 'bibliotheque_subconfig.cpp'; else $(CYGPATH_W) '$(srcdir)/bibliotheque_subconfig.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar-bibliotheque_subconfig.Tpo $(DEPDIR)/webdar-bibliotheque_subconfig.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='bibliotheque_subconfig.cpp' object='webdar-bibliotheque_subconfig.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar-bibliotheque_subconfig.obj `if test -f 'bibliotheque_subconfig.cpp'; then $(CYGPATH_W) 'bibliotheque_subconfig.cpp'; else $(CYGPATH_W) '$(srcdir)/bibliotheque_subconfig.cpp'; fi` webdar-guichet.o: guichet.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar-guichet.o -MD -MP -MF $(DEPDIR)/webdar-guichet.Tpo -c -o webdar-guichet.o `test -f 'guichet.cpp' || echo '$(srcdir)/'`guichet.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar-guichet.Tpo $(DEPDIR)/webdar-guichet.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='guichet.cpp' object='webdar-guichet.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar-guichet.o `test -f 'guichet.cpp' || echo '$(srcdir)/'`guichet.cpp webdar-guichet.obj: guichet.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar-guichet.obj -MD -MP -MF $(DEPDIR)/webdar-guichet.Tpo -c -o webdar-guichet.obj `if test -f 'guichet.cpp'; then $(CYGPATH_W) 'guichet.cpp'; else $(CYGPATH_W) '$(srcdir)/guichet.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar-guichet.Tpo $(DEPDIR)/webdar-guichet.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='guichet.cpp' object='webdar-guichet.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar-guichet.obj `if test -f 'guichet.cpp'; then $(CYGPATH_W) 'guichet.cpp'; else $(CYGPATH_W) '$(srcdir)/guichet.cpp'; fi` webdar-html_over_guichet.o: html_over_guichet.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar-html_over_guichet.o -MD -MP -MF $(DEPDIR)/webdar-html_over_guichet.Tpo -c -o webdar-html_over_guichet.o `test -f 'html_over_guichet.cpp' || echo '$(srcdir)/'`html_over_guichet.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar-html_over_guichet.Tpo $(DEPDIR)/webdar-html_over_guichet.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='html_over_guichet.cpp' object='webdar-html_over_guichet.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar-html_over_guichet.o `test -f 'html_over_guichet.cpp' || echo '$(srcdir)/'`html_over_guichet.cpp webdar-html_over_guichet.obj: html_over_guichet.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar-html_over_guichet.obj -MD -MP -MF $(DEPDIR)/webdar-html_over_guichet.Tpo -c -o webdar-html_over_guichet.obj `if test -f 'html_over_guichet.cpp'; then $(CYGPATH_W) 'html_over_guichet.cpp'; else $(CYGPATH_W) '$(srcdir)/html_over_guichet.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar-html_over_guichet.Tpo $(DEPDIR)/webdar-html_over_guichet.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='html_over_guichet.cpp' object='webdar-html_over_guichet.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar-html_over_guichet.obj `if test -f 'html_over_guichet.cpp'; then $(CYGPATH_W) 'html_over_guichet.cpp'; else $(CYGPATH_W) '$(srcdir)/html_over_guichet.cpp'; fi` webdar-html_void.o: html_void.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar-html_void.o -MD -MP -MF $(DEPDIR)/webdar-html_void.Tpo -c -o webdar-html_void.o `test -f 'html_void.cpp' || echo '$(srcdir)/'`html_void.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar-html_void.Tpo $(DEPDIR)/webdar-html_void.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='html_void.cpp' object='webdar-html_void.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar-html_void.o `test -f 'html_void.cpp' || echo '$(srcdir)/'`html_void.cpp webdar-html_void.obj: html_void.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar-html_void.obj -MD -MP -MF $(DEPDIR)/webdar-html_void.Tpo -c -o webdar-html_void.obj `if test -f 'html_void.cpp'; then $(CYGPATH_W) 'html_void.cpp'; else $(CYGPATH_W) '$(srcdir)/html_void.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar-html_void.Tpo $(DEPDIR)/webdar-html_void.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='html_void.cpp' object='webdar-html_void.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar-html_void.obj `if test -f 'html_void.cpp'; then $(CYGPATH_W) 'html_void.cpp'; else $(CYGPATH_W) '$(srcdir)/html_void.cpp'; fi` webdar-html_entrepot_landing.o: html_entrepot_landing.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar-html_entrepot_landing.o -MD -MP -MF $(DEPDIR)/webdar-html_entrepot_landing.Tpo -c -o webdar-html_entrepot_landing.o `test -f 'html_entrepot_landing.cpp' || echo '$(srcdir)/'`html_entrepot_landing.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar-html_entrepot_landing.Tpo $(DEPDIR)/webdar-html_entrepot_landing.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='html_entrepot_landing.cpp' object='webdar-html_entrepot_landing.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar-html_entrepot_landing.o `test -f 'html_entrepot_landing.cpp' || echo '$(srcdir)/'`html_entrepot_landing.cpp webdar-html_entrepot_landing.obj: html_entrepot_landing.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar-html_entrepot_landing.obj -MD -MP -MF $(DEPDIR)/webdar-html_entrepot_landing.Tpo -c -o webdar-html_entrepot_landing.obj `if test -f 'html_entrepot_landing.cpp'; then $(CYGPATH_W) 'html_entrepot_landing.cpp'; else $(CYGPATH_W) '$(srcdir)/html_entrepot_landing.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar-html_entrepot_landing.Tpo $(DEPDIR)/webdar-html_entrepot_landing.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='html_entrepot_landing.cpp' object='webdar-html_entrepot_landing.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar-html_entrepot_landing.obj `if test -f 'html_entrepot_landing.cpp'; then $(CYGPATH_W) 'html_entrepot_landing.cpp'; else $(CYGPATH_W) '$(srcdir)/html_entrepot_landing.cpp'; fi` webdar-html_span.o: html_span.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar-html_span.o -MD -MP -MF $(DEPDIR)/webdar-html_span.Tpo -c -o webdar-html_span.o `test -f 'html_span.cpp' || echo '$(srcdir)/'`html_span.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar-html_span.Tpo $(DEPDIR)/webdar-html_span.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='html_span.cpp' object='webdar-html_span.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar-html_span.o `test -f 'html_span.cpp' || echo '$(srcdir)/'`html_span.cpp webdar-html_span.obj: html_span.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar-html_span.obj -MD -MP -MF $(DEPDIR)/webdar-html_span.Tpo -c -o webdar-html_span.obj `if test -f 'html_span.cpp'; then $(CYGPATH_W) 'html_span.cpp'; else $(CYGPATH_W) '$(srcdir)/html_span.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar-html_span.Tpo $(DEPDIR)/webdar-html_span.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='html_span.cpp' object='webdar-html_span.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar-html_span.obj `if test -f 'html_span.cpp'; then $(CYGPATH_W) 'html_span.cpp'; else $(CYGPATH_W) '$(srcdir)/html_span.cpp'; fi` webdar-html_version.o: html_version.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar-html_version.o -MD -MP -MF $(DEPDIR)/webdar-html_version.Tpo -c -o webdar-html_version.o `test -f 'html_version.cpp' || echo '$(srcdir)/'`html_version.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar-html_version.Tpo $(DEPDIR)/webdar-html_version.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='html_version.cpp' object='webdar-html_version.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar-html_version.o `test -f 'html_version.cpp' || echo '$(srcdir)/'`html_version.cpp webdar-html_version.obj: html_version.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar-html_version.obj -MD -MP -MF $(DEPDIR)/webdar-html_version.Tpo -c -o webdar-html_version.obj `if test -f 'html_version.cpp'; then $(CYGPATH_W) 'html_version.cpp'; else $(CYGPATH_W) '$(srcdir)/html_version.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar-html_version.Tpo $(DEPDIR)/webdar-html_version.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='html_version.cpp' object='webdar-html_version.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar-html_version.obj `if test -f 'html_version.cpp'; then $(CYGPATH_W) 'html_version.cpp'; else $(CYGPATH_W) '$(srcdir)/html_version.cpp'; fi` webdar-html_label.o: html_label.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar-html_label.o -MD -MP -MF $(DEPDIR)/webdar-html_label.Tpo -c -o webdar-html_label.o `test -f 'html_label.cpp' || echo '$(srcdir)/'`html_label.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar-html_label.Tpo $(DEPDIR)/webdar-html_label.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='html_label.cpp' object='webdar-html_label.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar-html_label.o `test -f 'html_label.cpp' || echo '$(srcdir)/'`html_label.cpp webdar-html_label.obj: html_label.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar-html_label.obj -MD -MP -MF $(DEPDIR)/webdar-html_label.Tpo -c -o webdar-html_label.obj `if test -f 'html_label.cpp'; then $(CYGPATH_W) 'html_label.cpp'; else $(CYGPATH_W) '$(srcdir)/html_label.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar-html_label.Tpo $(DEPDIR)/webdar-html_label.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='html_label.cpp' object='webdar-html_label.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar-html_label.obj `if test -f 'html_label.cpp'; then $(CYGPATH_W) 'html_label.cpp'; else $(CYGPATH_W) '$(srcdir)/html_label.cpp'; fi` webdar-html_tooltip.o: html_tooltip.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar-html_tooltip.o -MD -MP -MF $(DEPDIR)/webdar-html_tooltip.Tpo -c -o webdar-html_tooltip.o `test -f 'html_tooltip.cpp' || echo '$(srcdir)/'`html_tooltip.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar-html_tooltip.Tpo $(DEPDIR)/webdar-html_tooltip.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='html_tooltip.cpp' object='webdar-html_tooltip.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar-html_tooltip.o `test -f 'html_tooltip.cpp' || echo '$(srcdir)/'`html_tooltip.cpp webdar-html_tooltip.obj: html_tooltip.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar-html_tooltip.obj -MD -MP -MF $(DEPDIR)/webdar-html_tooltip.Tpo -c -o webdar-html_tooltip.obj `if test -f 'html_tooltip.cpp'; then $(CYGPATH_W) 'html_tooltip.cpp'; else $(CYGPATH_W) '$(srcdir)/html_tooltip.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar-html_tooltip.Tpo $(DEPDIR)/webdar-html_tooltip.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='html_tooltip.cpp' object='webdar-html_tooltip.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar-html_tooltip.obj `if test -f 'html_tooltip.cpp'; then $(CYGPATH_W) 'html_tooltip.cpp'; else $(CYGPATH_W) '$(srcdir)/html_tooltip.cpp'; fi` webdar-webdar.o: webdar.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar-webdar.o -MD -MP -MF $(DEPDIR)/webdar-webdar.Tpo -c -o webdar-webdar.o `test -f 'webdar.cpp' || echo '$(srcdir)/'`webdar.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar-webdar.Tpo $(DEPDIR)/webdar-webdar.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='webdar.cpp' object='webdar-webdar.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar-webdar.o `test -f 'webdar.cpp' || echo '$(srcdir)/'`webdar.cpp webdar-webdar.obj: webdar.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar-webdar.obj -MD -MP -MF $(DEPDIR)/webdar-webdar.Tpo -c -o webdar-webdar.obj `if test -f 'webdar.cpp'; then $(CYGPATH_W) 'webdar.cpp'; else $(CYGPATH_W) '$(srcdir)/webdar.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar-webdar.Tpo $(DEPDIR)/webdar-webdar.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='webdar.cpp' object='webdar-webdar.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar-webdar.obj `if test -f 'webdar.cpp'; then $(CYGPATH_W) 'webdar.cpp'; else $(CYGPATH_W) '$(srcdir)/webdar.cpp'; fi` webdar_static-central_report.o: central_report.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar_static-central_report.o -MD -MP -MF $(DEPDIR)/webdar_static-central_report.Tpo -c -o webdar_static-central_report.o `test -f 'central_report.cpp' || echo '$(srcdir)/'`central_report.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar_static-central_report.Tpo $(DEPDIR)/webdar_static-central_report.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='central_report.cpp' object='webdar_static-central_report.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar_static-central_report.o `test -f 'central_report.cpp' || echo '$(srcdir)/'`central_report.cpp webdar_static-central_report.obj: central_report.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar_static-central_report.obj -MD -MP -MF $(DEPDIR)/webdar_static-central_report.Tpo -c -o webdar_static-central_report.obj `if test -f 'central_report.cpp'; then $(CYGPATH_W) 'central_report.cpp'; else $(CYGPATH_W) '$(srcdir)/central_report.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar_static-central_report.Tpo $(DEPDIR)/webdar_static-central_report.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='central_report.cpp' object='webdar_static-central_report.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar_static-central_report.obj `if test -f 'central_report.cpp'; then $(CYGPATH_W) 'central_report.cpp'; else $(CYGPATH_W) '$(srcdir)/central_report.cpp'; fi` webdar_static-proto_connexion.o: proto_connexion.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar_static-proto_connexion.o -MD -MP -MF $(DEPDIR)/webdar_static-proto_connexion.Tpo -c -o webdar_static-proto_connexion.o `test -f 'proto_connexion.cpp' || echo '$(srcdir)/'`proto_connexion.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar_static-proto_connexion.Tpo $(DEPDIR)/webdar_static-proto_connexion.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='proto_connexion.cpp' object='webdar_static-proto_connexion.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar_static-proto_connexion.o `test -f 'proto_connexion.cpp' || echo '$(srcdir)/'`proto_connexion.cpp webdar_static-proto_connexion.obj: proto_connexion.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar_static-proto_connexion.obj -MD -MP -MF $(DEPDIR)/webdar_static-proto_connexion.Tpo -c -o webdar_static-proto_connexion.obj `if test -f 'proto_connexion.cpp'; then $(CYGPATH_W) 'proto_connexion.cpp'; else $(CYGPATH_W) '$(srcdir)/proto_connexion.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar_static-proto_connexion.Tpo $(DEPDIR)/webdar_static-proto_connexion.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='proto_connexion.cpp' object='webdar_static-proto_connexion.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar_static-proto_connexion.obj `if test -f 'proto_connexion.cpp'; then $(CYGPATH_W) 'proto_connexion.cpp'; else $(CYGPATH_W) '$(srcdir)/proto_connexion.cpp'; fi` webdar_static-connexion.o: connexion.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar_static-connexion.o -MD -MP -MF $(DEPDIR)/webdar_static-connexion.Tpo -c -o webdar_static-connexion.o `test -f 'connexion.cpp' || echo '$(srcdir)/'`connexion.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar_static-connexion.Tpo $(DEPDIR)/webdar_static-connexion.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='connexion.cpp' object='webdar_static-connexion.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar_static-connexion.o `test -f 'connexion.cpp' || echo '$(srcdir)/'`connexion.cpp webdar_static-connexion.obj: connexion.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar_static-connexion.obj -MD -MP -MF $(DEPDIR)/webdar_static-connexion.Tpo -c -o webdar_static-connexion.obj `if test -f 'connexion.cpp'; then $(CYGPATH_W) 'connexion.cpp'; else $(CYGPATH_W) '$(srcdir)/connexion.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar_static-connexion.Tpo $(DEPDIR)/webdar_static-connexion.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='connexion.cpp' object='webdar_static-connexion.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar_static-connexion.obj `if test -f 'connexion.cpp'; then $(CYGPATH_W) 'connexion.cpp'; else $(CYGPATH_W) '$(srcdir)/connexion.cpp'; fi` webdar_static-ssl_connexion.o: ssl_connexion.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar_static-ssl_connexion.o -MD -MP -MF $(DEPDIR)/webdar_static-ssl_connexion.Tpo -c -o webdar_static-ssl_connexion.o `test -f 'ssl_connexion.cpp' || echo '$(srcdir)/'`ssl_connexion.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar_static-ssl_connexion.Tpo $(DEPDIR)/webdar_static-ssl_connexion.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='ssl_connexion.cpp' object='webdar_static-ssl_connexion.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar_static-ssl_connexion.o `test -f 'ssl_connexion.cpp' || echo '$(srcdir)/'`ssl_connexion.cpp webdar_static-ssl_connexion.obj: ssl_connexion.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar_static-ssl_connexion.obj -MD -MP -MF $(DEPDIR)/webdar_static-ssl_connexion.Tpo -c -o webdar_static-ssl_connexion.obj `if test -f 'ssl_connexion.cpp'; then $(CYGPATH_W) 'ssl_connexion.cpp'; else $(CYGPATH_W) '$(srcdir)/ssl_connexion.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar_static-ssl_connexion.Tpo $(DEPDIR)/webdar_static-ssl_connexion.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='ssl_connexion.cpp' object='webdar_static-ssl_connexion.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar_static-ssl_connexion.obj `if test -f 'ssl_connexion.cpp'; then $(CYGPATH_W) 'ssl_connexion.cpp'; else $(CYGPATH_W) '$(srcdir)/ssl_connexion.cpp'; fi` webdar_static-ssl_context.o: ssl_context.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar_static-ssl_context.o -MD -MP -MF $(DEPDIR)/webdar_static-ssl_context.Tpo -c -o webdar_static-ssl_context.o `test -f 'ssl_context.cpp' || echo '$(srcdir)/'`ssl_context.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar_static-ssl_context.Tpo $(DEPDIR)/webdar_static-ssl_context.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='ssl_context.cpp' object='webdar_static-ssl_context.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar_static-ssl_context.o `test -f 'ssl_context.cpp' || echo '$(srcdir)/'`ssl_context.cpp webdar_static-ssl_context.obj: ssl_context.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar_static-ssl_context.obj -MD -MP -MF $(DEPDIR)/webdar_static-ssl_context.Tpo -c -o webdar_static-ssl_context.obj `if test -f 'ssl_context.cpp'; then $(CYGPATH_W) 'ssl_context.cpp'; else $(CYGPATH_W) '$(srcdir)/ssl_context.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar_static-ssl_context.Tpo $(DEPDIR)/webdar_static-ssl_context.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='ssl_context.cpp' object='webdar_static-ssl_context.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar_static-ssl_context.obj `if test -f 'ssl_context.cpp'; then $(CYGPATH_W) 'ssl_context.cpp'; else $(CYGPATH_W) '$(srcdir)/ssl_context.cpp'; fi` webdar_static-exceptions.o: exceptions.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar_static-exceptions.o -MD -MP -MF $(DEPDIR)/webdar_static-exceptions.Tpo -c -o webdar_static-exceptions.o `test -f 'exceptions.cpp' || echo '$(srcdir)/'`exceptions.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar_static-exceptions.Tpo $(DEPDIR)/webdar_static-exceptions.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='exceptions.cpp' object='webdar_static-exceptions.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar_static-exceptions.o `test -f 'exceptions.cpp' || echo '$(srcdir)/'`exceptions.cpp webdar_static-exceptions.obj: exceptions.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar_static-exceptions.obj -MD -MP -MF $(DEPDIR)/webdar_static-exceptions.Tpo -c -o webdar_static-exceptions.obj `if test -f 'exceptions.cpp'; then $(CYGPATH_W) 'exceptions.cpp'; else $(CYGPATH_W) '$(srcdir)/exceptions.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar_static-exceptions.Tpo $(DEPDIR)/webdar_static-exceptions.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='exceptions.cpp' object='webdar_static-exceptions.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar_static-exceptions.obj `if test -f 'exceptions.cpp'; then $(CYGPATH_W) 'exceptions.cpp'; else $(CYGPATH_W) '$(srcdir)/exceptions.cpp'; fi` webdar_static-listener.o: listener.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar_static-listener.o -MD -MP -MF $(DEPDIR)/webdar_static-listener.Tpo -c -o webdar_static-listener.o `test -f 'listener.cpp' || echo '$(srcdir)/'`listener.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar_static-listener.Tpo $(DEPDIR)/webdar_static-listener.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='listener.cpp' object='webdar_static-listener.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar_static-listener.o `test -f 'listener.cpp' || echo '$(srcdir)/'`listener.cpp webdar_static-listener.obj: listener.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar_static-listener.obj -MD -MP -MF $(DEPDIR)/webdar_static-listener.Tpo -c -o webdar_static-listener.obj `if test -f 'listener.cpp'; then $(CYGPATH_W) 'listener.cpp'; else $(CYGPATH_W) '$(srcdir)/listener.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar_static-listener.Tpo $(DEPDIR)/webdar_static-listener.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='listener.cpp' object='webdar_static-listener.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar_static-listener.obj `if test -f 'listener.cpp'; then $(CYGPATH_W) 'listener.cpp'; else $(CYGPATH_W) '$(srcdir)/listener.cpp'; fi` webdar_static-parser.o: parser.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar_static-parser.o -MD -MP -MF $(DEPDIR)/webdar_static-parser.Tpo -c -o webdar_static-parser.o `test -f 'parser.cpp' || echo '$(srcdir)/'`parser.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar_static-parser.Tpo $(DEPDIR)/webdar_static-parser.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='parser.cpp' object='webdar_static-parser.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar_static-parser.o `test -f 'parser.cpp' || echo '$(srcdir)/'`parser.cpp webdar_static-parser.obj: parser.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar_static-parser.obj -MD -MP -MF $(DEPDIR)/webdar_static-parser.Tpo -c -o webdar_static-parser.obj `if test -f 'parser.cpp'; then $(CYGPATH_W) 'parser.cpp'; else $(CYGPATH_W) '$(srcdir)/parser.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar_static-parser.Tpo $(DEPDIR)/webdar_static-parser.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='parser.cpp' object='webdar_static-parser.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar_static-parser.obj `if test -f 'parser.cpp'; then $(CYGPATH_W) 'parser.cpp'; else $(CYGPATH_W) '$(srcdir)/parser.cpp'; fi` webdar_static-webdar_tools.o: webdar_tools.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar_static-webdar_tools.o -MD -MP -MF $(DEPDIR)/webdar_static-webdar_tools.Tpo -c -o webdar_static-webdar_tools.o `test -f 'webdar_tools.cpp' || echo '$(srcdir)/'`webdar_tools.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar_static-webdar_tools.Tpo $(DEPDIR)/webdar_static-webdar_tools.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='webdar_tools.cpp' object='webdar_static-webdar_tools.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar_static-webdar_tools.o `test -f 'webdar_tools.cpp' || echo '$(srcdir)/'`webdar_tools.cpp webdar_static-webdar_tools.obj: webdar_tools.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar_static-webdar_tools.obj -MD -MP -MF $(DEPDIR)/webdar_static-webdar_tools.Tpo -c -o webdar_static-webdar_tools.obj `if test -f 'webdar_tools.cpp'; then $(CYGPATH_W) 'webdar_tools.cpp'; else $(CYGPATH_W) '$(srcdir)/webdar_tools.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar_static-webdar_tools.Tpo $(DEPDIR)/webdar_static-webdar_tools.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='webdar_tools.cpp' object='webdar_static-webdar_tools.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar_static-webdar_tools.obj `if test -f 'webdar_tools.cpp'; then $(CYGPATH_W) 'webdar_tools.cpp'; else $(CYGPATH_W) '$(srcdir)/webdar_tools.cpp'; fi` webdar_static-server.o: server.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar_static-server.o -MD -MP -MF $(DEPDIR)/webdar_static-server.Tpo -c -o webdar_static-server.o `test -f 'server.cpp' || echo '$(srcdir)/'`server.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar_static-server.Tpo $(DEPDIR)/webdar_static-server.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='server.cpp' object='webdar_static-server.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar_static-server.o `test -f 'server.cpp' || echo '$(srcdir)/'`server.cpp webdar_static-server.obj: server.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar_static-server.obj -MD -MP -MF $(DEPDIR)/webdar_static-server.Tpo -c -o webdar_static-server.obj `if test -f 'server.cpp'; then $(CYGPATH_W) 'server.cpp'; else $(CYGPATH_W) '$(srcdir)/server.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar_static-server.Tpo $(DEPDIR)/webdar_static-server.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='server.cpp' object='webdar_static-server.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar_static-server.obj `if test -f 'server.cpp'; then $(CYGPATH_W) 'server.cpp'; else $(CYGPATH_W) '$(srcdir)/server.cpp'; fi` webdar_static-uri.o: uri.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar_static-uri.o -MD -MP -MF $(DEPDIR)/webdar_static-uri.Tpo -c -o webdar_static-uri.o `test -f 'uri.cpp' || echo '$(srcdir)/'`uri.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar_static-uri.Tpo $(DEPDIR)/webdar_static-uri.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='uri.cpp' object='webdar_static-uri.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar_static-uri.o `test -f 'uri.cpp' || echo '$(srcdir)/'`uri.cpp webdar_static-uri.obj: uri.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar_static-uri.obj -MD -MP -MF $(DEPDIR)/webdar_static-uri.Tpo -c -o webdar_static-uri.obj `if test -f 'uri.cpp'; then $(CYGPATH_W) 'uri.cpp'; else $(CYGPATH_W) '$(srcdir)/uri.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar_static-uri.Tpo $(DEPDIR)/webdar_static-uri.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='uri.cpp' object='webdar_static-uri.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar_static-uri.obj `if test -f 'uri.cpp'; then $(CYGPATH_W) 'uri.cpp'; else $(CYGPATH_W) '$(srcdir)/uri.cpp'; fi` webdar_static-session.o: session.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar_static-session.o -MD -MP -MF $(DEPDIR)/webdar_static-session.Tpo -c -o webdar_static-session.o `test -f 'session.cpp' || echo '$(srcdir)/'`session.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar_static-session.Tpo $(DEPDIR)/webdar_static-session.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='session.cpp' object='webdar_static-session.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar_static-session.o `test -f 'session.cpp' || echo '$(srcdir)/'`session.cpp webdar_static-session.obj: session.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar_static-session.obj -MD -MP -MF $(DEPDIR)/webdar_static-session.Tpo -c -o webdar_static-session.obj `if test -f 'session.cpp'; then $(CYGPATH_W) 'session.cpp'; else $(CYGPATH_W) '$(srcdir)/session.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar_static-session.Tpo $(DEPDIR)/webdar_static-session.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='session.cpp' object='webdar_static-session.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar_static-session.obj `if test -f 'session.cpp'; then $(CYGPATH_W) 'session.cpp'; else $(CYGPATH_W) '$(srcdir)/session.cpp'; fi` webdar_static-date.o: date.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar_static-date.o -MD -MP -MF $(DEPDIR)/webdar_static-date.Tpo -c -o webdar_static-date.o `test -f 'date.cpp' || echo '$(srcdir)/'`date.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar_static-date.Tpo $(DEPDIR)/webdar_static-date.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='date.cpp' object='webdar_static-date.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar_static-date.o `test -f 'date.cpp' || echo '$(srcdir)/'`date.cpp webdar_static-date.obj: date.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar_static-date.obj -MD -MP -MF $(DEPDIR)/webdar_static-date.Tpo -c -o webdar_static-date.obj `if test -f 'date.cpp'; then $(CYGPATH_W) 'date.cpp'; else $(CYGPATH_W) '$(srcdir)/date.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar_static-date.Tpo $(DEPDIR)/webdar_static-date.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='date.cpp' object='webdar_static-date.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar_static-date.obj `if test -f 'date.cpp'; then $(CYGPATH_W) 'date.cpp'; else $(CYGPATH_W) '$(srcdir)/date.cpp'; fi` webdar_static-request.o: request.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar_static-request.o -MD -MP -MF $(DEPDIR)/webdar_static-request.Tpo -c -o webdar_static-request.o `test -f 'request.cpp' || echo '$(srcdir)/'`request.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar_static-request.Tpo $(DEPDIR)/webdar_static-request.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='request.cpp' object='webdar_static-request.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar_static-request.o `test -f 'request.cpp' || echo '$(srcdir)/'`request.cpp webdar_static-request.obj: request.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar_static-request.obj -MD -MP -MF $(DEPDIR)/webdar_static-request.Tpo -c -o webdar_static-request.obj `if test -f 'request.cpp'; then $(CYGPATH_W) 'request.cpp'; else $(CYGPATH_W) '$(srcdir)/request.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar_static-request.Tpo $(DEPDIR)/webdar_static-request.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='request.cpp' object='webdar_static-request.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar_static-request.obj `if test -f 'request.cpp'; then $(CYGPATH_W) 'request.cpp'; else $(CYGPATH_W) '$(srcdir)/request.cpp'; fi` webdar_static-answer.o: answer.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar_static-answer.o -MD -MP -MF $(DEPDIR)/webdar_static-answer.Tpo -c -o webdar_static-answer.o `test -f 'answer.cpp' || echo '$(srcdir)/'`answer.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar_static-answer.Tpo $(DEPDIR)/webdar_static-answer.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='answer.cpp' object='webdar_static-answer.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar_static-answer.o `test -f 'answer.cpp' || echo '$(srcdir)/'`answer.cpp webdar_static-answer.obj: answer.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar_static-answer.obj -MD -MP -MF $(DEPDIR)/webdar_static-answer.Tpo -c -o webdar_static-answer.obj `if test -f 'answer.cpp'; then $(CYGPATH_W) 'answer.cpp'; else $(CYGPATH_W) '$(srcdir)/answer.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar_static-answer.Tpo $(DEPDIR)/webdar_static-answer.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='answer.cpp' object='webdar_static-answer.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar_static-answer.obj `if test -f 'answer.cpp'; then $(CYGPATH_W) 'answer.cpp'; else $(CYGPATH_W) '$(srcdir)/answer.cpp'; fi` webdar_static-tokens.o: tokens.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar_static-tokens.o -MD -MP -MF $(DEPDIR)/webdar_static-tokens.Tpo -c -o webdar_static-tokens.o `test -f 'tokens.cpp' || echo '$(srcdir)/'`tokens.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar_static-tokens.Tpo $(DEPDIR)/webdar_static-tokens.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='tokens.cpp' object='webdar_static-tokens.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar_static-tokens.o `test -f 'tokens.cpp' || echo '$(srcdir)/'`tokens.cpp webdar_static-tokens.obj: tokens.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar_static-tokens.obj -MD -MP -MF $(DEPDIR)/webdar_static-tokens.Tpo -c -o webdar_static-tokens.obj `if test -f 'tokens.cpp'; then $(CYGPATH_W) 'tokens.cpp'; else $(CYGPATH_W) '$(srcdir)/tokens.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar_static-tokens.Tpo $(DEPDIR)/webdar_static-tokens.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='tokens.cpp' object='webdar_static-tokens.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar_static-tokens.obj `if test -f 'tokens.cpp'; then $(CYGPATH_W) 'tokens.cpp'; else $(CYGPATH_W) '$(srcdir)/tokens.cpp'; fi` webdar_static-base64.o: base64.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar_static-base64.o -MD -MP -MF $(DEPDIR)/webdar_static-base64.Tpo -c -o webdar_static-base64.o `test -f 'base64.cpp' || echo '$(srcdir)/'`base64.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar_static-base64.Tpo $(DEPDIR)/webdar_static-base64.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='base64.cpp' object='webdar_static-base64.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar_static-base64.o `test -f 'base64.cpp' || echo '$(srcdir)/'`base64.cpp webdar_static-base64.obj: base64.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar_static-base64.obj -MD -MP -MF $(DEPDIR)/webdar_static-base64.Tpo -c -o webdar_static-base64.obj `if test -f 'base64.cpp'; then $(CYGPATH_W) 'base64.cpp'; else $(CYGPATH_W) '$(srcdir)/base64.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar_static-base64.Tpo $(DEPDIR)/webdar_static-base64.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='base64.cpp' object='webdar_static-base64.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar_static-base64.obj `if test -f 'base64.cpp'; then $(CYGPATH_W) 'base64.cpp'; else $(CYGPATH_W) '$(srcdir)/base64.cpp'; fi` webdar_static-challenge.o: challenge.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar_static-challenge.o -MD -MP -MF $(DEPDIR)/webdar_static-challenge.Tpo -c -o webdar_static-challenge.o `test -f 'challenge.cpp' || echo '$(srcdir)/'`challenge.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar_static-challenge.Tpo $(DEPDIR)/webdar_static-challenge.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='challenge.cpp' object='webdar_static-challenge.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar_static-challenge.o `test -f 'challenge.cpp' || echo '$(srcdir)/'`challenge.cpp webdar_static-challenge.obj: challenge.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar_static-challenge.obj -MD -MP -MF $(DEPDIR)/webdar_static-challenge.Tpo -c -o webdar_static-challenge.obj `if test -f 'challenge.cpp'; then $(CYGPATH_W) 'challenge.cpp'; else $(CYGPATH_W) '$(srcdir)/challenge.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar_static-challenge.Tpo $(DEPDIR)/webdar_static-challenge.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='challenge.cpp' object='webdar_static-challenge.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar_static-challenge.obj `if test -f 'challenge.cpp'; then $(CYGPATH_W) 'challenge.cpp'; else $(CYGPATH_W) '$(srcdir)/challenge.cpp'; fi` webdar_static-choose.o: choose.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar_static-choose.o -MD -MP -MF $(DEPDIR)/webdar_static-choose.Tpo -c -o webdar_static-choose.o `test -f 'choose.cpp' || echo '$(srcdir)/'`choose.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar_static-choose.Tpo $(DEPDIR)/webdar_static-choose.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='choose.cpp' object='webdar_static-choose.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar_static-choose.o `test -f 'choose.cpp' || echo '$(srcdir)/'`choose.cpp webdar_static-choose.obj: choose.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar_static-choose.obj -MD -MP -MF $(DEPDIR)/webdar_static-choose.Tpo -c -o webdar_static-choose.obj `if test -f 'choose.cpp'; then $(CYGPATH_W) 'choose.cpp'; else $(CYGPATH_W) '$(srcdir)/choose.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar_static-choose.Tpo $(DEPDIR)/webdar_static-choose.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='choose.cpp' object='webdar_static-choose.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar_static-choose.obj `if test -f 'choose.cpp'; then $(CYGPATH_W) 'choose.cpp'; else $(CYGPATH_W) '$(srcdir)/choose.cpp'; fi` webdar_static-css.o: css.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar_static-css.o -MD -MP -MF $(DEPDIR)/webdar_static-css.Tpo -c -o webdar_static-css.o `test -f 'css.cpp' || echo '$(srcdir)/'`css.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar_static-css.Tpo $(DEPDIR)/webdar_static-css.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='css.cpp' object='webdar_static-css.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar_static-css.o `test -f 'css.cpp' || echo '$(srcdir)/'`css.cpp webdar_static-css.obj: css.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar_static-css.obj -MD -MP -MF $(DEPDIR)/webdar_static-css.Tpo -c -o webdar_static-css.obj `if test -f 'css.cpp'; then $(CYGPATH_W) 'css.cpp'; else $(CYGPATH_W) '$(srcdir)/css.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar_static-css.Tpo $(DEPDIR)/webdar_static-css.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='css.cpp' object='webdar_static-css.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar_static-css.obj `if test -f 'css.cpp'; then $(CYGPATH_W) 'css.cpp'; else $(CYGPATH_W) '$(srcdir)/css.cpp'; fi` webdar_static-css_library.o: css_library.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar_static-css_library.o -MD -MP -MF $(DEPDIR)/webdar_static-css_library.Tpo -c -o webdar_static-css_library.o `test -f 'css_library.cpp' || echo '$(srcdir)/'`css_library.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar_static-css_library.Tpo $(DEPDIR)/webdar_static-css_library.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='css_library.cpp' object='webdar_static-css_library.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar_static-css_library.o `test -f 'css_library.cpp' || echo '$(srcdir)/'`css_library.cpp webdar_static-css_library.obj: css_library.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar_static-css_library.obj -MD -MP -MF $(DEPDIR)/webdar_static-css_library.Tpo -c -o webdar_static-css_library.obj `if test -f 'css_library.cpp'; then $(CYGPATH_W) 'css_library.cpp'; else $(CYGPATH_W) '$(srcdir)/css_library.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar_static-css_library.Tpo $(DEPDIR)/webdar_static-css_library.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='css_library.cpp' object='webdar_static-css_library.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar_static-css_library.obj `if test -f 'css_library.cpp'; then $(CYGPATH_W) 'css_library.cpp'; else $(CYGPATH_W) '$(srcdir)/css_library.cpp'; fi` webdar_static-html_text.o: html_text.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar_static-html_text.o -MD -MP -MF $(DEPDIR)/webdar_static-html_text.Tpo -c -o webdar_static-html_text.o `test -f 'html_text.cpp' || echo '$(srcdir)/'`html_text.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar_static-html_text.Tpo $(DEPDIR)/webdar_static-html_text.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='html_text.cpp' object='webdar_static-html_text.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar_static-html_text.o `test -f 'html_text.cpp' || echo '$(srcdir)/'`html_text.cpp webdar_static-html_text.obj: html_text.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar_static-html_text.obj -MD -MP -MF $(DEPDIR)/webdar_static-html_text.Tpo -c -o webdar_static-html_text.obj `if test -f 'html_text.cpp'; then $(CYGPATH_W) 'html_text.cpp'; else $(CYGPATH_W) '$(srcdir)/html_text.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar_static-html_text.Tpo $(DEPDIR)/webdar_static-html_text.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='html_text.cpp' object='webdar_static-html_text.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar_static-html_text.obj `if test -f 'html_text.cpp'; then $(CYGPATH_W) 'html_text.cpp'; else $(CYGPATH_W) '$(srcdir)/html_text.cpp'; fi` webdar_static-html_page.o: html_page.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar_static-html_page.o -MD -MP -MF $(DEPDIR)/webdar_static-html_page.Tpo -c -o webdar_static-html_page.o `test -f 'html_page.cpp' || echo '$(srcdir)/'`html_page.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar_static-html_page.Tpo $(DEPDIR)/webdar_static-html_page.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='html_page.cpp' object='webdar_static-html_page.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar_static-html_page.o `test -f 'html_page.cpp' || echo '$(srcdir)/'`html_page.cpp webdar_static-html_page.obj: html_page.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar_static-html_page.obj -MD -MP -MF $(DEPDIR)/webdar_static-html_page.Tpo -c -o webdar_static-html_page.obj `if test -f 'html_page.cpp'; then $(CYGPATH_W) 'html_page.cpp'; else $(CYGPATH_W) '$(srcdir)/html_page.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar_static-html_page.Tpo $(DEPDIR)/webdar_static-html_page.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='html_page.cpp' object='webdar_static-html_page.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar_static-html_page.obj `if test -f 'html_page.cpp'; then $(CYGPATH_W) 'html_page.cpp'; else $(CYGPATH_W) '$(srcdir)/html_page.cpp'; fi` webdar_static-html_table.o: html_table.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar_static-html_table.o -MD -MP -MF $(DEPDIR)/webdar_static-html_table.Tpo -c -o webdar_static-html_table.o `test -f 'html_table.cpp' || echo '$(srcdir)/'`html_table.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar_static-html_table.Tpo $(DEPDIR)/webdar_static-html_table.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='html_table.cpp' object='webdar_static-html_table.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar_static-html_table.o `test -f 'html_table.cpp' || echo '$(srcdir)/'`html_table.cpp webdar_static-html_table.obj: html_table.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar_static-html_table.obj -MD -MP -MF $(DEPDIR)/webdar_static-html_table.Tpo -c -o webdar_static-html_table.obj `if test -f 'html_table.cpp'; then $(CYGPATH_W) 'html_table.cpp'; else $(CYGPATH_W) '$(srcdir)/html_table.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar_static-html_table.Tpo $(DEPDIR)/webdar_static-html_table.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='html_table.cpp' object='webdar_static-html_table.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar_static-html_table.obj `if test -f 'html_table.cpp'; then $(CYGPATH_W) 'html_table.cpp'; else $(CYGPATH_W) '$(srcdir)/html_table.cpp'; fi` webdar_static-html_image.o: html_image.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar_static-html_image.o -MD -MP -MF $(DEPDIR)/webdar_static-html_image.Tpo -c -o webdar_static-html_image.o `test -f 'html_image.cpp' || echo '$(srcdir)/'`html_image.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar_static-html_image.Tpo $(DEPDIR)/webdar_static-html_image.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='html_image.cpp' object='webdar_static-html_image.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar_static-html_image.o `test -f 'html_image.cpp' || echo '$(srcdir)/'`html_image.cpp webdar_static-html_image.obj: html_image.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar_static-html_image.obj -MD -MP -MF $(DEPDIR)/webdar_static-html_image.Tpo -c -o webdar_static-html_image.obj `if test -f 'html_image.cpp'; then $(CYGPATH_W) 'html_image.cpp'; else $(CYGPATH_W) '$(srcdir)/html_image.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar_static-html_image.Tpo $(DEPDIR)/webdar_static-html_image.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='html_image.cpp' object='webdar_static-html_image.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar_static-html_image.obj `if test -f 'html_image.cpp'; then $(CYGPATH_W) 'html_image.cpp'; else $(CYGPATH_W) '$(srcdir)/html_image.cpp'; fi` webdar_static-html_static_url.o: html_static_url.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar_static-html_static_url.o -MD -MP -MF $(DEPDIR)/webdar_static-html_static_url.Tpo -c -o webdar_static-html_static_url.o `test -f 'html_static_url.cpp' || echo '$(srcdir)/'`html_static_url.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar_static-html_static_url.Tpo $(DEPDIR)/webdar_static-html_static_url.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='html_static_url.cpp' object='webdar_static-html_static_url.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar_static-html_static_url.o `test -f 'html_static_url.cpp' || echo '$(srcdir)/'`html_static_url.cpp webdar_static-html_static_url.obj: html_static_url.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar_static-html_static_url.obj -MD -MP -MF $(DEPDIR)/webdar_static-html_static_url.Tpo -c -o webdar_static-html_static_url.obj `if test -f 'html_static_url.cpp'; then $(CYGPATH_W) 'html_static_url.cpp'; else $(CYGPATH_W) '$(srcdir)/html_static_url.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar_static-html_static_url.Tpo $(DEPDIR)/webdar_static-html_static_url.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='html_static_url.cpp' object='webdar_static-html_static_url.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar_static-html_static_url.obj `if test -f 'html_static_url.cpp'; then $(CYGPATH_W) 'html_static_url.cpp'; else $(CYGPATH_W) '$(srcdir)/html_static_url.cpp'; fi` webdar_static-html_url.o: html_url.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar_static-html_url.o -MD -MP -MF $(DEPDIR)/webdar_static-html_url.Tpo -c -o webdar_static-html_url.o `test -f 'html_url.cpp' || echo '$(srcdir)/'`html_url.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar_static-html_url.Tpo $(DEPDIR)/webdar_static-html_url.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='html_url.cpp' object='webdar_static-html_url.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar_static-html_url.o `test -f 'html_url.cpp' || echo '$(srcdir)/'`html_url.cpp webdar_static-html_url.obj: html_url.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar_static-html_url.obj -MD -MP -MF $(DEPDIR)/webdar_static-html_url.Tpo -c -o webdar_static-html_url.obj `if test -f 'html_url.cpp'; then $(CYGPATH_W) 'html_url.cpp'; else $(CYGPATH_W) '$(srcdir)/html_url.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar_static-html_url.Tpo $(DEPDIR)/webdar_static-html_url.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='html_url.cpp' object='webdar_static-html_url.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar_static-html_url.obj `if test -f 'html_url.cpp'; then $(CYGPATH_W) 'html_url.cpp'; else $(CYGPATH_W) '$(srcdir)/html_url.cpp'; fi` webdar_static-error_page.o: error_page.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar_static-error_page.o -MD -MP -MF $(DEPDIR)/webdar_static-error_page.Tpo -c -o webdar_static-error_page.o `test -f 'error_page.cpp' || echo '$(srcdir)/'`error_page.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar_static-error_page.Tpo $(DEPDIR)/webdar_static-error_page.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='error_page.cpp' object='webdar_static-error_page.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar_static-error_page.o `test -f 'error_page.cpp' || echo '$(srcdir)/'`error_page.cpp webdar_static-error_page.obj: error_page.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar_static-error_page.obj -MD -MP -MF $(DEPDIR)/webdar_static-error_page.Tpo -c -o webdar_static-error_page.obj `if test -f 'error_page.cpp'; then $(CYGPATH_W) 'error_page.cpp'; else $(CYGPATH_W) '$(srcdir)/error_page.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar_static-error_page.Tpo $(DEPDIR)/webdar_static-error_page.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='error_page.cpp' object='webdar_static-error_page.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar_static-error_page.obj `if test -f 'error_page.cpp'; then $(CYGPATH_W) 'error_page.cpp'; else $(CYGPATH_W) '$(srcdir)/error_page.cpp'; fi` webdar_static-html_form.o: html_form.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar_static-html_form.o -MD -MP -MF $(DEPDIR)/webdar_static-html_form.Tpo -c -o webdar_static-html_form.o `test -f 'html_form.cpp' || echo '$(srcdir)/'`html_form.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar_static-html_form.Tpo $(DEPDIR)/webdar_static-html_form.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='html_form.cpp' object='webdar_static-html_form.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar_static-html_form.o `test -f 'html_form.cpp' || echo '$(srcdir)/'`html_form.cpp webdar_static-html_form.obj: html_form.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar_static-html_form.obj -MD -MP -MF $(DEPDIR)/webdar_static-html_form.Tpo -c -o webdar_static-html_form.obj `if test -f 'html_form.cpp'; then $(CYGPATH_W) 'html_form.cpp'; else $(CYGPATH_W) '$(srcdir)/html_form.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar_static-html_form.Tpo $(DEPDIR)/webdar_static-html_form.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='html_form.cpp' object='webdar_static-html_form.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar_static-html_form.obj `if test -f 'html_form.cpp'; then $(CYGPATH_W) 'html_form.cpp'; else $(CYGPATH_W) '$(srcdir)/html_form.cpp'; fi` webdar_static-html_form_fieldset.o: html_form_fieldset.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar_static-html_form_fieldset.o -MD -MP -MF $(DEPDIR)/webdar_static-html_form_fieldset.Tpo -c -o webdar_static-html_form_fieldset.o `test -f 'html_form_fieldset.cpp' || echo '$(srcdir)/'`html_form_fieldset.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar_static-html_form_fieldset.Tpo $(DEPDIR)/webdar_static-html_form_fieldset.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='html_form_fieldset.cpp' object='webdar_static-html_form_fieldset.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar_static-html_form_fieldset.o `test -f 'html_form_fieldset.cpp' || echo '$(srcdir)/'`html_form_fieldset.cpp webdar_static-html_form_fieldset.obj: html_form_fieldset.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar_static-html_form_fieldset.obj -MD -MP -MF $(DEPDIR)/webdar_static-html_form_fieldset.Tpo -c -o webdar_static-html_form_fieldset.obj `if test -f 'html_form_fieldset.cpp'; then $(CYGPATH_W) 'html_form_fieldset.cpp'; else $(CYGPATH_W) '$(srcdir)/html_form_fieldset.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar_static-html_form_fieldset.Tpo $(DEPDIR)/webdar_static-html_form_fieldset.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='html_form_fieldset.cpp' object='webdar_static-html_form_fieldset.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar_static-html_form_fieldset.obj `if test -f 'html_form_fieldset.cpp'; then $(CYGPATH_W) 'html_form_fieldset.cpp'; else $(CYGPATH_W) '$(srcdir)/html_form_fieldset.cpp'; fi` webdar_static-html_form_input.o: html_form_input.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar_static-html_form_input.o -MD -MP -MF $(DEPDIR)/webdar_static-html_form_input.Tpo -c -o webdar_static-html_form_input.o `test -f 'html_form_input.cpp' || echo '$(srcdir)/'`html_form_input.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar_static-html_form_input.Tpo $(DEPDIR)/webdar_static-html_form_input.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='html_form_input.cpp' object='webdar_static-html_form_input.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar_static-html_form_input.o `test -f 'html_form_input.cpp' || echo '$(srcdir)/'`html_form_input.cpp webdar_static-html_form_input.obj: html_form_input.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar_static-html_form_input.obj -MD -MP -MF $(DEPDIR)/webdar_static-html_form_input.Tpo -c -o webdar_static-html_form_input.obj `if test -f 'html_form_input.cpp'; then $(CYGPATH_W) 'html_form_input.cpp'; else $(CYGPATH_W) '$(srcdir)/html_form_input.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar_static-html_form_input.Tpo $(DEPDIR)/webdar_static-html_form_input.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='html_form_input.cpp' object='webdar_static-html_form_input.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar_static-html_form_input.obj `if test -f 'html_form_input.cpp'; then $(CYGPATH_W) 'html_form_input.cpp'; else $(CYGPATH_W) '$(srcdir)/html_form_input.cpp'; fi` webdar_static-html_form_radio.o: html_form_radio.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar_static-html_form_radio.o -MD -MP -MF $(DEPDIR)/webdar_static-html_form_radio.Tpo -c -o webdar_static-html_form_radio.o `test -f 'html_form_radio.cpp' || echo '$(srcdir)/'`html_form_radio.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar_static-html_form_radio.Tpo $(DEPDIR)/webdar_static-html_form_radio.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='html_form_radio.cpp' object='webdar_static-html_form_radio.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar_static-html_form_radio.o `test -f 'html_form_radio.cpp' || echo '$(srcdir)/'`html_form_radio.cpp webdar_static-html_form_radio.obj: html_form_radio.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar_static-html_form_radio.obj -MD -MP -MF $(DEPDIR)/webdar_static-html_form_radio.Tpo -c -o webdar_static-html_form_radio.obj `if test -f 'html_form_radio.cpp'; then $(CYGPATH_W) 'html_form_radio.cpp'; else $(CYGPATH_W) '$(srcdir)/html_form_radio.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar_static-html_form_radio.Tpo $(DEPDIR)/webdar_static-html_form_radio.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='html_form_radio.cpp' object='webdar_static-html_form_radio.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar_static-html_form_radio.obj `if test -f 'html_form_radio.cpp'; then $(CYGPATH_W) 'html_form_radio.cpp'; else $(CYGPATH_W) '$(srcdir)/html_form_radio.cpp'; fi` webdar_static-html_form_select.o: html_form_select.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar_static-html_form_select.o -MD -MP -MF $(DEPDIR)/webdar_static-html_form_select.Tpo -c -o webdar_static-html_form_select.o `test -f 'html_form_select.cpp' || echo '$(srcdir)/'`html_form_select.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar_static-html_form_select.Tpo $(DEPDIR)/webdar_static-html_form_select.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='html_form_select.cpp' object='webdar_static-html_form_select.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar_static-html_form_select.o `test -f 'html_form_select.cpp' || echo '$(srcdir)/'`html_form_select.cpp webdar_static-html_form_select.obj: html_form_select.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar_static-html_form_select.obj -MD -MP -MF $(DEPDIR)/webdar_static-html_form_select.Tpo -c -o webdar_static-html_form_select.obj `if test -f 'html_form_select.cpp'; then $(CYGPATH_W) 'html_form_select.cpp'; else $(CYGPATH_W) '$(srcdir)/html_form_select.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar_static-html_form_select.Tpo $(DEPDIR)/webdar_static-html_form_select.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='html_form_select.cpp' object='webdar_static-html_form_select.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar_static-html_form_select.obj `if test -f 'html_form_select.cpp'; then $(CYGPATH_W) 'html_form_select.cpp'; else $(CYGPATH_W) '$(srcdir)/html_form_select.cpp'; fi` webdar_static-body_builder.o: body_builder.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar_static-body_builder.o -MD -MP -MF $(DEPDIR)/webdar_static-body_builder.Tpo -c -o webdar_static-body_builder.o `test -f 'body_builder.cpp' || echo '$(srcdir)/'`body_builder.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar_static-body_builder.Tpo $(DEPDIR)/webdar_static-body_builder.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='body_builder.cpp' object='webdar_static-body_builder.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar_static-body_builder.o `test -f 'body_builder.cpp' || echo '$(srcdir)/'`body_builder.cpp webdar_static-body_builder.obj: body_builder.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar_static-body_builder.obj -MD -MP -MF $(DEPDIR)/webdar_static-body_builder.Tpo -c -o webdar_static-body_builder.obj `if test -f 'body_builder.cpp'; then $(CYGPATH_W) 'body_builder.cpp'; else $(CYGPATH_W) '$(srcdir)/body_builder.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar_static-body_builder.Tpo $(DEPDIR)/webdar_static-body_builder.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='body_builder.cpp' object='webdar_static-body_builder.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar_static-body_builder.obj `if test -f 'body_builder.cpp'; then $(CYGPATH_W) 'body_builder.cpp'; else $(CYGPATH_W) '$(srcdir)/body_builder.cpp'; fi` webdar_static-chemin.o: chemin.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar_static-chemin.o -MD -MP -MF $(DEPDIR)/webdar_static-chemin.Tpo -c -o webdar_static-chemin.o `test -f 'chemin.cpp' || echo '$(srcdir)/'`chemin.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar_static-chemin.Tpo $(DEPDIR)/webdar_static-chemin.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='chemin.cpp' object='webdar_static-chemin.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar_static-chemin.o `test -f 'chemin.cpp' || echo '$(srcdir)/'`chemin.cpp webdar_static-chemin.obj: chemin.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar_static-chemin.obj -MD -MP -MF $(DEPDIR)/webdar_static-chemin.Tpo -c -o webdar_static-chemin.obj `if test -f 'chemin.cpp'; then $(CYGPATH_W) 'chemin.cpp'; else $(CYGPATH_W) '$(srcdir)/chemin.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar_static-chemin.Tpo $(DEPDIR)/webdar_static-chemin.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='chemin.cpp' object='webdar_static-chemin.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar_static-chemin.obj `if test -f 'chemin.cpp'; then $(CYGPATH_W) 'chemin.cpp'; else $(CYGPATH_W) '$(srcdir)/chemin.cpp'; fi` webdar_static-css_property.o: css_property.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar_static-css_property.o -MD -MP -MF $(DEPDIR)/webdar_static-css_property.Tpo -c -o webdar_static-css_property.o `test -f 'css_property.cpp' || echo '$(srcdir)/'`css_property.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar_static-css_property.Tpo $(DEPDIR)/webdar_static-css_property.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='css_property.cpp' object='webdar_static-css_property.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar_static-css_property.o `test -f 'css_property.cpp' || echo '$(srcdir)/'`css_property.cpp webdar_static-css_property.obj: css_property.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar_static-css_property.obj -MD -MP -MF $(DEPDIR)/webdar_static-css_property.Tpo -c -o webdar_static-css_property.obj `if test -f 'css_property.cpp'; then $(CYGPATH_W) 'css_property.cpp'; else $(CYGPATH_W) '$(srcdir)/css_property.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar_static-css_property.Tpo $(DEPDIR)/webdar_static-css_property.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='css_property.cpp' object='webdar_static-css_property.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar_static-css_property.obj `if test -f 'css_property.cpp'; then $(CYGPATH_W) 'css_property.cpp'; else $(CYGPATH_W) '$(srcdir)/css_property.cpp'; fi` webdar_static-html_level.o: html_level.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar_static-html_level.o -MD -MP -MF $(DEPDIR)/webdar_static-html_level.Tpo -c -o webdar_static-html_level.o `test -f 'html_level.cpp' || echo '$(srcdir)/'`html_level.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar_static-html_level.Tpo $(DEPDIR)/webdar_static-html_level.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='html_level.cpp' object='webdar_static-html_level.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar_static-html_level.o `test -f 'html_level.cpp' || echo '$(srcdir)/'`html_level.cpp webdar_static-html_level.obj: html_level.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar_static-html_level.obj -MD -MP -MF $(DEPDIR)/webdar_static-html_level.Tpo -c -o webdar_static-html_level.obj `if test -f 'html_level.cpp'; then $(CYGPATH_W) 'html_level.cpp'; else $(CYGPATH_W) '$(srcdir)/html_level.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar_static-html_level.Tpo $(DEPDIR)/webdar_static-html_level.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='html_level.cpp' object='webdar_static-html_level.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar_static-html_level.obj `if test -f 'html_level.cpp'; then $(CYGPATH_W) 'html_level.cpp'; else $(CYGPATH_W) '$(srcdir)/html_level.cpp'; fi` webdar_static-html_div.o: html_div.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar_static-html_div.o -MD -MP -MF $(DEPDIR)/webdar_static-html_div.Tpo -c -o webdar_static-html_div.o `test -f 'html_div.cpp' || echo '$(srcdir)/'`html_div.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar_static-html_div.Tpo $(DEPDIR)/webdar_static-html_div.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='html_div.cpp' object='webdar_static-html_div.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar_static-html_div.o `test -f 'html_div.cpp' || echo '$(srcdir)/'`html_div.cpp webdar_static-html_div.obj: html_div.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar_static-html_div.obj -MD -MP -MF $(DEPDIR)/webdar_static-html_div.Tpo -c -o webdar_static-html_div.obj `if test -f 'html_div.cpp'; then $(CYGPATH_W) 'html_div.cpp'; else $(CYGPATH_W) '$(srcdir)/html_div.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar_static-html_div.Tpo $(DEPDIR)/webdar_static-html_div.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='html_div.cpp' object='webdar_static-html_div.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar_static-html_div.obj `if test -f 'html_div.cpp'; then $(CYGPATH_W) 'html_div.cpp'; else $(CYGPATH_W) '$(srcdir)/html_div.cpp'; fi` webdar_static-html_menu.o: html_menu.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar_static-html_menu.o -MD -MP -MF $(DEPDIR)/webdar_static-html_menu.Tpo -c -o webdar_static-html_menu.o `test -f 'html_menu.cpp' || echo '$(srcdir)/'`html_menu.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar_static-html_menu.Tpo $(DEPDIR)/webdar_static-html_menu.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='html_menu.cpp' object='webdar_static-html_menu.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar_static-html_menu.o `test -f 'html_menu.cpp' || echo '$(srcdir)/'`html_menu.cpp webdar_static-html_menu.obj: html_menu.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar_static-html_menu.obj -MD -MP -MF $(DEPDIR)/webdar_static-html_menu.Tpo -c -o webdar_static-html_menu.obj `if test -f 'html_menu.cpp'; then $(CYGPATH_W) 'html_menu.cpp'; else $(CYGPATH_W) '$(srcdir)/html_menu.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar_static-html_menu.Tpo $(DEPDIR)/webdar_static-html_menu.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='html_menu.cpp' object='webdar_static-html_menu.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar_static-html_menu.obj `if test -f 'html_menu.cpp'; then $(CYGPATH_W) 'html_menu.cpp'; else $(CYGPATH_W) '$(srcdir)/html_menu.cpp'; fi` webdar_static-html_aiguille.o: html_aiguille.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar_static-html_aiguille.o -MD -MP -MF $(DEPDIR)/webdar_static-html_aiguille.Tpo -c -o webdar_static-html_aiguille.o `test -f 'html_aiguille.cpp' || echo '$(srcdir)/'`html_aiguille.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar_static-html_aiguille.Tpo $(DEPDIR)/webdar_static-html_aiguille.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='html_aiguille.cpp' object='webdar_static-html_aiguille.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar_static-html_aiguille.o `test -f 'html_aiguille.cpp' || echo '$(srcdir)/'`html_aiguille.cpp webdar_static-html_aiguille.obj: html_aiguille.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar_static-html_aiguille.obj -MD -MP -MF $(DEPDIR)/webdar_static-html_aiguille.Tpo -c -o webdar_static-html_aiguille.obj `if test -f 'html_aiguille.cpp'; then $(CYGPATH_W) 'html_aiguille.cpp'; else $(CYGPATH_W) '$(srcdir)/html_aiguille.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar_static-html_aiguille.Tpo $(DEPDIR)/webdar_static-html_aiguille.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='html_aiguille.cpp' object='webdar_static-html_aiguille.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar_static-html_aiguille.obj `if test -f 'html_aiguille.cpp'; then $(CYGPATH_W) 'html_aiguille.cpp'; else $(CYGPATH_W) '$(srcdir)/html_aiguille.cpp'; fi` webdar_static-saisie.o: saisie.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar_static-saisie.o -MD -MP -MF $(DEPDIR)/webdar_static-saisie.Tpo -c -o webdar_static-saisie.o `test -f 'saisie.cpp' || echo '$(srcdir)/'`saisie.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar_static-saisie.Tpo $(DEPDIR)/webdar_static-saisie.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='saisie.cpp' object='webdar_static-saisie.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar_static-saisie.o `test -f 'saisie.cpp' || echo '$(srcdir)/'`saisie.cpp webdar_static-saisie.obj: saisie.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar_static-saisie.obj -MD -MP -MF $(DEPDIR)/webdar_static-saisie.Tpo -c -o webdar_static-saisie.obj `if test -f 'saisie.cpp'; then $(CYGPATH_W) 'saisie.cpp'; else $(CYGPATH_W) '$(srcdir)/saisie.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar_static-saisie.Tpo $(DEPDIR)/webdar_static-saisie.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='saisie.cpp' object='webdar_static-saisie.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar_static-saisie.obj `if test -f 'saisie.cpp'; then $(CYGPATH_W) 'saisie.cpp'; else $(CYGPATH_W) '$(srcdir)/saisie.cpp'; fi` webdar_static-user_interface.o: user_interface.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar_static-user_interface.o -MD -MP -MF $(DEPDIR)/webdar_static-user_interface.Tpo -c -o webdar_static-user_interface.o `test -f 'user_interface.cpp' || echo '$(srcdir)/'`user_interface.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar_static-user_interface.Tpo $(DEPDIR)/webdar_static-user_interface.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='user_interface.cpp' object='webdar_static-user_interface.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar_static-user_interface.o `test -f 'user_interface.cpp' || echo '$(srcdir)/'`user_interface.cpp webdar_static-user_interface.obj: user_interface.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar_static-user_interface.obj -MD -MP -MF $(DEPDIR)/webdar_static-user_interface.Tpo -c -o webdar_static-user_interface.obj `if test -f 'user_interface.cpp'; then $(CYGPATH_W) 'user_interface.cpp'; else $(CYGPATH_W) '$(srcdir)/user_interface.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar_static-user_interface.Tpo $(DEPDIR)/webdar_static-user_interface.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='user_interface.cpp' object='webdar_static-user_interface.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar_static-user_interface.obj `if test -f 'user_interface.cpp'; then $(CYGPATH_W) 'user_interface.cpp'; else $(CYGPATH_W) '$(srcdir)/user_interface.cpp'; fi` webdar_static-events.o: events.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar_static-events.o -MD -MP -MF $(DEPDIR)/webdar_static-events.Tpo -c -o webdar_static-events.o `test -f 'events.cpp' || echo '$(srcdir)/'`events.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar_static-events.Tpo $(DEPDIR)/webdar_static-events.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='events.cpp' object='webdar_static-events.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar_static-events.o `test -f 'events.cpp' || echo '$(srcdir)/'`events.cpp webdar_static-events.obj: events.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar_static-events.obj -MD -MP -MF $(DEPDIR)/webdar_static-events.Tpo -c -o webdar_static-events.obj `if test -f 'events.cpp'; then $(CYGPATH_W) 'events.cpp'; else $(CYGPATH_W) '$(srcdir)/events.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar_static-events.Tpo $(DEPDIR)/webdar_static-events.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='events.cpp' object='webdar_static-events.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar_static-events.obj `if test -f 'events.cpp'; then $(CYGPATH_W) 'events.cpp'; else $(CYGPATH_W) '$(srcdir)/events.cpp'; fi` webdar_static-actor.o: actor.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar_static-actor.o -MD -MP -MF $(DEPDIR)/webdar_static-actor.Tpo -c -o webdar_static-actor.o `test -f 'actor.cpp' || echo '$(srcdir)/'`actor.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar_static-actor.Tpo $(DEPDIR)/webdar_static-actor.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='actor.cpp' object='webdar_static-actor.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar_static-actor.o `test -f 'actor.cpp' || echo '$(srcdir)/'`actor.cpp webdar_static-actor.obj: actor.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar_static-actor.obj -MD -MP -MF $(DEPDIR)/webdar_static-actor.Tpo -c -o webdar_static-actor.obj `if test -f 'actor.cpp'; then $(CYGPATH_W) 'actor.cpp'; else $(CYGPATH_W) '$(srcdir)/actor.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar_static-actor.Tpo $(DEPDIR)/webdar_static-actor.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='actor.cpp' object='webdar_static-actor.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar_static-actor.obj `if test -f 'actor.cpp'; then $(CYGPATH_W) 'actor.cpp'; else $(CYGPATH_W) '$(srcdir)/actor.cpp'; fi` webdar_static-reference.o: reference.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar_static-reference.o -MD -MP -MF $(DEPDIR)/webdar_static-reference.Tpo -c -o webdar_static-reference.o `test -f 'reference.cpp' || echo '$(srcdir)/'`reference.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar_static-reference.Tpo $(DEPDIR)/webdar_static-reference.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='reference.cpp' object='webdar_static-reference.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar_static-reference.o `test -f 'reference.cpp' || echo '$(srcdir)/'`reference.cpp webdar_static-reference.obj: reference.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar_static-reference.obj -MD -MP -MF $(DEPDIR)/webdar_static-reference.Tpo -c -o webdar_static-reference.obj `if test -f 'reference.cpp'; then $(CYGPATH_W) 'reference.cpp'; else $(CYGPATH_W) '$(srcdir)/reference.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar_static-reference.Tpo $(DEPDIR)/webdar_static-reference.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='reference.cpp' object='webdar_static-reference.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar_static-reference.obj `if test -f 'reference.cpp'; then $(CYGPATH_W) 'reference.cpp'; else $(CYGPATH_W) '$(srcdir)/reference.cpp'; fi` webdar_static-html_yes_no_box.o: html_yes_no_box.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar_static-html_yes_no_box.o -MD -MP -MF $(DEPDIR)/webdar_static-html_yes_no_box.Tpo -c -o webdar_static-html_yes_no_box.o `test -f 'html_yes_no_box.cpp' || echo '$(srcdir)/'`html_yes_no_box.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar_static-html_yes_no_box.Tpo $(DEPDIR)/webdar_static-html_yes_no_box.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='html_yes_no_box.cpp' object='webdar_static-html_yes_no_box.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar_static-html_yes_no_box.o `test -f 'html_yes_no_box.cpp' || echo '$(srcdir)/'`html_yes_no_box.cpp webdar_static-html_yes_no_box.obj: html_yes_no_box.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar_static-html_yes_no_box.obj -MD -MP -MF $(DEPDIR)/webdar_static-html_yes_no_box.Tpo -c -o webdar_static-html_yes_no_box.obj `if test -f 'html_yes_no_box.cpp'; then $(CYGPATH_W) 'html_yes_no_box.cpp'; else $(CYGPATH_W) '$(srcdir)/html_yes_no_box.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar_static-html_yes_no_box.Tpo $(DEPDIR)/webdar_static-html_yes_no_box.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='html_yes_no_box.cpp' object='webdar_static-html_yes_no_box.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar_static-html_yes_no_box.obj `if test -f 'html_yes_no_box.cpp'; then $(CYGPATH_W) 'html_yes_no_box.cpp'; else $(CYGPATH_W) '$(srcdir)/html_yes_no_box.cpp'; fi` webdar_static-html_options_extract.o: html_options_extract.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar_static-html_options_extract.o -MD -MP -MF $(DEPDIR)/webdar_static-html_options_extract.Tpo -c -o webdar_static-html_options_extract.o `test -f 'html_options_extract.cpp' || echo '$(srcdir)/'`html_options_extract.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar_static-html_options_extract.Tpo $(DEPDIR)/webdar_static-html_options_extract.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='html_options_extract.cpp' object='webdar_static-html_options_extract.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar_static-html_options_extract.o `test -f 'html_options_extract.cpp' || echo '$(srcdir)/'`html_options_extract.cpp webdar_static-html_options_extract.obj: html_options_extract.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar_static-html_options_extract.obj -MD -MP -MF $(DEPDIR)/webdar_static-html_options_extract.Tpo -c -o webdar_static-html_options_extract.obj `if test -f 'html_options_extract.cpp'; then $(CYGPATH_W) 'html_options_extract.cpp'; else $(CYGPATH_W) '$(srcdir)/html_options_extract.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar_static-html_options_extract.Tpo $(DEPDIR)/webdar_static-html_options_extract.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='html_options_extract.cpp' object='webdar_static-html_options_extract.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar_static-html_options_extract.obj `if test -f 'html_options_extract.cpp'; then $(CYGPATH_W) 'html_options_extract.cpp'; else $(CYGPATH_W) '$(srcdir)/html_options_extract.cpp'; fi` webdar_static-html_options_read.o: html_options_read.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar_static-html_options_read.o -MD -MP -MF $(DEPDIR)/webdar_static-html_options_read.Tpo -c -o webdar_static-html_options_read.o `test -f 'html_options_read.cpp' || echo '$(srcdir)/'`html_options_read.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar_static-html_options_read.Tpo $(DEPDIR)/webdar_static-html_options_read.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='html_options_read.cpp' object='webdar_static-html_options_read.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar_static-html_options_read.o `test -f 'html_options_read.cpp' || echo '$(srcdir)/'`html_options_read.cpp webdar_static-html_options_read.obj: html_options_read.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar_static-html_options_read.obj -MD -MP -MF $(DEPDIR)/webdar_static-html_options_read.Tpo -c -o webdar_static-html_options_read.obj `if test -f 'html_options_read.cpp'; then $(CYGPATH_W) 'html_options_read.cpp'; else $(CYGPATH_W) '$(srcdir)/html_options_read.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar_static-html_options_read.Tpo $(DEPDIR)/webdar_static-html_options_read.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='html_options_read.cpp' object='webdar_static-html_options_read.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar_static-html_options_read.obj `if test -f 'html_options_read.cpp'; then $(CYGPATH_W) 'html_options_read.cpp'; else $(CYGPATH_W) '$(srcdir)/html_options_read.cpp'; fi` webdar_static-html_crypto_algo.o: html_crypto_algo.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar_static-html_crypto_algo.o -MD -MP -MF $(DEPDIR)/webdar_static-html_crypto_algo.Tpo -c -o webdar_static-html_crypto_algo.o `test -f 'html_crypto_algo.cpp' || echo '$(srcdir)/'`html_crypto_algo.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar_static-html_crypto_algo.Tpo $(DEPDIR)/webdar_static-html_crypto_algo.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='html_crypto_algo.cpp' object='webdar_static-html_crypto_algo.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar_static-html_crypto_algo.o `test -f 'html_crypto_algo.cpp' || echo '$(srcdir)/'`html_crypto_algo.cpp webdar_static-html_crypto_algo.obj: html_crypto_algo.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar_static-html_crypto_algo.obj -MD -MP -MF $(DEPDIR)/webdar_static-html_crypto_algo.Tpo -c -o webdar_static-html_crypto_algo.obj `if test -f 'html_crypto_algo.cpp'; then $(CYGPATH_W) 'html_crypto_algo.cpp'; else $(CYGPATH_W) '$(srcdir)/html_crypto_algo.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar_static-html_crypto_algo.Tpo $(DEPDIR)/webdar_static-html_crypto_algo.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='html_crypto_algo.cpp' object='webdar_static-html_crypto_algo.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar_static-html_crypto_algo.obj `if test -f 'html_crypto_algo.cpp'; then $(CYGPATH_W) 'html_crypto_algo.cpp'; else $(CYGPATH_W) '$(srcdir)/html_crypto_algo.cpp'; fi` webdar_static-html_comparison_fields.o: html_comparison_fields.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar_static-html_comparison_fields.o -MD -MP -MF $(DEPDIR)/webdar_static-html_comparison_fields.Tpo -c -o webdar_static-html_comparison_fields.o `test -f 'html_comparison_fields.cpp' || echo '$(srcdir)/'`html_comparison_fields.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar_static-html_comparison_fields.Tpo $(DEPDIR)/webdar_static-html_comparison_fields.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='html_comparison_fields.cpp' object='webdar_static-html_comparison_fields.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar_static-html_comparison_fields.o `test -f 'html_comparison_fields.cpp' || echo '$(srcdir)/'`html_comparison_fields.cpp webdar_static-html_comparison_fields.obj: html_comparison_fields.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar_static-html_comparison_fields.obj -MD -MP -MF $(DEPDIR)/webdar_static-html_comparison_fields.Tpo -c -o webdar_static-html_comparison_fields.obj `if test -f 'html_comparison_fields.cpp'; then $(CYGPATH_W) 'html_comparison_fields.cpp'; else $(CYGPATH_W) '$(srcdir)/html_comparison_fields.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar_static-html_comparison_fields.Tpo $(DEPDIR)/webdar_static-html_comparison_fields.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='html_comparison_fields.cpp' object='webdar_static-html_comparison_fields.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar_static-html_comparison_fields.obj `if test -f 'html_comparison_fields.cpp'; then $(CYGPATH_W) 'html_comparison_fields.cpp'; else $(CYGPATH_W) '$(srcdir)/html_comparison_fields.cpp'; fi` webdar_static-html_options_compare.o: html_options_compare.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar_static-html_options_compare.o -MD -MP -MF $(DEPDIR)/webdar_static-html_options_compare.Tpo -c -o webdar_static-html_options_compare.o `test -f 'html_options_compare.cpp' || echo '$(srcdir)/'`html_options_compare.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar_static-html_options_compare.Tpo $(DEPDIR)/webdar_static-html_options_compare.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='html_options_compare.cpp' object='webdar_static-html_options_compare.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar_static-html_options_compare.o `test -f 'html_options_compare.cpp' || echo '$(srcdir)/'`html_options_compare.cpp webdar_static-html_options_compare.obj: html_options_compare.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar_static-html_options_compare.obj -MD -MP -MF $(DEPDIR)/webdar_static-html_options_compare.Tpo -c -o webdar_static-html_options_compare.obj `if test -f 'html_options_compare.cpp'; then $(CYGPATH_W) 'html_options_compare.cpp'; else $(CYGPATH_W) '$(srcdir)/html_options_compare.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar_static-html_options_compare.Tpo $(DEPDIR)/webdar_static-html_options_compare.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='html_options_compare.cpp' object='webdar_static-html_options_compare.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar_static-html_options_compare.obj `if test -f 'html_options_compare.cpp'; then $(CYGPATH_W) 'html_options_compare.cpp'; else $(CYGPATH_W) '$(srcdir)/html_options_compare.cpp'; fi` webdar_static-html_options_test.o: html_options_test.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar_static-html_options_test.o -MD -MP -MF $(DEPDIR)/webdar_static-html_options_test.Tpo -c -o webdar_static-html_options_test.o `test -f 'html_options_test.cpp' || echo '$(srcdir)/'`html_options_test.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar_static-html_options_test.Tpo $(DEPDIR)/webdar_static-html_options_test.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='html_options_test.cpp' object='webdar_static-html_options_test.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar_static-html_options_test.o `test -f 'html_options_test.cpp' || echo '$(srcdir)/'`html_options_test.cpp webdar_static-html_options_test.obj: html_options_test.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar_static-html_options_test.obj -MD -MP -MF $(DEPDIR)/webdar_static-html_options_test.Tpo -c -o webdar_static-html_options_test.obj `if test -f 'html_options_test.cpp'; then $(CYGPATH_W) 'html_options_test.cpp'; else $(CYGPATH_W) '$(srcdir)/html_options_test.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar_static-html_options_test.Tpo $(DEPDIR)/webdar_static-html_options_test.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='html_options_test.cpp' object='webdar_static-html_options_test.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar_static-html_options_test.obj `if test -f 'html_options_test.cpp'; then $(CYGPATH_W) 'html_options_test.cpp'; else $(CYGPATH_W) '$(srcdir)/html_options_test.cpp'; fi` webdar_static-html_archive_read.o: html_archive_read.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar_static-html_archive_read.o -MD -MP -MF $(DEPDIR)/webdar_static-html_archive_read.Tpo -c -o webdar_static-html_archive_read.o `test -f 'html_archive_read.cpp' || echo '$(srcdir)/'`html_archive_read.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar_static-html_archive_read.Tpo $(DEPDIR)/webdar_static-html_archive_read.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='html_archive_read.cpp' object='webdar_static-html_archive_read.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar_static-html_archive_read.o `test -f 'html_archive_read.cpp' || echo '$(srcdir)/'`html_archive_read.cpp webdar_static-html_archive_read.obj: html_archive_read.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar_static-html_archive_read.obj -MD -MP -MF $(DEPDIR)/webdar_static-html_archive_read.Tpo -c -o webdar_static-html_archive_read.obj `if test -f 'html_archive_read.cpp'; then $(CYGPATH_W) 'html_archive_read.cpp'; else $(CYGPATH_W) '$(srcdir)/html_archive_read.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar_static-html_archive_read.Tpo $(DEPDIR)/webdar_static-html_archive_read.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='html_archive_read.cpp' object='webdar_static-html_archive_read.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar_static-html_archive_read.obj `if test -f 'html_archive_read.cpp'; then $(CYGPATH_W) 'html_archive_read.cpp'; else $(CYGPATH_W) '$(srcdir)/html_archive_read.cpp'; fi` webdar_static-html_compression.o: html_compression.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar_static-html_compression.o -MD -MP -MF $(DEPDIR)/webdar_static-html_compression.Tpo -c -o webdar_static-html_compression.o `test -f 'html_compression.cpp' || echo '$(srcdir)/'`html_compression.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar_static-html_compression.Tpo $(DEPDIR)/webdar_static-html_compression.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='html_compression.cpp' object='webdar_static-html_compression.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar_static-html_compression.o `test -f 'html_compression.cpp' || echo '$(srcdir)/'`html_compression.cpp webdar_static-html_compression.obj: html_compression.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar_static-html_compression.obj -MD -MP -MF $(DEPDIR)/webdar_static-html_compression.Tpo -c -o webdar_static-html_compression.obj `if test -f 'html_compression.cpp'; then $(CYGPATH_W) 'html_compression.cpp'; else $(CYGPATH_W) '$(srcdir)/html_compression.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar_static-html_compression.Tpo $(DEPDIR)/webdar_static-html_compression.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='html_compression.cpp' object='webdar_static-html_compression.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar_static-html_compression.obj `if test -f 'html_compression.cpp'; then $(CYGPATH_W) 'html_compression.cpp'; else $(CYGPATH_W) '$(srcdir)/html_compression.cpp'; fi` webdar_static-html_size_unit.o: html_size_unit.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar_static-html_size_unit.o -MD -MP -MF $(DEPDIR)/webdar_static-html_size_unit.Tpo -c -o webdar_static-html_size_unit.o `test -f 'html_size_unit.cpp' || echo '$(srcdir)/'`html_size_unit.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar_static-html_size_unit.Tpo $(DEPDIR)/webdar_static-html_size_unit.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='html_size_unit.cpp' object='webdar_static-html_size_unit.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar_static-html_size_unit.o `test -f 'html_size_unit.cpp' || echo '$(srcdir)/'`html_size_unit.cpp webdar_static-html_size_unit.obj: html_size_unit.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar_static-html_size_unit.obj -MD -MP -MF $(DEPDIR)/webdar_static-html_size_unit.Tpo -c -o webdar_static-html_size_unit.obj `if test -f 'html_size_unit.cpp'; then $(CYGPATH_W) 'html_size_unit.cpp'; else $(CYGPATH_W) '$(srcdir)/html_size_unit.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar_static-html_size_unit.Tpo $(DEPDIR)/webdar_static-html_size_unit.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='html_size_unit.cpp' object='webdar_static-html_size_unit.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar_static-html_size_unit.obj `if test -f 'html_size_unit.cpp'; then $(CYGPATH_W) 'html_size_unit.cpp'; else $(CYGPATH_W) '$(srcdir)/html_size_unit.cpp'; fi` webdar_static-html_hash_algo.o: html_hash_algo.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar_static-html_hash_algo.o -MD -MP -MF $(DEPDIR)/webdar_static-html_hash_algo.Tpo -c -o webdar_static-html_hash_algo.o `test -f 'html_hash_algo.cpp' || echo '$(srcdir)/'`html_hash_algo.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar_static-html_hash_algo.Tpo $(DEPDIR)/webdar_static-html_hash_algo.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='html_hash_algo.cpp' object='webdar_static-html_hash_algo.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar_static-html_hash_algo.o `test -f 'html_hash_algo.cpp' || echo '$(srcdir)/'`html_hash_algo.cpp webdar_static-html_hash_algo.obj: html_hash_algo.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar_static-html_hash_algo.obj -MD -MP -MF $(DEPDIR)/webdar_static-html_hash_algo.Tpo -c -o webdar_static-html_hash_algo.obj `if test -f 'html_hash_algo.cpp'; then $(CYGPATH_W) 'html_hash_algo.cpp'; else $(CYGPATH_W) '$(srcdir)/html_hash_algo.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar_static-html_hash_algo.Tpo $(DEPDIR)/webdar_static-html_hash_algo.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='html_hash_algo.cpp' object='webdar_static-html_hash_algo.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar_static-html_hash_algo.obj `if test -f 'html_hash_algo.cpp'; then $(CYGPATH_W) 'html_hash_algo.cpp'; else $(CYGPATH_W) '$(srcdir)/html_hash_algo.cpp'; fi` webdar_static-html_datetime.o: html_datetime.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar_static-html_datetime.o -MD -MP -MF $(DEPDIR)/webdar_static-html_datetime.Tpo -c -o webdar_static-html_datetime.o `test -f 'html_datetime.cpp' || echo '$(srcdir)/'`html_datetime.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar_static-html_datetime.Tpo $(DEPDIR)/webdar_static-html_datetime.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='html_datetime.cpp' object='webdar_static-html_datetime.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar_static-html_datetime.o `test -f 'html_datetime.cpp' || echo '$(srcdir)/'`html_datetime.cpp webdar_static-html_datetime.obj: html_datetime.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar_static-html_datetime.obj -MD -MP -MF $(DEPDIR)/webdar_static-html_datetime.Tpo -c -o webdar_static-html_datetime.obj `if test -f 'html_datetime.cpp'; then $(CYGPATH_W) 'html_datetime.cpp'; else $(CYGPATH_W) '$(srcdir)/html_datetime.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar_static-html_datetime.Tpo $(DEPDIR)/webdar_static-html_datetime.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='html_datetime.cpp' object='webdar_static-html_datetime.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar_static-html_datetime.obj `if test -f 'html_datetime.cpp'; then $(CYGPATH_W) 'html_datetime.cpp'; else $(CYGPATH_W) '$(srcdir)/html_datetime.cpp'; fi` webdar_static-html_options_create.o: html_options_create.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar_static-html_options_create.o -MD -MP -MF $(DEPDIR)/webdar_static-html_options_create.Tpo -c -o webdar_static-html_options_create.o `test -f 'html_options_create.cpp' || echo '$(srcdir)/'`html_options_create.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar_static-html_options_create.Tpo $(DEPDIR)/webdar_static-html_options_create.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='html_options_create.cpp' object='webdar_static-html_options_create.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar_static-html_options_create.o `test -f 'html_options_create.cpp' || echo '$(srcdir)/'`html_options_create.cpp webdar_static-html_options_create.obj: html_options_create.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar_static-html_options_create.obj -MD -MP -MF $(DEPDIR)/webdar_static-html_options_create.Tpo -c -o webdar_static-html_options_create.obj `if test -f 'html_options_create.cpp'; then $(CYGPATH_W) 'html_options_create.cpp'; else $(CYGPATH_W) '$(srcdir)/html_options_create.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar_static-html_options_create.Tpo $(DEPDIR)/webdar_static-html_options_create.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='html_options_create.cpp' object='webdar_static-html_options_create.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar_static-html_options_create.obj `if test -f 'html_options_create.cpp'; then $(CYGPATH_W) 'html_options_create.cpp'; else $(CYGPATH_W) '$(srcdir)/html_options_create.cpp'; fi` webdar_static-html_archive_create.o: html_archive_create.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar_static-html_archive_create.o -MD -MP -MF $(DEPDIR)/webdar_static-html_archive_create.Tpo -c -o webdar_static-html_archive_create.o `test -f 'html_archive_create.cpp' || echo '$(srcdir)/'`html_archive_create.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar_static-html_archive_create.Tpo $(DEPDIR)/webdar_static-html_archive_create.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='html_archive_create.cpp' object='webdar_static-html_archive_create.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar_static-html_archive_create.o `test -f 'html_archive_create.cpp' || echo '$(srcdir)/'`html_archive_create.cpp webdar_static-html_archive_create.obj: html_archive_create.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar_static-html_archive_create.obj -MD -MP -MF $(DEPDIR)/webdar_static-html_archive_create.Tpo -c -o webdar_static-html_archive_create.obj `if test -f 'html_archive_create.cpp'; then $(CYGPATH_W) 'html_archive_create.cpp'; else $(CYGPATH_W) '$(srcdir)/html_archive_create.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar_static-html_archive_create.Tpo $(DEPDIR)/webdar_static-html_archive_create.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='html_archive_create.cpp' object='webdar_static-html_archive_create.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar_static-html_archive_create.obj `if test -f 'html_archive_create.cpp'; then $(CYGPATH_W) 'html_archive_create.cpp'; else $(CYGPATH_W) '$(srcdir)/html_archive_create.cpp'; fi` webdar_static-web_user_interaction.o: web_user_interaction.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar_static-web_user_interaction.o -MD -MP -MF $(DEPDIR)/webdar_static-web_user_interaction.Tpo -c -o webdar_static-web_user_interaction.o `test -f 'web_user_interaction.cpp' || echo '$(srcdir)/'`web_user_interaction.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar_static-web_user_interaction.Tpo $(DEPDIR)/webdar_static-web_user_interaction.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='web_user_interaction.cpp' object='webdar_static-web_user_interaction.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar_static-web_user_interaction.o `test -f 'web_user_interaction.cpp' || echo '$(srcdir)/'`web_user_interaction.cpp webdar_static-web_user_interaction.obj: web_user_interaction.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar_static-web_user_interaction.obj -MD -MP -MF $(DEPDIR)/webdar_static-web_user_interaction.Tpo -c -o webdar_static-web_user_interaction.obj `if test -f 'web_user_interaction.cpp'; then $(CYGPATH_W) 'web_user_interaction.cpp'; else $(CYGPATH_W) '$(srcdir)/web_user_interaction.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar_static-web_user_interaction.Tpo $(DEPDIR)/webdar_static-web_user_interaction.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='web_user_interaction.cpp' object='webdar_static-web_user_interaction.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar_static-web_user_interaction.obj `if test -f 'web_user_interaction.cpp'; then $(CYGPATH_W) 'web_user_interaction.cpp'; else $(CYGPATH_W) '$(srcdir)/web_user_interaction.cpp'; fi` webdar_static-html_web_user_interaction.o: html_web_user_interaction.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar_static-html_web_user_interaction.o -MD -MP -MF $(DEPDIR)/webdar_static-html_web_user_interaction.Tpo -c -o webdar_static-html_web_user_interaction.o `test -f 'html_web_user_interaction.cpp' || echo '$(srcdir)/'`html_web_user_interaction.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar_static-html_web_user_interaction.Tpo $(DEPDIR)/webdar_static-html_web_user_interaction.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='html_web_user_interaction.cpp' object='webdar_static-html_web_user_interaction.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar_static-html_web_user_interaction.o `test -f 'html_web_user_interaction.cpp' || echo '$(srcdir)/'`html_web_user_interaction.cpp webdar_static-html_web_user_interaction.obj: html_web_user_interaction.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar_static-html_web_user_interaction.obj -MD -MP -MF $(DEPDIR)/webdar_static-html_web_user_interaction.Tpo -c -o webdar_static-html_web_user_interaction.obj `if test -f 'html_web_user_interaction.cpp'; then $(CYGPATH_W) 'html_web_user_interaction.cpp'; else $(CYGPATH_W) '$(srcdir)/html_web_user_interaction.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar_static-html_web_user_interaction.Tpo $(DEPDIR)/webdar_static-html_web_user_interaction.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='html_web_user_interaction.cpp' object='webdar_static-html_web_user_interaction.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar_static-html_web_user_interaction.obj `if test -f 'html_web_user_interaction.cpp'; then $(CYGPATH_W) 'html_web_user_interaction.cpp'; else $(CYGPATH_W) '$(srcdir)/html_web_user_interaction.cpp'; fi` webdar_static-html_button.o: html_button.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar_static-html_button.o -MD -MP -MF $(DEPDIR)/webdar_static-html_button.Tpo -c -o webdar_static-html_button.o `test -f 'html_button.cpp' || echo '$(srcdir)/'`html_button.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar_static-html_button.Tpo $(DEPDIR)/webdar_static-html_button.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='html_button.cpp' object='webdar_static-html_button.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar_static-html_button.o `test -f 'html_button.cpp' || echo '$(srcdir)/'`html_button.cpp webdar_static-html_button.obj: html_button.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar_static-html_button.obj -MD -MP -MF $(DEPDIR)/webdar_static-html_button.Tpo -c -o webdar_static-html_button.obj `if test -f 'html_button.cpp'; then $(CYGPATH_W) 'html_button.cpp'; else $(CYGPATH_W) '$(srcdir)/html_button.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar_static-html_button.Tpo $(DEPDIR)/webdar_static-html_button.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='html_button.cpp' object='webdar_static-html_button.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar_static-html_button.obj `if test -f 'html_button.cpp'; then $(CYGPATH_W) 'html_button.cpp'; else $(CYGPATH_W) '$(srcdir)/html_button.cpp'; fi` webdar_static-html_statistics.o: html_statistics.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar_static-html_statistics.o -MD -MP -MF $(DEPDIR)/webdar_static-html_statistics.Tpo -c -o webdar_static-html_statistics.o `test -f 'html_statistics.cpp' || echo '$(srcdir)/'`html_statistics.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar_static-html_statistics.Tpo $(DEPDIR)/webdar_static-html_statistics.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='html_statistics.cpp' object='webdar_static-html_statistics.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar_static-html_statistics.o `test -f 'html_statistics.cpp' || echo '$(srcdir)/'`html_statistics.cpp webdar_static-html_statistics.obj: html_statistics.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar_static-html_statistics.obj -MD -MP -MF $(DEPDIR)/webdar_static-html_statistics.Tpo -c -o webdar_static-html_statistics.obj `if test -f 'html_statistics.cpp'; then $(CYGPATH_W) 'html_statistics.cpp'; else $(CYGPATH_W) '$(srcdir)/html_statistics.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar_static-html_statistics.Tpo $(DEPDIR)/webdar_static-html_statistics.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='html_statistics.cpp' object='webdar_static-html_statistics.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar_static-html_statistics.obj `if test -f 'html_statistics.cpp'; then $(CYGPATH_W) 'html_statistics.cpp'; else $(CYGPATH_W) '$(srcdir)/html_statistics.cpp'; fi` webdar_static-archive_test.o: archive_test.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar_static-archive_test.o -MD -MP -MF $(DEPDIR)/webdar_static-archive_test.Tpo -c -o webdar_static-archive_test.o `test -f 'archive_test.cpp' || echo '$(srcdir)/'`archive_test.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar_static-archive_test.Tpo $(DEPDIR)/webdar_static-archive_test.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='archive_test.cpp' object='webdar_static-archive_test.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar_static-archive_test.o `test -f 'archive_test.cpp' || echo '$(srcdir)/'`archive_test.cpp webdar_static-archive_test.obj: archive_test.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar_static-archive_test.obj -MD -MP -MF $(DEPDIR)/webdar_static-archive_test.Tpo -c -o webdar_static-archive_test.obj `if test -f 'archive_test.cpp'; then $(CYGPATH_W) 'archive_test.cpp'; else $(CYGPATH_W) '$(srcdir)/archive_test.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar_static-archive_test.Tpo $(DEPDIR)/webdar_static-archive_test.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='archive_test.cpp' object='webdar_static-archive_test.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar_static-archive_test.obj `if test -f 'archive_test.cpp'; then $(CYGPATH_W) 'archive_test.cpp'; else $(CYGPATH_W) '$(srcdir)/archive_test.cpp'; fi` webdar_static-html_error.o: html_error.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar_static-html_error.o -MD -MP -MF $(DEPDIR)/webdar_static-html_error.Tpo -c -o webdar_static-html_error.o `test -f 'html_error.cpp' || echo '$(srcdir)/'`html_error.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar_static-html_error.Tpo $(DEPDIR)/webdar_static-html_error.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='html_error.cpp' object='webdar_static-html_error.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar_static-html_error.o `test -f 'html_error.cpp' || echo '$(srcdir)/'`html_error.cpp webdar_static-html_error.obj: html_error.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar_static-html_error.obj -MD -MP -MF $(DEPDIR)/webdar_static-html_error.Tpo -c -o webdar_static-html_error.obj `if test -f 'html_error.cpp'; then $(CYGPATH_W) 'html_error.cpp'; else $(CYGPATH_W) '$(srcdir)/html_error.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar_static-html_error.Tpo $(DEPDIR)/webdar_static-html_error.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='html_error.cpp' object='webdar_static-html_error.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar_static-html_error.obj `if test -f 'html_error.cpp'; then $(CYGPATH_W) 'html_error.cpp'; else $(CYGPATH_W) '$(srcdir)/html_error.cpp'; fi` webdar_static-html_libdar_running_page.o: html_libdar_running_page.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar_static-html_libdar_running_page.o -MD -MP -MF $(DEPDIR)/webdar_static-html_libdar_running_page.Tpo -c -o webdar_static-html_libdar_running_page.o `test -f 'html_libdar_running_page.cpp' || echo '$(srcdir)/'`html_libdar_running_page.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar_static-html_libdar_running_page.Tpo $(DEPDIR)/webdar_static-html_libdar_running_page.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='html_libdar_running_page.cpp' object='webdar_static-html_libdar_running_page.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar_static-html_libdar_running_page.o `test -f 'html_libdar_running_page.cpp' || echo '$(srcdir)/'`html_libdar_running_page.cpp webdar_static-html_libdar_running_page.obj: html_libdar_running_page.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar_static-html_libdar_running_page.obj -MD -MP -MF $(DEPDIR)/webdar_static-html_libdar_running_page.Tpo -c -o webdar_static-html_libdar_running_page.obj `if test -f 'html_libdar_running_page.cpp'; then $(CYGPATH_W) 'html_libdar_running_page.cpp'; else $(CYGPATH_W) '$(srcdir)/html_libdar_running_page.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar_static-html_libdar_running_page.Tpo $(DEPDIR)/webdar_static-html_libdar_running_page.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='html_libdar_running_page.cpp' object='webdar_static-html_libdar_running_page.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar_static-html_libdar_running_page.obj `if test -f 'html_libdar_running_page.cpp'; then $(CYGPATH_W) 'html_libdar_running_page.cpp'; else $(CYGPATH_W) '$(srcdir)/html_libdar_running_page.cpp'; fi` webdar_static-archive_restore.o: archive_restore.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar_static-archive_restore.o -MD -MP -MF $(DEPDIR)/webdar_static-archive_restore.Tpo -c -o webdar_static-archive_restore.o `test -f 'archive_restore.cpp' || echo '$(srcdir)/'`archive_restore.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar_static-archive_restore.Tpo $(DEPDIR)/webdar_static-archive_restore.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='archive_restore.cpp' object='webdar_static-archive_restore.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar_static-archive_restore.o `test -f 'archive_restore.cpp' || echo '$(srcdir)/'`archive_restore.cpp webdar_static-archive_restore.obj: archive_restore.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar_static-archive_restore.obj -MD -MP -MF $(DEPDIR)/webdar_static-archive_restore.Tpo -c -o webdar_static-archive_restore.obj `if test -f 'archive_restore.cpp'; then $(CYGPATH_W) 'archive_restore.cpp'; else $(CYGPATH_W) '$(srcdir)/archive_restore.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar_static-archive_restore.Tpo $(DEPDIR)/webdar_static-archive_restore.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='archive_restore.cpp' object='webdar_static-archive_restore.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar_static-archive_restore.obj `if test -f 'archive_restore.cpp'; then $(CYGPATH_W) 'archive_restore.cpp'; else $(CYGPATH_W) '$(srcdir)/archive_restore.cpp'; fi` webdar_static-archive_compare.o: archive_compare.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar_static-archive_compare.o -MD -MP -MF $(DEPDIR)/webdar_static-archive_compare.Tpo -c -o webdar_static-archive_compare.o `test -f 'archive_compare.cpp' || echo '$(srcdir)/'`archive_compare.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar_static-archive_compare.Tpo $(DEPDIR)/webdar_static-archive_compare.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='archive_compare.cpp' object='webdar_static-archive_compare.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar_static-archive_compare.o `test -f 'archive_compare.cpp' || echo '$(srcdir)/'`archive_compare.cpp webdar_static-archive_compare.obj: archive_compare.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar_static-archive_compare.obj -MD -MP -MF $(DEPDIR)/webdar_static-archive_compare.Tpo -c -o webdar_static-archive_compare.obj `if test -f 'archive_compare.cpp'; then $(CYGPATH_W) 'archive_compare.cpp'; else $(CYGPATH_W) '$(srcdir)/archive_compare.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar_static-archive_compare.Tpo $(DEPDIR)/webdar_static-archive_compare.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='archive_compare.cpp' object='webdar_static-archive_compare.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar_static-archive_compare.obj `if test -f 'archive_compare.cpp'; then $(CYGPATH_W) 'archive_compare.cpp'; else $(CYGPATH_W) '$(srcdir)/archive_compare.cpp'; fi` webdar_static-archive_create.o: archive_create.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar_static-archive_create.o -MD -MP -MF $(DEPDIR)/webdar_static-archive_create.Tpo -c -o webdar_static-archive_create.o `test -f 'archive_create.cpp' || echo '$(srcdir)/'`archive_create.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar_static-archive_create.Tpo $(DEPDIR)/webdar_static-archive_create.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='archive_create.cpp' object='webdar_static-archive_create.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar_static-archive_create.o `test -f 'archive_create.cpp' || echo '$(srcdir)/'`archive_create.cpp webdar_static-archive_create.obj: archive_create.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar_static-archive_create.obj -MD -MP -MF $(DEPDIR)/webdar_static-archive_create.Tpo -c -o webdar_static-archive_create.obj `if test -f 'archive_create.cpp'; then $(CYGPATH_W) 'archive_create.cpp'; else $(CYGPATH_W) '$(srcdir)/archive_create.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar_static-archive_create.Tpo $(DEPDIR)/webdar_static-archive_create.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='archive_create.cpp' object='webdar_static-archive_create.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar_static-archive_create.obj `if test -f 'archive_create.cpp'; then $(CYGPATH_W) 'archive_create.cpp'; else $(CYGPATH_W) '$(srcdir)/archive_create.cpp'; fi` webdar_static-html_options_isolate.o: html_options_isolate.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar_static-html_options_isolate.o -MD -MP -MF $(DEPDIR)/webdar_static-html_options_isolate.Tpo -c -o webdar_static-html_options_isolate.o `test -f 'html_options_isolate.cpp' || echo '$(srcdir)/'`html_options_isolate.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar_static-html_options_isolate.Tpo $(DEPDIR)/webdar_static-html_options_isolate.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='html_options_isolate.cpp' object='webdar_static-html_options_isolate.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar_static-html_options_isolate.o `test -f 'html_options_isolate.cpp' || echo '$(srcdir)/'`html_options_isolate.cpp webdar_static-html_options_isolate.obj: html_options_isolate.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar_static-html_options_isolate.obj -MD -MP -MF $(DEPDIR)/webdar_static-html_options_isolate.Tpo -c -o webdar_static-html_options_isolate.obj `if test -f 'html_options_isolate.cpp'; then $(CYGPATH_W) 'html_options_isolate.cpp'; else $(CYGPATH_W) '$(srcdir)/html_options_isolate.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar_static-html_options_isolate.Tpo $(DEPDIR)/webdar_static-html_options_isolate.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='html_options_isolate.cpp' object='webdar_static-html_options_isolate.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar_static-html_options_isolate.obj `if test -f 'html_options_isolate.cpp'; then $(CYGPATH_W) 'html_options_isolate.cpp'; else $(CYGPATH_W) '$(srcdir)/html_options_isolate.cpp'; fi` webdar_static-archive_isolate.o: archive_isolate.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar_static-archive_isolate.o -MD -MP -MF $(DEPDIR)/webdar_static-archive_isolate.Tpo -c -o webdar_static-archive_isolate.o `test -f 'archive_isolate.cpp' || echo '$(srcdir)/'`archive_isolate.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar_static-archive_isolate.Tpo $(DEPDIR)/webdar_static-archive_isolate.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='archive_isolate.cpp' object='webdar_static-archive_isolate.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar_static-archive_isolate.o `test -f 'archive_isolate.cpp' || echo '$(srcdir)/'`archive_isolate.cpp webdar_static-archive_isolate.obj: archive_isolate.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar_static-archive_isolate.obj -MD -MP -MF $(DEPDIR)/webdar_static-archive_isolate.Tpo -c -o webdar_static-archive_isolate.obj `if test -f 'archive_isolate.cpp'; then $(CYGPATH_W) 'archive_isolate.cpp'; else $(CYGPATH_W) '$(srcdir)/archive_isolate.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar_static-archive_isolate.Tpo $(DEPDIR)/webdar_static-archive_isolate.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='archive_isolate.cpp' object='webdar_static-archive_isolate.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar_static-archive_isolate.obj `if test -f 'archive_isolate.cpp'; then $(CYGPATH_W) 'archive_isolate.cpp'; else $(CYGPATH_W) '$(srcdir)/archive_isolate.cpp'; fi` webdar_static-html_archive_isolate.o: html_archive_isolate.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar_static-html_archive_isolate.o -MD -MP -MF $(DEPDIR)/webdar_static-html_archive_isolate.Tpo -c -o webdar_static-html_archive_isolate.o `test -f 'html_archive_isolate.cpp' || echo '$(srcdir)/'`html_archive_isolate.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar_static-html_archive_isolate.Tpo $(DEPDIR)/webdar_static-html_archive_isolate.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='html_archive_isolate.cpp' object='webdar_static-html_archive_isolate.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar_static-html_archive_isolate.o `test -f 'html_archive_isolate.cpp' || echo '$(srcdir)/'`html_archive_isolate.cpp webdar_static-html_archive_isolate.obj: html_archive_isolate.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar_static-html_archive_isolate.obj -MD -MP -MF $(DEPDIR)/webdar_static-html_archive_isolate.Tpo -c -o webdar_static-html_archive_isolate.obj `if test -f 'html_archive_isolate.cpp'; then $(CYGPATH_W) 'html_archive_isolate.cpp'; else $(CYGPATH_W) '$(srcdir)/html_archive_isolate.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar_static-html_archive_isolate.Tpo $(DEPDIR)/webdar_static-html_archive_isolate.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='html_archive_isolate.cpp' object='webdar_static-html_archive_isolate.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar_static-html_archive_isolate.obj `if test -f 'html_archive_isolate.cpp'; then $(CYGPATH_W) 'html_archive_isolate.cpp'; else $(CYGPATH_W) '$(srcdir)/html_archive_isolate.cpp'; fi` webdar_static-html_options_merge.o: html_options_merge.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar_static-html_options_merge.o -MD -MP -MF $(DEPDIR)/webdar_static-html_options_merge.Tpo -c -o webdar_static-html_options_merge.o `test -f 'html_options_merge.cpp' || echo '$(srcdir)/'`html_options_merge.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar_static-html_options_merge.Tpo $(DEPDIR)/webdar_static-html_options_merge.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='html_options_merge.cpp' object='webdar_static-html_options_merge.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar_static-html_options_merge.o `test -f 'html_options_merge.cpp' || echo '$(srcdir)/'`html_options_merge.cpp webdar_static-html_options_merge.obj: html_options_merge.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar_static-html_options_merge.obj -MD -MP -MF $(DEPDIR)/webdar_static-html_options_merge.Tpo -c -o webdar_static-html_options_merge.obj `if test -f 'html_options_merge.cpp'; then $(CYGPATH_W) 'html_options_merge.cpp'; else $(CYGPATH_W) '$(srcdir)/html_options_merge.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar_static-html_options_merge.Tpo $(DEPDIR)/webdar_static-html_options_merge.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='html_options_merge.cpp' object='webdar_static-html_options_merge.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar_static-html_options_merge.obj `if test -f 'html_options_merge.cpp'; then $(CYGPATH_W) 'html_options_merge.cpp'; else $(CYGPATH_W) '$(srcdir)/html_options_merge.cpp'; fi` webdar_static-html_archive_merge.o: html_archive_merge.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar_static-html_archive_merge.o -MD -MP -MF $(DEPDIR)/webdar_static-html_archive_merge.Tpo -c -o webdar_static-html_archive_merge.o `test -f 'html_archive_merge.cpp' || echo '$(srcdir)/'`html_archive_merge.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar_static-html_archive_merge.Tpo $(DEPDIR)/webdar_static-html_archive_merge.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='html_archive_merge.cpp' object='webdar_static-html_archive_merge.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar_static-html_archive_merge.o `test -f 'html_archive_merge.cpp' || echo '$(srcdir)/'`html_archive_merge.cpp webdar_static-html_archive_merge.obj: html_archive_merge.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar_static-html_archive_merge.obj -MD -MP -MF $(DEPDIR)/webdar_static-html_archive_merge.Tpo -c -o webdar_static-html_archive_merge.obj `if test -f 'html_archive_merge.cpp'; then $(CYGPATH_W) 'html_archive_merge.cpp'; else $(CYGPATH_W) '$(srcdir)/html_archive_merge.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar_static-html_archive_merge.Tpo $(DEPDIR)/webdar_static-html_archive_merge.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='html_archive_merge.cpp' object='webdar_static-html_archive_merge.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar_static-html_archive_merge.obj `if test -f 'html_archive_merge.cpp'; then $(CYGPATH_W) 'html_archive_merge.cpp'; else $(CYGPATH_W) '$(srcdir)/html_archive_merge.cpp'; fi` webdar_static-archive_merge.o: archive_merge.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar_static-archive_merge.o -MD -MP -MF $(DEPDIR)/webdar_static-archive_merge.Tpo -c -o webdar_static-archive_merge.o `test -f 'archive_merge.cpp' || echo '$(srcdir)/'`archive_merge.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar_static-archive_merge.Tpo $(DEPDIR)/webdar_static-archive_merge.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='archive_merge.cpp' object='webdar_static-archive_merge.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar_static-archive_merge.o `test -f 'archive_merge.cpp' || echo '$(srcdir)/'`archive_merge.cpp webdar_static-archive_merge.obj: archive_merge.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar_static-archive_merge.obj -MD -MP -MF $(DEPDIR)/webdar_static-archive_merge.Tpo -c -o webdar_static-archive_merge.obj `if test -f 'archive_merge.cpp'; then $(CYGPATH_W) 'archive_merge.cpp'; else $(CYGPATH_W) '$(srcdir)/archive_merge.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar_static-archive_merge.Tpo $(DEPDIR)/webdar_static-archive_merge.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='archive_merge.cpp' object='webdar_static-archive_merge.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar_static-archive_merge.obj `if test -f 'archive_merge.cpp'; then $(CYGPATH_W) 'archive_merge.cpp'; else $(CYGPATH_W) '$(srcdir)/archive_merge.cpp'; fi` webdar_static-archive_init_list.o: archive_init_list.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar_static-archive_init_list.o -MD -MP -MF $(DEPDIR)/webdar_static-archive_init_list.Tpo -c -o webdar_static-archive_init_list.o `test -f 'archive_init_list.cpp' || echo '$(srcdir)/'`archive_init_list.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar_static-archive_init_list.Tpo $(DEPDIR)/webdar_static-archive_init_list.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='archive_init_list.cpp' object='webdar_static-archive_init_list.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar_static-archive_init_list.o `test -f 'archive_init_list.cpp' || echo '$(srcdir)/'`archive_init_list.cpp webdar_static-archive_init_list.obj: archive_init_list.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar_static-archive_init_list.obj -MD -MP -MF $(DEPDIR)/webdar_static-archive_init_list.Tpo -c -o webdar_static-archive_init_list.obj `if test -f 'archive_init_list.cpp'; then $(CYGPATH_W) 'archive_init_list.cpp'; else $(CYGPATH_W) '$(srcdir)/archive_init_list.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar_static-archive_init_list.Tpo $(DEPDIR)/webdar_static-archive_init_list.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='archive_init_list.cpp' object='webdar_static-archive_init_list.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar_static-archive_init_list.obj `if test -f 'archive_init_list.cpp'; then $(CYGPATH_W) 'archive_init_list.cpp'; else $(CYGPATH_W) '$(srcdir)/archive_init_list.cpp'; fi` webdar_static-html_dir_tree.o: html_dir_tree.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar_static-html_dir_tree.o -MD -MP -MF $(DEPDIR)/webdar_static-html_dir_tree.Tpo -c -o webdar_static-html_dir_tree.o `test -f 'html_dir_tree.cpp' || echo '$(srcdir)/'`html_dir_tree.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar_static-html_dir_tree.Tpo $(DEPDIR)/webdar_static-html_dir_tree.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='html_dir_tree.cpp' object='webdar_static-html_dir_tree.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar_static-html_dir_tree.o `test -f 'html_dir_tree.cpp' || echo '$(srcdir)/'`html_dir_tree.cpp webdar_static-html_dir_tree.obj: html_dir_tree.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar_static-html_dir_tree.obj -MD -MP -MF $(DEPDIR)/webdar_static-html_dir_tree.Tpo -c -o webdar_static-html_dir_tree.obj `if test -f 'html_dir_tree.cpp'; then $(CYGPATH_W) 'html_dir_tree.cpp'; else $(CYGPATH_W) '$(srcdir)/html_dir_tree.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar_static-html_dir_tree.Tpo $(DEPDIR)/webdar_static-html_dir_tree.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='html_dir_tree.cpp' object='webdar_static-html_dir_tree.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar_static-html_dir_tree.obj `if test -f 'html_dir_tree.cpp'; then $(CYGPATH_W) 'html_dir_tree.cpp'; else $(CYGPATH_W) '$(srcdir)/html_dir_tree.cpp'; fi` webdar_static-html_listing_page.o: html_listing_page.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar_static-html_listing_page.o -MD -MP -MF $(DEPDIR)/webdar_static-html_listing_page.Tpo -c -o webdar_static-html_listing_page.o `test -f 'html_listing_page.cpp' || echo '$(srcdir)/'`html_listing_page.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar_static-html_listing_page.Tpo $(DEPDIR)/webdar_static-html_listing_page.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='html_listing_page.cpp' object='webdar_static-html_listing_page.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar_static-html_listing_page.o `test -f 'html_listing_page.cpp' || echo '$(srcdir)/'`html_listing_page.cpp webdar_static-html_listing_page.obj: html_listing_page.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar_static-html_listing_page.obj -MD -MP -MF $(DEPDIR)/webdar_static-html_listing_page.Tpo -c -o webdar_static-html_listing_page.obj `if test -f 'html_listing_page.cpp'; then $(CYGPATH_W) 'html_listing_page.cpp'; else $(CYGPATH_W) '$(srcdir)/html_listing_page.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar_static-html_listing_page.Tpo $(DEPDIR)/webdar_static-html_listing_page.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='html_listing_page.cpp' object='webdar_static-html_listing_page.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar_static-html_listing_page.obj `if test -f 'html_listing_page.cpp'; then $(CYGPATH_W) 'html_listing_page.cpp'; else $(CYGPATH_W) '$(srcdir)/html_listing_page.cpp'; fi` webdar_static-html_focus.o: html_focus.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar_static-html_focus.o -MD -MP -MF $(DEPDIR)/webdar_static-html_focus.Tpo -c -o webdar_static-html_focus.o `test -f 'html_focus.cpp' || echo '$(srcdir)/'`html_focus.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar_static-html_focus.Tpo $(DEPDIR)/webdar_static-html_focus.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='html_focus.cpp' object='webdar_static-html_focus.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar_static-html_focus.o `test -f 'html_focus.cpp' || echo '$(srcdir)/'`html_focus.cpp webdar_static-html_focus.obj: html_focus.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar_static-html_focus.obj -MD -MP -MF $(DEPDIR)/webdar_static-html_focus.Tpo -c -o webdar_static-html_focus.obj `if test -f 'html_focus.cpp'; then $(CYGPATH_W) 'html_focus.cpp'; else $(CYGPATH_W) '$(srcdir)/html_focus.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar_static-html_focus.Tpo $(DEPDIR)/webdar_static-html_focus.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='html_focus.cpp' object='webdar_static-html_focus.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar_static-html_focus.obj `if test -f 'html_focus.cpp'; then $(CYGPATH_W) 'html_focus.cpp'; else $(CYGPATH_W) '$(srcdir)/html_focus.cpp'; fi` webdar_static-static_object.o: static_object.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar_static-static_object.o -MD -MP -MF $(DEPDIR)/webdar_static-static_object.Tpo -c -o webdar_static-static_object.o `test -f 'static_object.cpp' || echo '$(srcdir)/'`static_object.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar_static-static_object.Tpo $(DEPDIR)/webdar_static-static_object.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='static_object.cpp' object='webdar_static-static_object.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar_static-static_object.o `test -f 'static_object.cpp' || echo '$(srcdir)/'`static_object.cpp webdar_static-static_object.obj: static_object.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar_static-static_object.obj -MD -MP -MF $(DEPDIR)/webdar_static-static_object.Tpo -c -o webdar_static-static_object.obj `if test -f 'static_object.cpp'; then $(CYGPATH_W) 'static_object.cpp'; else $(CYGPATH_W) '$(srcdir)/static_object.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar_static-static_object.Tpo $(DEPDIR)/webdar_static-static_object.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='static_object.cpp' object='webdar_static-static_object.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar_static-static_object.obj `if test -f 'static_object.cpp'; then $(CYGPATH_W) 'static_object.cpp'; else $(CYGPATH_W) '$(srcdir)/static_object.cpp'; fi` webdar_static-static_object_library.o: static_object_library.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar_static-static_object_library.o -MD -MP -MF $(DEPDIR)/webdar_static-static_object_library.Tpo -c -o webdar_static-static_object_library.o `test -f 'static_object_library.cpp' || echo '$(srcdir)/'`static_object_library.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar_static-static_object_library.Tpo $(DEPDIR)/webdar_static-static_object_library.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='static_object_library.cpp' object='webdar_static-static_object_library.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar_static-static_object_library.o `test -f 'static_object_library.cpp' || echo '$(srcdir)/'`static_object_library.cpp webdar_static-static_object_library.obj: static_object_library.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar_static-static_object_library.obj -MD -MP -MF $(DEPDIR)/webdar_static-static_object_library.Tpo -c -o webdar_static-static_object_library.obj `if test -f 'static_object_library.cpp'; then $(CYGPATH_W) 'static_object_library.cpp'; else $(CYGPATH_W) '$(srcdir)/static_object_library.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar_static-static_object_library.Tpo $(DEPDIR)/webdar_static-static_object_library.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='static_object_library.cpp' object='webdar_static-static_object_library.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar_static-static_object_library.obj `if test -f 'static_object_library.cpp'; then $(CYGPATH_W) 'static_object_library.cpp'; else $(CYGPATH_W) '$(srcdir)/static_object_library.cpp'; fi` webdar_static-css_class.o: css_class.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar_static-css_class.o -MD -MP -MF $(DEPDIR)/webdar_static-css_class.Tpo -c -o webdar_static-css_class.o `test -f 'css_class.cpp' || echo '$(srcdir)/'`css_class.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar_static-css_class.Tpo $(DEPDIR)/webdar_static-css_class.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='css_class.cpp' object='webdar_static-css_class.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar_static-css_class.o `test -f 'css_class.cpp' || echo '$(srcdir)/'`css_class.cpp webdar_static-css_class.obj: css_class.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar_static-css_class.obj -MD -MP -MF $(DEPDIR)/webdar_static-css_class.Tpo -c -o webdar_static-css_class.obj `if test -f 'css_class.cpp'; then $(CYGPATH_W) 'css_class.cpp'; else $(CYGPATH_W) '$(srcdir)/css_class.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar_static-css_class.Tpo $(DEPDIR)/webdar_static-css_class.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='css_class.cpp' object='webdar_static-css_class.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar_static-css_class.obj `if test -f 'css_class.cpp'; then $(CYGPATH_W) 'css_class.cpp'; else $(CYGPATH_W) '$(srcdir)/css_class.cpp'; fi` webdar_static-webdar_css_style.o: webdar_css_style.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar_static-webdar_css_style.o -MD -MP -MF $(DEPDIR)/webdar_static-webdar_css_style.Tpo -c -o webdar_static-webdar_css_style.o `test -f 'webdar_css_style.cpp' || echo '$(srcdir)/'`webdar_css_style.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar_static-webdar_css_style.Tpo $(DEPDIR)/webdar_static-webdar_css_style.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='webdar_css_style.cpp' object='webdar_static-webdar_css_style.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar_static-webdar_css_style.o `test -f 'webdar_css_style.cpp' || echo '$(srcdir)/'`webdar_css_style.cpp webdar_static-webdar_css_style.obj: webdar_css_style.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar_static-webdar_css_style.obj -MD -MP -MF $(DEPDIR)/webdar_static-webdar_css_style.Tpo -c -o webdar_static-webdar_css_style.obj `if test -f 'webdar_css_style.cpp'; then $(CYGPATH_W) 'webdar_css_style.cpp'; else $(CYGPATH_W) '$(srcdir)/webdar_css_style.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar_static-webdar_css_style.Tpo $(DEPDIR)/webdar_static-webdar_css_style.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='webdar_css_style.cpp' object='webdar_static-webdar_css_style.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar_static-webdar_css_style.obj `if test -f 'webdar_css_style.cpp'; then $(CYGPATH_W) 'webdar_css_style.cpp'; else $(CYGPATH_W) '$(srcdir)/webdar_css_style.cpp'; fi` webdar_static-css_class_group.o: css_class_group.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar_static-css_class_group.o -MD -MP -MF $(DEPDIR)/webdar_static-css_class_group.Tpo -c -o webdar_static-css_class_group.o `test -f 'css_class_group.cpp' || echo '$(srcdir)/'`css_class_group.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar_static-css_class_group.Tpo $(DEPDIR)/webdar_static-css_class_group.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='css_class_group.cpp' object='webdar_static-css_class_group.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar_static-css_class_group.o `test -f 'css_class_group.cpp' || echo '$(srcdir)/'`css_class_group.cpp webdar_static-css_class_group.obj: css_class_group.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar_static-css_class_group.obj -MD -MP -MF $(DEPDIR)/webdar_static-css_class_group.Tpo -c -o webdar_static-css_class_group.obj `if test -f 'css_class_group.cpp'; then $(CYGPATH_W) 'css_class_group.cpp'; else $(CYGPATH_W) '$(srcdir)/css_class_group.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar_static-css_class_group.Tpo $(DEPDIR)/webdar_static-css_class_group.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='css_class_group.cpp' object='webdar_static-css_class_group.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar_static-css_class_group.obj `if test -f 'css_class_group.cpp'; then $(CYGPATH_W) 'css_class_group.cpp'; else $(CYGPATH_W) '$(srcdir)/css_class_group.cpp'; fi` webdar_static-html_tabs.o: html_tabs.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar_static-html_tabs.o -MD -MP -MF $(DEPDIR)/webdar_static-html_tabs.Tpo -c -o webdar_static-html_tabs.o `test -f 'html_tabs.cpp' || echo '$(srcdir)/'`html_tabs.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar_static-html_tabs.Tpo $(DEPDIR)/webdar_static-html_tabs.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='html_tabs.cpp' object='webdar_static-html_tabs.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar_static-html_tabs.o `test -f 'html_tabs.cpp' || echo '$(srcdir)/'`html_tabs.cpp webdar_static-html_tabs.obj: html_tabs.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar_static-html_tabs.obj -MD -MP -MF $(DEPDIR)/webdar_static-html_tabs.Tpo -c -o webdar_static-html_tabs.obj `if test -f 'html_tabs.cpp'; then $(CYGPATH_W) 'html_tabs.cpp'; else $(CYGPATH_W) '$(srcdir)/html_tabs.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar_static-html_tabs.Tpo $(DEPDIR)/webdar_static-html_tabs.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='html_tabs.cpp' object='webdar_static-html_tabs.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar_static-html_tabs.obj `if test -f 'html_tabs.cpp'; then $(CYGPATH_W) 'html_tabs.cpp'; else $(CYGPATH_W) '$(srcdir)/html_tabs.cpp'; fi` webdar_static-html_select_file.o: html_select_file.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar_static-html_select_file.o -MD -MP -MF $(DEPDIR)/webdar_static-html_select_file.Tpo -c -o webdar_static-html_select_file.o `test -f 'html_select_file.cpp' || echo '$(srcdir)/'`html_select_file.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar_static-html_select_file.Tpo $(DEPDIR)/webdar_static-html_select_file.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='html_select_file.cpp' object='webdar_static-html_select_file.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar_static-html_select_file.o `test -f 'html_select_file.cpp' || echo '$(srcdir)/'`html_select_file.cpp webdar_static-html_select_file.obj: html_select_file.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar_static-html_select_file.obj -MD -MP -MF $(DEPDIR)/webdar_static-html_select_file.Tpo -c -o webdar_static-html_select_file.obj `if test -f 'html_select_file.cpp'; then $(CYGPATH_W) 'html_select_file.cpp'; else $(CYGPATH_W) '$(srcdir)/html_select_file.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar_static-html_select_file.Tpo $(DEPDIR)/webdar_static-html_select_file.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='html_select_file.cpp' object='webdar_static-html_select_file.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar_static-html_select_file.obj `if test -f 'html_select_file.cpp'; then $(CYGPATH_W) 'html_select_file.cpp'; else $(CYGPATH_W) '$(srcdir)/html_select_file.cpp'; fi` webdar_static-html_popup.o: html_popup.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar_static-html_popup.o -MD -MP -MF $(DEPDIR)/webdar_static-html_popup.Tpo -c -o webdar_static-html_popup.o `test -f 'html_popup.cpp' || echo '$(srcdir)/'`html_popup.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar_static-html_popup.Tpo $(DEPDIR)/webdar_static-html_popup.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='html_popup.cpp' object='webdar_static-html_popup.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar_static-html_popup.o `test -f 'html_popup.cpp' || echo '$(srcdir)/'`html_popup.cpp webdar_static-html_popup.obj: html_popup.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar_static-html_popup.obj -MD -MP -MF $(DEPDIR)/webdar_static-html_popup.Tpo -c -o webdar_static-html_popup.obj `if test -f 'html_popup.cpp'; then $(CYGPATH_W) 'html_popup.cpp'; else $(CYGPATH_W) '$(srcdir)/html_popup.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar_static-html_popup.Tpo $(DEPDIR)/webdar_static-html_popup.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='html_popup.cpp' object='webdar_static-html_popup.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar_static-html_popup.obj `if test -f 'html_popup.cpp'; then $(CYGPATH_W) 'html_popup.cpp'; else $(CYGPATH_W) '$(srcdir)/html_popup.cpp'; fi` webdar_static-html_form_input_file.o: html_form_input_file.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar_static-html_form_input_file.o -MD -MP -MF $(DEPDIR)/webdar_static-html_form_input_file.Tpo -c -o webdar_static-html_form_input_file.o `test -f 'html_form_input_file.cpp' || echo '$(srcdir)/'`html_form_input_file.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar_static-html_form_input_file.Tpo $(DEPDIR)/webdar_static-html_form_input_file.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='html_form_input_file.cpp' object='webdar_static-html_form_input_file.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar_static-html_form_input_file.o `test -f 'html_form_input_file.cpp' || echo '$(srcdir)/'`html_form_input_file.cpp webdar_static-html_form_input_file.obj: html_form_input_file.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar_static-html_form_input_file.obj -MD -MP -MF $(DEPDIR)/webdar_static-html_form_input_file.Tpo -c -o webdar_static-html_form_input_file.obj `if test -f 'html_form_input_file.cpp'; then $(CYGPATH_W) 'html_form_input_file.cpp'; else $(CYGPATH_W) '$(srcdir)/html_form_input_file.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar_static-html_form_input_file.Tpo $(DEPDIR)/webdar_static-html_form_input_file.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='html_form_input_file.cpp' object='webdar_static-html_form_input_file.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar_static-html_form_input_file.obj `if test -f 'html_form_input_file.cpp'; then $(CYGPATH_W) 'html_form_input_file.cpp'; else $(CYGPATH_W) '$(srcdir)/html_form_input_file.cpp'; fi` webdar_static-jsoner.o: jsoner.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar_static-jsoner.o -MD -MP -MF $(DEPDIR)/webdar_static-jsoner.Tpo -c -o webdar_static-jsoner.o `test -f 'jsoner.cpp' || echo '$(srcdir)/'`jsoner.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar_static-jsoner.Tpo $(DEPDIR)/webdar_static-jsoner.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='jsoner.cpp' object='webdar_static-jsoner.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar_static-jsoner.o `test -f 'jsoner.cpp' || echo '$(srcdir)/'`jsoner.cpp webdar_static-jsoner.obj: jsoner.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar_static-jsoner.obj -MD -MP -MF $(DEPDIR)/webdar_static-jsoner.Tpo -c -o webdar_static-jsoner.obj `if test -f 'jsoner.cpp'; then $(CYGPATH_W) 'jsoner.cpp'; else $(CYGPATH_W) '$(srcdir)/jsoner.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar_static-jsoner.Tpo $(DEPDIR)/webdar_static-jsoner.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='jsoner.cpp' object='webdar_static-jsoner.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar_static-jsoner.obj `if test -f 'jsoner.cpp'; then $(CYGPATH_W) 'jsoner.cpp'; else $(CYGPATH_W) '$(srcdir)/jsoner.cpp'; fi` webdar_static-html_derouleur.o: html_derouleur.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar_static-html_derouleur.o -MD -MP -MF $(DEPDIR)/webdar_static-html_derouleur.Tpo -c -o webdar_static-html_derouleur.o `test -f 'html_derouleur.cpp' || echo '$(srcdir)/'`html_derouleur.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar_static-html_derouleur.Tpo $(DEPDIR)/webdar_static-html_derouleur.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='html_derouleur.cpp' object='webdar_static-html_derouleur.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar_static-html_derouleur.o `test -f 'html_derouleur.cpp' || echo '$(srcdir)/'`html_derouleur.cpp webdar_static-html_derouleur.obj: html_derouleur.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar_static-html_derouleur.obj -MD -MP -MF $(DEPDIR)/webdar_static-html_derouleur.Tpo -c -o webdar_static-html_derouleur.obj `if test -f 'html_derouleur.cpp'; then $(CYGPATH_W) 'html_derouleur.cpp'; else $(CYGPATH_W) '$(srcdir)/html_derouleur.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar_static-html_derouleur.Tpo $(DEPDIR)/webdar_static-html_derouleur.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='html_derouleur.cpp' object='webdar_static-html_derouleur.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar_static-html_derouleur.obj `if test -f 'html_derouleur.cpp'; then $(CYGPATH_W) 'html_derouleur.cpp'; else $(CYGPATH_W) '$(srcdir)/html_derouleur.cpp'; fi` webdar_static-html_entrepot.o: html_entrepot.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar_static-html_entrepot.o -MD -MP -MF $(DEPDIR)/webdar_static-html_entrepot.Tpo -c -o webdar_static-html_entrepot.o `test -f 'html_entrepot.cpp' || echo '$(srcdir)/'`html_entrepot.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar_static-html_entrepot.Tpo $(DEPDIR)/webdar_static-html_entrepot.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='html_entrepot.cpp' object='webdar_static-html_entrepot.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar_static-html_entrepot.o `test -f 'html_entrepot.cpp' || echo '$(srcdir)/'`html_entrepot.cpp webdar_static-html_entrepot.obj: html_entrepot.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar_static-html_entrepot.obj -MD -MP -MF $(DEPDIR)/webdar_static-html_entrepot.Tpo -c -o webdar_static-html_entrepot.obj `if test -f 'html_entrepot.cpp'; then $(CYGPATH_W) 'html_entrepot.cpp'; else $(CYGPATH_W) '$(srcdir)/html_entrepot.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar_static-html_entrepot.Tpo $(DEPDIR)/webdar_static-html_entrepot.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='html_entrepot.cpp' object='webdar_static-html_entrepot.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar_static-html_entrepot.obj `if test -f 'html_entrepot.cpp'; then $(CYGPATH_W) 'html_entrepot.cpp'; else $(CYGPATH_W) '$(srcdir)/html_entrepot.cpp'; fi` webdar_static-environment.o: environment.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar_static-environment.o -MD -MP -MF $(DEPDIR)/webdar_static-environment.Tpo -c -o webdar_static-environment.o `test -f 'environment.cpp' || echo '$(srcdir)/'`environment.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar_static-environment.Tpo $(DEPDIR)/webdar_static-environment.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='environment.cpp' object='webdar_static-environment.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar_static-environment.o `test -f 'environment.cpp' || echo '$(srcdir)/'`environment.cpp webdar_static-environment.obj: environment.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar_static-environment.obj -MD -MP -MF $(DEPDIR)/webdar_static-environment.Tpo -c -o webdar_static-environment.obj `if test -f 'environment.cpp'; then $(CYGPATH_W) 'environment.cpp'; else $(CYGPATH_W) '$(srcdir)/environment.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar_static-environment.Tpo $(DEPDIR)/webdar_static-environment.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='environment.cpp' object='webdar_static-environment.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar_static-environment.obj `if test -f 'environment.cpp'; then $(CYGPATH_W) 'environment.cpp'; else $(CYGPATH_W) '$(srcdir)/environment.cpp'; fi` webdar_static-html_libdar_running_popup.o: html_libdar_running_popup.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar_static-html_libdar_running_popup.o -MD -MP -MF $(DEPDIR)/webdar_static-html_libdar_running_popup.Tpo -c -o webdar_static-html_libdar_running_popup.o `test -f 'html_libdar_running_popup.cpp' || echo '$(srcdir)/'`html_libdar_running_popup.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar_static-html_libdar_running_popup.Tpo $(DEPDIR)/webdar_static-html_libdar_running_popup.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='html_libdar_running_popup.cpp' object='webdar_static-html_libdar_running_popup.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar_static-html_libdar_running_popup.o `test -f 'html_libdar_running_popup.cpp' || echo '$(srcdir)/'`html_libdar_running_popup.cpp webdar_static-html_libdar_running_popup.obj: html_libdar_running_popup.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar_static-html_libdar_running_popup.obj -MD -MP -MF $(DEPDIR)/webdar_static-html_libdar_running_popup.Tpo -c -o webdar_static-html_libdar_running_popup.obj `if test -f 'html_libdar_running_popup.cpp'; then $(CYGPATH_W) 'html_libdar_running_popup.cpp'; else $(CYGPATH_W) '$(srcdir)/html_libdar_running_popup.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar_static-html_libdar_running_popup.Tpo $(DEPDIR)/webdar_static-html_libdar_running_popup.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='html_libdar_running_popup.cpp' object='webdar_static-html_libdar_running_popup.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar_static-html_libdar_running_popup.obj `if test -f 'html_libdar_running_popup.cpp'; then $(CYGPATH_W) 'html_libdar_running_popup.cpp'; else $(CYGPATH_W) '$(srcdir)/html_libdar_running_popup.cpp'; fi` webdar_static-html_mask.o: html_mask.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar_static-html_mask.o -MD -MP -MF $(DEPDIR)/webdar_static-html_mask.Tpo -c -o webdar_static-html_mask.o `test -f 'html_mask.cpp' || echo '$(srcdir)/'`html_mask.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar_static-html_mask.Tpo $(DEPDIR)/webdar_static-html_mask.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='html_mask.cpp' object='webdar_static-html_mask.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar_static-html_mask.o `test -f 'html_mask.cpp' || echo '$(srcdir)/'`html_mask.cpp webdar_static-html_mask.obj: html_mask.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar_static-html_mask.obj -MD -MP -MF $(DEPDIR)/webdar_static-html_mask.Tpo -c -o webdar_static-html_mask.obj `if test -f 'html_mask.cpp'; then $(CYGPATH_W) 'html_mask.cpp'; else $(CYGPATH_W) '$(srcdir)/html_mask.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar_static-html_mask.Tpo $(DEPDIR)/webdar_static-html_mask.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='html_mask.cpp' object='webdar_static-html_mask.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar_static-html_mask.obj `if test -f 'html_mask.cpp'; then $(CYGPATH_W) 'html_mask.cpp'; else $(CYGPATH_W) '$(srcdir)/html_mask.cpp'; fi` webdar_static-html_form_mask_expression.o: html_form_mask_expression.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar_static-html_form_mask_expression.o -MD -MP -MF $(DEPDIR)/webdar_static-html_form_mask_expression.Tpo -c -o webdar_static-html_form_mask_expression.o `test -f 'html_form_mask_expression.cpp' || echo '$(srcdir)/'`html_form_mask_expression.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar_static-html_form_mask_expression.Tpo $(DEPDIR)/webdar_static-html_form_mask_expression.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='html_form_mask_expression.cpp' object='webdar_static-html_form_mask_expression.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar_static-html_form_mask_expression.o `test -f 'html_form_mask_expression.cpp' || echo '$(srcdir)/'`html_form_mask_expression.cpp webdar_static-html_form_mask_expression.obj: html_form_mask_expression.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar_static-html_form_mask_expression.obj -MD -MP -MF $(DEPDIR)/webdar_static-html_form_mask_expression.Tpo -c -o webdar_static-html_form_mask_expression.obj `if test -f 'html_form_mask_expression.cpp'; then $(CYGPATH_W) 'html_form_mask_expression.cpp'; else $(CYGPATH_W) '$(srcdir)/html_form_mask_expression.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar_static-html_form_mask_expression.Tpo $(DEPDIR)/webdar_static-html_form_mask_expression.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='html_form_mask_expression.cpp' object='webdar_static-html_form_mask_expression.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar_static-html_form_mask_expression.obj `if test -f 'html_form_mask_expression.cpp'; then $(CYGPATH_W) 'html_form_mask_expression.cpp'; else $(CYGPATH_W) '$(srcdir)/html_form_mask_expression.cpp'; fi` webdar_static-html_form_mask_bool.o: html_form_mask_bool.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar_static-html_form_mask_bool.o -MD -MP -MF $(DEPDIR)/webdar_static-html_form_mask_bool.Tpo -c -o webdar_static-html_form_mask_bool.o `test -f 'html_form_mask_bool.cpp' || echo '$(srcdir)/'`html_form_mask_bool.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar_static-html_form_mask_bool.Tpo $(DEPDIR)/webdar_static-html_form_mask_bool.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='html_form_mask_bool.cpp' object='webdar_static-html_form_mask_bool.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar_static-html_form_mask_bool.o `test -f 'html_form_mask_bool.cpp' || echo '$(srcdir)/'`html_form_mask_bool.cpp webdar_static-html_form_mask_bool.obj: html_form_mask_bool.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar_static-html_form_mask_bool.obj -MD -MP -MF $(DEPDIR)/webdar_static-html_form_mask_bool.Tpo -c -o webdar_static-html_form_mask_bool.obj `if test -f 'html_form_mask_bool.cpp'; then $(CYGPATH_W) 'html_form_mask_bool.cpp'; else $(CYGPATH_W) '$(srcdir)/html_form_mask_bool.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar_static-html_form_mask_bool.Tpo $(DEPDIR)/webdar_static-html_form_mask_bool.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='html_form_mask_bool.cpp' object='webdar_static-html_form_mask_bool.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar_static-html_form_mask_bool.obj `if test -f 'html_form_mask_bool.cpp'; then $(CYGPATH_W) 'html_form_mask_bool.cpp'; else $(CYGPATH_W) '$(srcdir)/html_form_mask_bool.cpp'; fi` webdar_static-html_mask_form_filename.o: html_mask_form_filename.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar_static-html_mask_form_filename.o -MD -MP -MF $(DEPDIR)/webdar_static-html_mask_form_filename.Tpo -c -o webdar_static-html_mask_form_filename.o `test -f 'html_mask_form_filename.cpp' || echo '$(srcdir)/'`html_mask_form_filename.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar_static-html_mask_form_filename.Tpo $(DEPDIR)/webdar_static-html_mask_form_filename.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='html_mask_form_filename.cpp' object='webdar_static-html_mask_form_filename.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar_static-html_mask_form_filename.o `test -f 'html_mask_form_filename.cpp' || echo '$(srcdir)/'`html_mask_form_filename.cpp webdar_static-html_mask_form_filename.obj: html_mask_form_filename.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar_static-html_mask_form_filename.obj -MD -MP -MF $(DEPDIR)/webdar_static-html_mask_form_filename.Tpo -c -o webdar_static-html_mask_form_filename.obj `if test -f 'html_mask_form_filename.cpp'; then $(CYGPATH_W) 'html_mask_form_filename.cpp'; else $(CYGPATH_W) '$(srcdir)/html_mask_form_filename.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar_static-html_mask_form_filename.Tpo $(DEPDIR)/webdar_static-html_mask_form_filename.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='html_mask_form_filename.cpp' object='webdar_static-html_mask_form_filename.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar_static-html_mask_form_filename.obj `if test -f 'html_mask_form_filename.cpp'; then $(CYGPATH_W) 'html_mask_form_filename.cpp'; else $(CYGPATH_W) '$(srcdir)/html_mask_form_filename.cpp'; fi` webdar_static-html_form_mask_subdir.o: html_form_mask_subdir.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar_static-html_form_mask_subdir.o -MD -MP -MF $(DEPDIR)/webdar_static-html_form_mask_subdir.Tpo -c -o webdar_static-html_form_mask_subdir.o `test -f 'html_form_mask_subdir.cpp' || echo '$(srcdir)/'`html_form_mask_subdir.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar_static-html_form_mask_subdir.Tpo $(DEPDIR)/webdar_static-html_form_mask_subdir.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='html_form_mask_subdir.cpp' object='webdar_static-html_form_mask_subdir.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar_static-html_form_mask_subdir.o `test -f 'html_form_mask_subdir.cpp' || echo '$(srcdir)/'`html_form_mask_subdir.cpp webdar_static-html_form_mask_subdir.obj: html_form_mask_subdir.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar_static-html_form_mask_subdir.obj -MD -MP -MF $(DEPDIR)/webdar_static-html_form_mask_subdir.Tpo -c -o webdar_static-html_form_mask_subdir.obj `if test -f 'html_form_mask_subdir.cpp'; then $(CYGPATH_W) 'html_form_mask_subdir.cpp'; else $(CYGPATH_W) '$(srcdir)/html_form_mask_subdir.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar_static-html_form_mask_subdir.Tpo $(DEPDIR)/webdar_static-html_form_mask_subdir.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='html_form_mask_subdir.cpp' object='webdar_static-html_form_mask_subdir.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar_static-html_form_mask_subdir.obj `if test -f 'html_form_mask_subdir.cpp'; then $(CYGPATH_W) 'html_form_mask_subdir.cpp'; else $(CYGPATH_W) '$(srcdir)/html_form_mask_subdir.cpp'; fi` webdar_static-html_mask_form_path.o: html_mask_form_path.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar_static-html_mask_form_path.o -MD -MP -MF $(DEPDIR)/webdar_static-html_mask_form_path.Tpo -c -o webdar_static-html_mask_form_path.o `test -f 'html_mask_form_path.cpp' || echo '$(srcdir)/'`html_mask_form_path.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar_static-html_mask_form_path.Tpo $(DEPDIR)/webdar_static-html_mask_form_path.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='html_mask_form_path.cpp' object='webdar_static-html_mask_form_path.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar_static-html_mask_form_path.o `test -f 'html_mask_form_path.cpp' || echo '$(srcdir)/'`html_mask_form_path.cpp webdar_static-html_mask_form_path.obj: html_mask_form_path.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar_static-html_mask_form_path.obj -MD -MP -MF $(DEPDIR)/webdar_static-html_mask_form_path.Tpo -c -o webdar_static-html_mask_form_path.obj `if test -f 'html_mask_form_path.cpp'; then $(CYGPATH_W) 'html_mask_form_path.cpp'; else $(CYGPATH_W) '$(srcdir)/html_mask_form_path.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar_static-html_mask_form_path.Tpo $(DEPDIR)/webdar_static-html_mask_form_path.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='html_mask_form_path.cpp' object='webdar_static-html_mask_form_path.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar_static-html_mask_form_path.obj `if test -f 'html_mask_form_path.cpp'; then $(CYGPATH_W) 'html_mask_form_path.cpp'; else $(CYGPATH_W) '$(srcdir)/html_mask_form_path.cpp'; fi` webdar_static-html_double_button.o: html_double_button.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar_static-html_double_button.o -MD -MP -MF $(DEPDIR)/webdar_static-html_double_button.Tpo -c -o webdar_static-html_double_button.o `test -f 'html_double_button.cpp' || echo '$(srcdir)/'`html_double_button.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar_static-html_double_button.Tpo $(DEPDIR)/webdar_static-html_double_button.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='html_double_button.cpp' object='webdar_static-html_double_button.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar_static-html_double_button.o `test -f 'html_double_button.cpp' || echo '$(srcdir)/'`html_double_button.cpp webdar_static-html_double_button.obj: html_double_button.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar_static-html_double_button.obj -MD -MP -MF $(DEPDIR)/webdar_static-html_double_button.Tpo -c -o webdar_static-html_double_button.obj `if test -f 'html_double_button.cpp'; then $(CYGPATH_W) 'html_double_button.cpp'; else $(CYGPATH_W) '$(srcdir)/html_double_button.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar_static-html_double_button.Tpo $(DEPDIR)/webdar_static-html_double_button.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='html_double_button.cpp' object='webdar_static-html_double_button.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar_static-html_double_button.obj `if test -f 'html_double_button.cpp'; then $(CYGPATH_W) 'html_double_button.cpp'; else $(CYGPATH_W) '$(srcdir)/html_double_button.cpp'; fi` webdar_static-html_demo.o: html_demo.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar_static-html_demo.o -MD -MP -MF $(DEPDIR)/webdar_static-html_demo.Tpo -c -o webdar_static-html_demo.o `test -f 'html_demo.cpp' || echo '$(srcdir)/'`html_demo.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar_static-html_demo.Tpo $(DEPDIR)/webdar_static-html_demo.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='html_demo.cpp' object='webdar_static-html_demo.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar_static-html_demo.o `test -f 'html_demo.cpp' || echo '$(srcdir)/'`html_demo.cpp webdar_static-html_demo.obj: html_demo.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar_static-html_demo.obj -MD -MP -MF $(DEPDIR)/webdar_static-html_demo.Tpo -c -o webdar_static-html_demo.obj `if test -f 'html_demo.cpp'; then $(CYGPATH_W) 'html_demo.cpp'; else $(CYGPATH_W) '$(srcdir)/html_demo.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar_static-html_demo.Tpo $(DEPDIR)/webdar_static-html_demo.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='html_demo.cpp' object='webdar_static-html_demo.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar_static-html_demo.obj `if test -f 'html_demo.cpp'; then $(CYGPATH_W) 'html_demo.cpp'; else $(CYGPATH_W) '$(srcdir)/html_demo.cpp'; fi` webdar_static-html_form_mask_file.o: html_form_mask_file.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar_static-html_form_mask_file.o -MD -MP -MF $(DEPDIR)/webdar_static-html_form_mask_file.Tpo -c -o webdar_static-html_form_mask_file.o `test -f 'html_form_mask_file.cpp' || echo '$(srcdir)/'`html_form_mask_file.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar_static-html_form_mask_file.Tpo $(DEPDIR)/webdar_static-html_form_mask_file.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='html_form_mask_file.cpp' object='webdar_static-html_form_mask_file.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar_static-html_form_mask_file.o `test -f 'html_form_mask_file.cpp' || echo '$(srcdir)/'`html_form_mask_file.cpp webdar_static-html_form_mask_file.obj: html_form_mask_file.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar_static-html_form_mask_file.obj -MD -MP -MF $(DEPDIR)/webdar_static-html_form_mask_file.Tpo -c -o webdar_static-html_form_mask_file.obj `if test -f 'html_form_mask_file.cpp'; then $(CYGPATH_W) 'html_form_mask_file.cpp'; else $(CYGPATH_W) '$(srcdir)/html_form_mask_file.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar_static-html_form_mask_file.Tpo $(DEPDIR)/webdar_static-html_form_mask_file.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='html_form_mask_file.cpp' object='webdar_static-html_form_mask_file.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar_static-html_form_mask_file.obj `if test -f 'html_form_mask_file.cpp'; then $(CYGPATH_W) 'html_form_mask_file.cpp'; else $(CYGPATH_W) '$(srcdir)/html_form_mask_file.cpp'; fi` webdar_static-html_archive_repair.o: html_archive_repair.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar_static-html_archive_repair.o -MD -MP -MF $(DEPDIR)/webdar_static-html_archive_repair.Tpo -c -o webdar_static-html_archive_repair.o `test -f 'html_archive_repair.cpp' || echo '$(srcdir)/'`html_archive_repair.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar_static-html_archive_repair.Tpo $(DEPDIR)/webdar_static-html_archive_repair.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='html_archive_repair.cpp' object='webdar_static-html_archive_repair.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar_static-html_archive_repair.o `test -f 'html_archive_repair.cpp' || echo '$(srcdir)/'`html_archive_repair.cpp webdar_static-html_archive_repair.obj: html_archive_repair.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar_static-html_archive_repair.obj -MD -MP -MF $(DEPDIR)/webdar_static-html_archive_repair.Tpo -c -o webdar_static-html_archive_repair.obj `if test -f 'html_archive_repair.cpp'; then $(CYGPATH_W) 'html_archive_repair.cpp'; else $(CYGPATH_W) '$(srcdir)/html_archive_repair.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar_static-html_archive_repair.Tpo $(DEPDIR)/webdar_static-html_archive_repair.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='html_archive_repair.cpp' object='webdar_static-html_archive_repair.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar_static-html_archive_repair.obj `if test -f 'html_archive_repair.cpp'; then $(CYGPATH_W) 'html_archive_repair.cpp'; else $(CYGPATH_W) '$(srcdir)/html_archive_repair.cpp'; fi` webdar_static-archive_repair.o: archive_repair.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar_static-archive_repair.o -MD -MP -MF $(DEPDIR)/webdar_static-archive_repair.Tpo -c -o webdar_static-archive_repair.o `test -f 'archive_repair.cpp' || echo '$(srcdir)/'`archive_repair.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar_static-archive_repair.Tpo $(DEPDIR)/webdar_static-archive_repair.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='archive_repair.cpp' object='webdar_static-archive_repair.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar_static-archive_repair.o `test -f 'archive_repair.cpp' || echo '$(srcdir)/'`archive_repair.cpp webdar_static-archive_repair.obj: archive_repair.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar_static-archive_repair.obj -MD -MP -MF $(DEPDIR)/webdar_static-archive_repair.Tpo -c -o webdar_static-archive_repair.obj `if test -f 'archive_repair.cpp'; then $(CYGPATH_W) 'archive_repair.cpp'; else $(CYGPATH_W) '$(srcdir)/archive_repair.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar_static-archive_repair.Tpo $(DEPDIR)/webdar_static-archive_repair.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='archive_repair.cpp' object='webdar_static-archive_repair.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar_static-archive_repair.obj `if test -f 'archive_repair.cpp'; then $(CYGPATH_W) 'archive_repair.cpp'; else $(CYGPATH_W) '$(srcdir)/archive_repair.cpp'; fi` webdar_static-html_archive_compare.o: html_archive_compare.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar_static-html_archive_compare.o -MD -MP -MF $(DEPDIR)/webdar_static-html_archive_compare.Tpo -c -o webdar_static-html_archive_compare.o `test -f 'html_archive_compare.cpp' || echo '$(srcdir)/'`html_archive_compare.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar_static-html_archive_compare.Tpo $(DEPDIR)/webdar_static-html_archive_compare.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='html_archive_compare.cpp' object='webdar_static-html_archive_compare.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar_static-html_archive_compare.o `test -f 'html_archive_compare.cpp' || echo '$(srcdir)/'`html_archive_compare.cpp webdar_static-html_archive_compare.obj: html_archive_compare.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar_static-html_archive_compare.obj -MD -MP -MF $(DEPDIR)/webdar_static-html_archive_compare.Tpo -c -o webdar_static-html_archive_compare.obj `if test -f 'html_archive_compare.cpp'; then $(CYGPATH_W) 'html_archive_compare.cpp'; else $(CYGPATH_W) '$(srcdir)/html_archive_compare.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar_static-html_archive_compare.Tpo $(DEPDIR)/webdar_static-html_archive_compare.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='html_archive_compare.cpp' object='webdar_static-html_archive_compare.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar_static-html_archive_compare.obj `if test -f 'html_archive_compare.cpp'; then $(CYGPATH_W) 'html_archive_compare.cpp'; else $(CYGPATH_W) '$(srcdir)/html_archive_compare.cpp'; fi` webdar_static-html_archive_extract.o: html_archive_extract.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar_static-html_archive_extract.o -MD -MP -MF $(DEPDIR)/webdar_static-html_archive_extract.Tpo -c -o webdar_static-html_archive_extract.o `test -f 'html_archive_extract.cpp' || echo '$(srcdir)/'`html_archive_extract.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar_static-html_archive_extract.Tpo $(DEPDIR)/webdar_static-html_archive_extract.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='html_archive_extract.cpp' object='webdar_static-html_archive_extract.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar_static-html_archive_extract.o `test -f 'html_archive_extract.cpp' || echo '$(srcdir)/'`html_archive_extract.cpp webdar_static-html_archive_extract.obj: html_archive_extract.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar_static-html_archive_extract.obj -MD -MP -MF $(DEPDIR)/webdar_static-html_archive_extract.Tpo -c -o webdar_static-html_archive_extract.obj `if test -f 'html_archive_extract.cpp'; then $(CYGPATH_W) 'html_archive_extract.cpp'; else $(CYGPATH_W) '$(srcdir)/html_archive_extract.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar_static-html_archive_extract.Tpo $(DEPDIR)/webdar_static-html_archive_extract.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='html_archive_extract.cpp' object='webdar_static-html_archive_extract.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar_static-html_archive_extract.obj `if test -f 'html_archive_extract.cpp'; then $(CYGPATH_W) 'html_archive_extract.cpp'; else $(CYGPATH_W) '$(srcdir)/html_archive_extract.cpp'; fi` webdar_static-html_options_repair.o: html_options_repair.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar_static-html_options_repair.o -MD -MP -MF $(DEPDIR)/webdar_static-html_options_repair.Tpo -c -o webdar_static-html_options_repair.o `test -f 'html_options_repair.cpp' || echo '$(srcdir)/'`html_options_repair.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar_static-html_options_repair.Tpo $(DEPDIR)/webdar_static-html_options_repair.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='html_options_repair.cpp' object='webdar_static-html_options_repair.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar_static-html_options_repair.o `test -f 'html_options_repair.cpp' || echo '$(srcdir)/'`html_options_repair.cpp webdar_static-html_options_repair.obj: html_options_repair.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar_static-html_options_repair.obj -MD -MP -MF $(DEPDIR)/webdar_static-html_options_repair.Tpo -c -o webdar_static-html_options_repair.obj `if test -f 'html_options_repair.cpp'; then $(CYGPATH_W) 'html_options_repair.cpp'; else $(CYGPATH_W) '$(srcdir)/html_options_repair.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar_static-html_options_repair.Tpo $(DEPDIR)/webdar_static-html_options_repair.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='html_options_repair.cpp' object='webdar_static-html_options_repair.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar_static-html_options_repair.obj `if test -f 'html_options_repair.cpp'; then $(CYGPATH_W) 'html_options_repair.cpp'; else $(CYGPATH_W) '$(srcdir)/html_options_repair.cpp'; fi` webdar_static-html_form_overwrite_constant_action.o: html_form_overwrite_constant_action.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar_static-html_form_overwrite_constant_action.o -MD -MP -MF $(DEPDIR)/webdar_static-html_form_overwrite_constant_action.Tpo -c -o webdar_static-html_form_overwrite_constant_action.o `test -f 'html_form_overwrite_constant_action.cpp' || echo '$(srcdir)/'`html_form_overwrite_constant_action.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar_static-html_form_overwrite_constant_action.Tpo $(DEPDIR)/webdar_static-html_form_overwrite_constant_action.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='html_form_overwrite_constant_action.cpp' object='webdar_static-html_form_overwrite_constant_action.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar_static-html_form_overwrite_constant_action.o `test -f 'html_form_overwrite_constant_action.cpp' || echo '$(srcdir)/'`html_form_overwrite_constant_action.cpp webdar_static-html_form_overwrite_constant_action.obj: html_form_overwrite_constant_action.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar_static-html_form_overwrite_constant_action.obj -MD -MP -MF $(DEPDIR)/webdar_static-html_form_overwrite_constant_action.Tpo -c -o webdar_static-html_form_overwrite_constant_action.obj `if test -f 'html_form_overwrite_constant_action.cpp'; then $(CYGPATH_W) 'html_form_overwrite_constant_action.cpp'; else $(CYGPATH_W) '$(srcdir)/html_form_overwrite_constant_action.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar_static-html_form_overwrite_constant_action.Tpo $(DEPDIR)/webdar_static-html_form_overwrite_constant_action.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='html_form_overwrite_constant_action.cpp' object='webdar_static-html_form_overwrite_constant_action.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar_static-html_form_overwrite_constant_action.obj `if test -f 'html_form_overwrite_constant_action.cpp'; then $(CYGPATH_W) 'html_form_overwrite_constant_action.cpp'; else $(CYGPATH_W) '$(srcdir)/html_form_overwrite_constant_action.cpp'; fi` webdar_static-html_form_overwrite_base_criterium.o: html_form_overwrite_base_criterium.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar_static-html_form_overwrite_base_criterium.o -MD -MP -MF $(DEPDIR)/webdar_static-html_form_overwrite_base_criterium.Tpo -c -o webdar_static-html_form_overwrite_base_criterium.o `test -f 'html_form_overwrite_base_criterium.cpp' || echo '$(srcdir)/'`html_form_overwrite_base_criterium.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar_static-html_form_overwrite_base_criterium.Tpo $(DEPDIR)/webdar_static-html_form_overwrite_base_criterium.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='html_form_overwrite_base_criterium.cpp' object='webdar_static-html_form_overwrite_base_criterium.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar_static-html_form_overwrite_base_criterium.o `test -f 'html_form_overwrite_base_criterium.cpp' || echo '$(srcdir)/'`html_form_overwrite_base_criterium.cpp webdar_static-html_form_overwrite_base_criterium.obj: html_form_overwrite_base_criterium.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar_static-html_form_overwrite_base_criterium.obj -MD -MP -MF $(DEPDIR)/webdar_static-html_form_overwrite_base_criterium.Tpo -c -o webdar_static-html_form_overwrite_base_criterium.obj `if test -f 'html_form_overwrite_base_criterium.cpp'; then $(CYGPATH_W) 'html_form_overwrite_base_criterium.cpp'; else $(CYGPATH_W) '$(srcdir)/html_form_overwrite_base_criterium.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar_static-html_form_overwrite_base_criterium.Tpo $(DEPDIR)/webdar_static-html_form_overwrite_base_criterium.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='html_form_overwrite_base_criterium.cpp' object='webdar_static-html_form_overwrite_base_criterium.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar_static-html_form_overwrite_base_criterium.obj `if test -f 'html_form_overwrite_base_criterium.cpp'; then $(CYGPATH_W) 'html_form_overwrite_base_criterium.cpp'; else $(CYGPATH_W) '$(srcdir)/html_form_overwrite_base_criterium.cpp'; fi` webdar_static-html_form_overwrite_combining_criterium.o: html_form_overwrite_combining_criterium.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar_static-html_form_overwrite_combining_criterium.o -MD -MP -MF $(DEPDIR)/webdar_static-html_form_overwrite_combining_criterium.Tpo -c -o webdar_static-html_form_overwrite_combining_criterium.o `test -f 'html_form_overwrite_combining_criterium.cpp' || echo '$(srcdir)/'`html_form_overwrite_combining_criterium.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar_static-html_form_overwrite_combining_criterium.Tpo $(DEPDIR)/webdar_static-html_form_overwrite_combining_criterium.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='html_form_overwrite_combining_criterium.cpp' object='webdar_static-html_form_overwrite_combining_criterium.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar_static-html_form_overwrite_combining_criterium.o `test -f 'html_form_overwrite_combining_criterium.cpp' || echo '$(srcdir)/'`html_form_overwrite_combining_criterium.cpp webdar_static-html_form_overwrite_combining_criterium.obj: html_form_overwrite_combining_criterium.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar_static-html_form_overwrite_combining_criterium.obj -MD -MP -MF $(DEPDIR)/webdar_static-html_form_overwrite_combining_criterium.Tpo -c -o webdar_static-html_form_overwrite_combining_criterium.obj `if test -f 'html_form_overwrite_combining_criterium.cpp'; then $(CYGPATH_W) 'html_form_overwrite_combining_criterium.cpp'; else $(CYGPATH_W) '$(srcdir)/html_form_overwrite_combining_criterium.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar_static-html_form_overwrite_combining_criterium.Tpo $(DEPDIR)/webdar_static-html_form_overwrite_combining_criterium.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='html_form_overwrite_combining_criterium.cpp' object='webdar_static-html_form_overwrite_combining_criterium.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar_static-html_form_overwrite_combining_criterium.obj `if test -f 'html_form_overwrite_combining_criterium.cpp'; then $(CYGPATH_W) 'html_form_overwrite_combining_criterium.cpp'; else $(CYGPATH_W) '$(srcdir)/html_form_overwrite_combining_criterium.cpp'; fi` webdar_static-html_form_overwrite_conditional_action.o: html_form_overwrite_conditional_action.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar_static-html_form_overwrite_conditional_action.o -MD -MP -MF $(DEPDIR)/webdar_static-html_form_overwrite_conditional_action.Tpo -c -o webdar_static-html_form_overwrite_conditional_action.o `test -f 'html_form_overwrite_conditional_action.cpp' || echo '$(srcdir)/'`html_form_overwrite_conditional_action.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar_static-html_form_overwrite_conditional_action.Tpo $(DEPDIR)/webdar_static-html_form_overwrite_conditional_action.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='html_form_overwrite_conditional_action.cpp' object='webdar_static-html_form_overwrite_conditional_action.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar_static-html_form_overwrite_conditional_action.o `test -f 'html_form_overwrite_conditional_action.cpp' || echo '$(srcdir)/'`html_form_overwrite_conditional_action.cpp webdar_static-html_form_overwrite_conditional_action.obj: html_form_overwrite_conditional_action.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar_static-html_form_overwrite_conditional_action.obj -MD -MP -MF $(DEPDIR)/webdar_static-html_form_overwrite_conditional_action.Tpo -c -o webdar_static-html_form_overwrite_conditional_action.obj `if test -f 'html_form_overwrite_conditional_action.cpp'; then $(CYGPATH_W) 'html_form_overwrite_conditional_action.cpp'; else $(CYGPATH_W) '$(srcdir)/html_form_overwrite_conditional_action.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar_static-html_form_overwrite_conditional_action.Tpo $(DEPDIR)/webdar_static-html_form_overwrite_conditional_action.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='html_form_overwrite_conditional_action.cpp' object='webdar_static-html_form_overwrite_conditional_action.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar_static-html_form_overwrite_conditional_action.obj `if test -f 'html_form_overwrite_conditional_action.cpp'; then $(CYGPATH_W) 'html_form_overwrite_conditional_action.cpp'; else $(CYGPATH_W) '$(srcdir)/html_form_overwrite_conditional_action.cpp'; fi` webdar_static-html_form_overwrite_action.o: html_form_overwrite_action.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar_static-html_form_overwrite_action.o -MD -MP -MF $(DEPDIR)/webdar_static-html_form_overwrite_action.Tpo -c -o webdar_static-html_form_overwrite_action.o `test -f 'html_form_overwrite_action.cpp' || echo '$(srcdir)/'`html_form_overwrite_action.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar_static-html_form_overwrite_action.Tpo $(DEPDIR)/webdar_static-html_form_overwrite_action.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='html_form_overwrite_action.cpp' object='webdar_static-html_form_overwrite_action.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar_static-html_form_overwrite_action.o `test -f 'html_form_overwrite_action.cpp' || echo '$(srcdir)/'`html_form_overwrite_action.cpp webdar_static-html_form_overwrite_action.obj: html_form_overwrite_action.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar_static-html_form_overwrite_action.obj -MD -MP -MF $(DEPDIR)/webdar_static-html_form_overwrite_action.Tpo -c -o webdar_static-html_form_overwrite_action.obj `if test -f 'html_form_overwrite_action.cpp'; then $(CYGPATH_W) 'html_form_overwrite_action.cpp'; else $(CYGPATH_W) '$(srcdir)/html_form_overwrite_action.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar_static-html_form_overwrite_action.Tpo $(DEPDIR)/webdar_static-html_form_overwrite_action.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='html_form_overwrite_action.cpp' object='webdar_static-html_form_overwrite_action.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar_static-html_form_overwrite_action.obj `if test -f 'html_form_overwrite_action.cpp'; then $(CYGPATH_W) 'html_form_overwrite_action.cpp'; else $(CYGPATH_W) '$(srcdir)/html_form_overwrite_action.cpp'; fi` webdar_static-html_hr.o: html_hr.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar_static-html_hr.o -MD -MP -MF $(DEPDIR)/webdar_static-html_hr.Tpo -c -o webdar_static-html_hr.o `test -f 'html_hr.cpp' || echo '$(srcdir)/'`html_hr.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar_static-html_hr.Tpo $(DEPDIR)/webdar_static-html_hr.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='html_hr.cpp' object='webdar_static-html_hr.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar_static-html_hr.o `test -f 'html_hr.cpp' || echo '$(srcdir)/'`html_hr.cpp webdar_static-html_hr.obj: html_hr.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar_static-html_hr.obj -MD -MP -MF $(DEPDIR)/webdar_static-html_hr.Tpo -c -o webdar_static-html_hr.obj `if test -f 'html_hr.cpp'; then $(CYGPATH_W) 'html_hr.cpp'; else $(CYGPATH_W) '$(srcdir)/html_hr.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar_static-html_hr.Tpo $(DEPDIR)/webdar_static-html_hr.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='html_hr.cpp' object='webdar_static-html_hr.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar_static-html_hr.obj `if test -f 'html_hr.cpp'; then $(CYGPATH_W) 'html_hr.cpp'; else $(CYGPATH_W) '$(srcdir)/html_hr.cpp'; fi` webdar_static-html_form_overwrite_chain_action.o: html_form_overwrite_chain_action.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar_static-html_form_overwrite_chain_action.o -MD -MP -MF $(DEPDIR)/webdar_static-html_form_overwrite_chain_action.Tpo -c -o webdar_static-html_form_overwrite_chain_action.o `test -f 'html_form_overwrite_chain_action.cpp' || echo '$(srcdir)/'`html_form_overwrite_chain_action.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar_static-html_form_overwrite_chain_action.Tpo $(DEPDIR)/webdar_static-html_form_overwrite_chain_action.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='html_form_overwrite_chain_action.cpp' object='webdar_static-html_form_overwrite_chain_action.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar_static-html_form_overwrite_chain_action.o `test -f 'html_form_overwrite_chain_action.cpp' || echo '$(srcdir)/'`html_form_overwrite_chain_action.cpp webdar_static-html_form_overwrite_chain_action.obj: html_form_overwrite_chain_action.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar_static-html_form_overwrite_chain_action.obj -MD -MP -MF $(DEPDIR)/webdar_static-html_form_overwrite_chain_action.Tpo -c -o webdar_static-html_form_overwrite_chain_action.obj `if test -f 'html_form_overwrite_chain_action.cpp'; then $(CYGPATH_W) 'html_form_overwrite_chain_action.cpp'; else $(CYGPATH_W) '$(srcdir)/html_form_overwrite_chain_action.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar_static-html_form_overwrite_chain_action.Tpo $(DEPDIR)/webdar_static-html_form_overwrite_chain_action.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='html_form_overwrite_chain_action.cpp' object='webdar_static-html_form_overwrite_chain_action.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar_static-html_form_overwrite_chain_action.obj `if test -f 'html_form_overwrite_chain_action.cpp'; then $(CYGPATH_W) 'html_form_overwrite_chain_action.cpp'; else $(CYGPATH_W) '$(srcdir)/html_form_overwrite_chain_action.cpp'; fi` webdar_static-html_form_dynamic_table.o: html_form_dynamic_table.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar_static-html_form_dynamic_table.o -MD -MP -MF $(DEPDIR)/webdar_static-html_form_dynamic_table.Tpo -c -o webdar_static-html_form_dynamic_table.o `test -f 'html_form_dynamic_table.cpp' || echo '$(srcdir)/'`html_form_dynamic_table.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar_static-html_form_dynamic_table.Tpo $(DEPDIR)/webdar_static-html_form_dynamic_table.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='html_form_dynamic_table.cpp' object='webdar_static-html_form_dynamic_table.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar_static-html_form_dynamic_table.o `test -f 'html_form_dynamic_table.cpp' || echo '$(srcdir)/'`html_form_dynamic_table.cpp webdar_static-html_form_dynamic_table.obj: html_form_dynamic_table.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar_static-html_form_dynamic_table.obj -MD -MP -MF $(DEPDIR)/webdar_static-html_form_dynamic_table.Tpo -c -o webdar_static-html_form_dynamic_table.obj `if test -f 'html_form_dynamic_table.cpp'; then $(CYGPATH_W) 'html_form_dynamic_table.cpp'; else $(CYGPATH_W) '$(srcdir)/html_form_dynamic_table.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar_static-html_form_dynamic_table.Tpo $(DEPDIR)/webdar_static-html_form_dynamic_table.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='html_form_dynamic_table.cpp' object='webdar_static-html_form_dynamic_table.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar_static-html_form_dynamic_table.obj `if test -f 'html_form_dynamic_table.cpp'; then $(CYGPATH_W) 'html_form_dynamic_table.cpp'; else $(CYGPATH_W) '$(srcdir)/html_form_dynamic_table.cpp'; fi` webdar_static-html_form_gnupg_list.o: html_form_gnupg_list.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar_static-html_form_gnupg_list.o -MD -MP -MF $(DEPDIR)/webdar_static-html_form_gnupg_list.Tpo -c -o webdar_static-html_form_gnupg_list.o `test -f 'html_form_gnupg_list.cpp' || echo '$(srcdir)/'`html_form_gnupg_list.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar_static-html_form_gnupg_list.Tpo $(DEPDIR)/webdar_static-html_form_gnupg_list.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='html_form_gnupg_list.cpp' object='webdar_static-html_form_gnupg_list.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar_static-html_form_gnupg_list.o `test -f 'html_form_gnupg_list.cpp' || echo '$(srcdir)/'`html_form_gnupg_list.cpp webdar_static-html_form_gnupg_list.obj: html_form_gnupg_list.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar_static-html_form_gnupg_list.obj -MD -MP -MF $(DEPDIR)/webdar_static-html_form_gnupg_list.Tpo -c -o webdar_static-html_form_gnupg_list.obj `if test -f 'html_form_gnupg_list.cpp'; then $(CYGPATH_W) 'html_form_gnupg_list.cpp'; else $(CYGPATH_W) '$(srcdir)/html_form_gnupg_list.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar_static-html_form_gnupg_list.Tpo $(DEPDIR)/webdar_static-html_form_gnupg_list.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='html_form_gnupg_list.cpp' object='webdar_static-html_form_gnupg_list.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar_static-html_form_gnupg_list.obj `if test -f 'html_form_gnupg_list.cpp'; then $(CYGPATH_W) 'html_form_gnupg_list.cpp'; else $(CYGPATH_W) '$(srcdir)/html_form_gnupg_list.cpp'; fi` webdar_static-html_form_overwrite_chain_cell.o: html_form_overwrite_chain_cell.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar_static-html_form_overwrite_chain_cell.o -MD -MP -MF $(DEPDIR)/webdar_static-html_form_overwrite_chain_cell.Tpo -c -o webdar_static-html_form_overwrite_chain_cell.o `test -f 'html_form_overwrite_chain_cell.cpp' || echo '$(srcdir)/'`html_form_overwrite_chain_cell.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar_static-html_form_overwrite_chain_cell.Tpo $(DEPDIR)/webdar_static-html_form_overwrite_chain_cell.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='html_form_overwrite_chain_cell.cpp' object='webdar_static-html_form_overwrite_chain_cell.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar_static-html_form_overwrite_chain_cell.o `test -f 'html_form_overwrite_chain_cell.cpp' || echo '$(srcdir)/'`html_form_overwrite_chain_cell.cpp webdar_static-html_form_overwrite_chain_cell.obj: html_form_overwrite_chain_cell.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar_static-html_form_overwrite_chain_cell.obj -MD -MP -MF $(DEPDIR)/webdar_static-html_form_overwrite_chain_cell.Tpo -c -o webdar_static-html_form_overwrite_chain_cell.obj `if test -f 'html_form_overwrite_chain_cell.cpp'; then $(CYGPATH_W) 'html_form_overwrite_chain_cell.cpp'; else $(CYGPATH_W) '$(srcdir)/html_form_overwrite_chain_cell.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar_static-html_form_overwrite_chain_cell.Tpo $(DEPDIR)/webdar_static-html_form_overwrite_chain_cell.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='html_form_overwrite_chain_cell.cpp' object='webdar_static-html_form_overwrite_chain_cell.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar_static-html_form_overwrite_chain_cell.obj `if test -f 'html_form_overwrite_chain_cell.cpp'; then $(CYGPATH_W) 'html_form_overwrite_chain_cell.cpp'; else $(CYGPATH_W) '$(srcdir)/html_form_overwrite_chain_cell.cpp'; fi` webdar_static-html_legend.o: html_legend.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar_static-html_legend.o -MD -MP -MF $(DEPDIR)/webdar_static-html_legend.Tpo -c -o webdar_static-html_legend.o `test -f 'html_legend.cpp' || echo '$(srcdir)/'`html_legend.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar_static-html_legend.Tpo $(DEPDIR)/webdar_static-html_legend.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='html_legend.cpp' object='webdar_static-html_legend.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar_static-html_legend.o `test -f 'html_legend.cpp' || echo '$(srcdir)/'`html_legend.cpp webdar_static-html_legend.obj: html_legend.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar_static-html_legend.obj -MD -MP -MF $(DEPDIR)/webdar_static-html_legend.Tpo -c -o webdar_static-html_legend.obj `if test -f 'html_legend.cpp'; then $(CYGPATH_W) 'html_legend.cpp'; else $(CYGPATH_W) '$(srcdir)/html_legend.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar_static-html_legend.Tpo $(DEPDIR)/webdar_static-html_legend.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='html_legend.cpp' object='webdar_static-html_legend.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar_static-html_legend.obj `if test -f 'html_legend.cpp'; then $(CYGPATH_W) 'html_legend.cpp'; else $(CYGPATH_W) '$(srcdir)/html_legend.cpp'; fi` webdar_static-html_form_same_fs.o: html_form_same_fs.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar_static-html_form_same_fs.o -MD -MP -MF $(DEPDIR)/webdar_static-html_form_same_fs.Tpo -c -o webdar_static-html_form_same_fs.o `test -f 'html_form_same_fs.cpp' || echo '$(srcdir)/'`html_form_same_fs.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar_static-html_form_same_fs.Tpo $(DEPDIR)/webdar_static-html_form_same_fs.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='html_form_same_fs.cpp' object='webdar_static-html_form_same_fs.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar_static-html_form_same_fs.o `test -f 'html_form_same_fs.cpp' || echo '$(srcdir)/'`html_form_same_fs.cpp webdar_static-html_form_same_fs.obj: html_form_same_fs.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar_static-html_form_same_fs.obj -MD -MP -MF $(DEPDIR)/webdar_static-html_form_same_fs.Tpo -c -o webdar_static-html_form_same_fs.obj `if test -f 'html_form_same_fs.cpp'; then $(CYGPATH_W) 'html_form_same_fs.cpp'; else $(CYGPATH_W) '$(srcdir)/html_form_same_fs.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar_static-html_form_same_fs.Tpo $(DEPDIR)/webdar_static-html_form_same_fs.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='html_form_same_fs.cpp' object='webdar_static-html_form_same_fs.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar_static-html_form_same_fs.obj `if test -f 'html_form_same_fs.cpp'; then $(CYGPATH_W) 'html_form_same_fs.cpp'; else $(CYGPATH_W) '$(srcdir)/html_form_same_fs.cpp'; fi` webdar_static-html_form_ignore_as_symlink.o: html_form_ignore_as_symlink.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar_static-html_form_ignore_as_symlink.o -MD -MP -MF $(DEPDIR)/webdar_static-html_form_ignore_as_symlink.Tpo -c -o webdar_static-html_form_ignore_as_symlink.o `test -f 'html_form_ignore_as_symlink.cpp' || echo '$(srcdir)/'`html_form_ignore_as_symlink.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar_static-html_form_ignore_as_symlink.Tpo $(DEPDIR)/webdar_static-html_form_ignore_as_symlink.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='html_form_ignore_as_symlink.cpp' object='webdar_static-html_form_ignore_as_symlink.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar_static-html_form_ignore_as_symlink.o `test -f 'html_form_ignore_as_symlink.cpp' || echo '$(srcdir)/'`html_form_ignore_as_symlink.cpp webdar_static-html_form_ignore_as_symlink.obj: html_form_ignore_as_symlink.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar_static-html_form_ignore_as_symlink.obj -MD -MP -MF $(DEPDIR)/webdar_static-html_form_ignore_as_symlink.Tpo -c -o webdar_static-html_form_ignore_as_symlink.obj `if test -f 'html_form_ignore_as_symlink.cpp'; then $(CYGPATH_W) 'html_form_ignore_as_symlink.cpp'; else $(CYGPATH_W) '$(srcdir)/html_form_ignore_as_symlink.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar_static-html_form_ignore_as_symlink.Tpo $(DEPDIR)/webdar_static-html_form_ignore_as_symlink.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='html_form_ignore_as_symlink.cpp' object='webdar_static-html_form_ignore_as_symlink.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar_static-html_form_ignore_as_symlink.obj `if test -f 'html_form_ignore_as_symlink.cpp'; then $(CYGPATH_W) 'html_form_ignore_as_symlink.cpp'; else $(CYGPATH_W) '$(srcdir)/html_form_ignore_as_symlink.cpp'; fi` webdar_static-html_form_sig_block_size.o: html_form_sig_block_size.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar_static-html_form_sig_block_size.o -MD -MP -MF $(DEPDIR)/webdar_static-html_form_sig_block_size.Tpo -c -o webdar_static-html_form_sig_block_size.o `test -f 'html_form_sig_block_size.cpp' || echo '$(srcdir)/'`html_form_sig_block_size.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar_static-html_form_sig_block_size.Tpo $(DEPDIR)/webdar_static-html_form_sig_block_size.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='html_form_sig_block_size.cpp' object='webdar_static-html_form_sig_block_size.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar_static-html_form_sig_block_size.o `test -f 'html_form_sig_block_size.cpp' || echo '$(srcdir)/'`html_form_sig_block_size.cpp webdar_static-html_form_sig_block_size.obj: html_form_sig_block_size.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar_static-html_form_sig_block_size.obj -MD -MP -MF $(DEPDIR)/webdar_static-html_form_sig_block_size.Tpo -c -o webdar_static-html_form_sig_block_size.obj `if test -f 'html_form_sig_block_size.cpp'; then $(CYGPATH_W) 'html_form_sig_block_size.cpp'; else $(CYGPATH_W) '$(srcdir)/html_form_sig_block_size.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar_static-html_form_sig_block_size.Tpo $(DEPDIR)/webdar_static-html_form_sig_block_size.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='html_form_sig_block_size.cpp' object='webdar_static-html_form_sig_block_size.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar_static-html_form_sig_block_size.obj `if test -f 'html_form_sig_block_size.cpp'; then $(CYGPATH_W) 'html_form_sig_block_size.cpp'; else $(CYGPATH_W) '$(srcdir)/html_form_sig_block_size.cpp'; fi` webdar_static-html_form_input_unit.o: html_form_input_unit.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar_static-html_form_input_unit.o -MD -MP -MF $(DEPDIR)/webdar_static-html_form_input_unit.Tpo -c -o webdar_static-html_form_input_unit.o `test -f 'html_form_input_unit.cpp' || echo '$(srcdir)/'`html_form_input_unit.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar_static-html_form_input_unit.Tpo $(DEPDIR)/webdar_static-html_form_input_unit.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='html_form_input_unit.cpp' object='webdar_static-html_form_input_unit.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar_static-html_form_input_unit.o `test -f 'html_form_input_unit.cpp' || echo '$(srcdir)/'`html_form_input_unit.cpp webdar_static-html_form_input_unit.obj: html_form_input_unit.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar_static-html_form_input_unit.obj -MD -MP -MF $(DEPDIR)/webdar_static-html_form_input_unit.Tpo -c -o webdar_static-html_form_input_unit.obj `if test -f 'html_form_input_unit.cpp'; then $(CYGPATH_W) 'html_form_input_unit.cpp'; else $(CYGPATH_W) '$(srcdir)/html_form_input_unit.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar_static-html_form_input_unit.Tpo $(DEPDIR)/webdar_static-html_form_input_unit.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='html_form_input_unit.cpp' object='webdar_static-html_form_input_unit.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar_static-html_form_input_unit.obj `if test -f 'html_form_input_unit.cpp'; then $(CYGPATH_W) 'html_form_input_unit.cpp'; else $(CYGPATH_W) '$(srcdir)/html_form_input_unit.cpp'; fi` webdar_static-html_compression_params.o: html_compression_params.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar_static-html_compression_params.o -MD -MP -MF $(DEPDIR)/webdar_static-html_compression_params.Tpo -c -o webdar_static-html_compression_params.o `test -f 'html_compression_params.cpp' || echo '$(srcdir)/'`html_compression_params.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar_static-html_compression_params.Tpo $(DEPDIR)/webdar_static-html_compression_params.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='html_compression_params.cpp' object='webdar_static-html_compression_params.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar_static-html_compression_params.o `test -f 'html_compression_params.cpp' || echo '$(srcdir)/'`html_compression_params.cpp webdar_static-html_compression_params.obj: html_compression_params.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar_static-html_compression_params.obj -MD -MP -MF $(DEPDIR)/webdar_static-html_compression_params.Tpo -c -o webdar_static-html_compression_params.obj `if test -f 'html_compression_params.cpp'; then $(CYGPATH_W) 'html_compression_params.cpp'; else $(CYGPATH_W) '$(srcdir)/html_compression_params.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar_static-html_compression_params.Tpo $(DEPDIR)/webdar_static-html_compression_params.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='html_compression_params.cpp' object='webdar_static-html_compression_params.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar_static-html_compression_params.obj `if test -f 'html_compression_params.cpp'; then $(CYGPATH_W) 'html_compression_params.cpp'; else $(CYGPATH_W) '$(srcdir)/html_compression_params.cpp'; fi` webdar_static-html_slicing.o: html_slicing.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar_static-html_slicing.o -MD -MP -MF $(DEPDIR)/webdar_static-html_slicing.Tpo -c -o webdar_static-html_slicing.o `test -f 'html_slicing.cpp' || echo '$(srcdir)/'`html_slicing.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar_static-html_slicing.Tpo $(DEPDIR)/webdar_static-html_slicing.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='html_slicing.cpp' object='webdar_static-html_slicing.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar_static-html_slicing.o `test -f 'html_slicing.cpp' || echo '$(srcdir)/'`html_slicing.cpp webdar_static-html_slicing.obj: html_slicing.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar_static-html_slicing.obj -MD -MP -MF $(DEPDIR)/webdar_static-html_slicing.Tpo -c -o webdar_static-html_slicing.obj `if test -f 'html_slicing.cpp'; then $(CYGPATH_W) 'html_slicing.cpp'; else $(CYGPATH_W) '$(srcdir)/html_slicing.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar_static-html_slicing.Tpo $(DEPDIR)/webdar_static-html_slicing.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='html_slicing.cpp' object='webdar_static-html_slicing.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar_static-html_slicing.obj `if test -f 'html_slicing.cpp'; then $(CYGPATH_W) 'html_slicing.cpp'; else $(CYGPATH_W) '$(srcdir)/html_slicing.cpp'; fi` webdar_static-html_ciphering.o: html_ciphering.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar_static-html_ciphering.o -MD -MP -MF $(DEPDIR)/webdar_static-html_ciphering.Tpo -c -o webdar_static-html_ciphering.o `test -f 'html_ciphering.cpp' || echo '$(srcdir)/'`html_ciphering.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar_static-html_ciphering.Tpo $(DEPDIR)/webdar_static-html_ciphering.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='html_ciphering.cpp' object='webdar_static-html_ciphering.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar_static-html_ciphering.o `test -f 'html_ciphering.cpp' || echo '$(srcdir)/'`html_ciphering.cpp webdar_static-html_ciphering.obj: html_ciphering.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar_static-html_ciphering.obj -MD -MP -MF $(DEPDIR)/webdar_static-html_ciphering.Tpo -c -o webdar_static-html_ciphering.obj `if test -f 'html_ciphering.cpp'; then $(CYGPATH_W) 'html_ciphering.cpp'; else $(CYGPATH_W) '$(srcdir)/html_ciphering.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar_static-html_ciphering.Tpo $(DEPDIR)/webdar_static-html_ciphering.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='html_ciphering.cpp' object='webdar_static-html_ciphering.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar_static-html_ciphering.obj `if test -f 'html_ciphering.cpp'; then $(CYGPATH_W) 'html_ciphering.cpp'; else $(CYGPATH_W) '$(srcdir)/html_ciphering.cpp'; fi` webdar_static-html_fsa_scope.o: html_fsa_scope.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar_static-html_fsa_scope.o -MD -MP -MF $(DEPDIR)/webdar_static-html_fsa_scope.Tpo -c -o webdar_static-html_fsa_scope.o `test -f 'html_fsa_scope.cpp' || echo '$(srcdir)/'`html_fsa_scope.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar_static-html_fsa_scope.Tpo $(DEPDIR)/webdar_static-html_fsa_scope.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='html_fsa_scope.cpp' object='webdar_static-html_fsa_scope.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar_static-html_fsa_scope.o `test -f 'html_fsa_scope.cpp' || echo '$(srcdir)/'`html_fsa_scope.cpp webdar_static-html_fsa_scope.obj: html_fsa_scope.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar_static-html_fsa_scope.obj -MD -MP -MF $(DEPDIR)/webdar_static-html_fsa_scope.Tpo -c -o webdar_static-html_fsa_scope.obj `if test -f 'html_fsa_scope.cpp'; then $(CYGPATH_W) 'html_fsa_scope.cpp'; else $(CYGPATH_W) '$(srcdir)/html_fsa_scope.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar_static-html_fsa_scope.Tpo $(DEPDIR)/webdar_static-html_fsa_scope.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='html_fsa_scope.cpp' object='webdar_static-html_fsa_scope.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar_static-html_fsa_scope.obj `if test -f 'html_fsa_scope.cpp'; then $(CYGPATH_W) 'html_fsa_scope.cpp'; else $(CYGPATH_W) '$(srcdir)/html_fsa_scope.cpp'; fi` webdar_static-html_disconnect.o: html_disconnect.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar_static-html_disconnect.o -MD -MP -MF $(DEPDIR)/webdar_static-html_disconnect.Tpo -c -o webdar_static-html_disconnect.o `test -f 'html_disconnect.cpp' || echo '$(srcdir)/'`html_disconnect.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar_static-html_disconnect.Tpo $(DEPDIR)/webdar_static-html_disconnect.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='html_disconnect.cpp' object='webdar_static-html_disconnect.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar_static-html_disconnect.o `test -f 'html_disconnect.cpp' || echo '$(srcdir)/'`html_disconnect.cpp webdar_static-html_disconnect.obj: html_disconnect.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar_static-html_disconnect.obj -MD -MP -MF $(DEPDIR)/webdar_static-html_disconnect.Tpo -c -o webdar_static-html_disconnect.obj `if test -f 'html_disconnect.cpp'; then $(CYGPATH_W) 'html_disconnect.cpp'; else $(CYGPATH_W) '$(srcdir)/html_disconnect.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar_static-html_disconnect.Tpo $(DEPDIR)/webdar_static-html_disconnect.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='html_disconnect.cpp' object='webdar_static-html_disconnect.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar_static-html_disconnect.obj `if test -f 'html_disconnect.cpp'; then $(CYGPATH_W) 'html_disconnect.cpp'; else $(CYGPATH_W) '$(srcdir)/html_disconnect.cpp'; fi` webdar_static-disconnected_page.o: disconnected_page.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar_static-disconnected_page.o -MD -MP -MF $(DEPDIR)/webdar_static-disconnected_page.Tpo -c -o webdar_static-disconnected_page.o `test -f 'disconnected_page.cpp' || echo '$(srcdir)/'`disconnected_page.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar_static-disconnected_page.Tpo $(DEPDIR)/webdar_static-disconnected_page.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='disconnected_page.cpp' object='webdar_static-disconnected_page.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar_static-disconnected_page.o `test -f 'disconnected_page.cpp' || echo '$(srcdir)/'`disconnected_page.cpp webdar_static-disconnected_page.obj: disconnected_page.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar_static-disconnected_page.obj -MD -MP -MF $(DEPDIR)/webdar_static-disconnected_page.Tpo -c -o webdar_static-disconnected_page.obj `if test -f 'disconnected_page.cpp'; then $(CYGPATH_W) 'disconnected_page.cpp'; else $(CYGPATH_W) '$(srcdir)/disconnected_page.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar_static-disconnected_page.Tpo $(DEPDIR)/webdar_static-disconnected_page.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='disconnected_page.cpp' object='webdar_static-disconnected_page.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar_static-disconnected_page.obj `if test -f 'disconnected_page.cpp'; then $(CYGPATH_W) 'disconnected_page.cpp'; else $(CYGPATH_W) '$(srcdir)/disconnected_page.cpp'; fi` webdar_static-server_pool.o: server_pool.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar_static-server_pool.o -MD -MP -MF $(DEPDIR)/webdar_static-server_pool.Tpo -c -o webdar_static-server_pool.o `test -f 'server_pool.cpp' || echo '$(srcdir)/'`server_pool.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar_static-server_pool.Tpo $(DEPDIR)/webdar_static-server_pool.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='server_pool.cpp' object='webdar_static-server_pool.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar_static-server_pool.o `test -f 'server_pool.cpp' || echo '$(srcdir)/'`server_pool.cpp webdar_static-server_pool.obj: server_pool.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar_static-server_pool.obj -MD -MP -MF $(DEPDIR)/webdar_static-server_pool.Tpo -c -o webdar_static-server_pool.obj `if test -f 'server_pool.cpp'; then $(CYGPATH_W) 'server_pool.cpp'; else $(CYGPATH_W) '$(srcdir)/server_pool.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar_static-server_pool.Tpo $(DEPDIR)/webdar_static-server_pool.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='server_pool.cpp' object='webdar_static-server_pool.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar_static-server_pool.obj `if test -f 'server_pool.cpp'; then $(CYGPATH_W) 'server_pool.cpp'; else $(CYGPATH_W) '$(srcdir)/server_pool.cpp'; fi` webdar_static-html_options_list.o: html_options_list.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar_static-html_options_list.o -MD -MP -MF $(DEPDIR)/webdar_static-html_options_list.Tpo -c -o webdar_static-html_options_list.o `test -f 'html_options_list.cpp' || echo '$(srcdir)/'`html_options_list.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar_static-html_options_list.Tpo $(DEPDIR)/webdar_static-html_options_list.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='html_options_list.cpp' object='webdar_static-html_options_list.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar_static-html_options_list.o `test -f 'html_options_list.cpp' || echo '$(srcdir)/'`html_options_list.cpp webdar_static-html_options_list.obj: html_options_list.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar_static-html_options_list.obj -MD -MP -MF $(DEPDIR)/webdar_static-html_options_list.Tpo -c -o webdar_static-html_options_list.obj `if test -f 'html_options_list.cpp'; then $(CYGPATH_W) 'html_options_list.cpp'; else $(CYGPATH_W) '$(srcdir)/html_options_list.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar_static-html_options_list.Tpo $(DEPDIR)/webdar_static-html_options_list.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='html_options_list.cpp' object='webdar_static-html_options_list.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar_static-html_options_list.obj `if test -f 'html_options_list.cpp'; then $(CYGPATH_W) 'html_options_list.cpp'; else $(CYGPATH_W) '$(srcdir)/html_options_list.cpp'; fi` webdar_static-html_summary_page.o: html_summary_page.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar_static-html_summary_page.o -MD -MP -MF $(DEPDIR)/webdar_static-html_summary_page.Tpo -c -o webdar_static-html_summary_page.o `test -f 'html_summary_page.cpp' || echo '$(srcdir)/'`html_summary_page.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar_static-html_summary_page.Tpo $(DEPDIR)/webdar_static-html_summary_page.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='html_summary_page.cpp' object='webdar_static-html_summary_page.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar_static-html_summary_page.o `test -f 'html_summary_page.cpp' || echo '$(srcdir)/'`html_summary_page.cpp webdar_static-html_summary_page.obj: html_summary_page.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar_static-html_summary_page.obj -MD -MP -MF $(DEPDIR)/webdar_static-html_summary_page.Tpo -c -o webdar_static-html_summary_page.obj `if test -f 'html_summary_page.cpp'; then $(CYGPATH_W) 'html_summary_page.cpp'; else $(CYGPATH_W) '$(srcdir)/html_summary_page.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar_static-html_summary_page.Tpo $(DEPDIR)/webdar_static-html_summary_page.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='html_summary_page.cpp' object='webdar_static-html_summary_page.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar_static-html_summary_page.obj `if test -f 'html_summary_page.cpp'; then $(CYGPATH_W) 'html_summary_page.cpp'; else $(CYGPATH_W) '$(srcdir)/html_summary_page.cpp'; fi` webdar_static-bibliotheque.o: bibliotheque.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar_static-bibliotheque.o -MD -MP -MF $(DEPDIR)/webdar_static-bibliotheque.Tpo -c -o webdar_static-bibliotheque.o `test -f 'bibliotheque.cpp' || echo '$(srcdir)/'`bibliotheque.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar_static-bibliotheque.Tpo $(DEPDIR)/webdar_static-bibliotheque.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='bibliotheque.cpp' object='webdar_static-bibliotheque.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar_static-bibliotheque.o `test -f 'bibliotheque.cpp' || echo '$(srcdir)/'`bibliotheque.cpp webdar_static-bibliotheque.obj: bibliotheque.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar_static-bibliotheque.obj -MD -MP -MF $(DEPDIR)/webdar_static-bibliotheque.Tpo -c -o webdar_static-bibliotheque.obj `if test -f 'bibliotheque.cpp'; then $(CYGPATH_W) 'bibliotheque.cpp'; else $(CYGPATH_W) '$(srcdir)/bibliotheque.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar_static-bibliotheque.Tpo $(DEPDIR)/webdar_static-bibliotheque.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='bibliotheque.cpp' object='webdar_static-bibliotheque.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar_static-bibliotheque.obj `if test -f 'bibliotheque.cpp'; then $(CYGPATH_W) 'bibliotheque.cpp'; else $(CYGPATH_W) '$(srcdir)/bibliotheque.cpp'; fi` webdar_static-html_bibliotheque.o: html_bibliotheque.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar_static-html_bibliotheque.o -MD -MP -MF $(DEPDIR)/webdar_static-html_bibliotheque.Tpo -c -o webdar_static-html_bibliotheque.o `test -f 'html_bibliotheque.cpp' || echo '$(srcdir)/'`html_bibliotheque.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar_static-html_bibliotheque.Tpo $(DEPDIR)/webdar_static-html_bibliotheque.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='html_bibliotheque.cpp' object='webdar_static-html_bibliotheque.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar_static-html_bibliotheque.o `test -f 'html_bibliotheque.cpp' || echo '$(srcdir)/'`html_bibliotheque.cpp webdar_static-html_bibliotheque.obj: html_bibliotheque.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar_static-html_bibliotheque.obj -MD -MP -MF $(DEPDIR)/webdar_static-html_bibliotheque.Tpo -c -o webdar_static-html_bibliotheque.obj `if test -f 'html_bibliotheque.cpp'; then $(CYGPATH_W) 'html_bibliotheque.cpp'; else $(CYGPATH_W) '$(srcdir)/html_bibliotheque.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar_static-html_bibliotheque.Tpo $(DEPDIR)/webdar_static-html_bibliotheque.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='html_bibliotheque.cpp' object='webdar_static-html_bibliotheque.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar_static-html_bibliotheque.obj `if test -f 'html_bibliotheque.cpp'; then $(CYGPATH_W) 'html_bibliotheque.cpp'; else $(CYGPATH_W) '$(srcdir)/html_bibliotheque.cpp'; fi` webdar_static-bibliotheque_subconfig.o: bibliotheque_subconfig.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar_static-bibliotheque_subconfig.o -MD -MP -MF $(DEPDIR)/webdar_static-bibliotheque_subconfig.Tpo -c -o webdar_static-bibliotheque_subconfig.o `test -f 'bibliotheque_subconfig.cpp' || echo '$(srcdir)/'`bibliotheque_subconfig.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar_static-bibliotheque_subconfig.Tpo $(DEPDIR)/webdar_static-bibliotheque_subconfig.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='bibliotheque_subconfig.cpp' object='webdar_static-bibliotheque_subconfig.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar_static-bibliotheque_subconfig.o `test -f 'bibliotheque_subconfig.cpp' || echo '$(srcdir)/'`bibliotheque_subconfig.cpp webdar_static-bibliotheque_subconfig.obj: bibliotheque_subconfig.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar_static-bibliotheque_subconfig.obj -MD -MP -MF $(DEPDIR)/webdar_static-bibliotheque_subconfig.Tpo -c -o webdar_static-bibliotheque_subconfig.obj `if test -f 'bibliotheque_subconfig.cpp'; then $(CYGPATH_W) 'bibliotheque_subconfig.cpp'; else $(CYGPATH_W) '$(srcdir)/bibliotheque_subconfig.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar_static-bibliotheque_subconfig.Tpo $(DEPDIR)/webdar_static-bibliotheque_subconfig.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='bibliotheque_subconfig.cpp' object='webdar_static-bibliotheque_subconfig.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar_static-bibliotheque_subconfig.obj `if test -f 'bibliotheque_subconfig.cpp'; then $(CYGPATH_W) 'bibliotheque_subconfig.cpp'; else $(CYGPATH_W) '$(srcdir)/bibliotheque_subconfig.cpp'; fi` webdar_static-guichet.o: guichet.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar_static-guichet.o -MD -MP -MF $(DEPDIR)/webdar_static-guichet.Tpo -c -o webdar_static-guichet.o `test -f 'guichet.cpp' || echo '$(srcdir)/'`guichet.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar_static-guichet.Tpo $(DEPDIR)/webdar_static-guichet.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='guichet.cpp' object='webdar_static-guichet.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar_static-guichet.o `test -f 'guichet.cpp' || echo '$(srcdir)/'`guichet.cpp webdar_static-guichet.obj: guichet.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar_static-guichet.obj -MD -MP -MF $(DEPDIR)/webdar_static-guichet.Tpo -c -o webdar_static-guichet.obj `if test -f 'guichet.cpp'; then $(CYGPATH_W) 'guichet.cpp'; else $(CYGPATH_W) '$(srcdir)/guichet.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar_static-guichet.Tpo $(DEPDIR)/webdar_static-guichet.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='guichet.cpp' object='webdar_static-guichet.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar_static-guichet.obj `if test -f 'guichet.cpp'; then $(CYGPATH_W) 'guichet.cpp'; else $(CYGPATH_W) '$(srcdir)/guichet.cpp'; fi` webdar_static-html_over_guichet.o: html_over_guichet.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar_static-html_over_guichet.o -MD -MP -MF $(DEPDIR)/webdar_static-html_over_guichet.Tpo -c -o webdar_static-html_over_guichet.o `test -f 'html_over_guichet.cpp' || echo '$(srcdir)/'`html_over_guichet.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar_static-html_over_guichet.Tpo $(DEPDIR)/webdar_static-html_over_guichet.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='html_over_guichet.cpp' object='webdar_static-html_over_guichet.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar_static-html_over_guichet.o `test -f 'html_over_guichet.cpp' || echo '$(srcdir)/'`html_over_guichet.cpp webdar_static-html_over_guichet.obj: html_over_guichet.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar_static-html_over_guichet.obj -MD -MP -MF $(DEPDIR)/webdar_static-html_over_guichet.Tpo -c -o webdar_static-html_over_guichet.obj `if test -f 'html_over_guichet.cpp'; then $(CYGPATH_W) 'html_over_guichet.cpp'; else $(CYGPATH_W) '$(srcdir)/html_over_guichet.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar_static-html_over_guichet.Tpo $(DEPDIR)/webdar_static-html_over_guichet.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='html_over_guichet.cpp' object='webdar_static-html_over_guichet.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar_static-html_over_guichet.obj `if test -f 'html_over_guichet.cpp'; then $(CYGPATH_W) 'html_over_guichet.cpp'; else $(CYGPATH_W) '$(srcdir)/html_over_guichet.cpp'; fi` webdar_static-html_void.o: html_void.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar_static-html_void.o -MD -MP -MF $(DEPDIR)/webdar_static-html_void.Tpo -c -o webdar_static-html_void.o `test -f 'html_void.cpp' || echo '$(srcdir)/'`html_void.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar_static-html_void.Tpo $(DEPDIR)/webdar_static-html_void.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='html_void.cpp' object='webdar_static-html_void.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar_static-html_void.o `test -f 'html_void.cpp' || echo '$(srcdir)/'`html_void.cpp webdar_static-html_void.obj: html_void.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar_static-html_void.obj -MD -MP -MF $(DEPDIR)/webdar_static-html_void.Tpo -c -o webdar_static-html_void.obj `if test -f 'html_void.cpp'; then $(CYGPATH_W) 'html_void.cpp'; else $(CYGPATH_W) '$(srcdir)/html_void.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar_static-html_void.Tpo $(DEPDIR)/webdar_static-html_void.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='html_void.cpp' object='webdar_static-html_void.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar_static-html_void.obj `if test -f 'html_void.cpp'; then $(CYGPATH_W) 'html_void.cpp'; else $(CYGPATH_W) '$(srcdir)/html_void.cpp'; fi` webdar_static-html_entrepot_landing.o: html_entrepot_landing.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar_static-html_entrepot_landing.o -MD -MP -MF $(DEPDIR)/webdar_static-html_entrepot_landing.Tpo -c -o webdar_static-html_entrepot_landing.o `test -f 'html_entrepot_landing.cpp' || echo '$(srcdir)/'`html_entrepot_landing.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar_static-html_entrepot_landing.Tpo $(DEPDIR)/webdar_static-html_entrepot_landing.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='html_entrepot_landing.cpp' object='webdar_static-html_entrepot_landing.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar_static-html_entrepot_landing.o `test -f 'html_entrepot_landing.cpp' || echo '$(srcdir)/'`html_entrepot_landing.cpp webdar_static-html_entrepot_landing.obj: html_entrepot_landing.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar_static-html_entrepot_landing.obj -MD -MP -MF $(DEPDIR)/webdar_static-html_entrepot_landing.Tpo -c -o webdar_static-html_entrepot_landing.obj `if test -f 'html_entrepot_landing.cpp'; then $(CYGPATH_W) 'html_entrepot_landing.cpp'; else $(CYGPATH_W) '$(srcdir)/html_entrepot_landing.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar_static-html_entrepot_landing.Tpo $(DEPDIR)/webdar_static-html_entrepot_landing.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='html_entrepot_landing.cpp' object='webdar_static-html_entrepot_landing.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar_static-html_entrepot_landing.obj `if test -f 'html_entrepot_landing.cpp'; then $(CYGPATH_W) 'html_entrepot_landing.cpp'; else $(CYGPATH_W) '$(srcdir)/html_entrepot_landing.cpp'; fi` webdar_static-html_span.o: html_span.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar_static-html_span.o -MD -MP -MF $(DEPDIR)/webdar_static-html_span.Tpo -c -o webdar_static-html_span.o `test -f 'html_span.cpp' || echo '$(srcdir)/'`html_span.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar_static-html_span.Tpo $(DEPDIR)/webdar_static-html_span.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='html_span.cpp' object='webdar_static-html_span.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar_static-html_span.o `test -f 'html_span.cpp' || echo '$(srcdir)/'`html_span.cpp webdar_static-html_span.obj: html_span.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar_static-html_span.obj -MD -MP -MF $(DEPDIR)/webdar_static-html_span.Tpo -c -o webdar_static-html_span.obj `if test -f 'html_span.cpp'; then $(CYGPATH_W) 'html_span.cpp'; else $(CYGPATH_W) '$(srcdir)/html_span.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar_static-html_span.Tpo $(DEPDIR)/webdar_static-html_span.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='html_span.cpp' object='webdar_static-html_span.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar_static-html_span.obj `if test -f 'html_span.cpp'; then $(CYGPATH_W) 'html_span.cpp'; else $(CYGPATH_W) '$(srcdir)/html_span.cpp'; fi` webdar_static-html_version.o: html_version.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar_static-html_version.o -MD -MP -MF $(DEPDIR)/webdar_static-html_version.Tpo -c -o webdar_static-html_version.o `test -f 'html_version.cpp' || echo '$(srcdir)/'`html_version.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar_static-html_version.Tpo $(DEPDIR)/webdar_static-html_version.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='html_version.cpp' object='webdar_static-html_version.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar_static-html_version.o `test -f 'html_version.cpp' || echo '$(srcdir)/'`html_version.cpp webdar_static-html_version.obj: html_version.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar_static-html_version.obj -MD -MP -MF $(DEPDIR)/webdar_static-html_version.Tpo -c -o webdar_static-html_version.obj `if test -f 'html_version.cpp'; then $(CYGPATH_W) 'html_version.cpp'; else $(CYGPATH_W) '$(srcdir)/html_version.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar_static-html_version.Tpo $(DEPDIR)/webdar_static-html_version.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='html_version.cpp' object='webdar_static-html_version.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar_static-html_version.obj `if test -f 'html_version.cpp'; then $(CYGPATH_W) 'html_version.cpp'; else $(CYGPATH_W) '$(srcdir)/html_version.cpp'; fi` webdar_static-html_label.o: html_label.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar_static-html_label.o -MD -MP -MF $(DEPDIR)/webdar_static-html_label.Tpo -c -o webdar_static-html_label.o `test -f 'html_label.cpp' || echo '$(srcdir)/'`html_label.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar_static-html_label.Tpo $(DEPDIR)/webdar_static-html_label.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='html_label.cpp' object='webdar_static-html_label.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar_static-html_label.o `test -f 'html_label.cpp' || echo '$(srcdir)/'`html_label.cpp webdar_static-html_label.obj: html_label.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar_static-html_label.obj -MD -MP -MF $(DEPDIR)/webdar_static-html_label.Tpo -c -o webdar_static-html_label.obj `if test -f 'html_label.cpp'; then $(CYGPATH_W) 'html_label.cpp'; else $(CYGPATH_W) '$(srcdir)/html_label.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar_static-html_label.Tpo $(DEPDIR)/webdar_static-html_label.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='html_label.cpp' object='webdar_static-html_label.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar_static-html_label.obj `if test -f 'html_label.cpp'; then $(CYGPATH_W) 'html_label.cpp'; else $(CYGPATH_W) '$(srcdir)/html_label.cpp'; fi` webdar_static-html_tooltip.o: html_tooltip.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar_static-html_tooltip.o -MD -MP -MF $(DEPDIR)/webdar_static-html_tooltip.Tpo -c -o webdar_static-html_tooltip.o `test -f 'html_tooltip.cpp' || echo '$(srcdir)/'`html_tooltip.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar_static-html_tooltip.Tpo $(DEPDIR)/webdar_static-html_tooltip.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='html_tooltip.cpp' object='webdar_static-html_tooltip.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar_static-html_tooltip.o `test -f 'html_tooltip.cpp' || echo '$(srcdir)/'`html_tooltip.cpp webdar_static-html_tooltip.obj: html_tooltip.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar_static-html_tooltip.obj -MD -MP -MF $(DEPDIR)/webdar_static-html_tooltip.Tpo -c -o webdar_static-html_tooltip.obj `if test -f 'html_tooltip.cpp'; then $(CYGPATH_W) 'html_tooltip.cpp'; else $(CYGPATH_W) '$(srcdir)/html_tooltip.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar_static-html_tooltip.Tpo $(DEPDIR)/webdar_static-html_tooltip.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='html_tooltip.cpp' object='webdar_static-html_tooltip.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar_static-html_tooltip.obj `if test -f 'html_tooltip.cpp'; then $(CYGPATH_W) 'html_tooltip.cpp'; else $(CYGPATH_W) '$(srcdir)/html_tooltip.cpp'; fi` webdar_static-webdar.o: webdar.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar_static-webdar.o -MD -MP -MF $(DEPDIR)/webdar_static-webdar.Tpo -c -o webdar_static-webdar.o `test -f 'webdar.cpp' || echo '$(srcdir)/'`webdar.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar_static-webdar.Tpo $(DEPDIR)/webdar_static-webdar.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='webdar.cpp' object='webdar_static-webdar.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar_static-webdar.o `test -f 'webdar.cpp' || echo '$(srcdir)/'`webdar.cpp webdar_static-webdar.obj: webdar.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT webdar_static-webdar.obj -MD -MP -MF $(DEPDIR)/webdar_static-webdar.Tpo -c -o webdar_static-webdar.obj `if test -f 'webdar.cpp'; then $(CYGPATH_W) 'webdar.cpp'; else $(CYGPATH_W) '$(srcdir)/webdar.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/webdar_static-webdar.Tpo $(DEPDIR)/webdar_static-webdar.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='webdar.cpp' object='webdar_static-webdar.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(webdar_static_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o webdar_static-webdar.obj `if test -f 'webdar.cpp'; then $(CYGPATH_W) 'webdar.cpp'; else $(CYGPATH_W) '$(srcdir)/webdar.cpp'; fi` mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-am TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-am CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-am cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) distdir-am distdir-am: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(PROGRAMS) $(DATA) all-local installdirs: for dir in "$(DESTDIR)$(bindir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-binPROGRAMS clean-generic clean-libtool clean-local \ clean-noinstPROGRAMS mostlyclean-am distclean: distclean-am -rm -f ./$(DEPDIR)/base64.Po -rm -f ./$(DEPDIR)/static_object_builder.Po -rm -f ./$(DEPDIR)/webdar-actor.Po -rm -f ./$(DEPDIR)/webdar-answer.Po -rm -f ./$(DEPDIR)/webdar-archive_compare.Po -rm -f ./$(DEPDIR)/webdar-archive_create.Po -rm -f ./$(DEPDIR)/webdar-archive_init_list.Po -rm -f ./$(DEPDIR)/webdar-archive_isolate.Po -rm -f ./$(DEPDIR)/webdar-archive_merge.Po -rm -f ./$(DEPDIR)/webdar-archive_repair.Po -rm -f ./$(DEPDIR)/webdar-archive_restore.Po -rm -f ./$(DEPDIR)/webdar-archive_test.Po -rm -f ./$(DEPDIR)/webdar-base64.Po -rm -f ./$(DEPDIR)/webdar-bibliotheque.Po -rm -f ./$(DEPDIR)/webdar-bibliotheque_subconfig.Po -rm -f ./$(DEPDIR)/webdar-body_builder.Po -rm -f ./$(DEPDIR)/webdar-central_report.Po -rm -f ./$(DEPDIR)/webdar-challenge.Po -rm -f ./$(DEPDIR)/webdar-chemin.Po -rm -f ./$(DEPDIR)/webdar-choose.Po -rm -f ./$(DEPDIR)/webdar-connexion.Po -rm -f ./$(DEPDIR)/webdar-css.Po -rm -f ./$(DEPDIR)/webdar-css_class.Po -rm -f ./$(DEPDIR)/webdar-css_class_group.Po -rm -f ./$(DEPDIR)/webdar-css_library.Po -rm -f ./$(DEPDIR)/webdar-css_property.Po -rm -f ./$(DEPDIR)/webdar-date.Po -rm -f ./$(DEPDIR)/webdar-disconnected_page.Po -rm -f ./$(DEPDIR)/webdar-environment.Po -rm -f ./$(DEPDIR)/webdar-error_page.Po -rm -f ./$(DEPDIR)/webdar-events.Po -rm -f ./$(DEPDIR)/webdar-exceptions.Po -rm -f ./$(DEPDIR)/webdar-guichet.Po -rm -f ./$(DEPDIR)/webdar-html_aiguille.Po -rm -f ./$(DEPDIR)/webdar-html_archive_compare.Po -rm -f ./$(DEPDIR)/webdar-html_archive_create.Po -rm -f ./$(DEPDIR)/webdar-html_archive_extract.Po -rm -f ./$(DEPDIR)/webdar-html_archive_isolate.Po -rm -f ./$(DEPDIR)/webdar-html_archive_merge.Po -rm -f ./$(DEPDIR)/webdar-html_archive_read.Po -rm -f ./$(DEPDIR)/webdar-html_archive_repair.Po -rm -f ./$(DEPDIR)/webdar-html_bibliotheque.Po -rm -f ./$(DEPDIR)/webdar-html_button.Po -rm -f ./$(DEPDIR)/webdar-html_ciphering.Po -rm -f ./$(DEPDIR)/webdar-html_comparison_fields.Po -rm -f ./$(DEPDIR)/webdar-html_compression.Po -rm -f ./$(DEPDIR)/webdar-html_compression_params.Po -rm -f ./$(DEPDIR)/webdar-html_crypto_algo.Po -rm -f ./$(DEPDIR)/webdar-html_datetime.Po -rm -f ./$(DEPDIR)/webdar-html_demo.Po -rm -f ./$(DEPDIR)/webdar-html_derouleur.Po -rm -f ./$(DEPDIR)/webdar-html_dir_tree.Po -rm -f ./$(DEPDIR)/webdar-html_disconnect.Po -rm -f ./$(DEPDIR)/webdar-html_div.Po -rm -f ./$(DEPDIR)/webdar-html_double_button.Po -rm -f ./$(DEPDIR)/webdar-html_entrepot.Po -rm -f ./$(DEPDIR)/webdar-html_entrepot_landing.Po -rm -f ./$(DEPDIR)/webdar-html_error.Po -rm -f ./$(DEPDIR)/webdar-html_focus.Po -rm -f ./$(DEPDIR)/webdar-html_form.Po -rm -f ./$(DEPDIR)/webdar-html_form_dynamic_table.Po -rm -f ./$(DEPDIR)/webdar-html_form_fieldset.Po -rm -f ./$(DEPDIR)/webdar-html_form_gnupg_list.Po -rm -f ./$(DEPDIR)/webdar-html_form_ignore_as_symlink.Po -rm -f ./$(DEPDIR)/webdar-html_form_input.Po -rm -f ./$(DEPDIR)/webdar-html_form_input_file.Po -rm -f ./$(DEPDIR)/webdar-html_form_input_unit.Po -rm -f ./$(DEPDIR)/webdar-html_form_mask_bool.Po -rm -f ./$(DEPDIR)/webdar-html_form_mask_expression.Po -rm -f ./$(DEPDIR)/webdar-html_form_mask_file.Po -rm -f ./$(DEPDIR)/webdar-html_form_mask_subdir.Po -rm -f ./$(DEPDIR)/webdar-html_form_overwrite_action.Po -rm -f ./$(DEPDIR)/webdar-html_form_overwrite_base_criterium.Po -rm -f ./$(DEPDIR)/webdar-html_form_overwrite_chain_action.Po -rm -f ./$(DEPDIR)/webdar-html_form_overwrite_chain_cell.Po -rm -f ./$(DEPDIR)/webdar-html_form_overwrite_combining_criterium.Po -rm -f ./$(DEPDIR)/webdar-html_form_overwrite_conditional_action.Po -rm -f ./$(DEPDIR)/webdar-html_form_overwrite_constant_action.Po -rm -f ./$(DEPDIR)/webdar-html_form_radio.Po -rm -f ./$(DEPDIR)/webdar-html_form_same_fs.Po -rm -f ./$(DEPDIR)/webdar-html_form_select.Po -rm -f ./$(DEPDIR)/webdar-html_form_sig_block_size.Po -rm -f ./$(DEPDIR)/webdar-html_fsa_scope.Po -rm -f ./$(DEPDIR)/webdar-html_hash_algo.Po -rm -f ./$(DEPDIR)/webdar-html_hr.Po -rm -f ./$(DEPDIR)/webdar-html_image.Po -rm -f ./$(DEPDIR)/webdar-html_label.Po -rm -f ./$(DEPDIR)/webdar-html_legend.Po -rm -f ./$(DEPDIR)/webdar-html_level.Po -rm -f ./$(DEPDIR)/webdar-html_libdar_running_page.Po -rm -f ./$(DEPDIR)/webdar-html_libdar_running_popup.Po -rm -f ./$(DEPDIR)/webdar-html_listing_page.Po -rm -f ./$(DEPDIR)/webdar-html_mask.Po -rm -f ./$(DEPDIR)/webdar-html_mask_form_filename.Po -rm -f ./$(DEPDIR)/webdar-html_mask_form_path.Po -rm -f ./$(DEPDIR)/webdar-html_menu.Po -rm -f ./$(DEPDIR)/webdar-html_options_compare.Po -rm -f ./$(DEPDIR)/webdar-html_options_create.Po -rm -f ./$(DEPDIR)/webdar-html_options_extract.Po -rm -f ./$(DEPDIR)/webdar-html_options_isolate.Po -rm -f ./$(DEPDIR)/webdar-html_options_list.Po -rm -f ./$(DEPDIR)/webdar-html_options_merge.Po -rm -f ./$(DEPDIR)/webdar-html_options_read.Po -rm -f ./$(DEPDIR)/webdar-html_options_repair.Po -rm -f ./$(DEPDIR)/webdar-html_options_test.Po -rm -f ./$(DEPDIR)/webdar-html_over_guichet.Po -rm -f ./$(DEPDIR)/webdar-html_page.Po -rm -f ./$(DEPDIR)/webdar-html_popup.Po -rm -f ./$(DEPDIR)/webdar-html_select_file.Po -rm -f ./$(DEPDIR)/webdar-html_size_unit.Po -rm -f ./$(DEPDIR)/webdar-html_slicing.Po -rm -f ./$(DEPDIR)/webdar-html_span.Po -rm -f ./$(DEPDIR)/webdar-html_static_url.Po -rm -f ./$(DEPDIR)/webdar-html_statistics.Po -rm -f ./$(DEPDIR)/webdar-html_summary_page.Po -rm -f ./$(DEPDIR)/webdar-html_table.Po -rm -f ./$(DEPDIR)/webdar-html_tabs.Po -rm -f ./$(DEPDIR)/webdar-html_text.Po -rm -f ./$(DEPDIR)/webdar-html_tooltip.Po -rm -f ./$(DEPDIR)/webdar-html_url.Po -rm -f ./$(DEPDIR)/webdar-html_version.Po -rm -f ./$(DEPDIR)/webdar-html_void.Po -rm -f ./$(DEPDIR)/webdar-html_web_user_interaction.Po -rm -f ./$(DEPDIR)/webdar-html_yes_no_box.Po -rm -f ./$(DEPDIR)/webdar-jsoner.Po -rm -f ./$(DEPDIR)/webdar-listener.Po -rm -f ./$(DEPDIR)/webdar-parser.Po -rm -f ./$(DEPDIR)/webdar-proto_connexion.Po -rm -f ./$(DEPDIR)/webdar-reference.Po -rm -f ./$(DEPDIR)/webdar-request.Po -rm -f ./$(DEPDIR)/webdar-saisie.Po -rm -f ./$(DEPDIR)/webdar-server.Po -rm -f ./$(DEPDIR)/webdar-server_pool.Po -rm -f ./$(DEPDIR)/webdar-session.Po -rm -f ./$(DEPDIR)/webdar-ssl_connexion.Po -rm -f ./$(DEPDIR)/webdar-ssl_context.Po -rm -f ./$(DEPDIR)/webdar-static_object.Po -rm -f ./$(DEPDIR)/webdar-static_object_library.Po -rm -f ./$(DEPDIR)/webdar-tokens.Po -rm -f ./$(DEPDIR)/webdar-uri.Po -rm -f ./$(DEPDIR)/webdar-user_interface.Po -rm -f ./$(DEPDIR)/webdar-web_user_interaction.Po -rm -f ./$(DEPDIR)/webdar-webdar.Po -rm -f ./$(DEPDIR)/webdar-webdar_css_style.Po -rm -f ./$(DEPDIR)/webdar-webdar_tools.Po -rm -f ./$(DEPDIR)/webdar_static-actor.Po -rm -f ./$(DEPDIR)/webdar_static-answer.Po -rm -f ./$(DEPDIR)/webdar_static-archive_compare.Po -rm -f ./$(DEPDIR)/webdar_static-archive_create.Po -rm -f ./$(DEPDIR)/webdar_static-archive_init_list.Po -rm -f ./$(DEPDIR)/webdar_static-archive_isolate.Po -rm -f ./$(DEPDIR)/webdar_static-archive_merge.Po -rm -f ./$(DEPDIR)/webdar_static-archive_repair.Po -rm -f ./$(DEPDIR)/webdar_static-archive_restore.Po -rm -f ./$(DEPDIR)/webdar_static-archive_test.Po -rm -f ./$(DEPDIR)/webdar_static-base64.Po -rm -f ./$(DEPDIR)/webdar_static-bibliotheque.Po -rm -f ./$(DEPDIR)/webdar_static-bibliotheque_subconfig.Po -rm -f ./$(DEPDIR)/webdar_static-body_builder.Po -rm -f ./$(DEPDIR)/webdar_static-central_report.Po -rm -f ./$(DEPDIR)/webdar_static-challenge.Po -rm -f ./$(DEPDIR)/webdar_static-chemin.Po -rm -f ./$(DEPDIR)/webdar_static-choose.Po -rm -f ./$(DEPDIR)/webdar_static-connexion.Po -rm -f ./$(DEPDIR)/webdar_static-css.Po -rm -f ./$(DEPDIR)/webdar_static-css_class.Po -rm -f ./$(DEPDIR)/webdar_static-css_class_group.Po -rm -f ./$(DEPDIR)/webdar_static-css_library.Po -rm -f ./$(DEPDIR)/webdar_static-css_property.Po -rm -f ./$(DEPDIR)/webdar_static-date.Po -rm -f ./$(DEPDIR)/webdar_static-disconnected_page.Po -rm -f ./$(DEPDIR)/webdar_static-environment.Po -rm -f ./$(DEPDIR)/webdar_static-error_page.Po -rm -f ./$(DEPDIR)/webdar_static-events.Po -rm -f ./$(DEPDIR)/webdar_static-exceptions.Po -rm -f ./$(DEPDIR)/webdar_static-guichet.Po -rm -f ./$(DEPDIR)/webdar_static-html_aiguille.Po -rm -f ./$(DEPDIR)/webdar_static-html_archive_compare.Po -rm -f ./$(DEPDIR)/webdar_static-html_archive_create.Po -rm -f ./$(DEPDIR)/webdar_static-html_archive_extract.Po -rm -f ./$(DEPDIR)/webdar_static-html_archive_isolate.Po -rm -f ./$(DEPDIR)/webdar_static-html_archive_merge.Po -rm -f ./$(DEPDIR)/webdar_static-html_archive_read.Po -rm -f ./$(DEPDIR)/webdar_static-html_archive_repair.Po -rm -f ./$(DEPDIR)/webdar_static-html_bibliotheque.Po -rm -f ./$(DEPDIR)/webdar_static-html_button.Po -rm -f ./$(DEPDIR)/webdar_static-html_ciphering.Po -rm -f ./$(DEPDIR)/webdar_static-html_comparison_fields.Po -rm -f ./$(DEPDIR)/webdar_static-html_compression.Po -rm -f ./$(DEPDIR)/webdar_static-html_compression_params.Po -rm -f ./$(DEPDIR)/webdar_static-html_crypto_algo.Po -rm -f ./$(DEPDIR)/webdar_static-html_datetime.Po -rm -f ./$(DEPDIR)/webdar_static-html_demo.Po -rm -f ./$(DEPDIR)/webdar_static-html_derouleur.Po -rm -f ./$(DEPDIR)/webdar_static-html_dir_tree.Po -rm -f ./$(DEPDIR)/webdar_static-html_disconnect.Po -rm -f ./$(DEPDIR)/webdar_static-html_div.Po -rm -f ./$(DEPDIR)/webdar_static-html_double_button.Po -rm -f ./$(DEPDIR)/webdar_static-html_entrepot.Po -rm -f ./$(DEPDIR)/webdar_static-html_entrepot_landing.Po -rm -f ./$(DEPDIR)/webdar_static-html_error.Po -rm -f ./$(DEPDIR)/webdar_static-html_focus.Po -rm -f ./$(DEPDIR)/webdar_static-html_form.Po -rm -f ./$(DEPDIR)/webdar_static-html_form_dynamic_table.Po -rm -f ./$(DEPDIR)/webdar_static-html_form_fieldset.Po -rm -f ./$(DEPDIR)/webdar_static-html_form_gnupg_list.Po -rm -f ./$(DEPDIR)/webdar_static-html_form_ignore_as_symlink.Po -rm -f ./$(DEPDIR)/webdar_static-html_form_input.Po -rm -f ./$(DEPDIR)/webdar_static-html_form_input_file.Po -rm -f ./$(DEPDIR)/webdar_static-html_form_input_unit.Po -rm -f ./$(DEPDIR)/webdar_static-html_form_mask_bool.Po -rm -f ./$(DEPDIR)/webdar_static-html_form_mask_expression.Po -rm -f ./$(DEPDIR)/webdar_static-html_form_mask_file.Po -rm -f ./$(DEPDIR)/webdar_static-html_form_mask_subdir.Po -rm -f ./$(DEPDIR)/webdar_static-html_form_overwrite_action.Po -rm -f ./$(DEPDIR)/webdar_static-html_form_overwrite_base_criterium.Po -rm -f ./$(DEPDIR)/webdar_static-html_form_overwrite_chain_action.Po -rm -f ./$(DEPDIR)/webdar_static-html_form_overwrite_chain_cell.Po -rm -f ./$(DEPDIR)/webdar_static-html_form_overwrite_combining_criterium.Po -rm -f ./$(DEPDIR)/webdar_static-html_form_overwrite_conditional_action.Po -rm -f ./$(DEPDIR)/webdar_static-html_form_overwrite_constant_action.Po -rm -f ./$(DEPDIR)/webdar_static-html_form_radio.Po -rm -f ./$(DEPDIR)/webdar_static-html_form_same_fs.Po -rm -f ./$(DEPDIR)/webdar_static-html_form_select.Po -rm -f ./$(DEPDIR)/webdar_static-html_form_sig_block_size.Po -rm -f ./$(DEPDIR)/webdar_static-html_fsa_scope.Po -rm -f ./$(DEPDIR)/webdar_static-html_hash_algo.Po -rm -f ./$(DEPDIR)/webdar_static-html_hr.Po -rm -f ./$(DEPDIR)/webdar_static-html_image.Po -rm -f ./$(DEPDIR)/webdar_static-html_label.Po -rm -f ./$(DEPDIR)/webdar_static-html_legend.Po -rm -f ./$(DEPDIR)/webdar_static-html_level.Po -rm -f ./$(DEPDIR)/webdar_static-html_libdar_running_page.Po -rm -f ./$(DEPDIR)/webdar_static-html_libdar_running_popup.Po -rm -f ./$(DEPDIR)/webdar_static-html_listing_page.Po -rm -f ./$(DEPDIR)/webdar_static-html_mask.Po -rm -f ./$(DEPDIR)/webdar_static-html_mask_form_filename.Po -rm -f ./$(DEPDIR)/webdar_static-html_mask_form_path.Po -rm -f ./$(DEPDIR)/webdar_static-html_menu.Po -rm -f ./$(DEPDIR)/webdar_static-html_options_compare.Po -rm -f ./$(DEPDIR)/webdar_static-html_options_create.Po -rm -f ./$(DEPDIR)/webdar_static-html_options_extract.Po -rm -f ./$(DEPDIR)/webdar_static-html_options_isolate.Po -rm -f ./$(DEPDIR)/webdar_static-html_options_list.Po -rm -f ./$(DEPDIR)/webdar_static-html_options_merge.Po -rm -f ./$(DEPDIR)/webdar_static-html_options_read.Po -rm -f ./$(DEPDIR)/webdar_static-html_options_repair.Po -rm -f ./$(DEPDIR)/webdar_static-html_options_test.Po -rm -f ./$(DEPDIR)/webdar_static-html_over_guichet.Po -rm -f ./$(DEPDIR)/webdar_static-html_page.Po -rm -f ./$(DEPDIR)/webdar_static-html_popup.Po -rm -f ./$(DEPDIR)/webdar_static-html_select_file.Po -rm -f ./$(DEPDIR)/webdar_static-html_size_unit.Po -rm -f ./$(DEPDIR)/webdar_static-html_slicing.Po -rm -f ./$(DEPDIR)/webdar_static-html_span.Po -rm -f ./$(DEPDIR)/webdar_static-html_static_url.Po -rm -f ./$(DEPDIR)/webdar_static-html_statistics.Po -rm -f ./$(DEPDIR)/webdar_static-html_summary_page.Po -rm -f ./$(DEPDIR)/webdar_static-html_table.Po -rm -f ./$(DEPDIR)/webdar_static-html_tabs.Po -rm -f ./$(DEPDIR)/webdar_static-html_text.Po -rm -f ./$(DEPDIR)/webdar_static-html_tooltip.Po -rm -f ./$(DEPDIR)/webdar_static-html_url.Po -rm -f ./$(DEPDIR)/webdar_static-html_version.Po -rm -f ./$(DEPDIR)/webdar_static-html_void.Po -rm -f ./$(DEPDIR)/webdar_static-html_web_user_interaction.Po -rm -f ./$(DEPDIR)/webdar_static-html_yes_no_box.Po -rm -f ./$(DEPDIR)/webdar_static-jsoner.Po -rm -f ./$(DEPDIR)/webdar_static-listener.Po -rm -f ./$(DEPDIR)/webdar_static-parser.Po -rm -f ./$(DEPDIR)/webdar_static-proto_connexion.Po -rm -f ./$(DEPDIR)/webdar_static-reference.Po -rm -f ./$(DEPDIR)/webdar_static-request.Po -rm -f ./$(DEPDIR)/webdar_static-saisie.Po -rm -f ./$(DEPDIR)/webdar_static-server.Po -rm -f ./$(DEPDIR)/webdar_static-server_pool.Po -rm -f ./$(DEPDIR)/webdar_static-session.Po -rm -f ./$(DEPDIR)/webdar_static-ssl_connexion.Po -rm -f ./$(DEPDIR)/webdar_static-ssl_context.Po -rm -f ./$(DEPDIR)/webdar_static-static_object.Po -rm -f ./$(DEPDIR)/webdar_static-static_object_library.Po -rm -f ./$(DEPDIR)/webdar_static-tokens.Po -rm -f ./$(DEPDIR)/webdar_static-uri.Po -rm -f ./$(DEPDIR)/webdar_static-user_interface.Po -rm -f ./$(DEPDIR)/webdar_static-web_user_interaction.Po -rm -f ./$(DEPDIR)/webdar_static-webdar.Po -rm -f ./$(DEPDIR)/webdar_static-webdar_css_style.Po -rm -f ./$(DEPDIR)/webdar_static-webdar_tools.Po -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-binPROGRAMS @$(NORMAL_INSTALL) $(MAKE) $(AM_MAKEFLAGS) install-exec-hook install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f ./$(DEPDIR)/base64.Po -rm -f ./$(DEPDIR)/static_object_builder.Po -rm -f ./$(DEPDIR)/webdar-actor.Po -rm -f ./$(DEPDIR)/webdar-answer.Po -rm -f ./$(DEPDIR)/webdar-archive_compare.Po -rm -f ./$(DEPDIR)/webdar-archive_create.Po -rm -f ./$(DEPDIR)/webdar-archive_init_list.Po -rm -f ./$(DEPDIR)/webdar-archive_isolate.Po -rm -f ./$(DEPDIR)/webdar-archive_merge.Po -rm -f ./$(DEPDIR)/webdar-archive_repair.Po -rm -f ./$(DEPDIR)/webdar-archive_restore.Po -rm -f ./$(DEPDIR)/webdar-archive_test.Po -rm -f ./$(DEPDIR)/webdar-base64.Po -rm -f ./$(DEPDIR)/webdar-bibliotheque.Po -rm -f ./$(DEPDIR)/webdar-bibliotheque_subconfig.Po -rm -f ./$(DEPDIR)/webdar-body_builder.Po -rm -f ./$(DEPDIR)/webdar-central_report.Po -rm -f ./$(DEPDIR)/webdar-challenge.Po -rm -f ./$(DEPDIR)/webdar-chemin.Po -rm -f ./$(DEPDIR)/webdar-choose.Po -rm -f ./$(DEPDIR)/webdar-connexion.Po -rm -f ./$(DEPDIR)/webdar-css.Po -rm -f ./$(DEPDIR)/webdar-css_class.Po -rm -f ./$(DEPDIR)/webdar-css_class_group.Po -rm -f ./$(DEPDIR)/webdar-css_library.Po -rm -f ./$(DEPDIR)/webdar-css_property.Po -rm -f ./$(DEPDIR)/webdar-date.Po -rm -f ./$(DEPDIR)/webdar-disconnected_page.Po -rm -f ./$(DEPDIR)/webdar-environment.Po -rm -f ./$(DEPDIR)/webdar-error_page.Po -rm -f ./$(DEPDIR)/webdar-events.Po -rm -f ./$(DEPDIR)/webdar-exceptions.Po -rm -f ./$(DEPDIR)/webdar-guichet.Po -rm -f ./$(DEPDIR)/webdar-html_aiguille.Po -rm -f ./$(DEPDIR)/webdar-html_archive_compare.Po -rm -f ./$(DEPDIR)/webdar-html_archive_create.Po -rm -f ./$(DEPDIR)/webdar-html_archive_extract.Po -rm -f ./$(DEPDIR)/webdar-html_archive_isolate.Po -rm -f ./$(DEPDIR)/webdar-html_archive_merge.Po -rm -f ./$(DEPDIR)/webdar-html_archive_read.Po -rm -f ./$(DEPDIR)/webdar-html_archive_repair.Po -rm -f ./$(DEPDIR)/webdar-html_bibliotheque.Po -rm -f ./$(DEPDIR)/webdar-html_button.Po -rm -f ./$(DEPDIR)/webdar-html_ciphering.Po -rm -f ./$(DEPDIR)/webdar-html_comparison_fields.Po -rm -f ./$(DEPDIR)/webdar-html_compression.Po -rm -f ./$(DEPDIR)/webdar-html_compression_params.Po -rm -f ./$(DEPDIR)/webdar-html_crypto_algo.Po -rm -f ./$(DEPDIR)/webdar-html_datetime.Po -rm -f ./$(DEPDIR)/webdar-html_demo.Po -rm -f ./$(DEPDIR)/webdar-html_derouleur.Po -rm -f ./$(DEPDIR)/webdar-html_dir_tree.Po -rm -f ./$(DEPDIR)/webdar-html_disconnect.Po -rm -f ./$(DEPDIR)/webdar-html_div.Po -rm -f ./$(DEPDIR)/webdar-html_double_button.Po -rm -f ./$(DEPDIR)/webdar-html_entrepot.Po -rm -f ./$(DEPDIR)/webdar-html_entrepot_landing.Po -rm -f ./$(DEPDIR)/webdar-html_error.Po -rm -f ./$(DEPDIR)/webdar-html_focus.Po -rm -f ./$(DEPDIR)/webdar-html_form.Po -rm -f ./$(DEPDIR)/webdar-html_form_dynamic_table.Po -rm -f ./$(DEPDIR)/webdar-html_form_fieldset.Po -rm -f ./$(DEPDIR)/webdar-html_form_gnupg_list.Po -rm -f ./$(DEPDIR)/webdar-html_form_ignore_as_symlink.Po -rm -f ./$(DEPDIR)/webdar-html_form_input.Po -rm -f ./$(DEPDIR)/webdar-html_form_input_file.Po -rm -f ./$(DEPDIR)/webdar-html_form_input_unit.Po -rm -f ./$(DEPDIR)/webdar-html_form_mask_bool.Po -rm -f ./$(DEPDIR)/webdar-html_form_mask_expression.Po -rm -f ./$(DEPDIR)/webdar-html_form_mask_file.Po -rm -f ./$(DEPDIR)/webdar-html_form_mask_subdir.Po -rm -f ./$(DEPDIR)/webdar-html_form_overwrite_action.Po -rm -f ./$(DEPDIR)/webdar-html_form_overwrite_base_criterium.Po -rm -f ./$(DEPDIR)/webdar-html_form_overwrite_chain_action.Po -rm -f ./$(DEPDIR)/webdar-html_form_overwrite_chain_cell.Po -rm -f ./$(DEPDIR)/webdar-html_form_overwrite_combining_criterium.Po -rm -f ./$(DEPDIR)/webdar-html_form_overwrite_conditional_action.Po -rm -f ./$(DEPDIR)/webdar-html_form_overwrite_constant_action.Po -rm -f ./$(DEPDIR)/webdar-html_form_radio.Po -rm -f ./$(DEPDIR)/webdar-html_form_same_fs.Po -rm -f ./$(DEPDIR)/webdar-html_form_select.Po -rm -f ./$(DEPDIR)/webdar-html_form_sig_block_size.Po -rm -f ./$(DEPDIR)/webdar-html_fsa_scope.Po -rm -f ./$(DEPDIR)/webdar-html_hash_algo.Po -rm -f ./$(DEPDIR)/webdar-html_hr.Po -rm -f ./$(DEPDIR)/webdar-html_image.Po -rm -f ./$(DEPDIR)/webdar-html_label.Po -rm -f ./$(DEPDIR)/webdar-html_legend.Po -rm -f ./$(DEPDIR)/webdar-html_level.Po -rm -f ./$(DEPDIR)/webdar-html_libdar_running_page.Po -rm -f ./$(DEPDIR)/webdar-html_libdar_running_popup.Po -rm -f ./$(DEPDIR)/webdar-html_listing_page.Po -rm -f ./$(DEPDIR)/webdar-html_mask.Po -rm -f ./$(DEPDIR)/webdar-html_mask_form_filename.Po -rm -f ./$(DEPDIR)/webdar-html_mask_form_path.Po -rm -f ./$(DEPDIR)/webdar-html_menu.Po -rm -f ./$(DEPDIR)/webdar-html_options_compare.Po -rm -f ./$(DEPDIR)/webdar-html_options_create.Po -rm -f ./$(DEPDIR)/webdar-html_options_extract.Po -rm -f ./$(DEPDIR)/webdar-html_options_isolate.Po -rm -f ./$(DEPDIR)/webdar-html_options_list.Po -rm -f ./$(DEPDIR)/webdar-html_options_merge.Po -rm -f ./$(DEPDIR)/webdar-html_options_read.Po -rm -f ./$(DEPDIR)/webdar-html_options_repair.Po -rm -f ./$(DEPDIR)/webdar-html_options_test.Po -rm -f ./$(DEPDIR)/webdar-html_over_guichet.Po -rm -f ./$(DEPDIR)/webdar-html_page.Po -rm -f ./$(DEPDIR)/webdar-html_popup.Po -rm -f ./$(DEPDIR)/webdar-html_select_file.Po -rm -f ./$(DEPDIR)/webdar-html_size_unit.Po -rm -f ./$(DEPDIR)/webdar-html_slicing.Po -rm -f ./$(DEPDIR)/webdar-html_span.Po -rm -f ./$(DEPDIR)/webdar-html_static_url.Po -rm -f ./$(DEPDIR)/webdar-html_statistics.Po -rm -f ./$(DEPDIR)/webdar-html_summary_page.Po -rm -f ./$(DEPDIR)/webdar-html_table.Po -rm -f ./$(DEPDIR)/webdar-html_tabs.Po -rm -f ./$(DEPDIR)/webdar-html_text.Po -rm -f ./$(DEPDIR)/webdar-html_tooltip.Po -rm -f ./$(DEPDIR)/webdar-html_url.Po -rm -f ./$(DEPDIR)/webdar-html_version.Po -rm -f ./$(DEPDIR)/webdar-html_void.Po -rm -f ./$(DEPDIR)/webdar-html_web_user_interaction.Po -rm -f ./$(DEPDIR)/webdar-html_yes_no_box.Po -rm -f ./$(DEPDIR)/webdar-jsoner.Po -rm -f ./$(DEPDIR)/webdar-listener.Po -rm -f ./$(DEPDIR)/webdar-parser.Po -rm -f ./$(DEPDIR)/webdar-proto_connexion.Po -rm -f ./$(DEPDIR)/webdar-reference.Po -rm -f ./$(DEPDIR)/webdar-request.Po -rm -f ./$(DEPDIR)/webdar-saisie.Po -rm -f ./$(DEPDIR)/webdar-server.Po -rm -f ./$(DEPDIR)/webdar-server_pool.Po -rm -f ./$(DEPDIR)/webdar-session.Po -rm -f ./$(DEPDIR)/webdar-ssl_connexion.Po -rm -f ./$(DEPDIR)/webdar-ssl_context.Po -rm -f ./$(DEPDIR)/webdar-static_object.Po -rm -f ./$(DEPDIR)/webdar-static_object_library.Po -rm -f ./$(DEPDIR)/webdar-tokens.Po -rm -f ./$(DEPDIR)/webdar-uri.Po -rm -f ./$(DEPDIR)/webdar-user_interface.Po -rm -f ./$(DEPDIR)/webdar-web_user_interaction.Po -rm -f ./$(DEPDIR)/webdar-webdar.Po -rm -f ./$(DEPDIR)/webdar-webdar_css_style.Po -rm -f ./$(DEPDIR)/webdar-webdar_tools.Po -rm -f ./$(DEPDIR)/webdar_static-actor.Po -rm -f ./$(DEPDIR)/webdar_static-answer.Po -rm -f ./$(DEPDIR)/webdar_static-archive_compare.Po -rm -f ./$(DEPDIR)/webdar_static-archive_create.Po -rm -f ./$(DEPDIR)/webdar_static-archive_init_list.Po -rm -f ./$(DEPDIR)/webdar_static-archive_isolate.Po -rm -f ./$(DEPDIR)/webdar_static-archive_merge.Po -rm -f ./$(DEPDIR)/webdar_static-archive_repair.Po -rm -f ./$(DEPDIR)/webdar_static-archive_restore.Po -rm -f ./$(DEPDIR)/webdar_static-archive_test.Po -rm -f ./$(DEPDIR)/webdar_static-base64.Po -rm -f ./$(DEPDIR)/webdar_static-bibliotheque.Po -rm -f ./$(DEPDIR)/webdar_static-bibliotheque_subconfig.Po -rm -f ./$(DEPDIR)/webdar_static-body_builder.Po -rm -f ./$(DEPDIR)/webdar_static-central_report.Po -rm -f ./$(DEPDIR)/webdar_static-challenge.Po -rm -f ./$(DEPDIR)/webdar_static-chemin.Po -rm -f ./$(DEPDIR)/webdar_static-choose.Po -rm -f ./$(DEPDIR)/webdar_static-connexion.Po -rm -f ./$(DEPDIR)/webdar_static-css.Po -rm -f ./$(DEPDIR)/webdar_static-css_class.Po -rm -f ./$(DEPDIR)/webdar_static-css_class_group.Po -rm -f ./$(DEPDIR)/webdar_static-css_library.Po -rm -f ./$(DEPDIR)/webdar_static-css_property.Po -rm -f ./$(DEPDIR)/webdar_static-date.Po -rm -f ./$(DEPDIR)/webdar_static-disconnected_page.Po -rm -f ./$(DEPDIR)/webdar_static-environment.Po -rm -f ./$(DEPDIR)/webdar_static-error_page.Po -rm -f ./$(DEPDIR)/webdar_static-events.Po -rm -f ./$(DEPDIR)/webdar_static-exceptions.Po -rm -f ./$(DEPDIR)/webdar_static-guichet.Po -rm -f ./$(DEPDIR)/webdar_static-html_aiguille.Po -rm -f ./$(DEPDIR)/webdar_static-html_archive_compare.Po -rm -f ./$(DEPDIR)/webdar_static-html_archive_create.Po -rm -f ./$(DEPDIR)/webdar_static-html_archive_extract.Po -rm -f ./$(DEPDIR)/webdar_static-html_archive_isolate.Po -rm -f ./$(DEPDIR)/webdar_static-html_archive_merge.Po -rm -f ./$(DEPDIR)/webdar_static-html_archive_read.Po -rm -f ./$(DEPDIR)/webdar_static-html_archive_repair.Po -rm -f ./$(DEPDIR)/webdar_static-html_bibliotheque.Po -rm -f ./$(DEPDIR)/webdar_static-html_button.Po -rm -f ./$(DEPDIR)/webdar_static-html_ciphering.Po -rm -f ./$(DEPDIR)/webdar_static-html_comparison_fields.Po -rm -f ./$(DEPDIR)/webdar_static-html_compression.Po -rm -f ./$(DEPDIR)/webdar_static-html_compression_params.Po -rm -f ./$(DEPDIR)/webdar_static-html_crypto_algo.Po -rm -f ./$(DEPDIR)/webdar_static-html_datetime.Po -rm -f ./$(DEPDIR)/webdar_static-html_demo.Po -rm -f ./$(DEPDIR)/webdar_static-html_derouleur.Po -rm -f ./$(DEPDIR)/webdar_static-html_dir_tree.Po -rm -f ./$(DEPDIR)/webdar_static-html_disconnect.Po -rm -f ./$(DEPDIR)/webdar_static-html_div.Po -rm -f ./$(DEPDIR)/webdar_static-html_double_button.Po -rm -f ./$(DEPDIR)/webdar_static-html_entrepot.Po -rm -f ./$(DEPDIR)/webdar_static-html_entrepot_landing.Po -rm -f ./$(DEPDIR)/webdar_static-html_error.Po -rm -f ./$(DEPDIR)/webdar_static-html_focus.Po -rm -f ./$(DEPDIR)/webdar_static-html_form.Po -rm -f ./$(DEPDIR)/webdar_static-html_form_dynamic_table.Po -rm -f ./$(DEPDIR)/webdar_static-html_form_fieldset.Po -rm -f ./$(DEPDIR)/webdar_static-html_form_gnupg_list.Po -rm -f ./$(DEPDIR)/webdar_static-html_form_ignore_as_symlink.Po -rm -f ./$(DEPDIR)/webdar_static-html_form_input.Po -rm -f ./$(DEPDIR)/webdar_static-html_form_input_file.Po -rm -f ./$(DEPDIR)/webdar_static-html_form_input_unit.Po -rm -f ./$(DEPDIR)/webdar_static-html_form_mask_bool.Po -rm -f ./$(DEPDIR)/webdar_static-html_form_mask_expression.Po -rm -f ./$(DEPDIR)/webdar_static-html_form_mask_file.Po -rm -f ./$(DEPDIR)/webdar_static-html_form_mask_subdir.Po -rm -f ./$(DEPDIR)/webdar_static-html_form_overwrite_action.Po -rm -f ./$(DEPDIR)/webdar_static-html_form_overwrite_base_criterium.Po -rm -f ./$(DEPDIR)/webdar_static-html_form_overwrite_chain_action.Po -rm -f ./$(DEPDIR)/webdar_static-html_form_overwrite_chain_cell.Po -rm -f ./$(DEPDIR)/webdar_static-html_form_overwrite_combining_criterium.Po -rm -f ./$(DEPDIR)/webdar_static-html_form_overwrite_conditional_action.Po -rm -f ./$(DEPDIR)/webdar_static-html_form_overwrite_constant_action.Po -rm -f ./$(DEPDIR)/webdar_static-html_form_radio.Po -rm -f ./$(DEPDIR)/webdar_static-html_form_same_fs.Po -rm -f ./$(DEPDIR)/webdar_static-html_form_select.Po -rm -f ./$(DEPDIR)/webdar_static-html_form_sig_block_size.Po -rm -f ./$(DEPDIR)/webdar_static-html_fsa_scope.Po -rm -f ./$(DEPDIR)/webdar_static-html_hash_algo.Po -rm -f ./$(DEPDIR)/webdar_static-html_hr.Po -rm -f ./$(DEPDIR)/webdar_static-html_image.Po -rm -f ./$(DEPDIR)/webdar_static-html_label.Po -rm -f ./$(DEPDIR)/webdar_static-html_legend.Po -rm -f ./$(DEPDIR)/webdar_static-html_level.Po -rm -f ./$(DEPDIR)/webdar_static-html_libdar_running_page.Po -rm -f ./$(DEPDIR)/webdar_static-html_libdar_running_popup.Po -rm -f ./$(DEPDIR)/webdar_static-html_listing_page.Po -rm -f ./$(DEPDIR)/webdar_static-html_mask.Po -rm -f ./$(DEPDIR)/webdar_static-html_mask_form_filename.Po -rm -f ./$(DEPDIR)/webdar_static-html_mask_form_path.Po -rm -f ./$(DEPDIR)/webdar_static-html_menu.Po -rm -f ./$(DEPDIR)/webdar_static-html_options_compare.Po -rm -f ./$(DEPDIR)/webdar_static-html_options_create.Po -rm -f ./$(DEPDIR)/webdar_static-html_options_extract.Po -rm -f ./$(DEPDIR)/webdar_static-html_options_isolate.Po -rm -f ./$(DEPDIR)/webdar_static-html_options_list.Po -rm -f ./$(DEPDIR)/webdar_static-html_options_merge.Po -rm -f ./$(DEPDIR)/webdar_static-html_options_read.Po -rm -f ./$(DEPDIR)/webdar_static-html_options_repair.Po -rm -f ./$(DEPDIR)/webdar_static-html_options_test.Po -rm -f ./$(DEPDIR)/webdar_static-html_over_guichet.Po -rm -f ./$(DEPDIR)/webdar_static-html_page.Po -rm -f ./$(DEPDIR)/webdar_static-html_popup.Po -rm -f ./$(DEPDIR)/webdar_static-html_select_file.Po -rm -f ./$(DEPDIR)/webdar_static-html_size_unit.Po -rm -f ./$(DEPDIR)/webdar_static-html_slicing.Po -rm -f ./$(DEPDIR)/webdar_static-html_span.Po -rm -f ./$(DEPDIR)/webdar_static-html_static_url.Po -rm -f ./$(DEPDIR)/webdar_static-html_statistics.Po -rm -f ./$(DEPDIR)/webdar_static-html_summary_page.Po -rm -f ./$(DEPDIR)/webdar_static-html_table.Po -rm -f ./$(DEPDIR)/webdar_static-html_tabs.Po -rm -f ./$(DEPDIR)/webdar_static-html_text.Po -rm -f ./$(DEPDIR)/webdar_static-html_tooltip.Po -rm -f ./$(DEPDIR)/webdar_static-html_url.Po -rm -f ./$(DEPDIR)/webdar_static-html_version.Po -rm -f ./$(DEPDIR)/webdar_static-html_void.Po -rm -f ./$(DEPDIR)/webdar_static-html_web_user_interaction.Po -rm -f ./$(DEPDIR)/webdar_static-html_yes_no_box.Po -rm -f ./$(DEPDIR)/webdar_static-jsoner.Po -rm -f ./$(DEPDIR)/webdar_static-listener.Po -rm -f ./$(DEPDIR)/webdar_static-parser.Po -rm -f ./$(DEPDIR)/webdar_static-proto_connexion.Po -rm -f ./$(DEPDIR)/webdar_static-reference.Po -rm -f ./$(DEPDIR)/webdar_static-request.Po -rm -f ./$(DEPDIR)/webdar_static-saisie.Po -rm -f ./$(DEPDIR)/webdar_static-server.Po -rm -f ./$(DEPDIR)/webdar_static-server_pool.Po -rm -f ./$(DEPDIR)/webdar_static-session.Po -rm -f ./$(DEPDIR)/webdar_static-ssl_connexion.Po -rm -f ./$(DEPDIR)/webdar_static-ssl_context.Po -rm -f ./$(DEPDIR)/webdar_static-static_object.Po -rm -f ./$(DEPDIR)/webdar_static-static_object_library.Po -rm -f ./$(DEPDIR)/webdar_static-tokens.Po -rm -f ./$(DEPDIR)/webdar_static-uri.Po -rm -f ./$(DEPDIR)/webdar_static-user_interface.Po -rm -f ./$(DEPDIR)/webdar_static-web_user_interaction.Po -rm -f ./$(DEPDIR)/webdar_static-webdar.Po -rm -f ./$(DEPDIR)/webdar_static-webdar_css_style.Po -rm -f ./$(DEPDIR)/webdar_static-webdar_tools.Po -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-binPROGRAMS .MAKE: install-am install-exec-am install-strip .PHONY: CTAGS GTAGS TAGS all all-am all-local am--depfiles check \ check-am clean clean-binPROGRAMS clean-generic clean-libtool \ clean-local clean-noinstPROGRAMS cscopelist-am ctags ctags-am \ distclean distclean-compile distclean-generic \ distclean-libtool distclean-tags distdir dvi dvi-am html \ html-am info info-am install install-am install-binPROGRAMS \ install-data install-data-am install-dvi install-dvi-am \ install-exec install-exec-am install-exec-hook install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-ps install-ps-am \ install-strip installcheck installcheck-am installdirs \ maintainer-clean maintainer-clean-generic mostlyclean \ mostlyclean-compile mostlyclean-generic mostlyclean-libtool \ pdf pdf-am ps ps-am tags tags-am uninstall uninstall-am \ uninstall-binPROGRAMS .PRECIOUS: Makefile # # conditionnal part UPX # @USE_UPX_TRUE@install-exec-hook : @USE_UPX_TRUE@ cd $(DESTDIR)$(bindir) ; $(UPX_PROG) -9 webdar$(EXEEXT) $(ALSO_BUILD_INST) || exit 0 @USE_UPX_FALSE@install-exec-hook: @USE_UPX_FALSE@ echo "no executable packing, UPX not found or disabled" static_object.sto: static_object_batch static_object_builder ../resources/favicon.jpg ../resources/webdar_logo.jpg ../resources/webdar_title_logo.jpg ./static_object_batch > static_object.sto no_compress_glob_expression_list.cpp: ../data/darrc sed -rnE -e 's/[ \t]*#.*//' -e 's/[ \t]*-Z[ \t]+(".*")/no_compress_glob_expressions.push_back(\1);/p' $< > $@ all-local: static_object.sto clean-local: rm -f static_object.sto no_compress_glob_expression_list.cpp static_object_library.cpp: static_object.sto html_bibliotheque.cpp: no_compress_glob_expression_list.cpp # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: ������������������������������������������������������������������������������������������������������������������������������������������webdar-1.0.0/src/events.hpp�������������������������������������������������������������������������0000644�0001750�0001752�00000005523�14773727252�012530� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*********************************************************************/ // webdar - a web server and interface program to libdar // Copyright (C) 2013-2025 Denis Corbin // // This file is part of Webdar // // Webdar is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // Webdar is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Webdar. If not, see <http://www.gnu.org/licenses/> // //---- // to contact the author: dar.linux@free.fr /*********************************************************************/ #ifndef EVENTS_HPP #define EVENTS_HPP // C system header files #include "my_config.h" extern "C" { } // C++ system header files #include <set> #include <map> #include <string> // webdar headers #include "reference.hpp" #include "actor.hpp" /// \file events.hpp defines the event class /// class events /// an events object contains a set of events, each one having a name. /// an actor object must register for one or more named event of a events object /// (or of different events objects) to be triggered by a named event from that object class events : public reference { public: events() = default; /// copy constructor /// \note all events are kept, but all registered /// actors to these events are not registered to the /// newly created object (see copy constructor of reference class) events(const events & ref); events(events && ref) noexcept(false) = default; events & operator = (const events & ref) = default; events & operator = (events && ref) noexcept(false); ~events() = default; /// record an actor for an given event void record_actor_on_event(actor *ptr, const std::string & name); protected: /// inherited from class reference virtual void broken_peering_from(reference *obj) override; /// add a new event for actors to register against void register_name(const std::string & name); /// remove an event and remove all actors that registed on it void unregister_name(const std::string & name); /// rename an event and keep all existing peering to this new event /// \note the new name must not already exist for that same object void rename_name(const std::string & old_name, const std::string & new_name); /// trigger a given event void act(const std::string & name); private: /// maps for each event, the list of pending actors std::map< std::string , std::list<actor *> > carte; }; #endif �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������webdar-1.0.0/src/error_page.hpp���������������������������������������������������������������������0000644�0001750�0001752�00000004514�14775733745�013356� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*********************************************************************/ // webdar - a web server and interface program to libdar // Copyright (C) 2013-2025 Denis Corbin // // This file is part of Webdar // // Webdar is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // Webdar is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Webdar. If not, see <http://www.gnu.org/licenses/> // //---- // to contact the author: dar.linux@free.fr /*********************************************************************/ #ifndef ERROR_PAGE_HPP #define ERROR_PAGE_HPP // C system header files #include "my_config.h" extern "C" { } // C++ system header files // webdar headers #include "responder.hpp" #include "html_page.hpp" #include "html_text.hpp" #include "html_static_url.hpp" #include "html_form_input.hpp" #include "html_form.hpp" #include "html_div.hpp" /// responds a error message to the user as defined by auxiliary methods class error_page : public responder { public: error_page(unsigned int status_code, const std::string & reason); void set_message_body(const std::string & message); void set_return_uri(const uri &ref, const std::string & label); /// inherited from responder answer give_answer(const request & req) override; protected: virtual void prefix_has_changed() override; private: unsigned int status; //< return code of the answer (seen by browser, rarely visibile by the user) std::string msg; //< returned reason of the answer ( seen by browser, rarely visibile by the user) // body_builder objects html_page page; //< html construction primitive html_div div; //< construction object containing both body and text html_text body; //< message displayed to the user set by 'set_message_body()' html_text text; //< used to build the return path in HTML body void field_delete(); }; #endif ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������webdar-1.0.0/src/html_archive_repair.hpp������������������������������������������������������������0000644�0001750�0001752�00000006773�14773727252�015243� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*********************************************************************/ // webdar - a web server and interface program to libdar // Copyright (C) 2013-2025 Denis Corbin // // This file is part of Webdar // // Webdar is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // Webdar is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Webdar. If not, see <http://www.gnu.org/licenses/> // //---- // to contact the author: dar.linux@free.fr /*********************************************************************/ #ifndef HTML_ARCHIVE_REPAIR_HPP #define HTML_ARCHIVE_REPAIR_HPP // C system header files #include "my_config.h" extern "C" { } // C++ system header files #include <libthreadar/libthreadar.hpp> // webdar headers #include "body_builder.hpp" #include "actor.hpp" #include "html_form_input_file.hpp" #include "html_form_fieldset.hpp" #include "html_derouleur.hpp" #include "html_options_repair.hpp" #include "html_libdar_running_popup.hpp" #include "guichet.hpp" /// html component used to collect repairing operation parameters from the user class html_archive_repair: public body_builder, public libthreadar::thread_signal, public actor { public: html_archive_repair(); html_archive_repair(const html_archive_repair & ref) = delete; html_archive_repair(html_archive_repair && ref) noexcept = delete; html_archive_repair & operator = (const html_archive_repair & ref) = delete; html_archive_repair & operator = (html_archive_repair && ref) noexcept = delete; ~html_archive_repair() { cancel(); join(); }; const std::string & get_archive_path() const { return repair_dest.get_value(); }; const std::string & get_archive_basename() const; libdar::archive_options_repair get_options(std::shared_ptr<html_web_user_interaction> dialog) const { return opt_repair->get_options(dialog); }; /// mandatory call to invoke ASAP after constructor void set_biblio(const std::shared_ptr<bibliotheque> & ptr); /// inherited from actor virtual void on_event(const std::string & event_name) override; protected: /// inherited from body_builder virtual std::string inherited_get_body_part(const chemin & path, const request & req) override; /// inherited from body_builder virtual void new_css_library_available() override; /// inherited from libthreadar::thread virtual void inherited_run() override; /// inherited from libthreadar::thread virtual void signaled_inherited_cancel() override; private: /// delay entrepot update when waiting inherited_get_body_part() to be executed /// \note not doing so may lead to run() this object which involves an html_web_user_interaction /// while the object is not visible and this this interaction component not operational bool need_entrepot_update; html_derouleur deroule; html_form_input_file repair_dest; html_form_input basename; html_form_fieldset repair_fs; html_form repair_form; html_libdar_running_popup repoxfer; guichet guichet_opt_repair; std::shared_ptr<html_options_repair> opt_repair; void update_entrepot(); }; #endif �����webdar-1.0.0/src/html_compression_params.hpp��������������������������������������������������������0000644�0001750�0001752�00000013153�15035505130�016127� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*********************************************************************/ // webdar - a web server and interface program to libdar // Copyright (C) 2013-2025 Denis Corbin // // This file is part of Webdar // // Webdar is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // Webdar is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Webdar. If not, see <http://www.gnu.org/licenses/> // //---- // to contact the author: dar.linux@free.fr /*********************************************************************/ #ifndef HTML_COMPRESSION_PARAMS_HPP #define HTML_COMPRESSION_PARAMS_HPP // C system header files #include "my_config.h" extern "C" { } // C++ system header files #include <dar/libdar.hpp> // webdar headers #include "body_builder.hpp" #include "actor.hpp" #include "events.hpp" #include "html_form.hpp" #include "html_form_fieldset.hpp" #include "html_form_select.hpp" #include "html_compression.hpp" #include "html_form_input.hpp" #include "html_form_input_unit.hpp" #include "webdar_tools.hpp" #include "jsoner.hpp" /// html component used for the user to define a compression algorithm class html_compression_params : public body_builder, public actor, public events, public jsoner { public: // change event static const std::string changed; html_compression_params(bool show_resave, bool show_min_size, bool show_keep_compressed); html_compression_params(const html_compression_params & ref) = delete; html_compression_params(html_compression_params && ref) noexcept = delete; html_compression_params & operator = (const html_compression_params & ref) = delete; html_compression_params & operator = (html_compression_params && ref) noexcept = delete; ~html_compression_params() = default; void set_compression_algo(libdar::compression val) { compression.set_value(val); }; void set_compression_level(int val) { compression_level.set_value_as_int(val); }; void set_min_compression_size(const libdar::infinint & val) { min_compr_size.set_value_as_infinint(val); }; void set_compression_block(const libdar::infinint & val) { compression_block.set_value_as_infinint(val); }; void set_keep_compressed(bool val) { keep_compressed.set_value_as_bool(val); }; libdar::compression get_compression_algo() const { return compression.get_value(); }; libdar::U_I get_compression_level() const { return compression_level.get_value_as_int(); }; libdar::infinint get_min_compression_size() const { return min_compr_size.get_value_as_infinint(); }; libdar::infinint get_compression_block() const { return compression_block.get_value_as_infinint(); }; bool get_resave_uncompressed() const { return never_resave_uncompressed.get_value_as_bool(); }; libdar::U_I get_num_threads() const { return compr_threads.get_value_as_int(); }; bool get_keep_compressed() const { return keep_compressed.get_value_as_bool(); }; /// inherited from jsoner virtual void load_json(const json & source) override; /// inherited from jsoner virtual json save_json() const override; /// inherited from jsoner virtual void clear_json() override; /// inherited from actor virtual void on_event(const std::string & event_name) override; /// set the object to webdar defaults void set_to_webdar_defaults(); /// inherited from body_builder virtual void bind_to_anchor(const std::string & val) override { form_compr.bind_to_anchor(val); }; protected: /// inherited from body_builder virtual std::string inherited_get_body_part(const chemin & path, const request & req) override; /// inherited from body_builder virtual void css_classes_have_changed() override; /// inherited from body_builder virtual void new_css_library_available() override; private: bool x_show_resave; bool x_show_min_size; bool ignore_events; html_form form_compr; html_form_fieldset compr_fs; html_compression compression; html_form_input compression_level; html_form_input_unit min_compr_size; html_form_input_unit compression_block; html_form_input never_resave_uncompressed; html_form_input compr_threads; html_form_input keep_compressed; static constexpr const unsigned int default_level = 9; static constexpr const unsigned int default_min_compr_size = 100; static constexpr const unsigned int default_compression_block = 240*1024; static constexpr const bool default_never_resave_uncompressed = false; static constexpr const unsigned int default_compr_threads = 4; static constexpr const bool default_keep_compressed = false; static constexpr const unsigned int format_version = 1; static constexpr const char* myclass_id = "html_compression_params"; static constexpr const char* jlabel_algo = "compr-algo"; static constexpr const char* jlabel_level = "compr-level"; static constexpr const char* jlabel_min_compr_sz = "min-compr-size"; static constexpr const char* jlabel_compr_block = "compr-block"; static constexpr const char* jlabel_never_resave_uncompr = "never-resave-uncompr"; static constexpr const char* jlabel_compr_threads = "compr-threads"; static constexpr const char* jlabel_keep_compr = "keep-compressed"; }; #endif ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������webdar-1.0.0/src/html_form_overwrite_combining_criterium.hpp����������������������������������������0000644�0001750�0001752�00000013026�14775734104�021422� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*********************************************************************/ // webdar - a web server and interface program to libdar // Copyright (C) 2013-2025 Denis Corbin // // This file is part of Webdar // // Webdar is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // Webdar is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Webdar. If not, see <http://www.gnu.org/licenses/> // //---- // to contact the author: dar.linux@free.fr /*********************************************************************/ #ifndef HTML_FORM_OVERWRITE_COMBINING_CRITERIUM_HPP #define HTML_FORM_OVERWRITE_COMBINING_CRITERIUM_HPP // C system header files #include "my_config.h" extern "C" { } // C++ system header files #include <list> #include <deque> #include <map> // webdar headers #include "html_overwrite_criterium.hpp" #include "actor.hpp" #include "body_builder.hpp" #include "html_table.hpp" #include "html_text.hpp" #include "html_form_input.hpp" #include "html_form_select.hpp" #include "html_form_fieldset.hpp" #include "html_form_dynamic_table.hpp" #include "jsoner.hpp" #include "events.hpp" #include "html_form_overwrite_base_criterium.hpp" /// html component used for to logically combine (and / or) criteria to setup an overwriting policies class html_form_overwrite_combining_criterium: public html_overwrite_criterium, public actor, public html_form_dynamic_table_object_provider, public jsoner, public events { public: static const std::string changed; html_form_overwrite_combining_criterium(const std::string & initial_mode = and_op); html_form_overwrite_combining_criterium(const html_form_overwrite_combining_criterium & ref) = delete; html_form_overwrite_combining_criterium(html_form_overwrite_combining_criterium && ref) noexcept = delete; html_form_overwrite_combining_criterium & operator = (const html_form_overwrite_combining_criterium & ref) = delete; html_form_overwrite_combining_criterium & operator = (html_form_overwrite_combining_criterium && ref) noexcept = delete; ~html_form_overwrite_combining_criterium() = default; /// set and/or combining mode /// \param[in] mode use and_op or or_op static fields defined below /// \note this call is to programmatically setup a component, normal way to setup is from Web user interaction void set_logic_mode(const std::string & mode) { crit_type.set_selected_id(mode); }; /// add a new base criterium to be logically combined with eventually existing ones /// \note this call is to programmatically setup a component, normal way to setup is from Web user interaction html_form_overwrite_base_criterium & add_base_criterium(); /// add a new subcombining criterium to be logically combined with eventually existing ones at this level /// \note this call is to programmatically setup a component, normal way to setup is from Web user interaction html_form_overwrite_combining_criterium & add_combining_criterium(); /// obtain the crit_combining_criterium object for libdar option virtual std::unique_ptr<libdar::criterium> get_overwriting_criterium() const override; /// inherited from jsoner virtual void load_json(const json & source) override; /// inherited from jsoner virtual json save_json() const override; /// inherited from jsoner virtual void clear_json() override; /// inherited from actor virtual void on_event(const std::string & event_name) override; /// inherited from html_form_dynamic_table_object_provider virtual std::unique_ptr<body_builder> provide_object_of_type(unsigned int num, const std::string & context, std::string & changed_event) const override; // mask_type values static constexpr const char* and_op = "and_op"; static constexpr const char* or_op = "or_op"; protected: /// inherited from body_builder from html_overwrite_criterium virtual std::string inherited_get_body_part(const chemin & path, const request & req) override; /// inherited from body_builder virtual void new_css_library_available() override; private: std::string current_bool_mode; ///< current value combination mode std::string bool_op_to_name(const std::string & op); void update_table_content_logic(bool unconditionally); html_form_fieldset fs; ///< wrapps all html form components of this class html_form_select crit_type; ///< either "and" or "or" combination html_form_dynamic_table table; ///< adopts all member we are combining // events static constexpr const char* bool_changed_event = "bool_changed"; static constexpr const char* new_crit_to_add = "new_mask"; // adder values static constexpr const char* base_crit = "base_crit"; static constexpr const char* combining_crit = "combining_crit"; static std::string invert_logic(const std::string & logic); static constexpr const unsigned int format_version = 1; static constexpr const char* myclass_id = "html_form_overwrite_combining_criterium"; static constexpr const char* jlabel_logic = "logic"; static constexpr const char* jlabel_contents = "contents"; }; #endif ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������webdar-1.0.0/src/session.hpp������������������������������������������������������������������������0000644�0001750�0001752�00000015655�14773727252�012716� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*********************************************************************/ // webdar - a web server and interface program to libdar // Copyright (C) 2013-2025 Denis Corbin // // This file is part of Webdar // // Webdar is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // Webdar is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Webdar. If not, see <http://www.gnu.org/licenses/> // //---- // to contact the author: dar.linux@free.fr /*********************************************************************/ #ifndef SESSION_HPP #define SESSION_HPP // C system header files #include "my_config.h" extern "C" { } // C++ system header files #include <list> #include <libthreadar/libthreadar.hpp> // webdar headers #include "user_interface.hpp" #include "events.hpp" /// class session - holds information about a current user session /// a session object stores a work under progress. An internal mutex /// avoids two concurrent requests to be addressed to a given session object. /// Session object are sollicitated by 'server' objects which only /// live during a TCP connection. Several TCP connection can connect /// over time or in concurrency to a given session object but only /// one at a time handles (acquired) the session. class session : public responder, public actor { public: ////////////////////////// // Object methods // // constructor of the class are left private intentionnaly // this class provides a global table of session one can create, lookup or destroy objects in/from this table /// inherited from responder virtual answer give_answer(const request & req) override; bool has_waiting_threads() const { return lock_wui.waiting_thread(); }; bool has_working_server() const { return lock_wui.working_thread(); }; std::string get_session_ID() const { return session_ID; }; bool disconnection_requested() const; /// inherited from actor parent class virtual void on_event(const std::string & event_name) override; ////////////////////////// // Class types and methods // /// summary information of sessions struct session_summary { std::string owner; ///< owner of the session std::string session_ID; ///< session ID: internal unique identifier for that session std::string session_name; ///< name given to that session by the user bool locked; ///< whether the session is locked by a thread bool libdar_running; ///< whether a libdar job is running bool closing; ///< whether the session is pending for closure void clear() { owner = session_ID = ""; locked = libdar_running = closing = false; }; }; /// create a new session /// \param[in] user the user to whom the session will belong /// \param[in] initial if set to true a session is created only if no other session exist for that user /// \param[in] req the request from the browser /// \param[out] ret the answer to send back to the browser, this field is set only when this method returns true /// \return true if a session has been created and only then provides the answer (ret) to return to the brownser /// \note this call may throw exception (if for example the session max number has been reached) static bool create_new_session(const std::string & user, bool initial, const request & req, answer & ret); /// get the total number of session (all users) static unsigned int get_num_session(); /// get the total number of session for the given user static unsigned int get_num_session(const std::string & user); /// get a summary description vector of all sessions static std::vector<session_summary> get_summary(); /// get a summary description of the session known from its session_ID static bool get_session_info(const std::string & session_ID, session_summary & val); /// acquire the excusivity use of the session which id is provided in argument /// \param[in] session_ID the session to acquire /// \return a pointer to the session object (it is managed by the session class, this not to be released) /// \note the call is blocking until the session is acquired. It has to be released when requested by other /// thread and/or when no more needed (browser disconnectio...) using the release_session() method static session *acquire_session(const std::string & session_ID); /// release the session object from our exclusive access /// \note the session object should not be used anymore /// after that and before a new call to acquire_session() /// nor should the object be deleted/freed. static void release_session(session *sess); /// request the session to be tear down and destoyed /// \return true if the session exists and has been flagged for destruction, false if the session /// is unknown. static bool close_session(const std::string & session_ID); private: /// constructor session(); session(const session & ref) = delete; session(session && ref) = delete; session & operator = (const session & ref) = delete; session & operator = (session && ref) = delete; ~session() = default; /// set session_ID void set_session_id(const std::string & sessid); libthreadar::semaphore lock_wui; ///< required locking before accessing wui field user_interface wui; ///< object containing the current Web User Interface; is managed by the session object and should never be nullptr pthread_t tid; ///< tid of the thread that acquired lock on that object std::string session_ID; ///< session_ID info (duplicated info to avoid table lookup and mutex lock) void check_caller() const; //< test whether the caller has properly acquired the lock on this object //////////////// // static types, variables and methods // /// wraps a session object with some metadata struct table { std::string owner; ///< to whom the session is session *reference; ///< object reference unsigned int ref_given; ///< number of time the reference to that object has been given bool closing; ///< if true the reference must not be given any longer void clear() { owner = ""; reference = nullptr; ref_given = 0; closing = false; }; }; static libthreadar::mutex lock_running; ///< control access to runnng_session static table static std::map<std::string, table> running_session; ///< list of existing sessions static session_summary publish(std::map<std::string, table>::iterator it); static std::string create_new(const std::string & owner); /// returns the session_ID of the newly created session }; #endif �����������������������������������������������������������������������������������webdar-1.0.0/src/html_url.cpp�����������������������������������������������������������������������0000644�0001750�0001752�00000004002�15044720532�013016� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*********************************************************************/ // webdar - a web server and interface program to libdar // Copyright (C) 2013-2025 Denis Corbin // // This file is part of Webdar // // Webdar is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // Webdar is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Webdar. If not, see <http://www.gnu.org/licenses/> // //---- // to contact the author: dar.linux@free.fr /*********************************************************************/ // C system header files #include "my_config.h" extern "C" { } // C++ system header files // webdar headers // #include "html_url.hpp" using namespace std; html_url::html_url(const string & url): x_url(url), download(false), filename(""), blank(false) { } void html_url::change_url(const string & newurl) { if(x_url != newurl) { x_url = newurl; my_body_part_has_changed(); } } string html_url::inherited_get_body_part(const chemin & path, const request & req) { string ret = "<a"; string x_class = get_css_classes(); string dnl = download ? " download": ""; string anchor = anchor_to.empty() ? "" : string("#") + anchor_to; if(! filename.empty() && download) dnl = dnl + "=\"" + filename + "\""; if(! x_class.empty()) ret += " " + x_class; ret += " href=\"" + x_url + anchor + "\"" + dnl; if(blank) ret += " target=\"_blank\""; ret += + ">"; ret += get_body_part_from_all_children(path, req); ret += "</a>\n"; if(!get_no_CR()) ret += "\n"; return ret; } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������webdar-1.0.0/src/html_entrepot_landing.cpp����������������������������������������������������������0000644�0001750�0001752�00000021262�15036424440�015557� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*********************************************************************/ // webdar - a web server and interface program to libdar // Copyright (C) 2013-2025 Denis Corbin // // This file is part of Webdar // // Webdar is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // Webdar is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Webdar. If not, see <http://www.gnu.org/licenses/> // //---- // to contact the author: dar.linux@free.fr /*********************************************************************/ // C system header files extern "C" { } // C++ system header files #include <dar/tools.hpp> // webdar headers #include "webdar_css_style.hpp" #include "tooltip_messages.hpp" // #include "html_entrepot_landing.hpp" using namespace std; const string html_entrepot_landing::changed = "html_entrep_landing_changed"; const string html_entrepot_landing::entrepot_only_changed = "html_entrep_land_only_changed"; const string html_entrepot_landing::landing_path_only_changed = "html_entrep_landing_only_hanged"; html_entrepot_landing::html_entrepot_landing(): form("Apply changes"), fs(""), use_landing_path("Replace current backup path by the landing path", html_form_input::check, "", "", ""), landing_path("Landing path", "/", "", webdar_css_style::width_100vw, "Select default path to store and look for backups..."), custom_event_entrepot(entrepot_only_changed), custom_event_landing_path(landing_path_only_changed), ignore_events(false), entrepot_changed(true) { #ifdef LIBTHREADAR_STACK_FEATURE set_stack_size(DEFAULT_STACK_SIZE); #endif // component configuration if(repoxfer.get_html_user_interaction()) repoxfer.get_html_user_interaction()->auto_hide(true, false); else throw WEBDAR_BUG; landing_path.set_select_mode(html_form_input_file::select_dir); landing_path.set_can_create_dir(true); // adoption tree fs.adopt(&entrep); fs.adopt(&use_landing_path); fs.adopt(&landing_path); form.adopt(&fs); adopt(&form); adopt(&repoxfer); // events entrep.record_actor_on_event(this, html_entrepot::changed); landing_path.set_change_event_name(landing_path_only_changed); landing_path.record_actor_on_event(this, landing_path_only_changed); landing_path.record_actor_on_event(this, html_form_input_file::repo_update_needed); use_landing_path.set_change_event_name(landing_path_only_changed); use_landing_path.record_actor_on_event(this, landing_path_only_changed); repoxfer.record_actor_on_event(this, html_libdar_running_popup::libdar_has_finished); register_name(custom_event_entrepot); // is equal to "entrepot_only_changed" at construction time (here) register_name(custom_event_landing_path); // is equal to landing_path_changed at construction time register_name(changed); register_name(html_form_input_file::repo_updated); landing_path.set_entrepot_updater(this); // visibility repoxfer.set_visible(false); // css // tooltips use_landing_path.set_tooltip(TOOLTIP_HEL_USE); landing_path.set_tooltip(TOOLTIP_HEL_PATH); } shared_ptr<libdar::entrepot> & html_entrepot_landing::get_entrepot(shared_ptr<html_web_user_interaction> & webui) const { entrep_ctrl.lock(); try { if(entrepot_changed) { libdar_entrep = entrep.get_entrepot(webui); entrepot_changed = false; } } catch(...) { entrep_ctrl.unlock(); throw; } entrep_ctrl.unlock(); return libdar_entrep; } void html_entrepot_landing::on_event(const string & event_name) { if(ignore_events) return; if(event_name == html_entrepot::changed) { entrepot_changed = true; act(custom_event_entrepot); act(changed); } else if(event_name == html_libdar_running_popup::libdar_has_finished) { landing_path.set_entrepot(libdar_entrep); act(html_form_input_file::repo_updated); } else if(event_name == custom_event_landing_path || event_name == landing_path_only_changed) { if(use_landing_path.get_value_as_bool()) act(custom_event_landing_path); act(changed); } else if(event_name == html_form_input_file::repo_update_needed) { // we will run a thread thus we should be visible for // repoxfer to be able to control the thread. // This is obviously the case else the repo_update_needed // event, which comes from one of our component (landing_path) // would not have been generated. if(entrepot_changed) start_updating_landing(); else { landing_path.set_entrepot(libdar_entrep); act(html_form_input_file::repo_updated); } } else throw WEBDAR_BUG; } void html_entrepot_landing::set_event_entrepot(const string & name) { rename_name(custom_event_entrepot, name); custom_event_entrepot = name; } void html_entrepot_landing::set_event_landing_path(const string & name) { rename_name(custom_event_landing_path, name); custom_event_landing_path = name; } void html_entrepot_landing::load_json(const json & source) { try { unsigned int version; string class_id; json config = unwrap_config_from_json_header(source, version, class_id); if(class_id != myclass_id) throw exception_range(libdar::tools_printf("Unexpected class_id in json data, found %s while expecting %s", class_id.c_str(), myclass_id)); if(version > format_version) throw exception_range(libdar::tools_printf("Json format version too hight for %s, upgrade your webdar software", myclass_id)); ignore_events = true; try { entrep.load_json(config.at(jlabel_entrepot)); use_landing_path.set_value_as_bool(config.at(jlabel_use_landing_path)); landing_path.set_value(config.at(jlabel_landing_path)); } catch(...) { ignore_events = false; throw; } ignore_events = false; } catch(json::exception & e) { throw exception_json(libdar::tools_printf("Error loading %s config", myclass_id), e); } entrepot_changed = true; act(custom_event_entrepot); act(custom_event_landing_path); act(changed); on_event(custom_event_landing_path); } json html_entrepot_landing::save_json() const { json config; config[jlabel_entrepot] = entrep.save_json(); config[jlabel_use_landing_path] = use_landing_path.get_value_as_bool(); config[jlabel_landing_path] = landing_path.get_value(); return wrap_config_with_json_header(format_version, myclass_id, config); } void html_entrepot_landing::clear_json() { ignore_events = true; try { entrep.clear_json(); use_landing_path.set_value_as_bool(false); landing_path.set_value("/"); } catch(...) { ignore_events = false; throw; } ignore_events = false; entrepot_changed = true; act(custom_event_entrepot); act(custom_event_landing_path); act(changed); on_event(custom_event_landing_path); } void html_entrepot_landing::set_to_webdar_defaults() { entrep.set_to_webdar_defaults(); use_landing_path.set_value_as_bool(true); landing_path.set_value("/tmp"); } string html_entrepot_landing::inherited_get_body_part(const chemin & path, const request & req) { return get_body_part_from_all_children(path, req); } void html_entrepot_landing::css_classes_have_changed() { set<string> css_classes = get_css_classes_as_a_set(); form.clear_css_classes(); for(set<string>::iterator it = css_classes.begin(); it != css_classes.end(); ++it) form.add_css_class(*it); } void html_entrepot_landing::new_css_library_available() { unique_ptr<css_library> & csslib = lookup_css_library(); if(!csslib) throw WEBDAR_BUG; webdar_css_style::update_library(*csslib); } void html_entrepot_landing::inherited_run() { shared_ptr<html_web_user_interaction> ptr(repoxfer.get_html_user_interaction()); if(!ptr) throw WEBDAR_BUG; entrep_ctrl.lock(); try { if(entrepot_changed) { libdar_entrep = entrep.get_entrepot(ptr); entrepot_changed = false; } } catch(...) { entrep_ctrl.unlock(); throw; } entrep_ctrl.unlock(); } void html_entrepot_landing::signaled_inherited_cancel() { pthread_t libdar_tid; libdar::thread_cancellation th; if(is_running(libdar_tid)) th.cancel(libdar_tid, true, 0); } void html_entrepot_landing::start_updating_landing() { repoxfer.run_and_control_thread(this); } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������webdar-1.0.0/src/static_object_library.cpp����������������������������������������������������������0000644�0001750�0001752�00000004427�14773727252�015562� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*********************************************************************/ // webdar - a web server and interface program to libdar // Copyright (C) 2013-2025 Denis Corbin // // This file is part of Webdar // // Webdar is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // Webdar is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Webdar. If not, see <http://www.gnu.org/licenses/> // //---- // to contact the author: dar.linux@free.fr /*********************************************************************/ // C system header files #include "my_config.h" extern "C" { } // C++ system header files // webdar headers #include "tokens.hpp" // #include "static_object_library.hpp" using namespace std; bool static_object_library::frozen = false; map<string, static_object *> static_object_library::library; void static_object_library::init() { if(frozen) throw WEBDAR_BUG; #include "static_object.sto" freeze_library(); } const static_object * static_object_library::find_object(const string & name) { if(!frozen) throw WEBDAR_BUG; map<string, static_object *>::iterator it = library.find(name); if(it == library.end()) throw exception_range("unknown static object"); return it->second; } void static_object_library::release() { map<string, static_object *>::iterator it = library.begin(); while(it != library.end()) { if(it->second == nullptr) throw WEBDAR_BUG; try { delete it->second; it->second = nullptr; } catch(...) { it->second = nullptr; throw; } ++it; } library.clear(); } void static_object_library::add_object_to_library(const string & name, static_object *ref) { if(frozen) throw WEBDAR_BUG; map<string, static_object *>::iterator it = library.find(name); if(it != library.end()) throw WEBDAR_BUG; library[name] = ref; } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������webdar-1.0.0/src/global_parameters.hpp��������������������������������������������������������������0000644�0001750�0001752�00000002557�14773727252�014713� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*********************************************************************/ // webdar - a web server and interface program to libdar // Copyright (C) 2013-2025 Denis Corbin // // This file is part of Webdar // // Webdar is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // Webdar is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Webdar. If not, see <http://www.gnu.org/licenses/> // //---- // to contact the author: dar.linux@free.fr /*********************************************************************/ #ifndef GLOBAL_PARAMETERS_HPP #define GLOBAL_PARAMETERS_HPP /// \file global_parameters.hpp parameters global to the webdar application // C system header files #include "my_config.h" extern "C" { #if HAVE_SIGNAL_H #include <signal.h> #endif } // C++ system header files // webdar headers /// default signal used to cancel threads (provided to libthreadar) #define THREAD_SIGNAL SIGUSR2 #endif �������������������������������������������������������������������������������������������������������������������������������������������������webdar-1.0.0/src/html_fsa_scope.cpp�����������������������������������������������������������������0000644�0001750�0001752�00000007210�15036444700�014163� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*********************************************************************/ // webdar - a web server and interface program to libdar // Copyright (C) 2013-2025 Denis Corbin // // This file is part of Webdar // // Webdar is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // Webdar is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Webdar. If not, see <http://www.gnu.org/licenses/> // //---- // to contact the author: dar.linux@free.fr /*********************************************************************/ // C system header files #include "my_config.h" extern "C" { } // C++ system header files #include <dar/tools.hpp> // webdar headers #include "tooltip_messages.hpp" // #include "html_fsa_scope.hpp" using namespace std; const string html_fsa_scope::changed = "hfscope_changed"; html_fsa_scope::html_fsa_scope(): form("Update"), fs("File system Specific Attributes to consider"), hfs_family("HFS+ (MacOS) family attributes", html_form_input::check, "1", "", ""), ext_family("Ext2/3/4 (Linux) family attributes", html_form_input::check, "1", "", "") { // components setup // adoption tree fs.adopt(&hfs_family); fs.adopt(&ext_family); form.adopt(&fs); adopt(&form); // events hfs_family.record_actor_on_event(this, html_form_input::changed); ext_family.record_actor_on_event(this, html_form_input::changed); register_name(changed); // css // tooltips fs.set_tooltip(TOOLTIP_HFS_FS); } libdar::fsa_scope html_fsa_scope::get_scope() const { libdar::fsa_scope ret; if(hfs_family.get_value_as_bool()) ret.insert(libdar::fsaf_hfs_plus); if(ext_family.get_value_as_bool()) ret.insert(libdar::fsaf_linux_extX); return ret; } void html_fsa_scope::load_json(const json & source) { try { unsigned int version; string class_id; json config = unwrap_config_from_json_header(source, version, class_id); if(class_id != myclass_id) throw exception_range(libdar::tools_printf("Unexpected class_id in json data, found %s while expecting %s", class_id.c_str(), myclass_id)); if(version > format_version) throw exception_range(libdar::tools_printf("Json format version too hight for %s, upgrade your webdar software", myclass_id)); hfs_family.set_value_as_bool(config.at(jlabel_hfs)); ext_family.set_value_as_bool(config.at(jlabel_ext)); } catch(json::exception & e) { throw exception_json(libdar::tools_printf("Error loading %s config", myclass_id), e); } } json html_fsa_scope::save_json() const { json config; config[jlabel_hfs] = hfs_family.get_value_as_bool(); config[jlabel_ext] = ext_family.get_value_as_bool(); return wrap_config_with_json_header(format_version, myclass_id, config); } void html_fsa_scope::clear_json() { hfs_family.set_value_as_bool(true); ext_family.set_value_as_bool(true); } void html_fsa_scope::on_event(const string & event_name) { if(event_name == html_form_input::changed) act(changed); else throw WEBDAR_BUG; } string html_fsa_scope::inherited_get_body_part(const chemin & path, const request & req) { return get_body_part_from_all_children(path, req); } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������webdar-1.0.0/data/����������������������������������������������������������������������������������0000755�0001750�0001752�00000000000�15045134253�010672� 5����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������webdar-1.0.0/data/darrc�����������������������������������������������������������������������������0000644�0001750�0001752�00000012214�14773727252�011646� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������############################################################# # This is the default system wide configuration file for dar # # This file provide a set of options referred each by a target # name. They are not applied unless you specify that target on # command line or included file. For example for par2: # dar <...list of options...> par2 # # This options set are available automatically for dar unless # you define a .darrc in your home directory or use -N option # on command-line. # You can continue using this default file even if you use your # own .darrc file, by including the following in it or explicitly # command-line: # # -B /etc/darrc # # In the following we are using short options here because long # options may not be available everywhere. ############################################################## # target: par2 # activates: # - par2 file generation when creating an archive # - par2 file verification and correction when testing an archive # usage: dar <options...> par2 par2: -B "/usr/local/share/dar/samples/dar_par.dcf" ############################################################## # target: compress-exclusion # avoid compressing types of file known to already be compressed # or to have very bad compression ratio # # usage: dar <options...> compress-exclusion compress-exclusion: # here we define some files that have not to be compressed. # First setting case insensitive mode on: -an # Then telling dar that the following masks are glob expression # which is the default, right, but if sooner on command-line the # user swapped to regex, the following mask would not work as expected # any more, so we force back to glob expression in any case: -ag # Now follows all the file specification to never try to compress: # Compressed video format. -Z "*.avi" -Z "*.cr2" -Z "*.flv" -Z "*.jng" -Z "*.m4v" -Z "*.mkv" -Z "*.mov" -Z "*.mp4*" -Z "*.mpeg" -Z "*.mpg" -Z "*.mts" -Z "*.m2ts" -Z "*.oga" -Z "*.swf" -Z "*.vob" -Z "*.webm" -Z "*.wmv" # Compressed animation. -Z "*.mng" # Compressed image format. -Z "*.bmp" -Z "*.gif" -Z "*.ico" -Z "*.jpe" -Z "*.jpeg" -Z "*.jpg" -Z "*.mmpz" -Z "*.mpeg" -Z "*.png" -Z "*.tif" -Z "*.tiff" -Z "*.webp" # Compressed audio format. -Z "*.ac3" -Z "*.als" -Z "*.ape" -Z "*.bonk" -Z "*.flac" -Z "*.m4a" -Z "*.mp2" -Z "*.mp3" -Z "*.mpc" -Z "*.nsf" -Z "*.ogg" -Z "*.speex" -Z "*.spx" -Z "*.weba" -Z "*.wv" # Compressed package. -Z "*.deb" -Z "*.rpm" -Z "*.run" -Z "*.sis" -Z "*.xpi" # Compressed data. -Z "*.7z" -Z "*.Z" -Z "*.bz2" -Z "*.cab" -Z "*.gz" -Z "*.jar" -Z "*.rar" -Z "*.tbz" -Z "*.tbz2" -Z "*.tgz" -Z "*.txz" -Z "*.wsz" -Z "*.wz" -Z "*.xz" -Z "*.zst" -Z "*.zstd" # These are zip files. Not all are compressed, but considering that they can # get quite large it is probably more prudent to leave this uncommented. -Z "*.pk3" -Z "*.zip" # You can get better compression on these files, but then you should be # de/recompressing with an actual program, not dar. -Z "*.lz4" -Z "*.zoo" # Other, in alphabetical order. -Z "*.Po" -Z "*.aar" -Z "*.azw" -Z "*.azw3" -Z "*.bx" -Z "*.chm" -Z "*.djvu" -Z "*.docx" -Z "*.epub" -Z "*.f3d" -Z "*.gpg" -Z "*.htmlz" -Z "*.iix" -Z "*.iso" -Z "*.jin" -Z "*.ods" -Z "*.odt" -Z "*.odp" -Z "*.pdf" -Z "*.pptx" -Z "*.ser" -Z "*.svgz" -Z "*.swx" -Z "*.sxi" -Z "*.whl" -Z "*.wings" -Z "*.xlsx" # These are blender bake files. Compression on these is optional in blender. # Blender's compression algorithm is better at compressing these than xz or # any other compression program that I have tested. # Comment only if you use uncompressed blender bake files. -Z "*.bphys" # Dar archives (may be compressed). -Z "*.dar" # Now we swap back to case sensitive mode for masks which is the default # mode: -acase ############################################################## # target: verbose # show both skipped files and files being processed # # usage: dar <options> verbose verbose: -va ############################################################## # target: no-emacs-backup # ignore temporary files or backup files generated by emacs # no-emacs-backup: -ag -X "*~" -X ".*~" ############################################################## # target: samba # take care of daylight saving time for the samba file system # type samba: -H 1 # samba file system need this to properly report date # and not lead dar to resave all files when changing # from summer to winter time and vice versa. ############################################################## # target: dry-run # an alias for --empty option, that get its name because the # only available option letter was 'e' that leads to this non # intuitive option name "empty". # dry-run: -e ############################################################## # target: bell # ring the terminal upon user interaction request # bell: -b ############################################################## # target: full-from-diff # rebuilds a full backup from a differential backup and its # full backup of reference # usage: dar -+ new_full -A old_ref_full -@ diff full-from-diff # # can also be used to rebuild a full backup from a decremental # backup and a full backup # usage: dar -+ old_full -A recent_fill -@ decr full-from-diff full-from-diff: -/ '{!(~I)}[Rr] {~S}[O*] P* ; {~s}[*o] *p' ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������webdar-1.0.0/TODO�����������������������������������������������������������������������������������0000644�0001750�0001752�00000011713�15010705606�010372� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Here is the task to do to get ready for release 1.0.0 ======================================================== + review all classes, virtual/override, move constructor & Co + have compliance with HTTP/1.1, this work is mainly at the server class layer where a answer has to be added field and updated version depending on the corresponding request. See RFC in the RFC subdirectory + add stop condition for a listener and thus webdar process (GUI choice, CTRL-C) + check how to avoid muliple field validation (update buttons), and have the global action button to imply all fields update (more natural GUI interaction) + add viewport and associated fiels in the return HTML pages to be readable on mobiles + manage CSS out of HTML, object use css classes and give use only available classes. A static catalog of CSS class defines and exposes the list of classes only the requested classes get included in the HTML header. => not sure to be a good idea + review all static std::string -> static constexpr char name[] = "initialisateur"; + provide html interface for class libdar::entrepot in order to let the user select a directory on the local filesystem or a existing file on the local filesystem, this could be launched beside html_form_input fields of the class saisie as an alternative to fill them clicking on a button-like element beside these fields. Maybe abstracting the html_tree class could avoid code duplication for that task. + add a way to navigate in directory repo tree when defining/reading an backup + add a way to navigate in the local dir for looking for the root filesystem - add a semaphore to control the number of running libdar task (listing task not being concerned by this). + add html interface for building filters + have a base of filters with prepolated default an no-compress + add filter features to the many place it is used in libdar (file filtering, compression filtering, etc.) take the name from the base of filters + add html interface for the overwriting policy (similar to the filter html interface in the way of doing) + add a base of overwriting policies with prepopulated defaults ones - add help area on the right to provide information on the action and role of the libdar options available on the displayed page (-> rather use a tooltips) + provide a base of options sets (for the different operations, prepopulated with the defaults sets) + implement the entrepot_ftp class descendant from libdar::entrepot. As well as the fichier_ftp descendant from libdar::fichier + add html interface to configure the entrepot_ftp object + define a library of entrepot, libdar::entrepot_local always being available beside user defined entrepot_ftp objects x provide option selectable field beside each slice path to one of the available entrepot of the library entrepot - add licencing exhibition from command-line (in addition as the already done static object displayed using web interface) + add libdar information display on the about pages + define a webdar logo and favicon small image, using povray + define building tools to add these two pictures as static object + make use of automake autoconf for portability and for configuration/compilation/installation processes x add the ability to store and load filters, overwriting policies, options sets, in a DCF file ($HOME/.webdar by default) as many user target with name of the form webdar-<type>-<user provided label> --> better: relying on json x add the ability to export a command as CLI for dar using with DCF as name and cron label to provide user management of dar command lines. x option to test that cron works (sending an email or what makes sense) + make use of doxygen to build webdar code documentation + implement save/backup of webdar configuration through web interface to be tested/reviewed before release 1.0.0 =========================================== - build an archive with more than 2M entry in a given directory, check the archive listing and time performance (should be long,...) + review class menu implementation to make use of html_button instead of its self made construction => why??? + check that all libdar parameters are now configurable through webdar + review html_form_input to use libdar::secu_string when password are used + check the way webdar behaves upon signal reception when a libdar session is running or not - review -v option to provide the exact type of priority to log or not to log - review the use of sterror (not thread safe), either use errno (thread safe!) or strerror_r for future releases (after 1.0.0) ================================== + implement HTTPS (requiring a ceriticat from file given on webdar command-line) - implement authentication method using the system users (define a command-line switch to select this mode or the original using random temporary password) - implement daemon mode, in which report goes to syslog and process detach itslelf from controlling tty - implement scheduling to run/enqueue task at given time and period �����������������������������������������������������webdar-1.0.0/doc/�����������������������������������������������������������������������������������0000755�0001750�0001752�00000000000�15045134256�010531� 5����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������webdar-1.0.0/doc/portable_cp������������������������������������������������������������������������0000755�0001750�0001752�00000003122�15045130554�012664� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh ######################################################################## # webdar - a web server and interface program to libdar # Copyright (C) 2013-2023 Denis Corbin # # This file is part of Webdar # # Webdar is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # Webdar is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with Webdar. If not, see <http://www.gnu.org/licenses/> # #---- # to contact the author: dar.linux@free.fr ######################################################################## if [ -z "$1" -o -z "$2" -o ! -z "$3" ] ; then echo "usage: $0 <src> <dst>" exit 1 fi TMP_SRC=dar_install_cp_test_src TMP_DST=dar_install_cp_test_dst if mkdir "$TMP_DST" && mkdir "$TMP_SRC" ; then if cp -dR --preserve=mode $TMP_SRC $TMP_DST 1> /dev/null 2> /dev/null ; then rm -rf "$TMP_SRC" "$TMP_DST" exec cp -dR --preserve=mode "$1" "$2" else # BSD-like Unix that does not support -d or --preserve options rm -rf "$TMP_SRC" "$TMP_DST" exec cp -pR "$1" "$2" fi else rm -rf "$TMP_SRC" "$TMP_DST" echo "Impossible to create $TMP_DST or $TMP_SRC in order to determine capabilities of the 'cp' command" exit 2 fi ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������webdar-1.0.0/doc/Doxyfile���������������������������������������������������������������������������0000644�0001750�0001752�00000353564�15024333446�012176� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Doxyfile 1.9.4 # This file describes the settings to be used by the documentation system # doxygen (www.doxygen.org) for a project. # # All text after a double hash (##) is considered a comment and is placed in # front of the TAG it is preceding. # # All text after a single hash (#) is considered a comment and will be ignored. # The format is: # TAG = value [value, ...] # For lists, items can also be appended using: # TAG += value [value, ...] # Values that contain spaces should be placed between quotes (\" \"). # # Note: # # Use doxygen to compare the used configuration file with the template # configuration file: # doxygen -x [configFile] # Use doxygen to compare the used configuration file with the template # configuration file without replacing the environment variables: # doxygen -x_noenv [configFile] #--------------------------------------------------------------------------- # Project related configuration options #--------------------------------------------------------------------------- # This tag specifies the encoding used for all characters in the configuration # file that follow. The default is UTF-8 which is also the encoding used for all # text before the first occurrence of this tag. Doxygen uses libiconv (or the # iconv built into libc) for the transcoding. See # https://www.gnu.org/software/libiconv/ for the list of possible encodings. # The default value is: UTF-8. DOXYFILE_ENCODING = UTF-8 # The PROJECT_NAME tag is a single word (or a sequence of words surrounded by # double-quotes, unless you are using Doxywizard) that should identify the # project for which the documentation is generated. This name is used in the # title of most generated pages and in a few other places. # The default value is: My Project. PROJECT_NAME = Webdar # The PROJECT_NUMBER tag can be used to enter a project or revision number. This # could be handy for archiving the generated documentation or if some version # control system is used. PROJECT_NUMBER = "##VERSION##" # Using the PROJECT_BRIEF tag one can provide an optional one line description # for a project that appears at the top of each page and should give viewer a # quick idea about the purpose of the project. Keep the description short. PROJECT_BRIEF = "Web user interface to libdar" # With the PROJECT_LOGO tag one can specify a logo or an icon that is included # in the documentation. The maximum height of the logo should not exceed 55 # pixels and the maximum width should not exceed 200 pixels. Doxygen will copy # the logo to the output directory. PROJECT_LOGO = ##SRCDIR##/resources/webdar_logo.jpg # The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) path # into which the generated documentation will be written. If a relative path is # entered, it will be relative to the location where doxygen was started. If # left blank the current directory will be used. OUTPUT_DIRECTORY = ##BUILDDIR##/doc # If the CREATE_SUBDIRS tag is set to YES then doxygen will create up to 4096 # sub-directories (in 2 levels) under the output directory of each output format # and will distribute the generated files over these directories. Enabling this # option can be useful when feeding doxygen a huge amount of source files, where # putting all generated files in the same directory would otherwise causes # performance problems for the file system. Adapt CREATE_SUBDIRS_LEVEL to # control the number of sub-directories. # The default value is: NO. CREATE_SUBDIRS = NO # Controls the number of sub-directories that will be created when # CREATE_SUBDIRS tag is set to YES. Level 0 represents 16 directories, and every # level increment doubles the number of directories, resulting in 4096 # directories at level 8 which is the default and also the maximum value. The # sub-directories are organized in 2 levels, the first level always has a fixed # numer of 16 directories. # Minimum value: 0, maximum value: 8, default value: 8. # This tag requires that the tag CREATE_SUBDIRS is set to YES. CREATE_SUBDIRS_LEVEL = 8 # If the ALLOW_UNICODE_NAMES tag is set to YES, doxygen will allow non-ASCII # characters to appear in the names of generated files. If set to NO, non-ASCII # characters will be escaped, for example _xE3_x81_x84 will be used for Unicode # U+3044. # The default value is: NO. ALLOW_UNICODE_NAMES = NO # The OUTPUT_LANGUAGE tag is used to specify the language in which all # documentation generated by doxygen is written. Doxygen will use this # information to generate all constant output in the proper language. # Possible values are: Afrikaans, Arabic, Armenian, Brazilian, Bulgarian, # Catalan, Chinese, Chinese-Traditional, Croatian, Czech, Danish, Dutch, English # (United States), Esperanto, Farsi (Persian), Finnish, French, German, Greek, # Hindi, Hungarian, Indonesian, Italian, Japanese, Japanese-en (Japanese with # English messages), Korean, Korean-en (Korean with English messages), Latvian, # Lithuanian, Macedonian, Norwegian, Persian (Farsi), Polish, Portuguese, # Romanian, Russian, Serbian, Serbian-Cyrillic, Slovak, Slovene, Spanish, # Swedish, Turkish, Ukrainian and Vietnamese. # The default value is: English. OUTPUT_LANGUAGE = English # If the BRIEF_MEMBER_DESC tag is set to YES, doxygen will include brief member # descriptions after the members that are listed in the file and class # documentation (similar to Javadoc). Set to NO to disable this. # The default value is: YES. BRIEF_MEMBER_DESC = YES # If the REPEAT_BRIEF tag is set to YES, doxygen will prepend the brief # description of a member or function before the detailed description # # Note: If both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the # brief descriptions will be completely suppressed. # The default value is: YES. REPEAT_BRIEF = YES # This tag implements a quasi-intelligent brief description abbreviator that is # used to form the text in various listings. Each string in this list, if found # as the leading text of the brief description, will be stripped from the text # and the result, after processing the whole list, is used as the annotated # text. Otherwise, the brief description is used as-is. If left blank, the # following values are used ($name is automatically replaced with the name of # the entity):The $name class, The $name widget, The $name file, is, provides, # specifies, contains, represents, a, an and the. ABBREVIATE_BRIEF = "The $name class" \ "The $name widget" \ "The $name file" \ is \ provides \ specifies \ contains \ represents \ a \ an \ the # If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then # doxygen will generate a detailed section even if there is only a brief # description. # The default value is: NO. ALWAYS_DETAILED_SEC = NO # If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all # inherited members of a class in the documentation of that class as if those # members were ordinary class members. Constructors, destructors and assignment # operators of the base classes will not be shown. # The default value is: NO. INLINE_INHERITED_MEMB = NO # If the FULL_PATH_NAMES tag is set to YES, doxygen will prepend the full path # before files name in the file list and in the header files. If set to NO the # shortest path that makes the file name unique will be used # The default value is: YES. FULL_PATH_NAMES = NO # The STRIP_FROM_PATH tag can be used to strip a user-defined part of the path. # Stripping is only done if one of the specified strings matches the left-hand # part of the path. The tag can be used to show relative paths in the file list. # If left blank the directory from which doxygen is run is used as the path to # strip. # # Note that you can specify absolute paths here, but also relative paths, which # will be relative from the directory where doxygen is started. # This tag requires that the tag FULL_PATH_NAMES is set to YES. STRIP_FROM_PATH = # The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of the # path mentioned in the documentation of a class, which tells the reader which # header file to include in order to use a class. If left blank only the name of # the header file containing the class definition is used. Otherwise one should # specify the list of include paths that are normally passed to the compiler # using the -I flag. STRIP_FROM_INC_PATH = # If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter (but # less readable) file names. This can be useful is your file systems doesn't # support long names like on DOS, Mac, or CD-ROM. # The default value is: NO. SHORT_NAMES = NO # If the JAVADOC_AUTOBRIEF tag is set to YES then doxygen will interpret the # first line (until the first dot) of a Javadoc-style comment as the brief # description. If set to NO, the Javadoc-style will behave just like regular Qt- # style comments (thus requiring an explicit @brief command for a brief # description.) # The default value is: NO. JAVADOC_AUTOBRIEF = NO # If the JAVADOC_BANNER tag is set to YES then doxygen will interpret a line # such as # /*************** # as being the beginning of a Javadoc-style comment "banner". If set to NO, the # Javadoc-style will behave just like regular comments and it will not be # interpreted by doxygen. # The default value is: NO. JAVADOC_BANNER = NO # If the QT_AUTOBRIEF tag is set to YES then doxygen will interpret the first # line (until the first dot) of a Qt-style comment as the brief description. If # set to NO, the Qt-style will behave just like regular Qt-style comments (thus # requiring an explicit \brief command for a brief description.) # The default value is: NO. QT_AUTOBRIEF = NO # The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make doxygen treat a # multi-line C++ special comment block (i.e. a block of //! or /// comments) as # a brief description. This used to be the default behavior. The new default is # to treat a multi-line C++ comment block as a detailed description. Set this # tag to YES if you prefer the old behavior instead. # # Note that setting this tag to YES also means that rational rose comments are # not recognized any more. # The default value is: NO. MULTILINE_CPP_IS_BRIEF = NO # By default Python docstrings are displayed as preformatted text and doxygen's # special commands cannot be used. By setting PYTHON_DOCSTRING to NO the # doxygen's special commands can be used and the contents of the docstring # documentation blocks is shown as doxygen documentation. # The default value is: YES. PYTHON_DOCSTRING = YES # If the INHERIT_DOCS tag is set to YES then an undocumented member inherits the # documentation from any documented member that it re-implements. # The default value is: YES. INHERIT_DOCS = YES # If the SEPARATE_MEMBER_PAGES tag is set to YES then doxygen will produce a new # page for each member. If set to NO, the documentation of a member will be part # of the file/class/namespace that contains it. # The default value is: NO. SEPARATE_MEMBER_PAGES = NO # The TAB_SIZE tag can be used to set the number of spaces in a tab. Doxygen # uses this value to replace tabs by spaces in code fragments. # Minimum value: 1, maximum value: 16, default value: 4. TAB_SIZE = 4 # This tag can be used to specify a number of aliases that act as commands in # the documentation. An alias has the form: # name=value # For example adding # "sideeffect=@par Side Effects:^^" # will allow you to put the command \sideeffect (or @sideeffect) in the # documentation, which will result in a user-defined paragraph with heading # "Side Effects:". Note that you cannot put \n's in the value part of an alias # to insert newlines (in the resulting output). You can put ^^ in the value part # of an alias to insert a newline as if a physical newline was in the original # file. When you need a literal { or } or , in the value part of an alias you # have to escape them by means of a backslash (\), this can lead to conflicts # with the commands \{ and \} for these it is advised to use the version @{ and # @} or use a double escape (\\{ and \\}) ALIASES = # Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C sources # only. Doxygen will then generate output that is more tailored for C. For # instance, some of the names that are used will be different. The list of all # members will be omitted, etc. # The default value is: NO. OPTIMIZE_OUTPUT_FOR_C = NO # Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java or # Python sources only. Doxygen will then generate output that is more tailored # for that language. For instance, namespaces will be presented as packages, # qualified scopes will look different, etc. # The default value is: NO. OPTIMIZE_OUTPUT_JAVA = NO # Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran # sources. Doxygen will then generate output that is tailored for Fortran. # The default value is: NO. OPTIMIZE_FOR_FORTRAN = NO # Set the OPTIMIZE_OUTPUT_VHDL tag to YES if your project consists of VHDL # sources. Doxygen will then generate output that is tailored for VHDL. # The default value is: NO. OPTIMIZE_OUTPUT_VHDL = NO # Set the OPTIMIZE_OUTPUT_SLICE tag to YES if your project consists of Slice # sources only. Doxygen will then generate output that is more tailored for that # language. For instance, namespaces will be presented as modules, types will be # separated into more groups, etc. # The default value is: NO. OPTIMIZE_OUTPUT_SLICE = NO # Doxygen selects the parser to use depending on the extension of the files it # parses. With this tag you can assign which parser to use for a given # extension. Doxygen has a built-in mapping, but you can override or extend it # using this tag. The format is ext=language, where ext is a file extension, and # language is one of the parsers supported by doxygen: IDL, Java, JavaScript, # Csharp (C#), C, C++, Lex, D, PHP, md (Markdown), Objective-C, Python, Slice, # VHDL, Fortran (fixed format Fortran: FortranFixed, free formatted Fortran: # FortranFree, unknown formatted Fortran: Fortran. In the later case the parser # tries to guess whether the code is fixed or free formatted code, this is the # default for Fortran type files). For instance to make doxygen treat .inc files # as Fortran files (default is PHP), and .f files as C (default is Fortran), # use: inc=Fortran f=C. # # Note: For files without extension you can use no_extension as a placeholder. # # Note that for custom extensions you also need to set FILE_PATTERNS otherwise # the files are not read by doxygen. When specifying no_extension you should add # * to the FILE_PATTERNS. # # Note see also the list of default file extension mappings. EXTENSION_MAPPING = # If the MARKDOWN_SUPPORT tag is enabled then doxygen pre-processes all comments # according to the Markdown format, which allows for more readable # documentation. See https://daringfireball.net/projects/markdown/ for details. # The output of markdown processing is further processed by doxygen, so you can # mix doxygen, HTML, and XML commands with Markdown formatting. Disable only in # case of backward compatibilities issues. # The default value is: YES. MARKDOWN_SUPPORT = YES # When the TOC_INCLUDE_HEADINGS tag is set to a non-zero value, all headings up # to that level are automatically included in the table of contents, even if # they do not have an id attribute. # Note: This feature currently applies only to Markdown headings. # Minimum value: 0, maximum value: 99, default value: 5. # This tag requires that the tag MARKDOWN_SUPPORT is set to YES. TOC_INCLUDE_HEADINGS = 5 # When enabled doxygen tries to link words that correspond to documented # classes, or namespaces to their corresponding documentation. Such a link can # be prevented in individual cases by putting a % sign in front of the word or # globally by setting AUTOLINK_SUPPORT to NO. # The default value is: YES. AUTOLINK_SUPPORT = YES # If you use STL classes (i.e. std::string, std::vector, etc.) but do not want # to include (a tag file for) the STL sources as input, then you should set this # tag to YES in order to let doxygen match functions declarations and # definitions whose arguments contain STL classes (e.g. func(std::string); # versus func(std::string) {}). This also make the inheritance and collaboration # diagrams that involve STL classes more complete and accurate. # The default value is: NO. BUILTIN_STL_SUPPORT = YES # If you use Microsoft's C++/CLI language, you should set this option to YES to # enable parsing support. # The default value is: NO. CPP_CLI_SUPPORT = NO # Set the SIP_SUPPORT tag to YES if your project consists of sip (see: # https://www.riverbankcomputing.com/software/sip/intro) sources only. Doxygen # will parse them like normal C++ but will assume all classes use public instead # of private inheritance when no explicit protection keyword is present. # The default value is: NO. SIP_SUPPORT = NO # For Microsoft's IDL there are propget and propput attributes to indicate # getter and setter methods for a property. Setting this option to YES will make # doxygen to replace the get and set methods by a property in the documentation. # This will only work if the methods are indeed getting or setting a simple # type. If this is not the case, or you want to show the methods anyway, you # should set this option to NO. # The default value is: YES. IDL_PROPERTY_SUPPORT = YES # If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC # tag is set to YES then doxygen will reuse the documentation of the first # member in the group (if any) for the other members of the group. By default # all members of a group must be documented explicitly. # The default value is: NO. DISTRIBUTE_GROUP_DOC = NO # If one adds a struct or class to a group and this option is enabled, then also # any nested class or struct is added to the same group. By default this option # is disabled and one has to add nested compounds explicitly via \ingroup. # The default value is: NO. GROUP_NESTED_COMPOUNDS = NO # Set the SUBGROUPING tag to YES to allow class member groups of the same type # (for instance a group of public functions) to be put as a subgroup of that # type (e.g. under the Public Functions section). Set it to NO to prevent # subgrouping. Alternatively, this can be done per class using the # \nosubgrouping command. # The default value is: YES. SUBGROUPING = YES # When the INLINE_GROUPED_CLASSES tag is set to YES, classes, structs and unions # are shown inside the group in which they are included (e.g. using \ingroup) # instead of on a separate page (for HTML and Man pages) or section (for LaTeX # and RTF). # # Note that this feature does not work in combination with # SEPARATE_MEMBER_PAGES. # The default value is: NO. INLINE_GROUPED_CLASSES = NO # When the INLINE_SIMPLE_STRUCTS tag is set to YES, structs, classes, and unions # with only public data fields or simple typedef fields will be shown inline in # the documentation of the scope in which they are defined (i.e. file, # namespace, or group documentation), provided this scope is documented. If set # to NO, structs, classes, and unions are shown on a separate page (for HTML and # Man pages) or section (for LaTeX and RTF). # The default value is: NO. INLINE_SIMPLE_STRUCTS = NO # When TYPEDEF_HIDES_STRUCT tag is enabled, a typedef of a struct, union, or # enum is documented as struct, union, or enum with the name of the typedef. So # typedef struct TypeS {} TypeT, will appear in the documentation as a struct # with name TypeT. When disabled the typedef will appear as a member of a file, # namespace, or class. And the struct will be named TypeS. This can typically be # useful for C code in case the coding convention dictates that all compound # types are typedef'ed and only the typedef is referenced, never the tag name. # The default value is: NO. TYPEDEF_HIDES_STRUCT = NO # The size of the symbol lookup cache can be set using LOOKUP_CACHE_SIZE. This # cache is used to resolve symbols given their name and scope. Since this can be # an expensive process and often the same symbol appears multiple times in the # code, doxygen keeps a cache of pre-resolved symbols. If the cache is too small # doxygen will become slower. If the cache is too large, memory is wasted. The # cache size is given by this formula: 2^(16+LOOKUP_CACHE_SIZE). The valid range # is 0..9, the default is 0, corresponding to a cache size of 2^16=65536 # symbols. At the end of a run doxygen will report the cache usage and suggest # the optimal cache size from a speed point of view. # Minimum value: 0, maximum value: 9, default value: 0. LOOKUP_CACHE_SIZE = 0 # The NUM_PROC_THREADS specifies the number of threads doxygen is allowed to use # during processing. When set to 0 doxygen will based this on the number of # cores available in the system. You can set it explicitly to a value larger # than 0 to get more control over the balance between CPU load and processing # speed. At this moment only the input processing can be done using multiple # threads. Since this is still an experimental feature the default is set to 1, # which effectively disables parallel processing. Please report any issues you # encounter. Generating dot graphs in parallel is controlled by the # DOT_NUM_THREADS setting. # Minimum value: 0, maximum value: 32, default value: 1. NUM_PROC_THREADS = 1 #--------------------------------------------------------------------------- # Build related configuration options #--------------------------------------------------------------------------- # If the EXTRACT_ALL tag is set to YES, doxygen will assume all entities in # documentation are documented, even if no documentation was available. Private # class members and static file members will be hidden unless the # EXTRACT_PRIVATE respectively EXTRACT_STATIC tags are set to YES. # Note: This will also disable the warnings about undocumented members that are # normally produced when WARNINGS is set to YES. # The default value is: NO. EXTRACT_ALL = NO # If the EXTRACT_PRIVATE tag is set to YES, all private members of a class will # be included in the documentation. # The default value is: NO. EXTRACT_PRIVATE = NO # If the EXTRACT_PRIV_VIRTUAL tag is set to YES, documented private virtual # methods of a class will be included in the documentation. # The default value is: NO. EXTRACT_PRIV_VIRTUAL = NO # If the EXTRACT_PACKAGE tag is set to YES, all members with package or internal # scope will be included in the documentation. # The default value is: NO. EXTRACT_PACKAGE = NO # If the EXTRACT_STATIC tag is set to YES, all static members of a file will be # included in the documentation. # The default value is: NO. EXTRACT_STATIC = NO # If the EXTRACT_LOCAL_CLASSES tag is set to YES, classes (and structs) defined # locally in source files will be included in the documentation. If set to NO, # only classes defined in header files are included. Does not have any effect # for Java sources. # The default value is: YES. EXTRACT_LOCAL_CLASSES = YES # This flag is only useful for Objective-C code. If set to YES, local methods, # which are defined in the implementation section but not in the interface are # included in the documentation. If set to NO, only methods in the interface are # included. # The default value is: NO. EXTRACT_LOCAL_METHODS = NO # If this flag is set to YES, the members of anonymous namespaces will be # extracted and appear in the documentation as a namespace called # 'anonymous_namespace{file}', where file will be replaced with the base name of # the file that contains the anonymous namespace. By default anonymous namespace # are hidden. # The default value is: NO. EXTRACT_ANON_NSPACES = NO # If this flag is set to YES, the name of an unnamed parameter in a declaration # will be determined by the corresponding definition. By default unnamed # parameters remain unnamed in the output. # The default value is: YES. RESOLVE_UNNAMED_PARAMS = YES # If the HIDE_UNDOC_MEMBERS tag is set to YES, doxygen will hide all # undocumented members inside documented classes or files. If set to NO these # members will be included in the various overviews, but no documentation # section is generated. This option has no effect if EXTRACT_ALL is enabled. # The default value is: NO. HIDE_UNDOC_MEMBERS = NO # If the HIDE_UNDOC_CLASSES tag is set to YES, doxygen will hide all # undocumented classes that are normally visible in the class hierarchy. If set # to NO, these classes will be included in the various overviews. This option # has no effect if EXTRACT_ALL is enabled. # The default value is: NO. HIDE_UNDOC_CLASSES = NO # If the HIDE_FRIEND_COMPOUNDS tag is set to YES, doxygen will hide all friend # declarations. If set to NO, these declarations will be included in the # documentation. # The default value is: NO. HIDE_FRIEND_COMPOUNDS = NO # If the HIDE_IN_BODY_DOCS tag is set to YES, doxygen will hide any # documentation blocks found inside the body of a function. If set to NO, these # blocks will be appended to the function's detailed documentation block. # The default value is: NO. HIDE_IN_BODY_DOCS = NO # The INTERNAL_DOCS tag determines if documentation that is typed after a # \internal command is included. If the tag is set to NO then the documentation # will be excluded. Set it to YES to include the internal documentation. # The default value is: NO. INTERNAL_DOCS = NO # With the correct setting of option CASE_SENSE_NAMES doxygen will better be # able to match the capabilities of the underlying filesystem. In case the # filesystem is case sensitive (i.e. it supports files in the same directory # whose names only differ in casing), the option must be set to YES to properly # deal with such files in case they appear in the input. For filesystems that # are not case sensitive the option should be set to NO to properly deal with # output files written for symbols that only differ in casing, such as for two # classes, one named CLASS and the other named Class, and to also support # references to files without having to specify the exact matching casing. On # Windows (including Cygwin) and MacOS, users should typically set this option # to NO, whereas on Linux or other Unix flavors it should typically be set to # YES. # The default value is: system dependent. CASE_SENSE_NAMES = YES # If the HIDE_SCOPE_NAMES tag is set to NO then doxygen will show members with # their full class and namespace scopes in the documentation. If set to YES, the # scope will be hidden. # The default value is: NO. HIDE_SCOPE_NAMES = NO # If the HIDE_COMPOUND_REFERENCE tag is set to NO (default) then doxygen will # append additional text to a page's title, such as Class Reference. If set to # YES the compound reference will be hidden. # The default value is: NO. HIDE_COMPOUND_REFERENCE= NO # If the SHOW_HEADERFILE tag is set to YES then the documentation for a class # will show which file needs to be included to use the class. # The default value is: YES. SHOW_HEADERFILE = YES # If the SHOW_INCLUDE_FILES tag is set to YES then doxygen will put a list of # the files that are included by a file in the documentation of that file. # The default value is: YES. SHOW_INCLUDE_FILES = YES # If the SHOW_GROUPED_MEMB_INC tag is set to YES then Doxygen will add for each # grouped member an include statement to the documentation, telling the reader # which file to include in order to use the member. # The default value is: NO. SHOW_GROUPED_MEMB_INC = NO # If the FORCE_LOCAL_INCLUDES tag is set to YES then doxygen will list include # files with double quotes in the documentation rather than with sharp brackets. # The default value is: NO. FORCE_LOCAL_INCLUDES = NO # If the INLINE_INFO tag is set to YES then a tag [inline] is inserted in the # documentation for inline members. # The default value is: YES. INLINE_INFO = YES # If the SORT_MEMBER_DOCS tag is set to YES then doxygen will sort the # (detailed) documentation of file and class members alphabetically by member # name. If set to NO, the members will appear in declaration order. # The default value is: YES. SORT_MEMBER_DOCS = YES # If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the brief # descriptions of file, namespace and class members alphabetically by member # name. If set to NO, the members will appear in declaration order. Note that # this will also influence the order of the classes in the class list. # The default value is: NO. SORT_BRIEF_DOCS = NO # If the SORT_MEMBERS_CTORS_1ST tag is set to YES then doxygen will sort the # (brief and detailed) documentation of class members so that constructors and # destructors are listed first. If set to NO the constructors will appear in the # respective orders defined by SORT_BRIEF_DOCS and SORT_MEMBER_DOCS. # Note: If SORT_BRIEF_DOCS is set to NO this option is ignored for sorting brief # member documentation. # Note: If SORT_MEMBER_DOCS is set to NO this option is ignored for sorting # detailed member documentation. # The default value is: NO. SORT_MEMBERS_CTORS_1ST = NO # If the SORT_GROUP_NAMES tag is set to YES then doxygen will sort the hierarchy # of group names into alphabetical order. If set to NO the group names will # appear in their defined order. # The default value is: NO. SORT_GROUP_NAMES = NO # If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be sorted by # fully-qualified names, including namespaces. If set to NO, the class list will # be sorted only by class name, not including the namespace part. # Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES. # Note: This option applies only to the class list, not to the alphabetical # list. # The default value is: NO. SORT_BY_SCOPE_NAME = NO # If the STRICT_PROTO_MATCHING option is enabled and doxygen fails to do proper # type resolution of all parameters of a function it will reject a match between # the prototype and the implementation of a member function even if there is # only one candidate or it is obvious which candidate to choose by doing a # simple string match. By disabling STRICT_PROTO_MATCHING doxygen will still # accept a match between prototype and implementation in such cases. # The default value is: NO. STRICT_PROTO_MATCHING = NO # The GENERATE_TODOLIST tag can be used to enable (YES) or disable (NO) the todo # list. This list is created by putting \todo commands in the documentation. # The default value is: YES. GENERATE_TODOLIST = YES # The GENERATE_TESTLIST tag can be used to enable (YES) or disable (NO) the test # list. This list is created by putting \test commands in the documentation. # The default value is: YES. GENERATE_TESTLIST = YES # The GENERATE_BUGLIST tag can be used to enable (YES) or disable (NO) the bug # list. This list is created by putting \bug commands in the documentation. # The default value is: YES. GENERATE_BUGLIST = YES # The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or disable (NO) # the deprecated list. This list is created by putting \deprecated commands in # the documentation. # The default value is: YES. GENERATE_DEPRECATEDLIST= YES # The ENABLED_SECTIONS tag can be used to enable conditional documentation # sections, marked by \if <section_label> ... \endif and \cond <section_label> # ... \endcond blocks. ENABLED_SECTIONS = # The MAX_INITIALIZER_LINES tag determines the maximum number of lines that the # initial value of a variable or macro / define can have for it to appear in the # documentation. If the initializer consists of more lines than specified here # it will be hidden. Use a value of 0 to hide initializers completely. The # appearance of the value of individual variables and macros / defines can be # controlled using \showinitializer or \hideinitializer command in the # documentation regardless of this setting. # Minimum value: 0, maximum value: 10000, default value: 30. MAX_INITIALIZER_LINES = 30 # Set the SHOW_USED_FILES tag to NO to disable the list of files generated at # the bottom of the documentation of classes and structs. If set to YES, the # list will mention the files that were used to generate the documentation. # The default value is: YES. SHOW_USED_FILES = YES # Set the SHOW_FILES tag to NO to disable the generation of the Files page. This # will remove the Files entry from the Quick Index and from the Folder Tree View # (if specified). # The default value is: YES. SHOW_FILES = YES # Set the SHOW_NAMESPACES tag to NO to disable the generation of the Namespaces # page. This will remove the Namespaces entry from the Quick Index and from the # Folder Tree View (if specified). # The default value is: YES. SHOW_NAMESPACES = YES # The FILE_VERSION_FILTER tag can be used to specify a program or script that # doxygen should invoke to get the current version for each file (typically from # the version control system). Doxygen will invoke the program by executing (via # popen()) the command command input-file, where command is the value of the # FILE_VERSION_FILTER tag, and input-file is the name of an input file provided # by doxygen. Whatever the program writes to standard output is used as the file # version. For an example see the documentation. FILE_VERSION_FILTER = # The LAYOUT_FILE tag can be used to specify a layout file which will be parsed # by doxygen. The layout file controls the global structure of the generated # output files in an output format independent way. To create the layout file # that represents doxygen's defaults, run doxygen with the -l option. You can # optionally specify a file name after the option, if omitted DoxygenLayout.xml # will be used as the name of the layout file. See also section "Changing the # layout of pages" for information. # # Note that if you run doxygen from a directory containing a file called # DoxygenLayout.xml, doxygen will parse it automatically even if the LAYOUT_FILE # tag is left empty. LAYOUT_FILE = # The CITE_BIB_FILES tag can be used to specify one or more bib files containing # the reference definitions. This must be a list of .bib files. The .bib # extension is automatically appended if omitted. This requires the bibtex tool # to be installed. See also https://en.wikipedia.org/wiki/BibTeX for more info. # For LaTeX the style of the bibliography can be controlled using # LATEX_BIB_STYLE. To use this feature you need bibtex and perl available in the # search path. See also \cite for info how to create references. CITE_BIB_FILES = #--------------------------------------------------------------------------- # Configuration options related to warning and progress messages #--------------------------------------------------------------------------- # The QUIET tag can be used to turn on/off the messages that are generated to # standard output by doxygen. If QUIET is set to YES this implies that the # messages are off. # The default value is: NO. QUIET = NO # The WARNINGS tag can be used to turn on/off the warning messages that are # generated to standard error (stderr) by doxygen. If WARNINGS is set to YES # this implies that the warnings are on. # # Tip: Turn warnings on while writing the documentation. # The default value is: YES. WARNINGS = YES # If the WARN_IF_UNDOCUMENTED tag is set to YES then doxygen will generate # warnings for undocumented members. If EXTRACT_ALL is set to YES then this flag # will automatically be disabled. # The default value is: YES. WARN_IF_UNDOCUMENTED = NO # If the WARN_IF_DOC_ERROR tag is set to YES, doxygen will generate warnings for # potential errors in the documentation, such as documenting some parameters in # a documented function twice, or documenting parameters that don't exist or # using markup commands wrongly. # The default value is: YES. WARN_IF_DOC_ERROR = YES # If WARN_IF_INCOMPLETE_DOC is set to YES, doxygen will warn about incomplete # function parameter documentation. If set to NO, doxygen will accept that some # parameters have no documentation without warning. # The default value is: YES. WARN_IF_INCOMPLETE_DOC = YES # This WARN_NO_PARAMDOC option can be enabled to get warnings for functions that # are documented, but have no documentation for their parameters or return # value. If set to NO, doxygen will only warn about wrong parameter # documentation, but not about the absence of documentation. If EXTRACT_ALL is # set to YES then this flag will automatically be disabled. See also # WARN_IF_INCOMPLETE_DOC # The default value is: NO. WARN_NO_PARAMDOC = NO # If the WARN_AS_ERROR tag is set to YES then doxygen will immediately stop when # a warning is encountered. If the WARN_AS_ERROR tag is set to FAIL_ON_WARNINGS # then doxygen will continue running as if WARN_AS_ERROR tag is set to NO, but # at the end of the doxygen process doxygen will return with a non-zero status. # Possible values are: NO, YES and FAIL_ON_WARNINGS. # The default value is: NO. WARN_AS_ERROR = NO # The WARN_FORMAT tag determines the format of the warning messages that doxygen # can produce. The string should contain the $file, $line, and $text tags, which # will be replaced by the file and line number from which the warning originated # and the warning text. Optionally the format may contain $version, which will # be replaced by the version of the file (if it could be obtained via # FILE_VERSION_FILTER) # See also: WARN_LINE_FORMAT # The default value is: $file:$line: $text. WARN_FORMAT = "$file:$line: $text" # In the $text part of the WARN_FORMAT command it is possible that a reference # to a more specific place is given. To make it easier to jump to this place # (outside of doxygen) the user can define a custom "cut" / "paste" string. # Example: # WARN_LINE_FORMAT = "'vi $file +$line'" # See also: WARN_FORMAT # The default value is: at line $line of file $file. WARN_LINE_FORMAT = "at line $line of file $file" # The WARN_LOGFILE tag can be used to specify a file to which warning and error # messages should be written. If left blank the output is written to standard # error (stderr). In case the file specified cannot be opened for writing the # warning and error messages are written to standard error. When as file - is # specified the warning and error messages are written to standard output # (stdout). WARN_LOGFILE = #--------------------------------------------------------------------------- # Configuration options related to the input files #--------------------------------------------------------------------------- # The INPUT tag is used to specify the files and/or directories that contain # documented source files. You may enter file names like myfile.cpp or # directories like /usr/src/myproject. Separate the files or directories with # spaces. See also FILE_PATTERNS and EXTENSION_MAPPING # Note: If this tag is empty the current directory is searched. INPUT = ##SRCDIR##/src # This tag can be used to specify the character encoding of the source files # that doxygen parses. Internally doxygen uses the UTF-8 encoding. Doxygen uses # libiconv (or the iconv built into libc) for the transcoding. See the libiconv # documentation (see: # https://www.gnu.org/software/libiconv/) for the list of possible encodings. # The default value is: UTF-8. INPUT_ENCODING = UTF-8 # If the value of the INPUT tag contains directories, you can use the # FILE_PATTERNS tag to specify one or more wildcard patterns (like *.cpp and # *.h) to filter out the source-files in the directories. # # Note that for custom extensions or not directly supported extensions you also # need to set EXTENSION_MAPPING for the extension otherwise the files are not # read by doxygen. # # Note the list of default checked file patterns might differ from the list of # default file extension mappings. # # If left blank the following patterns are tested:*.c, *.cc, *.cxx, *.cpp, # *.c++, *.java, *.ii, *.ixx, *.ipp, *.i++, *.inl, *.idl, *.ddl, *.odl, *.h, # *.hh, *.hxx, *.hpp, *.h++, *.l, *.cs, *.d, *.php, *.php4, *.php5, *.phtml, # *.inc, *.m, *.markdown, *.md, *.mm, *.dox (to be provided as doxygen C # comment), *.py, *.pyw, *.f90, *.f95, *.f03, *.f08, *.f18, *.f, *.for, *.vhd, # *.vhdl, *.ucf, *.qsf and *.ice. FILE_PATTERNS = *.c \ *.cc \ *.cxx \ *.cpp \ *.c++ \ *.java \ *.ii \ *.ixx \ *.ipp \ *.i++ \ *.inl \ *.idl \ *.ddl \ *.odl \ *.h \ *.hh \ *.hxx \ *.hpp \ *.h++ \ *.cs \ *.d \ *.php \ *.php4 \ *.php5 \ *.phtml \ *.inc \ *.m \ *.markdown \ *.md \ *.mm \ *.dox \ *.py \ *.pyw \ *.f90 \ *.f95 \ *.f03 \ *.f08 \ *.f18 \ *.f \ *.for \ *.vhd \ *.vhdl \ *.ucf \ *.qsf \ *.ice # The RECURSIVE tag can be used to specify whether or not subdirectories should # be searched for input files as well. # The default value is: NO. RECURSIVE = NO # The EXCLUDE tag can be used to specify files and/or directories that should be # excluded from the INPUT source files. This way you can easily exclude a # subdirectory from a directory tree whose root is specified with the INPUT tag. # # Note that relative paths are relative to the directory from which doxygen is # run. EXCLUDE = # The EXCLUDE_SYMLINKS tag can be used to select whether or not files or # directories that are symbolic links (a Unix file system feature) are excluded # from the input. # The default value is: NO. EXCLUDE_SYMLINKS = NO # If the value of the INPUT tag contains directories, you can use the # EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude # certain files from those directories. # # Note that the wildcards are matched against the file with absolute path, so to # exclude all test directories for example use the pattern */test/* EXCLUDE_PATTERNS = # The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names # (namespaces, classes, functions, etc.) that should be excluded from the # output. The symbol name can be a fully qualified name, a word, or if the # wildcard * is used, a substring. Examples: ANamespace, AClass, # ANamespace::AClass, ANamespace::*Test # # Note that the wildcards are matched against the file with absolute path, so to # exclude all test directories use the pattern */test/* EXCLUDE_SYMBOLS = # The EXAMPLE_PATH tag can be used to specify one or more files or directories # that contain example code fragments that are included (see the \include # command). EXAMPLE_PATH = # If the value of the EXAMPLE_PATH tag contains directories, you can use the # EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp and # *.h) to filter out the source-files in the directories. If left blank all # files are included. EXAMPLE_PATTERNS = * # If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be # searched for input files to be used with the \include or \dontinclude commands # irrespective of the value of the RECURSIVE tag. # The default value is: NO. EXAMPLE_RECURSIVE = NO # The IMAGE_PATH tag can be used to specify one or more files or directories # that contain images that are to be included in the documentation (see the # \image command). IMAGE_PATH = # The INPUT_FILTER tag can be used to specify a program that doxygen should # invoke to filter for each input file. Doxygen will invoke the filter program # by executing (via popen()) the command: # # <filter> <input-file> # # where <filter> is the value of the INPUT_FILTER tag, and <input-file> is the # name of an input file. Doxygen will then use the output that the filter # program writes to standard output. If FILTER_PATTERNS is specified, this tag # will be ignored. # # Note that the filter must not add or remove lines; it is applied before the # code is scanned, but not when the output code is generated. If lines are added # or removed, the anchors will not be placed correctly. # # Note that for custom extensions or not directly supported extensions you also # need to set EXTENSION_MAPPING for the extension otherwise the files are not # properly processed by doxygen. INPUT_FILTER = # The FILTER_PATTERNS tag can be used to specify filters on a per file pattern # basis. Doxygen will compare the file name with each pattern and apply the # filter if there is a match. The filters are a list of the form: pattern=filter # (like *.cpp=my_cpp_filter). See INPUT_FILTER for further information on how # filters are used. If the FILTER_PATTERNS tag is empty or if none of the # patterns match the file name, INPUT_FILTER is applied. # # Note that for custom extensions or not directly supported extensions you also # need to set EXTENSION_MAPPING for the extension otherwise the files are not # properly processed by doxygen. FILTER_PATTERNS = # If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using # INPUT_FILTER) will also be used to filter the input files that are used for # producing the source files to browse (i.e. when SOURCE_BROWSER is set to YES). # The default value is: NO. FILTER_SOURCE_FILES = NO # The FILTER_SOURCE_PATTERNS tag can be used to specify source filters per file # pattern. A pattern will override the setting for FILTER_PATTERN (if any) and # it is also possible to disable source filtering for a specific pattern using # *.ext= (so without naming a filter). # This tag requires that the tag FILTER_SOURCE_FILES is set to YES. FILTER_SOURCE_PATTERNS = # If the USE_MDFILE_AS_MAINPAGE tag refers to the name of a markdown file that # is part of the input, its contents will be placed on the main page # (index.html). This can be useful if you have a project on for instance GitHub # and want to reuse the introduction page also for the doxygen output. USE_MDFILE_AS_MAINPAGE = #--------------------------------------------------------------------------- # Configuration options related to source browsing #--------------------------------------------------------------------------- # If the SOURCE_BROWSER tag is set to YES then a list of source files will be # generated. Documented entities will be cross-referenced with these sources. # # Note: To get rid of all source code in the generated output, make sure that # also VERBATIM_HEADERS is set to NO. # The default value is: NO. SOURCE_BROWSER = NO # Setting the INLINE_SOURCES tag to YES will include the body of functions, # classes and enums directly into the documentation. # The default value is: NO. INLINE_SOURCES = NO # Setting the STRIP_CODE_COMMENTS tag to YES will instruct doxygen to hide any # special comment blocks from generated source code fragments. Normal C, C++ and # Fortran comments will always remain visible. # The default value is: YES. STRIP_CODE_COMMENTS = YES # If the REFERENCED_BY_RELATION tag is set to YES then for each documented # entity all documented functions referencing it will be listed. # The default value is: NO. REFERENCED_BY_RELATION = NO # If the REFERENCES_RELATION tag is set to YES then for each documented function # all documented entities called/used by that function will be listed. # The default value is: NO. REFERENCES_RELATION = NO # If the REFERENCES_LINK_SOURCE tag is set to YES and SOURCE_BROWSER tag is set # to YES then the hyperlinks from functions in REFERENCES_RELATION and # REFERENCED_BY_RELATION lists will link to the source code. Otherwise they will # link to the documentation. # The default value is: YES. REFERENCES_LINK_SOURCE = YES # If SOURCE_TOOLTIPS is enabled (the default) then hovering a hyperlink in the # source code will show a tooltip with additional information such as prototype, # brief description and links to the definition and documentation. Since this # will make the HTML file larger and loading of large files a bit slower, you # can opt to disable this feature. # The default value is: YES. # This tag requires that the tag SOURCE_BROWSER is set to YES. SOURCE_TOOLTIPS = YES # If the USE_HTAGS tag is set to YES then the references to source code will # point to the HTML generated by the htags(1) tool instead of doxygen built-in # source browser. The htags tool is part of GNU's global source tagging system # (see https://www.gnu.org/software/global/global.html). You will need version # 4.8.6 or higher. # # To use it do the following: # - Install the latest version of global # - Enable SOURCE_BROWSER and USE_HTAGS in the configuration file # - Make sure the INPUT points to the root of the source tree # - Run doxygen as normal # # Doxygen will invoke htags (and that will in turn invoke gtags), so these # tools must be available from the command line (i.e. in the search path). # # The result: instead of the source browser generated by doxygen, the links to # source code will now point to the output of htags. # The default value is: NO. # This tag requires that the tag SOURCE_BROWSER is set to YES. USE_HTAGS = NO # If the VERBATIM_HEADERS tag is set the YES then doxygen will generate a # verbatim copy of the header file for each class for which an include is # specified. Set to NO to disable this. # See also: Section \class. # The default value is: YES. VERBATIM_HEADERS = YES # If the CLANG_ASSISTED_PARSING tag is set to YES then doxygen will use the # clang parser (see: # http://clang.llvm.org/) for more accurate parsing at the cost of reduced # performance. This can be particularly helpful with template rich C++ code for # which doxygen's built-in parser lacks the necessary type information. # Note: The availability of this option depends on whether or not doxygen was # generated with the -Duse_libclang=ON option for CMake. # The default value is: NO. CLANG_ASSISTED_PARSING = NO # If the CLANG_ASSISTED_PARSING tag is set to YES and the CLANG_ADD_INC_PATHS # tag is set to YES then doxygen will add the directory of each input to the # include path. # The default value is: YES. # This tag requires that the tag CLANG_ASSISTED_PARSING is set to YES. CLANG_ADD_INC_PATHS = YES # If clang assisted parsing is enabled you can provide the compiler with command # line options that you would normally use when invoking the compiler. Note that # the include paths will already be set by doxygen for the files and directories # specified with INPUT and INCLUDE_PATH. # This tag requires that the tag CLANG_ASSISTED_PARSING is set to YES. CLANG_OPTIONS = # If clang assisted parsing is enabled you can provide the clang parser with the # path to the directory containing a file called compile_commands.json. This # file is the compilation database (see: # http://clang.llvm.org/docs/HowToSetupToolingForLLVM.html) containing the # options used when the source files were built. This is equivalent to # specifying the -p option to a clang tool, such as clang-check. These options # will then be passed to the parser. Any options specified with CLANG_OPTIONS # will be added as well. # Note: The availability of this option depends on whether or not doxygen was # generated with the -Duse_libclang=ON option for CMake. CLANG_DATABASE_PATH = #--------------------------------------------------------------------------- # Configuration options related to the alphabetical class index #--------------------------------------------------------------------------- # If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index of all # compounds will be generated. Enable this if the project contains a lot of # classes, structs, unions or interfaces. # The default value is: YES. ALPHABETICAL_INDEX = YES # In case all classes in a project start with a common prefix, all classes will # be put under the same header in the alphabetical index. The IGNORE_PREFIX tag # can be used to specify a prefix (or a list of prefixes) that should be ignored # while generating the index headers. # This tag requires that the tag ALPHABETICAL_INDEX is set to YES. IGNORE_PREFIX = #--------------------------------------------------------------------------- # Configuration options related to the HTML output #--------------------------------------------------------------------------- # If the GENERATE_HTML tag is set to YES, doxygen will generate HTML output # The default value is: YES. GENERATE_HTML = YES # The HTML_OUTPUT tag is used to specify where the HTML docs will be put. If a # relative path is entered the value of OUTPUT_DIRECTORY will be put in front of # it. # The default directory is: html. # This tag requires that the tag GENERATE_HTML is set to YES. HTML_OUTPUT = html # The HTML_FILE_EXTENSION tag can be used to specify the file extension for each # generated HTML page (for example: .htm, .php, .asp). # The default value is: .html. # This tag requires that the tag GENERATE_HTML is set to YES. HTML_FILE_EXTENSION = .html # The HTML_HEADER tag can be used to specify a user-defined HTML header file for # each generated HTML page. If the tag is left blank doxygen will generate a # standard header. # # To get valid HTML the header file that includes any scripts and style sheets # that doxygen needs, which is dependent on the configuration options used (e.g. # the setting GENERATE_TREEVIEW). It is highly recommended to start with a # default header using # doxygen -w html new_header.html new_footer.html new_stylesheet.css # YourConfigFile # and then modify the file new_header.html. See also section "Doxygen usage" # for information on how to generate the default header that doxygen normally # uses. # Note: The header is subject to change so you typically have to regenerate the # default header when upgrading to a newer version of doxygen. For a description # of the possible markers and block names see the documentation. # This tag requires that the tag GENERATE_HTML is set to YES. HTML_HEADER = # The HTML_FOOTER tag can be used to specify a user-defined HTML footer for each # generated HTML page. If the tag is left blank doxygen will generate a standard # footer. See HTML_HEADER for more information on how to generate a default # footer and what special commands can be used inside the footer. See also # section "Doxygen usage" for information on how to generate the default footer # that doxygen normally uses. # This tag requires that the tag GENERATE_HTML is set to YES. HTML_FOOTER = # The HTML_STYLESHEET tag can be used to specify a user-defined cascading style # sheet that is used by each HTML page. It can be used to fine-tune the look of # the HTML output. If left blank doxygen will generate a default style sheet. # See also section "Doxygen usage" for information on how to generate the style # sheet that doxygen normally uses. # Note: It is recommended to use HTML_EXTRA_STYLESHEET instead of this tag, as # it is more robust and this tag (HTML_STYLESHEET) will in the future become # obsolete. # This tag requires that the tag GENERATE_HTML is set to YES. HTML_STYLESHEET = # The HTML_EXTRA_STYLESHEET tag can be used to specify additional user-defined # cascading style sheets that are included after the standard style sheets # created by doxygen. Using this option one can overrule certain style aspects. # This is preferred over using HTML_STYLESHEET since it does not replace the # standard style sheet and is therefore more robust against future updates. # Doxygen will copy the style sheet files to the output directory. # Note: The order of the extra style sheet files is of importance (e.g. the last # style sheet in the list overrules the setting of the previous ones in the # list). For an example see the documentation. # This tag requires that the tag GENERATE_HTML is set to YES. HTML_EXTRA_STYLESHEET = # The HTML_EXTRA_FILES tag can be used to specify one or more extra images or # other source files which should be copied to the HTML output directory. Note # that these files will be copied to the base HTML output directory. Use the # $relpath^ marker in the HTML_HEADER and/or HTML_FOOTER files to load these # files. In the HTML_STYLESHEET file, use the file name only. Also note that the # files will be copied as-is; there are no commands or markers available. # This tag requires that the tag GENERATE_HTML is set to YES. HTML_EXTRA_FILES = # The HTML_COLORSTYLE_HUE tag controls the color of the HTML output. Doxygen # will adjust the colors in the style sheet and background images according to # this color. Hue is specified as an angle on a color-wheel, see # https://en.wikipedia.org/wiki/Hue for more information. For instance the value # 0 represents red, 60 is yellow, 120 is green, 180 is cyan, 240 is blue, 300 # purple, and 360 is red again. # Minimum value: 0, maximum value: 359, default value: 220. # This tag requires that the tag GENERATE_HTML is set to YES. HTML_COLORSTYLE_HUE = 220 # The HTML_COLORSTYLE_SAT tag controls the purity (or saturation) of the colors # in the HTML output. For a value of 0 the output will use gray-scales only. A # value of 255 will produce the most vivid colors. # Minimum value: 0, maximum value: 255, default value: 100. # This tag requires that the tag GENERATE_HTML is set to YES. HTML_COLORSTYLE_SAT = 100 # The HTML_COLORSTYLE_GAMMA tag controls the gamma correction applied to the # luminance component of the colors in the HTML output. Values below 100 # gradually make the output lighter, whereas values above 100 make the output # darker. The value divided by 100 is the actual gamma applied, so 80 represents # a gamma of 0.8, The value 220 represents a gamma of 2.2, and 100 does not # change the gamma. # Minimum value: 40, maximum value: 240, default value: 80. # This tag requires that the tag GENERATE_HTML is set to YES. HTML_COLORSTYLE_GAMMA = 80 # If the HTML_TIMESTAMP tag is set to YES then the footer of each generated HTML # page will contain the date and time when the page was generated. Setting this # to YES can help to show when doxygen was last run and thus if the # documentation is up to date. # The default value is: NO. # This tag requires that the tag GENERATE_HTML is set to YES. HTML_TIMESTAMP = NO # If the HTML_DYNAMIC_MENUS tag is set to YES then the generated HTML # documentation will contain a main index with vertical navigation menus that # are dynamically created via JavaScript. If disabled, the navigation index will # consists of multiple levels of tabs that are statically embedded in every HTML # page. Disable this option to support browsers that do not have JavaScript, # like the Qt help browser. # The default value is: YES. # This tag requires that the tag GENERATE_HTML is set to YES. HTML_DYNAMIC_MENUS = YES # If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML # documentation will contain sections that can be hidden and shown after the # page has loaded. # The default value is: NO. # This tag requires that the tag GENERATE_HTML is set to YES. HTML_DYNAMIC_SECTIONS = NO # With HTML_INDEX_NUM_ENTRIES one can control the preferred number of entries # shown in the various tree structured indices initially; the user can expand # and collapse entries dynamically later on. Doxygen will expand the tree to # such a level that at most the specified number of entries are visible (unless # a fully collapsed tree already exceeds this amount). So setting the number of # entries 1 will produce a full collapsed tree by default. 0 is a special value # representing an infinite number of entries and will result in a full expanded # tree by default. # Minimum value: 0, maximum value: 9999, default value: 100. # This tag requires that the tag GENERATE_HTML is set to YES. HTML_INDEX_NUM_ENTRIES = 100 # If the GENERATE_DOCSET tag is set to YES, additional index files will be # generated that can be used as input for Apple's Xcode 3 integrated development # environment (see: # https://developer.apple.com/xcode/), introduced with OSX 10.5 (Leopard). To # create a documentation set, doxygen will generate a Makefile in the HTML # output directory. Running make will produce the docset in that directory and # running make install will install the docset in # ~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find it at # startup. See https://developer.apple.com/library/archive/featuredarticles/Doxy # genXcode/_index.html for more information. # The default value is: NO. # This tag requires that the tag GENERATE_HTML is set to YES. GENERATE_DOCSET = NO # This tag determines the name of the docset feed. A documentation feed provides # an umbrella under which multiple documentation sets from a single provider # (such as a company or product suite) can be grouped. # The default value is: Doxygen generated docs. # This tag requires that the tag GENERATE_DOCSET is set to YES. DOCSET_FEEDNAME = "Doxygen generated docs" # This tag determines the URL of the docset feed. A documentation feed provides # an umbrella under which multiple documentation sets from a single provider # (such as a company or product suite) can be grouped. # This tag requires that the tag GENERATE_DOCSET is set to YES. DOCSET_FEEDURL = # This tag specifies a string that should uniquely identify the documentation # set bundle. This should be a reverse domain-name style string, e.g. # com.mycompany.MyDocSet. Doxygen will append .docset to the name. # The default value is: org.doxygen.Project. # This tag requires that the tag GENERATE_DOCSET is set to YES. DOCSET_BUNDLE_ID = org.doxygen.Project # The DOCSET_PUBLISHER_ID tag specifies a string that should uniquely identify # the documentation publisher. This should be a reverse domain-name style # string, e.g. com.mycompany.MyDocSet.documentation. # The default value is: org.doxygen.Publisher. # This tag requires that the tag GENERATE_DOCSET is set to YES. DOCSET_PUBLISHER_ID = org.doxygen.Publisher # The DOCSET_PUBLISHER_NAME tag identifies the documentation publisher. # The default value is: Publisher. # This tag requires that the tag GENERATE_DOCSET is set to YES. DOCSET_PUBLISHER_NAME = Publisher # If the GENERATE_HTMLHELP tag is set to YES then doxygen generates three # additional HTML index files: index.hhp, index.hhc, and index.hhk. The # index.hhp is a project file that can be read by Microsoft's HTML Help Workshop # on Windows. In the beginning of 2021 Microsoft took the original page, with # a.o. the download links, offline the HTML help workshop was already many years # in maintenance mode). You can download the HTML help workshop from the web # archives at Installation executable (see: # http://web.archive.org/web/20160201063255/http://download.microsoft.com/downlo # ad/0/A/9/0A939EF6-E31C-430F-A3DF-DFAE7960D564/htmlhelp.exe). # # The HTML Help Workshop contains a compiler that can convert all HTML output # generated by doxygen into a single compiled HTML file (.chm). Compiled HTML # files are now used as the Windows 98 help format, and will replace the old # Windows help format (.hlp) on all Windows platforms in the future. Compressed # HTML files also contain an index, a table of contents, and you can search for # words in the documentation. The HTML workshop also contains a viewer for # compressed HTML files. # The default value is: NO. # This tag requires that the tag GENERATE_HTML is set to YES. GENERATE_HTMLHELP = NO # The CHM_FILE tag can be used to specify the file name of the resulting .chm # file. You can add a path in front of the file if the result should not be # written to the html output directory. # This tag requires that the tag GENERATE_HTMLHELP is set to YES. CHM_FILE = # The HHC_LOCATION tag can be used to specify the location (absolute path # including file name) of the HTML help compiler (hhc.exe). If non-empty, # doxygen will try to run the HTML help compiler on the generated index.hhp. # The file has to be specified with full path. # This tag requires that the tag GENERATE_HTMLHELP is set to YES. HHC_LOCATION = # The GENERATE_CHI flag controls if a separate .chi index file is generated # (YES) or that it should be included in the main .chm file (NO). # The default value is: NO. # This tag requires that the tag GENERATE_HTMLHELP is set to YES. GENERATE_CHI = NO # The CHM_INDEX_ENCODING is used to encode HtmlHelp index (hhk), content (hhc) # and project file content. # This tag requires that the tag GENERATE_HTMLHELP is set to YES. CHM_INDEX_ENCODING = # The BINARY_TOC flag controls whether a binary table of contents is generated # (YES) or a normal table of contents (NO) in the .chm file. Furthermore it # enables the Previous and Next buttons. # The default value is: NO. # This tag requires that the tag GENERATE_HTMLHELP is set to YES. BINARY_TOC = NO # The TOC_EXPAND flag can be set to YES to add extra items for group members to # the table of contents of the HTML help documentation and to the tree view. # The default value is: NO. # This tag requires that the tag GENERATE_HTMLHELP is set to YES. TOC_EXPAND = NO # If the GENERATE_QHP tag is set to YES and both QHP_NAMESPACE and # QHP_VIRTUAL_FOLDER are set, an additional index file will be generated that # can be used as input for Qt's qhelpgenerator to generate a Qt Compressed Help # (.qch) of the generated HTML documentation. # The default value is: NO. # This tag requires that the tag GENERATE_HTML is set to YES. GENERATE_QHP = NO # If the QHG_LOCATION tag is specified, the QCH_FILE tag can be used to specify # the file name of the resulting .qch file. The path specified is relative to # the HTML output folder. # This tag requires that the tag GENERATE_QHP is set to YES. QCH_FILE = # The QHP_NAMESPACE tag specifies the namespace to use when generating Qt Help # Project output. For more information please see Qt Help Project / Namespace # (see: # https://doc.qt.io/archives/qt-4.8/qthelpproject.html#namespace). # The default value is: org.doxygen.Project. # This tag requires that the tag GENERATE_QHP is set to YES. QHP_NAMESPACE = org.doxygen.Project # The QHP_VIRTUAL_FOLDER tag specifies the namespace to use when generating Qt # Help Project output. For more information please see Qt Help Project / Virtual # Folders (see: # https://doc.qt.io/archives/qt-4.8/qthelpproject.html#virtual-folders). # The default value is: doc. # This tag requires that the tag GENERATE_QHP is set to YES. QHP_VIRTUAL_FOLDER = doc # If the QHP_CUST_FILTER_NAME tag is set, it specifies the name of a custom # filter to add. For more information please see Qt Help Project / Custom # Filters (see: # https://doc.qt.io/archives/qt-4.8/qthelpproject.html#custom-filters). # This tag requires that the tag GENERATE_QHP is set to YES. QHP_CUST_FILTER_NAME = # The QHP_CUST_FILTER_ATTRS tag specifies the list of the attributes of the # custom filter to add. For more information please see Qt Help Project / Custom # Filters (see: # https://doc.qt.io/archives/qt-4.8/qthelpproject.html#custom-filters). # This tag requires that the tag GENERATE_QHP is set to YES. QHP_CUST_FILTER_ATTRS = # The QHP_SECT_FILTER_ATTRS tag specifies the list of the attributes this # project's filter section matches. Qt Help Project / Filter Attributes (see: # https://doc.qt.io/archives/qt-4.8/qthelpproject.html#filter-attributes). # This tag requires that the tag GENERATE_QHP is set to YES. QHP_SECT_FILTER_ATTRS = # The QHG_LOCATION tag can be used to specify the location (absolute path # including file name) of Qt's qhelpgenerator. If non-empty doxygen will try to # run qhelpgenerator on the generated .qhp file. # This tag requires that the tag GENERATE_QHP is set to YES. QHG_LOCATION = # If the GENERATE_ECLIPSEHELP tag is set to YES, additional index files will be # generated, together with the HTML files, they form an Eclipse help plugin. To # install this plugin and make it available under the help contents menu in # Eclipse, the contents of the directory containing the HTML and XML files needs # to be copied into the plugins directory of eclipse. The name of the directory # within the plugins directory should be the same as the ECLIPSE_DOC_ID value. # After copying Eclipse needs to be restarted before the help appears. # The default value is: NO. # This tag requires that the tag GENERATE_HTML is set to YES. GENERATE_ECLIPSEHELP = NO # A unique identifier for the Eclipse help plugin. When installing the plugin # the directory name containing the HTML and XML files should also have this # name. Each documentation set should have its own identifier. # The default value is: org.doxygen.Project. # This tag requires that the tag GENERATE_ECLIPSEHELP is set to YES. ECLIPSE_DOC_ID = org.doxygen.Project # If you want full control over the layout of the generated HTML pages it might # be necessary to disable the index and replace it with your own. The # DISABLE_INDEX tag can be used to turn on/off the condensed index (tabs) at top # of each HTML page. A value of NO enables the index and the value YES disables # it. Since the tabs in the index contain the same information as the navigation # tree, you can set this option to YES if you also set GENERATE_TREEVIEW to YES. # The default value is: NO. # This tag requires that the tag GENERATE_HTML is set to YES. DISABLE_INDEX = NO # The GENERATE_TREEVIEW tag is used to specify whether a tree-like index # structure should be generated to display hierarchical information. If the tag # value is set to YES, a side panel will be generated containing a tree-like # index structure (just like the one that is generated for HTML Help). For this # to work a browser that supports JavaScript, DHTML, CSS and frames is required # (i.e. any modern browser). Windows users are probably better off using the # HTML help feature. Via custom style sheets (see HTML_EXTRA_STYLESHEET) one can # further fine tune the look of the index (see "Fine-tuning the output"). As an # example, the default style sheet generated by doxygen has an example that # shows how to put an image at the root of the tree instead of the PROJECT_NAME. # Since the tree basically has the same information as the tab index, you could # consider setting DISABLE_INDEX to YES when enabling this option. # The default value is: NO. # This tag requires that the tag GENERATE_HTML is set to YES. GENERATE_TREEVIEW = NO # When both GENERATE_TREEVIEW and DISABLE_INDEX are set to YES, then the # FULL_SIDEBAR option determines if the side bar is limited to only the treeview # area (value NO) or if it should extend to the full height of the window (value # YES). Setting this to YES gives a layout similar to # https://docs.readthedocs.io with more room for contents, but less room for the # project logo, title, and description. If either GENERATE_TREEVIEW or # DISABLE_INDEX is set to NO, this option has no effect. # The default value is: NO. # This tag requires that the tag GENERATE_HTML is set to YES. FULL_SIDEBAR = NO # The ENUM_VALUES_PER_LINE tag can be used to set the number of enum values that # doxygen will group on one line in the generated HTML documentation. # # Note that a value of 0 will completely suppress the enum values from appearing # in the overview section. # Minimum value: 0, maximum value: 20, default value: 4. # This tag requires that the tag GENERATE_HTML is set to YES. ENUM_VALUES_PER_LINE = 4 # If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be used # to set the initial width (in pixels) of the frame in which the tree is shown. # Minimum value: 0, maximum value: 1500, default value: 250. # This tag requires that the tag GENERATE_HTML is set to YES. TREEVIEW_WIDTH = 250 # If the EXT_LINKS_IN_WINDOW option is set to YES, doxygen will open links to # external symbols imported via tag files in a separate window. # The default value is: NO. # This tag requires that the tag GENERATE_HTML is set to YES. EXT_LINKS_IN_WINDOW = NO # If the OBFUSCATE_EMAILS tag is set to YES, doxygen will obfuscate email # addresses. # The default value is: YES. # This tag requires that the tag GENERATE_HTML is set to YES. OBFUSCATE_EMAILS = YES # If the HTML_FORMULA_FORMAT option is set to svg, doxygen will use the pdf2svg # tool (see https://github.com/dawbarton/pdf2svg) or inkscape (see # https://inkscape.org) to generate formulas as SVG images instead of PNGs for # the HTML output. These images will generally look nicer at scaled resolutions. # Possible values are: png (the default) and svg (looks nicer but requires the # pdf2svg or inkscape tool). # The default value is: png. # This tag requires that the tag GENERATE_HTML is set to YES. HTML_FORMULA_FORMAT = png # Use this tag to change the font size of LaTeX formulas included as images in # the HTML documentation. When you change the font size after a successful # doxygen run you need to manually remove any form_*.png images from the HTML # output directory to force them to be regenerated. # Minimum value: 8, maximum value: 50, default value: 10. # This tag requires that the tag GENERATE_HTML is set to YES. FORMULA_FONTSIZE = 10 # Use the FORMULA_TRANSPARENT tag to determine whether or not the images # generated for formulas are transparent PNGs. Transparent PNGs are not # supported properly for IE 6.0, but are supported on all modern browsers. # # Note that when changing this option you need to delete any form_*.png files in # the HTML output directory before the changes have effect. # The default value is: YES. # This tag requires that the tag GENERATE_HTML is set to YES. FORMULA_TRANSPARENT = YES # The FORMULA_MACROFILE can contain LaTeX \newcommand and \renewcommand commands # to create new LaTeX commands to be used in formulas as building blocks. See # the section "Including formulas" for details. FORMULA_MACROFILE = # Enable the USE_MATHJAX option to render LaTeX formulas using MathJax (see # https://www.mathjax.org) which uses client side JavaScript for the rendering # instead of using pre-rendered bitmaps. Use this if you do not have LaTeX # installed or if you want to formulas look prettier in the HTML output. When # enabled you may also need to install MathJax separately and configure the path # to it using the MATHJAX_RELPATH option. # The default value is: NO. # This tag requires that the tag GENERATE_HTML is set to YES. USE_MATHJAX = NO # With MATHJAX_VERSION it is possible to specify the MathJax version to be used. # Note that the different versions of MathJax have different requirements with # regards to the different settings, so it is possible that also other MathJax # settings have to be changed when switching between the different MathJax # versions. # Possible values are: MathJax_2 and MathJax_3. # The default value is: MathJax_2. # This tag requires that the tag USE_MATHJAX is set to YES. MATHJAX_VERSION = MathJax_2 # When MathJax is enabled you can set the default output format to be used for # the MathJax output. For more details about the output format see MathJax # version 2 (see: # http://docs.mathjax.org/en/v2.7-latest/output.html) and MathJax version 3 # (see: # http://docs.mathjax.org/en/latest/web/components/output.html). # Possible values are: HTML-CSS (which is slower, but has the best # compatibility. This is the name for Mathjax version 2, for MathJax version 3 # this will be translated into chtml), NativeMML (i.e. MathML. Only supported # for NathJax 2. For MathJax version 3 chtml will be used instead.), chtml (This # is the name for Mathjax version 3, for MathJax version 2 this will be # translated into HTML-CSS) and SVG. # The default value is: HTML-CSS. # This tag requires that the tag USE_MATHJAX is set to YES. MATHJAX_FORMAT = HTML-CSS # When MathJax is enabled you need to specify the location relative to the HTML # output directory using the MATHJAX_RELPATH option. The destination directory # should contain the MathJax.js script. For instance, if the mathjax directory # is located at the same level as the HTML output directory, then # MATHJAX_RELPATH should be ../mathjax. The default value points to the MathJax # Content Delivery Network so you can quickly see the result without installing # MathJax. However, it is strongly recommended to install a local copy of # MathJax from https://www.mathjax.org before deployment. The default value is: # - in case of MathJax version 2: https://cdn.jsdelivr.net/npm/mathjax@2 # - in case of MathJax version 3: https://cdn.jsdelivr.net/npm/mathjax@3 # This tag requires that the tag USE_MATHJAX is set to YES. MATHJAX_RELPATH = https://cdn.jsdelivr.net/npm/mathjax@2 # The MATHJAX_EXTENSIONS tag can be used to specify one or more MathJax # extension names that should be enabled during MathJax rendering. For example # for MathJax version 2 (see # https://docs.mathjax.org/en/v2.7-latest/tex.html#tex-and-latex-extensions): # MATHJAX_EXTENSIONS = TeX/AMSmath TeX/AMSsymbols # For example for MathJax version 3 (see # http://docs.mathjax.org/en/latest/input/tex/extensions/index.html): # MATHJAX_EXTENSIONS = ams # This tag requires that the tag USE_MATHJAX is set to YES. MATHJAX_EXTENSIONS = # The MATHJAX_CODEFILE tag can be used to specify a file with javascript pieces # of code that will be used on startup of the MathJax code. See the MathJax site # (see: # http://docs.mathjax.org/en/v2.7-latest/output.html) for more details. For an # example see the documentation. # This tag requires that the tag USE_MATHJAX is set to YES. MATHJAX_CODEFILE = # When the SEARCHENGINE tag is enabled doxygen will generate a search box for # the HTML output. The underlying search engine uses javascript and DHTML and # should work on any modern browser. Note that when using HTML help # (GENERATE_HTMLHELP), Qt help (GENERATE_QHP), or docsets (GENERATE_DOCSET) # there is already a search function so this one should typically be disabled. # For large projects the javascript based search engine can be slow, then # enabling SERVER_BASED_SEARCH may provide a better solution. It is possible to # search using the keyboard; to jump to the search box use <access key> + S # (what the <access key> is depends on the OS and browser, but it is typically # <CTRL>, <ALT>/<option>, or both). Inside the search box use the <cursor down # key> to jump into the search results window, the results can be navigated # using the <cursor keys>. Press <Enter> to select an item or <escape> to cancel # the search. The filter options can be selected when the cursor is inside the # search box by pressing <Shift>+<cursor down>. Also here use the <cursor keys> # to select a filter and <Enter> or <escape> to activate or cancel the filter # option. # The default value is: YES. # This tag requires that the tag GENERATE_HTML is set to YES. SEARCHENGINE = YES # When the SERVER_BASED_SEARCH tag is enabled the search engine will be # implemented using a web server instead of a web client using JavaScript. There # are two flavors of web server based searching depending on the EXTERNAL_SEARCH # setting. When disabled, doxygen will generate a PHP script for searching and # an index file used by the script. When EXTERNAL_SEARCH is enabled the indexing # and searching needs to be provided by external tools. See the section # "External Indexing and Searching" for details. # The default value is: NO. # This tag requires that the tag SEARCHENGINE is set to YES. SERVER_BASED_SEARCH = NO # When EXTERNAL_SEARCH tag is enabled doxygen will no longer generate the PHP # script for searching. Instead the search results are written to an XML file # which needs to be processed by an external indexer. Doxygen will invoke an # external search engine pointed to by the SEARCHENGINE_URL option to obtain the # search results. # # Doxygen ships with an example indexer (doxyindexer) and search engine # (doxysearch.cgi) which are based on the open source search engine library # Xapian (see: # https://xapian.org/). # # See the section "External Indexing and Searching" for details. # The default value is: NO. # This tag requires that the tag SEARCHENGINE is set to YES. EXTERNAL_SEARCH = NO # The SEARCHENGINE_URL should point to a search engine hosted by a web server # which will return the search results when EXTERNAL_SEARCH is enabled. # # Doxygen ships with an example indexer (doxyindexer) and search engine # (doxysearch.cgi) which are based on the open source search engine library # Xapian (see: # https://xapian.org/). See the section "External Indexing and Searching" for # details. # This tag requires that the tag SEARCHENGINE is set to YES. SEARCHENGINE_URL = # When SERVER_BASED_SEARCH and EXTERNAL_SEARCH are both enabled the unindexed # search data is written to a file for indexing by an external tool. With the # SEARCHDATA_FILE tag the name of this file can be specified. # The default file is: searchdata.xml. # This tag requires that the tag SEARCHENGINE is set to YES. SEARCHDATA_FILE = searchdata.xml # When SERVER_BASED_SEARCH and EXTERNAL_SEARCH are both enabled the # EXTERNAL_SEARCH_ID tag can be used as an identifier for the project. This is # useful in combination with EXTRA_SEARCH_MAPPINGS to search through multiple # projects and redirect the results back to the right project. # This tag requires that the tag SEARCHENGINE is set to YES. EXTERNAL_SEARCH_ID = # The EXTRA_SEARCH_MAPPINGS tag can be used to enable searching through doxygen # projects other than the one defined by this configuration file, but that are # all added to the same external search index. Each project needs to have a # unique id set via EXTERNAL_SEARCH_ID. The search mapping then maps the id of # to a relative location where the documentation can be found. The format is: # EXTRA_SEARCH_MAPPINGS = tagname1=loc1 tagname2=loc2 ... # This tag requires that the tag SEARCHENGINE is set to YES. EXTRA_SEARCH_MAPPINGS = #--------------------------------------------------------------------------- # Configuration options related to the LaTeX output #--------------------------------------------------------------------------- # If the GENERATE_LATEX tag is set to YES, doxygen will generate LaTeX output. # The default value is: YES. GENERATE_LATEX = YES # The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put. If a # relative path is entered the value of OUTPUT_DIRECTORY will be put in front of # it. # The default directory is: latex. # This tag requires that the tag GENERATE_LATEX is set to YES. LATEX_OUTPUT = latex # The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be # invoked. # # Note that when not enabling USE_PDFLATEX the default is latex when enabling # USE_PDFLATEX the default is pdflatex and when in the later case latex is # chosen this is overwritten by pdflatex. For specific output languages the # default can have been set differently, this depends on the implementation of # the output language. # This tag requires that the tag GENERATE_LATEX is set to YES. LATEX_CMD_NAME = # The MAKEINDEX_CMD_NAME tag can be used to specify the command name to generate # index for LaTeX. # Note: This tag is used in the Makefile / make.bat. # See also: LATEX_MAKEINDEX_CMD for the part in the generated output file # (.tex). # The default file is: makeindex. # This tag requires that the tag GENERATE_LATEX is set to YES. MAKEINDEX_CMD_NAME = makeindex # The LATEX_MAKEINDEX_CMD tag can be used to specify the command name to # generate index for LaTeX. In case there is no backslash (\) as first character # it will be automatically added in the LaTeX code. # Note: This tag is used in the generated output file (.tex). # See also: MAKEINDEX_CMD_NAME for the part in the Makefile / make.bat. # The default value is: makeindex. # This tag requires that the tag GENERATE_LATEX is set to YES. LATEX_MAKEINDEX_CMD = makeindex # If the COMPACT_LATEX tag is set to YES, doxygen generates more compact LaTeX # documents. This may be useful for small projects and may help to save some # trees in general. # The default value is: NO. # This tag requires that the tag GENERATE_LATEX is set to YES. COMPACT_LATEX = NO # The PAPER_TYPE tag can be used to set the paper type that is used by the # printer. # Possible values are: a4 (210 x 297 mm), letter (8.5 x 11 inches), legal (8.5 x # 14 inches) and executive (7.25 x 10.5 inches). # The default value is: a4. # This tag requires that the tag GENERATE_LATEX is set to YES. PAPER_TYPE = a4 # The EXTRA_PACKAGES tag can be used to specify one or more LaTeX package names # that should be included in the LaTeX output. The package can be specified just # by its name or with the correct syntax as to be used with the LaTeX # \usepackage command. To get the times font for instance you can specify : # EXTRA_PACKAGES=times or EXTRA_PACKAGES={times} # To use the option intlimits with the amsmath package you can specify: # EXTRA_PACKAGES=[intlimits]{amsmath} # If left blank no extra packages will be included. # This tag requires that the tag GENERATE_LATEX is set to YES. EXTRA_PACKAGES = # The LATEX_HEADER tag can be used to specify a user-defined LaTeX header for # the generated LaTeX document. The header should contain everything until the # first chapter. If it is left blank doxygen will generate a standard header. It # is highly recommended to start with a default header using # doxygen -w latex new_header.tex new_footer.tex new_stylesheet.sty # and then modify the file new_header.tex. See also section "Doxygen usage" for # information on how to generate the default header that doxygen normally uses. # # Note: Only use a user-defined header if you know what you are doing! # Note: The header is subject to change so you typically have to regenerate the # default header when upgrading to a newer version of doxygen. The following # commands have a special meaning inside the header (and footer): For a # description of the possible markers and block names see the documentation. # This tag requires that the tag GENERATE_LATEX is set to YES. LATEX_HEADER = # The LATEX_FOOTER tag can be used to specify a user-defined LaTeX footer for # the generated LaTeX document. The footer should contain everything after the # last chapter. If it is left blank doxygen will generate a standard footer. See # LATEX_HEADER for more information on how to generate a default footer and what # special commands can be used inside the footer. See also section "Doxygen # usage" for information on how to generate the default footer that doxygen # normally uses. Note: Only use a user-defined footer if you know what you are # doing! # This tag requires that the tag GENERATE_LATEX is set to YES. LATEX_FOOTER = # The LATEX_EXTRA_STYLESHEET tag can be used to specify additional user-defined # LaTeX style sheets that are included after the standard style sheets created # by doxygen. Using this option one can overrule certain style aspects. Doxygen # will copy the style sheet files to the output directory. # Note: The order of the extra style sheet files is of importance (e.g. the last # style sheet in the list overrules the setting of the previous ones in the # list). # This tag requires that the tag GENERATE_LATEX is set to YES. LATEX_EXTRA_STYLESHEET = # The LATEX_EXTRA_FILES tag can be used to specify one or more extra images or # other source files which should be copied to the LATEX_OUTPUT output # directory. Note that the files will be copied as-is; there are no commands or # markers available. # This tag requires that the tag GENERATE_LATEX is set to YES. LATEX_EXTRA_FILES = # If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated is # prepared for conversion to PDF (using ps2pdf or pdflatex). The PDF file will # contain links (just like the HTML output) instead of page references. This # makes the output suitable for online browsing using a PDF viewer. # The default value is: YES. # This tag requires that the tag GENERATE_LATEX is set to YES. PDF_HYPERLINKS = YES # If the USE_PDFLATEX tag is set to YES, doxygen will use the engine as # specified with LATEX_CMD_NAME to generate the PDF file directly from the LaTeX # files. Set this option to YES, to get a higher quality PDF documentation. # # See also section LATEX_CMD_NAME for selecting the engine. # The default value is: YES. # This tag requires that the tag GENERATE_LATEX is set to YES. USE_PDFLATEX = YES # If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \batchmode # command to the generated LaTeX files. This will instruct LaTeX to keep running # if errors occur, instead of asking the user for help. # The default value is: NO. # This tag requires that the tag GENERATE_LATEX is set to YES. LATEX_BATCHMODE = NO # If the LATEX_HIDE_INDICES tag is set to YES then doxygen will not include the # index chapters (such as File Index, Compound Index, etc.) in the output. # The default value is: NO. # This tag requires that the tag GENERATE_LATEX is set to YES. LATEX_HIDE_INDICES = NO # The LATEX_BIB_STYLE tag can be used to specify the style to use for the # bibliography, e.g. plainnat, or ieeetr. See # https://en.wikipedia.org/wiki/BibTeX and \cite for more info. # The default value is: plain. # This tag requires that the tag GENERATE_LATEX is set to YES. LATEX_BIB_STYLE = plain # If the LATEX_TIMESTAMP tag is set to YES then the footer of each generated # page will contain the date and time when the page was generated. Setting this # to NO can help when comparing the output of multiple runs. # The default value is: NO. # This tag requires that the tag GENERATE_LATEX is set to YES. LATEX_TIMESTAMP = NO # The LATEX_EMOJI_DIRECTORY tag is used to specify the (relative or absolute) # path from which the emoji images will be read. If a relative path is entered, # it will be relative to the LATEX_OUTPUT directory. If left blank the # LATEX_OUTPUT directory will be used. # This tag requires that the tag GENERATE_LATEX is set to YES. LATEX_EMOJI_DIRECTORY = #--------------------------------------------------------------------------- # Configuration options related to the RTF output #--------------------------------------------------------------------------- # If the GENERATE_RTF tag is set to YES, doxygen will generate RTF output. The # RTF output is optimized for Word 97 and may not look too pretty with other RTF # readers/editors. # The default value is: NO. GENERATE_RTF = NO # The RTF_OUTPUT tag is used to specify where the RTF docs will be put. If a # relative path is entered the value of OUTPUT_DIRECTORY will be put in front of # it. # The default directory is: rtf. # This tag requires that the tag GENERATE_RTF is set to YES. RTF_OUTPUT = rtf # If the COMPACT_RTF tag is set to YES, doxygen generates more compact RTF # documents. This may be useful for small projects and may help to save some # trees in general. # The default value is: NO. # This tag requires that the tag GENERATE_RTF is set to YES. COMPACT_RTF = NO # If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated will # contain hyperlink fields. The RTF file will contain links (just like the HTML # output) instead of page references. This makes the output suitable for online # browsing using Word or some other Word compatible readers that support those # fields. # # Note: WordPad (write) and others do not support links. # The default value is: NO. # This tag requires that the tag GENERATE_RTF is set to YES. RTF_HYPERLINKS = NO # Load stylesheet definitions from file. Syntax is similar to doxygen's # configuration file, i.e. a series of assignments. You only have to provide # replacements, missing definitions are set to their default value. # # See also section "Doxygen usage" for information on how to generate the # default style sheet that doxygen normally uses. # This tag requires that the tag GENERATE_RTF is set to YES. RTF_STYLESHEET_FILE = # Set optional variables used in the generation of an RTF document. Syntax is # similar to doxygen's configuration file. A template extensions file can be # generated using doxygen -e rtf extensionFile. # This tag requires that the tag GENERATE_RTF is set to YES. RTF_EXTENSIONS_FILE = #--------------------------------------------------------------------------- # Configuration options related to the man page output #--------------------------------------------------------------------------- # If the GENERATE_MAN tag is set to YES, doxygen will generate man pages for # classes and files. # The default value is: NO. GENERATE_MAN = NO # The MAN_OUTPUT tag is used to specify where the man pages will be put. If a # relative path is entered the value of OUTPUT_DIRECTORY will be put in front of # it. A directory man3 will be created inside the directory specified by # MAN_OUTPUT. # The default directory is: man. # This tag requires that the tag GENERATE_MAN is set to YES. MAN_OUTPUT = man # The MAN_EXTENSION tag determines the extension that is added to the generated # man pages. In case the manual section does not start with a number, the number # 3 is prepended. The dot (.) at the beginning of the MAN_EXTENSION tag is # optional. # The default value is: .3. # This tag requires that the tag GENERATE_MAN is set to YES. MAN_EXTENSION = .3 # The MAN_SUBDIR tag determines the name of the directory created within # MAN_OUTPUT in which the man pages are placed. If defaults to man followed by # MAN_EXTENSION with the initial . removed. # This tag requires that the tag GENERATE_MAN is set to YES. MAN_SUBDIR = # If the MAN_LINKS tag is set to YES and doxygen generates man output, then it # will generate one additional man file for each entity documented in the real # man page(s). These additional files only source the real man page, but without # them the man command would be unable to find the correct page. # The default value is: NO. # This tag requires that the tag GENERATE_MAN is set to YES. MAN_LINKS = NO #--------------------------------------------------------------------------- # Configuration options related to the XML output #--------------------------------------------------------------------------- # If the GENERATE_XML tag is set to YES, doxygen will generate an XML file that # captures the structure of the code including all documentation. # The default value is: NO. GENERATE_XML = NO # The XML_OUTPUT tag is used to specify where the XML pages will be put. If a # relative path is entered the value of OUTPUT_DIRECTORY will be put in front of # it. # The default directory is: xml. # This tag requires that the tag GENERATE_XML is set to YES. XML_OUTPUT = xml # If the XML_PROGRAMLISTING tag is set to YES, doxygen will dump the program # listings (including syntax highlighting and cross-referencing information) to # the XML output. Note that enabling this will significantly increase the size # of the XML output. # The default value is: YES. # This tag requires that the tag GENERATE_XML is set to YES. XML_PROGRAMLISTING = YES # If the XML_NS_MEMB_FILE_SCOPE tag is set to YES, doxygen will include # namespace members in file scope as well, matching the HTML output. # The default value is: NO. # This tag requires that the tag GENERATE_XML is set to YES. XML_NS_MEMB_FILE_SCOPE = NO #--------------------------------------------------------------------------- # Configuration options related to the DOCBOOK output #--------------------------------------------------------------------------- # If the GENERATE_DOCBOOK tag is set to YES, doxygen will generate Docbook files # that can be used to generate PDF. # The default value is: NO. GENERATE_DOCBOOK = NO # The DOCBOOK_OUTPUT tag is used to specify where the Docbook pages will be put. # If a relative path is entered the value of OUTPUT_DIRECTORY will be put in # front of it. # The default directory is: docbook. # This tag requires that the tag GENERATE_DOCBOOK is set to YES. DOCBOOK_OUTPUT = docbook #--------------------------------------------------------------------------- # Configuration options for the AutoGen Definitions output #--------------------------------------------------------------------------- # If the GENERATE_AUTOGEN_DEF tag is set to YES, doxygen will generate an # AutoGen Definitions (see http://autogen.sourceforge.net/) file that captures # the structure of the code including all documentation. Note that this feature # is still experimental and incomplete at the moment. # The default value is: NO. GENERATE_AUTOGEN_DEF = NO #--------------------------------------------------------------------------- # Configuration options related to the Perl module output #--------------------------------------------------------------------------- # If the GENERATE_PERLMOD tag is set to YES, doxygen will generate a Perl module # file that captures the structure of the code including all documentation. # # Note that this feature is still experimental and incomplete at the moment. # The default value is: NO. GENERATE_PERLMOD = NO # If the PERLMOD_LATEX tag is set to YES, doxygen will generate the necessary # Makefile rules, Perl scripts and LaTeX code to be able to generate PDF and DVI # output from the Perl module output. # The default value is: NO. # This tag requires that the tag GENERATE_PERLMOD is set to YES. PERLMOD_LATEX = NO # If the PERLMOD_PRETTY tag is set to YES, the Perl module output will be nicely # formatted so it can be parsed by a human reader. This is useful if you want to # understand what is going on. On the other hand, if this tag is set to NO, the # size of the Perl module output will be much smaller and Perl will parse it # just the same. # The default value is: YES. # This tag requires that the tag GENERATE_PERLMOD is set to YES. PERLMOD_PRETTY = YES # The names of the make variables in the generated doxyrules.make file are # prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX. This is useful # so different doxyrules.make files included by the same Makefile don't # overwrite each other's variables. # This tag requires that the tag GENERATE_PERLMOD is set to YES. PERLMOD_MAKEVAR_PREFIX = #--------------------------------------------------------------------------- # Configuration options related to the preprocessor #--------------------------------------------------------------------------- # If the ENABLE_PREPROCESSING tag is set to YES, doxygen will evaluate all # C-preprocessor directives found in the sources and include files. # The default value is: YES. ENABLE_PREPROCESSING = YES # If the MACRO_EXPANSION tag is set to YES, doxygen will expand all macro names # in the source code. If set to NO, only conditional compilation will be # performed. Macro expansion can be done in a controlled way by setting # EXPAND_ONLY_PREDEF to YES. # The default value is: NO. # This tag requires that the tag ENABLE_PREPROCESSING is set to YES. MACRO_EXPANSION = NO # If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES then # the macro expansion is limited to the macros specified with the PREDEFINED and # EXPAND_AS_DEFINED tags. # The default value is: NO. # This tag requires that the tag ENABLE_PREPROCESSING is set to YES. EXPAND_ONLY_PREDEF = NO # If the SEARCH_INCLUDES tag is set to YES, the include files in the # INCLUDE_PATH will be searched if a #include is found. # The default value is: YES. # This tag requires that the tag ENABLE_PREPROCESSING is set to YES. SEARCH_INCLUDES = YES # The INCLUDE_PATH tag can be used to specify one or more directories that # contain include files that are not input files but should be processed by the # preprocessor. Note that the INCLUDE_PATH is not recursive, so the setting of # RECURSIVE has no effect here. # This tag requires that the tag SEARCH_INCLUDES is set to YES. INCLUDE_PATH = # You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard # patterns (like *.h and *.hpp) to filter out the header-files in the # directories. If left blank, the patterns specified with FILE_PATTERNS will be # used. # This tag requires that the tag ENABLE_PREPROCESSING is set to YES. INCLUDE_FILE_PATTERNS = # The PREDEFINED tag can be used to specify one or more macro names that are # defined before the preprocessor is started (similar to the -D option of e.g. # gcc). The argument of the tag is a list of macros of the form: name or # name=definition (no spaces). If the definition and the "=" are omitted, "=1" # is assumed. To prevent a macro definition from being undefined via #undef or # recursively expanded use the := operator instead of the = operator. # This tag requires that the tag ENABLE_PREPROCESSING is set to YES. PREDEFINED = # If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then this # tag can be used to specify a list of macro names that should be expanded. The # macro definition that is found in the sources will be used. Use the PREDEFINED # tag if you want to use a different macro definition that overrules the # definition found in the source code. # This tag requires that the tag ENABLE_PREPROCESSING is set to YES. EXPAND_AS_DEFINED = # If the SKIP_FUNCTION_MACROS tag is set to YES then doxygen's preprocessor will # remove all references to function-like macros that are alone on a line, have # an all uppercase name, and do not end with a semicolon. Such function macros # are typically used for boiler-plate code, and will confuse the parser if not # removed. # The default value is: YES. # This tag requires that the tag ENABLE_PREPROCESSING is set to YES. SKIP_FUNCTION_MACROS = YES #--------------------------------------------------------------------------- # Configuration options related to external references #--------------------------------------------------------------------------- # The TAGFILES tag can be used to specify one or more tag files. For each tag # file the location of the external documentation should be added. The format of # a tag file without this location is as follows: # TAGFILES = file1 file2 ... # Adding location for the tag files is done as follows: # TAGFILES = file1=loc1 "file2 = loc2" ... # where loc1 and loc2 can be relative or absolute paths or URLs. See the # section "Linking to external documentation" for more information about the use # of tag files. # Note: Each tag file must have a unique name (where the name does NOT include # the path). If a tag file is not located in the directory in which doxygen is # run, you must also specify the path to the tagfile here. TAGFILES = # When a file name is specified after GENERATE_TAGFILE, doxygen will create a # tag file that is based on the input files it reads. See section "Linking to # external documentation" for more information about the usage of tag files. GENERATE_TAGFILE = # If the ALLEXTERNALS tag is set to YES, all external class will be listed in # the class index. If set to NO, only the inherited external classes will be # listed. # The default value is: NO. ALLEXTERNALS = NO # If the EXTERNAL_GROUPS tag is set to YES, all external groups will be listed # in the modules index. If set to NO, only the current project's groups will be # listed. # The default value is: YES. EXTERNAL_GROUPS = YES # If the EXTERNAL_PAGES tag is set to YES, all external pages will be listed in # the related pages index. If set to NO, only the current project's pages will # be listed. # The default value is: YES. EXTERNAL_PAGES = YES #--------------------------------------------------------------------------- # Configuration options related to the dot tool #--------------------------------------------------------------------------- # You can include diagrams made with dia in doxygen documentation. Doxygen will # then run dia to produce the diagram and insert it in the documentation. The # DIA_PATH tag allows you to specify the directory where the dia binary resides. # If left empty dia is assumed to be found in the default search path. DIA_PATH = # If set to YES the inheritance and collaboration graphs will hide inheritance # and usage relations if the target is undocumented or is not a class. # The default value is: YES. HIDE_UNDOC_RELATIONS = YES # If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is # available from the path. This tool is part of Graphviz (see: # http://www.graphviz.org/), a graph visualization toolkit from AT&T and Lucent # Bell Labs. The other options in this section have no effect if this option is # set to NO # The default value is: YES. HAVE_DOT = "##HAS_DOT##" # The DOT_NUM_THREADS specifies the number of dot invocations doxygen is allowed # to run in parallel. When set to 0 doxygen will base this on the number of # processors available in the system. You can set it explicitly to a value # larger than 0 to get control over the balance between CPU load and processing # speed. # Minimum value: 0, maximum value: 32, default value: 0. # This tag requires that the tag HAVE_DOT is set to YES. DOT_NUM_THREADS = 0 # When you want a differently looking font in the dot files that doxygen # generates you can specify the font name using DOT_FONTNAME. You need to make # sure dot is able to find the font, which can be done by putting it in a # standard location or by setting the DOTFONTPATH environment variable or by # setting DOT_FONTPATH to the directory containing the font. # The default value is: Helvetica. # This tag requires that the tag HAVE_DOT is set to YES. DOT_FONTNAME = Helvetica # The DOT_FONTSIZE tag can be used to set the size (in points) of the font of # dot graphs. # Minimum value: 4, maximum value: 24, default value: 10. # This tag requires that the tag HAVE_DOT is set to YES. DOT_FONTSIZE = 10 # By default doxygen will tell dot to use the default font as specified with # DOT_FONTNAME. If you specify a different font using DOT_FONTNAME you can set # the path where dot can find it using this tag. # This tag requires that the tag HAVE_DOT is set to YES. DOT_FONTPATH = # If the CLASS_GRAPH tag is set to YES (or GRAPH) then doxygen will generate a # graph for each documented class showing the direct and indirect inheritance # relations. In case HAVE_DOT is set as well dot will be used to draw the graph, # otherwise the built-in generator will be used. If the CLASS_GRAPH tag is set # to TEXT the direct and indirect inheritance relations will be shown as texts / # links. # Possible values are: NO, YES, TEXT and GRAPH. # The default value is: YES. CLASS_GRAPH = YES # If the COLLABORATION_GRAPH tag is set to YES then doxygen will generate a # graph for each documented class showing the direct and indirect implementation # dependencies (inheritance, containment, and class references variables) of the # class with other documented classes. # The default value is: YES. # This tag requires that the tag HAVE_DOT is set to YES. COLLABORATION_GRAPH = YES # If the GROUP_GRAPHS tag is set to YES then doxygen will generate a graph for # groups, showing the direct groups dependencies. See also the chapter Grouping # in the manual. # The default value is: YES. # This tag requires that the tag HAVE_DOT is set to YES. GROUP_GRAPHS = YES # If the UML_LOOK tag is set to YES, doxygen will generate inheritance and # collaboration diagrams in a style similar to the OMG's Unified Modeling # Language. # The default value is: NO. # This tag requires that the tag HAVE_DOT is set to YES. UML_LOOK = NO # If the UML_LOOK tag is enabled, the fields and methods are shown inside the # class node. If there are many fields or methods and many nodes the graph may # become too big to be useful. The UML_LIMIT_NUM_FIELDS threshold limits the # number of items for each type to make the size more manageable. Set this to 0 # for no limit. Note that the threshold may be exceeded by 50% before the limit # is enforced. So when you set the threshold to 10, up to 15 fields may appear, # but if the number exceeds 15, the total amount of fields shown is limited to # 10. # Minimum value: 0, maximum value: 100, default value: 10. # This tag requires that the tag UML_LOOK is set to YES. UML_LIMIT_NUM_FIELDS = 10 # If the DOT_UML_DETAILS tag is set to NO, doxygen will show attributes and # methods without types and arguments in the UML graphs. If the DOT_UML_DETAILS # tag is set to YES, doxygen will add type and arguments for attributes and # methods in the UML graphs. If the DOT_UML_DETAILS tag is set to NONE, doxygen # will not generate fields with class member information in the UML graphs. The # class diagrams will look similar to the default class diagrams but using UML # notation for the relationships. # Possible values are: NO, YES and NONE. # The default value is: NO. # This tag requires that the tag UML_LOOK is set to YES. DOT_UML_DETAILS = NO # The DOT_WRAP_THRESHOLD tag can be used to set the maximum number of characters # to display on a single line. If the actual line length exceeds this threshold # significantly it will wrapped across multiple lines. Some heuristics are apply # to avoid ugly line breaks. # Minimum value: 0, maximum value: 1000, default value: 17. # This tag requires that the tag HAVE_DOT is set to YES. DOT_WRAP_THRESHOLD = 17 # If the TEMPLATE_RELATIONS tag is set to YES then the inheritance and # collaboration graphs will show the relations between templates and their # instances. # The default value is: NO. # This tag requires that the tag HAVE_DOT is set to YES. TEMPLATE_RELATIONS = NO # If the INCLUDE_GRAPH, ENABLE_PREPROCESSING and SEARCH_INCLUDES tags are set to # YES then doxygen will generate a graph for each documented file showing the # direct and indirect include dependencies of the file with other documented # files. # The default value is: YES. # This tag requires that the tag HAVE_DOT is set to YES. INCLUDE_GRAPH = YES # If the INCLUDED_BY_GRAPH, ENABLE_PREPROCESSING and SEARCH_INCLUDES tags are # set to YES then doxygen will generate a graph for each documented file showing # the direct and indirect include dependencies of the file with other documented # files. # The default value is: YES. # This tag requires that the tag HAVE_DOT is set to YES. INCLUDED_BY_GRAPH = YES # If the CALL_GRAPH tag is set to YES then doxygen will generate a call # dependency graph for every global function or class method. # # Note that enabling this option will significantly increase the time of a run. # So in most cases it will be better to enable call graphs for selected # functions only using the \callgraph command. Disabling a call graph can be # accomplished by means of the command \hidecallgraph. # The default value is: NO. # This tag requires that the tag HAVE_DOT is set to YES. CALL_GRAPH = NO # If the CALLER_GRAPH tag is set to YES then doxygen will generate a caller # dependency graph for every global function or class method. # # Note that enabling this option will significantly increase the time of a run. # So in most cases it will be better to enable caller graphs for selected # functions only using the \callergraph command. Disabling a caller graph can be # accomplished by means of the command \hidecallergraph. # The default value is: NO. # This tag requires that the tag HAVE_DOT is set to YES. CALLER_GRAPH = NO # If the GRAPHICAL_HIERARCHY tag is set to YES then doxygen will graphical # hierarchy of all classes instead of a textual one. # The default value is: YES. # This tag requires that the tag HAVE_DOT is set to YES. GRAPHICAL_HIERARCHY = YES # If the DIRECTORY_GRAPH tag is set to YES then doxygen will show the # dependencies a directory has on other directories in a graphical way. The # dependency relations are determined by the #include relations between the # files in the directories. # The default value is: YES. # This tag requires that the tag HAVE_DOT is set to YES. DIRECTORY_GRAPH = YES # The DIR_GRAPH_MAX_DEPTH tag can be used to limit the maximum number of levels # of child directories generated in directory dependency graphs by dot. # Minimum value: 1, maximum value: 25, default value: 1. # This tag requires that the tag DIRECTORY_GRAPH is set to YES. DIR_GRAPH_MAX_DEPTH = 1 # The DOT_IMAGE_FORMAT tag can be used to set the image format of the images # generated by dot. For an explanation of the image formats see the section # output formats in the documentation of the dot tool (Graphviz (see: # http://www.graphviz.org/)). # Note: If you choose svg you need to set HTML_FILE_EXTENSION to xhtml in order # to make the SVG files visible in IE 9+ (other browsers do not have this # requirement). # Possible values are: png, jpg, jpg:cairo, jpg:cairo:gd, jpg:gd, jpg:gd:gd, # gif, gif:cairo, gif:cairo:gd, gif:gd, gif:gd:gd, svg, png:gd, png:gd:gd, # png:cairo, png:cairo:gd, png:cairo:cairo, png:cairo:gdiplus, png:gdiplus and # png:gdiplus:gdiplus. # The default value is: png. # This tag requires that the tag HAVE_DOT is set to YES. DOT_IMAGE_FORMAT = png # If DOT_IMAGE_FORMAT is set to svg, then this option can be set to YES to # enable generation of interactive SVG images that allow zooming and panning. # # Note that this requires a modern browser other than Internet Explorer. Tested # and working are Firefox, Chrome, Safari, and Opera. # Note: For IE 9+ you need to set HTML_FILE_EXTENSION to xhtml in order to make # the SVG files visible. Older versions of IE do not have SVG support. # The default value is: NO. # This tag requires that the tag HAVE_DOT is set to YES. INTERACTIVE_SVG = NO # The DOT_PATH tag can be used to specify the path where the dot tool can be # found. If left blank, it is assumed the dot tool can be found in the path. # This tag requires that the tag HAVE_DOT is set to YES. DOT_PATH = # The DOTFILE_DIRS tag can be used to specify one or more directories that # contain dot files that are included in the documentation (see the \dotfile # command). # This tag requires that the tag HAVE_DOT is set to YES. DOTFILE_DIRS = # The MSCFILE_DIRS tag can be used to specify one or more directories that # contain msc files that are included in the documentation (see the \mscfile # command). MSCFILE_DIRS = # The DIAFILE_DIRS tag can be used to specify one or more directories that # contain dia files that are included in the documentation (see the \diafile # command). DIAFILE_DIRS = # When using plantuml, the PLANTUML_JAR_PATH tag should be used to specify the # path where java can find the plantuml.jar file or to the filename of jar file # to be used. If left blank, it is assumed PlantUML is not used or called during # a preprocessing step. Doxygen will generate a warning when it encounters a # \startuml command in this case and will not generate output for the diagram. PLANTUML_JAR_PATH = # When using plantuml, the PLANTUML_CFG_FILE tag can be used to specify a # configuration file for plantuml. PLANTUML_CFG_FILE = # When using plantuml, the specified paths are searched for files specified by # the !include statement in a plantuml block. PLANTUML_INCLUDE_PATH = # The DOT_GRAPH_MAX_NODES tag can be used to set the maximum number of nodes # that will be shown in the graph. If the number of nodes in a graph becomes # larger than this value, doxygen will truncate the graph, which is visualized # by representing a node as a red box. Note that doxygen if the number of direct # children of the root node in a graph is already larger than # DOT_GRAPH_MAX_NODES then the graph will not be shown at all. Also note that # the size of a graph can be further restricted by MAX_DOT_GRAPH_DEPTH. # Minimum value: 0, maximum value: 10000, default value: 50. # This tag requires that the tag HAVE_DOT is set to YES. DOT_GRAPH_MAX_NODES = 100 # The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the graphs # generated by dot. A depth value of 3 means that only nodes reachable from the # root by following a path via at most 3 edges will be shown. Nodes that lay # further from the root node will be omitted. Note that setting this option to 1 # or 2 may greatly reduce the computation time needed for large code bases. Also # note that the size of a graph can be further restricted by # DOT_GRAPH_MAX_NODES. Using a depth of 0 means no depth restriction. # Minimum value: 0, maximum value: 1000, default value: 0. # This tag requires that the tag HAVE_DOT is set to YES. MAX_DOT_GRAPH_DEPTH = 0 # Set the DOT_TRANSPARENT tag to YES to generate images with a transparent # background. This is disabled by default, because dot on Windows does not seem # to support this out of the box. # # Warning: Depending on the platform used, enabling this option may lead to # badly anti-aliased labels on the edges of a graph (i.e. they become hard to # read). # The default value is: NO. # This tag requires that the tag HAVE_DOT is set to YES. DOT_TRANSPARENT = NO # Set the DOT_MULTI_TARGETS tag to YES to allow dot to generate multiple output # files in one run (i.e. multiple -o and -T options on the command line). This # makes dot run faster, but since only newer versions of dot (>1.8.10) support # this, this feature is disabled by default. # The default value is: NO. # This tag requires that the tag HAVE_DOT is set to YES. DOT_MULTI_TARGETS = NO # If the GENERATE_LEGEND tag is set to YES doxygen will generate a legend page # explaining the meaning of the various boxes and arrows in the dot generated # graphs. # Note: This tag requires that UML_LOOK isn't set, i.e. the doxygen internal # graphical representation for inheritance and collaboration diagrams is used. # The default value is: YES. # This tag requires that the tag HAVE_DOT is set to YES. GENERATE_LEGEND = YES # If the DOT_CLEANUP tag is set to YES, doxygen will remove the intermediate # files that are used to generate the various graphs. # # Note: This setting is not only used for dot files but also for msc temporary # files. # The default value is: YES. DOT_CLEANUP = YES ��������������������������������������������������������������������������������������������������������������������������������������������webdar-1.0.0/doc/architecture.txt�������������������������������������������������������������������0000644�0001750�0001752�00000022541�15045131037�013672� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������######################################################################## # webdar - a web server and interface program to libdar # Copyright (C) 2013-2023 Denis Corbin # # This file is part of Webdar # # Webdar is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # Webdar is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with Webdar. If not, see <http://www.gnu.org/licenses/> # #---- # to contact the author: dar.linux@free.fr ######################################################################## class reference - class for which, objects can create peering relationship - method are provided to list peers and to establish and manage peerings - object destruction take care to dissaocitate peered objects - hook is provided for an object to be informed when a peering has been broken this is only for inherited classes class actor : inherit from class reference - provide mean for these object to be notified of events (on_event()). An event is a string name that the object has registered to on a given even object. class event : inherit from class reference - object of that class define one or more event name, that actor objects can subscribe to (record_actor_on_event(event_name) - this class provide a protected method for inherited class act() that let generate an event of the given name (the event must have been registered first for that and also for actor to be able to subscribe to it). actor-event relation is mainly used for html_* object to trigger action upon user interaction through HTTP requests. An object can be both an actor and an event, an actor only or an event only ========= arborescence CSS ========= class css_property - defines inheritance of a single property (-> obsolete since css_library?) class css (uses css_property) - provide a way to define a set of well-knonw attribute to be assign to a html object (like a <div> object for example) - has inheritance ability for field flagged as inheritable > can receive class name attribute ??? (why that in fact?) - provide raw string or <style>-embedded string to be used into html or css style-sheet class css_class - is the association of a name to a css (the value) - can provide the value as a string to be put in css style-sheet class css_selector : public css_class - is a specific css_class implementing the selector on classes (like the :hover CSS selector) class css_select_* : public css_selector - a set of inherited class from css_selector that implement the :hover :active :checked and other selectors - theses classes are generated by the css_selector_routine.bash script and gathered in the css_selector_subtypes.hpp file included in css_selector.hpp class css_library - gather a set of css_classes (i.e.: the association of a css definition and its name) - control and avoid duplicate (name unicity) - provide a dump of all class definition in a format suitable for CSS file ======== arborescence HTML ======== class body_builder - parent class of all object that produce html code (the body of the HTML answer) -> body_builder::get_body_part() - objects have a "visibile" toggle and transition state that the inherited implementation must "ack" for the new visibility status to be set. Only visible object should return HTML code. * body_builder define a tree adoption feature that let a object adopt another this adoption mecanism defines hierarchy in the way the html code is generated (parent define which of their child express html and in which order it is returned by the object itself) this adoption tree does not link to object memory management responsibility, but body_builder construction take care to disassociate objects when one (parent or child) is destroyed. * in relation to the adoption each object has a path that is used to define what object should receive a HTTP request. Adoption generate random but unique subdirectory to the adpoted object * body_builder also provide a way to attach a css_library to an object and let any child object be aware of this css_library for they can add new definitions or dump the css_library definitions and eventually use it when returning their html code * an body_builder object can be assigned the name of one or more css_class * many hooks are available to inherited classes: - hooks relative to adoption as parent as well as as child - hooks relative to foresaking as parent as well as as child - hooks when a new css_library is available (to let the object drop their css class definition there) - hook triggered when path has changed (either due to adoption of path change from a parent object, which may be done to parent adopted or manual path change, set_prefix()) ========== There is a lot of inherited classes from body_builder, but we can classify then in two types HTML basic classes, that stick to the HTML constructs like <div> <a> <html> <h*>... HTML generic construct provide generic object combination like alternative or concatenation HTML constructed class that are a composition of basic class to address a given complex interaction HTML basic classes - html_div : wraps all child generated HTML code into <div> </div> markups with eventually the assigned css_class for that object - html_form : implement the <form> HTML code, the content of the form is based on adopted children - html_form_fieldset: implements the <fieldset> HTML code, the possible alternative are defined from the adopted body builder objects - html_form_input : implements the <input> HTML code adding label and controlling input type - html_form_radio : implements <input type="radio"> code adding label and control on proposed alternatives - html_form_select : (inherit from html_form_radio) provide drop down multichoice based on <select> HTML code - html_image : implements the <img> HTML code - html_page : create an HTML page layout <html><header><body>. This page holds a css_library that adopted children can use to record their css class definitions. Those are dropped in the page <header> as css <style>, with <title> and viewport. The <body> is the result of the children get_body_part that is pointed to by the path of the request. - html_text: wrapper around <h1> ... <h*> and <p/> HTML code - html_url: implements the <a> HTML code - static_object : ancestor of all static objects (equivalent to body_builder but with generated body defined at compilation time. - static_object_library: hold static_objects associated with a label (read-only library and at global level) HTML generic construct - html_aiguille , displays only one of its adopted children, it defines an integer "mode" that correspond to the object to display in the order they have been adopted all child object have the same path, which is the path of the html_aiguille object - html_button is the combination of an html_div and an html_url that provide button-like feature and event triggered hook (when the button is clicked by the user) html_button is an event class that record an event "html_button::action" - html_focus has only one adopted child, used to apply well defined css attributes to an object "under focus", such adopted (unique) object can change over time the CSS display properties are kept ready to be applied to a new object - html_level: mixes body_builder objects with static html contents (string) and provide method to list such list of objects. Does not define any HTML output (get_body_part()) this is left to the inherited class to define how to do that - html_menu: set a list of html_button and associated labels with events. The "mode" correspond the the item selected from the menu and can be changed by application of by the user through HTTP requests) The event upon mode change can be used to define which object get visibile somewhere else in the page for example. - html_page: inherits from html_level displays html_level childs in table of defined dimensions - html_yes_no_box: yes/no box with displayed message libdar related HTML constructed classes - html_archive_create - html_archive_isolate - html_archive_merge - html_archive_read - html_comparison_fields : html_form_select - html_compression : html_form_select - html_crypto_algo : html_form_select - html_datetime - html_dir_tree : html_dir - html_error - html_hash_algo : html_form_select - html_libdar_running : html_page - html_listing_page : html_page - html_options_compare - html_options_create - html_options_extract - html_options_isolate - html_options_merge - html_options_read - html_options_test - html_size_unit - html_statistics - html_web_user_interaction libdar high level: - user_interface - web_user_interaction ============ class listener : listen on TCP socket and generate proto_connexions and server attached to that connection ���������������������������������������������������������������������������������������������������������������������������������������������������������������webdar-1.0.0/doc/webdar.txt�������������������������������������������������������������������������0000644�0001750�0001752�00000010331�15045130505�012445� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������######################################################################## # webdar - a web server and interface program to libdar # Copyright (C) 2013-2023 Denis Corbin # # This file is part of Webdar # # Webdar is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # Webdar is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with Webdar. If not, see <http://www.gnu.org/licenses/> # #---- # to contact the author: dar.linux@free.fr ######################################################################## WEBDAR PROJECT Introduction: The following is a description of software project from the services it should provide to the possible way it could be implemented. This is a proposal, subject to dscussion in all its aspects. AIM: The main targets for the initial release are: - provide a web-base interface to libdar - it should be usable with most popular browser - let libdar store slices to remote storage through FTP as an alternative to local filesystem - propose a basic authentication mecanism (for now) like dynamically generated password displayed on stdout for use throught the web session. - for the initial release, only few Unixes systems will be supported but at least Linux, FreeBSD and MacOS X. Form and Constraints: - webdar must be available as a single executable suitable for use in bootable Live-CD systems. It may be available as shared and statically linked binary. - It must not rely on any existing directory tree to provide a web service (a single static binary should work alone) - It shall be able to work even on a read-only filesystem, and should not need to pass through filesystem to provide a gateway between libdar and http protocol (to avoid performance penalty during backup as most of the disk bandwidth would be used by the backup/restoration process). - it must not rely on any non GPL or proprietary software, both for building the software and for working. LICENSING: Webdar will be released under GPLv3. Version 3 is important for Webdar as it could be easily emmbedded in many proprietary devices. ARCHITECTURE: +----------+ +--------------------------+ | browser |<------->| WEBDAR | +----------+ +----------+ +--------------------------+ | FTP/SFTP | | libdar |<#################>| Server | | | slice drop/read | | | | +----------+ +--------------------------+ ^ ^ ^ # backup/restoration + # slice drop/read # + # # + # # v v v -------- network -------------------------------- network ------------- local remote filesystem filesystem POSSIBLE EVOLUTIONS: Room should be done for future evolutions: - support for daemon mode and user priviledge management (with a semaphore to limit the maximum number of running backup at a given time, other job get pending for a slot to get free => new session status "pending" => scheduling/queuing) - support for concurrent sessions (may not be available in version 1.0) - support webdar configuration/restoration using the http interface - implement dar_manager API �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������webdar-1.0.0/doc/Makefile.am������������������������������������������������������������������������0000644�0001750�0001752�00000003460�15045134171�012504� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������######################################################################## # webdar - a web server and interface program to libdar # Copyright (C) 2013-2023 Denis Corbin # # This file is part of Webdar # # Webdar is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # Webdar is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with Webdar. If not, see <http://www.gnu.org/licenses/> # #---- # to contact the author: dar.linux@free.fr ######################################################################## SUBDIRS = dist_noinst_DATA = Doxyfile portable_cp architecture.txt webdar.txt dist_pkgdata_DATA = if USE_DOXYGEN DOXYGEN = @DOXYGEN_PROG@ all-local: Doxyfile.tmp html html: Doxyfile.tmp $(DOXYGEN) $< Doxyfile.tmp: sed -e "s%##VERSION##%@PACKAGE_VERSION@%g" -e "s%##HAS_DOT##%@HAS_DOT@%g" -e 's%##SRCDIR##%$(abs_top_srcdir)%g' -e 's%##BUILDDIR##%$(abs_top_builddir)%g' '$(srcdir)/Doxyfile' > Doxyfile.tmp cd '$(top_srcdir)' ; $(DOXYGEN) '$(abs_top_builddir)/doc/Doxyfile.tmp' if [ -d html/search ]; then chmod u+x html/search ; fi clean-local: rm -rf html Doxyfile.tmp doxygen_sqlite3.db latex install-data-hook: $(INSTALL) -d $(DESTDIR)$(pkgdatadir) '$(srcdir)/portable_cp' html $(DESTDIR)$(pkgdatadir) uninstall-hook: rm -rf $(DESTDIR)$(pkgdatadir)/html rmdir $(DESTDIR)$(pkgdatadir) || true else all-local: clean-local: install-data-hook: uninstall-hook: endif ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������webdar-1.0.0/doc/Makefile.in������������������������������������������������������������������������0000644�0001750�0001752�00000057627�15045134213�012530� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Makefile.in generated by automake 1.16.5 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2021 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ ######################################################################## # webdar - a web server and interface program to libdar # Copyright (C) 2013-2023 Denis Corbin # # This file is part of Webdar # # Webdar is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # Webdar is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with Webdar. If not, see <http://www.gnu.org/licenses/> # #---- # to contact the author: dar.linux@free.fr ######################################################################## VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = doc ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/gettext.m4 \ $(top_srcdir)/m4/host-cpu-c-abi.m4 $(top_srcdir)/m4/iconv.m4 \ $(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/lib-ld.m4 \ $(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \ $(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/po.m4 \ $(top_srcdir)/m4/progtest.m4 $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(dist_noinst_DATA) \ $(dist_pkgdata_DATA) $(am__DIST_COMMON) mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = SOURCES = DIST_SOURCES = RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \ ctags-recursive dvi-recursive html-recursive info-recursive \ install-data-recursive install-dvi-recursive \ install-exec-recursive install-html-recursive \ install-info-recursive install-pdf-recursive \ install-ps-recursive install-recursive installcheck-recursive \ installdirs-recursive pdf-recursive ps-recursive \ tags-recursive uninstall-recursive am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__installdirs = "$(DESTDIR)$(pkgdatadir)" DATA = $(dist_noinst_DATA) $(dist_pkgdata_DATA) RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ distclean-recursive maintainer-clean-recursive am__recursive_targets = \ $(RECURSIVE_TARGETS) \ $(RECURSIVE_CLEAN_TARGETS) \ $(am__extra_recursive_targets) AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \ distdir distdir-am am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` DIST_SUBDIRS = $(SUBDIRS) am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/mkinstalldirs DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) am__relativize = \ dir0=`pwd`; \ sed_first='s,^\([^/]*\)/.*$$,\1,'; \ sed_rest='s,^[^/]*/*,,'; \ sed_last='s,^.*/\([^/]*\)$$,\1,'; \ sed_butlast='s,/*[^/]*$$,,'; \ while test -n "$$dir1"; do \ first=`echo "$$dir1" | sed -e "$$sed_first"`; \ if test "$$first" != "."; then \ if test "$$first" = ".."; then \ dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ else \ first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ if test "$$first2" = "$$first"; then \ dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ else \ dir2="../$$dir2"; \ fi; \ dir0="$$dir0"/"$$first"; \ fi; \ fi; \ dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ done; \ reldir="$$dir2" ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPPFLAGS = @CPPFLAGS@ CSCOPE = @CSCOPE@ CTAGS = @CTAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CXXSTDFLAGS = @CXXSTDFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DOXYGEN_PROG = @DOXYGEN_PROG@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ ETAGS = @ETAGS@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ FILECMD = @FILECMD@ GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@ GMSGFMT = @GMSGFMT@ GMSGFMT_015 = @GMSGFMT_015@ GREP = @GREP@ HAS_DOT = @HAS_DOT@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INTLLIBS = @INTLLIBS@ INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBDAR_CFLAGS = @LIBDAR_CFLAGS@ LIBDAR_LIBS = @LIBDAR_LIBS@ LIBICONV = @LIBICONV@ LIBINTL = @LIBINTL@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTHREADAR_CFLAGS = @LIBTHREADAR_CFLAGS@ LIBTHREADAR_LIBS = @LIBTHREADAR_LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBICONV = @LTLIBICONV@ LTLIBINTL = @LTLIBINTL@ LTLIBOBJS = @LTLIBOBJS@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ MSGFMT = @MSGFMT@ MSGMERGE = @MSGMERGE@ MSGMERGE_FOR_MSGFMT_OPTION = @MSGMERGE_FOR_MSGFMT_OPTION@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OPENSSL_CFLAGS = @OPENSSL_CFLAGS@ OPENSSL_LIBS = @OPENSSL_LIBS@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ POSUB = @POSUB@ RANLIB = @RANLIB@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ UPX_PROG = @UPX_PROG@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ XGETTEXT = @XGETTEXT@ XGETTEXT_015 = @XGETTEXT_015@ XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dot = @dot@ doxygen = @doxygen@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ groff = @groff@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ pkgconfigdir = @pkgconfigdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ tmp = @tmp@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ upx = @upx@ SUBDIRS = dist_noinst_DATA = Doxyfile portable_cp architecture.txt webdar.txt dist_pkgdata_DATA = @USE_DOXYGEN_TRUE@DOXYGEN = @DOXYGEN_PROG@ all: all-recursive .SUFFIXES: $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu doc/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu doc/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs install-dist_pkgdataDATA: $(dist_pkgdata_DATA) @$(NORMAL_INSTALL) @list='$(dist_pkgdata_DATA)'; test -n "$(pkgdatadir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(pkgdatadir)'"; \ $(MKDIR_P) "$(DESTDIR)$(pkgdatadir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(pkgdatadir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(pkgdatadir)" || exit $$?; \ done uninstall-dist_pkgdataDATA: @$(NORMAL_UNINSTALL) @list='$(dist_pkgdata_DATA)'; test -n "$(pkgdatadir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(pkgdatadir)'; $(am__uninstall_files_from_dir) # This directory's subdirectories are mostly independent; you can cd # into them and run 'make' without going through this Makefile. # To change the values of 'make' variables: instead of editing Makefiles, # (1) if the variable is set in 'config.status', edit 'config.status' # (which will cause the Makefiles to be regenerated when you run 'make'); # (2) otherwise, pass the desired values on the 'make' command line. $(am__recursive_targets): @fail=; \ if $(am__make_keepgoing); then \ failcom='fail=yes'; \ else \ failcom='exit 1'; \ fi; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ case "$@" in \ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ *) list='$(SUBDIRS)' ;; \ esac; \ for subdir in $$list; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ dot_seen=yes; \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done; \ if test "$$dot_seen" = "no"; then \ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-recursive TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ include_option=--etags-include; \ empty_fix=.; \ else \ include_option=--include; \ empty_fix=; \ fi; \ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test ! -f $$subdir/TAGS || \ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ fi; \ done; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-recursive CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-recursive cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) distdir-am distdir-am: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ $(am__make_dryrun) \ || test -d "$(distdir)/$$subdir" \ || $(MKDIR_P) "$(distdir)/$$subdir" \ || exit 1; \ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ $(am__relativize); \ new_distdir=$$reldir; \ dir1=$$subdir; dir2="$(top_distdir)"; \ $(am__relativize); \ new_top_distdir=$$reldir; \ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ ($(am__cd) $$subdir && \ $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$$new_top_distdir" \ distdir="$$new_distdir" \ am__remove_distdir=: \ am__skip_length_check=: \ am__skip_mode_fix=: \ distdir) \ || exit 1; \ fi; \ done check-am: all-am check: check-recursive all-am: Makefile $(DATA) all-local installdirs: installdirs-recursive installdirs-am: for dir in "$(DESTDIR)$(pkgdatadir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-recursive install-exec: install-exec-recursive install-data: install-data-recursive uninstall: uninstall-recursive install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-recursive install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-recursive clean-am: clean-generic clean-libtool clean-local mostlyclean-am distclean: distclean-recursive -rm -f Makefile distclean-am: clean-am distclean-generic distclean-tags dvi: dvi-recursive dvi-am: @USE_DOXYGEN_FALSE@html: html-recursive html-am: info: info-recursive info-am: install-data-am: install-dist_pkgdataDATA @$(NORMAL_INSTALL) $(MAKE) $(AM_MAKEFLAGS) install-data-hook install-dvi: install-dvi-recursive install-dvi-am: install-exec-am: install-html: install-html-recursive install-html-am: install-info: install-info-recursive install-info-am: install-man: install-pdf: install-pdf-recursive install-pdf-am: install-ps: install-ps-recursive install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-recursive -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-recursive mostlyclean-am: mostlyclean-generic mostlyclean-libtool pdf: pdf-recursive pdf-am: ps: ps-recursive ps-am: uninstall-am: uninstall-dist_pkgdataDATA @$(NORMAL_INSTALL) $(MAKE) $(AM_MAKEFLAGS) uninstall-hook .MAKE: $(am__recursive_targets) install-am install-data-am \ install-strip uninstall-am .PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am all-local \ check check-am clean clean-generic clean-libtool clean-local \ cscopelist-am ctags ctags-am distclean distclean-generic \ distclean-libtool distclean-tags distdir dvi dvi-am html \ html-am info info-am install install-am install-data \ install-data-am install-data-hook install-dist_pkgdataDATA \ install-dvi install-dvi-am install-exec install-exec-am \ install-html install-html-am install-info install-info-am \ install-man install-pdf install-pdf-am install-ps \ install-ps-am install-strip installcheck installcheck-am \ installdirs installdirs-am maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-generic \ mostlyclean-libtool pdf pdf-am ps ps-am tags tags-am uninstall \ uninstall-am uninstall-dist_pkgdataDATA uninstall-hook .PRECIOUS: Makefile @USE_DOXYGEN_TRUE@all-local: Doxyfile.tmp html @USE_DOXYGEN_TRUE@html: Doxyfile.tmp @USE_DOXYGEN_TRUE@ $(DOXYGEN) $< @USE_DOXYGEN_TRUE@Doxyfile.tmp: @USE_DOXYGEN_TRUE@ sed -e "s%##VERSION##%@PACKAGE_VERSION@%g" -e "s%##HAS_DOT##%@HAS_DOT@%g" -e 's%##SRCDIR##%$(abs_top_srcdir)%g' -e 's%##BUILDDIR##%$(abs_top_builddir)%g' '$(srcdir)/Doxyfile' > Doxyfile.tmp @USE_DOXYGEN_TRUE@ cd '$(top_srcdir)' ; $(DOXYGEN) '$(abs_top_builddir)/doc/Doxyfile.tmp' @USE_DOXYGEN_TRUE@ if [ -d html/search ]; then chmod u+x html/search ; fi @USE_DOXYGEN_TRUE@clean-local: @USE_DOXYGEN_TRUE@ rm -rf html Doxyfile.tmp doxygen_sqlite3.db latex @USE_DOXYGEN_TRUE@install-data-hook: @USE_DOXYGEN_TRUE@ $(INSTALL) -d $(DESTDIR)$(pkgdatadir) @USE_DOXYGEN_TRUE@ '$(srcdir)/portable_cp' html $(DESTDIR)$(pkgdatadir) @USE_DOXYGEN_TRUE@uninstall-hook: @USE_DOXYGEN_TRUE@ rm -rf $(DESTDIR)$(pkgdatadir)/html @USE_DOXYGEN_TRUE@ rmdir $(DESTDIR)$(pkgdatadir) || true @USE_DOXYGEN_FALSE@all-local: @USE_DOXYGEN_FALSE@clean-local: @USE_DOXYGEN_FALSE@install-data-hook: @USE_DOXYGEN_FALSE@uninstall-hook: # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: ���������������������������������������������������������������������������������������������������������webdar-1.0.0/config.h.in����������������������������������������������������������������������������0000644�0001750�0001752�00000022765�15045134062�011736� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* config.h.in. Generated from configure.ac by autoheader. */ /* macro to set the stack size of class inheriting from libthreadar::thread */ #undef DEFAULT_STACK_SIZE /* Define to 1 if translation of program messages to the user's native language is requested. */ #undef ENABLE_NLS /* Define to 1 if you have the <arpa/inet.h> header file. */ #undef HAVE_ARPA_INET_H /* whether the system has support for POSIX.1e capabilities */ #undef HAVE_CAPABILITIES /* Define to 1 if you have the Mac OS X function CFLocaleCopyPreferredLanguages in the CoreFoundation framework. */ #undef HAVE_CFLOCALECOPYPREFERREDLANGUAGES /* Define to 1 if you have the Mac OS X function CFPreferencesCopyAppValue in the CoreFoundation framework. */ #undef HAVE_CFPREFERENCESCOPYAPPVALUE /* Define to 1 if you have the `ctime_r' function. */ #undef HAVE_CTIME_R /* Define to 1 if you have the <ctype.h> header file. */ #undef HAVE_CTYPE_H /* Define to 1 if you have the <dar/libdar.hpp> header file. */ #undef HAVE_DAR_LIBDAR_HPP /* Define if the GNU dcgettext() function is already present or preinstalled. */ #undef HAVE_DCGETTEXT /* Define to 1 if you have the <dirent.h> header file, and it defines `DIR'. */ #undef HAVE_DIRENT_H /* Define to 1 if you have the <dlfcn.h> header file. */ #undef HAVE_DLFCN_H /* Define to 1 if you have the <errno.h> header file. */ #undef HAVE_ERRNO_H /* Define to 1 if you have the <fcntl.h> header file. */ #undef HAVE_FCNTL_H /* Define to 1 if you have the `fdopendir' function. */ #undef HAVE_FDOPENDIR /* Define to 1 if your system has a working POSIX `fnmatch' function. */ #undef HAVE_FNMATCH /* Define to 1 if you have the <fnmatch.h> header file. */ #undef HAVE_FNMATCH_H /* Define to 1 if you have the `fork' function. */ #undef HAVE_FORK /* Define to 1 if you have the `getgrnam_r' function. */ #undef HAVE_GETGRNAM_R /* a getopt() call is declared in <unistd.h> */ #undef HAVE_GETOPT_IN_UNISTD_H /* a getopt_long() call is declared in <unistd.h> */ #undef HAVE_GETOPT_LONG_IN_UNISTD_H /* Define to 1 if you have the `getpwnam_r' function. */ #undef HAVE_GETPWNAM_R /* Define if the GNU gettext() function is already present or preinstalled. */ #undef HAVE_GETTEXT /* Define if you have the iconv() function and it works. */ #undef HAVE_ICONV /* Define to 1 if you have the <inttypes.h> header file. */ #undef HAVE_INTTYPES_H /* Define to 1 if you have the `lchown' function. */ #undef HAVE_LCHOWN /* Define to 1 if you have the `threadar' library (-lthreadar). */ #undef HAVE_LIBTHREADAR /* Define to 1 if you have the <libthreadar/libthreadar.hpp> header file. */ #undef HAVE_LIBTHREADAR_LIBTHREADAR_HPP /* Define to 1 if you have the <limits.h> header file. */ #undef HAVE_LIMITS_H /* Define to 1 if you have the <linux/capability.h> header file. */ #undef HAVE_LINUX_CAPABILITY_H /* Define to 1 if you have the `localtime_r' function. */ #undef HAVE_LOCALTIME_R /* Define to 1 if `lstat' has the bug that it succeeds when given the zero-length file name argument. */ #undef HAVE_LSTAT_EMPTY_STRING_BUG /* Define to 1 if your system has a GNU libc compatible `malloc' function, and to 0 otherwise. */ #undef HAVE_MALLOC /* Define to 1 if you have the `mkdir' function. */ #undef HAVE_MKDIR /* Define to 1 if you have the <ndir.h> header file, and it defines `DIR'. */ #undef HAVE_NDIR_H /* Define to 1 if you have the <netinet/in.h> header file. */ #undef HAVE_NETINET_IN_H /* Define to 1 if you have the <netinet/ip.h> header file. */ #undef HAVE_NETINET_IP_H /* Define to 1 if you have the <nlohmann/json.hpp> header file. */ #undef HAVE_NLOHMANN_JSON_HPP /* Define to 1 if you have the <openssl/err.h> header file. */ #undef HAVE_OPENSSL_ERR_H /* Define to 1 if you have the <openssl/ssl.h> header file. */ #undef HAVE_OPENSSL_SSL_H /* the optreset external variable exists to reset getopt standard call */ #undef HAVE_OPTRESET /* Define to 1 if you have the <pthread.h> header file. */ #undef HAVE_PTHREAD_H /* Define to 1 if you have the `readdir_r' function. */ #undef HAVE_READDIR_R /* Define to 1 if you have the `regcomp' function. */ #undef HAVE_REGCOMP /* Define to 1 if you have the `rmdir' function. */ #undef HAVE_RMDIR /* Define to 1 if you have the <signal.h> header file. */ #undef HAVE_SIGNAL_H /* Define to 1 if `stat' has the bug that it succeeds when given the zero-length file name argument. */ #undef HAVE_STAT_EMPTY_STRING_BUG /* Define to 1 if you have the <stdint.h> header file. */ #undef HAVE_STDINT_H /* Define to 1 if you have the <stdio.h> header file. */ #undef HAVE_STDIO_H /* Define to 1 if you have the <stdlib.h> header file. */ #undef HAVE_STDLIB_H /* Define to 1 if you have the `strerror_r' function. */ #undef HAVE_STRERROR_R /* strerror_r() returns a char * */ #undef HAVE_STRERROR_R_CHAR_PTR /* Define to 1 if you have the <strings.h> header file. */ #undef HAVE_STRINGS_H /* Define to 1 if you have the <string.h> header file. */ #undef HAVE_STRING_H /* Define to 1 if `st_rdev' is a member of `struct stat'. */ #undef HAVE_STRUCT_STAT_ST_RDEV /* Define to 1 if you have the <syslog.h> header file. */ #undef HAVE_SYSLOG_H /* Define to 1 if you have the <sys/capability.h> header file. */ #undef HAVE_SYS_CAPABILITY_H /* Define to 1 if you have the <sys/dir.h> header file, and it defines `DIR'. */ #undef HAVE_SYS_DIR_H /* Define to 1 if you have the <sys/ndir.h> header file, and it defines `DIR'. */ #undef HAVE_SYS_NDIR_H /* Define to 1 if you have the <sys/socket.h> header file. */ #undef HAVE_SYS_SOCKET_H /* Define to 1 if you have the <sys/stat.h> header file. */ #undef HAVE_SYS_STAT_H /* Define to 1 if you have the <sys/types.h> header file. */ #undef HAVE_SYS_TYPES_H /* Define to 1 if you have <sys/wait.h> that is POSIX.1 compatible. */ #undef HAVE_SYS_WAIT_H /* Define to 1 if you have the <time.h> header file. */ #undef HAVE_TIME_H /* Define to 1 if you have the <unistd.h> header file. */ #undef HAVE_UNISTD_H /* Define to 1 if you have the `utime' function. */ #undef HAVE_UTIME /* Define to 1 if you have the <utime.h> header file. */ #undef HAVE_UTIME_H /* Define to 1 if `utime(file, NULL)' sets file's timestamp to the present. */ #undef HAVE_UTIME_NULL /* Define to 1 if you have the `vfork' function. */ #undef HAVE_VFORK /* Define to 1 if you have the <vfork.h> header file. */ #undef HAVE_VFORK_H /* Define to 1 if `fork' works. */ #undef HAVE_WORKING_FORK /* Define to 1 if `vfork' works. */ #undef HAVE_WORKING_VFORK /* Define as const if the declaration of iconv() needs const. */ #undef ICONV_CONST /* libthreadar thread class can set the stack size */ #undef LIBTHREADAR_STACK_FEATURE /* Define to 1 if `lstat' dereferences a symlink specified with a trailing slash. */ #undef LSTAT_FOLLOWS_SLASHED_SYMLINK /* Define to the sub-directory where libtool stores uninstalled libraries. */ #undef LT_OBJDIR /* Define to 1 if `major', `minor', and `makedev' are declared in <mkdev.h>. */ #undef MAJOR_IN_MKDEV /* Define to 1 if `major', `minor', and `makedev' are declared in <sysmacros.h>. */ #undef MAJOR_IN_SYSMACROS /* Name of package */ #undef PACKAGE /* Define to the address where bug reports for this package should be sent. */ #undef PACKAGE_BUGREPORT /* Define to the full name of this package. */ #undef PACKAGE_NAME /* Define to the full name and version of this package. */ #undef PACKAGE_STRING /* Define to the one symbol short name of this package. */ #undef PACKAGE_TARNAME /* Define to the home page for this package. */ #undef PACKAGE_URL /* Define to the version of this package. */ #undef PACKAGE_VERSION /* The size of `off_t', as computed by sizeof. */ #undef SIZEOF_OFF_T /* The size of `size_t', as computed by sizeof. */ #undef SIZEOF_SIZE_T /* The size of `time_t', as computed by sizeof. */ #undef SIZEOF_TIME_T /* Define to 1 if all of the C90 standard headers exist (not just the ones required in a freestanding environment). This macro is provided for backward compatibility; new code need not use it. */ #undef STDC_HEADERS /* Version number of package */ #undef VERSION /* trivial passwords for dev purposes */ #undef WEBDAR_DEV /* webdar version, definition in configure.ac */ #undef WEBDAR_VERSION /* activate makedev(), major() and minor() when _XOPEN_SOURCE is set */ #undef _BSD_SOURCE /* Define on Darwin to activate all library features */ #undef _DARWIN_C_SOURCE /* disabling warning about _BSD_SOURCE to be deprecated */ #undef _DEFAULT_SOURCE /* Number of bits in a file offset, on hosts where this is settable. */ #undef _FILE_OFFSET_BITS /* Define on Linux to activate all library features */ #undef _GNU_SOURCE /* Define for large files, on AIX-style hosts. */ #undef _LARGE_FILES /* Define on NetBSD to activate all library features */ #undef _NETBSD_SOURCE /* activates POSIX.1-2008 symbols in order to allow microsecond time setting, as well as ctime_r() call */ #undef _XOPEN_SOURCE /* Define on FreeBSD to activate all library features */ #undef __BSD_VISIBLE /* Define to empty if `const' does not conform to ANSI C. */ #undef const /* Define to `__inline__' or `__inline' if that's what the C compiler calls it, or to nothing if 'inline' is not supported under any name. */ #ifndef __cplusplus #undef inline #endif /* Define to rpl_malloc if the replacement function should be used. */ #undef malloc /* Define to `long int' if <sys/types.h> does not define. */ #undef off_t /* Define as a signed integer type capable of holding a process identifier. */ #undef pid_t /* Define to `unsigned int' if <sys/types.h> does not define. */ #undef size_t /* Define as `fork' if `vfork' does not work. */ #undef vfork �����������webdar-1.0.0/missing��������������������������������������������������������������������������������0000755�0001750�0001752�00000015336�14215102164�011302� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#! /bin/sh # Common wrapper for a few potentially missing GNU programs. scriptversion=2018-03-07.03; # UTC # Copyright (C) 1996-2021 Free Software Foundation, Inc. # Originally written by Fran,cois Pinard <pinard@iro.umontreal.ca>, 1996. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2, or (at your option) # any later version. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # You should have received a copy of the GNU General Public License # along with this program. If not, see <https://www.gnu.org/licenses/>. # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. if test $# -eq 0; then echo 1>&2 "Try '$0 --help' for more information" exit 1 fi case $1 in --is-lightweight) # Used by our autoconf macros to check whether the available missing # script is modern enough. exit 0 ;; --run) # Back-compat with the calling convention used by older automake. shift ;; -h|--h|--he|--hel|--help) echo "\ $0 [OPTION]... PROGRAM [ARGUMENT]... Run 'PROGRAM [ARGUMENT]...', returning a proper advice when this fails due to PROGRAM being missing or too old. Options: -h, --help display this help and exit -v, --version output version information and exit Supported PROGRAM values: aclocal autoconf autoheader autom4te automake makeinfo bison yacc flex lex help2man Version suffixes to PROGRAM as well as the prefixes 'gnu-', 'gnu', and 'g' are ignored when checking the name. Send bug reports to <bug-automake@gnu.org>." exit $? ;; -v|--v|--ve|--ver|--vers|--versi|--versio|--version) echo "missing $scriptversion (GNU Automake)" exit $? ;; -*) echo 1>&2 "$0: unknown '$1' option" echo 1>&2 "Try '$0 --help' for more information" exit 1 ;; esac # Run the given program, remember its exit status. "$@"; st=$? # If it succeeded, we are done. test $st -eq 0 && exit 0 # Also exit now if we it failed (or wasn't found), and '--version' was # passed; such an option is passed most likely to detect whether the # program is present and works. case $2 in --version|--help) exit $st;; esac # Exit code 63 means version mismatch. This often happens when the user # tries to use an ancient version of a tool on a file that requires a # minimum version. if test $st -eq 63; then msg="probably too old" elif test $st -eq 127; then # Program was missing. msg="missing on your system" else # Program was found and executed, but failed. Give up. exit $st fi perl_URL=https://www.perl.org/ flex_URL=https://github.com/westes/flex gnu_software_URL=https://www.gnu.org/software program_details () { case $1 in aclocal|automake) echo "The '$1' program is part of the GNU Automake package:" echo "<$gnu_software_URL/automake>" echo "It also requires GNU Autoconf, GNU m4 and Perl in order to run:" echo "<$gnu_software_URL/autoconf>" echo "<$gnu_software_URL/m4/>" echo "<$perl_URL>" ;; autoconf|autom4te|autoheader) echo "The '$1' program is part of the GNU Autoconf package:" echo "<$gnu_software_URL/autoconf/>" echo "It also requires GNU m4 and Perl in order to run:" echo "<$gnu_software_URL/m4/>" echo "<$perl_URL>" ;; esac } give_advice () { # Normalize program name to check for. normalized_program=`echo "$1" | sed ' s/^gnu-//; t s/^gnu//; t s/^g//; t'` printf '%s\n' "'$1' is $msg." configure_deps="'configure.ac' or m4 files included by 'configure.ac'" case $normalized_program in autoconf*) echo "You should only need it if you modified 'configure.ac'," echo "or m4 files included by it." program_details 'autoconf' ;; autoheader*) echo "You should only need it if you modified 'acconfig.h' or" echo "$configure_deps." program_details 'autoheader' ;; automake*) echo "You should only need it if you modified 'Makefile.am' or" echo "$configure_deps." program_details 'automake' ;; aclocal*) echo "You should only need it if you modified 'acinclude.m4' or" echo "$configure_deps." program_details 'aclocal' ;; autom4te*) echo "You might have modified some maintainer files that require" echo "the 'autom4te' program to be rebuilt." program_details 'autom4te' ;; bison*|yacc*) echo "You should only need it if you modified a '.y' file." echo "You may want to install the GNU Bison package:" echo "<$gnu_software_URL/bison/>" ;; lex*|flex*) echo "You should only need it if you modified a '.l' file." echo "You may want to install the Fast Lexical Analyzer package:" echo "<$flex_URL>" ;; help2man*) echo "You should only need it if you modified a dependency" \ "of a man page." echo "You may want to install the GNU Help2man package:" echo "<$gnu_software_URL/help2man/>" ;; makeinfo*) echo "You should only need it if you modified a '.texi' file, or" echo "any other file indirectly affecting the aspect of the manual." echo "You might want to install the Texinfo package:" echo "<$gnu_software_URL/texinfo/>" echo "The spurious makeinfo call might also be the consequence of" echo "using a buggy 'make' (AIX, DU, IRIX), in which case you might" echo "want to install GNU make:" echo "<$gnu_software_URL/make/>" ;; *) echo "You might have modified some files without having the proper" echo "tools for further handling them. Check the 'README' file, it" echo "often tells you about the needed prerequisites for installing" echo "this package. You may also peek at any GNU archive site, in" echo "case some other package contains this missing '$1' program." ;; esac } give_advice "$1" | sed -e '1s/^/WARNING: /' \ -e '2,$s/^/ /' >&2 # Propagate the correct exit status (expected to be 127 for a program # not found, 63 for a program that failed due to version mismatch). exit $st # Local variables: # eval: (add-hook 'before-save-hook 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-time-zone: "UTC0" # time-stamp-end: "; # UTC" # End: ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������webdar-1.0.0/config.sub�����������������������������������������������������������������������������0000755�0001750�0001752�00000105116�14175772605�011704� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#! /bin/sh # Configuration validation subroutine script. # Copyright 1992-2022 Free Software Foundation, Inc. # shellcheck disable=SC2006,SC2268 # see below for rationale timestamp='2022-01-03' # This file is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, see <https://www.gnu.org/licenses/>. # # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that # program. This Exception is an additional permission under section 7 # of the GNU General Public License, version 3 ("GPLv3"). # Please send patches to <config-patches@gnu.org>. # # Configuration subroutine to validate and canonicalize a configuration type. # Supply the specified configuration type as an argument. # If it is invalid, we print an error message on stderr and exit with code 1. # Otherwise, we print the canonical config type on stdout and succeed. # You can get the latest version of this script from: # https://git.savannah.gnu.org/cgit/config.git/plain/config.sub # This file is supposed to be the same for all GNU packages # and recognize all the CPU types, system types and aliases # that are meaningful with *any* GNU software. # Each package is responsible for reporting which valid configurations # it does not support. The user should be able to distinguish # a failure to support a valid configuration from a meaningless # configuration. # The goal of this file is to map all the various variations of a given # machine specification into a single specification in the form: # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM # or in some cases, the newer four-part form: # CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM # It is wrong to echo any other type of specification. # The "shellcheck disable" line above the timestamp inhibits complaints # about features and limitations of the classic Bourne shell that were # superseded or lifted in POSIX. However, this script identifies a wide # variety of pre-POSIX systems that do not have POSIX shells at all, and # even some reasonably current systems (Solaris 10 as case-in-point) still # have a pre-POSIX /bin/sh. me=`echo "$0" | sed -e 's,.*/,,'` usage="\ Usage: $0 [OPTION] CPU-MFR-OPSYS or ALIAS Canonicalize a configuration name. Options: -h, --help print this help, then exit -t, --time-stamp print date of last modification, then exit -v, --version print version number, then exit Report bugs and patches to <config-patches@gnu.org>." version="\ GNU config.sub ($timestamp) Copyright 1992-2022 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." help=" Try \`$me --help' for more information." # Parse command line while test $# -gt 0 ; do case $1 in --time-stamp | --time* | -t ) echo "$timestamp" ; exit ;; --version | -v ) echo "$version" ; exit ;; --help | --h* | -h ) echo "$usage"; exit ;; -- ) # Stop option processing shift; break ;; - ) # Use stdin as input. break ;; -* ) echo "$me: invalid option $1$help" >&2 exit 1 ;; *local*) # First pass through any local machine types. echo "$1" exit ;; * ) break ;; esac done case $# in 0) echo "$me: missing argument$help" >&2 exit 1;; 1) ;; *) echo "$me: too many arguments$help" >&2 exit 1;; esac # Split fields of configuration type # shellcheck disable=SC2162 saved_IFS=$IFS IFS="-" read field1 field2 field3 field4 <<EOF $1 EOF IFS=$saved_IFS # Separate into logical components for further validation case $1 in *-*-*-*-*) echo Invalid configuration \`"$1"\': more than four components >&2 exit 1 ;; *-*-*-*) basic_machine=$field1-$field2 basic_os=$field3-$field4 ;; *-*-*) # Ambiguous whether COMPANY is present, or skipped and KERNEL-OS is two # parts maybe_os=$field2-$field3 case $maybe_os in nto-qnx* | linux-* | uclinux-uclibc* \ | uclinux-gnu* | kfreebsd*-gnu* | knetbsd*-gnu* | netbsd*-gnu* \ | netbsd*-eabi* | kopensolaris*-gnu* | cloudabi*-eabi* \ | storm-chaos* | os2-emx* | rtmk-nova*) basic_machine=$field1 basic_os=$maybe_os ;; android-linux) basic_machine=$field1-unknown basic_os=linux-android ;; *) basic_machine=$field1-$field2 basic_os=$field3 ;; esac ;; *-*) # A lone config we happen to match not fitting any pattern case $field1-$field2 in decstation-3100) basic_machine=mips-dec basic_os= ;; *-*) # Second component is usually, but not always the OS case $field2 in # Prevent following clause from handling this valid os sun*os*) basic_machine=$field1 basic_os=$field2 ;; zephyr*) basic_machine=$field1-unknown basic_os=$field2 ;; # Manufacturers dec* | mips* | sequent* | encore* | pc533* | sgi* | sony* \ | att* | 7300* | 3300* | delta* | motorola* | sun[234]* \ | unicom* | ibm* | next | hp | isi* | apollo | altos* \ | convergent* | ncr* | news | 32* | 3600* | 3100* \ | hitachi* | c[123]* | convex* | sun | crds | omron* | dg \ | ultra | tti* | harris | dolphin | highlevel | gould \ | cbm | ns | masscomp | apple | axis | knuth | cray \ | microblaze* | sim | cisco \ | oki | wec | wrs | winbond) basic_machine=$field1-$field2 basic_os= ;; *) basic_machine=$field1 basic_os=$field2 ;; esac ;; esac ;; *) # Convert single-component short-hands not valid as part of # multi-component configurations. case $field1 in 386bsd) basic_machine=i386-pc basic_os=bsd ;; a29khif) basic_machine=a29k-amd basic_os=udi ;; adobe68k) basic_machine=m68010-adobe basic_os=scout ;; alliant) basic_machine=fx80-alliant basic_os= ;; altos | altos3068) basic_machine=m68k-altos basic_os= ;; am29k) basic_machine=a29k-none basic_os=bsd ;; amdahl) basic_machine=580-amdahl basic_os=sysv ;; amiga) basic_machine=m68k-unknown basic_os= ;; amigaos | amigados) basic_machine=m68k-unknown basic_os=amigaos ;; amigaunix | amix) basic_machine=m68k-unknown basic_os=sysv4 ;; apollo68) basic_machine=m68k-apollo basic_os=sysv ;; apollo68bsd) basic_machine=m68k-apollo basic_os=bsd ;; aros) basic_machine=i386-pc basic_os=aros ;; aux) basic_machine=m68k-apple basic_os=aux ;; balance) basic_machine=ns32k-sequent basic_os=dynix ;; blackfin) basic_machine=bfin-unknown basic_os=linux ;; cegcc) basic_machine=arm-unknown basic_os=cegcc ;; convex-c1) basic_machine=c1-convex basic_os=bsd ;; convex-c2) basic_machine=c2-convex basic_os=bsd ;; convex-c32) basic_machine=c32-convex basic_os=bsd ;; convex-c34) basic_machine=c34-convex basic_os=bsd ;; convex-c38) basic_machine=c38-convex basic_os=bsd ;; cray) basic_machine=j90-cray basic_os=unicos ;; crds | unos) basic_machine=m68k-crds basic_os= ;; da30) basic_machine=m68k-da30 basic_os= ;; decstation | pmax | pmin | dec3100 | decstatn) basic_machine=mips-dec basic_os= ;; delta88) basic_machine=m88k-motorola basic_os=sysv3 ;; dicos) basic_machine=i686-pc basic_os=dicos ;; djgpp) basic_machine=i586-pc basic_os=msdosdjgpp ;; ebmon29k) basic_machine=a29k-amd basic_os=ebmon ;; es1800 | OSE68k | ose68k | ose | OSE) basic_machine=m68k-ericsson basic_os=ose ;; gmicro) basic_machine=tron-gmicro basic_os=sysv ;; go32) basic_machine=i386-pc basic_os=go32 ;; h8300hms) basic_machine=h8300-hitachi basic_os=hms ;; h8300xray) basic_machine=h8300-hitachi basic_os=xray ;; h8500hms) basic_machine=h8500-hitachi basic_os=hms ;; harris) basic_machine=m88k-harris basic_os=sysv3 ;; hp300 | hp300hpux) basic_machine=m68k-hp basic_os=hpux ;; hp300bsd) basic_machine=m68k-hp basic_os=bsd ;; hppaosf) basic_machine=hppa1.1-hp basic_os=osf ;; hppro) basic_machine=hppa1.1-hp basic_os=proelf ;; i386mach) basic_machine=i386-mach basic_os=mach ;; isi68 | isi) basic_machine=m68k-isi basic_os=sysv ;; m68knommu) basic_machine=m68k-unknown basic_os=linux ;; magnum | m3230) basic_machine=mips-mips basic_os=sysv ;; merlin) basic_machine=ns32k-utek basic_os=sysv ;; mingw64) basic_machine=x86_64-pc basic_os=mingw64 ;; mingw32) basic_machine=i686-pc basic_os=mingw32 ;; mingw32ce) basic_machine=arm-unknown basic_os=mingw32ce ;; monitor) basic_machine=m68k-rom68k basic_os=coff ;; morphos) basic_machine=powerpc-unknown basic_os=morphos ;; moxiebox) basic_machine=moxie-unknown basic_os=moxiebox ;; msdos) basic_machine=i386-pc basic_os=msdos ;; msys) basic_machine=i686-pc basic_os=msys ;; mvs) basic_machine=i370-ibm basic_os=mvs ;; nacl) basic_machine=le32-unknown basic_os=nacl ;; ncr3000) basic_machine=i486-ncr basic_os=sysv4 ;; netbsd386) basic_machine=i386-pc basic_os=netbsd ;; netwinder) basic_machine=armv4l-rebel basic_os=linux ;; news | news700 | news800 | news900) basic_machine=m68k-sony basic_os=newsos ;; news1000) basic_machine=m68030-sony basic_os=newsos ;; necv70) basic_machine=v70-nec basic_os=sysv ;; nh3000) basic_machine=m68k-harris basic_os=cxux ;; nh[45]000) basic_machine=m88k-harris basic_os=cxux ;; nindy960) basic_machine=i960-intel basic_os=nindy ;; mon960) basic_machine=i960-intel basic_os=mon960 ;; nonstopux) basic_machine=mips-compaq basic_os=nonstopux ;; os400) basic_machine=powerpc-ibm basic_os=os400 ;; OSE68000 | ose68000) basic_machine=m68000-ericsson basic_os=ose ;; os68k) basic_machine=m68k-none basic_os=os68k ;; paragon) basic_machine=i860-intel basic_os=osf ;; parisc) basic_machine=hppa-unknown basic_os=linux ;; psp) basic_machine=mipsallegrexel-sony basic_os=psp ;; pw32) basic_machine=i586-unknown basic_os=pw32 ;; rdos | rdos64) basic_machine=x86_64-pc basic_os=rdos ;; rdos32) basic_machine=i386-pc basic_os=rdos ;; rom68k) basic_machine=m68k-rom68k basic_os=coff ;; sa29200) basic_machine=a29k-amd basic_os=udi ;; sei) basic_machine=mips-sei basic_os=seiux ;; sequent) basic_machine=i386-sequent basic_os= ;; sps7) basic_machine=m68k-bull basic_os=sysv2 ;; st2000) basic_machine=m68k-tandem basic_os= ;; stratus) basic_machine=i860-stratus basic_os=sysv4 ;; sun2) basic_machine=m68000-sun basic_os= ;; sun2os3) basic_machine=m68000-sun basic_os=sunos3 ;; sun2os4) basic_machine=m68000-sun basic_os=sunos4 ;; sun3) basic_machine=m68k-sun basic_os= ;; sun3os3) basic_machine=m68k-sun basic_os=sunos3 ;; sun3os4) basic_machine=m68k-sun basic_os=sunos4 ;; sun4) basic_machine=sparc-sun basic_os= ;; sun4os3) basic_machine=sparc-sun basic_os=sunos3 ;; sun4os4) basic_machine=sparc-sun basic_os=sunos4 ;; sun4sol2) basic_machine=sparc-sun basic_os=solaris2 ;; sun386 | sun386i | roadrunner) basic_machine=i386-sun basic_os= ;; sv1) basic_machine=sv1-cray basic_os=unicos ;; symmetry) basic_machine=i386-sequent basic_os=dynix ;; t3e) basic_machine=alphaev5-cray basic_os=unicos ;; t90) basic_machine=t90-cray basic_os=unicos ;; toad1) basic_machine=pdp10-xkl basic_os=tops20 ;; tpf) basic_machine=s390x-ibm basic_os=tpf ;; udi29k) basic_machine=a29k-amd basic_os=udi ;; ultra3) basic_machine=a29k-nyu basic_os=sym1 ;; v810 | necv810) basic_machine=v810-nec basic_os=none ;; vaxv) basic_machine=vax-dec basic_os=sysv ;; vms) basic_machine=vax-dec basic_os=vms ;; vsta) basic_machine=i386-pc basic_os=vsta ;; vxworks960) basic_machine=i960-wrs basic_os=vxworks ;; vxworks68) basic_machine=m68k-wrs basic_os=vxworks ;; vxworks29k) basic_machine=a29k-wrs basic_os=vxworks ;; xbox) basic_machine=i686-pc basic_os=mingw32 ;; ymp) basic_machine=ymp-cray basic_os=unicos ;; *) basic_machine=$1 basic_os= ;; esac ;; esac # Decode 1-component or ad-hoc basic machines case $basic_machine in # Here we handle the default manufacturer of certain CPU types. It is in # some cases the only manufacturer, in others, it is the most popular. w89k) cpu=hppa1.1 vendor=winbond ;; op50n) cpu=hppa1.1 vendor=oki ;; op60c) cpu=hppa1.1 vendor=oki ;; ibm*) cpu=i370 vendor=ibm ;; orion105) cpu=clipper vendor=highlevel ;; mac | mpw | mac-mpw) cpu=m68k vendor=apple ;; pmac | pmac-mpw) cpu=powerpc vendor=apple ;; # Recognize the various machine names and aliases which stand # for a CPU type and a company and sometimes even an OS. 3b1 | 7300 | 7300-att | att-7300 | pc7300 | safari | unixpc) cpu=m68000 vendor=att ;; 3b*) cpu=we32k vendor=att ;; bluegene*) cpu=powerpc vendor=ibm basic_os=cnk ;; decsystem10* | dec10*) cpu=pdp10 vendor=dec basic_os=tops10 ;; decsystem20* | dec20*) cpu=pdp10 vendor=dec basic_os=tops20 ;; delta | 3300 | motorola-3300 | motorola-delta \ | 3300-motorola | delta-motorola) cpu=m68k vendor=motorola ;; dpx2*) cpu=m68k vendor=bull basic_os=sysv3 ;; encore | umax | mmax) cpu=ns32k vendor=encore ;; elxsi) cpu=elxsi vendor=elxsi basic_os=${basic_os:-bsd} ;; fx2800) cpu=i860 vendor=alliant ;; genix) cpu=ns32k vendor=ns ;; h3050r* | hiux*) cpu=hppa1.1 vendor=hitachi basic_os=hiuxwe2 ;; hp3k9[0-9][0-9] | hp9[0-9][0-9]) cpu=hppa1.0 vendor=hp ;; hp9k2[0-9][0-9] | hp9k31[0-9]) cpu=m68000 vendor=hp ;; hp9k3[2-9][0-9]) cpu=m68k vendor=hp ;; hp9k6[0-9][0-9] | hp6[0-9][0-9]) cpu=hppa1.0 vendor=hp ;; hp9k7[0-79][0-9] | hp7[0-79][0-9]) cpu=hppa1.1 vendor=hp ;; hp9k78[0-9] | hp78[0-9]) # FIXME: really hppa2.0-hp cpu=hppa1.1 vendor=hp ;; hp9k8[67]1 | hp8[67]1 | hp9k80[24] | hp80[24] | hp9k8[78]9 | hp8[78]9 | hp9k893 | hp893) # FIXME: really hppa2.0-hp cpu=hppa1.1 vendor=hp ;; hp9k8[0-9][13679] | hp8[0-9][13679]) cpu=hppa1.1 vendor=hp ;; hp9k8[0-9][0-9] | hp8[0-9][0-9]) cpu=hppa1.0 vendor=hp ;; i*86v32) cpu=`echo "$1" | sed -e 's/86.*/86/'` vendor=pc basic_os=sysv32 ;; i*86v4*) cpu=`echo "$1" | sed -e 's/86.*/86/'` vendor=pc basic_os=sysv4 ;; i*86v) cpu=`echo "$1" | sed -e 's/86.*/86/'` vendor=pc basic_os=sysv ;; i*86sol2) cpu=`echo "$1" | sed -e 's/86.*/86/'` vendor=pc basic_os=solaris2 ;; j90 | j90-cray) cpu=j90 vendor=cray basic_os=${basic_os:-unicos} ;; iris | iris4d) cpu=mips vendor=sgi case $basic_os in irix*) ;; *) basic_os=irix4 ;; esac ;; miniframe) cpu=m68000 vendor=convergent ;; *mint | mint[0-9]* | *MiNT | *MiNT[0-9]*) cpu=m68k vendor=atari basic_os=mint ;; news-3600 | risc-news) cpu=mips vendor=sony basic_os=newsos ;; next | m*-next) cpu=m68k vendor=next case $basic_os in openstep*) ;; nextstep*) ;; ns2*) basic_os=nextstep2 ;; *) basic_os=nextstep3 ;; esac ;; np1) cpu=np1 vendor=gould ;; op50n-* | op60c-*) cpu=hppa1.1 vendor=oki basic_os=proelf ;; pa-hitachi) cpu=hppa1.1 vendor=hitachi basic_os=hiuxwe2 ;; pbd) cpu=sparc vendor=tti ;; pbb) cpu=m68k vendor=tti ;; pc532) cpu=ns32k vendor=pc532 ;; pn) cpu=pn vendor=gould ;; power) cpu=power vendor=ibm ;; ps2) cpu=i386 vendor=ibm ;; rm[46]00) cpu=mips vendor=siemens ;; rtpc | rtpc-*) cpu=romp vendor=ibm ;; sde) cpu=mipsisa32 vendor=sde basic_os=${basic_os:-elf} ;; simso-wrs) cpu=sparclite vendor=wrs basic_os=vxworks ;; tower | tower-32) cpu=m68k vendor=ncr ;; vpp*|vx|vx-*) cpu=f301 vendor=fujitsu ;; w65) cpu=w65 vendor=wdc ;; w89k-*) cpu=hppa1.1 vendor=winbond basic_os=proelf ;; none) cpu=none vendor=none ;; leon|leon[3-9]) cpu=sparc vendor=$basic_machine ;; leon-*|leon[3-9]-*) cpu=sparc vendor=`echo "$basic_machine" | sed 's/-.*//'` ;; *-*) # shellcheck disable=SC2162 saved_IFS=$IFS IFS="-" read cpu vendor <<EOF $basic_machine EOF IFS=$saved_IFS ;; # We use `pc' rather than `unknown' # because (1) that's what they normally are, and # (2) the word "unknown" tends to confuse beginning users. i*86 | x86_64) cpu=$basic_machine vendor=pc ;; # These rules are duplicated from below for sake of the special case above; # i.e. things that normalized to x86 arches should also default to "pc" pc98) cpu=i386 vendor=pc ;; x64 | amd64) cpu=x86_64 vendor=pc ;; # Recognize the basic CPU types without company name. *) cpu=$basic_machine vendor=unknown ;; esac unset -v basic_machine # Decode basic machines in the full and proper CPU-Company form. case $cpu-$vendor in # Here we handle the default manufacturer of certain CPU types in canonical form. It is in # some cases the only manufacturer, in others, it is the most popular. craynv-unknown) vendor=cray basic_os=${basic_os:-unicosmp} ;; c90-unknown | c90-cray) vendor=cray basic_os=${Basic_os:-unicos} ;; fx80-unknown) vendor=alliant ;; romp-unknown) vendor=ibm ;; mmix-unknown) vendor=knuth ;; microblaze-unknown | microblazeel-unknown) vendor=xilinx ;; rs6000-unknown) vendor=ibm ;; vax-unknown) vendor=dec ;; pdp11-unknown) vendor=dec ;; we32k-unknown) vendor=att ;; cydra-unknown) vendor=cydrome ;; i370-ibm*) vendor=ibm ;; orion-unknown) vendor=highlevel ;; xps-unknown | xps100-unknown) cpu=xps100 vendor=honeywell ;; # Here we normalize CPU types with a missing or matching vendor armh-unknown | armh-alt) cpu=armv7l vendor=alt basic_os=${basic_os:-linux-gnueabihf} ;; dpx20-unknown | dpx20-bull) cpu=rs6000 vendor=bull basic_os=${basic_os:-bosx} ;; # Here we normalize CPU types irrespective of the vendor amd64-*) cpu=x86_64 ;; blackfin-*) cpu=bfin basic_os=linux ;; c54x-*) cpu=tic54x ;; c55x-*) cpu=tic55x ;; c6x-*) cpu=tic6x ;; e500v[12]-*) cpu=powerpc basic_os=${basic_os}"spe" ;; mips3*-*) cpu=mips64 ;; ms1-*) cpu=mt ;; m68knommu-*) cpu=m68k basic_os=linux ;; m9s12z-* | m68hcs12z-* | hcs12z-* | s12z-*) cpu=s12z ;; openrisc-*) cpu=or32 ;; parisc-*) cpu=hppa basic_os=linux ;; pentium-* | p5-* | k5-* | k6-* | nexgen-* | viac3-*) cpu=i586 ;; pentiumpro-* | p6-* | 6x86-* | athlon-* | athalon_*-*) cpu=i686 ;; pentiumii-* | pentium2-* | pentiumiii-* | pentium3-*) cpu=i686 ;; pentium4-*) cpu=i786 ;; pc98-*) cpu=i386 ;; ppc-* | ppcbe-*) cpu=powerpc ;; ppcle-* | powerpclittle-*) cpu=powerpcle ;; ppc64-*) cpu=powerpc64 ;; ppc64le-* | powerpc64little-*) cpu=powerpc64le ;; sb1-*) cpu=mipsisa64sb1 ;; sb1el-*) cpu=mipsisa64sb1el ;; sh5e[lb]-*) cpu=`echo "$cpu" | sed 's/^\(sh.\)e\(.\)$/\1\2e/'` ;; spur-*) cpu=spur ;; strongarm-* | thumb-*) cpu=arm ;; tx39-*) cpu=mipstx39 ;; tx39el-*) cpu=mipstx39el ;; x64-*) cpu=x86_64 ;; xscale-* | xscalee[bl]-*) cpu=`echo "$cpu" | sed 's/^xscale/arm/'` ;; arm64-* | aarch64le-*) cpu=aarch64 ;; # Recognize the canonical CPU Types that limit and/or modify the # company names they are paired with. cr16-*) basic_os=${basic_os:-elf} ;; crisv32-* | etraxfs*-*) cpu=crisv32 vendor=axis ;; cris-* | etrax*-*) cpu=cris vendor=axis ;; crx-*) basic_os=${basic_os:-elf} ;; neo-tandem) cpu=neo vendor=tandem ;; nse-tandem) cpu=nse vendor=tandem ;; nsr-tandem) cpu=nsr vendor=tandem ;; nsv-tandem) cpu=nsv vendor=tandem ;; nsx-tandem) cpu=nsx vendor=tandem ;; mipsallegrexel-sony) cpu=mipsallegrexel vendor=sony ;; tile*-*) basic_os=${basic_os:-linux-gnu} ;; *) # Recognize the canonical CPU types that are allowed with any # company name. case $cpu in 1750a | 580 \ | a29k \ | aarch64 | aarch64_be \ | abacus \ | alpha | alphaev[4-8] | alphaev56 | alphaev6[78] \ | alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] \ | alphapca5[67] | alpha64pca5[67] \ | am33_2.0 \ | amdgcn \ | arc | arceb | arc32 | arc64 \ | arm | arm[lb]e | arme[lb] | armv* \ | avr | avr32 \ | asmjs \ | ba \ | be32 | be64 \ | bfin | bpf | bs2000 \ | c[123]* | c30 | [cjt]90 | c4x \ | c8051 | clipper | craynv | csky | cydra \ | d10v | d30v | dlx | dsp16xx \ | e2k | elxsi | epiphany \ | f30[01] | f700 | fido | fr30 | frv | ft32 | fx80 \ | h8300 | h8500 \ | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \ | hexagon \ | i370 | i*86 | i860 | i960 | ia16 | ia64 \ | ip2k | iq2000 \ | k1om \ | le32 | le64 \ | lm32 \ | loongarch32 | loongarch64 | loongarchx32 \ | m32c | m32r | m32rle \ | m5200 | m68000 | m680[012346]0 | m68360 | m683?2 | m68k \ | m6811 | m68hc11 | m6812 | m68hc12 | m68hcs12x \ | m88110 | m88k | maxq | mb | mcore | mep | metag \ | microblaze | microblazeel \ | mips | mipsbe | mipseb | mipsel | mipsle \ | mips16 \ | mips64 | mips64eb | mips64el \ | mips64octeon | mips64octeonel \ | mips64orion | mips64orionel \ | mips64r5900 | mips64r5900el \ | mips64vr | mips64vrel \ | mips64vr4100 | mips64vr4100el \ | mips64vr4300 | mips64vr4300el \ | mips64vr5000 | mips64vr5000el \ | mips64vr5900 | mips64vr5900el \ | mipsisa32 | mipsisa32el \ | mipsisa32r2 | mipsisa32r2el \ | mipsisa32r3 | mipsisa32r3el \ | mipsisa32r5 | mipsisa32r5el \ | mipsisa32r6 | mipsisa32r6el \ | mipsisa64 | mipsisa64el \ | mipsisa64r2 | mipsisa64r2el \ | mipsisa64r3 | mipsisa64r3el \ | mipsisa64r5 | mipsisa64r5el \ | mipsisa64r6 | mipsisa64r6el \ | mipsisa64sb1 | mipsisa64sb1el \ | mipsisa64sr71k | mipsisa64sr71kel \ | mipsr5900 | mipsr5900el \ | mipstx39 | mipstx39el \ | mmix \ | mn10200 | mn10300 \ | moxie \ | mt \ | msp430 \ | nds32 | nds32le | nds32be \ | nfp \ | nios | nios2 | nios2eb | nios2el \ | none | np1 | ns16k | ns32k | nvptx \ | open8 \ | or1k* \ | or32 \ | orion \ | picochip \ | pdp10 | pdp11 | pj | pjl | pn | power \ | powerpc | powerpc64 | powerpc64le | powerpcle | powerpcspe \ | pru \ | pyramid \ | riscv | riscv32 | riscv32be | riscv64 | riscv64be \ | rl78 | romp | rs6000 | rx \ | s390 | s390x \ | score \ | sh | shl \ | sh[1234] | sh[24]a | sh[24]ae[lb] | sh[23]e | she[lb] | sh[lb]e \ | sh[1234]e[lb] | sh[12345][lb]e | sh[23]ele | sh64 | sh64le \ | sparc | sparc64 | sparc64b | sparc64v | sparc86x | sparclet \ | sparclite \ | sparcv8 | sparcv9 | sparcv9b | sparcv9v | sv1 | sx* \ | spu \ | tahoe \ | thumbv7* \ | tic30 | tic4x | tic54x | tic55x | tic6x | tic80 \ | tron \ | ubicom32 \ | v70 | v850 | v850e | v850e1 | v850es | v850e2 | v850e2v3 \ | vax \ | visium \ | w65 \ | wasm32 | wasm64 \ | we32k \ | x86 | x86_64 | xc16x | xgate | xps100 \ | xstormy16 | xtensa* \ | ymp \ | z8k | z80) ;; *) echo Invalid configuration \`"$1"\': machine \`"$cpu-$vendor"\' not recognized 1>&2 exit 1 ;; esac ;; esac # Here we canonicalize certain aliases for manufacturers. case $vendor in digital*) vendor=dec ;; commodore*) vendor=cbm ;; *) ;; esac # Decode manufacturer-specific aliases for certain operating systems. if test x$basic_os != x then # First recognize some ad-hoc cases, or perhaps split kernel-os, or else just # set os. case $basic_os in gnu/linux*) kernel=linux os=`echo "$basic_os" | sed -e 's|gnu/linux|gnu|'` ;; os2-emx) kernel=os2 os=`echo "$basic_os" | sed -e 's|os2-emx|emx|'` ;; nto-qnx*) kernel=nto os=`echo "$basic_os" | sed -e 's|nto-qnx|qnx|'` ;; *-*) # shellcheck disable=SC2162 saved_IFS=$IFS IFS="-" read kernel os <<EOF $basic_os EOF IFS=$saved_IFS ;; # Default OS when just kernel was specified nto*) kernel=nto os=`echo "$basic_os" | sed -e 's|nto|qnx|'` ;; linux*) kernel=linux os=`echo "$basic_os" | sed -e 's|linux|gnu|'` ;; *) kernel= os=$basic_os ;; esac # Now, normalize the OS (knowing we just have one component, it's not a kernel, # etc.) case $os in # First match some system type aliases that might get confused # with valid system types. # solaris* is a basic system type, with this one exception. auroraux) os=auroraux ;; bluegene*) os=cnk ;; solaris1 | solaris1.*) os=`echo "$os" | sed -e 's|solaris1|sunos4|'` ;; solaris) os=solaris2 ;; unixware*) os=sysv4.2uw ;; # es1800 is here to avoid being matched by es* (a different OS) es1800*) os=ose ;; # Some version numbers need modification chorusos*) os=chorusos ;; isc) os=isc2.2 ;; sco6) os=sco5v6 ;; sco5) os=sco3.2v5 ;; sco4) os=sco3.2v4 ;; sco3.2.[4-9]*) os=`echo "$os" | sed -e 's/sco3.2./sco3.2v/'` ;; sco*v* | scout) # Don't match below ;; sco*) os=sco3.2v2 ;; psos*) os=psos ;; qnx*) os=qnx ;; hiux*) os=hiuxwe2 ;; lynx*178) os=lynxos178 ;; lynx*5) os=lynxos5 ;; lynxos*) # don't get caught up in next wildcard ;; lynx*) os=lynxos ;; mac[0-9]*) os=`echo "$os" | sed -e 's|mac|macos|'` ;; opened*) os=openedition ;; os400*) os=os400 ;; sunos5*) os=`echo "$os" | sed -e 's|sunos5|solaris2|'` ;; sunos6*) os=`echo "$os" | sed -e 's|sunos6|solaris3|'` ;; wince*) os=wince ;; utek*) os=bsd ;; dynix*) os=bsd ;; acis*) os=aos ;; atheos*) os=atheos ;; syllable*) os=syllable ;; 386bsd) os=bsd ;; ctix* | uts*) os=sysv ;; nova*) os=rtmk-nova ;; ns2) os=nextstep2 ;; # Preserve the version number of sinix5. sinix5.*) os=`echo "$os" | sed -e 's|sinix|sysv|'` ;; sinix*) os=sysv4 ;; tpf*) os=tpf ;; triton*) os=sysv3 ;; oss*) os=sysv3 ;; svr4*) os=sysv4 ;; svr3) os=sysv3 ;; sysvr4) os=sysv4 ;; ose*) os=ose ;; *mint | mint[0-9]* | *MiNT | MiNT[0-9]*) os=mint ;; dicos*) os=dicos ;; pikeos*) # Until real need of OS specific support for # particular features comes up, bare metal # configurations are quite functional. case $cpu in arm*) os=eabi ;; *) os=elf ;; esac ;; *) # No normalization, but not necessarily accepted, that comes below. ;; esac else # Here we handle the default operating systems that come with various machines. # The value should be what the vendor currently ships out the door with their # machine or put another way, the most popular os provided with the machine. # Note that if you're going to try to match "-MANUFACTURER" here (say, # "-sun"), then you have to tell the case statement up towards the top # that MANUFACTURER isn't an operating system. Otherwise, code above # will signal an error saying that MANUFACTURER isn't an operating # system, and we'll never get to this point. kernel= case $cpu-$vendor in score-*) os=elf ;; spu-*) os=elf ;; *-acorn) os=riscix1.2 ;; arm*-rebel) kernel=linux os=gnu ;; arm*-semi) os=aout ;; c4x-* | tic4x-*) os=coff ;; c8051-*) os=elf ;; clipper-intergraph) os=clix ;; hexagon-*) os=elf ;; tic54x-*) os=coff ;; tic55x-*) os=coff ;; tic6x-*) os=coff ;; # This must come before the *-dec entry. pdp10-*) os=tops20 ;; pdp11-*) os=none ;; *-dec | vax-*) os=ultrix4.2 ;; m68*-apollo) os=domain ;; i386-sun) os=sunos4.0.2 ;; m68000-sun) os=sunos3 ;; m68*-cisco) os=aout ;; mep-*) os=elf ;; mips*-cisco) os=elf ;; mips*-*) os=elf ;; or32-*) os=coff ;; *-tti) # must be before sparc entry or we get the wrong os. os=sysv3 ;; sparc-* | *-sun) os=sunos4.1.1 ;; pru-*) os=elf ;; *-be) os=beos ;; *-ibm) os=aix ;; *-knuth) os=mmixware ;; *-wec) os=proelf ;; *-winbond) os=proelf ;; *-oki) os=proelf ;; *-hp) os=hpux ;; *-hitachi) os=hiux ;; i860-* | *-att | *-ncr | *-altos | *-motorola | *-convergent) os=sysv ;; *-cbm) os=amigaos ;; *-dg) os=dgux ;; *-dolphin) os=sysv3 ;; m68k-ccur) os=rtu ;; m88k-omron*) os=luna ;; *-next) os=nextstep ;; *-sequent) os=ptx ;; *-crds) os=unos ;; *-ns) os=genix ;; i370-*) os=mvs ;; *-gould) os=sysv ;; *-highlevel) os=bsd ;; *-encore) os=bsd ;; *-sgi) os=irix ;; *-siemens) os=sysv4 ;; *-masscomp) os=rtu ;; f30[01]-fujitsu | f700-fujitsu) os=uxpv ;; *-rom68k) os=coff ;; *-*bug) os=coff ;; *-apple) os=macos ;; *-atari*) os=mint ;; *-wrs) os=vxworks ;; *) os=none ;; esac fi # Now, validate our (potentially fixed-up) OS. case $os in # Sometimes we do "kernel-libc", so those need to count as OSes. musl* | newlib* | relibc* | uclibc*) ;; # Likewise for "kernel-abi" eabi* | gnueabi*) ;; # VxWorks passes extra cpu info in the 4th filed. simlinux | simwindows | spe) ;; # Now accept the basic system types. # The portable systems comes first. # Each alternative MUST end in a * to match a version number. gnu* | android* | bsd* | mach* | minix* | genix* | ultrix* | irix* \ | *vms* | esix* | aix* | cnk* | sunos | sunos[34]* \ | hpux* | unos* | osf* | luna* | dgux* | auroraux* | solaris* \ | sym* | plan9* | psp* | sim* | xray* | os68k* | v88r* \ | hiux* | abug | nacl* | netware* | windows* \ | os9* | macos* | osx* | ios* \ | mpw* | magic* | mmixware* | mon960* | lnews* \ | amigaos* | amigados* | msdos* | newsos* | unicos* | aof* \ | aos* | aros* | cloudabi* | sortix* | twizzler* \ | nindy* | vxsim* | vxworks* | ebmon* | hms* | mvs* \ | clix* | riscos* | uniplus* | iris* | isc* | rtu* | xenix* \ | mirbsd* | netbsd* | dicos* | openedition* | ose* \ | bitrig* | openbsd* | secbsd* | solidbsd* | libertybsd* | os108* \ | ekkobsd* | freebsd* | riscix* | lynxos* | os400* \ | bosx* | nextstep* | cxux* | aout* | elf* | oabi* \ | ptx* | coff* | ecoff* | winnt* | domain* | vsta* \ | udi* | lites* | ieee* | go32* | aux* | hcos* \ | chorusrdb* | cegcc* | glidix* | serenity* \ | cygwin* | msys* | pe* | moss* | proelf* | rtems* \ | midipix* | mingw32* | mingw64* | mint* \ | uxpv* | beos* | mpeix* | udk* | moxiebox* \ | interix* | uwin* | mks* | rhapsody* | darwin* \ | openstep* | oskit* | conix* | pw32* | nonstopux* \ | storm-chaos* | tops10* | tenex* | tops20* | its* \ | os2* | vos* | palmos* | uclinux* | nucleus* | morphos* \ | scout* | superux* | sysv* | rtmk* | tpf* | windiss* \ | powermax* | dnix* | nx6 | nx7 | sei* | dragonfly* \ | skyos* | haiku* | rdos* | toppers* | drops* | es* \ | onefs* | tirtos* | phoenix* | fuchsia* | redox* | bme* \ | midnightbsd* | amdhsa* | unleashed* | emscripten* | wasi* \ | nsk* | powerunix* | genode* | zvmoe* | qnx* | emx* | zephyr* \ | fiwix* ) ;; # This one is extra strict with allowed versions sco3.2v2 | sco3.2v[4-9]* | sco5v6*) # Don't forget version if it is 3.2v4 or newer. ;; none) ;; *) echo Invalid configuration \`"$1"\': OS \`"$os"\' not recognized 1>&2 exit 1 ;; esac # As a final step for OS-related things, validate the OS-kernel combination # (given a valid OS), if there is a kernel. case $kernel-$os in linux-gnu* | linux-dietlibc* | linux-android* | linux-newlib* \ | linux-musl* | linux-relibc* | linux-uclibc* ) ;; uclinux-uclibc* ) ;; -dietlibc* | -newlib* | -musl* | -relibc* | -uclibc* ) # These are just libc implementations, not actual OSes, and thus # require a kernel. echo "Invalid configuration \`$1': libc \`$os' needs explicit kernel." 1>&2 exit 1 ;; kfreebsd*-gnu* | kopensolaris*-gnu*) ;; vxworks-simlinux | vxworks-simwindows | vxworks-spe) ;; nto-qnx*) ;; os2-emx) ;; *-eabi* | *-gnueabi*) ;; -*) # Blank kernel with real OS is always fine. ;; *-*) echo "Invalid configuration \`$1': Kernel \`$kernel' not known to work with OS \`$os'." 1>&2 exit 1 ;; esac # Here we handle the case where we know the os, and the CPU type, but not the # manufacturer. We pick the logical manufacturer. case $vendor in unknown) case $cpu-$os in *-riscix*) vendor=acorn ;; *-sunos*) vendor=sun ;; *-cnk* | *-aix*) vendor=ibm ;; *-beos*) vendor=be ;; *-hpux*) vendor=hp ;; *-mpeix*) vendor=hp ;; *-hiux*) vendor=hitachi ;; *-unos*) vendor=crds ;; *-dgux*) vendor=dg ;; *-luna*) vendor=omron ;; *-genix*) vendor=ns ;; *-clix*) vendor=intergraph ;; *-mvs* | *-opened*) vendor=ibm ;; *-os400*) vendor=ibm ;; s390-* | s390x-*) vendor=ibm ;; *-ptx*) vendor=sequent ;; *-tpf*) vendor=ibm ;; *-vxsim* | *-vxworks* | *-windiss*) vendor=wrs ;; *-aux*) vendor=apple ;; *-hms*) vendor=hitachi ;; *-mpw* | *-macos*) vendor=apple ;; *-*mint | *-mint[0-9]* | *-*MiNT | *-MiNT[0-9]*) vendor=atari ;; *-vos*) vendor=stratus ;; esac ;; esac echo "$cpu-$vendor-${kernel:+$kernel-}$os" exit # Local variables: # eval: (add-hook 'before-save-hook 'time-stamp) # time-stamp-start: "timestamp='" # time-stamp-format: "%:y-%02m-%02d" # time-stamp-end: "'" # End: ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������webdar-1.0.0/COPYING��������������������������������������������������������������������������������0000644�0001750�0001752�00000104513�14773727253�010757� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������ GNU GENERAL PUBLIC LICENSE Version 3, 29 June 2007 Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/> Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. Preamble The GNU General Public License is a free, copyleft license for software and other kinds of works. The licenses for most software and other practical works are designed to take away your freedom to share and change the works. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change all versions of a program--to make sure it remains free software for all its users. We, the Free Software Foundation, use the GNU General Public License for most of our software; it applies also to any other work released this way by its authors. You can apply it to your programs, too. When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for them if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs, and that you know you can do these things. To protect your rights, we need to prevent others from denying you these rights or asking you to surrender the rights. Therefore, you have certain responsibilities if you distribute copies of the software, or if you modify it: responsibilities to respect the freedom of others. For example, if you distribute copies of such a program, whether gratis or for a fee, you must pass on to the recipients the same freedoms that you received. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights. Developers that use the GNU GPL protect your rights with two steps: (1) assert copyright on the software, and (2) offer you this License giving you legal permission to copy, distribute and/or modify it. For the developers' and authors' protection, the GPL clearly explains that there is no warranty for this free software. For both users' and authors' sake, the GPL requires that modified versions be marked as changed, so that their problems will not be attributed erroneously to authors of previous versions. Some devices are designed to deny users access to install or run modified versions of the software inside them, although the manufacturer can do so. This is fundamentally incompatible with the aim of protecting users' freedom to change the software. The systematic pattern of such abuse occurs in the area of products for individuals to use, which is precisely where it is most unacceptable. Therefore, we have designed this version of the GPL to prohibit the practice for those products. If such problems arise substantially in other domains, we stand ready to extend this provision to those domains in future versions of the GPL, as needed to protect the freedom of users. Finally, every program is threatened constantly by software patents. States should not allow patents to restrict development and use of software on general-purpose computers, but in those that do, we wish to avoid the special danger that patents applied to a free program could make it effectively proprietary. To prevent this, the GPL assures that patents cannot be used to render the program non-free. The precise terms and conditions for copying, distribution and modification follow. TERMS AND CONDITIONS 0. Definitions. "This License" refers to version 3 of the GNU General Public License. "Copyright" also means copyright-like laws that apply to other kinds of works, such as semiconductor masks. "The Program" refers to any copyrightable work licensed under this License. Each licensee is addressed as "you". "Licensees" and "recipients" may be individuals or organizations. To "modify" a work means to copy from or adapt all or part of the work in a fashion requiring copyright permission, other than the making of an exact copy. The resulting work is called a "modified version" of the earlier work or a work "based on" the earlier work. A "covered work" means either the unmodified Program or a work based on the Program. To "propagate" a work means to do anything with it that, without permission, would make you directly or secondarily liable for infringement under applicable copyright law, except executing it on a computer or modifying a private copy. Propagation includes copying, distribution (with or without modification), making available to the public, and in some countries other activities as well. To "convey" a work means any kind of propagation that enables other parties to make or receive copies. Mere interaction with a user through a computer network, with no transfer of a copy, is not conveying. An interactive user interface displays "Appropriate Legal Notices" to the extent that it includes a convenient and prominently visible feature that (1) displays an appropriate copyright notice, and (2) tells the user that there is no warranty for the work (except to the extent that warranties are provided), that licensees may convey the work under this License, and how to view a copy of this License. If the interface presents a list of user commands or options, such as a menu, a prominent item in the list meets this criterion. 1. Source Code. The "source code" for a work means the preferred form of the work for making modifications to it. "Object code" means any non-source form of a work. A "Standard Interface" means an interface that either is an official standard defined by a recognized standards body, or, in the case of interfaces specified for a particular programming language, one that is widely used among developers working in that language. The "System Libraries" of an executable work include anything, other than the work as a whole, that (a) is included in the normal form of packaging a Major Component, but which is not part of that Major Component, and (b) serves only to enable use of the work with that Major Component, or to implement a Standard Interface for which an implementation is available to the public in source code form. A "Major Component", in this context, means a major essential component (kernel, window system, and so on) of the specific operating system (if any) on which the executable work runs, or a compiler used to produce the work, or an object code interpreter used to run it. The "Corresponding Source" for a work in object code form means all the source code needed to generate, install, and (for an executable work) run the object code and to modify the work, including scripts to control those activities. However, it does not include the work's System Libraries, or general-purpose tools or generally available free programs which are used unmodified in performing those activities but which are not part of the work. For example, Corresponding Source includes interface definition files associated with source files for the work, and the source code for shared libraries and dynamically linked subprograms that the work is specifically designed to require, such as by intimate data communication or control flow between those subprograms and other parts of the work. The Corresponding Source need not include anything that users can regenerate automatically from other parts of the Corresponding Source. The Corresponding Source for a work in source code form is that same work. 2. Basic Permissions. All rights granted under this License are granted for the term of copyright on the Program, and are irrevocable provided the stated conditions are met. This License explicitly affirms your unlimited permission to run the unmodified Program. The output from running a covered work is covered by this License only if the output, given its content, constitutes a covered work. This License acknowledges your rights of fair use or other equivalent, as provided by copyright law. You may make, run and propagate covered works that you do not convey, without conditions so long as your license otherwise remains in force. You may convey covered works to others for the sole purpose of having them make modifications exclusively for you, or provide you with facilities for running those works, provided that you comply with the terms of this License in conveying all material for which you do not control copyright. Those thus making or running the covered works for you must do so exclusively on your behalf, under your direction and control, on terms that prohibit them from making any copies of your copyrighted material outside their relationship with you. Conveying under any other circumstances is permitted solely under the conditions stated below. Sublicensing is not allowed; section 10 makes it unnecessary. 3. Protecting Users' Legal Rights From Anti-Circumvention Law. No covered work shall be deemed part of an effective technological measure under any applicable law fulfilling obligations under article 11 of the WIPO copyright treaty adopted on 20 December 1996, or similar laws prohibiting or restricting circumvention of such measures. When you convey a covered work, you waive any legal power to forbid circumvention of technological measures to the extent such circumvention is effected by exercising rights under this License with respect to the covered work, and you disclaim any intention to limit operation or modification of the work as a means of enforcing, against the work's users, your or third parties' legal rights to forbid circumvention of technological measures. 4. Conveying Verbatim Copies. You may convey verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice; keep intact all notices stating that this License and any non-permissive terms added in accord with section 7 apply to the code; keep intact all notices of the absence of any warranty; and give all recipients a copy of this License along with the Program. You may charge any price or no price for each copy that you convey, and you may offer support or warranty protection for a fee. 5. Conveying Modified Source Versions. You may convey a work based on the Program, or the modifications to produce it from the Program, in the form of source code under the terms of section 4, provided that you also meet all of these conditions: a) The work must carry prominent notices stating that you modified it, and giving a relevant date. b) The work must carry prominent notices stating that it is released under this License and any conditions added under section 7. This requirement modifies the requirement in section 4 to "keep intact all notices". c) You must license the entire work, as a whole, under this License to anyone who comes into possession of a copy. This License will therefore apply, along with any applicable section 7 additional terms, to the whole of the work, and all its parts, regardless of how they are packaged. This License gives no permission to license the work in any other way, but it does not invalidate such permission if you have separately received it. d) If the work has interactive user interfaces, each must display Appropriate Legal Notices; however, if the Program has interactive interfaces that do not display Appropriate Legal Notices, your work need not make them do so. A compilation of a covered work with other separate and independent works, which are not by their nature extensions of the covered work, and which are not combined with it such as to form a larger program, in or on a volume of a storage or distribution medium, is called an "aggregate" if the compilation and its resulting copyright are not used to limit the access or legal rights of the compilation's users beyond what the individual works permit. Inclusion of a covered work in an aggregate does not cause this License to apply to the other parts of the aggregate. 6. Conveying Non-Source Forms. You may convey a covered work in object code form under the terms of sections 4 and 5, provided that you also convey the machine-readable Corresponding Source under the terms of this License, in one of these ways: a) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by the Corresponding Source fixed on a durable physical medium customarily used for software interchange. b) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by a written offer, valid for at least three years and valid for as long as you offer spare parts or customer support for that product model, to give anyone who possesses the object code either (1) a copy of the Corresponding Source for all the software in the product that is covered by this License, on a durable physical medium customarily used for software interchange, for a price no more than your reasonable cost of physically performing this conveying of source, or (2) access to copy the Corresponding Source from a network server at no charge. c) Convey individual copies of the object code with a copy of the written offer to provide the Corresponding Source. This alternative is allowed only occasionally and noncommercially, and only if you received the object code with such an offer, in accord with subsection 6b. d) Convey the object code by offering access from a designated place (gratis or for a charge), and offer equivalent access to the Corresponding Source in the same way through the same place at no further charge. You need not require recipients to copy the Corresponding Source along with the object code. If the place to copy the object code is a network server, the Corresponding Source may be on a different server (operated by you or a third party) that supports equivalent copying facilities, provided you maintain clear directions next to the object code saying where to find the Corresponding Source. Regardless of what server hosts the Corresponding Source, you remain obligated to ensure that it is available for as long as needed to satisfy these requirements. e) Convey the object code using peer-to-peer transmission, provided you inform other peers where the object code and Corresponding Source of the work are being offered to the general public at no charge under subsection 6d. A separable portion of the object code, whose source code is excluded from the Corresponding Source as a System Library, need not be included in conveying the object code work. A "User Product" is either (1) a "consumer product", which means any tangible personal property which is normally used for personal, family, or household purposes, or (2) anything designed or sold for incorporation into a dwelling. In determining whether a product is a consumer product, doubtful cases shall be resolved in favor of coverage. For a particular product received by a particular user, "normally used" refers to a typical or common use of that class of product, regardless of the status of the particular user or of the way in which the particular user actually uses, or expects or is expected to use, the product. A product is a consumer product regardless of whether the product has substantial commercial, industrial or non-consumer uses, unless such uses represent the only significant mode of use of the product. "Installation Information" for a User Product means any methods, procedures, authorization keys, or other information required to install and execute modified versions of a covered work in that User Product from a modified version of its Corresponding Source. The information must suffice to ensure that the continued functioning of the modified object code is in no case prevented or interfered with solely because modification has been made. If you convey an object code work under this section in, or with, or specifically for use in, a User Product, and the conveying occurs as part of a transaction in which the right of possession and use of the User Product is transferred to the recipient in perpetuity or for a fixed term (regardless of how the transaction is characterized), the Corresponding Source conveyed under this section must be accompanied by the Installation Information. But this requirement does not apply if neither you nor any third party retains the ability to install modified object code on the User Product (for example, the work has been installed in ROM). The requirement to provide Installation Information does not include a requirement to continue to provide support service, warranty, or updates for a work that has been modified or installed by the recipient, or for the User Product in which it has been modified or installed. Access to a network may be denied when the modification itself materially and adversely affects the operation of the network or violates the rules and protocols for communication across the network. Corresponding Source conveyed, and Installation Information provided, in accord with this section must be in a format that is publicly documented (and with an implementation available to the public in source code form), and must require no special password or key for unpacking, reading or copying. 7. Additional Terms. "Additional permissions" are terms that supplement the terms of this License by making exceptions from one or more of its conditions. Additional permissions that are applicable to the entire Program shall be treated as though they were included in this License, to the extent that they are valid under applicable law. If additional permissions apply only to part of the Program, that part may be used separately under those permissions, but the entire Program remains governed by this License without regard to the additional permissions. When you convey a copy of a covered work, you may at your option remove any additional permissions from that copy, or from any part of it. (Additional permissions may be written to require their own removal in certain cases when you modify the work.) You may place additional permissions on material, added by you to a covered work, for which you have or can give appropriate copyright permission. Notwithstanding any other provision of this License, for material you add to a covered work, you may (if authorized by the copyright holders of that material) supplement the terms of this License with terms: a) Disclaiming warranty or limiting liability differently from the terms of sections 15 and 16 of this License; or b) Requiring preservation of specified reasonable legal notices or author attributions in that material or in the Appropriate Legal Notices displayed by works containing it; or c) Prohibiting misrepresentation of the origin of that material, or requiring that modified versions of such material be marked in reasonable ways as different from the original version; or d) Limiting the use for publicity purposes of names of licensors or authors of the material; or e) Declining to grant rights under trademark law for use of some trade names, trademarks, or service marks; or f) Requiring indemnification of licensors and authors of that material by anyone who conveys the material (or modified versions of it) with contractual assumptions of liability to the recipient, for any liability that these contractual assumptions directly impose on those licensors and authors. All other non-permissive additional terms are considered "further restrictions" within the meaning of section 10. If the Program as you received it, or any part of it, contains a notice stating that it is governed by this License along with a term that is a further restriction, you may remove that term. If a license document contains a further restriction but permits relicensing or conveying under this License, you may add to a covered work material governed by the terms of that license document, provided that the further restriction does not survive such relicensing or conveying. If you add terms to a covered work in accord with this section, you must place, in the relevant source files, a statement of the additional terms that apply to those files, or a notice indicating where to find the applicable terms. Additional terms, permissive or non-permissive, may be stated in the form of a separately written license, or stated as exceptions; the above requirements apply either way. 8. Termination. You may not propagate or modify a covered work except as expressly provided under this License. Any attempt otherwise to propagate or modify it is void, and will automatically terminate your rights under this License (including any patent licenses granted under the third paragraph of section 11). However, if you cease all violation of this License, then your license from a particular copyright holder is reinstated (a) provisionally, unless and until the copyright holder explicitly and finally terminates your license, and (b) permanently, if the copyright holder fails to notify you of the violation by some reasonable means prior to 60 days after the cessation. Moreover, your license from a particular copyright holder is reinstated permanently if the copyright holder notifies you of the violation by some reasonable means, this is the first time you have received notice of violation of this License (for any work) from that copyright holder, and you cure the violation prior to 30 days after your receipt of the notice. Termination of your rights under this section does not terminate the licenses of parties who have received copies or rights from you under this License. If your rights have been terminated and not permanently reinstated, you do not qualify to receive new licenses for the same material under section 10. 9. Acceptance Not Required for Having Copies. You are not required to accept this License in order to receive or run a copy of the Program. Ancillary propagation of a covered work occurring solely as a consequence of using peer-to-peer transmission to receive a copy likewise does not require acceptance. However, nothing other than this License grants you permission to propagate or modify any covered work. These actions infringe copyright if you do not accept this License. Therefore, by modifying or propagating a covered work, you indicate your acceptance of this License to do so. 10. Automatic Licensing of Downstream Recipients. Each time you convey a covered work, the recipient automatically receives a license from the original licensors, to run, modify and propagate that work, subject to this License. You are not responsible for enforcing compliance by third parties with this License. An "entity transaction" is a transaction transferring control of an organization, or substantially all assets of one, or subdividing an organization, or merging organizations. If propagation of a covered work results from an entity transaction, each party to that transaction who receives a copy of the work also receives whatever licenses to the work the party's predecessor in interest had or could give under the previous paragraph, plus a right to possession of the Corresponding Source of the work from the predecessor in interest, if the predecessor has it or can get it with reasonable efforts. You may not impose any further restrictions on the exercise of the rights granted or affirmed under this License. For example, you may not impose a license fee, royalty, or other charge for exercise of rights granted under this License, and you may not initiate litigation (including a cross-claim or counterclaim in a lawsuit) alleging that any patent claim is infringed by making, using, selling, offering for sale, or importing the Program or any portion of it. 11. Patents. A "contributor" is a copyright holder who authorizes use under this License of the Program or a work on which the Program is based. The work thus licensed is called the contributor's "contributor version". A contributor's "essential patent claims" are all patent claims owned or controlled by the contributor, whether already acquired or hereafter acquired, that would be infringed by some manner, permitted by this License, of making, using, or selling its contributor version, but do not include claims that would be infringed only as a consequence of further modification of the contributor version. For purposes of this definition, "control" includes the right to grant patent sublicenses in a manner consistent with the requirements of this License. Each contributor grants you a non-exclusive, worldwide, royalty-free patent license under the contributor's essential patent claims, to make, use, sell, offer for sale, import and otherwise run, modify and propagate the contents of its contributor version. In the following three paragraphs, a "patent license" is any express agreement or commitment, however denominated, not to enforce a patent (such as an express permission to practice a patent or covenant not to sue for patent infringement). To "grant" such a patent license to a party means to make such an agreement or commitment not to enforce a patent against the party. If you convey a covered work, knowingly relying on a patent license, and the Corresponding Source of the work is not available for anyone to copy, free of charge and under the terms of this License, through a publicly available network server or other readily accessible means, then you must either (1) cause the Corresponding Source to be so available, or (2) arrange to deprive yourself of the benefit of the patent license for this particular work, or (3) arrange, in a manner consistent with the requirements of this License, to extend the patent license to downstream recipients. "Knowingly relying" means you have actual knowledge that, but for the patent license, your conveying the covered work in a country, or your recipient's use of the covered work in a country, would infringe one or more identifiable patents in that country that you have reason to believe are valid. If, pursuant to or in connection with a single transaction or arrangement, you convey, or propagate by procuring conveyance of, a covered work, and grant a patent license to some of the parties receiving the covered work authorizing them to use, propagate, modify or convey a specific copy of the covered work, then the patent license you grant is automatically extended to all recipients of the covered work and works based on it. A patent license is "discriminatory" if it does not include within the scope of its coverage, prohibits the exercise of, or is conditioned on the non-exercise of one or more of the rights that are specifically granted under this License. You may not convey a covered work if you are a party to an arrangement with a third party that is in the business of distributing software, under which you make payment to the third party based on the extent of your activity of conveying the work, and under which the third party grants, to any of the parties who would receive the covered work from you, a discriminatory patent license (a) in connection with copies of the covered work conveyed by you (or copies made from those copies), or (b) primarily for and in connection with specific products or compilations that contain the covered work, unless you entered into that arrangement, or that patent license was granted, prior to 28 March 2007. Nothing in this License shall be construed as excluding or limiting any implied license or other defenses to infringement that may otherwise be available to you under applicable patent law. 12. No Surrender of Others' Freedom. If conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot convey a covered work so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not convey it at all. For example, if you agree to terms that obligate you to collect a royalty for further conveying from those to whom you convey the Program, the only way you could satisfy both those terms and this License would be to refrain entirely from conveying the Program. 13. Use with the GNU Affero General Public License. Notwithstanding any other provision of this License, you have permission to link or combine any covered work with a work licensed under version 3 of the GNU Affero General Public License into a single combined work, and to convey the resulting work. The terms of this License will continue to apply to the part which is the covered work, but the special requirements of the GNU Affero General Public License, section 13, concerning interaction through a network will apply to the combination as such. 14. Revised Versions of this License. The Free Software Foundation may publish revised and/or new versions of the GNU General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Program specifies that a certain numbered version of the GNU General Public License "or any later version" applies to it, you have the option of following the terms and conditions either of that numbered version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of the GNU General Public License, you may choose any version ever published by the Free Software Foundation. If the Program specifies that a proxy can decide which future versions of the GNU General Public License can be used, that proxy's public statement of acceptance of a version permanently authorizes you to choose that version for the Program. Later license versions may give you additional or different permissions. However, no additional obligations are imposed on any author or copyright holder as a result of your choosing to follow a later version. 15. Disclaimer of Warranty. THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 16. Limitation of Liability. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. 17. Interpretation of Sections 15 and 16. If the disclaimer of warranty and limitation of liability provided above cannot be given local legal effect according to their terms, reviewing courts shall apply local law that most closely approximates an absolute waiver of all civil liability in connection with the Program, unless a warranty or assumption of liability accompanies a copy of the Program in return for a fee. END OF TERMS AND CONDITIONS How to Apply These Terms to Your New Programs If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms. To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively state the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. <one line to give the program's name and a brief idea of what it does.> Copyright (C) <year> <name of author> This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <http://www.gnu.org/licenses/>. Also add information on how to contact you by electronic and paper mail. If the program does terminal interaction, make it output a short notice like this when it starts in an interactive mode: <program> Copyright (C) <year> <name of author> This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. This is free software, and you are welcome to redistribute it under certain conditions; type `show c' for details. The hypothetical commands `show w' and `show c' should show the appropriate parts of the General Public License. Of course, your program's commands might be different; for a GUI interface, you would use an "about box". You should also get your employer (if you work as a programmer) or school, if any, to sign a "copyright disclaimer" for the program, if necessary. For more information on this, and how to apply and follow the GNU GPL, see <http://www.gnu.org/licenses/>. The GNU General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Lesser General Public License instead of this License. But first, please read <http://www.gnu.org/philosophy/why-not-lgpl.html>. �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������webdar-1.0.0/AUTHORS��������������������������������������������������������������������������������0000644�0001750�0001752�00000001665�15045122670�010761� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������ W E B D A R --------- ----- - Original Design & Development: Denis Corbin https://github.com/Edrusb/webdar No answer to support requests will be done out of mailing-list or other public area: your questions and their answers may be of interest to others. For all and to all, if you need support thanks to read the link below: Sharing must be both directions. Else for non support requests only, you are welcome to send an email to Denis at dar.linux@free.fr paying attention to add the following string (the quotes are not necessary) "[EARTH IS BEAUTIFUL]" in the subject of your email, to be able to pass anti-spam filter. All packages released by Denis are signed by the GPG key found here: http://dar.linux.free.fr/doc/authentification.html ���������������������������������������������������������������������������webdar-1.0.0/ChangeLog������������������������������������������������������������������������������0000444�0001750�0001752�00000000000�15045134062�011435� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������webdar-1.0.0/config.guess���������������������������������������������������������������������������0000755�0001750�0001752�00000140512�14175772605�012240� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#! /bin/sh # Attempt to guess a canonical system name. # Copyright 1992-2022 Free Software Foundation, Inc. # shellcheck disable=SC2006,SC2268 # see below for rationale timestamp='2022-01-09' # This file is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, see <https://www.gnu.org/licenses/>. # # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that # program. This Exception is an additional permission under section 7 # of the GNU General Public License, version 3 ("GPLv3"). # # Originally written by Per Bothner; maintained since 2000 by Ben Elliston. # # You can get the latest version of this script from: # https://git.savannah.gnu.org/cgit/config.git/plain/config.guess # # Please send patches to <config-patches@gnu.org>. # The "shellcheck disable" line above the timestamp inhibits complaints # about features and limitations of the classic Bourne shell that were # superseded or lifted in POSIX. However, this script identifies a wide # variety of pre-POSIX systems that do not have POSIX shells at all, and # even some reasonably current systems (Solaris 10 as case-in-point) still # have a pre-POSIX /bin/sh. me=`echo "$0" | sed -e 's,.*/,,'` usage="\ Usage: $0 [OPTION] Output the configuration name of the system \`$me' is run on. Options: -h, --help print this help, then exit -t, --time-stamp print date of last modification, then exit -v, --version print version number, then exit Report bugs and patches to <config-patches@gnu.org>." version="\ GNU config.guess ($timestamp) Originally written by Per Bothner. Copyright 1992-2022 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." help=" Try \`$me --help' for more information." # Parse command line while test $# -gt 0 ; do case $1 in --time-stamp | --time* | -t ) echo "$timestamp" ; exit ;; --version | -v ) echo "$version" ; exit ;; --help | --h* | -h ) echo "$usage"; exit ;; -- ) # Stop option processing shift; break ;; - ) # Use stdin as input. break ;; -* ) echo "$me: invalid option $1$help" >&2 exit 1 ;; * ) break ;; esac done if test $# != 0; then echo "$me: too many arguments$help" >&2 exit 1 fi # Just in case it came from the environment. GUESS= # CC_FOR_BUILD -- compiler used by this script. Note that the use of a # compiler to aid in system detection is discouraged as it requires # temporary files to be created and, as you can see below, it is a # headache to deal with in a portable fashion. # Historically, `CC_FOR_BUILD' used to be named `HOST_CC'. We still # use `HOST_CC' if defined, but it is deprecated. # Portable tmp directory creation inspired by the Autoconf team. tmp= # shellcheck disable=SC2172 trap 'test -z "$tmp" || rm -fr "$tmp"' 0 1 2 13 15 set_cc_for_build() { # prevent multiple calls if $tmp is already set test "$tmp" && return 0 : "${TMPDIR=/tmp}" # shellcheck disable=SC2039,SC3028 { tmp=`(umask 077 && mktemp -d "$TMPDIR/cgXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" ; } || { test -n "$RANDOM" && tmp=$TMPDIR/cg$$-$RANDOM && (umask 077 && mkdir "$tmp" 2>/dev/null) ; } || { tmp=$TMPDIR/cg-$$ && (umask 077 && mkdir "$tmp" 2>/dev/null) && echo "Warning: creating insecure temp directory" >&2 ; } || { echo "$me: cannot create a temporary directory in $TMPDIR" >&2 ; exit 1 ; } dummy=$tmp/dummy case ${CC_FOR_BUILD-},${HOST_CC-},${CC-} in ,,) echo "int x;" > "$dummy.c" for driver in cc gcc c89 c99 ; do if ($driver -c -o "$dummy.o" "$dummy.c") >/dev/null 2>&1 ; then CC_FOR_BUILD=$driver break fi done if test x"$CC_FOR_BUILD" = x ; then CC_FOR_BUILD=no_compiler_found fi ;; ,,*) CC_FOR_BUILD=$CC ;; ,*,*) CC_FOR_BUILD=$HOST_CC ;; esac } # This is needed to find uname on a Pyramid OSx when run in the BSD universe. # (ghazi@noc.rutgers.edu 1994-08-24) if test -f /.attbin/uname ; then PATH=$PATH:/.attbin ; export PATH fi UNAME_MACHINE=`(uname -m) 2>/dev/null` || UNAME_MACHINE=unknown UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown UNAME_SYSTEM=`(uname -s) 2>/dev/null` || UNAME_SYSTEM=unknown UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown case $UNAME_SYSTEM in Linux|GNU|GNU/*) LIBC=unknown set_cc_for_build cat <<-EOF > "$dummy.c" #include <features.h> #if defined(__UCLIBC__) LIBC=uclibc #elif defined(__dietlibc__) LIBC=dietlibc #elif defined(__GLIBC__) LIBC=gnu #else #include <stdarg.h> /* First heuristic to detect musl libc. */ #ifdef __DEFINED_va_list LIBC=musl #endif #endif EOF cc_set_libc=`$CC_FOR_BUILD -E "$dummy.c" 2>/dev/null | grep '^LIBC' | sed 's, ,,g'` eval "$cc_set_libc" # Second heuristic to detect musl libc. if [ "$LIBC" = unknown ] && command -v ldd >/dev/null && ldd --version 2>&1 | grep -q ^musl; then LIBC=musl fi # If the system lacks a compiler, then just pick glibc. # We could probably try harder. if [ "$LIBC" = unknown ]; then LIBC=gnu fi ;; esac # Note: order is significant - the case branches are not exclusive. case $UNAME_MACHINE:$UNAME_SYSTEM:$UNAME_RELEASE:$UNAME_VERSION in *:NetBSD:*:*) # NetBSD (nbsd) targets should (where applicable) match one or # more of the tuples: *-*-netbsdelf*, *-*-netbsdaout*, # *-*-netbsdecoff* and *-*-netbsd*. For targets that recently # switched to ELF, *-*-netbsd* would select the old # object file format. This provides both forward # compatibility and a consistent mechanism for selecting the # object file format. # # Note: NetBSD doesn't particularly care about the vendor # portion of the name. We always set it to "unknown". UNAME_MACHINE_ARCH=`(uname -p 2>/dev/null || \ /sbin/sysctl -n hw.machine_arch 2>/dev/null || \ /usr/sbin/sysctl -n hw.machine_arch 2>/dev/null || \ echo unknown)` case $UNAME_MACHINE_ARCH in aarch64eb) machine=aarch64_be-unknown ;; armeb) machine=armeb-unknown ;; arm*) machine=arm-unknown ;; sh3el) machine=shl-unknown ;; sh3eb) machine=sh-unknown ;; sh5el) machine=sh5le-unknown ;; earmv*) arch=`echo "$UNAME_MACHINE_ARCH" | sed -e 's,^e\(armv[0-9]\).*$,\1,'` endian=`echo "$UNAME_MACHINE_ARCH" | sed -ne 's,^.*\(eb\)$,\1,p'` machine=${arch}${endian}-unknown ;; *) machine=$UNAME_MACHINE_ARCH-unknown ;; esac # The Operating System including object format, if it has switched # to ELF recently (or will in the future) and ABI. case $UNAME_MACHINE_ARCH in earm*) os=netbsdelf ;; arm*|i386|m68k|ns32k|sh3*|sparc|vax) set_cc_for_build if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \ | grep -q __ELF__ then # Once all utilities can be ECOFF (netbsdecoff) or a.out (netbsdaout). # Return netbsd for either. FIX? os=netbsd else os=netbsdelf fi ;; *) os=netbsd ;; esac # Determine ABI tags. case $UNAME_MACHINE_ARCH in earm*) expr='s/^earmv[0-9]/-eabi/;s/eb$//' abi=`echo "$UNAME_MACHINE_ARCH" | sed -e "$expr"` ;; esac # The OS release # Debian GNU/NetBSD machines have a different userland, and # thus, need a distinct triplet. However, they do not need # kernel version information, so it can be replaced with a # suitable tag, in the style of linux-gnu. case $UNAME_VERSION in Debian*) release='-gnu' ;; *) release=`echo "$UNAME_RELEASE" | sed -e 's/[-_].*//' | cut -d. -f1,2` ;; esac # Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM: # contains redundant information, the shorter form: # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used. GUESS=$machine-${os}${release}${abi-} ;; *:Bitrig:*:*) UNAME_MACHINE_ARCH=`arch | sed 's/Bitrig.//'` GUESS=$UNAME_MACHINE_ARCH-unknown-bitrig$UNAME_RELEASE ;; *:OpenBSD:*:*) UNAME_MACHINE_ARCH=`arch | sed 's/OpenBSD.//'` GUESS=$UNAME_MACHINE_ARCH-unknown-openbsd$UNAME_RELEASE ;; *:SecBSD:*:*) UNAME_MACHINE_ARCH=`arch | sed 's/SecBSD.//'` GUESS=$UNAME_MACHINE_ARCH-unknown-secbsd$UNAME_RELEASE ;; *:LibertyBSD:*:*) UNAME_MACHINE_ARCH=`arch | sed 's/^.*BSD\.//'` GUESS=$UNAME_MACHINE_ARCH-unknown-libertybsd$UNAME_RELEASE ;; *:MidnightBSD:*:*) GUESS=$UNAME_MACHINE-unknown-midnightbsd$UNAME_RELEASE ;; *:ekkoBSD:*:*) GUESS=$UNAME_MACHINE-unknown-ekkobsd$UNAME_RELEASE ;; *:SolidBSD:*:*) GUESS=$UNAME_MACHINE-unknown-solidbsd$UNAME_RELEASE ;; *:OS108:*:*) GUESS=$UNAME_MACHINE-unknown-os108_$UNAME_RELEASE ;; macppc:MirBSD:*:*) GUESS=powerpc-unknown-mirbsd$UNAME_RELEASE ;; *:MirBSD:*:*) GUESS=$UNAME_MACHINE-unknown-mirbsd$UNAME_RELEASE ;; *:Sortix:*:*) GUESS=$UNAME_MACHINE-unknown-sortix ;; *:Twizzler:*:*) GUESS=$UNAME_MACHINE-unknown-twizzler ;; *:Redox:*:*) GUESS=$UNAME_MACHINE-unknown-redox ;; mips:OSF1:*.*) GUESS=mips-dec-osf1 ;; alpha:OSF1:*:*) # Reset EXIT trap before exiting to avoid spurious non-zero exit code. trap '' 0 case $UNAME_RELEASE in *4.0) UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'` ;; *5.*) UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $4}'` ;; esac # According to Compaq, /usr/sbin/psrinfo has been available on # OSF/1 and Tru64 systems produced since 1995. I hope that # covers most systems running today. This code pipes the CPU # types through head -n 1, so we only detect the type of CPU 0. ALPHA_CPU_TYPE=`/usr/sbin/psrinfo -v | sed -n -e 's/^ The alpha \(.*\) processor.*$/\1/p' | head -n 1` case $ALPHA_CPU_TYPE in "EV4 (21064)") UNAME_MACHINE=alpha ;; "EV4.5 (21064)") UNAME_MACHINE=alpha ;; "LCA4 (21066/21068)") UNAME_MACHINE=alpha ;; "EV5 (21164)") UNAME_MACHINE=alphaev5 ;; "EV5.6 (21164A)") UNAME_MACHINE=alphaev56 ;; "EV5.6 (21164PC)") UNAME_MACHINE=alphapca56 ;; "EV5.7 (21164PC)") UNAME_MACHINE=alphapca57 ;; "EV6 (21264)") UNAME_MACHINE=alphaev6 ;; "EV6.7 (21264A)") UNAME_MACHINE=alphaev67 ;; "EV6.8CB (21264C)") UNAME_MACHINE=alphaev68 ;; "EV6.8AL (21264B)") UNAME_MACHINE=alphaev68 ;; "EV6.8CX (21264D)") UNAME_MACHINE=alphaev68 ;; "EV6.9A (21264/EV69A)") UNAME_MACHINE=alphaev69 ;; "EV7 (21364)") UNAME_MACHINE=alphaev7 ;; "EV7.9 (21364A)") UNAME_MACHINE=alphaev79 ;; esac # A Pn.n version is a patched version. # A Vn.n version is a released version. # A Tn.n version is a released field test version. # A Xn.n version is an unreleased experimental baselevel. # 1.2 uses "1.2" for uname -r. OSF_REL=`echo "$UNAME_RELEASE" | sed -e 's/^[PVTX]//' | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz` GUESS=$UNAME_MACHINE-dec-osf$OSF_REL ;; Amiga*:UNIX_System_V:4.0:*) GUESS=m68k-unknown-sysv4 ;; *:[Aa]miga[Oo][Ss]:*:*) GUESS=$UNAME_MACHINE-unknown-amigaos ;; *:[Mm]orph[Oo][Ss]:*:*) GUESS=$UNAME_MACHINE-unknown-morphos ;; *:OS/390:*:*) GUESS=i370-ibm-openedition ;; *:z/VM:*:*) GUESS=s390-ibm-zvmoe ;; *:OS400:*:*) GUESS=powerpc-ibm-os400 ;; arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*) GUESS=arm-acorn-riscix$UNAME_RELEASE ;; arm*:riscos:*:*|arm*:RISCOS:*:*) GUESS=arm-unknown-riscos ;; SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*) GUESS=hppa1.1-hitachi-hiuxmpp ;; Pyramid*:OSx*:*:* | MIS*:OSx*:*:* | MIS*:SMP_DC-OSx*:*:*) # akee@wpdis03.wpafb.af.mil (Earle F. Ake) contributed MIS and NILE. case `(/bin/universe) 2>/dev/null` in att) GUESS=pyramid-pyramid-sysv3 ;; *) GUESS=pyramid-pyramid-bsd ;; esac ;; NILE*:*:*:dcosx) GUESS=pyramid-pyramid-svr4 ;; DRS?6000:unix:4.0:6*) GUESS=sparc-icl-nx6 ;; DRS?6000:UNIX_SV:4.2*:7* | DRS?6000:isis:4.2*:7*) case `/usr/bin/uname -p` in sparc) GUESS=sparc-icl-nx7 ;; esac ;; s390x:SunOS:*:*) SUN_REL=`echo "$UNAME_RELEASE" | sed -e 's/[^.]*//'` GUESS=$UNAME_MACHINE-ibm-solaris2$SUN_REL ;; sun4H:SunOS:5.*:*) SUN_REL=`echo "$UNAME_RELEASE" | sed -e 's/[^.]*//'` GUESS=sparc-hal-solaris2$SUN_REL ;; sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*) SUN_REL=`echo "$UNAME_RELEASE" | sed -e 's/[^.]*//'` GUESS=sparc-sun-solaris2$SUN_REL ;; i86pc:AuroraUX:5.*:* | i86xen:AuroraUX:5.*:*) GUESS=i386-pc-auroraux$UNAME_RELEASE ;; i86pc:SunOS:5.*:* | i86xen:SunOS:5.*:*) set_cc_for_build SUN_ARCH=i386 # If there is a compiler, see if it is configured for 64-bit objects. # Note that the Sun cc does not turn __LP64__ into 1 like gcc does. # This test works for both compilers. if test "$CC_FOR_BUILD" != no_compiler_found; then if (echo '#ifdef __amd64'; echo IS_64BIT_ARCH; echo '#endif') | \ (CCOPTS="" $CC_FOR_BUILD -m64 -E - 2>/dev/null) | \ grep IS_64BIT_ARCH >/dev/null then SUN_ARCH=x86_64 fi fi SUN_REL=`echo "$UNAME_RELEASE" | sed -e 's/[^.]*//'` GUESS=$SUN_ARCH-pc-solaris2$SUN_REL ;; sun4*:SunOS:6*:*) # According to config.sub, this is the proper way to canonicalize # SunOS6. Hard to guess exactly what SunOS6 will be like, but # it's likely to be more like Solaris than SunOS4. SUN_REL=`echo "$UNAME_RELEASE" | sed -e 's/[^.]*//'` GUESS=sparc-sun-solaris3$SUN_REL ;; sun4*:SunOS:*:*) case `/usr/bin/arch -k` in Series*|S4*) UNAME_RELEASE=`uname -v` ;; esac # Japanese Language versions have a version number like `4.1.3-JL'. SUN_REL=`echo "$UNAME_RELEASE" | sed -e 's/-/_/'` GUESS=sparc-sun-sunos$SUN_REL ;; sun3*:SunOS:*:*) GUESS=m68k-sun-sunos$UNAME_RELEASE ;; sun*:*:4.2BSD:*) UNAME_RELEASE=`(sed 1q /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null` test "x$UNAME_RELEASE" = x && UNAME_RELEASE=3 case `/bin/arch` in sun3) GUESS=m68k-sun-sunos$UNAME_RELEASE ;; sun4) GUESS=sparc-sun-sunos$UNAME_RELEASE ;; esac ;; aushp:SunOS:*:*) GUESS=sparc-auspex-sunos$UNAME_RELEASE ;; # The situation for MiNT is a little confusing. The machine name # can be virtually everything (everything which is not # "atarist" or "atariste" at least should have a processor # > m68000). The system name ranges from "MiNT" over "FreeMiNT" # to the lowercase version "mint" (or "freemint"). Finally # the system name "TOS" denotes a system which is actually not # MiNT. But MiNT is downward compatible to TOS, so this should # be no problem. atarist[e]:*MiNT:*:* | atarist[e]:*mint:*:* | atarist[e]:*TOS:*:*) GUESS=m68k-atari-mint$UNAME_RELEASE ;; atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*) GUESS=m68k-atari-mint$UNAME_RELEASE ;; *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*) GUESS=m68k-atari-mint$UNAME_RELEASE ;; milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*) GUESS=m68k-milan-mint$UNAME_RELEASE ;; hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*) GUESS=m68k-hades-mint$UNAME_RELEASE ;; *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*) GUESS=m68k-unknown-mint$UNAME_RELEASE ;; m68k:machten:*:*) GUESS=m68k-apple-machten$UNAME_RELEASE ;; powerpc:machten:*:*) GUESS=powerpc-apple-machten$UNAME_RELEASE ;; RISC*:Mach:*:*) GUESS=mips-dec-mach_bsd4.3 ;; RISC*:ULTRIX:*:*) GUESS=mips-dec-ultrix$UNAME_RELEASE ;; VAX*:ULTRIX*:*:*) GUESS=vax-dec-ultrix$UNAME_RELEASE ;; 2020:CLIX:*:* | 2430:CLIX:*:*) GUESS=clipper-intergraph-clix$UNAME_RELEASE ;; mips:*:*:UMIPS | mips:*:*:RISCos) set_cc_for_build sed 's/^ //' << EOF > "$dummy.c" #ifdef __cplusplus #include <stdio.h> /* for printf() prototype */ int main (int argc, char *argv[]) { #else int main (argc, argv) int argc; char *argv[]; { #endif #if defined (host_mips) && defined (MIPSEB) #if defined (SYSTYPE_SYSV) printf ("mips-mips-riscos%ssysv\\n", argv[1]); exit (0); #endif #if defined (SYSTYPE_SVR4) printf ("mips-mips-riscos%ssvr4\\n", argv[1]); exit (0); #endif #if defined (SYSTYPE_BSD43) || defined(SYSTYPE_BSD) printf ("mips-mips-riscos%sbsd\\n", argv[1]); exit (0); #endif #endif exit (-1); } EOF $CC_FOR_BUILD -o "$dummy" "$dummy.c" && dummyarg=`echo "$UNAME_RELEASE" | sed -n 's/\([0-9]*\).*/\1/p'` && SYSTEM_NAME=`"$dummy" "$dummyarg"` && { echo "$SYSTEM_NAME"; exit; } GUESS=mips-mips-riscos$UNAME_RELEASE ;; Motorola:PowerMAX_OS:*:*) GUESS=powerpc-motorola-powermax ;; Motorola:*:4.3:PL8-*) GUESS=powerpc-harris-powermax ;; Night_Hawk:*:*:PowerMAX_OS | Synergy:PowerMAX_OS:*:*) GUESS=powerpc-harris-powermax ;; Night_Hawk:Power_UNIX:*:*) GUESS=powerpc-harris-powerunix ;; m88k:CX/UX:7*:*) GUESS=m88k-harris-cxux7 ;; m88k:*:4*:R4*) GUESS=m88k-motorola-sysv4 ;; m88k:*:3*:R3*) GUESS=m88k-motorola-sysv3 ;; AViiON:dgux:*:*) # DG/UX returns AViiON for all architectures UNAME_PROCESSOR=`/usr/bin/uname -p` if test "$UNAME_PROCESSOR" = mc88100 || test "$UNAME_PROCESSOR" = mc88110 then if test "$TARGET_BINARY_INTERFACE"x = m88kdguxelfx || \ test "$TARGET_BINARY_INTERFACE"x = x then GUESS=m88k-dg-dgux$UNAME_RELEASE else GUESS=m88k-dg-dguxbcs$UNAME_RELEASE fi else GUESS=i586-dg-dgux$UNAME_RELEASE fi ;; M88*:DolphinOS:*:*) # DolphinOS (SVR3) GUESS=m88k-dolphin-sysv3 ;; M88*:*:R3*:*) # Delta 88k system running SVR3 GUESS=m88k-motorola-sysv3 ;; XD88*:*:*:*) # Tektronix XD88 system running UTekV (SVR3) GUESS=m88k-tektronix-sysv3 ;; Tek43[0-9][0-9]:UTek:*:*) # Tektronix 4300 system running UTek (BSD) GUESS=m68k-tektronix-bsd ;; *:IRIX*:*:*) IRIX_REL=`echo "$UNAME_RELEASE" | sed -e 's/-/_/g'` GUESS=mips-sgi-irix$IRIX_REL ;; ????????:AIX?:[12].1:2) # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX. GUESS=romp-ibm-aix # uname -m gives an 8 hex-code CPU id ;; # Note that: echo "'`uname -s`'" gives 'AIX ' i*86:AIX:*:*) GUESS=i386-ibm-aix ;; ia64:AIX:*:*) if test -x /usr/bin/oslevel ; then IBM_REV=`/usr/bin/oslevel` else IBM_REV=$UNAME_VERSION.$UNAME_RELEASE fi GUESS=$UNAME_MACHINE-ibm-aix$IBM_REV ;; *:AIX:2:3) if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then set_cc_for_build sed 's/^ //' << EOF > "$dummy.c" #include <sys/systemcfg.h> main() { if (!__power_pc()) exit(1); puts("powerpc-ibm-aix3.2.5"); exit(0); } EOF if $CC_FOR_BUILD -o "$dummy" "$dummy.c" && SYSTEM_NAME=`"$dummy"` then GUESS=$SYSTEM_NAME else GUESS=rs6000-ibm-aix3.2.5 fi elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then GUESS=rs6000-ibm-aix3.2.4 else GUESS=rs6000-ibm-aix3.2 fi ;; *:AIX:*:[4567]) IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | sed 1q | awk '{ print $1 }'` if /usr/sbin/lsattr -El "$IBM_CPU_ID" | grep ' POWER' >/dev/null 2>&1; then IBM_ARCH=rs6000 else IBM_ARCH=powerpc fi if test -x /usr/bin/lslpp ; then IBM_REV=`/usr/bin/lslpp -Lqc bos.rte.libc | \ awk -F: '{ print $3 }' | sed s/[0-9]*$/0/` else IBM_REV=$UNAME_VERSION.$UNAME_RELEASE fi GUESS=$IBM_ARCH-ibm-aix$IBM_REV ;; *:AIX:*:*) GUESS=rs6000-ibm-aix ;; ibmrt:4.4BSD:*|romp-ibm:4.4BSD:*) GUESS=romp-ibm-bsd4.4 ;; ibmrt:*BSD:*|romp-ibm:BSD:*) # covers RT/PC BSD and GUESS=romp-ibm-bsd$UNAME_RELEASE # 4.3 with uname added to ;; # report: romp-ibm BSD 4.3 *:BOSX:*:*) GUESS=rs6000-bull-bosx ;; DPX/2?00:B.O.S.:*:*) GUESS=m68k-bull-sysv3 ;; 9000/[34]??:4.3bsd:1.*:*) GUESS=m68k-hp-bsd ;; hp300:4.4BSD:*:* | 9000/[34]??:4.3bsd:2.*:*) GUESS=m68k-hp-bsd4.4 ;; 9000/[34678]??:HP-UX:*:*) HPUX_REV=`echo "$UNAME_RELEASE" | sed -e 's/[^.]*.[0B]*//'` case $UNAME_MACHINE in 9000/31?) HP_ARCH=m68000 ;; 9000/[34]??) HP_ARCH=m68k ;; 9000/[678][0-9][0-9]) if test -x /usr/bin/getconf; then sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null` sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null` case $sc_cpu_version in 523) HP_ARCH=hppa1.0 ;; # CPU_PA_RISC1_0 528) HP_ARCH=hppa1.1 ;; # CPU_PA_RISC1_1 532) # CPU_PA_RISC2_0 case $sc_kernel_bits in 32) HP_ARCH=hppa2.0n ;; 64) HP_ARCH=hppa2.0w ;; '') HP_ARCH=hppa2.0 ;; # HP-UX 10.20 esac ;; esac fi if test "$HP_ARCH" = ""; then set_cc_for_build sed 's/^ //' << EOF > "$dummy.c" #define _HPUX_SOURCE #include <stdlib.h> #include <unistd.h> int main () { #if defined(_SC_KERNEL_BITS) long bits = sysconf(_SC_KERNEL_BITS); #endif long cpu = sysconf (_SC_CPU_VERSION); switch (cpu) { case CPU_PA_RISC1_0: puts ("hppa1.0"); break; case CPU_PA_RISC1_1: puts ("hppa1.1"); break; case CPU_PA_RISC2_0: #if defined(_SC_KERNEL_BITS) switch (bits) { case 64: puts ("hppa2.0w"); break; case 32: puts ("hppa2.0n"); break; default: puts ("hppa2.0"); break; } break; #else /* !defined(_SC_KERNEL_BITS) */ puts ("hppa2.0"); break; #endif default: puts ("hppa1.0"); break; } exit (0); } EOF (CCOPTS="" $CC_FOR_BUILD -o "$dummy" "$dummy.c" 2>/dev/null) && HP_ARCH=`"$dummy"` test -z "$HP_ARCH" && HP_ARCH=hppa fi ;; esac if test "$HP_ARCH" = hppa2.0w then set_cc_for_build # hppa2.0w-hp-hpux* has a 64-bit kernel and a compiler generating # 32-bit code. hppa64-hp-hpux* has the same kernel and a compiler # generating 64-bit code. GNU and HP use different nomenclature: # # $ CC_FOR_BUILD=cc ./config.guess # => hppa2.0w-hp-hpux11.23 # $ CC_FOR_BUILD="cc +DA2.0w" ./config.guess # => hppa64-hp-hpux11.23 if echo __LP64__ | (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | grep -q __LP64__ then HP_ARCH=hppa2.0w else HP_ARCH=hppa64 fi fi GUESS=$HP_ARCH-hp-hpux$HPUX_REV ;; ia64:HP-UX:*:*) HPUX_REV=`echo "$UNAME_RELEASE" | sed -e 's/[^.]*.[0B]*//'` GUESS=ia64-hp-hpux$HPUX_REV ;; 3050*:HI-UX:*:*) set_cc_for_build sed 's/^ //' << EOF > "$dummy.c" #include <unistd.h> int main () { long cpu = sysconf (_SC_CPU_VERSION); /* The order matters, because CPU_IS_HP_MC68K erroneously returns true for CPU_PA_RISC1_0. CPU_IS_PA_RISC returns correct results, however. */ if (CPU_IS_PA_RISC (cpu)) { switch (cpu) { case CPU_PA_RISC1_0: puts ("hppa1.0-hitachi-hiuxwe2"); break; case CPU_PA_RISC1_1: puts ("hppa1.1-hitachi-hiuxwe2"); break; case CPU_PA_RISC2_0: puts ("hppa2.0-hitachi-hiuxwe2"); break; default: puts ("hppa-hitachi-hiuxwe2"); break; } } else if (CPU_IS_HP_MC68K (cpu)) puts ("m68k-hitachi-hiuxwe2"); else puts ("unknown-hitachi-hiuxwe2"); exit (0); } EOF $CC_FOR_BUILD -o "$dummy" "$dummy.c" && SYSTEM_NAME=`"$dummy"` && { echo "$SYSTEM_NAME"; exit; } GUESS=unknown-hitachi-hiuxwe2 ;; 9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:*) GUESS=hppa1.1-hp-bsd ;; 9000/8??:4.3bsd:*:*) GUESS=hppa1.0-hp-bsd ;; *9??*:MPE/iX:*:* | *3000*:MPE/iX:*:*) GUESS=hppa1.0-hp-mpeix ;; hp7??:OSF1:*:* | hp8?[79]:OSF1:*:*) GUESS=hppa1.1-hp-osf ;; hp8??:OSF1:*:*) GUESS=hppa1.0-hp-osf ;; i*86:OSF1:*:*) if test -x /usr/sbin/sysversion ; then GUESS=$UNAME_MACHINE-unknown-osf1mk else GUESS=$UNAME_MACHINE-unknown-osf1 fi ;; parisc*:Lites*:*:*) GUESS=hppa1.1-hp-lites ;; C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*) GUESS=c1-convex-bsd ;; C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*) if getsysinfo -f scalar_acc then echo c32-convex-bsd else echo c2-convex-bsd fi exit ;; C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*) GUESS=c34-convex-bsd ;; C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*) GUESS=c38-convex-bsd ;; C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*) GUESS=c4-convex-bsd ;; CRAY*Y-MP:*:*:*) CRAY_REL=`echo "$UNAME_RELEASE" | sed -e 's/\.[^.]*$/.X/'` GUESS=ymp-cray-unicos$CRAY_REL ;; CRAY*[A-Z]90:*:*:*) echo "$UNAME_MACHINE"-cray-unicos"$UNAME_RELEASE" \ | sed -e 's/CRAY.*\([A-Z]90\)/\1/' \ -e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/ \ -e 's/\.[^.]*$/.X/' exit ;; CRAY*TS:*:*:*) CRAY_REL=`echo "$UNAME_RELEASE" | sed -e 's/\.[^.]*$/.X/'` GUESS=t90-cray-unicos$CRAY_REL ;; CRAY*T3E:*:*:*) CRAY_REL=`echo "$UNAME_RELEASE" | sed -e 's/\.[^.]*$/.X/'` GUESS=alphaev5-cray-unicosmk$CRAY_REL ;; CRAY*SV1:*:*:*) CRAY_REL=`echo "$UNAME_RELEASE" | sed -e 's/\.[^.]*$/.X/'` GUESS=sv1-cray-unicos$CRAY_REL ;; *:UNICOS/mp:*:*) CRAY_REL=`echo "$UNAME_RELEASE" | sed -e 's/\.[^.]*$/.X/'` GUESS=craynv-cray-unicosmp$CRAY_REL ;; F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*) FUJITSU_PROC=`uname -m | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz` FUJITSU_SYS=`uname -p | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz | sed -e 's/\///'` FUJITSU_REL=`echo "$UNAME_RELEASE" | sed -e 's/ /_/'` GUESS=${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL} ;; 5000:UNIX_System_V:4.*:*) FUJITSU_SYS=`uname -p | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz | sed -e 's/\///'` FUJITSU_REL=`echo "$UNAME_RELEASE" | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz | sed -e 's/ /_/'` GUESS=sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL} ;; i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*) GUESS=$UNAME_MACHINE-pc-bsdi$UNAME_RELEASE ;; sparc*:BSD/OS:*:*) GUESS=sparc-unknown-bsdi$UNAME_RELEASE ;; *:BSD/OS:*:*) GUESS=$UNAME_MACHINE-unknown-bsdi$UNAME_RELEASE ;; arm:FreeBSD:*:*) UNAME_PROCESSOR=`uname -p` set_cc_for_build if echo __ARM_PCS_VFP | $CC_FOR_BUILD -E - 2>/dev/null \ | grep -q __ARM_PCS_VFP then FREEBSD_REL=`echo "$UNAME_RELEASE" | sed -e 's/[-(].*//'` GUESS=$UNAME_PROCESSOR-unknown-freebsd$FREEBSD_REL-gnueabi else FREEBSD_REL=`echo "$UNAME_RELEASE" | sed -e 's/[-(].*//'` GUESS=$UNAME_PROCESSOR-unknown-freebsd$FREEBSD_REL-gnueabihf fi ;; *:FreeBSD:*:*) UNAME_PROCESSOR=`/usr/bin/uname -p` case $UNAME_PROCESSOR in amd64) UNAME_PROCESSOR=x86_64 ;; i386) UNAME_PROCESSOR=i586 ;; esac FREEBSD_REL=`echo "$UNAME_RELEASE" | sed -e 's/[-(].*//'` GUESS=$UNAME_PROCESSOR-unknown-freebsd$FREEBSD_REL ;; i*:CYGWIN*:*) GUESS=$UNAME_MACHINE-pc-cygwin ;; *:MINGW64*:*) GUESS=$UNAME_MACHINE-pc-mingw64 ;; *:MINGW*:*) GUESS=$UNAME_MACHINE-pc-mingw32 ;; *:MSYS*:*) GUESS=$UNAME_MACHINE-pc-msys ;; i*:PW*:*) GUESS=$UNAME_MACHINE-pc-pw32 ;; *:SerenityOS:*:*) GUESS=$UNAME_MACHINE-pc-serenity ;; *:Interix*:*) case $UNAME_MACHINE in x86) GUESS=i586-pc-interix$UNAME_RELEASE ;; authenticamd | genuineintel | EM64T) GUESS=x86_64-unknown-interix$UNAME_RELEASE ;; IA64) GUESS=ia64-unknown-interix$UNAME_RELEASE ;; esac ;; i*:UWIN*:*) GUESS=$UNAME_MACHINE-pc-uwin ;; amd64:CYGWIN*:*:* | x86_64:CYGWIN*:*:*) GUESS=x86_64-pc-cygwin ;; prep*:SunOS:5.*:*) SUN_REL=`echo "$UNAME_RELEASE" | sed -e 's/[^.]*//'` GUESS=powerpcle-unknown-solaris2$SUN_REL ;; *:GNU:*:*) # the GNU system GNU_ARCH=`echo "$UNAME_MACHINE" | sed -e 's,[-/].*$,,'` GNU_REL=`echo "$UNAME_RELEASE" | sed -e 's,/.*$,,'` GUESS=$GNU_ARCH-unknown-$LIBC$GNU_REL ;; *:GNU/*:*:*) # other systems with GNU libc and userland GNU_SYS=`echo "$UNAME_SYSTEM" | sed 's,^[^/]*/,,' | tr "[:upper:]" "[:lower:]"` GNU_REL=`echo "$UNAME_RELEASE" | sed -e 's/[-(].*//'` GUESS=$UNAME_MACHINE-unknown-$GNU_SYS$GNU_REL-$LIBC ;; *:Minix:*:*) GUESS=$UNAME_MACHINE-unknown-minix ;; aarch64:Linux:*:*) GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; aarch64_be:Linux:*:*) UNAME_MACHINE=aarch64_be GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; alpha:Linux:*:*) case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' /proc/cpuinfo 2>/dev/null` in EV5) UNAME_MACHINE=alphaev5 ;; EV56) UNAME_MACHINE=alphaev56 ;; PCA56) UNAME_MACHINE=alphapca56 ;; PCA57) UNAME_MACHINE=alphapca56 ;; EV6) UNAME_MACHINE=alphaev6 ;; EV67) UNAME_MACHINE=alphaev67 ;; EV68*) UNAME_MACHINE=alphaev68 ;; esac objdump --private-headers /bin/sh | grep -q ld.so.1 if test "$?" = 0 ; then LIBC=gnulibc1 ; fi GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; arc:Linux:*:* | arceb:Linux:*:* | arc32:Linux:*:* | arc64:Linux:*:*) GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; arm*:Linux:*:*) set_cc_for_build if echo __ARM_EABI__ | $CC_FOR_BUILD -E - 2>/dev/null \ | grep -q __ARM_EABI__ then GUESS=$UNAME_MACHINE-unknown-linux-$LIBC else if echo __ARM_PCS_VFP | $CC_FOR_BUILD -E - 2>/dev/null \ | grep -q __ARM_PCS_VFP then GUESS=$UNAME_MACHINE-unknown-linux-${LIBC}eabi else GUESS=$UNAME_MACHINE-unknown-linux-${LIBC}eabihf fi fi ;; avr32*:Linux:*:*) GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; cris:Linux:*:*) GUESS=$UNAME_MACHINE-axis-linux-$LIBC ;; crisv32:Linux:*:*) GUESS=$UNAME_MACHINE-axis-linux-$LIBC ;; e2k:Linux:*:*) GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; frv:Linux:*:*) GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; hexagon:Linux:*:*) GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; i*86:Linux:*:*) GUESS=$UNAME_MACHINE-pc-linux-$LIBC ;; ia64:Linux:*:*) GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; k1om:Linux:*:*) GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; loongarch32:Linux:*:* | loongarch64:Linux:*:* | loongarchx32:Linux:*:*) GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; m32r*:Linux:*:*) GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; m68*:Linux:*:*) GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; mips:Linux:*:* | mips64:Linux:*:*) set_cc_for_build IS_GLIBC=0 test x"${LIBC}" = xgnu && IS_GLIBC=1 sed 's/^ //' << EOF > "$dummy.c" #undef CPU #undef mips #undef mipsel #undef mips64 #undef mips64el #if ${IS_GLIBC} && defined(_ABI64) LIBCABI=gnuabi64 #else #if ${IS_GLIBC} && defined(_ABIN32) LIBCABI=gnuabin32 #else LIBCABI=${LIBC} #endif #endif #if ${IS_GLIBC} && defined(__mips64) && defined(__mips_isa_rev) && __mips_isa_rev>=6 CPU=mipsisa64r6 #else #if ${IS_GLIBC} && !defined(__mips64) && defined(__mips_isa_rev) && __mips_isa_rev>=6 CPU=mipsisa32r6 #else #if defined(__mips64) CPU=mips64 #else CPU=mips #endif #endif #endif #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL) MIPS_ENDIAN=el #else #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB) MIPS_ENDIAN= #else MIPS_ENDIAN= #endif #endif EOF cc_set_vars=`$CC_FOR_BUILD -E "$dummy.c" 2>/dev/null | grep '^CPU\|^MIPS_ENDIAN\|^LIBCABI'` eval "$cc_set_vars" test "x$CPU" != x && { echo "$CPU${MIPS_ENDIAN}-unknown-linux-$LIBCABI"; exit; } ;; mips64el:Linux:*:*) GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; openrisc*:Linux:*:*) GUESS=or1k-unknown-linux-$LIBC ;; or32:Linux:*:* | or1k*:Linux:*:*) GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; padre:Linux:*:*) GUESS=sparc-unknown-linux-$LIBC ;; parisc64:Linux:*:* | hppa64:Linux:*:*) GUESS=hppa64-unknown-linux-$LIBC ;; parisc:Linux:*:* | hppa:Linux:*:*) # Look for CPU level case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in PA7*) GUESS=hppa1.1-unknown-linux-$LIBC ;; PA8*) GUESS=hppa2.0-unknown-linux-$LIBC ;; *) GUESS=hppa-unknown-linux-$LIBC ;; esac ;; ppc64:Linux:*:*) GUESS=powerpc64-unknown-linux-$LIBC ;; ppc:Linux:*:*) GUESS=powerpc-unknown-linux-$LIBC ;; ppc64le:Linux:*:*) GUESS=powerpc64le-unknown-linux-$LIBC ;; ppcle:Linux:*:*) GUESS=powerpcle-unknown-linux-$LIBC ;; riscv32:Linux:*:* | riscv32be:Linux:*:* | riscv64:Linux:*:* | riscv64be:Linux:*:*) GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; s390:Linux:*:* | s390x:Linux:*:*) GUESS=$UNAME_MACHINE-ibm-linux-$LIBC ;; sh64*:Linux:*:*) GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; sh*:Linux:*:*) GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; sparc:Linux:*:* | sparc64:Linux:*:*) GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; tile*:Linux:*:*) GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; vax:Linux:*:*) GUESS=$UNAME_MACHINE-dec-linux-$LIBC ;; x86_64:Linux:*:*) set_cc_for_build LIBCABI=$LIBC if test "$CC_FOR_BUILD" != no_compiler_found; then if (echo '#ifdef __ILP32__'; echo IS_X32; echo '#endif') | \ (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | \ grep IS_X32 >/dev/null then LIBCABI=${LIBC}x32 fi fi GUESS=$UNAME_MACHINE-pc-linux-$LIBCABI ;; xtensa*:Linux:*:*) GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; i*86:DYNIX/ptx:4*:*) # ptx 4.0 does uname -s correctly, with DYNIX/ptx in there. # earlier versions are messed up and put the nodename in both # sysname and nodename. GUESS=i386-sequent-sysv4 ;; i*86:UNIX_SV:4.2MP:2.*) # Unixware is an offshoot of SVR4, but it has its own version # number series starting with 2... # I am not positive that other SVR4 systems won't match this, # I just have to hope. -- rms. # Use sysv4.2uw... so that sysv4* matches it. GUESS=$UNAME_MACHINE-pc-sysv4.2uw$UNAME_VERSION ;; i*86:OS/2:*:*) # If we were able to find `uname', then EMX Unix compatibility # is probably installed. GUESS=$UNAME_MACHINE-pc-os2-emx ;; i*86:XTS-300:*:STOP) GUESS=$UNAME_MACHINE-unknown-stop ;; i*86:atheos:*:*) GUESS=$UNAME_MACHINE-unknown-atheos ;; i*86:syllable:*:*) GUESS=$UNAME_MACHINE-pc-syllable ;; i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.[02]*:*) GUESS=i386-unknown-lynxos$UNAME_RELEASE ;; i*86:*DOS:*:*) GUESS=$UNAME_MACHINE-pc-msdosdjgpp ;; i*86:*:4.*:*) UNAME_REL=`echo "$UNAME_RELEASE" | sed 's/\/MP$//'` if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then GUESS=$UNAME_MACHINE-univel-sysv$UNAME_REL else GUESS=$UNAME_MACHINE-pc-sysv$UNAME_REL fi ;; i*86:*:5:[678]*) # UnixWare 7.x, OpenUNIX and OpenServer 6. case `/bin/uname -X | grep "^Machine"` in *486*) UNAME_MACHINE=i486 ;; *Pentium) UNAME_MACHINE=i586 ;; *Pent*|*Celeron) UNAME_MACHINE=i686 ;; esac GUESS=$UNAME_MACHINE-unknown-sysv${UNAME_RELEASE}${UNAME_SYSTEM}${UNAME_VERSION} ;; i*86:*:3.2:*) if test -f /usr/options/cb.name; then UNAME_REL=`sed -n 's/.*Version //p' </usr/options/cb.name` GUESS=$UNAME_MACHINE-pc-isc$UNAME_REL elif /bin/uname -X 2>/dev/null >/dev/null ; then UNAME_REL=`(/bin/uname -X|grep Release|sed -e 's/.*= //')` (/bin/uname -X|grep i80486 >/dev/null) && UNAME_MACHINE=i486 (/bin/uname -X|grep '^Machine.*Pentium' >/dev/null) \ && UNAME_MACHINE=i586 (/bin/uname -X|grep '^Machine.*Pent *II' >/dev/null) \ && UNAME_MACHINE=i686 (/bin/uname -X|grep '^Machine.*Pentium Pro' >/dev/null) \ && UNAME_MACHINE=i686 GUESS=$UNAME_MACHINE-pc-sco$UNAME_REL else GUESS=$UNAME_MACHINE-pc-sysv32 fi ;; pc:*:*:*) # Left here for compatibility: # uname -m prints for DJGPP always 'pc', but it prints nothing about # the processor, so we play safe by assuming i586. # Note: whatever this is, it MUST be the same as what config.sub # prints for the "djgpp" host, or else GDB configure will decide that # this is a cross-build. GUESS=i586-pc-msdosdjgpp ;; Intel:Mach:3*:*) GUESS=i386-pc-mach3 ;; paragon:*:*:*) GUESS=i860-intel-osf1 ;; i860:*:4.*:*) # i860-SVR4 if grep Stardent /usr/include/sys/uadmin.h >/dev/null 2>&1 ; then GUESS=i860-stardent-sysv$UNAME_RELEASE # Stardent Vistra i860-SVR4 else # Add other i860-SVR4 vendors below as they are discovered. GUESS=i860-unknown-sysv$UNAME_RELEASE # Unknown i860-SVR4 fi ;; mini*:CTIX:SYS*5:*) # "miniframe" GUESS=m68010-convergent-sysv ;; mc68k:UNIX:SYSTEM5:3.51m) GUESS=m68k-convergent-sysv ;; M680?0:D-NIX:5.3:*) GUESS=m68k-diab-dnix ;; M68*:*:R3V[5678]*:*) test -r /sysV68 && { echo 'm68k-motorola-sysv'; exit; } ;; 3[345]??:*:4.0:3.0 | 3[34]??A:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 3[34]??/*:*:4.0:3.0 | 4400:*:4.0:3.0 | 4850:*:4.0:3.0 | SKA40:*:4.0:3.0 | SDS2:*:4.0:3.0 | SHG2:*:4.0:3.0 | S7501*:*:4.0:3.0) OS_REL='' test -r /etc/.relid \ && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ && { echo i486-ncr-sysv4.3"$OS_REL"; exit; } /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ && { echo i586-ncr-sysv4.3"$OS_REL"; exit; } ;; 3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*) /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ && { echo i486-ncr-sysv4; exit; } ;; NCR*:*:4.2:* | MPRAS*:*:4.2:*) OS_REL='.3' test -r /etc/.relid \ && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ && { echo i486-ncr-sysv4.3"$OS_REL"; exit; } /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ && { echo i586-ncr-sysv4.3"$OS_REL"; exit; } /bin/uname -p 2>/dev/null | /bin/grep pteron >/dev/null \ && { echo i586-ncr-sysv4.3"$OS_REL"; exit; } ;; m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*) GUESS=m68k-unknown-lynxos$UNAME_RELEASE ;; mc68030:UNIX_System_V:4.*:*) GUESS=m68k-atari-sysv4 ;; TSUNAMI:LynxOS:2.*:*) GUESS=sparc-unknown-lynxos$UNAME_RELEASE ;; rs6000:LynxOS:2.*:*) GUESS=rs6000-unknown-lynxos$UNAME_RELEASE ;; PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.[02]*:*) GUESS=powerpc-unknown-lynxos$UNAME_RELEASE ;; SM[BE]S:UNIX_SV:*:*) GUESS=mips-dde-sysv$UNAME_RELEASE ;; RM*:ReliantUNIX-*:*:*) GUESS=mips-sni-sysv4 ;; RM*:SINIX-*:*:*) GUESS=mips-sni-sysv4 ;; *:SINIX-*:*:*) if uname -p 2>/dev/null >/dev/null ; then UNAME_MACHINE=`(uname -p) 2>/dev/null` GUESS=$UNAME_MACHINE-sni-sysv4 else GUESS=ns32k-sni-sysv fi ;; PENTIUM:*:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort # says <Richard.M.Bartel@ccMail.Census.GOV> GUESS=i586-unisys-sysv4 ;; *:UNIX_System_V:4*:FTX*) # From Gerald Hewes <hewes@openmarket.com>. # How about differentiating between stratus architectures? -djm GUESS=hppa1.1-stratus-sysv4 ;; *:*:*:FTX*) # From seanf@swdc.stratus.com. GUESS=i860-stratus-sysv4 ;; i*86:VOS:*:*) # From Paul.Green@stratus.com. GUESS=$UNAME_MACHINE-stratus-vos ;; *:VOS:*:*) # From Paul.Green@stratus.com. GUESS=hppa1.1-stratus-vos ;; mc68*:A/UX:*:*) GUESS=m68k-apple-aux$UNAME_RELEASE ;; news*:NEWS-OS:6*:*) GUESS=mips-sony-newsos6 ;; R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*) if test -d /usr/nec; then GUESS=mips-nec-sysv$UNAME_RELEASE else GUESS=mips-unknown-sysv$UNAME_RELEASE fi ;; BeBox:BeOS:*:*) # BeOS running on hardware made by Be, PPC only. GUESS=powerpc-be-beos ;; BeMac:BeOS:*:*) # BeOS running on Mac or Mac clone, PPC only. GUESS=powerpc-apple-beos ;; BePC:BeOS:*:*) # BeOS running on Intel PC compatible. GUESS=i586-pc-beos ;; BePC:Haiku:*:*) # Haiku running on Intel PC compatible. GUESS=i586-pc-haiku ;; x86_64:Haiku:*:*) GUESS=x86_64-unknown-haiku ;; SX-4:SUPER-UX:*:*) GUESS=sx4-nec-superux$UNAME_RELEASE ;; SX-5:SUPER-UX:*:*) GUESS=sx5-nec-superux$UNAME_RELEASE ;; SX-6:SUPER-UX:*:*) GUESS=sx6-nec-superux$UNAME_RELEASE ;; SX-7:SUPER-UX:*:*) GUESS=sx7-nec-superux$UNAME_RELEASE ;; SX-8:SUPER-UX:*:*) GUESS=sx8-nec-superux$UNAME_RELEASE ;; SX-8R:SUPER-UX:*:*) GUESS=sx8r-nec-superux$UNAME_RELEASE ;; SX-ACE:SUPER-UX:*:*) GUESS=sxace-nec-superux$UNAME_RELEASE ;; Power*:Rhapsody:*:*) GUESS=powerpc-apple-rhapsody$UNAME_RELEASE ;; *:Rhapsody:*:*) GUESS=$UNAME_MACHINE-apple-rhapsody$UNAME_RELEASE ;; arm64:Darwin:*:*) GUESS=aarch64-apple-darwin$UNAME_RELEASE ;; *:Darwin:*:*) UNAME_PROCESSOR=`uname -p` case $UNAME_PROCESSOR in unknown) UNAME_PROCESSOR=powerpc ;; esac if command -v xcode-select > /dev/null 2> /dev/null && \ ! xcode-select --print-path > /dev/null 2> /dev/null ; then # Avoid executing cc if there is no toolchain installed as # cc will be a stub that puts up a graphical alert # prompting the user to install developer tools. CC_FOR_BUILD=no_compiler_found else set_cc_for_build fi if test "$CC_FOR_BUILD" != no_compiler_found; then if (echo '#ifdef __LP64__'; echo IS_64BIT_ARCH; echo '#endif') | \ (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | \ grep IS_64BIT_ARCH >/dev/null then case $UNAME_PROCESSOR in i386) UNAME_PROCESSOR=x86_64 ;; powerpc) UNAME_PROCESSOR=powerpc64 ;; esac fi # On 10.4-10.6 one might compile for PowerPC via gcc -arch ppc if (echo '#ifdef __POWERPC__'; echo IS_PPC; echo '#endif') | \ (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | \ grep IS_PPC >/dev/null then UNAME_PROCESSOR=powerpc fi elif test "$UNAME_PROCESSOR" = i386 ; then # uname -m returns i386 or x86_64 UNAME_PROCESSOR=$UNAME_MACHINE fi GUESS=$UNAME_PROCESSOR-apple-darwin$UNAME_RELEASE ;; *:procnto*:*:* | *:QNX:[0123456789]*:*) UNAME_PROCESSOR=`uname -p` if test "$UNAME_PROCESSOR" = x86; then UNAME_PROCESSOR=i386 UNAME_MACHINE=pc fi GUESS=$UNAME_PROCESSOR-$UNAME_MACHINE-nto-qnx$UNAME_RELEASE ;; *:QNX:*:4*) GUESS=i386-pc-qnx ;; NEO-*:NONSTOP_KERNEL:*:*) GUESS=neo-tandem-nsk$UNAME_RELEASE ;; NSE-*:NONSTOP_KERNEL:*:*) GUESS=nse-tandem-nsk$UNAME_RELEASE ;; NSR-*:NONSTOP_KERNEL:*:*) GUESS=nsr-tandem-nsk$UNAME_RELEASE ;; NSV-*:NONSTOP_KERNEL:*:*) GUESS=nsv-tandem-nsk$UNAME_RELEASE ;; NSX-*:NONSTOP_KERNEL:*:*) GUESS=nsx-tandem-nsk$UNAME_RELEASE ;; *:NonStop-UX:*:*) GUESS=mips-compaq-nonstopux ;; BS2000:POSIX*:*:*) GUESS=bs2000-siemens-sysv ;; DS/*:UNIX_System_V:*:*) GUESS=$UNAME_MACHINE-$UNAME_SYSTEM-$UNAME_RELEASE ;; *:Plan9:*:*) # "uname -m" is not consistent, so use $cputype instead. 386 # is converted to i386 for consistency with other x86 # operating systems. if test "${cputype-}" = 386; then UNAME_MACHINE=i386 elif test "x${cputype-}" != x; then UNAME_MACHINE=$cputype fi GUESS=$UNAME_MACHINE-unknown-plan9 ;; *:TOPS-10:*:*) GUESS=pdp10-unknown-tops10 ;; *:TENEX:*:*) GUESS=pdp10-unknown-tenex ;; KS10:TOPS-20:*:* | KL10:TOPS-20:*:* | TYPE4:TOPS-20:*:*) GUESS=pdp10-dec-tops20 ;; XKL-1:TOPS-20:*:* | TYPE5:TOPS-20:*:*) GUESS=pdp10-xkl-tops20 ;; *:TOPS-20:*:*) GUESS=pdp10-unknown-tops20 ;; *:ITS:*:*) GUESS=pdp10-unknown-its ;; SEI:*:*:SEIUX) GUESS=mips-sei-seiux$UNAME_RELEASE ;; *:DragonFly:*:*) DRAGONFLY_REL=`echo "$UNAME_RELEASE" | sed -e 's/[-(].*//'` GUESS=$UNAME_MACHINE-unknown-dragonfly$DRAGONFLY_REL ;; *:*VMS:*:*) UNAME_MACHINE=`(uname -p) 2>/dev/null` case $UNAME_MACHINE in A*) GUESS=alpha-dec-vms ;; I*) GUESS=ia64-dec-vms ;; V*) GUESS=vax-dec-vms ;; esac ;; *:XENIX:*:SysV) GUESS=i386-pc-xenix ;; i*86:skyos:*:*) SKYOS_REL=`echo "$UNAME_RELEASE" | sed -e 's/ .*$//'` GUESS=$UNAME_MACHINE-pc-skyos$SKYOS_REL ;; i*86:rdos:*:*) GUESS=$UNAME_MACHINE-pc-rdos ;; i*86:Fiwix:*:*) GUESS=$UNAME_MACHINE-pc-fiwix ;; *:AROS:*:*) GUESS=$UNAME_MACHINE-unknown-aros ;; x86_64:VMkernel:*:*) GUESS=$UNAME_MACHINE-unknown-esx ;; amd64:Isilon\ OneFS:*:*) GUESS=x86_64-unknown-onefs ;; *:Unleashed:*:*) GUESS=$UNAME_MACHINE-unknown-unleashed$UNAME_RELEASE ;; esac # Do we have a guess based on uname results? if test "x$GUESS" != x; then echo "$GUESS" exit fi # No uname command or uname output not recognized. set_cc_for_build cat > "$dummy.c" <<EOF #ifdef _SEQUENT_ #include <sys/types.h> #include <sys/utsname.h> #endif #if defined(ultrix) || defined(_ultrix) || defined(__ultrix) || defined(__ultrix__) #if defined (vax) || defined (__vax) || defined (__vax__) || defined(mips) || defined(__mips) || defined(__mips__) || defined(MIPS) || defined(__MIPS__) #include <signal.h> #if defined(_SIZE_T_) || defined(SIGLOST) #include <sys/utsname.h> #endif #endif #endif main () { #if defined (sony) #if defined (MIPSEB) /* BFD wants "bsd" instead of "newsos". Perhaps BFD should be changed, I don't know.... */ printf ("mips-sony-bsd\n"); exit (0); #else #include <sys/param.h> printf ("m68k-sony-newsos%s\n", #ifdef NEWSOS4 "4" #else "" #endif ); exit (0); #endif #endif #if defined (NeXT) #if !defined (__ARCHITECTURE__) #define __ARCHITECTURE__ "m68k" #endif int version; version=`(hostinfo | sed -n 's/.*NeXT Mach \([0-9]*\).*/\1/p') 2>/dev/null`; if (version < 4) printf ("%s-next-nextstep%d\n", __ARCHITECTURE__, version); else printf ("%s-next-openstep%d\n", __ARCHITECTURE__, version); exit (0); #endif #if defined (MULTIMAX) || defined (n16) #if defined (UMAXV) printf ("ns32k-encore-sysv\n"); exit (0); #else #if defined (CMU) printf ("ns32k-encore-mach\n"); exit (0); #else printf ("ns32k-encore-bsd\n"); exit (0); #endif #endif #endif #if defined (__386BSD__) printf ("i386-pc-bsd\n"); exit (0); #endif #if defined (sequent) #if defined (i386) printf ("i386-sequent-dynix\n"); exit (0); #endif #if defined (ns32000) printf ("ns32k-sequent-dynix\n"); exit (0); #endif #endif #if defined (_SEQUENT_) struct utsname un; uname(&un); if (strncmp(un.version, "V2", 2) == 0) { printf ("i386-sequent-ptx2\n"); exit (0); } if (strncmp(un.version, "V1", 2) == 0) { /* XXX is V1 correct? */ printf ("i386-sequent-ptx1\n"); exit (0); } printf ("i386-sequent-ptx\n"); exit (0); #endif #if defined (vax) #if !defined (ultrix) #include <sys/param.h> #if defined (BSD) #if BSD == 43 printf ("vax-dec-bsd4.3\n"); exit (0); #else #if BSD == 199006 printf ("vax-dec-bsd4.3reno\n"); exit (0); #else printf ("vax-dec-bsd\n"); exit (0); #endif #endif #else printf ("vax-dec-bsd\n"); exit (0); #endif #else #if defined(_SIZE_T_) || defined(SIGLOST) struct utsname un; uname (&un); printf ("vax-dec-ultrix%s\n", un.release); exit (0); #else printf ("vax-dec-ultrix\n"); exit (0); #endif #endif #endif #if defined(ultrix) || defined(_ultrix) || defined(__ultrix) || defined(__ultrix__) #if defined(mips) || defined(__mips) || defined(__mips__) || defined(MIPS) || defined(__MIPS__) #if defined(_SIZE_T_) || defined(SIGLOST) struct utsname *un; uname (&un); printf ("mips-dec-ultrix%s\n", un.release); exit (0); #else printf ("mips-dec-ultrix\n"); exit (0); #endif #endif #endif #if defined (alliant) && defined (i860) printf ("i860-alliant-bsd\n"); exit (0); #endif exit (1); } EOF $CC_FOR_BUILD -o "$dummy" "$dummy.c" 2>/dev/null && SYSTEM_NAME=`"$dummy"` && { echo "$SYSTEM_NAME"; exit; } # Apollos put the system type in the environment. test -d /usr/apollo && { echo "$ISP-apollo-$SYSTYPE"; exit; } echo "$0: unable to guess system type" >&2 case $UNAME_MACHINE:$UNAME_SYSTEM in mips:Linux | mips64:Linux) # If we got here on MIPS GNU/Linux, output extra information. cat >&2 <<EOF NOTE: MIPS GNU/Linux systems require a C compiler to fully recognize the system type. Please install a C compiler and try again. EOF ;; esac cat >&2 <<EOF This script (version $timestamp), has failed to recognize the operating system you are using. If your script is old, overwrite *all* copies of config.guess and config.sub with the latest versions from: https://git.savannah.gnu.org/cgit/config.git/plain/config.guess and https://git.savannah.gnu.org/cgit/config.git/plain/config.sub EOF our_year=`echo $timestamp | sed 's,-.*,,'` thisyear=`date +%Y` # shellcheck disable=SC2003 script_age=`expr "$thisyear" - "$our_year"` if test "$script_age" -lt 3 ; then cat >&2 <<EOF If $0 has already been updated, send the following data and any information you think might be pertinent to config-patches@gnu.org to provide the necessary information to handle your system. config.guess timestamp = $timestamp uname -m = `(uname -m) 2>/dev/null || echo unknown` uname -r = `(uname -r) 2>/dev/null || echo unknown` uname -s = `(uname -s) 2>/dev/null || echo unknown` uname -v = `(uname -v) 2>/dev/null || echo unknown` /usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null` /bin/uname -X = `(/bin/uname -X) 2>/dev/null` hostinfo = `(hostinfo) 2>/dev/null` /bin/universe = `(/bin/universe) 2>/dev/null` /usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null` /bin/arch = `(/bin/arch) 2>/dev/null` /usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null` /usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null` UNAME_MACHINE = "$UNAME_MACHINE" UNAME_RELEASE = "$UNAME_RELEASE" UNAME_SYSTEM = "$UNAME_SYSTEM" UNAME_VERSION = "$UNAME_VERSION" EOF fi exit 1 # Local variables: # eval: (add-hook 'before-save-hook 'time-stamp) # time-stamp-start: "timestamp='" # time-stamp-format: "%:y-%02m-%02d" # time-stamp-end: "'" # End: ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������webdar-1.0.0/configure.ac���������������������������������������������������������������������������0000444�0001750�0001752�00000047604�15045134056�012201� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������######################################################################## # webdar - a web server and interface program to libdar # Copyright (C) 2013-2025 Denis Corbin # # This file is part of Webdar # # Webdar is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # Webdar is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with Webdar. If not, see <http://www.gnu.org/licenses/> # #---- # to contact the author: dar.linux@free.fr ######################################################################## # Process this file with autoconf to produce a configure script. AC_PREREQ([2.71]) AC_INIT([WEBDAR],[1.0.0],[[https://github.com/Edrusb/webdar/issues]]) AC_CONFIG_HEADERS([config.h]) AC_LANG([C++]) AC_CONFIG_SRCDIR([src/webdar.cpp]) AC_DEFINE_UNQUOTED(WEBDAR_VERSION, "AC_PACKAGE_VERSION", [webdar version, definition in configure.ac]) AM_INIT_AUTOMAKE([subdir-objects]) AM_GNU_GETTEXT([external]) AM_GNU_GETTEXT_VERSION XGETTEXT_EXTRA_OPTIONS='--keyword=dar_gettext' AM_ICONV #### # configure checks what is available from the operational system: # - it displays things on output for the user running the configure script has status information # - it sets some shell variable that are not used outside the configuration script # - it sets some shell variable that can be susbstitued in Makefile.in files (see AC_SUBST() and AC_CONFIG_FILES()) # also known as "output variables" # - it defines macros that get stored in config.h and used in source code (see AC_DEFINE()) # # header files: # header files are #included in source code if they HAVE_... macro has been defined in config.h # # libraries: # necessary library flags are stored in the "output variables" LIBS substituable shell variable and passed to Makefile.in # that get substitued in Makefiles.in when the @LIBS@ form is met. # # have a specific variable for pkgconfig, setting the default value: AC_SUBST(pkgconfigdir, [${libdir}/pkgconfig]) AC_ARG_WITH([pkgconfigdir], AS_HELP_STRING(--with-pkgconfigdir=DIR, [defines an alternative directory to install pkconfig files, default is '${libdir}/pkgconfig']), [ if [ ! -z "$withval" ] ; then AC_SUBST(pkgconfigdir, $withval) fi ], [] ) # Checks for programs. AC_PROG_CXX AC_PROG_CC LT_INIT AC_PROG_MAKE_SET AC_PROG_RANLIB AC_MSG_CHECKING([for C++ compiler usability]) AC_COMPILE_IFELSE([AC_LANG_PROGRAM([], [ class test { public: int test; }; ]) ], [ AC_MSG_RESULT(ok) ], [ AC_MSG_ERROR([No C++ compiler found]) ] ) # Defining _XOPEN_SOURCE to get extra field in struct stat AC_DEFINE(_XOPEN_SOURCE, 700, [activates POSIX.1-2008 symbols in order to allow microsecond time setting, as well as ctime_r() call]) # Define _BSD_SOURCE in order to be able to call makedev(), minor() and major() under OpenBSD when _XOPEN_SOURCE is set AC_DEFINE(_BSD_SOURCE, 1, [activate makedev(), major() and minor() when _XOPEN_SOURCE is set]) AC_DEFINE(_DEFAULT_SOURCE, 1, [disabling warning about _BSD_SOURCE to be deprecated]) ########### ## THE FOLLOWING "DEFINE" USED TO RE-ENABLE FULL LIBC FEATURES ON DIFFERENT OPERATING SYSTEMS ## HAVE BEEN BORROWED FROM PYTHON's configure.in ## ## # The later defininition of _XOPEN_SOURCE disables certain features # on Linux, so we need _GNU_SOURCE to re-enable them (makedev, tm_zone). AC_DEFINE(_GNU_SOURCE, 1, [Define on Linux to activate all library features]) # The later defininition of _XOPEN_SOURCE and _POSIX_C_SOURCE disables # certain features on NetBSD, so we need _NETBSD_SOURCE to re-enable # them. AC_DEFINE(_NETBSD_SOURCE, 1, [Define on NetBSD to activate all library features]) # The later defininition of _XOPEN_SOURCE and _POSIX_C_SOURCE disables # certain features on FreeBSD, so we need __BSD_VISIBLE to re-enable # them. AC_DEFINE(__BSD_VISIBLE, 1, [Define on FreeBSD to activate all library features]) # The later defininition of _XOPEN_SOURCE and _POSIX_C_SOURCE disables # certain features on Mac OS X, so we need _DARWIN_C_SOURCE to re-enable # them. AC_DEFINE(_DARWIN_C_SOURCE, 1, [Define on Darwin to activate all library features]) ## ## ########### # Checks for header files. AC_HEADER_DIRENT AC_CHECK_INCLUDES_DEFAULT AC_PROG_EGREP AC_HEADER_SYS_WAIT AC_CHECK_HEADERS([stdio.h stdlib.h syslog.h pthread.h errno.h limits.h sys/types.h sys/stat.h sys/socket.h time.h ctype.h openssl/err.h openssl/ssl.h string.h fnmatch.h netinet/ip.h netinet/in.h arpa/inet.h strings.h unistd.h fcntl.h signal.h sys/capability.h linux/capability.h dar/libdar.hpp libthreadar/libthreadar.hpp nlohmann/json.hpp]) # mandatory headers AC_CHECK_HEADER([openssl/ssl.h], [], [ AC_MSG_ERROR([missing required <openssl/ssl.h> included file]) ]) AC_CHECK_HEADER([dar/libdar.hpp], [], [ AC_MSG_ERROR([missing required <dar/libdar.hpp> included file]) ]) AC_CHECK_HEADER([dar/tools.hpp], [], [ AC_MSG_ERROR([missing required <dar/tools.hpp> included file]) ]) AC_CHECK_HEADER([libthreadar/libthreadar.hpp], [], [ AC_MSG_ERROR([missing required <libthreadar/libthreadar.hpp> included file]) ]) AC_CHECK_HEADER([nlohmann/json.hpp], [], [ AC_MSG_ERROR([missing required <nlohmann/json.hpp> included file]) ]) AC_SYS_LARGEFILE # Checks for typedefs, structures, and compiler characteristics. AC_C_CONST AC_C_INLINE AC_TYPE_OFF_T AC_TYPE_PID_T AC_TYPE_SIZE_T AC_CHECK_MEMBERS([struct stat.st_rdev]) AC_CHECK_TYPE(size_t, [AC_CHECK_SIZEOF(size_t)], [AC_MSG_ERROR([Cannot find size_t type])], []) AC_CHECK_TYPE(time_t, [AC_CHECK_SIZEOF(time_t)], [AC_MSG_ERROR([Cannot find time_t type])], []) AC_CHECK_TYPE(off_t, [AC_CHECK_SIZEOF(off_t)], [AC_MSG_ERROR([Cannot find off_t type])], []) # Checks for library functions. AC_FUNC_FNMATCH AC_FUNC_FORK AC_FUNC_LSTAT AC_HEADER_MAJOR AC_FUNC_MALLOC AC_FUNC_STAT AC_FUNC_UTIME_NULL AC_CHECK_FUNCS([lchown mkdir regcomp rmdir strerror_r utime fdopendir readdir_r ctime_r getgrnam_r getpwnam_r localtime_r]) AC_MSG_CHECKING([for c++14 support]) AC_COMPILE_IFELSE([AC_LANG_PROGRAM([ #include <memory> ], [ thread_local static int test = 0; std::unique_ptr<int> x = std::make_unique<int>(0); ]) ], [ AC_MSG_RESULT(yes) ], [ AC_MSG_RESULT([no]) AC_MSG_CHECKING([for c++14 support with -std=c++14 option set]) CXXSTDFLAGS="-std=c++14" CXXFLAGS="$CXXFLAGS $CXXSTDFLAGS" AC_COMPILE_IFELSE([AC_LANG_PROGRAM([ #include <memory> ], [ thread_local static int test = 0; std::unique_ptr<int> x = std::make_unique<int>(0); ]) ], [ AC_MSG_RESULT(yes) ], [ AC_MSG_RESULT(no) AC_MSG_ERROR([C++ compiler lack support for c++14 standard]) ] ) ]) AC_MSG_CHECKING([for sed -r/-E option]) if sed -r -e 's/(c|o)+/\1/g' > /dev/null < /dev/null ; then local_sed="gnu" AC_MSG_RESULT([GNU sed, using -r option for regex]) else if sed -E -e 's/(c|o)+/\1/g' > /dev/null < /dev/null ; then local_sed="bsd" AC_MSG_RESULT([BSD sed, using -E option for regex]) else local_sed=unknown AC_MSG_ERROR([unknown switch to use with sed to support regex]) fi fi AC_MSG_CHECKING([for Niels Lohmann's Json library for C++]) AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ #include <nlohmann/json.hpp> ]], [[ using nljson = nlohmann::json; nljson j, k; j["one"] = 1; k.push_back("a"); k.push_back("b"); k.push_back("c"); j["two"] = k; ]] ) ], [ AC_MSG_RESULT(Found) ], [ AC_MSG_RESULT([Not Found]) AC_MSG_ERROR([Niels Lohmann's Json library for C++ is missing]) ]) AC_MSG_CHECKING([for getopt() in <unistd.h>]) AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[extern "C" { #if HAVE_UNISTD_H #include <unistd.h> #endif }]], [ getopt(0, 0, 0); ]) ], [ AC_DEFINE(HAVE_GETOPT_IN_UNISTD_H, 1, [a getopt() call is declared in <unistd.h>]) AC_MSG_RESULT(present) ], [AC_MSG_RESULT(absent)]) AC_MSG_CHECKING([for getopt_long() in <unistd.h>]) AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[extern "C" { #if HAVE_UNISTD_H #include <unistd.h> #endif }]], [ getopt_long(0, 0, 0, 0, 0); ]) ], [ AC_DEFINE(HAVE_GETOPT_LONG_IN_UNISTD_H, 1, [a getopt_long() call is declared in <unistd.h>]) AC_MSG_RESULT(present) ], [AC_MSG_RESULT(absent)]) AC_MSG_CHECKING([for optreset presence]) AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[extern "C" { #if HAVE_STDIO_H #include <stdio.h> #endif #if HAVE_GETOPT_H #include <getopt.h> #else #if HAVE_UNISTD_H #include <unistd.h> #endif #endif }]], [ int x = optreset; return 0; ]) ], [ AC_DEFINE(HAVE_OPTRESET, 1, [the optreset external variable exists to reset getopt standard call]) AC_MSG_RESULT(available) ], [AC_MSG_RESULT([not available])]) AC_MSG_CHECKING([for POSIX sys/capability support]) AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[extern "C" { #if HAVE_SYS_CAPABILITY_H #include <sys/capability.h> #else #if HAVE_LINUX_CAPABILITY_H #include <linux/capability.h> #endif #endif #if HAVE_SYS_TYPES_H #include <sys/types.h> #endif }]], [ cap_t capaset = cap_get_proc(); (void)cap_free((void *)capset); ]) ], [ AC_DEFINE(HAVE_CAPABILITIES, 1, [whether the system has support for POSIX.1e capabilities]) AC_MSG_RESULT(available) ], [ AC_MSG_RESULT([not available]) ]) AC_MSG_CHECKING([for strerror_r flavor]) AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[extern "C" { #if HAVE_STRING_H #include <string.h> #endif } // externe "C" ]], [[ char *ptr = strerror_r(0, 0, 0); ]]) ], [ AC_DEFINE(HAVE_STRERROR_R_CHAR_PTR, 1, [strerror_r() returns a char *]) AC_MSG_RESULT([GNU specific]) ], [ AC_MSG_RESULT([XSI compliant]) ]) AC_ARG_ENABLE( [mode], AS_HELP_STRING(--enable-mode=arg, [where arg is either 32, 64 (the default) or "infinint". Makes libdar internally use 32 bits or limitless integers in place of 64 bits integers]), [ build_mode=$enableval if test "$build_mode" != "32" -a "$build_mode" != "64" -a "$build_mode" != "infinint" ; then AC_MSG_ERROR([Invalid argument given to --enable-mode option]) fi ], [build_mode=64]) if test -z "$build_mode" ; then AC_MSG_ERROR([build_mode has not been defined in configure script]) else build_mode_suffix=$build_mode if test "$build_mode" = "infinint" ; then build_mode_suffix="" fi fi AC_ARG_ENABLE( [upx], AS_HELP_STRING(--disable-upx, [by default configure looks for UPX and if available make executables compressed at installation time, you can disable this feature]), [explicit_upx=yes], [enable_upx=yes]) AS_IF( [ test "x$enable_upx" != "xyes" ], [ AC_MSG_NOTICE([ignoring UPX]) upx="no" ], [ AC_CHECK_PROG(upx, upx, [yes], [no], [$PATH]) AS_IF( [ test "x$explicit_upx" = "xyes" -a "$upx" != "yes" ], [ AC_MSG_ERROR([upx is missing]) ] ) ] ) AC_ARG_ENABLE( [build-html], AS_HELP_STRING(--disable-build-html, [don't build programming documentation (in particular libdar API documentation) and html man page]), [explicit_build_html=yes], [enable_build_html=yes]) AS_IF( [ test "x$enable_build_html" != "xyes"], [ AC_MSG_WARN([documentation no built per user request]) doxygen="no" groff="no" ], [ AC_CHECK_PROG(doxygen, doxygen, [yes], [no], [$PATH]) AC_MSG_CHECKING([for doxygen version]) if test "$doxygen" = "yes" ; then n1=`doxygen --version | cut -d '.' -f 1` n2=`doxygen --version | cut -d '.' -f 2` if test $n1 -gt 1 -o $n2 -ge 3 ; then AC_MSG_RESULT([ >= 1.3]) else AC_MSG_RESULT([ too old (< 1.3) ignoring doxygen]) doxygen="no" fi fi AC_CHECK_PROG(dot, dot, [YES], [NO], [$PATH]) # upper case value for dot variable because it goes as is into doxyfile file AC_CHECK_PROG(tmp, man, [yes], [no], [$PATH]) if test "$tmp" = "yes" ; then AC_CHECK_PROG(groff, groff, [yes], [no], [$PATH]) else groff = "no"; fi AS_IF( [ test "x$explicit_build_html" = "xyes" -a \( "$doxygen" != "yes" -o "$groff" != "yes" \) ], [ AC_MSG_ERROR([lacking prerequisit to build documentation]) ] ) ] ) AC_ARG_ENABLE( [dev], AS_HELP_STRING(--enable-dev, [use trivial password for development purposes]), [explicit_dev=yes], [enable_dev=no]) AS_IF( [ test "x$enable_dev" != "xno" ], [ AC_MSG_WARN([WARNING! Using trivial password for development purposes]) AC_DEFINE(WEBDAR_DEV, 1, [trivial passwords for dev purposes]) ], [] # else we just keep silent ) AC_ARG_ENABLE( [webdar-static], AS_HELP_STRING(--enable-webdar-static, [building webdar_static, a webdar statically linked version])) AS_IF( [ test "x$enable_webdar_static" = "xyes" ], [build_static="yes"], [build_static="no"]) PKG_CHECK_MODULES(OPENSSL, openssl, [], []) PKG_CHECK_MODULES(LIBDAR, libdar${build_mode_suffix}, [], [ AC_MSG_ERROR([libdar${build_mod_suffix} was not found or pkg-config is not installed (see also PKG_CONFIG_PATH env variable, if libdar is installed in a non-standard place)]) ] ) PKG_CHECK_MODULES(LIBTHREADAR, libthreadar, [ AC_CHECK_LIB(threadar, [libthreadar_for_autoconf], [], []) ], [ AC_MSG_ERROR([libthreadar was not found or pkg-config is not installed (see also PKG_CONFIG_PATH env variable, if libthreadar is installed in a non-standard place)]) ] ) AC_MSG_CHECKING([Stack setup methods for libthreadar::thread class]) AC_LINK_IFELSE([AC_LANG_PROGRAM( [[ extern "C" { #if HAVE_UNISTD_H #include <unistd.h> #endif } #if HAVE_LIBTHREADAR_LIBTHREADAR_HPP #include <libthreadar/libthreadar.hpp> #endif ]], [ class my_thread: public libthreadar::thread { protected: virtual void inherited_run() override { sleep(10); }; }; my_thread t1; t1.set_stack_size(1024*1024); t1.run(); t1.join(); ]) ], [ AC_DEFINE(LIBTHREADAR_STACK_FEATURE, 1, [libthreadar thread class can set the stack size]) AC_DEFINE(DEFAULT_STACK_SIZE, 8*1024*1024, [macro to set the stack size of class inheriting from libthreadar::thread]) AC_MSG_RESULT(yes) ], [ AC_MSG_RESULT(no) ]) ### specific handling of musl standard library AC_MSG_CHECKING([for standard library]) which_test=`which test` is_musl=`ldd "$which_test" | grep musl | wc -l` if test $is_musl -ne 0 ; then # to ask musl to provide larger stacks for non threads __webdar_stack_size="0x1000000" LDFLAGS="$LDFLAGS -DPT_GNU_STACK=-Wl,-z,stack-size=__webdar_stack_size" AC_MSG_RESULT([musl library detected, increasing thread stack size to $__webdar_stack_size bytes]) else AC_MSG_RESULT([not musl, keeping default thread stack size]) fi # Checks for libraries. # AC_CHECK_LIB(ssl, [SSL_new], [], [AC_MSG_ERROR([Cannot link with libssl library]) ], [ ${OPENSSL_LIBS} ${LIBTHREADAR_LIBS} ${LIBDAR_LIBS} ]) AC_CHECK_LIB(dar${build_mode_suffix}, [for_autoconf], [], [AC_MSG_ERROR([cannot link with libdar library]) ], [ ${OPENSSL_LIBS} ${LIBTHREADAR_LIBS} ${LIBDAR_LIBS} ]) AC_CHECK_LIB(threadar, [for_autoconf], [], [AC_MSG_ERROR([Cannot link with libthreadar library]) ], [ ${OPENSSL_LIBS} ${LIBTHREADAR_LIBS} ${LIBDAR_LIBS} ]) AM_CONDITIONAL([BUILD_WEBDAR_STATIC], [ test $build_static = "yes" ]) AM_CONDITIONAL([BUILD_MODE32], [test "$build_mode" = "32"]) AM_CONDITIONAL([BUILD_MODE64], [test "$build_mode" = "64" -o -z "$build_mode"]) AM_CONDITIONAL([USE_UPX], [test "$upx" = "yes"]) AM_CONDITIONAL([USE_DOXYGEN], [test "$doxygen" = "yes"]) AM_CONDITIONAL([USE_GROFF], [test "$groff" = "yes"]) AM_CONDITIONAL([BSD_SED], [test "$local_sed" = "bsd"]) AC_SUBST([CXXSTDFLAGS], [$CXXSTDFLAGS]) AC_SUBST(UPX_PROG, [upx]) AC_SUBST(DOXYGEN_PROG, [doxygen]) AC_SUBST(HAS_DOT, [$dot]) # defaults AC_PREFIX_DEFAULT(/usr/local) # hack from libtool mailing-list to know from source point of view whether we are compiling for dynamic or static way AC_CONFIG_COMMANDS([hack-libtool], [ sed 's,^pic_flag=,pic_flag=" -D__DYNAMIC__ ",' libtool > libtoolT \ && mv -f libtoolT libtool && chmod 755 libtool ]) AC_CONFIG_FILES([Makefile doc/Makefile src/Makefile misc/Makefile po/Makefile.in]) AC_OUTPUT ����������������������������������������������������������������������������������������������������������������������������webdar-1.0.0/install-sh�����������������������������������������������������������������������������0000755�0001750�0001752�00000035776�14215102164�011721� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh # install - install a program, script, or datafile scriptversion=2020-11-14.01; # UTC # This originates from X11R5 (mit/util/scripts/install.sh), which was # later released in X11R6 (xc/config/util/install.sh) with the # following copyright and license. # # Copyright (C) 1994 X Consortium # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to # deal in the Software without restriction, including without limitation the # rights to use, copy, modify, merge, publish, distribute, sublicense, and/or # sell copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: # # The above copyright notice and this permission notice shall be included in # all copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE # X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN # AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNEC- # TION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. # # Except as contained in this notice, the name of the X Consortium shall not # be used in advertising or otherwise to promote the sale, use or other deal- # ings in this Software without prior written authorization from the X Consor- # tium. # # # FSF changes to this file are in the public domain. # # Calling this script install-sh is preferred over install.sh, to prevent # 'make' implicit rules from creating a file called install from it # when there is no Makefile. # # This script is compatible with the BSD install script, but was written # from scratch. tab=' ' nl=' ' IFS=" $tab$nl" # Set DOITPROG to "echo" to test this script. doit=${DOITPROG-} doit_exec=${doit:-exec} # Put in absolute file names if you don't have them in your path; # or use environment vars. chgrpprog=${CHGRPPROG-chgrp} chmodprog=${CHMODPROG-chmod} chownprog=${CHOWNPROG-chown} cmpprog=${CMPPROG-cmp} cpprog=${CPPROG-cp} mkdirprog=${MKDIRPROG-mkdir} mvprog=${MVPROG-mv} rmprog=${RMPROG-rm} stripprog=${STRIPPROG-strip} posix_mkdir= # Desired mode of installed file. mode=0755 # Create dirs (including intermediate dirs) using mode 755. # This is like GNU 'install' as of coreutils 8.32 (2020). mkdir_umask=22 backupsuffix= chgrpcmd= chmodcmd=$chmodprog chowncmd= mvcmd=$mvprog rmcmd="$rmprog -f" stripcmd= src= dst= dir_arg= dst_arg= copy_on_change=false is_target_a_directory=possibly usage="\ Usage: $0 [OPTION]... [-T] SRCFILE DSTFILE or: $0 [OPTION]... SRCFILES... DIRECTORY or: $0 [OPTION]... -t DIRECTORY SRCFILES... or: $0 [OPTION]... -d DIRECTORIES... In the 1st form, copy SRCFILE to DSTFILE. In the 2nd and 3rd, copy all SRCFILES to DIRECTORY. In the 4th, create DIRECTORIES. Options: --help display this help and exit. --version display version info and exit. -c (ignored) -C install only if different (preserve data modification time) -d create directories instead of installing files. -g GROUP $chgrpprog installed files to GROUP. -m MODE $chmodprog installed files to MODE. -o USER $chownprog installed files to USER. -p pass -p to $cpprog. -s $stripprog installed files. -S SUFFIX attempt to back up existing files, with suffix SUFFIX. -t DIRECTORY install into DIRECTORY. -T report an error if DSTFILE is a directory. Environment variables override the default commands: CHGRPPROG CHMODPROG CHOWNPROG CMPPROG CPPROG MKDIRPROG MVPROG RMPROG STRIPPROG By default, rm is invoked with -f; when overridden with RMPROG, it's up to you to specify -f if you want it. If -S is not specified, no backups are attempted. Email bug reports to bug-automake@gnu.org. Automake home page: https://www.gnu.org/software/automake/ " while test $# -ne 0; do case $1 in -c) ;; -C) copy_on_change=true;; -d) dir_arg=true;; -g) chgrpcmd="$chgrpprog $2" shift;; --help) echo "$usage"; exit $?;; -m) mode=$2 case $mode in *' '* | *"$tab"* | *"$nl"* | *'*'* | *'?'* | *'['*) echo "$0: invalid mode: $mode" >&2 exit 1;; esac shift;; -o) chowncmd="$chownprog $2" shift;; -p) cpprog="$cpprog -p";; -s) stripcmd=$stripprog;; -S) backupsuffix="$2" shift;; -t) is_target_a_directory=always dst_arg=$2 # Protect names problematic for 'test' and other utilities. case $dst_arg in -* | [=\(\)!]) dst_arg=./$dst_arg;; esac shift;; -T) is_target_a_directory=never;; --version) echo "$0 $scriptversion"; exit $?;; --) shift break;; -*) echo "$0: invalid option: $1" >&2 exit 1;; *) break;; esac shift done # We allow the use of options -d and -T together, by making -d # take the precedence; this is for compatibility with GNU install. if test -n "$dir_arg"; then if test -n "$dst_arg"; then echo "$0: target directory not allowed when installing a directory." >&2 exit 1 fi fi if test $# -ne 0 && test -z "$dir_arg$dst_arg"; then # When -d is used, all remaining arguments are directories to create. # When -t is used, the destination is already specified. # Otherwise, the last argument is the destination. Remove it from $@. for arg do if test -n "$dst_arg"; then # $@ is not empty: it contains at least $arg. set fnord "$@" "$dst_arg" shift # fnord fi shift # arg dst_arg=$arg # Protect names problematic for 'test' and other utilities. case $dst_arg in -* | [=\(\)!]) dst_arg=./$dst_arg;; esac done fi if test $# -eq 0; then if test -z "$dir_arg"; then echo "$0: no input file specified." >&2 exit 1 fi # It's OK to call 'install-sh -d' without argument. # This can happen when creating conditional directories. exit 0 fi if test -z "$dir_arg"; then if test $# -gt 1 || test "$is_target_a_directory" = always; then if test ! -d "$dst_arg"; then echo "$0: $dst_arg: Is not a directory." >&2 exit 1 fi fi fi if test -z "$dir_arg"; then do_exit='(exit $ret); exit $ret' trap "ret=129; $do_exit" 1 trap "ret=130; $do_exit" 2 trap "ret=141; $do_exit" 13 trap "ret=143; $do_exit" 15 # Set umask so as not to create temps with too-generous modes. # However, 'strip' requires both read and write access to temps. case $mode in # Optimize common cases. *644) cp_umask=133;; *755) cp_umask=22;; *[0-7]) if test -z "$stripcmd"; then u_plus_rw= else u_plus_rw='% 200' fi cp_umask=`expr '(' 777 - $mode % 1000 ')' $u_plus_rw`;; *) if test -z "$stripcmd"; then u_plus_rw= else u_plus_rw=,u+rw fi cp_umask=$mode$u_plus_rw;; esac fi for src do # Protect names problematic for 'test' and other utilities. case $src in -* | [=\(\)!]) src=./$src;; esac if test -n "$dir_arg"; then dst=$src dstdir=$dst test -d "$dstdir" dstdir_status=$? # Don't chown directories that already exist. if test $dstdir_status = 0; then chowncmd="" fi else # Waiting for this to be detected by the "$cpprog $src $dsttmp" command # might cause directories to be created, which would be especially bad # if $src (and thus $dsttmp) contains '*'. if test ! -f "$src" && test ! -d "$src"; then echo "$0: $src does not exist." >&2 exit 1 fi if test -z "$dst_arg"; then echo "$0: no destination specified." >&2 exit 1 fi dst=$dst_arg # If destination is a directory, append the input filename. if test -d "$dst"; then if test "$is_target_a_directory" = never; then echo "$0: $dst_arg: Is a directory" >&2 exit 1 fi dstdir=$dst dstbase=`basename "$src"` case $dst in */) dst=$dst$dstbase;; *) dst=$dst/$dstbase;; esac dstdir_status=0 else dstdir=`dirname "$dst"` test -d "$dstdir" dstdir_status=$? fi fi case $dstdir in */) dstdirslash=$dstdir;; *) dstdirslash=$dstdir/;; esac obsolete_mkdir_used=false if test $dstdir_status != 0; then case $posix_mkdir in '') # With -d, create the new directory with the user-specified mode. # Otherwise, rely on $mkdir_umask. if test -n "$dir_arg"; then mkdir_mode=-m$mode else mkdir_mode= fi posix_mkdir=false # The $RANDOM variable is not portable (e.g., dash). Use it # here however when possible just to lower collision chance. tmpdir=${TMPDIR-/tmp}/ins$RANDOM-$$ trap ' ret=$? rmdir "$tmpdir/a/b" "$tmpdir/a" "$tmpdir" 2>/dev/null exit $ret ' 0 # Because "mkdir -p" follows existing symlinks and we likely work # directly in world-writeable /tmp, make sure that the '$tmpdir' # directory is successfully created first before we actually test # 'mkdir -p'. if (umask $mkdir_umask && $mkdirprog $mkdir_mode "$tmpdir" && exec $mkdirprog $mkdir_mode -p -- "$tmpdir/a/b") >/dev/null 2>&1 then if test -z "$dir_arg" || { # Check for POSIX incompatibilities with -m. # HP-UX 11.23 and IRIX 6.5 mkdir -m -p sets group- or # other-writable bit of parent directory when it shouldn't. # FreeBSD 6.1 mkdir -m -p sets mode of existing directory. test_tmpdir="$tmpdir/a" ls_ld_tmpdir=`ls -ld "$test_tmpdir"` case $ls_ld_tmpdir in d????-?r-*) different_mode=700;; d????-?--*) different_mode=755;; *) false;; esac && $mkdirprog -m$different_mode -p -- "$test_tmpdir" && { ls_ld_tmpdir_1=`ls -ld "$test_tmpdir"` test "$ls_ld_tmpdir" = "$ls_ld_tmpdir_1" } } then posix_mkdir=: fi rmdir "$tmpdir/a/b" "$tmpdir/a" "$tmpdir" else # Remove any dirs left behind by ancient mkdir implementations. rmdir ./$mkdir_mode ./-p ./-- "$tmpdir" 2>/dev/null fi trap '' 0;; esac if $posix_mkdir && ( umask $mkdir_umask && $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir" ) then : else # mkdir does not conform to POSIX, # or it failed possibly due to a race condition. Create the # directory the slow way, step by step, checking for races as we go. case $dstdir in /*) prefix='/';; [-=\(\)!]*) prefix='./';; *) prefix='';; esac oIFS=$IFS IFS=/ set -f set fnord $dstdir shift set +f IFS=$oIFS prefixes= for d do test X"$d" = X && continue prefix=$prefix$d if test -d "$prefix"; then prefixes= else if $posix_mkdir; then (umask $mkdir_umask && $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir") && break # Don't fail if two instances are running concurrently. test -d "$prefix" || exit 1 else case $prefix in *\'*) qprefix=`echo "$prefix" | sed "s/'/'\\\\\\\\''/g"`;; *) qprefix=$prefix;; esac prefixes="$prefixes '$qprefix'" fi fi prefix=$prefix/ done if test -n "$prefixes"; then # Don't fail if two instances are running concurrently. (umask $mkdir_umask && eval "\$doit_exec \$mkdirprog $prefixes") || test -d "$dstdir" || exit 1 obsolete_mkdir_used=true fi fi fi if test -n "$dir_arg"; then { test -z "$chowncmd" || $doit $chowncmd "$dst"; } && { test -z "$chgrpcmd" || $doit $chgrpcmd "$dst"; } && { test "$obsolete_mkdir_used$chowncmd$chgrpcmd" = false || test -z "$chmodcmd" || $doit $chmodcmd $mode "$dst"; } || exit 1 else # Make a couple of temp file names in the proper directory. dsttmp=${dstdirslash}_inst.$$_ rmtmp=${dstdirslash}_rm.$$_ # Trap to clean up those temp files at exit. trap 'ret=$?; rm -f "$dsttmp" "$rmtmp" && exit $ret' 0 # Copy the file name to the temp name. (umask $cp_umask && { test -z "$stripcmd" || { # Create $dsttmp read-write so that cp doesn't create it read-only, # which would cause strip to fail. if test -z "$doit"; then : >"$dsttmp" # No need to fork-exec 'touch'. else $doit touch "$dsttmp" fi } } && $doit_exec $cpprog "$src" "$dsttmp") && # and set any options; do chmod last to preserve setuid bits. # # If any of these fail, we abort the whole thing. If we want to # ignore errors from any of these, just make sure not to ignore # errors from the above "$doit $cpprog $src $dsttmp" command. # { test -z "$chowncmd" || $doit $chowncmd "$dsttmp"; } && { test -z "$chgrpcmd" || $doit $chgrpcmd "$dsttmp"; } && { test -z "$stripcmd" || $doit $stripcmd "$dsttmp"; } && { test -z "$chmodcmd" || $doit $chmodcmd $mode "$dsttmp"; } && # If -C, don't bother to copy if it wouldn't change the file. if $copy_on_change && old=`LC_ALL=C ls -dlL "$dst" 2>/dev/null` && new=`LC_ALL=C ls -dlL "$dsttmp" 2>/dev/null` && set -f && set X $old && old=:$2:$4:$5:$6 && set X $new && new=:$2:$4:$5:$6 && set +f && test "$old" = "$new" && $cmpprog "$dst" "$dsttmp" >/dev/null 2>&1 then rm -f "$dsttmp" else # If $backupsuffix is set, and the file being installed # already exists, attempt a backup. Don't worry if it fails, # e.g., if mv doesn't support -f. if test -n "$backupsuffix" && test -f "$dst"; then $doit $mvcmd -f "$dst" "$dst$backupsuffix" 2>/dev/null fi # Rename the file to the real destination. $doit $mvcmd -f "$dsttmp" "$dst" 2>/dev/null || # The rename failed, perhaps because mv can't rename something else # to itself, or perhaps because mv is so ancient that it does not # support -f. { # Now remove or move aside any old file at destination location. # We try this two ways since rm can't unlink itself on some # systems and the destination file might be busy for other # reasons. In this case, the final cleanup might fail but the new # file should still install successfully. { test ! -f "$dst" || $doit $rmcmd "$dst" 2>/dev/null || { $doit $mvcmd -f "$dst" "$rmtmp" 2>/dev/null && { $doit $rmcmd "$rmtmp" 2>/dev/null; :; } } || { echo "$0: cannot unlink or rename $dst" >&2 (exit 1); exit 1 } } && # Now rename the file to the real destination. $doit $mvcmd "$dsttmp" "$dst" } fi || exit 1 trap '' 0 fi done # Local variables: # eval: (add-hook 'before-save-hook 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-time-zone: "UTC0" # time-stamp-end: "; # UTC" # End: ��webdar-1.0.0/po/������������������������������������������������������������������������������������0000755�0001750�0001752�00000000000�15045134256�010402� 5����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������webdar-1.0.0/po/webdar.pot��������������������������������������������������������������������������0000644�0001750�0001752�00000001447�15045134256�012320� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR Free Software Foundation, Inc. # This file is distributed under the same license as the webdar package. # FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. # #, fuzzy msgid "" msgstr "" "Project-Id-Version: webdar 1.0.0\n" "Report-Msgid-Bugs-To: https://github.com/Edrusb/webdar/issues\n" "POT-Creation-Date: 2025-08-07 16:31+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Language-Team: LANGUAGE <LL@li.org>\n" "Language: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=CHARSET\n" "Content-Transfer-Encoding: 8bit\n" #: src/html_version.cpp:40 msgid "YES" msgstr "" #: src/html_version.cpp:40 msgid "NO" msgstr "" #: src/webdar.cpp:817 #, c-format msgid " compiled the %s with %s version %s\n" msgstr "" �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������webdar-1.0.0/po/stamp-po����������������������������������������������������������������������������0000644�0001750�0001752�00000000012�15045134256�011776� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������timestamp ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������webdar-1.0.0/po/Rules-quot��������������������������������������������������������������������������0000644�0001750�0001752�00000004533�15045134055�012327� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Special Makefile rules for English message catalogs with quotation marks. # # Copyright (C) 2001-2017 Free Software Foundation, Inc. # This file, Rules-quot, and its auxiliary files (listed under # DISTFILES.common.extra1) are free software; the Free Software Foundation # gives unlimited permission to use, copy, distribute, and modify them. DISTFILES.common.extra1 = quot.sed boldquot.sed en@quot.header en@boldquot.header insert-header.sin Rules-quot .SUFFIXES: .insert-header .po-update-en en@quot.po-create: $(MAKE) en@quot.po-update en@boldquot.po-create: $(MAKE) en@boldquot.po-update en@quot.po-update: en@quot.po-update-en en@boldquot.po-update: en@boldquot.po-update-en .insert-header.po-update-en: @lang=`echo $@ | sed -e 's/\.po-update-en$$//'`; \ if test "$(PACKAGE)" = "gettext-tools" && test "$(CROSS_COMPILING)" != "yes"; then PATH=`pwd`/../src:$$PATH; GETTEXTLIBDIR=`cd $(top_srcdir)/src && pwd`; export GETTEXTLIBDIR; fi; \ tmpdir=`pwd`; \ echo "$$lang:"; \ ll=`echo $$lang | sed -e 's/@.*//'`; \ LC_ALL=C; export LC_ALL; \ cd $(srcdir); \ if $(MSGINIT) $(MSGINIT_OPTIONS) -i $(DOMAIN).pot --no-translator -l $$lang -o - 2>/dev/null \ | $(SED) -f $$tmpdir/$$lang.insert-header | $(MSGCONV) -t UTF-8 | \ { case `$(MSGFILTER) --version | sed 1q | sed -e 's,^[^0-9]*,,'` in \ '' | 0.[0-9] | 0.[0-9].* | 0.1[0-8] | 0.1[0-8].*) \ $(MSGFILTER) $(SED) -f `echo $$lang | sed -e 's/.*@//'`.sed \ ;; \ *) \ $(MSGFILTER) `echo $$lang | sed -e 's/.*@//'` \ ;; \ esac } 2>/dev/null > $$tmpdir/$$lang.new.po \ ; then \ if cmp $$lang.po $$tmpdir/$$lang.new.po >/dev/null 2>&1; then \ rm -f $$tmpdir/$$lang.new.po; \ else \ if mv -f $$tmpdir/$$lang.new.po $$lang.po; then \ :; \ else \ echo "creation of $$lang.po failed: cannot move $$tmpdir/$$lang.new.po to $$lang.po" 1>&2; \ exit 1; \ fi; \ fi; \ else \ echo "creation of $$lang.po failed!" 1>&2; \ rm -f $$tmpdir/$$lang.new.po; \ fi en@quot.insert-header: insert-header.sin sed -e '/^#/d' -e 's/HEADER/en@quot.header/g' $(srcdir)/insert-header.sin > en@quot.insert-header en@boldquot.insert-header: insert-header.sin sed -e '/^#/d' -e 's/HEADER/en@boldquot.header/g' $(srcdir)/insert-header.sin > en@boldquot.insert-header mostlyclean: mostlyclean-quot mostlyclean-quot: rm -f *.insert-header ���������������������������������������������������������������������������������������������������������������������������������������������������������������������webdar-1.0.0/po/boldquot.sed������������������������������������������������������������������������0000644�0001750�0001752�00000000331�15045134055�012642� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������s/"\([^"]*\)"/“\1â€/g s/`\([^`']*\)'/‘\1’/g s/ '\([^`']*\)' / ‘\1’ /g s/ '\([^`']*\)'$/ ‘\1’/g s/^'\([^`']*\)' /‘\1’ /g s/“â€/""/g s/“/“/g s/â€/â€/g s/‘/‘/g s/’/’/g �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������webdar-1.0.0/po/Makefile.in.in����������������������������������������������������������������������0000644�0001750�0001752�00000046163�15045134055�013003� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Makefile for PO directory in any package using GNU gettext. # Copyright (C) 1995-2000 Ulrich Drepper <drepper@gnu.ai.mit.edu> # Copyright (C) 2000-2020 Free Software Foundation, Inc. # # Copying and distribution of this file, with or without modification, # are permitted in any medium without royalty provided the copyright # notice and this notice are preserved. This file is offered as-is, # without any warranty. # # Origin: gettext-0.21 GETTEXT_MACRO_VERSION = 0.20 PACKAGE = @PACKAGE@ VERSION = @VERSION@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ SED = @SED@ SHELL = /bin/sh @SET_MAKE@ srcdir = @srcdir@ top_srcdir = @top_srcdir@ VPATH = @srcdir@ prefix = @prefix@ exec_prefix = @exec_prefix@ datarootdir = @datarootdir@ datadir = @datadir@ localedir = @localedir@ gettextsrcdir = $(datadir)/gettext/po INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ # We use $(mkdir_p). # In automake <= 1.9.x, $(mkdir_p) is defined either as "mkdir -p --" or as # "$(mkinstalldirs)" or as "$(install_sh) -d". For these automake versions, # @install_sh@ does not start with $(SHELL), so we add it. # In automake >= 1.10, @mkdir_p@ is derived from ${MKDIR_P}, which is defined # either as "/path/to/mkdir -p" or ".../install-sh -c -d". For these automake # versions, $(mkinstalldirs) and $(install_sh) are unused. mkinstalldirs = $(SHELL) @install_sh@ -d install_sh = $(SHELL) @install_sh@ MKDIR_P = @MKDIR_P@ mkdir_p = @mkdir_p@ # When building gettext-tools, we prefer to use the built programs # rather than installed programs. However, we can't do that when we # are cross compiling. CROSS_COMPILING = @CROSS_COMPILING@ GMSGFMT_ = @GMSGFMT@ GMSGFMT_no = @GMSGFMT@ GMSGFMT_yes = @GMSGFMT_015@ GMSGFMT = $(GMSGFMT_$(USE_MSGCTXT)) XGETTEXT_ = @XGETTEXT@ XGETTEXT_no = @XGETTEXT@ XGETTEXT_yes = @XGETTEXT_015@ XGETTEXT = $(XGETTEXT_$(USE_MSGCTXT)) MSGMERGE = @MSGMERGE@ MSGMERGE_UPDATE = @MSGMERGE@ --update MSGMERGE_FOR_MSGFMT_OPTION = @MSGMERGE_FOR_MSGFMT_OPTION@ MSGINIT = msginit MSGCONV = msgconv MSGFILTER = msgfilter POFILES = @POFILES@ GMOFILES = @GMOFILES@ UPDATEPOFILES = @UPDATEPOFILES@ DUMMYPOFILES = @DUMMYPOFILES@ DISTFILES.common = Makefile.in.in remove-potcdate.sin \ $(DISTFILES.common.extra1) $(DISTFILES.common.extra2) $(DISTFILES.common.extra3) DISTFILES = $(DISTFILES.common) Makevars POTFILES.in \ $(POFILES) $(GMOFILES) \ $(DISTFILES.extra1) $(DISTFILES.extra2) $(DISTFILES.extra3) POTFILES = \ CATALOGS = @CATALOGS@ POFILESDEPS_ = $(srcdir)/$(DOMAIN).pot POFILESDEPS_yes = $(POFILESDEPS_) POFILESDEPS_no = POFILESDEPS = $(POFILESDEPS_$(PO_DEPENDS_ON_POT)) DISTFILESDEPS_ = update-po DISTFILESDEPS_yes = $(DISTFILESDEPS_) DISTFILESDEPS_no = DISTFILESDEPS = $(DISTFILESDEPS_$(DIST_DEPENDS_ON_UPDATE_PO)) # Makevars gets inserted here. (Don't remove this line!) all: all-@USE_NLS@ .SUFFIXES: .SUFFIXES: .po .gmo .sed .sin .nop .po-create .po-update # The .pot file, stamp-po, .po files, and .gmo files appear in release tarballs. # The GNU Coding Standards say in # <https://www.gnu.org/prep/standards/html_node/Makefile-Basics.html>: # "GNU distributions usually contain some files which are not source files # ... . Since these files normally appear in the source directory, they # should always appear in the source directory, not in the build directory. # So Makefile rules to update them should put the updated files in the # source directory." # Therefore we put these files in the source directory, not the build directory. # During .po -> .gmo conversion, take into account the most recent changes to # the .pot file. This eliminates the need to update the .po files when the # .pot file has changed, which would be troublesome if the .po files are put # under version control. $(GMOFILES): $(srcdir)/$(DOMAIN).pot .po.gmo: @lang=`echo $* | sed -e 's,.*/,,'`; \ test "$(srcdir)" = . && cdcmd="" || cdcmd="cd $(srcdir) && "; \ echo "$${cdcmd}rm -f $${lang}.gmo && $(MSGMERGE) $(MSGMERGE_FOR_MSGFMT_OPTION) -o $${lang}.1po $${lang}.po $(DOMAIN).pot && $(GMSGFMT) -c --statistics --verbose -o $${lang}.gmo $${lang}.1po && rm -f $${lang}.1po"; \ cd $(srcdir) && \ rm -f $${lang}.gmo && \ $(MSGMERGE) $(MSGMERGE_FOR_MSGFMT_OPTION) -o $${lang}.1po $${lang}.po $(DOMAIN).pot && \ $(GMSGFMT) -c --statistics --verbose -o t-$${lang}.gmo $${lang}.1po && \ mv t-$${lang}.gmo $${lang}.gmo && \ rm -f $${lang}.1po .sin.sed: sed -e '/^#/d' $< > t-$@ mv t-$@ $@ all-yes: $(srcdir)/stamp-po all-no: # Ensure that the gettext macros and this Makefile.in.in are in sync. CHECK_MACRO_VERSION = \ test "$(GETTEXT_MACRO_VERSION)" = "@GETTEXT_MACRO_VERSION@" \ || { echo "*** error: gettext infrastructure mismatch: using a Makefile.in.in from gettext version $(GETTEXT_MACRO_VERSION) but the autoconf macros are from gettext version @GETTEXT_MACRO_VERSION@" 1>&2; \ exit 1; \ } # $(srcdir)/$(DOMAIN).pot is only created when needed. When xgettext finds no # internationalized messages, no $(srcdir)/$(DOMAIN).pot is created (because # we don't want to bother translators with empty POT files). We assume that # LINGUAS is empty in this case, i.e. $(POFILES) and $(GMOFILES) are empty. # In this case, $(srcdir)/stamp-po is a nop (i.e. a phony target). # $(srcdir)/stamp-po is a timestamp denoting the last time at which the CATALOGS # have been loosely updated. Its purpose is that when a developer or translator # checks out the package from a version control system, and the $(DOMAIN).pot # file is not under version control, "make" will update the $(DOMAIN).pot and # the $(CATALOGS), but subsequent invocations of "make" will do nothing. This # timestamp would not be necessary if updating the $(CATALOGS) would always # touch them; however, the rule for $(POFILES) has been designed to not touch # files that don't need to be changed. $(srcdir)/stamp-po: $(srcdir)/$(DOMAIN).pot @$(CHECK_MACRO_VERSION) test ! -f $(srcdir)/$(DOMAIN).pot || \ test -z "$(GMOFILES)" || $(MAKE) $(GMOFILES) @test ! -f $(srcdir)/$(DOMAIN).pot || { \ echo "touch $(srcdir)/stamp-po" && \ echo timestamp > $(srcdir)/stamp-poT && \ mv $(srcdir)/stamp-poT $(srcdir)/stamp-po; \ } # Note: Target 'all' must not depend on target '$(DOMAIN).pot-update', # otherwise packages like GCC can not be built if only parts of the source # have been downloaded. # This target rebuilds $(DOMAIN).pot; it is an expensive operation. # Note that $(DOMAIN).pot is not touched if it doesn't need to be changed. # The determination of whether the package xyz is a GNU one is based on the # heuristic whether some file in the top level directory mentions "GNU xyz". # If GNU 'find' is available, we avoid grepping through monster files. $(DOMAIN).pot-update: $(POTFILES) $(srcdir)/POTFILES.in remove-potcdate.sed package_gnu="$(PACKAGE_GNU)"; \ test -n "$$package_gnu" || { \ if { if (LC_ALL=C find --version) 2>/dev/null | grep GNU >/dev/null; then \ LC_ALL=C find -L $(top_srcdir) -maxdepth 1 -type f -size -10000000c -exec grep -i 'GNU @PACKAGE@' /dev/null '{}' ';' 2>/dev/null; \ else \ LC_ALL=C grep -i 'GNU @PACKAGE@' $(top_srcdir)/* 2>/dev/null; \ fi; \ } | grep -v 'libtool:' >/dev/null; then \ package_gnu=yes; \ else \ package_gnu=no; \ fi; \ }; \ if test "$$package_gnu" = "yes"; then \ package_prefix='GNU '; \ else \ package_prefix=''; \ fi; \ if test -n '$(MSGID_BUGS_ADDRESS)' || test '$(PACKAGE_BUGREPORT)' = '@'PACKAGE_BUGREPORT'@'; then \ msgid_bugs_address='$(MSGID_BUGS_ADDRESS)'; \ else \ msgid_bugs_address='$(PACKAGE_BUGREPORT)'; \ fi; \ case `$(XGETTEXT) --version | sed 1q | sed -e 's,^[^0-9]*,,'` in \ '' | 0.[0-9] | 0.[0-9].* | 0.1[0-5] | 0.1[0-5].* | 0.16 | 0.16.[0-1]*) \ $(XGETTEXT) --default-domain=$(DOMAIN) --directory=$(top_srcdir) \ --add-comments=TRANSLATORS: \ --files-from=$(srcdir)/POTFILES.in \ --copyright-holder='$(COPYRIGHT_HOLDER)' \ --msgid-bugs-address="$$msgid_bugs_address" \ $(XGETTEXT_OPTIONS) @XGETTEXT_EXTRA_OPTIONS@ \ ;; \ *) \ $(XGETTEXT) --default-domain=$(DOMAIN) --directory=$(top_srcdir) \ --add-comments=TRANSLATORS: \ --files-from=$(srcdir)/POTFILES.in \ --copyright-holder='$(COPYRIGHT_HOLDER)' \ --package-name="$${package_prefix}@PACKAGE@" \ --package-version='@VERSION@' \ --msgid-bugs-address="$$msgid_bugs_address" \ $(XGETTEXT_OPTIONS) @XGETTEXT_EXTRA_OPTIONS@ \ ;; \ esac test ! -f $(DOMAIN).po || { \ if test -f $(srcdir)/$(DOMAIN).pot-header; then \ sed -e '1,/^#$$/d' < $(DOMAIN).po > $(DOMAIN).1po && \ cat $(srcdir)/$(DOMAIN).pot-header $(DOMAIN).1po > $(DOMAIN).po && \ rm -f $(DOMAIN).1po \ || exit 1; \ fi; \ if test -f $(srcdir)/$(DOMAIN).pot; then \ sed -f remove-potcdate.sed < $(srcdir)/$(DOMAIN).pot > $(DOMAIN).1po && \ sed -f remove-potcdate.sed < $(DOMAIN).po > $(DOMAIN).2po && \ if cmp $(DOMAIN).1po $(DOMAIN).2po >/dev/null 2>&1; then \ rm -f $(DOMAIN).1po $(DOMAIN).2po $(DOMAIN).po; \ else \ rm -f $(DOMAIN).1po $(DOMAIN).2po $(srcdir)/$(DOMAIN).pot && \ mv $(DOMAIN).po $(srcdir)/$(DOMAIN).pot; \ fi; \ else \ mv $(DOMAIN).po $(srcdir)/$(DOMAIN).pot; \ fi; \ } # This rule has no dependencies: we don't need to update $(DOMAIN).pot at # every "make" invocation, only create it when it is missing. # Only "make $(DOMAIN).pot-update" or "make dist" will force an update. $(srcdir)/$(DOMAIN).pot: $(MAKE) $(DOMAIN).pot-update # This target rebuilds a PO file if $(DOMAIN).pot has changed. # Note that a PO file is not touched if it doesn't need to be changed. $(POFILES): $(POFILESDEPS) @test -f $(srcdir)/$(DOMAIN).pot || $(MAKE) $(srcdir)/$(DOMAIN).pot @lang=`echo $@ | sed -e 's,.*/,,' -e 's/\.po$$//'`; \ if test -f "$(srcdir)/$${lang}.po"; then \ test "$(srcdir)" = . && cdcmd="" || cdcmd="cd $(srcdir) && "; \ echo "$${cdcmd}$(MSGMERGE_UPDATE) $(MSGMERGE_OPTIONS) --lang=$${lang} --previous $${lang}.po $(DOMAIN).pot"; \ cd $(srcdir) \ && { case `$(MSGMERGE_UPDATE) --version | sed 1q | sed -e 's,^[^0-9]*,,'` in \ '' | 0.[0-9] | 0.[0-9].* | 0.1[0-5] | 0.1[0-5].*) \ $(MSGMERGE_UPDATE) $(MSGMERGE_OPTIONS) $${lang}.po $(DOMAIN).pot;; \ 0.1[6-7] | 0.1[6-7].*) \ $(MSGMERGE_UPDATE) $(MSGMERGE_OPTIONS) --previous $${lang}.po $(DOMAIN).pot;; \ *) \ $(MSGMERGE_UPDATE) $(MSGMERGE_OPTIONS) --lang=$${lang} --previous $${lang}.po $(DOMAIN).pot;; \ esac; \ }; \ else \ $(MAKE) $${lang}.po-create; \ fi install: install-exec install-data install-exec: install-data: install-data-@USE_NLS@ if test "$(PACKAGE)" = "gettext-tools"; then \ $(mkdir_p) $(DESTDIR)$(gettextsrcdir); \ for file in $(DISTFILES.common) Makevars.template; do \ $(INSTALL_DATA) $(srcdir)/$$file \ $(DESTDIR)$(gettextsrcdir)/$$file; \ done; \ for file in Makevars; do \ rm -f $(DESTDIR)$(gettextsrcdir)/$$file; \ done; \ else \ : ; \ fi install-data-no: all install-data-yes: all @catalogs='$(CATALOGS)'; \ for cat in $$catalogs; do \ cat=`basename $$cat`; \ lang=`echo $$cat | sed -e 's/\.gmo$$//'`; \ dir=$(localedir)/$$lang/LC_MESSAGES; \ $(mkdir_p) $(DESTDIR)$$dir; \ if test -r $$cat; then realcat=$$cat; else realcat=$(srcdir)/$$cat; fi; \ $(INSTALL_DATA) $$realcat $(DESTDIR)$$dir/$(DOMAIN).mo; \ echo "installing $$realcat as $(DESTDIR)$$dir/$(DOMAIN).mo"; \ for lc in '' $(EXTRA_LOCALE_CATEGORIES); do \ if test -n "$$lc"; then \ if (cd $(DESTDIR)$(localedir)/$$lang && LC_ALL=C ls -l -d $$lc 2>/dev/null) | grep ' -> ' >/dev/null; then \ link=`cd $(DESTDIR)$(localedir)/$$lang && LC_ALL=C ls -l -d $$lc | sed -e 's/^.* -> //'`; \ mv $(DESTDIR)$(localedir)/$$lang/$$lc $(DESTDIR)$(localedir)/$$lang/$$lc.old; \ mkdir $(DESTDIR)$(localedir)/$$lang/$$lc; \ (cd $(DESTDIR)$(localedir)/$$lang/$$lc.old && \ for file in *; do \ if test -f $$file; then \ ln -s ../$$link/$$file $(DESTDIR)$(localedir)/$$lang/$$lc/$$file; \ fi; \ done); \ rm -f $(DESTDIR)$(localedir)/$$lang/$$lc.old; \ else \ if test -d $(DESTDIR)$(localedir)/$$lang/$$lc; then \ :; \ else \ rm -f $(DESTDIR)$(localedir)/$$lang/$$lc; \ mkdir $(DESTDIR)$(localedir)/$$lang/$$lc; \ fi; \ fi; \ rm -f $(DESTDIR)$(localedir)/$$lang/$$lc/$(DOMAIN).mo; \ ln -s ../LC_MESSAGES/$(DOMAIN).mo $(DESTDIR)$(localedir)/$$lang/$$lc/$(DOMAIN).mo 2>/dev/null || \ ln $(DESTDIR)$(localedir)/$$lang/LC_MESSAGES/$(DOMAIN).mo $(DESTDIR)$(localedir)/$$lang/$$lc/$(DOMAIN).mo 2>/dev/null || \ cp -p $(DESTDIR)$(localedir)/$$lang/LC_MESSAGES/$(DOMAIN).mo $(DESTDIR)$(localedir)/$$lang/$$lc/$(DOMAIN).mo; \ echo "installing $$realcat link as $(DESTDIR)$(localedir)/$$lang/$$lc/$(DOMAIN).mo"; \ fi; \ done; \ done install-strip: install installdirs: installdirs-exec installdirs-data installdirs-exec: installdirs-data: installdirs-data-@USE_NLS@ if test "$(PACKAGE)" = "gettext-tools"; then \ $(mkdir_p) $(DESTDIR)$(gettextsrcdir); \ else \ : ; \ fi installdirs-data-no: installdirs-data-yes: @catalogs='$(CATALOGS)'; \ for cat in $$catalogs; do \ cat=`basename $$cat`; \ lang=`echo $$cat | sed -e 's/\.gmo$$//'`; \ dir=$(localedir)/$$lang/LC_MESSAGES; \ $(mkdir_p) $(DESTDIR)$$dir; \ for lc in '' $(EXTRA_LOCALE_CATEGORIES); do \ if test -n "$$lc"; then \ if (cd $(DESTDIR)$(localedir)/$$lang && LC_ALL=C ls -l -d $$lc 2>/dev/null) | grep ' -> ' >/dev/null; then \ link=`cd $(DESTDIR)$(localedir)/$$lang && LC_ALL=C ls -l -d $$lc | sed -e 's/^.* -> //'`; \ mv $(DESTDIR)$(localedir)/$$lang/$$lc $(DESTDIR)$(localedir)/$$lang/$$lc.old; \ mkdir $(DESTDIR)$(localedir)/$$lang/$$lc; \ (cd $(DESTDIR)$(localedir)/$$lang/$$lc.old && \ for file in *; do \ if test -f $$file; then \ ln -s ../$$link/$$file $(DESTDIR)$(localedir)/$$lang/$$lc/$$file; \ fi; \ done); \ rm -f $(DESTDIR)$(localedir)/$$lang/$$lc.old; \ else \ if test -d $(DESTDIR)$(localedir)/$$lang/$$lc; then \ :; \ else \ rm -f $(DESTDIR)$(localedir)/$$lang/$$lc; \ mkdir $(DESTDIR)$(localedir)/$$lang/$$lc; \ fi; \ fi; \ fi; \ done; \ done # Define this as empty until I found a useful application. installcheck: uninstall: uninstall-exec uninstall-data uninstall-exec: uninstall-data: uninstall-data-@USE_NLS@ if test "$(PACKAGE)" = "gettext-tools"; then \ for file in $(DISTFILES.common) Makevars.template; do \ rm -f $(DESTDIR)$(gettextsrcdir)/$$file; \ done; \ else \ : ; \ fi uninstall-data-no: uninstall-data-yes: catalogs='$(CATALOGS)'; \ for cat in $$catalogs; do \ cat=`basename $$cat`; \ lang=`echo $$cat | sed -e 's/\.gmo$$//'`; \ for lc in LC_MESSAGES $(EXTRA_LOCALE_CATEGORIES); do \ rm -f $(DESTDIR)$(localedir)/$$lang/$$lc/$(DOMAIN).mo; \ done; \ done check: all info dvi ps pdf html tags TAGS ctags CTAGS ID: install-dvi install-ps install-pdf install-html: mostlyclean: rm -f remove-potcdate.sed rm -f $(srcdir)/stamp-poT rm -f core core.* $(DOMAIN).po $(DOMAIN).1po $(DOMAIN).2po *.new.po rm -fr *.o clean: mostlyclean distclean: clean rm -f Makefile Makefile.in POTFILES maintainer-clean: distclean @echo "This command is intended for maintainers to use;" @echo "it deletes files that may require special tools to rebuild." rm -f $(srcdir)/$(DOMAIN).pot $(srcdir)/stamp-po $(GMOFILES) distdir = $(top_builddir)/$(PACKAGE)-$(VERSION)/$(subdir) dist distdir: test -z "$(DISTFILESDEPS)" || $(MAKE) $(DISTFILESDEPS) @$(MAKE) dist2 # This is a separate target because 'update-po' must be executed before. dist2: $(srcdir)/stamp-po $(DISTFILES) @dists="$(DISTFILES)"; \ if test "$(PACKAGE)" = "gettext-tools"; then \ dists="$$dists Makevars.template"; \ fi; \ if test -f $(srcdir)/$(DOMAIN).pot; then \ dists="$$dists $(DOMAIN).pot stamp-po"; \ else \ case $(XGETTEXT) in \ :) echo "Warning: Creating a tarball without '$(DOMAIN).pot', because a suitable 'xgettext' program was not found in PATH." 1>&2;; \ *) echo "Warning: Creating a tarball without '$(DOMAIN).pot', because 'xgettext' found no strings to extract. Check the contents of the POTFILES.in file and the XGETTEXT_OPTIONS in the Makevars file." 1>&2;; \ esac; \ fi; \ if test -f $(srcdir)/ChangeLog; then \ dists="$$dists ChangeLog"; \ fi; \ for i in 0 1 2 3 4 5 6 7 8 9; do \ if test -f $(srcdir)/ChangeLog.$$i; then \ dists="$$dists ChangeLog.$$i"; \ fi; \ done; \ if test -f $(srcdir)/LINGUAS; then dists="$$dists LINGUAS"; fi; \ for file in $$dists; do \ if test -f $$file; then \ cp -p $$file $(distdir) || exit 1; \ else \ cp -p $(srcdir)/$$file $(distdir) || exit 1; \ fi; \ done update-po: Makefile $(MAKE) $(DOMAIN).pot-update test -z "$(UPDATEPOFILES)" || $(MAKE) $(UPDATEPOFILES) $(MAKE) update-gmo # General rule for creating PO files. .nop.po-create: @lang=`echo $@ | sed -e 's/\.po-create$$//'`; \ echo "File $$lang.po does not exist. If you are a translator, you can create it through 'msginit'." 1>&2; \ exit 1 # General rule for updating PO files. .nop.po-update: @lang=`echo $@ | sed -e 's/\.po-update$$//'`; \ if test "$(PACKAGE)" = "gettext-tools" && test "$(CROSS_COMPILING)" != "yes"; then PATH=`pwd`/../src:$$PATH; fi; \ tmpdir=`pwd`; \ echo "$$lang:"; \ test "$(srcdir)" = . && cdcmd="" || cdcmd="cd $(srcdir) && "; \ echo "$${cdcmd}$(MSGMERGE) $(MSGMERGE_OPTIONS) --lang=$$lang --previous $$lang.po $(DOMAIN).pot -o $$lang.new.po"; \ cd $(srcdir); \ if { case `$(MSGMERGE) --version | sed 1q | sed -e 's,^[^0-9]*,,'` in \ '' | 0.[0-9] | 0.[0-9].* | 0.1[0-5] | 0.1[0-5].*) \ $(MSGMERGE) $(MSGMERGE_OPTIONS) -o $$tmpdir/$$lang.new.po $$lang.po $(DOMAIN).pot;; \ 0.1[6-7] | 0.1[6-7].*) \ $(MSGMERGE) $(MSGMERGE_OPTIONS) --previous -o $$tmpdir/$$lang.new.po $$lang.po $(DOMAIN).pot;; \ *) \ $(MSGMERGE) $(MSGMERGE_OPTIONS) --lang=$$lang --previous -o $$tmpdir/$$lang.new.po $$lang.po $(DOMAIN).pot;; \ esac; \ }; then \ if cmp $$lang.po $$tmpdir/$$lang.new.po >/dev/null 2>&1; then \ rm -f $$tmpdir/$$lang.new.po; \ else \ if mv -f $$tmpdir/$$lang.new.po $$lang.po; then \ :; \ else \ echo "msgmerge for $$lang.po failed: cannot move $$tmpdir/$$lang.new.po to $$lang.po" 1>&2; \ exit 1; \ fi; \ fi; \ else \ echo "msgmerge for $$lang.po failed!" 1>&2; \ rm -f $$tmpdir/$$lang.new.po; \ fi $(DUMMYPOFILES): update-gmo: Makefile $(GMOFILES) @: # Recreate Makefile by invoking config.status. Explicitly invoke the shell, # because execution permission bits may not work on the current file system. # Use @SHELL@, which is the shell determined by autoconf for the use by its # scripts, not $(SHELL) which is hardwired to /bin/sh and may be deficient. Makefile: Makefile.in.in Makevars $(top_builddir)/config.status @POMAKEFILEDEPS@ cd $(top_builddir) \ && @SHELL@ ./config.status $(subdir)/$@.in po-directories force: # Tell versions [3.59,3.63) of GNU make not to export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������webdar-1.0.0/po/Makevars����������������������������������������������������������������������������0000644�0001750�0001752�00000007024�15045134060�012012� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Makefile variables for PO directory in any package using GNU gettext. # # Copyright (C) 2003-2019 Free Software Foundation, Inc. # This file is free software; the Free Software Foundation gives # unlimited permission to use, copy, distribute, and modify it. # Usually the message domain is the same as the package name. DOMAIN = $(PACKAGE) # These two variables depend on the location of this directory. subdir = po top_builddir = .. # These options get passed to xgettext. XGETTEXT_OPTIONS = --keyword=_ --keyword=N_ # This is the copyright holder that gets inserted into the header of the # $(DOMAIN).pot file. Set this to the copyright holder of the surrounding # package. (Note that the msgstr strings, extracted from the package's # sources, belong to the copyright holder of the package.) Translators are # expected to transfer the copyright for their translations to this person # or entity, or to disclaim their copyright. The empty string stands for # the public domain; in this case the translators are expected to disclaim # their copyright. COPYRIGHT_HOLDER = Free Software Foundation, Inc. # This tells whether or not to prepend "GNU " prefix to the package # name that gets inserted into the header of the $(DOMAIN).pot file. # Possible values are "yes", "no", or empty. If it is empty, try to # detect it automatically by scanning the files in $(top_srcdir) for # "GNU packagename" string. PACKAGE_GNU = # This is the email address or URL to which the translators shall report # bugs in the untranslated strings: # - Strings which are not entire sentences, see the maintainer guidelines # in the GNU gettext documentation, section 'Preparing Strings'. # - Strings which use unclear terms or require additional context to be # understood. # - Strings which make invalid assumptions about notation of date, time or # money. # - Pluralisation problems. # - Incorrect English spelling. # - Incorrect formatting. # It can be your email address, or a mailing list address where translators # can write to without being subscribed, or the URL of a web page through # which the translators can contact you. MSGID_BUGS_ADDRESS = https://github.com/Edrusb/webdar/issues # This is the list of locale categories, beyond LC_MESSAGES, for which the # message catalogs shall be used. It is usually empty. EXTRA_LOCALE_CATEGORIES = # This tells whether the $(DOMAIN).pot file contains messages with an 'msgctxt' # context. Possible values are "yes" and "no". Set this to yes if the # package uses functions taking also a message context, like pgettext(), or # if in $(XGETTEXT_OPTIONS) you define keywords with a context argument. USE_MSGCTXT = no # These options get passed to msgmerge. # Useful options are in particular: # --previous to keep previous msgids of translated messages, # --quiet to reduce the verbosity. MSGMERGE_OPTIONS = # These options get passed to msginit. # If you want to disable line wrapping when writing PO files, add # --no-wrap to MSGMERGE_OPTIONS, XGETTEXT_OPTIONS, and # MSGINIT_OPTIONS. MSGINIT_OPTIONS = # This tells whether or not to regenerate a PO file when $(DOMAIN).pot # has changed. Possible values are "yes" and "no". Set this to no if # the POT file is checked in the repository and the version control # program ignores timestamps. PO_DEPENDS_ON_POT = yes # This tells whether or not to forcibly update $(DOMAIN).pot and # regenerate PO files on "make dist". Possible values are "yes" and # "no". Set this to no if the POT file and PO files are maintained # externally. DIST_DEPENDS_ON_UPDATE_PO = yes ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������webdar-1.0.0/po/remove-potcdate.sin�����������������������������������������������������������������0000644�0001750�0001752�00000001320�15045134055�014124� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Sed script that removes the POT-Creation-Date line in the header entry # from a POT file. # # Copyright (C) 2002 Free Software Foundation, Inc. # Copying and distribution of this file, with or without modification, # are permitted in any medium without royalty provided the copyright # notice and this notice are preserved. This file is offered as-is, # without any warranty. # # The distinction between the first and the following occurrences of the # pattern is achieved by looking at the hold space. /^"POT-Creation-Date: .*"$/{ x # Test if the hold space is empty. s/P/P/ ta # Yes it was empty. First occurrence. Remove the line. g d bb :a # The hold space was nonempty. Following occurrences. Do nothing. x :b } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������webdar-1.0.0/po/POTFILES.in�������������������������������������������������������������������������0000644�0001750�0001752�00000017127�15045134060�012100� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# List of source files containing translatable strings. # Copyright (C) 1995 Free Software Foundation, Inc. ./src/html_hash_algo.hpp ./src/archive_compare.hpp ./src/css_property.cpp ./src/html_error.hpp ./src/html_form_dynamic_table.cpp ./src/html_crypto_algo.hpp ./src/html_form_overwrite_chain_cell.hpp ./src/html_select_file.cpp ./src/html_options_merge.hpp ./src/html_image.hpp ./src/html_yes_no_box.hpp ./src/html_archive_isolate.cpp ./src/html_options_create.cpp ./src/html_archive_compare.cpp ./src/html_url.hpp ./src/html_archive_merge.cpp ./src/html_legend.hpp ./src/html_options_extract.cpp ./src/html_options_read.hpp ./src/html_form_mask_bool.hpp ./src/html_form_overwrite_constant_action.hpp ./src/html_menu.cpp ./src/html_form_input_file.cpp ./src/html_summary_page.cpp ./src/html_page.cpp ./src/html_aiguille.cpp ./src/static_object_library.hpp ./src/css_library.cpp ./src/html_derouleur.cpp ./src/html_label.hpp ./src/html_mask.cpp ./src/html_form_same_fs.cpp ./src/proto_connexion.cpp ./src/html_options_extract.hpp ./src/web_user_interaction.hpp ./src/html_ciphering.cpp ./src/html_tooltip.hpp ./src/html_datetime.hpp ./src/parser.cpp ./src/html_statistics.hpp ./src/html_void.cpp ./src/html_form_input.hpp ./src/events.cpp ./src/tokens.hpp ./src/css_class.cpp ./src/html_static_url.cpp ./src/central_report.cpp ./src/html_div.cpp ./src/actor.hpp ./src/html_form_sig_block_size.cpp ./src/html_dir_tree.cpp ./src/html_ciphering.hpp ./src/html_focus.hpp ./src/html_form_input_file.hpp ./src/html_text.hpp ./src/html_crypto_algo.cpp ./src/html_static_url.hpp ./src/html_options_list.cpp ./src/user_interface.hpp ./src/html_listing_page.hpp ./src/html_options_isolate.hpp ./src/html_form_overwrite_action.hpp ./src/webdar_css_style.cpp ./src/html_options_repair.cpp ./src/html_options_merge.cpp ./src/html_hash_algo.cpp ./src/answer.cpp ./src/html_disconnect.hpp ./src/html_statistics.cpp ./src/archive_create.hpp ./src/html_label.cpp ./src/html_span.hpp ./src/html_form_ignore_as_symlink.hpp ./src/environment.hpp ./src/html_form_overwrite_chain_action.hpp ./src/html_hr.hpp ./src/parser.hpp ./src/bibliotheque.hpp ./src/html_compression.hpp ./src/html_image.cpp ./src/static_body_builder.hpp ./src/proto_connexion.hpp ./src/choose.hpp ./src/html_version.cpp ./src/server_pool.hpp ./src/archive_init_list.hpp ./src/chemin.cpp ./src/html_entrepot_landing.hpp ./src/bibliotheque_subconfig.cpp ./src/html_mask.hpp ./src/html_form_mask_file.hpp ./src/body_builder.cpp ./src/html_div.hpp ./src/html_summary_page.hpp ./src/chemin.hpp ./src/html_disconnect.cpp ./src/html_size_unit.cpp ./src/css_class_group.hpp ./src/html_comparison_fields.hpp ./src/html_options_list.hpp ./src/html_error.cpp ./src/request.hpp ./src/disconnected_page.cpp ./src/html_compression.cpp ./src/html_form_overwrite_chain_action.cpp ./src/date.cpp ./src/tokens.cpp ./src/html_form_mask_expression.cpp ./src/html_tabs.cpp ./src/html_tabs.hpp ./src/reference.hpp ./src/html_overwrite_action.hpp ./src/archive_test.hpp ./src/saisie.hpp ./src/html_archive_repair.cpp ./src/static_object_builder.cpp ./src/bibliotheque.cpp ./src/html_form_fieldset.cpp ./src/html_archive_compare.hpp ./src/jsoner.cpp ./src/html_button.hpp ./src/css.cpp ./src/html_size_unit.hpp ./src/html_form_select.hpp ./src/html_focus.cpp ./src/html_derouleur.hpp ./src/webdar_tools.hpp ./src/html_form_overwrite_combining_criterium.cpp ./src/exceptions.cpp ./src/html_form_sig_block_size.hpp ./src/archive_test.cpp ./src/server_pool.cpp ./src/html_libdar_running_page.cpp ./src/html_over_guichet.cpp ./src/challenge.hpp ./src/date.hpp ./src/ssl_connexion.cpp ./src/html_form.hpp ./src/html_form_overwrite_constant_action.cpp ./src/html_fichier.hpp ./src/html_slicing.cpp ./src/saisie.cpp ./src/html_text.cpp ./src/html_web_user_interaction.hpp ./src/html_form_gnupg_list.hpp ./src/jsoner.hpp ./src/archive_restore.hpp ./src/html_form.cpp ./src/html_compression_params.cpp ./src/html_comparison_fields.cpp ./src/html_form_mask_expression.hpp ./src/authentication.hpp ./src/server.hpp ./src/html_options_test.hpp ./src/user_interface.cpp ./src/tooltip_messages.hpp ./src/html_fsa_scope.hpp ./src/html_archive_read.hpp ./src/html_archive_isolate.hpp ./src/html_options_compare.hpp ./src/html_void.hpp ./src/html_span.cpp ./src/html_options_repair.hpp ./src/html_form_ignore_as_symlink.cpp ./src/html_version.hpp ./src/archive_merge.hpp ./src/webdar.cpp ./src/actor.cpp ./src/html_options_create.hpp ./src/central_report.hpp ./src/html_form_overwrite_chain_cell.cpp ./src/html_entrepot.cpp ./src/html_button.cpp ./src/uri.hpp ./src/cookies.hpp ./src/html_web_user_interaction.cpp ./src/html_archive_extract.cpp ./src/html_mask_form_path.cpp ./src/html_demo.cpp ./src/html_yes_no_box.cpp ./src/web_user_interaction.cpp ./src/archive_repair.hpp ./src/html_form_radio.cpp ./src/challenge.cpp ./src/html_listing_page.cpp ./src/html_form_dynamic_table.hpp ./src/html_options_compare.cpp ./src/listener.hpp ./src/html_form_select.cpp ./src/html_level.hpp ./src/archive_repair.cpp ./src/html_options_test.cpp ./src/html_archive_merge.hpp ./src/html_form_overwrite_action.cpp ./src/html_libdar_running_popup.cpp ./src/css.hpp ./src/choose.cpp ./src/html_tooltip.cpp ./src/bibliotheque_subconfig.hpp ./src/archive_compare.cpp ./src/disconnected_page.hpp ./src/html_over_guichet.hpp ./src/html_form_fieldset.hpp ./src/html_form_mask_file.cpp ./src/html_form_input_unit.cpp ./src/html_slicing.hpp ./src/arriere_boutique.hpp ./src/html_libdar_running_page.hpp ./src/reference.cpp ./src/html_mask_form_filename.cpp ./src/html_menu.hpp ./src/html_popup.cpp ./src/listener.cpp ./src/ssl_context.cpp ./src/webdar_tools.cpp ./src/html_aiguille.hpp ./src/ssl_context.hpp ./src/html_demo.hpp ./src/css_library.hpp ./src/html_mask_form_path.hpp ./src/html_options_isolate.cpp ./src/html_form_overwrite_base_criterium.cpp ./src/html_form_overwrite_base_criterium.hpp ./src/html_overwrite_criterium.hpp ./src/connexion.cpp ./src/html_bibliotheque.hpp ./src/guichet.hpp ./src/static_object.cpp ./src/html_double_button.cpp ./src/ssl_connexion.hpp ./src/html_dir_tree.hpp ./src/html_form_input_unit.hpp ./src/static_object.hpp ./src/html_archive_create.hpp ./src/html_form_mask_subdir.hpp ./src/html_hr.cpp ./src/html_form_gnupg_list.cpp ./src/error_page.cpp ./src/html_form_input.cpp ./src/html_legend.cpp ./src/archive_create.cpp ./src/body_builder.hpp ./src/archive_isolate.hpp ./src/answer.hpp ./src/exceptions.hpp ./src/html_table.cpp ./src/request.cpp ./src/connexion.hpp ./src/server.cpp ./src/archive_restore.cpp ./src/html_level.cpp ./src/html_form_same_fs.hpp ./src/html_archive_extract.hpp ./src/html_form_mask_subdir.cpp ./src/html_table.hpp ./src/html_mask_form_filename.hpp ./src/css_class.hpp ./src/css_class_group.cpp ./src/html_bibliotheque.cpp ./src/html_form_overwrite_conditional_action.cpp ./src/html_page.hpp ./src/guichet.cpp ./src/html_form_overwrite_conditional_action.hpp ./src/html_popup.hpp ./src/session.cpp ./src/environment.cpp ./src/html_select_file.hpp ./src/base64.cpp ./src/base64.hpp ./src/html_archive_read.cpp ./src/html_form_mask_bool.cpp ./src/css_property.hpp ./src/uri.cpp ./src/html_datetime.cpp ./src/archive_init_list.cpp ./src/html_entrepot.hpp ./src/html_options_read.cpp ./src/webdar_css_style.hpp ./src/html_form_radio.hpp ./src/html_archive_create.cpp ./src/responder.hpp ./src/html_libdar_running_popup.hpp ./src/archive_merge.cpp ./src/html_double_button.hpp ./src/archive_isolate.cpp ./src/events.hpp ./src/error_page.hpp ./src/html_archive_repair.hpp ./src/html_compression_params.hpp ./src/html_form_overwrite_combining_criterium.hpp ./src/session.hpp ./src/html_url.cpp ./src/html_entrepot_landing.cpp ./src/static_object_library.cpp ./src/global_parameters.hpp ./src/html_fsa_scope.cpp �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������webdar-1.0.0/po/ChangeLog���������������������������������������������������������������������������0000644�0001750�0001752�00000000716�15045134055�012075� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������2025-08-07 gettextize <bug-gnu-gettext@gnu.org> * Makefile.in.in: New file, from gettext-0.21. * Rules-quot: New file, from gettext-0.21. * boldquot.sed: New file, from gettext-0.21. * en@boldquot.header: New file, from gettext-0.21. * en@quot.header: New file, from gettext-0.21. * insert-header.sin: New file, from gettext-0.21. * quot.sed: New file, from gettext-0.21. * remove-potcdate.sin: New file, from gettext-0.21. * POTFILES.in: New file. ��������������������������������������������������webdar-1.0.0/po/insert-header.sin�������������������������������������������������������������������0000644�0001750�0001752�00000001612�15045134055�013564� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Sed script that inserts the file called HEADER before the header entry. # # Copyright (C) 2001 Free Software Foundation, Inc. # Written by Bruno Haible <bruno@clisp.org>, 2001. # This file is free software; the Free Software Foundation gives # unlimited permission to use, copy, distribute, and modify it. # # At each occurrence of a line starting with "msgid ", we execute the following # commands. At the first occurrence, insert the file. At the following # occurrences, do nothing. The distinction between the first and the following # occurrences is achieved by looking at the hold space. /^msgid /{ x # Test if the hold space is empty. s/m/m/ ta # Yes it was empty. First occurrence. Read the file. r HEADER # Output the file's contents by reading the next line. But don't lose the # current line while doing this. g N bb :a # The hold space was nonempty. Following occurrences. Do nothing. x :b } ����������������������������������������������������������������������������������������������������������������������webdar-1.0.0/po/en@quot.header����������������������������������������������������������������������0000644�0001750�0001752�00000002264�15045134055�013110� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# All this catalog "translates" are quotation characters. # The msgids must be ASCII and therefore cannot contain real quotation # characters, only substitutes like grave accent (0x60), apostrophe (0x27) # and double quote (0x22). These substitutes look strange; see # https://www.cl.cam.ac.uk/~mgk25/ucs/quotes.html # # This catalog translates grave accent (0x60) and apostrophe (0x27) to # left single quotation mark (U+2018) and right single quotation mark (U+2019). # It also translates pairs of apostrophe (0x27) to # left single quotation mark (U+2018) and right single quotation mark (U+2019) # and pairs of quotation mark (0x22) to # left double quotation mark (U+201C) and right double quotation mark (U+201D). # # When output to an UTF-8 terminal, the quotation characters appear perfectly. # When output to an ISO-8859-1 terminal, the single quotation marks are # transliterated to apostrophes (by iconv in glibc 2.2 or newer) or to # grave/acute accent (by libiconv), and the double quotation marks are # transliterated to 0x22. # When output to an ASCII terminal, the single quotation marks are # transliterated to apostrophes, and the double quotation marks are # transliterated to 0x22. # ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������webdar-1.0.0/po/quot.sed����������������������������������������������������������������������������0000644�0001750�0001752�00000000231�15045134055�012000� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������s/"\([^"]*\)"/“\1â€/g s/`\([^`']*\)'/‘\1’/g s/ '\([^`']*\)' / ‘\1’ /g s/ '\([^`']*\)'$/ ‘\1’/g s/^'\([^`']*\)' /‘\1’ /g s/“â€/""/g �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������webdar-1.0.0/po/en@boldquot.header������������������������������������������������������������������0000644�0001750�0001752�00000002472�15045134055�013752� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# All this catalog "translates" are quotation characters. # The msgids must be ASCII and therefore cannot contain real quotation # characters, only substitutes like grave accent (0x60), apostrophe (0x27) # and double quote (0x22). These substitutes look strange; see # https://www.cl.cam.ac.uk/~mgk25/ucs/quotes.html # # This catalog translates grave accent (0x60) and apostrophe (0x27) to # left single quotation mark (U+2018) and right single quotation mark (U+2019). # It also translates pairs of apostrophe (0x27) to # left single quotation mark (U+2018) and right single quotation mark (U+2019) # and pairs of quotation mark (0x22) to # left double quotation mark (U+201C) and right double quotation mark (U+201D). # # When output to an UTF-8 terminal, the quotation characters appear perfectly. # When output to an ISO-8859-1 terminal, the single quotation marks are # transliterated to apostrophes (by iconv in glibc 2.2 or newer) or to # grave/acute accent (by libiconv), and the double quotation marks are # transliterated to 0x22. # When output to an ASCII terminal, the single quotation marks are # transliterated to apostrophes, and the double quotation marks are # transliterated to 0x22. # # This catalog furthermore displays the text between the quotation marks in # bold face, assuming the VT100/XTerm escape sequences. # ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������webdar-1.0.0/INSTALL��������������������������������������������������������������������������������0000644�0001750�0001752�00000004100�15045132004�010715� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������ W E B D A R REQUIREMENTS you will need: - C++ compiler (supporting at least C++14) [tested with gcc/g++ and clang] - make - common system libraries and included files - standard C and standard C++ libraries - opensssl [1] version >= 3.0.15 - libthreadar [2] vesion >= 1.6.0 (*) - libdar [3] vers 7.0.0 (dar release 2.8.0) or more recent - Niels Lohmann Json library [4] - A web browser (**) Webdar is known to compile under Linux (x86 and ARM) and FreeBSD [1] https://www.openssl.org/ [2] https://libthreadar.sourceforge.net/ [3] http://dar.linux.free.fr/ [4] https://github.com/nlohmann/json (*) Webdar works with libthreadar >= 1.5.2 but with some standard libraries like musl, it needs 1.6.0 or more recent to setup stack thread size to larger value than the default this library uses. (**) Supported browsers: - Firefox has been tested on Linux, Windows and Android - Google Chrome is known to work on MS Windows - MS Edge is known to work on MS Windows Unsupported browsers: - lynx is known *not* to work and is unsupported - w3m is know *not* to work and is unsupported Other browsers supporting HTTP 1.1 should work INSTALLATION extract source package and run ./configure to install webdar type (as root): make install Note: if upx is available and detected in the system at the time ./configure is run, replace 'make install' by 'make install-strip' for the installed binary to be the smallest possible (upx compressed without the symbol table) It will be installed under /usr/local you can specify another place using the the PREFIX variable: ./configure --prefix=/usr Last if you want to build a package for a distro, you can use the DESTDIR variable in addition, and no more require root priviledge: make DESTDIR=/tmp install If you want to uninstall webdar you can use the 'uninstall' target, DESTDIR and/or --prefix should be the same as the one used at installation step: make uninstall or for example: make DESTDIR=/tmp uninstall What's next? Read the man page: man webdar or simpler, just run webdar and follow the displayed instructions ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������webdar-1.0.0/m4/������������������������������������������������������������������������������������0000755�0001750�0001752�00000000000�15045134250�010276� 5����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������webdar-1.0.0/m4/gettext.m4��������������������������������������������������������������������������0000644�0001750�0001752�00000034230�15045134055�012151� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# gettext.m4 serial 71 (gettext-0.20.2) dnl Copyright (C) 1995-2014, 2016, 2018-2020 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl dnl This file can be used in projects which are not available under dnl the GNU General Public License or the GNU Lesser General Public dnl License but which still want to provide support for the GNU gettext dnl functionality. dnl Please note that the actual code of the GNU gettext library is covered dnl by the GNU Lesser General Public License, and the rest of the GNU dnl gettext package is covered by the GNU General Public License. dnl They are *not* in the public domain. dnl Authors: dnl Ulrich Drepper <drepper@cygnus.com>, 1995-2000. dnl Bruno Haible <haible@clisp.cons.org>, 2000-2006, 2008-2010. dnl Macro to add for using GNU gettext. dnl Usage: AM_GNU_GETTEXT([INTLSYMBOL], [NEEDSYMBOL], [INTLDIR]). dnl INTLSYMBOL must be one of 'external', 'use-libtool'. dnl INTLSYMBOL should be 'external' for packages other than GNU gettext, and dnl 'use-libtool' for the packages 'gettext-runtime' and 'gettext-tools'. dnl If INTLSYMBOL is 'use-libtool', then a libtool library dnl $(top_builddir)/intl/libintl.la will be created (shared and/or static, dnl depending on --{enable,disable}-{shared,static} and on the presence of dnl AM-DISABLE-SHARED). dnl If NEEDSYMBOL is specified and is 'need-ngettext', then GNU gettext dnl implementations (in libc or libintl) without the ngettext() function dnl will be ignored. If NEEDSYMBOL is specified and is dnl 'need-formatstring-macros', then GNU gettext implementations that don't dnl support the ISO C 99 <inttypes.h> formatstring macros will be ignored. dnl INTLDIR is used to find the intl libraries. If empty, dnl the value '$(top_builddir)/intl/' is used. dnl dnl The result of the configuration is one of three cases: dnl 1) GNU gettext, as included in the intl subdirectory, will be compiled dnl and used. dnl Catalog format: GNU --> install in $(datadir) dnl Catalog extension: .mo after installation, .gmo in source tree dnl 2) GNU gettext has been found in the system's C library. dnl Catalog format: GNU --> install in $(datadir) dnl Catalog extension: .mo after installation, .gmo in source tree dnl 3) No internationalization, always use English msgid. dnl Catalog format: none dnl Catalog extension: none dnl If INTLSYMBOL is 'external', only cases 2 and 3 can occur. dnl The use of .gmo is historical (it was needed to avoid overwriting the dnl GNU format catalogs when building on a platform with an X/Open gettext), dnl but we keep it in order not to force irrelevant filename changes on the dnl maintainers. dnl AC_DEFUN([AM_GNU_GETTEXT], [ dnl Argument checking. ifelse([$1], [], , [ifelse([$1], [external], , [ifelse([$1], [use-libtool], , [errprint([ERROR: invalid first argument to AM_GNU_GETTEXT ])])])]) ifelse(ifelse([$1], [], [old])[]ifelse([$1], [no-libtool], [old]), [old], [errprint([ERROR: Use of AM_GNU_GETTEXT without [external] argument is no longer supported. ])]) ifelse([$2], [], , [ifelse([$2], [need-ngettext], , [ifelse([$2], [need-formatstring-macros], , [errprint([ERROR: invalid second argument to AM_GNU_GETTEXT ])])])]) define([gt_included_intl], ifelse([$1], [external], [no], [yes])) gt_NEEDS_INIT AM_GNU_GETTEXT_NEED([$2]) AC_REQUIRE([AM_PO_SUBDIRS])dnl ifelse(gt_included_intl, yes, [ AC_REQUIRE([AM_INTL_SUBDIR])dnl ]) dnl Prerequisites of AC_LIB_LINKFLAGS_BODY. AC_REQUIRE([AC_LIB_PREPARE_PREFIX]) AC_REQUIRE([AC_LIB_RPATH]) dnl Sometimes libintl requires libiconv, so first search for libiconv. dnl Ideally we would do this search only after the dnl if test "$USE_NLS" = "yes"; then dnl if { eval "gt_val=\$$gt_func_gnugettext_libc"; test "$gt_val" != "yes"; }; then dnl tests. But if configure.in invokes AM_ICONV after AM_GNU_GETTEXT dnl the configure script would need to contain the same shell code dnl again, outside any 'if'. There are two solutions: dnl - Invoke AM_ICONV_LINKFLAGS_BODY here, outside any 'if'. dnl - Control the expansions in more detail using AC_PROVIDE_IFELSE. dnl Since AC_PROVIDE_IFELSE is not documented, we avoid it. ifelse(gt_included_intl, yes, , [ AC_REQUIRE([AM_ICONV_LINKFLAGS_BODY]) ]) dnl Sometimes, on Mac OS X, libintl requires linking with CoreFoundation. gt_INTL_MACOSX dnl Set USE_NLS. AC_REQUIRE([AM_NLS]) ifelse(gt_included_intl, yes, [ BUILD_INCLUDED_LIBINTL=no USE_INCLUDED_LIBINTL=no ]) LIBINTL= LTLIBINTL= POSUB= dnl Add a version number to the cache macros. case " $gt_needs " in *" need-formatstring-macros "*) gt_api_version=3 ;; *" need-ngettext "*) gt_api_version=2 ;; *) gt_api_version=1 ;; esac gt_func_gnugettext_libc="gt_cv_func_gnugettext${gt_api_version}_libc" gt_func_gnugettext_libintl="gt_cv_func_gnugettext${gt_api_version}_libintl" dnl If we use NLS figure out what method if test "$USE_NLS" = "yes"; then gt_use_preinstalled_gnugettext=no ifelse(gt_included_intl, yes, [ AC_MSG_CHECKING([whether included gettext is requested]) AC_ARG_WITH([included-gettext], [ --with-included-gettext use the GNU gettext library included here], nls_cv_force_use_gnu_gettext=$withval, nls_cv_force_use_gnu_gettext=no) AC_MSG_RESULT([$nls_cv_force_use_gnu_gettext]) nls_cv_use_gnu_gettext="$nls_cv_force_use_gnu_gettext" if test "$nls_cv_force_use_gnu_gettext" != "yes"; then ]) dnl User does not insist on using GNU NLS library. Figure out what dnl to use. If GNU gettext is available we use this. Else we have dnl to fall back to GNU NLS library. if test $gt_api_version -ge 3; then gt_revision_test_code=' #ifndef __GNU_GETTEXT_SUPPORTED_REVISION #define __GNU_GETTEXT_SUPPORTED_REVISION(major) ((major) == 0 ? 0 : -1) #endif changequote(,)dnl typedef int array [2 * (__GNU_GETTEXT_SUPPORTED_REVISION(0) >= 1) - 1]; changequote([,])dnl ' else gt_revision_test_code= fi if test $gt_api_version -ge 2; then gt_expression_test_code=' + * ngettext ("", "", 0)' else gt_expression_test_code= fi AC_CACHE_CHECK([for GNU gettext in libc], [$gt_func_gnugettext_libc], [AC_LINK_IFELSE( [AC_LANG_PROGRAM( [[ #include <libintl.h> #ifndef __GNU_GETTEXT_SUPPORTED_REVISION extern int _nl_msg_cat_cntr; extern int *_nl_domain_bindings; #define __GNU_GETTEXT_SYMBOL_EXPRESSION (_nl_msg_cat_cntr + *_nl_domain_bindings) #else #define __GNU_GETTEXT_SYMBOL_EXPRESSION 0 #endif $gt_revision_test_code ]], [[ bindtextdomain ("", ""); return * gettext ("")$gt_expression_test_code + __GNU_GETTEXT_SYMBOL_EXPRESSION ]])], [eval "$gt_func_gnugettext_libc=yes"], [eval "$gt_func_gnugettext_libc=no"])]) if { eval "gt_val=\$$gt_func_gnugettext_libc"; test "$gt_val" != "yes"; }; then dnl Sometimes libintl requires libiconv, so first search for libiconv. ifelse(gt_included_intl, yes, , [ AM_ICONV_LINK ]) dnl Search for libintl and define LIBINTL, LTLIBINTL and INCINTL dnl accordingly. Don't use AC_LIB_LINKFLAGS_BODY([intl],[iconv]) dnl because that would add "-liconv" to LIBINTL and LTLIBINTL dnl even if libiconv doesn't exist. AC_LIB_LINKFLAGS_BODY([intl]) AC_CACHE_CHECK([for GNU gettext in libintl], [$gt_func_gnugettext_libintl], [gt_save_CPPFLAGS="$CPPFLAGS" CPPFLAGS="$CPPFLAGS $INCINTL" gt_save_LIBS="$LIBS" LIBS="$LIBS $LIBINTL" dnl Now see whether libintl exists and does not depend on libiconv. AC_LINK_IFELSE( [AC_LANG_PROGRAM( [[ #include <libintl.h> #ifndef __GNU_GETTEXT_SUPPORTED_REVISION extern int _nl_msg_cat_cntr; extern #ifdef __cplusplus "C" #endif const char *_nl_expand_alias (const char *); #define __GNU_GETTEXT_SYMBOL_EXPRESSION (_nl_msg_cat_cntr + *_nl_expand_alias ("")) #else #define __GNU_GETTEXT_SYMBOL_EXPRESSION 0 #endif $gt_revision_test_code ]], [[ bindtextdomain ("", ""); return * gettext ("")$gt_expression_test_code + __GNU_GETTEXT_SYMBOL_EXPRESSION ]])], [eval "$gt_func_gnugettext_libintl=yes"], [eval "$gt_func_gnugettext_libintl=no"]) dnl Now see whether libintl exists and depends on libiconv. if { eval "gt_val=\$$gt_func_gnugettext_libintl"; test "$gt_val" != yes; } && test -n "$LIBICONV"; then LIBS="$LIBS $LIBICONV" AC_LINK_IFELSE( [AC_LANG_PROGRAM( [[ #include <libintl.h> #ifndef __GNU_GETTEXT_SUPPORTED_REVISION extern int _nl_msg_cat_cntr; extern #ifdef __cplusplus "C" #endif const char *_nl_expand_alias (const char *); #define __GNU_GETTEXT_SYMBOL_EXPRESSION (_nl_msg_cat_cntr + *_nl_expand_alias ("")) #else #define __GNU_GETTEXT_SYMBOL_EXPRESSION 0 #endif $gt_revision_test_code ]], [[ bindtextdomain ("", ""); return * gettext ("")$gt_expression_test_code + __GNU_GETTEXT_SYMBOL_EXPRESSION ]])], [LIBINTL="$LIBINTL $LIBICONV" LTLIBINTL="$LTLIBINTL $LTLIBICONV" eval "$gt_func_gnugettext_libintl=yes" ]) fi CPPFLAGS="$gt_save_CPPFLAGS" LIBS="$gt_save_LIBS"]) fi dnl If an already present or preinstalled GNU gettext() is found, dnl use it. But if this macro is used in GNU gettext, and GNU dnl gettext is already preinstalled in libintl, we update this dnl libintl. (Cf. the install rule in intl/Makefile.in.) if { eval "gt_val=\$$gt_func_gnugettext_libc"; test "$gt_val" = "yes"; } \ || { { eval "gt_val=\$$gt_func_gnugettext_libintl"; test "$gt_val" = "yes"; } \ && test "$PACKAGE" != gettext-runtime \ && test "$PACKAGE" != gettext-tools; }; then gt_use_preinstalled_gnugettext=yes else dnl Reset the values set by searching for libintl. LIBINTL= LTLIBINTL= INCINTL= fi ifelse(gt_included_intl, yes, [ if test "$gt_use_preinstalled_gnugettext" != "yes"; then dnl GNU gettext is not found in the C library. dnl Fall back on included GNU gettext library. nls_cv_use_gnu_gettext=yes fi fi if test "$nls_cv_use_gnu_gettext" = "yes"; then dnl Mark actions used to generate GNU NLS library. BUILD_INCLUDED_LIBINTL=yes USE_INCLUDED_LIBINTL=yes LIBINTL="ifelse([$3],[],\${top_builddir}/intl,[$3])/libintl.la $LIBICONV $LIBTHREAD" LTLIBINTL="ifelse([$3],[],\${top_builddir}/intl,[$3])/libintl.la $LTLIBICONV $LTLIBTHREAD" LIBS=`echo " $LIBS " | sed -e 's/ -lintl / /' -e 's/^ //' -e 's/ $//'` fi CATOBJEXT= if test "$gt_use_preinstalled_gnugettext" = "yes" \ || test "$nls_cv_use_gnu_gettext" = "yes"; then dnl Mark actions to use GNU gettext tools. CATOBJEXT=.gmo fi ]) if test -n "$INTL_MACOSX_LIBS"; then if test "$gt_use_preinstalled_gnugettext" = "yes" \ || test "$nls_cv_use_gnu_gettext" = "yes"; then dnl Some extra flags are needed during linking. LIBINTL="$LIBINTL $INTL_MACOSX_LIBS" LTLIBINTL="$LTLIBINTL $INTL_MACOSX_LIBS" fi fi if test "$gt_use_preinstalled_gnugettext" = "yes" \ || test "$nls_cv_use_gnu_gettext" = "yes"; then AC_DEFINE([ENABLE_NLS], [1], [Define to 1 if translation of program messages to the user's native language is requested.]) else USE_NLS=no fi fi AC_MSG_CHECKING([whether to use NLS]) AC_MSG_RESULT([$USE_NLS]) if test "$USE_NLS" = "yes"; then AC_MSG_CHECKING([where the gettext function comes from]) if test "$gt_use_preinstalled_gnugettext" = "yes"; then if { eval "gt_val=\$$gt_func_gnugettext_libintl"; test "$gt_val" = "yes"; }; then gt_source="external libintl" else gt_source="libc" fi else gt_source="included intl directory" fi AC_MSG_RESULT([$gt_source]) fi if test "$USE_NLS" = "yes"; then if test "$gt_use_preinstalled_gnugettext" = "yes"; then if { eval "gt_val=\$$gt_func_gnugettext_libintl"; test "$gt_val" = "yes"; }; then AC_MSG_CHECKING([how to link with libintl]) AC_MSG_RESULT([$LIBINTL]) AC_LIB_APPENDTOVAR([CPPFLAGS], [$INCINTL]) fi dnl For backward compatibility. Some packages may be using this. AC_DEFINE([HAVE_GETTEXT], [1], [Define if the GNU gettext() function is already present or preinstalled.]) AC_DEFINE([HAVE_DCGETTEXT], [1], [Define if the GNU dcgettext() function is already present or preinstalled.]) fi dnl We need to process the po/ directory. POSUB=po fi ifelse(gt_included_intl, yes, [ dnl In GNU gettext we have to set BUILD_INCLUDED_LIBINTL to 'yes' dnl because some of the testsuite requires it. BUILD_INCLUDED_LIBINTL=yes dnl Make all variables we use known to autoconf. AC_SUBST([BUILD_INCLUDED_LIBINTL]) AC_SUBST([USE_INCLUDED_LIBINTL]) AC_SUBST([CATOBJEXT]) ]) dnl For backward compatibility. Some Makefiles may be using this. INTLLIBS="$LIBINTL" AC_SUBST([INTLLIBS]) dnl Make all documented variables known to autoconf. AC_SUBST([LIBINTL]) AC_SUBST([LTLIBINTL]) AC_SUBST([POSUB]) ]) dnl gt_NEEDS_INIT ensures that the gt_needs variable is initialized. m4_define([gt_NEEDS_INIT], [ m4_divert_text([DEFAULTS], [gt_needs=]) m4_define([gt_NEEDS_INIT], []) ]) dnl Usage: AM_GNU_GETTEXT_NEED([NEEDSYMBOL]) AC_DEFUN([AM_GNU_GETTEXT_NEED], [ m4_divert_text([INIT_PREPARE], [gt_needs="$gt_needs $1"]) ]) dnl Usage: AM_GNU_GETTEXT_VERSION([gettext-version]) AC_DEFUN([AM_GNU_GETTEXT_VERSION], []) dnl Usage: AM_GNU_GETTEXT_REQUIRE_VERSION([gettext-version]) AC_DEFUN([AM_GNU_GETTEXT_REQUIRE_VERSION], []) ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������webdar-1.0.0/m4/intlmacosx.m4�����������������������������������������������������������������������0000644�0001750�0001752�00000006235�15045134056�012653� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# intlmacosx.m4 serial 8 (gettext-0.20.2) dnl Copyright (C) 2004-2014, 2016, 2019-2020 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl dnl This file can be used in projects which are not available under dnl the GNU General Public License or the GNU Lesser General Public dnl License but which still want to provide support for the GNU gettext dnl functionality. dnl Please note that the actual code of the GNU gettext library is covered dnl by the GNU Lesser General Public License, and the rest of the GNU dnl gettext package is covered by the GNU General Public License. dnl They are *not* in the public domain. dnl Checks for special options needed on Mac OS X. dnl Defines INTL_MACOSX_LIBS. AC_DEFUN([gt_INTL_MACOSX], [ dnl Check for API introduced in Mac OS X 10.4. AC_CACHE_CHECK([for CFPreferencesCopyAppValue], [gt_cv_func_CFPreferencesCopyAppValue], [gt_save_LIBS="$LIBS" LIBS="$LIBS -Wl,-framework -Wl,CoreFoundation" AC_LINK_IFELSE( [AC_LANG_PROGRAM( [[#include <CoreFoundation/CFPreferences.h>]], [[CFPreferencesCopyAppValue(NULL, NULL)]])], [gt_cv_func_CFPreferencesCopyAppValue=yes], [gt_cv_func_CFPreferencesCopyAppValue=no]) LIBS="$gt_save_LIBS"]) if test $gt_cv_func_CFPreferencesCopyAppValue = yes; then AC_DEFINE([HAVE_CFPREFERENCESCOPYAPPVALUE], [1], [Define to 1 if you have the Mac OS X function CFPreferencesCopyAppValue in the CoreFoundation framework.]) fi dnl Don't check for the API introduced in Mac OS X 10.5, CFLocaleCopyCurrent, dnl because in macOS 10.13.4 it has the following behaviour: dnl When two or more languages are specified in the dnl "System Preferences > Language & Region > Preferred Languages" panel, dnl it returns en_CC where CC is the territory (even when English is not among dnl the preferred languages!). What we want instead is what dnl CFLocaleCopyCurrent returned in earlier macOS releases and what dnl CFPreferencesCopyAppValue still returns, namely ll_CC where ll is the dnl first among the preferred languages and CC is the territory. AC_CACHE_CHECK([for CFLocaleCopyPreferredLanguages], [gt_cv_func_CFLocaleCopyPreferredLanguages], [gt_save_LIBS="$LIBS" LIBS="$LIBS -Wl,-framework -Wl,CoreFoundation" AC_LINK_IFELSE( [AC_LANG_PROGRAM( [[#include <CoreFoundation/CFLocale.h>]], [[CFLocaleCopyPreferredLanguages();]])], [gt_cv_func_CFLocaleCopyPreferredLanguages=yes], [gt_cv_func_CFLocaleCopyPreferredLanguages=no]) LIBS="$gt_save_LIBS"]) if test $gt_cv_func_CFLocaleCopyPreferredLanguages = yes; then AC_DEFINE([HAVE_CFLOCALECOPYPREFERREDLANGUAGES], [1], [Define to 1 if you have the Mac OS X function CFLocaleCopyPreferredLanguages in the CoreFoundation framework.]) fi INTL_MACOSX_LIBS= if test $gt_cv_func_CFPreferencesCopyAppValue = yes \ || test $gt_cv_func_CFLocaleCopyPreferredLanguages = yes; then INTL_MACOSX_LIBS="-Wl,-framework -Wl,CoreFoundation" fi AC_SUBST([INTL_MACOSX_LIBS]) ]) �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������webdar-1.0.0/m4/lib-ld.m4���������������������������������������������������������������������������0000644�0001750�0001752�00000012372�15045134056�011634� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# lib-ld.m4 serial 9 dnl Copyright (C) 1996-2003, 2009-2020 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl Subroutines of libtool.m4, dnl with replacements s/_*LT_PATH/AC_LIB_PROG/ and s/lt_/acl_/ to avoid dnl collision with libtool.m4. dnl From libtool-2.4. Sets the variable with_gnu_ld to yes or no. AC_DEFUN([AC_LIB_PROG_LD_GNU], [AC_CACHE_CHECK([if the linker ($LD) is GNU ld], [acl_cv_prog_gnu_ld], [# I'd rather use --version here, but apparently some GNU lds only accept -v. case `$LD -v 2>&1 </dev/null` in *GNU* | *'with BFD'*) acl_cv_prog_gnu_ld=yes ;; *) acl_cv_prog_gnu_ld=no ;; esac]) with_gnu_ld=$acl_cv_prog_gnu_ld ]) dnl From libtool-2.4. Sets the variable LD. AC_DEFUN([AC_LIB_PROG_LD], [AC_REQUIRE([AC_PROG_CC])dnl AC_REQUIRE([AC_CANONICAL_HOST])dnl AC_ARG_WITH([gnu-ld], [AS_HELP_STRING([--with-gnu-ld], [assume the C compiler uses GNU ld [default=no]])], [test "$withval" = no || with_gnu_ld=yes], [with_gnu_ld=no])dnl # Prepare PATH_SEPARATOR. # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then # Determine PATH_SEPARATOR by trying to find /bin/sh in a PATH which # contains only /bin. Note that ksh looks also at the FPATH variable, # so we have to set that as well for the test. PATH_SEPARATOR=: (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 \ && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 \ || PATH_SEPARATOR=';' } fi if test -n "$LD"; then AC_MSG_CHECKING([for ld]) elif test "$GCC" = yes; then AC_MSG_CHECKING([for ld used by $CC]) elif test "$with_gnu_ld" = yes; then AC_MSG_CHECKING([for GNU ld]) else AC_MSG_CHECKING([for non-GNU ld]) fi if test -n "$LD"; then # Let the user override the test with a path. : else AC_CACHE_VAL([acl_cv_path_LD], [ acl_cv_path_LD= # Final result of this test ac_prog=ld # Program to search in $PATH if test "$GCC" = yes; then # Check if gcc -print-prog-name=ld gives a path. case $host in *-*-mingw*) # gcc leaves a trailing carriage return which upsets mingw acl_output=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; *) acl_output=`($CC -print-prog-name=ld) 2>&5` ;; esac case $acl_output in # Accept absolute paths. [[\\/]]* | ?:[[\\/]]*) re_direlt='/[[^/]][[^/]]*/\.\./' # Canonicalize the pathname of ld acl_output=`echo "$acl_output" | sed 's%\\\\%/%g'` while echo "$acl_output" | grep "$re_direlt" > /dev/null 2>&1; do acl_output=`echo $acl_output | sed "s%$re_direlt%/%"` done # Got the pathname. No search in PATH is needed. acl_cv_path_LD="$acl_output" ac_prog= ;; "") # If it fails, then pretend we aren't using GCC. ;; *) # If it is relative, then search for the first ld in PATH. with_gnu_ld=unknown ;; esac fi if test -n "$ac_prog"; then # Search for $ac_prog in $PATH. acl_save_ifs="$IFS"; IFS=$PATH_SEPARATOR for ac_dir in $PATH; do IFS="$acl_save_ifs" test -z "$ac_dir" && ac_dir=. if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then acl_cv_path_LD="$ac_dir/$ac_prog" # Check to see if the program is GNU ld. I'd rather use --version, # but apparently some variants of GNU ld only accept -v. # Break only if it was the GNU/non-GNU ld that we prefer. case `"$acl_cv_path_LD" -v 2>&1 </dev/null` in *GNU* | *'with BFD'*) test "$with_gnu_ld" != no && break ;; *) test "$with_gnu_ld" != yes && break ;; esac fi done IFS="$acl_save_ifs" fi case $host in *-*-aix*) AC_COMPILE_IFELSE( [AC_LANG_SOURCE( [[#if defined __powerpc64__ || defined _ARCH_PPC64 int ok; #else error fail #endif ]])], [# The compiler produces 64-bit code. Add option '-b64' so that the # linker groks 64-bit object files. case "$acl_cv_path_LD " in *" -b64 "*) ;; *) acl_cv_path_LD="$acl_cv_path_LD -b64" ;; esac ], []) ;; sparc64-*-netbsd*) AC_COMPILE_IFELSE( [AC_LANG_SOURCE( [[#if defined __sparcv9 || defined __arch64__ int ok; #else error fail #endif ]])], [], [# The compiler produces 32-bit code. Add option '-m elf32_sparc' # so that the linker groks 32-bit object files. case "$acl_cv_path_LD " in *" -m elf32_sparc "*) ;; *) acl_cv_path_LD="$acl_cv_path_LD -m elf32_sparc" ;; esac ]) ;; esac ]) LD="$acl_cv_path_LD" fi if test -n "$LD"; then AC_MSG_RESULT([$LD]) else AC_MSG_RESULT([no]) AC_MSG_ERROR([no acceptable ld found in \$PATH]) fi AC_LIB_PROG_LD_GNU ]) ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������webdar-1.0.0/m4/host-cpu-c-abi.m4�������������������������������������������������������������������0000644�0001750�0001752�00000053640�15045134056�013207� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# host-cpu-c-abi.m4 serial 13 dnl Copyright (C) 2002-2020 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl From Bruno Haible and Sam Steingold. dnl Sets the HOST_CPU variable to the canonical name of the CPU. dnl Sets the HOST_CPU_C_ABI variable to the canonical name of the CPU with its dnl C language ABI (application binary interface). dnl Also defines __${HOST_CPU}__ and __${HOST_CPU_C_ABI}__ as C macros in dnl config.h. dnl dnl This canonical name can be used to select a particular assembly language dnl source file that will interoperate with C code on the given host. dnl dnl For example: dnl * 'i386' and 'sparc' are different canonical names, because code for i386 dnl will not run on SPARC CPUs and vice versa. They have different dnl instruction sets. dnl * 'sparc' and 'sparc64' are different canonical names, because code for dnl 'sparc' and code for 'sparc64' cannot be linked together: 'sparc' code dnl contains 32-bit instructions, whereas 'sparc64' code contains 64-bit dnl instructions. A process on a SPARC CPU can be in 32-bit mode or in 64-bit dnl mode, but not both. dnl * 'mips' and 'mipsn32' are different canonical names, because they use dnl different argument passing and return conventions for C functions, and dnl although the instruction set of 'mips' is a large subset of the dnl instruction set of 'mipsn32'. dnl * 'mipsn32' and 'mips64' are different canonical names, because they use dnl different sizes for the C types like 'int' and 'void *', and although dnl the instruction sets of 'mipsn32' and 'mips64' are the same. dnl * The same canonical name is used for different endiannesses. You can dnl determine the endianness through preprocessor symbols: dnl - 'arm': test __ARMEL__. dnl - 'mips', 'mipsn32', 'mips64': test _MIPSEB vs. _MIPSEL. dnl - 'powerpc64': test _BIG_ENDIAN vs. _LITTLE_ENDIAN. dnl * The same name 'i386' is used for CPUs of type i386, i486, i586 dnl (Pentium), AMD K7, Pentium II, Pentium IV, etc., because dnl - Instructions that do not exist on all of these CPUs (cmpxchg, dnl MMX, SSE, SSE2, 3DNow! etc.) are not frequently used. If your dnl assembly language source files use such instructions, you will dnl need to make the distinction. dnl - Speed of execution of the common instruction set is reasonable across dnl the entire family of CPUs. If you have assembly language source files dnl that are optimized for particular CPU types (like GNU gmp has), you dnl will need to make the distinction. dnl See <https://en.wikipedia.org/wiki/X86_instruction_listings>. AC_DEFUN([gl_HOST_CPU_C_ABI], [ AC_REQUIRE([AC_CANONICAL_HOST]) AC_REQUIRE([gl_C_ASM]) AC_CACHE_CHECK([host CPU and C ABI], [gl_cv_host_cpu_c_abi], [case "$host_cpu" in changequote(,)dnl i[34567]86 ) changequote([,])dnl gl_cv_host_cpu_c_abi=i386 ;; x86_64 ) # On x86_64 systems, the C compiler may be generating code in one of # these ABIs: # - 64-bit instruction set, 64-bit pointers, 64-bit 'long': x86_64. # - 64-bit instruction set, 64-bit pointers, 32-bit 'long': x86_64 # with native Windows (mingw, MSVC). # - 64-bit instruction set, 32-bit pointers, 32-bit 'long': x86_64-x32. # - 32-bit instruction set, 32-bit pointers, 32-bit 'long': i386. AC_COMPILE_IFELSE( [AC_LANG_SOURCE( [[#if (defined __x86_64__ || defined __amd64__ \ || defined _M_X64 || defined _M_AMD64) int ok; #else error fail #endif ]])], [AC_COMPILE_IFELSE( [AC_LANG_SOURCE( [[#if defined __ILP32__ || defined _ILP32 int ok; #else error fail #endif ]])], [gl_cv_host_cpu_c_abi=x86_64-x32], [gl_cv_host_cpu_c_abi=x86_64])], [gl_cv_host_cpu_c_abi=i386]) ;; changequote(,)dnl alphaev[4-8] | alphaev56 | alphapca5[67] | alphaev6[78] ) changequote([,])dnl gl_cv_host_cpu_c_abi=alpha ;; arm* | aarch64 ) # Assume arm with EABI. # On arm64 systems, the C compiler may be generating code in one of # these ABIs: # - aarch64 instruction set, 64-bit pointers, 64-bit 'long': arm64. # - aarch64 instruction set, 32-bit pointers, 32-bit 'long': arm64-ilp32. # - 32-bit instruction set, 32-bit pointers, 32-bit 'long': arm or armhf. AC_COMPILE_IFELSE( [AC_LANG_SOURCE( [[#ifdef __aarch64__ int ok; #else error fail #endif ]])], [AC_COMPILE_IFELSE( [AC_LANG_SOURCE( [[#if defined __ILP32__ || defined _ILP32 int ok; #else error fail #endif ]])], [gl_cv_host_cpu_c_abi=arm64-ilp32], [gl_cv_host_cpu_c_abi=arm64])], [# Don't distinguish little-endian and big-endian arm, since they # don't require different machine code for simple operations and # since the user can distinguish them through the preprocessor # defines __ARMEL__ vs. __ARMEB__. # But distinguish arm which passes floating-point arguments and # return values in integer registers (r0, r1, ...) - this is # gcc -mfloat-abi=soft or gcc -mfloat-abi=softfp - from arm which # passes them in float registers (s0, s1, ...) and double registers # (d0, d1, ...) - this is gcc -mfloat-abi=hard. GCC 4.6 or newer # sets the preprocessor defines __ARM_PCS (for the first case) and # __ARM_PCS_VFP (for the second case), but older GCC does not. echo 'double ddd; void func (double dd) { ddd = dd; }' > conftest.c # Look for a reference to the register d0 in the .s file. AC_TRY_COMMAND(${CC-cc} $CFLAGS $CPPFLAGS $gl_c_asm_opt conftest.c) >/dev/null 2>&1 if LC_ALL=C grep 'd0,' conftest.$gl_asmext >/dev/null; then gl_cv_host_cpu_c_abi=armhf else gl_cv_host_cpu_c_abi=arm fi rm -f conftest* ]) ;; hppa1.0 | hppa1.1 | hppa2.0* | hppa64 ) # On hppa, the C compiler may be generating 32-bit code or 64-bit # code. In the latter case, it defines _LP64 and __LP64__. AC_COMPILE_IFELSE( [AC_LANG_SOURCE( [[#ifdef __LP64__ int ok; #else error fail #endif ]])], [gl_cv_host_cpu_c_abi=hppa64], [gl_cv_host_cpu_c_abi=hppa]) ;; ia64* ) # On ia64 on HP-UX, the C compiler may be generating 64-bit code or # 32-bit code. In the latter case, it defines _ILP32. AC_COMPILE_IFELSE( [AC_LANG_SOURCE( [[#ifdef _ILP32 int ok; #else error fail #endif ]])], [gl_cv_host_cpu_c_abi=ia64-ilp32], [gl_cv_host_cpu_c_abi=ia64]) ;; mips* ) # We should also check for (_MIPS_SZPTR == 64), but gcc keeps this # at 32. AC_COMPILE_IFELSE( [AC_LANG_SOURCE( [[#if defined _MIPS_SZLONG && (_MIPS_SZLONG == 64) int ok; #else error fail #endif ]])], [gl_cv_host_cpu_c_abi=mips64], [# In the n32 ABI, _ABIN32 is defined, _ABIO32 is not defined (but # may later get defined by <sgidefs.h>), and _MIPS_SIM == _ABIN32. # In the 32 ABI, _ABIO32 is defined, _ABIN32 is not defined (but # may later get defined by <sgidefs.h>), and _MIPS_SIM == _ABIO32. AC_COMPILE_IFELSE( [AC_LANG_SOURCE( [[#if (_MIPS_SIM == _ABIN32) int ok; #else error fail #endif ]])], [gl_cv_host_cpu_c_abi=mipsn32], [gl_cv_host_cpu_c_abi=mips])]) ;; powerpc* ) # Different ABIs are in use on AIX vs. Mac OS X vs. Linux,*BSD. # No need to distinguish them here; the caller may distinguish # them based on the OS. # On powerpc64 systems, the C compiler may still be generating # 32-bit code. And on powerpc-ibm-aix systems, the C compiler may # be generating 64-bit code. AC_COMPILE_IFELSE( [AC_LANG_SOURCE( [[#if defined __powerpc64__ || defined _ARCH_PPC64 int ok; #else error fail #endif ]])], [# On powerpc64, there are two ABIs on Linux: The AIX compatible # one and the ELFv2 one. The latter defines _CALL_ELF=2. AC_COMPILE_IFELSE( [AC_LANG_SOURCE( [[#if defined _CALL_ELF && _CALL_ELF == 2 int ok; #else error fail #endif ]])], [gl_cv_host_cpu_c_abi=powerpc64-elfv2], [gl_cv_host_cpu_c_abi=powerpc64]) ], [gl_cv_host_cpu_c_abi=powerpc]) ;; rs6000 ) gl_cv_host_cpu_c_abi=powerpc ;; riscv32 | riscv64 ) # There are 2 architectures (with variants): rv32* and rv64*. AC_COMPILE_IFELSE( [AC_LANG_SOURCE( [[#if __riscv_xlen == 64 int ok; #else error fail #endif ]])], [cpu=riscv64], [cpu=riscv32]) # There are 6 ABIs: ilp32, ilp32f, ilp32d, lp64, lp64f, lp64d. # Size of 'long' and 'void *': AC_COMPILE_IFELSE( [AC_LANG_SOURCE( [[#if defined __LP64__ int ok; #else error fail #endif ]])], [main_abi=lp64], [main_abi=ilp32]) # Float ABIs: # __riscv_float_abi_double: # 'float' and 'double' are passed in floating-point registers. # __riscv_float_abi_single: # 'float' are passed in floating-point registers. # __riscv_float_abi_soft: # No values are passed in floating-point registers. AC_COMPILE_IFELSE( [AC_LANG_SOURCE( [[#if defined __riscv_float_abi_double int ok; #else error fail #endif ]])], [float_abi=d], [AC_COMPILE_IFELSE( [AC_LANG_SOURCE( [[#if defined __riscv_float_abi_single int ok; #else error fail #endif ]])], [float_abi=f], [float_abi='']) ]) gl_cv_host_cpu_c_abi="${cpu}-${main_abi}${float_abi}" ;; s390* ) # On s390x, the C compiler may be generating 64-bit (= s390x) code # or 31-bit (= s390) code. AC_COMPILE_IFELSE( [AC_LANG_SOURCE( [[#if defined __LP64__ || defined __s390x__ int ok; #else error fail #endif ]])], [gl_cv_host_cpu_c_abi=s390x], [gl_cv_host_cpu_c_abi=s390]) ;; sparc | sparc64 ) # UltraSPARCs running Linux have `uname -m` = "sparc64", but the # C compiler still generates 32-bit code. AC_COMPILE_IFELSE( [AC_LANG_SOURCE( [[#if defined __sparcv9 || defined __arch64__ int ok; #else error fail #endif ]])], [gl_cv_host_cpu_c_abi=sparc64], [gl_cv_host_cpu_c_abi=sparc]) ;; *) gl_cv_host_cpu_c_abi="$host_cpu" ;; esac ]) dnl In most cases, $HOST_CPU and $HOST_CPU_C_ABI are the same. HOST_CPU=`echo "$gl_cv_host_cpu_c_abi" | sed -e 's/-.*//'` HOST_CPU_C_ABI="$gl_cv_host_cpu_c_abi" AC_SUBST([HOST_CPU]) AC_SUBST([HOST_CPU_C_ABI]) # This was # AC_DEFINE_UNQUOTED([__${HOST_CPU}__]) # AC_DEFINE_UNQUOTED([__${HOST_CPU_C_ABI}__]) # earlier, but KAI C++ 3.2d doesn't like this. sed -e 's/-/_/g' >> confdefs.h <<EOF #ifndef __${HOST_CPU}__ #define __${HOST_CPU}__ 1 #endif #ifndef __${HOST_CPU_C_ABI}__ #define __${HOST_CPU_C_ABI}__ 1 #endif EOF AH_TOP([/* CPU and C ABI indicator */ #ifndef __i386__ #undef __i386__ #endif #ifndef __x86_64_x32__ #undef __x86_64_x32__ #endif #ifndef __x86_64__ #undef __x86_64__ #endif #ifndef __alpha__ #undef __alpha__ #endif #ifndef __arm__ #undef __arm__ #endif #ifndef __armhf__ #undef __armhf__ #endif #ifndef __arm64_ilp32__ #undef __arm64_ilp32__ #endif #ifndef __arm64__ #undef __arm64__ #endif #ifndef __hppa__ #undef __hppa__ #endif #ifndef __hppa64__ #undef __hppa64__ #endif #ifndef __ia64_ilp32__ #undef __ia64_ilp32__ #endif #ifndef __ia64__ #undef __ia64__ #endif #ifndef __m68k__ #undef __m68k__ #endif #ifndef __mips__ #undef __mips__ #endif #ifndef __mipsn32__ #undef __mipsn32__ #endif #ifndef __mips64__ #undef __mips64__ #endif #ifndef __powerpc__ #undef __powerpc__ #endif #ifndef __powerpc64__ #undef __powerpc64__ #endif #ifndef __powerpc64_elfv2__ #undef __powerpc64_elfv2__ #endif #ifndef __riscv32__ #undef __riscv32__ #endif #ifndef __riscv64__ #undef __riscv64__ #endif #ifndef __riscv32_ilp32__ #undef __riscv32_ilp32__ #endif #ifndef __riscv32_ilp32f__ #undef __riscv32_ilp32f__ #endif #ifndef __riscv32_ilp32d__ #undef __riscv32_ilp32d__ #endif #ifndef __riscv64_ilp32__ #undef __riscv64_ilp32__ #endif #ifndef __riscv64_ilp32f__ #undef __riscv64_ilp32f__ #endif #ifndef __riscv64_ilp32d__ #undef __riscv64_ilp32d__ #endif #ifndef __riscv64_lp64__ #undef __riscv64_lp64__ #endif #ifndef __riscv64_lp64f__ #undef __riscv64_lp64f__ #endif #ifndef __riscv64_lp64d__ #undef __riscv64_lp64d__ #endif #ifndef __s390__ #undef __s390__ #endif #ifndef __s390x__ #undef __s390x__ #endif #ifndef __sh__ #undef __sh__ #endif #ifndef __sparc__ #undef __sparc__ #endif #ifndef __sparc64__ #undef __sparc64__ #endif ]) ]) dnl Sets the HOST_CPU_C_ABI_32BIT variable to 'yes' if the C language ABI dnl (application binary interface) is a 32-bit one, to 'no' if it is a 64-bit dnl one, or to 'unknown' if unknown. dnl This is a simplified variant of gl_HOST_CPU_C_ABI. AC_DEFUN([gl_HOST_CPU_C_ABI_32BIT], [ AC_REQUIRE([AC_CANONICAL_HOST]) AC_CACHE_CHECK([32-bit host C ABI], [gl_cv_host_cpu_c_abi_32bit], [if test -n "$gl_cv_host_cpu_c_abi"; then case "$gl_cv_host_cpu_c_abi" in i386 | x86_64-x32 | arm | armhf | arm64-ilp32 | hppa | ia64-ilp32 | mips | mipsn32 | powerpc | riscv*-ilp32* | s390 | sparc) gl_cv_host_cpu_c_abi_32bit=yes ;; x86_64 | alpha | arm64 | hppa64 | ia64 | mips64 | powerpc64 | powerpc64-elfv2 | riscv*-lp64* | s390x | sparc64 ) gl_cv_host_cpu_c_abi_32bit=no ;; *) gl_cv_host_cpu_c_abi_32bit=unknown ;; esac else case "$host_cpu" in # CPUs that only support a 32-bit ABI. arc \ | bfin \ | cris* \ | csky \ | epiphany \ | ft32 \ | h8300 \ | m68k \ | microblaze | microblazeel \ | nds32 | nds32le | nds32be \ | nios2 | nios2eb | nios2el \ | or1k* \ | or32 \ | sh | sh[1234] | sh[1234]e[lb] \ | tic6x \ | xtensa* ) gl_cv_host_cpu_c_abi_32bit=yes ;; # CPUs that only support a 64-bit ABI. changequote(,)dnl alpha | alphaev[4-8] | alphaev56 | alphapca5[67] | alphaev6[78] \ | mmix ) changequote([,])dnl gl_cv_host_cpu_c_abi_32bit=no ;; changequote(,)dnl i[34567]86 ) changequote([,])dnl gl_cv_host_cpu_c_abi_32bit=yes ;; x86_64 ) # On x86_64 systems, the C compiler may be generating code in one of # these ABIs: # - 64-bit instruction set, 64-bit pointers, 64-bit 'long': x86_64. # - 64-bit instruction set, 64-bit pointers, 32-bit 'long': x86_64 # with native Windows (mingw, MSVC). # - 64-bit instruction set, 32-bit pointers, 32-bit 'long': x86_64-x32. # - 32-bit instruction set, 32-bit pointers, 32-bit 'long': i386. AC_COMPILE_IFELSE( [AC_LANG_SOURCE( [[#if (defined __x86_64__ || defined __amd64__ \ || defined _M_X64 || defined _M_AMD64) \ && !(defined __ILP32__ || defined _ILP32) int ok; #else error fail #endif ]])], [gl_cv_host_cpu_c_abi_32bit=no], [gl_cv_host_cpu_c_abi_32bit=yes]) ;; arm* | aarch64 ) # Assume arm with EABI. # On arm64 systems, the C compiler may be generating code in one of # these ABIs: # - aarch64 instruction set, 64-bit pointers, 64-bit 'long': arm64. # - aarch64 instruction set, 32-bit pointers, 32-bit 'long': arm64-ilp32. # - 32-bit instruction set, 32-bit pointers, 32-bit 'long': arm or armhf. AC_COMPILE_IFELSE( [AC_LANG_SOURCE( [[#if defined __aarch64__ && !(defined __ILP32__ || defined _ILP32) int ok; #else error fail #endif ]])], [gl_cv_host_cpu_c_abi_32bit=no], [gl_cv_host_cpu_c_abi_32bit=yes]) ;; hppa1.0 | hppa1.1 | hppa2.0* | hppa64 ) # On hppa, the C compiler may be generating 32-bit code or 64-bit # code. In the latter case, it defines _LP64 and __LP64__. AC_COMPILE_IFELSE( [AC_LANG_SOURCE( [[#ifdef __LP64__ int ok; #else error fail #endif ]])], [gl_cv_host_cpu_c_abi_32bit=no], [gl_cv_host_cpu_c_abi_32bit=yes]) ;; ia64* ) # On ia64 on HP-UX, the C compiler may be generating 64-bit code or # 32-bit code. In the latter case, it defines _ILP32. AC_COMPILE_IFELSE( [AC_LANG_SOURCE( [[#ifdef _ILP32 int ok; #else error fail #endif ]])], [gl_cv_host_cpu_c_abi_32bit=yes], [gl_cv_host_cpu_c_abi_32bit=no]) ;; mips* ) # We should also check for (_MIPS_SZPTR == 64), but gcc keeps this # at 32. AC_COMPILE_IFELSE( [AC_LANG_SOURCE( [[#if defined _MIPS_SZLONG && (_MIPS_SZLONG == 64) int ok; #else error fail #endif ]])], [gl_cv_host_cpu_c_abi_32bit=no], [gl_cv_host_cpu_c_abi_32bit=yes]) ;; powerpc* ) # Different ABIs are in use on AIX vs. Mac OS X vs. Linux,*BSD. # No need to distinguish them here; the caller may distinguish # them based on the OS. # On powerpc64 systems, the C compiler may still be generating # 32-bit code. And on powerpc-ibm-aix systems, the C compiler may # be generating 64-bit code. AC_COMPILE_IFELSE( [AC_LANG_SOURCE( [[#if defined __powerpc64__ || defined _ARCH_PPC64 int ok; #else error fail #endif ]])], [gl_cv_host_cpu_c_abi_32bit=no], [gl_cv_host_cpu_c_abi_32bit=yes]) ;; rs6000 ) gl_cv_host_cpu_c_abi_32bit=yes ;; riscv32 | riscv64 ) # There are 6 ABIs: ilp32, ilp32f, ilp32d, lp64, lp64f, lp64d. # Size of 'long' and 'void *': AC_COMPILE_IFELSE( [AC_LANG_SOURCE( [[#if defined __LP64__ int ok; #else error fail #endif ]])], [gl_cv_host_cpu_c_abi_32bit=no], [gl_cv_host_cpu_c_abi_32bit=yes]) ;; s390* ) # On s390x, the C compiler may be generating 64-bit (= s390x) code # or 31-bit (= s390) code. AC_COMPILE_IFELSE( [AC_LANG_SOURCE( [[#if defined __LP64__ || defined __s390x__ int ok; #else error fail #endif ]])], [gl_cv_host_cpu_c_abi_32bit=no], [gl_cv_host_cpu_c_abi_32bit=yes]) ;; sparc | sparc64 ) # UltraSPARCs running Linux have `uname -m` = "sparc64", but the # C compiler still generates 32-bit code. AC_COMPILE_IFELSE( [AC_LANG_SOURCE( [[#if defined __sparcv9 || defined __arch64__ int ok; #else error fail #endif ]])], [gl_cv_host_cpu_c_abi_32bit=no], [gl_cv_host_cpu_c_abi_32bit=yes]) ;; *) gl_cv_host_cpu_c_abi_32bit=unknown ;; esac fi ]) HOST_CPU_C_ABI_32BIT="$gl_cv_host_cpu_c_abi_32bit" ]) ������������������������������������������������������������������������������������������������webdar-1.0.0/m4/progtest.m4�������������������������������������������������������������������������0000644�0001750�0001752�00000006022�15045134056�012333� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# progtest.m4 serial 8 (gettext-0.20.2) dnl Copyright (C) 1996-2003, 2005, 2008-2020 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl dnl This file can be used in projects which are not available under dnl the GNU General Public License or the GNU Lesser General Public dnl License but which still want to provide support for the GNU gettext dnl functionality. dnl Please note that the actual code of the GNU gettext library is covered dnl by the GNU Lesser General Public License, and the rest of the GNU dnl gettext package is covered by the GNU General Public License. dnl They are *not* in the public domain. dnl Authors: dnl Ulrich Drepper <drepper@cygnus.com>, 1996. AC_PREREQ([2.50]) # Search path for a program which passes the given test. dnl AM_PATH_PROG_WITH_TEST(VARIABLE, PROG-TO-CHECK-FOR, dnl TEST-PERFORMED-ON-FOUND_PROGRAM [, VALUE-IF-NOT-FOUND [, PATH]]) AC_DEFUN([AM_PATH_PROG_WITH_TEST], [ # Prepare PATH_SEPARATOR. # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then # Determine PATH_SEPARATOR by trying to find /bin/sh in a PATH which # contains only /bin. Note that ksh looks also at the FPATH variable, # so we have to set that as well for the test. PATH_SEPARATOR=: (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 \ && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 \ || PATH_SEPARATOR=';' } fi # Find out how to test for executable files. Don't use a zero-byte file, # as systems may use methods other than mode bits to determine executability. cat >conf$$.file <<_ASEOF #! /bin/sh exit 0 _ASEOF chmod +x conf$$.file if test -x conf$$.file >/dev/null 2>&1; then ac_executable_p="test -x" else ac_executable_p="test -f" fi rm -f conf$$.file # Extract the first word of "$2", so it can be a program name with args. set dummy $2; ac_word=[$]2 AC_MSG_CHECKING([for $ac_word]) AC_CACHE_VAL([ac_cv_path_$1], [case "[$]$1" in [[\\/]]* | ?:[[\\/]]*) ac_cv_path_$1="[$]$1" # Let the user override the test with a path. ;; *) ac_save_IFS="$IFS"; IFS=$PATH_SEPARATOR for ac_dir in ifelse([$5], , $PATH, [$5]); do IFS="$ac_save_IFS" test -z "$ac_dir" && ac_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $ac_executable_p "$ac_dir/$ac_word$ac_exec_ext"; then echo "$as_me: trying $ac_dir/$ac_word..." >&AS_MESSAGE_LOG_FD if [$3]; then ac_cv_path_$1="$ac_dir/$ac_word$ac_exec_ext" break 2 fi fi done done IFS="$ac_save_IFS" dnl If no 4th arg is given, leave the cache variable unset, dnl so AC_PATH_PROGS will keep looking. ifelse([$4], , , [ test -z "[$]ac_cv_path_$1" && ac_cv_path_$1="$4" ])dnl ;; esac])dnl $1="$ac_cv_path_$1" if test ifelse([$4], , [-n "[$]$1"], ["[$]$1" != "$4"]); then AC_MSG_RESULT([$][$1]) else AC_MSG_RESULT([no]) fi AC_SUBST([$1])dnl ]) ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������webdar-1.0.0/m4/ChangeLog���������������������������������������������������������������������������0000644�0001750�0001752�00000000757�15045134056�012005� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������2025-08-07 gettextize <bug-gnu-gettext@gnu.org> * gettext.m4: New file, from gettext-0.21. * host-cpu-c-abi.m4: New file, from gettext-0.21. * iconv.m4: New file, from gettext-0.21. * intlmacosx.m4: New file, from gettext-0.21. * lib-ld.m4: New file, from gettext-0.21. * lib-link.m4: New file, from gettext-0.21. * lib-prefix.m4: New file, from gettext-0.21. * nls.m4: New file, from gettext-0.21. * po.m4: New file, from gettext-0.21. * progtest.m4: New file, from gettext-0.21. �����������������webdar-1.0.0/m4/nls.m4������������������������������������������������������������������������������0000644�0001750�0001752�00000002322�15045134056�011257� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# nls.m4 serial 6 (gettext-0.20.2) dnl Copyright (C) 1995-2003, 2005-2006, 2008-2014, 2016, 2019-2020 Free dnl Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl dnl This file can be used in projects which are not available under dnl the GNU General Public License or the GNU Lesser General Public dnl License but which still want to provide support for the GNU gettext dnl functionality. dnl Please note that the actual code of the GNU gettext library is covered dnl by the GNU Lesser General Public License, and the rest of the GNU dnl gettext package is covered by the GNU General Public License. dnl They are *not* in the public domain. dnl Authors: dnl Ulrich Drepper <drepper@cygnus.com>, 1995-2000. dnl Bruno Haible <haible@clisp.cons.org>, 2000-2003. AC_PREREQ([2.50]) AC_DEFUN([AM_NLS], [ AC_MSG_CHECKING([whether NLS is requested]) dnl Default is enabled NLS AC_ARG_ENABLE([nls], [ --disable-nls do not use Native Language Support], USE_NLS=$enableval, USE_NLS=yes) AC_MSG_RESULT([$USE_NLS]) AC_SUBST([USE_NLS]) ]) ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������webdar-1.0.0/m4/po.m4�������������������������������������������������������������������������������0000644�0001750�0001752�00000044617�15045134056�011116� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# po.m4 serial 31 (gettext-0.20.2) dnl Copyright (C) 1995-2014, 2016, 2018-2020 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl dnl This file can be used in projects which are not available under dnl the GNU General Public License or the GNU Lesser General Public dnl License but which still want to provide support for the GNU gettext dnl functionality. dnl Please note that the actual code of the GNU gettext library is covered dnl by the GNU Lesser General Public License, and the rest of the GNU dnl gettext package is covered by the GNU General Public License. dnl They are *not* in the public domain. dnl Authors: dnl Ulrich Drepper <drepper@cygnus.com>, 1995-2000. dnl Bruno Haible <haible@clisp.cons.org>, 2000-2003. AC_PREREQ([2.60]) dnl Checks for all prerequisites of the po subdirectory. AC_DEFUN([AM_PO_SUBDIRS], [ AC_REQUIRE([AC_PROG_MAKE_SET])dnl AC_REQUIRE([AC_PROG_INSTALL])dnl AC_REQUIRE([AC_PROG_MKDIR_P])dnl AC_REQUIRE([AC_PROG_SED])dnl AC_REQUIRE([AM_NLS])dnl dnl Release version of the gettext macros. This is used to ensure that dnl the gettext macros and po/Makefile.in.in are in sync. AC_SUBST([GETTEXT_MACRO_VERSION], [0.20]) dnl Perform the following tests also if --disable-nls has been given, dnl because they are needed for "make dist" to work. dnl Search for GNU msgfmt in the PATH. dnl The first test excludes Solaris msgfmt and early GNU msgfmt versions. dnl The second test excludes FreeBSD msgfmt. AM_PATH_PROG_WITH_TEST(MSGFMT, msgfmt, [$ac_dir/$ac_word --statistics /dev/null >&]AS_MESSAGE_LOG_FD[ 2>&1 && (if $ac_dir/$ac_word --statistics /dev/null 2>&1 >/dev/null | grep usage >/dev/null; then exit 1; else exit 0; fi)], :) AC_PATH_PROG([GMSGFMT], [gmsgfmt], [$MSGFMT]) dnl Test whether it is GNU msgfmt >= 0.15. changequote(,)dnl case `$GMSGFMT --version | sed 1q | sed -e 's,^[^0-9]*,,'` in '' | 0.[0-9] | 0.[0-9].* | 0.1[0-4] | 0.1[0-4].*) GMSGFMT_015=: ;; *) GMSGFMT_015=$GMSGFMT ;; esac changequote([,])dnl AC_SUBST([GMSGFMT_015]) dnl Search for GNU xgettext 0.12 or newer in the PATH. dnl The first test excludes Solaris xgettext and early GNU xgettext versions. dnl The second test excludes FreeBSD xgettext. AM_PATH_PROG_WITH_TEST(XGETTEXT, xgettext, [$ac_dir/$ac_word --omit-header --copyright-holder= --msgid-bugs-address= /dev/null >&]AS_MESSAGE_LOG_FD[ 2>&1 && (if $ac_dir/$ac_word --omit-header --copyright-holder= --msgid-bugs-address= /dev/null 2>&1 >/dev/null | grep usage >/dev/null; then exit 1; else exit 0; fi)], :) dnl Remove leftover from FreeBSD xgettext call. rm -f messages.po dnl Test whether it is GNU xgettext >= 0.15. changequote(,)dnl case `$XGETTEXT --version | sed 1q | sed -e 's,^[^0-9]*,,'` in '' | 0.[0-9] | 0.[0-9].* | 0.1[0-4] | 0.1[0-4].*) XGETTEXT_015=: ;; *) XGETTEXT_015=$XGETTEXT ;; esac changequote([,])dnl AC_SUBST([XGETTEXT_015]) dnl Search for GNU msgmerge 0.11 or newer in the PATH. AM_PATH_PROG_WITH_TEST(MSGMERGE, msgmerge, [$ac_dir/$ac_word --update -q /dev/null /dev/null >&]AS_MESSAGE_LOG_FD[ 2>&1], :) dnl Test whether it is GNU msgmerge >= 0.20. if LC_ALL=C $MSGMERGE --help | grep ' --for-msgfmt ' >/dev/null; then MSGMERGE_FOR_MSGFMT_OPTION='--for-msgfmt' else dnl Test whether it is GNU msgmerge >= 0.12. if LC_ALL=C $MSGMERGE --help | grep ' --no-fuzzy-matching ' >/dev/null; then MSGMERGE_FOR_MSGFMT_OPTION='--no-fuzzy-matching --no-location --quiet' else dnl With these old versions, $(MSGMERGE) $(MSGMERGE_FOR_MSGFMT_OPTION) is dnl slow. But this is not a big problem, as such old gettext versions are dnl hardly in use any more. MSGMERGE_FOR_MSGFMT_OPTION='--no-location --quiet' fi fi AC_SUBST([MSGMERGE_FOR_MSGFMT_OPTION]) dnl Support for AM_XGETTEXT_OPTION. test -n "${XGETTEXT_EXTRA_OPTIONS+set}" || XGETTEXT_EXTRA_OPTIONS= AC_SUBST([XGETTEXT_EXTRA_OPTIONS]) AC_CONFIG_COMMANDS([po-directories], [[ for ac_file in $CONFIG_FILES; do # Support "outfile[:infile[:infile...]]" case "$ac_file" in *:*) ac_file=`echo "$ac_file"|sed 's%:.*%%'` ;; esac # PO directories have a Makefile.in generated from Makefile.in.in. case "$ac_file" in */Makefile.in) # Adjust a relative srcdir. ac_dir=`echo "$ac_file"|sed 's%/[^/][^/]*$%%'` ac_dir_suffix=/`echo "$ac_dir"|sed 's%^\./%%'` ac_dots=`echo "$ac_dir_suffix"|sed 's%/[^/]*%../%g'` # In autoconf-2.13 it is called $ac_given_srcdir. # In autoconf-2.50 it is called $srcdir. test -n "$ac_given_srcdir" || ac_given_srcdir="$srcdir" case "$ac_given_srcdir" in .) top_srcdir=`echo $ac_dots|sed 's%/$%%'` ;; /*) top_srcdir="$ac_given_srcdir" ;; *) top_srcdir="$ac_dots$ac_given_srcdir" ;; esac # Treat a directory as a PO directory if and only if it has a # POTFILES.in file. This allows packages to have multiple PO # directories under different names or in different locations. if test -f "$ac_given_srcdir/$ac_dir/POTFILES.in"; then rm -f "$ac_dir/POTFILES" test -n "$as_me" && echo "$as_me: creating $ac_dir/POTFILES" || echo "creating $ac_dir/POTFILES" gt_tab=`printf '\t'` cat "$ac_given_srcdir/$ac_dir/POTFILES.in" | sed -e "/^#/d" -e "/^[ ${gt_tab}]*\$/d" -e "s,.*, $top_srcdir/& \\\\," | sed -e "\$s/\(.*\) \\\\/\1/" > "$ac_dir/POTFILES" POMAKEFILEDEPS="POTFILES.in" # ALL_LINGUAS, POFILES, UPDATEPOFILES, DUMMYPOFILES, GMOFILES depend # on $ac_dir but don't depend on user-specified configuration # parameters. if test -f "$ac_given_srcdir/$ac_dir/LINGUAS"; then # The LINGUAS file contains the set of available languages. if test -n "$OBSOLETE_ALL_LINGUAS"; then test -n "$as_me" && echo "$as_me: setting ALL_LINGUAS in configure.in is obsolete" || echo "setting ALL_LINGUAS in configure.in is obsolete" fi ALL_LINGUAS=`sed -e "/^#/d" -e "s/#.*//" "$ac_given_srcdir/$ac_dir/LINGUAS"` POMAKEFILEDEPS="$POMAKEFILEDEPS LINGUAS" else # The set of available languages was given in configure.in. ALL_LINGUAS=$OBSOLETE_ALL_LINGUAS fi # Compute POFILES # as $(foreach lang, $(ALL_LINGUAS), $(srcdir)/$(lang).po) # Compute UPDATEPOFILES # as $(foreach lang, $(ALL_LINGUAS), $(lang).po-update) # Compute DUMMYPOFILES # as $(foreach lang, $(ALL_LINGUAS), $(lang).nop) # Compute GMOFILES # as $(foreach lang, $(ALL_LINGUAS), $(srcdir)/$(lang).gmo) case "$ac_given_srcdir" in .) srcdirpre= ;; *) srcdirpre='$(srcdir)/' ;; esac POFILES= UPDATEPOFILES= DUMMYPOFILES= GMOFILES= for lang in $ALL_LINGUAS; do POFILES="$POFILES $srcdirpre$lang.po" UPDATEPOFILES="$UPDATEPOFILES $lang.po-update" DUMMYPOFILES="$DUMMYPOFILES $lang.nop" GMOFILES="$GMOFILES $srcdirpre$lang.gmo" done # CATALOGS depends on both $ac_dir and the user's LINGUAS # environment variable. INST_LINGUAS= if test -n "$ALL_LINGUAS"; then for presentlang in $ALL_LINGUAS; do useit=no if test "%UNSET%" != "$LINGUAS"; then desiredlanguages="$LINGUAS" else desiredlanguages="$ALL_LINGUAS" fi for desiredlang in $desiredlanguages; do # Use the presentlang catalog if desiredlang is # a. equal to presentlang, or # b. a variant of presentlang (because in this case, # presentlang can be used as a fallback for messages # which are not translated in the desiredlang catalog). case "$desiredlang" in "$presentlang"*) useit=yes;; esac done if test $useit = yes; then INST_LINGUAS="$INST_LINGUAS $presentlang" fi done fi CATALOGS= if test -n "$INST_LINGUAS"; then for lang in $INST_LINGUAS; do CATALOGS="$CATALOGS $lang.gmo" done fi test -n "$as_me" && echo "$as_me: creating $ac_dir/Makefile" || echo "creating $ac_dir/Makefile" sed -e "/^POTFILES =/r $ac_dir/POTFILES" -e "/^# Makevars/r $ac_given_srcdir/$ac_dir/Makevars" -e "s|@POFILES@|$POFILES|g" -e "s|@UPDATEPOFILES@|$UPDATEPOFILES|g" -e "s|@DUMMYPOFILES@|$DUMMYPOFILES|g" -e "s|@GMOFILES@|$GMOFILES|g" -e "s|@CATALOGS@|$CATALOGS|g" -e "s|@POMAKEFILEDEPS@|$POMAKEFILEDEPS|g" "$ac_dir/Makefile.in" > "$ac_dir/Makefile" for f in "$ac_given_srcdir/$ac_dir"/Rules-*; do if test -f "$f"; then case "$f" in *.orig | *.bak | *~) ;; *) cat "$f" >> "$ac_dir/Makefile" ;; esac fi done fi ;; esac done]], [# Capture the value of obsolete ALL_LINGUAS because we need it to compute # POFILES, UPDATEPOFILES, DUMMYPOFILES, GMOFILES, CATALOGS. OBSOLETE_ALL_LINGUAS="$ALL_LINGUAS" # Capture the value of LINGUAS because we need it to compute CATALOGS. LINGUAS="${LINGUAS-%UNSET%}" ]) ]) dnl Postprocesses a Makefile in a directory containing PO files. AC_DEFUN([AM_POSTPROCESS_PO_MAKEFILE], [ # When this code is run, in config.status, two variables have already been # set: # - OBSOLETE_ALL_LINGUAS is the value of LINGUAS set in configure.in, # - LINGUAS is the value of the environment variable LINGUAS at configure # time. changequote(,)dnl # Adjust a relative srcdir. ac_dir=`echo "$ac_file"|sed 's%/[^/][^/]*$%%'` ac_dir_suffix=/`echo "$ac_dir"|sed 's%^\./%%'` ac_dots=`echo "$ac_dir_suffix"|sed 's%/[^/]*%../%g'` # In autoconf-2.13 it is called $ac_given_srcdir. # In autoconf-2.50 it is called $srcdir. test -n "$ac_given_srcdir" || ac_given_srcdir="$srcdir" case "$ac_given_srcdir" in .) top_srcdir=`echo $ac_dots|sed 's%/$%%'` ;; /*) top_srcdir="$ac_given_srcdir" ;; *) top_srcdir="$ac_dots$ac_given_srcdir" ;; esac # Find a way to echo strings without interpreting backslash. if test "X`(echo '\t') 2>/dev/null`" = 'X\t'; then gt_echo='echo' else if test "X`(printf '%s\n' '\t') 2>/dev/null`" = 'X\t'; then gt_echo='printf %s\n' else echo_func () { cat <<EOT $* EOT } gt_echo='echo_func' fi fi # A sed script that extracts the value of VARIABLE from a Makefile. tab=`printf '\t'` sed_x_variable=' # Test if the hold space is empty. x s/P/P/ x ta # Yes it was empty. Look if we have the expected variable definition. /^['"${tab}"' ]*VARIABLE['"${tab}"' ]*=/{ # Seen the first line of the variable definition. s/^['"${tab}"' ]*VARIABLE['"${tab}"' ]*=// ba } bd :a # Here we are processing a line from the variable definition. # Remove comment, more precisely replace it with a space. s/#.*$/ / # See if the line ends in a backslash. tb :b s/\\$// # Print the line, without the trailing backslash. p tc # There was no trailing backslash. The end of the variable definition is # reached. Clear the hold space. s/^.*$// x bd :c # A trailing backslash means that the variable definition continues in the # next line. Put a nonempty string into the hold space to indicate this. s/^.*$/P/ x :d ' changequote([,])dnl # Set POTFILES to the value of the Makefile variable POTFILES. sed_x_POTFILES=`$gt_echo "$sed_x_variable" | sed -e '/^ *#/d' -e 's/VARIABLE/POTFILES/g'` POTFILES=`sed -n -e "$sed_x_POTFILES" < "$ac_file"` # Compute POTFILES_DEPS as # $(foreach file, $(POTFILES), $(top_srcdir)/$(file)) POTFILES_DEPS= for file in $POTFILES; do POTFILES_DEPS="$POTFILES_DEPS "'$(top_srcdir)/'"$file" done POMAKEFILEDEPS="" if test -n "$OBSOLETE_ALL_LINGUAS"; then test -n "$as_me" && echo "$as_me: setting ALL_LINGUAS in configure.in is obsolete" || echo "setting ALL_LINGUAS in configure.in is obsolete" fi if test -f "$ac_given_srcdir/$ac_dir/LINGUAS"; then # The LINGUAS file contains the set of available languages. ALL_LINGUAS=`sed -e "/^#/d" -e "s/#.*//" "$ac_given_srcdir/$ac_dir/LINGUAS"` POMAKEFILEDEPS="$POMAKEFILEDEPS LINGUAS" else # Set ALL_LINGUAS to the value of the Makefile variable LINGUAS. sed_x_LINGUAS=`$gt_echo "$sed_x_variable" | sed -e '/^ *#/d' -e 's/VARIABLE/LINGUAS/g'` ALL_LINGUAS=`sed -n -e "$sed_x_LINGUAS" < "$ac_file"` fi # Compute POFILES # as $(foreach lang, $(ALL_LINGUAS), $(srcdir)/$(lang).po) # Compute UPDATEPOFILES # as $(foreach lang, $(ALL_LINGUAS), $(lang).po-update) # Compute DUMMYPOFILES # as $(foreach lang, $(ALL_LINGUAS), $(lang).nop) # Compute GMOFILES # as $(foreach lang, $(ALL_LINGUAS), $(srcdir)/$(lang).gmo) # Compute PROPERTIESFILES # as $(foreach lang, $(ALL_LINGUAS), $(srcdir)/$(DOMAIN)_$(lang).properties) # Compute CLASSFILES # as $(foreach lang, $(ALL_LINGUAS), $(srcdir)/$(DOMAIN)_$(lang).class) # Compute QMFILES # as $(foreach lang, $(ALL_LINGUAS), $(srcdir)/$(lang).qm) # Compute MSGFILES # as $(foreach lang, $(ALL_LINGUAS), $(srcdir)/$(frob $(lang)).msg) # Compute RESOURCESDLLFILES # as $(foreach lang, $(ALL_LINGUAS), $(srcdir)/$(frob $(lang))/$(DOMAIN).resources.dll) case "$ac_given_srcdir" in .) srcdirpre= ;; *) srcdirpre='$(srcdir)/' ;; esac POFILES= UPDATEPOFILES= DUMMYPOFILES= GMOFILES= PROPERTIESFILES= CLASSFILES= QMFILES= MSGFILES= RESOURCESDLLFILES= for lang in $ALL_LINGUAS; do POFILES="$POFILES $srcdirpre$lang.po" UPDATEPOFILES="$UPDATEPOFILES $lang.po-update" DUMMYPOFILES="$DUMMYPOFILES $lang.nop" GMOFILES="$GMOFILES $srcdirpre$lang.gmo" PROPERTIESFILES="$PROPERTIESFILES \$(srcdir)/\$(DOMAIN)_$lang.properties" CLASSFILES="$CLASSFILES \$(srcdir)/\$(DOMAIN)_$lang.class" QMFILES="$QMFILES $srcdirpre$lang.qm" frobbedlang=`echo $lang | sed -e 's/\..*$//' -e 'y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/'` MSGFILES="$MSGFILES $srcdirpre$frobbedlang.msg" frobbedlang=`echo $lang | sed -e 's/_/-/g' -e 's/^sr-CS/sr-SP/' -e 's/@latin$/-Latn/' -e 's/@cyrillic$/-Cyrl/' -e 's/^sr-SP$/sr-SP-Latn/' -e 's/^uz-UZ$/uz-UZ-Latn/'` RESOURCESDLLFILES="$RESOURCESDLLFILES $srcdirpre$frobbedlang/\$(DOMAIN).resources.dll" done # CATALOGS depends on both $ac_dir and the user's LINGUAS # environment variable. INST_LINGUAS= if test -n "$ALL_LINGUAS"; then for presentlang in $ALL_LINGUAS; do useit=no if test "%UNSET%" != "$LINGUAS"; then desiredlanguages="$LINGUAS" else desiredlanguages="$ALL_LINGUAS" fi for desiredlang in $desiredlanguages; do # Use the presentlang catalog if desiredlang is # a. equal to presentlang, or # b. a variant of presentlang (because in this case, # presentlang can be used as a fallback for messages # which are not translated in the desiredlang catalog). case "$desiredlang" in "$presentlang"*) useit=yes;; esac done if test $useit = yes; then INST_LINGUAS="$INST_LINGUAS $presentlang" fi done fi CATALOGS= JAVACATALOGS= QTCATALOGS= TCLCATALOGS= CSHARPCATALOGS= if test -n "$INST_LINGUAS"; then for lang in $INST_LINGUAS; do CATALOGS="$CATALOGS $lang.gmo" JAVACATALOGS="$JAVACATALOGS \$(DOMAIN)_$lang.properties" QTCATALOGS="$QTCATALOGS $lang.qm" frobbedlang=`echo $lang | sed -e 's/\..*$//' -e 'y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/'` TCLCATALOGS="$TCLCATALOGS $frobbedlang.msg" frobbedlang=`echo $lang | sed -e 's/_/-/g' -e 's/^sr-CS/sr-SP/' -e 's/@latin$/-Latn/' -e 's/@cyrillic$/-Cyrl/' -e 's/^sr-SP$/sr-SP-Latn/' -e 's/^uz-UZ$/uz-UZ-Latn/'` CSHARPCATALOGS="$CSHARPCATALOGS $frobbedlang/\$(DOMAIN).resources.dll" done fi sed -e "s|@POTFILES_DEPS@|$POTFILES_DEPS|g" -e "s|@POFILES@|$POFILES|g" -e "s|@UPDATEPOFILES@|$UPDATEPOFILES|g" -e "s|@DUMMYPOFILES@|$DUMMYPOFILES|g" -e "s|@GMOFILES@|$GMOFILES|g" -e "s|@PROPERTIESFILES@|$PROPERTIESFILES|g" -e "s|@CLASSFILES@|$CLASSFILES|g" -e "s|@QMFILES@|$QMFILES|g" -e "s|@MSGFILES@|$MSGFILES|g" -e "s|@RESOURCESDLLFILES@|$RESOURCESDLLFILES|g" -e "s|@CATALOGS@|$CATALOGS|g" -e "s|@JAVACATALOGS@|$JAVACATALOGS|g" -e "s|@QTCATALOGS@|$QTCATALOGS|g" -e "s|@TCLCATALOGS@|$TCLCATALOGS|g" -e "s|@CSHARPCATALOGS@|$CSHARPCATALOGS|g" -e 's,^#distdir:,distdir:,' < "$ac_file" > "$ac_file.tmp" tab=`printf '\t'` if grep -l '@TCLCATALOGS@' "$ac_file" > /dev/null; then # Add dependencies that cannot be formulated as a simple suffix rule. for lang in $ALL_LINGUAS; do frobbedlang=`echo $lang | sed -e 's/\..*$//' -e 'y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/'` cat >> "$ac_file.tmp" <<EOF $frobbedlang.msg: $lang.po ${tab}@echo "\$(MSGFMT) -c --tcl -d \$(srcdir) -l $lang $srcdirpre$lang.po"; \ ${tab}\$(MSGFMT) -c --tcl -d "\$(srcdir)" -l $lang $srcdirpre$lang.po || { rm -f "\$(srcdir)/$frobbedlang.msg"; exit 1; } EOF done fi if grep -l '@CSHARPCATALOGS@' "$ac_file" > /dev/null; then # Add dependencies that cannot be formulated as a simple suffix rule. for lang in $ALL_LINGUAS; do frobbedlang=`echo $lang | sed -e 's/_/-/g' -e 's/^sr-CS/sr-SP/' -e 's/@latin$/-Latn/' -e 's/@cyrillic$/-Cyrl/' -e 's/^sr-SP$/sr-SP-Latn/' -e 's/^uz-UZ$/uz-UZ-Latn/'` cat >> "$ac_file.tmp" <<EOF $frobbedlang/\$(DOMAIN).resources.dll: $lang.po ${tab}@echo "\$(MSGFMT) -c --csharp -d \$(srcdir) -l $lang $srcdirpre$lang.po -r \$(DOMAIN)"; \ ${tab}\$(MSGFMT) -c --csharp -d "\$(srcdir)" -l $lang $srcdirpre$lang.po -r "\$(DOMAIN)" || { rm -f "\$(srcdir)/$frobbedlang.msg"; exit 1; } EOF done fi if test -n "$POMAKEFILEDEPS"; then cat >> "$ac_file.tmp" <<EOF Makefile: $POMAKEFILEDEPS EOF fi mv "$ac_file.tmp" "$ac_file" ]) dnl Initializes the accumulator used by AM_XGETTEXT_OPTION. AC_DEFUN([AM_XGETTEXT_OPTION_INIT], [ XGETTEXT_EXTRA_OPTIONS= ]) dnl Registers an option to be passed to xgettext in the po subdirectory. AC_DEFUN([AM_XGETTEXT_OPTION], [ AC_REQUIRE([AM_XGETTEXT_OPTION_INIT]) XGETTEXT_EXTRA_OPTIONS="$XGETTEXT_EXTRA_OPTIONS $1" ]) �����������������������������������������������������������������������������������������������������������������webdar-1.0.0/m4/iconv.m4����������������������������������������������������������������������������0000644�0001750�0001752�00000023003�15045134056�011600� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# iconv.m4 serial 21 dnl Copyright (C) 2000-2002, 2007-2014, 2016-2020 Free Software Foundation, dnl Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl From Bruno Haible. AC_DEFUN([AM_ICONV_LINKFLAGS_BODY], [ dnl Prerequisites of AC_LIB_LINKFLAGS_BODY. AC_REQUIRE([AC_LIB_PREPARE_PREFIX]) AC_REQUIRE([AC_LIB_RPATH]) dnl Search for libiconv and define LIBICONV, LTLIBICONV and INCICONV dnl accordingly. AC_LIB_LINKFLAGS_BODY([iconv]) ]) AC_DEFUN([AM_ICONV_LINK], [ dnl Some systems have iconv in libc, some have it in libiconv (OSF/1 and dnl those with the standalone portable GNU libiconv installed). AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles dnl Search for libiconv and define LIBICONV, LTLIBICONV and INCICONV dnl accordingly. AC_REQUIRE([AM_ICONV_LINKFLAGS_BODY]) dnl Add $INCICONV to CPPFLAGS before performing the following checks, dnl because if the user has installed libiconv and not disabled its use dnl via --without-libiconv-prefix, he wants to use it. The first dnl AC_LINK_IFELSE will then fail, the second AC_LINK_IFELSE will succeed. am_save_CPPFLAGS="$CPPFLAGS" AC_LIB_APPENDTOVAR([CPPFLAGS], [$INCICONV]) AC_CACHE_CHECK([for iconv], [am_cv_func_iconv], [ am_cv_func_iconv="no, consider installing GNU libiconv" am_cv_lib_iconv=no AC_LINK_IFELSE( [AC_LANG_PROGRAM( [[ #include <stdlib.h> #include <iconv.h> ]], [[iconv_t cd = iconv_open("",""); iconv(cd,NULL,NULL,NULL,NULL); iconv_close(cd);]])], [am_cv_func_iconv=yes]) if test "$am_cv_func_iconv" != yes; then am_save_LIBS="$LIBS" LIBS="$LIBS $LIBICONV" AC_LINK_IFELSE( [AC_LANG_PROGRAM( [[ #include <stdlib.h> #include <iconv.h> ]], [[iconv_t cd = iconv_open("",""); iconv(cd,NULL,NULL,NULL,NULL); iconv_close(cd);]])], [am_cv_lib_iconv=yes] [am_cv_func_iconv=yes]) LIBS="$am_save_LIBS" fi ]) if test "$am_cv_func_iconv" = yes; then AC_CACHE_CHECK([for working iconv], [am_cv_func_iconv_works], [ dnl This tests against bugs in AIX 5.1, AIX 6.1..7.1, HP-UX 11.11, dnl Solaris 10. am_save_LIBS="$LIBS" if test $am_cv_lib_iconv = yes; then LIBS="$LIBS $LIBICONV" fi am_cv_func_iconv_works=no for ac_iconv_const in '' 'const'; do AC_RUN_IFELSE( [AC_LANG_PROGRAM( [[ #include <iconv.h> #include <string.h> #ifndef ICONV_CONST # define ICONV_CONST $ac_iconv_const #endif ]], [[int result = 0; /* Test against AIX 5.1 bug: Failures are not distinguishable from successful returns. */ { iconv_t cd_utf8_to_88591 = iconv_open ("ISO8859-1", "UTF-8"); if (cd_utf8_to_88591 != (iconv_t)(-1)) { static ICONV_CONST char input[] = "\342\202\254"; /* EURO SIGN */ char buf[10]; ICONV_CONST char *inptr = input; size_t inbytesleft = strlen (input); char *outptr = buf; size_t outbytesleft = sizeof (buf); size_t res = iconv (cd_utf8_to_88591, &inptr, &inbytesleft, &outptr, &outbytesleft); if (res == 0) result |= 1; iconv_close (cd_utf8_to_88591); } } /* Test against Solaris 10 bug: Failures are not distinguishable from successful returns. */ { iconv_t cd_ascii_to_88591 = iconv_open ("ISO8859-1", "646"); if (cd_ascii_to_88591 != (iconv_t)(-1)) { static ICONV_CONST char input[] = "\263"; char buf[10]; ICONV_CONST char *inptr = input; size_t inbytesleft = strlen (input); char *outptr = buf; size_t outbytesleft = sizeof (buf); size_t res = iconv (cd_ascii_to_88591, &inptr, &inbytesleft, &outptr, &outbytesleft); if (res == 0) result |= 2; iconv_close (cd_ascii_to_88591); } } /* Test against AIX 6.1..7.1 bug: Buffer overrun. */ { iconv_t cd_88591_to_utf8 = iconv_open ("UTF-8", "ISO-8859-1"); if (cd_88591_to_utf8 != (iconv_t)(-1)) { static ICONV_CONST char input[] = "\304"; static char buf[2] = { (char)0xDE, (char)0xAD }; ICONV_CONST char *inptr = input; size_t inbytesleft = 1; char *outptr = buf; size_t outbytesleft = 1; size_t res = iconv (cd_88591_to_utf8, &inptr, &inbytesleft, &outptr, &outbytesleft); if (res != (size_t)(-1) || outptr - buf > 1 || buf[1] != (char)0xAD) result |= 4; iconv_close (cd_88591_to_utf8); } } #if 0 /* This bug could be worked around by the caller. */ /* Test against HP-UX 11.11 bug: Positive return value instead of 0. */ { iconv_t cd_88591_to_utf8 = iconv_open ("utf8", "iso88591"); if (cd_88591_to_utf8 != (iconv_t)(-1)) { static ICONV_CONST char input[] = "\304rger mit b\366sen B\374bchen ohne Augenma\337"; char buf[50]; ICONV_CONST char *inptr = input; size_t inbytesleft = strlen (input); char *outptr = buf; size_t outbytesleft = sizeof (buf); size_t res = iconv (cd_88591_to_utf8, &inptr, &inbytesleft, &outptr, &outbytesleft); if ((int)res > 0) result |= 8; iconv_close (cd_88591_to_utf8); } } #endif /* Test against HP-UX 11.11 bug: No converter from EUC-JP to UTF-8 is provided. */ { /* Try standardized names. */ iconv_t cd1 = iconv_open ("UTF-8", "EUC-JP"); /* Try IRIX, OSF/1 names. */ iconv_t cd2 = iconv_open ("UTF-8", "eucJP"); /* Try AIX names. */ iconv_t cd3 = iconv_open ("UTF-8", "IBM-eucJP"); /* Try HP-UX names. */ iconv_t cd4 = iconv_open ("utf8", "eucJP"); if (cd1 == (iconv_t)(-1) && cd2 == (iconv_t)(-1) && cd3 == (iconv_t)(-1) && cd4 == (iconv_t)(-1)) result |= 16; if (cd1 != (iconv_t)(-1)) iconv_close (cd1); if (cd2 != (iconv_t)(-1)) iconv_close (cd2); if (cd3 != (iconv_t)(-1)) iconv_close (cd3); if (cd4 != (iconv_t)(-1)) iconv_close (cd4); } return result; ]])], [am_cv_func_iconv_works=yes], , [case "$host_os" in aix* | hpux*) am_cv_func_iconv_works="guessing no" ;; *) am_cv_func_iconv_works="guessing yes" ;; esac]) test "$am_cv_func_iconv_works" = no || break done LIBS="$am_save_LIBS" ]) case "$am_cv_func_iconv_works" in *no) am_func_iconv=no am_cv_lib_iconv=no ;; *) am_func_iconv=yes ;; esac else am_func_iconv=no am_cv_lib_iconv=no fi if test "$am_func_iconv" = yes; then AC_DEFINE([HAVE_ICONV], [1], [Define if you have the iconv() function and it works.]) fi if test "$am_cv_lib_iconv" = yes; then AC_MSG_CHECKING([how to link with libiconv]) AC_MSG_RESULT([$LIBICONV]) else dnl If $LIBICONV didn't lead to a usable library, we don't need $INCICONV dnl either. CPPFLAGS="$am_save_CPPFLAGS" LIBICONV= LTLIBICONV= fi AC_SUBST([LIBICONV]) AC_SUBST([LTLIBICONV]) ]) dnl Define AM_ICONV using AC_DEFUN_ONCE for Autoconf >= 2.64, in order to dnl avoid warnings like dnl "warning: AC_REQUIRE: `AM_ICONV' was expanded before it was required". dnl This is tricky because of the way 'aclocal' is implemented: dnl - It requires defining an auxiliary macro whose name ends in AC_DEFUN. dnl Otherwise aclocal's initial scan pass would miss the macro definition. dnl - It requires a line break inside the AC_DEFUN_ONCE and AC_DEFUN expansions. dnl Otherwise aclocal would emit many "Use of uninitialized value $1" dnl warnings. m4_define([gl_iconv_AC_DEFUN], m4_version_prereq([2.64], [[AC_DEFUN_ONCE( [$1], [$2])]], [m4_ifdef([gl_00GNULIB], [[AC_DEFUN_ONCE( [$1], [$2])]], [[AC_DEFUN( [$1], [$2])]])])) gl_iconv_AC_DEFUN([AM_ICONV], [ AM_ICONV_LINK if test "$am_cv_func_iconv" = yes; then AC_MSG_CHECKING([for iconv declaration]) AC_CACHE_VAL([am_cv_proto_iconv], [ AC_COMPILE_IFELSE( [AC_LANG_PROGRAM( [[ #include <stdlib.h> #include <iconv.h> extern #ifdef __cplusplus "C" #endif #if defined(__STDC__) || defined(_MSC_VER) || defined(__cplusplus) size_t iconv (iconv_t cd, char * *inbuf, size_t *inbytesleft, char * *outbuf, size_t *outbytesleft); #else size_t iconv(); #endif ]], [[]])], [am_cv_proto_iconv_arg1=""], [am_cv_proto_iconv_arg1="const"]) am_cv_proto_iconv="extern size_t iconv (iconv_t cd, $am_cv_proto_iconv_arg1 char * *inbuf, size_t *inbytesleft, char * *outbuf, size_t *outbytesleft);"]) am_cv_proto_iconv=`echo "[$]am_cv_proto_iconv" | tr -s ' ' | sed -e 's/( /(/'` AC_MSG_RESULT([ $am_cv_proto_iconv]) else dnl When compiling GNU libiconv on a system that does not have iconv yet, dnl pick the POSIX compliant declaration without 'const'. am_cv_proto_iconv_arg1="" fi AC_DEFINE_UNQUOTED([ICONV_CONST], [$am_cv_proto_iconv_arg1], [Define as const if the declaration of iconv() needs const.]) dnl Also substitute ICONV_CONST in the gnulib generated <iconv.h>. m4_ifdef([gl_ICONV_H_DEFAULTS], [AC_REQUIRE([gl_ICONV_H_DEFAULTS]) if test -n "$am_cv_proto_iconv_arg1"; then ICONV_CONST="const" fi ]) ]) �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������webdar-1.0.0/m4/lib-prefix.m4�����������������������������������������������������������������������0000644�0001750�0001752�00000027250�15045134056�012533� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# lib-prefix.m4 serial 17 dnl Copyright (C) 2001-2005, 2008-2020 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl From Bruno Haible. dnl AC_LIB_PREFIX adds to the CPPFLAGS and LDFLAGS the flags that are needed dnl to access previously installed libraries. The basic assumption is that dnl a user will want packages to use other packages he previously installed dnl with the same --prefix option. dnl This macro is not needed if only AC_LIB_LINKFLAGS is used to locate dnl libraries, but is otherwise very convenient. AC_DEFUN([AC_LIB_PREFIX], [ AC_BEFORE([$0], [AC_LIB_LINKFLAGS]) AC_REQUIRE([AC_PROG_CC]) AC_REQUIRE([AC_CANONICAL_HOST]) AC_REQUIRE([AC_LIB_PREPARE_MULTILIB]) AC_REQUIRE([AC_LIB_PREPARE_PREFIX]) dnl By default, look in $includedir and $libdir. use_additional=yes AC_LIB_WITH_FINAL_PREFIX([ eval additional_includedir=\"$includedir\" eval additional_libdir=\"$libdir\" ]) AC_ARG_WITH([lib-prefix], [[ --with-lib-prefix[=DIR] search for libraries in DIR/include and DIR/lib --without-lib-prefix don't search for libraries in includedir and libdir]], [ if test "X$withval" = "Xno"; then use_additional=no else if test "X$withval" = "X"; then AC_LIB_WITH_FINAL_PREFIX([ eval additional_includedir=\"$includedir\" eval additional_libdir=\"$libdir\" ]) else additional_includedir="$withval/include" additional_libdir="$withval/$acl_libdirstem" fi fi ]) if test $use_additional = yes; then dnl Potentially add $additional_includedir to $CPPFLAGS. dnl But don't add it dnl 1. if it's the standard /usr/include, dnl 2. if it's already present in $CPPFLAGS, dnl 3. if it's /usr/local/include and we are using GCC on Linux, dnl 4. if it doesn't exist as a directory. if test "X$additional_includedir" != "X/usr/include"; then haveit= for x in $CPPFLAGS; do AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"]) if test "X$x" = "X-I$additional_includedir"; then haveit=yes break fi done if test -z "$haveit"; then if test "X$additional_includedir" = "X/usr/local/include"; then if test -n "$GCC"; then case $host_os in linux* | gnu* | k*bsd*-gnu) haveit=yes;; esac fi fi if test -z "$haveit"; then if test -d "$additional_includedir"; then dnl Really add $additional_includedir to $CPPFLAGS. CPPFLAGS="${CPPFLAGS}${CPPFLAGS:+ }-I$additional_includedir" fi fi fi fi dnl Potentially add $additional_libdir to $LDFLAGS. dnl But don't add it dnl 1. if it's the standard /usr/lib, dnl 2. if it's already present in $LDFLAGS, dnl 3. if it's /usr/local/lib and we are using GCC on Linux, dnl 4. if it doesn't exist as a directory. if test "X$additional_libdir" != "X/usr/$acl_libdirstem"; then haveit= for x in $LDFLAGS; do AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"]) if test "X$x" = "X-L$additional_libdir"; then haveit=yes break fi done if test -z "$haveit"; then if test "X$additional_libdir" = "X/usr/local/$acl_libdirstem"; then if test -n "$GCC"; then case $host_os in linux*) haveit=yes;; esac fi fi if test -z "$haveit"; then if test -d "$additional_libdir"; then dnl Really add $additional_libdir to $LDFLAGS. LDFLAGS="${LDFLAGS}${LDFLAGS:+ }-L$additional_libdir" fi fi fi fi fi ]) dnl AC_LIB_PREPARE_PREFIX creates variables acl_final_prefix, dnl acl_final_exec_prefix, containing the values to which $prefix and dnl $exec_prefix will expand at the end of the configure script. AC_DEFUN([AC_LIB_PREPARE_PREFIX], [ dnl Unfortunately, prefix and exec_prefix get only finally determined dnl at the end of configure. if test "X$prefix" = "XNONE"; then acl_final_prefix="$ac_default_prefix" else acl_final_prefix="$prefix" fi if test "X$exec_prefix" = "XNONE"; then acl_final_exec_prefix='${prefix}' else acl_final_exec_prefix="$exec_prefix" fi acl_save_prefix="$prefix" prefix="$acl_final_prefix" eval acl_final_exec_prefix=\"$acl_final_exec_prefix\" prefix="$acl_save_prefix" ]) dnl AC_LIB_WITH_FINAL_PREFIX([statement]) evaluates statement, with the dnl variables prefix and exec_prefix bound to the values they will have dnl at the end of the configure script. AC_DEFUN([AC_LIB_WITH_FINAL_PREFIX], [ acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" $1 exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" ]) dnl AC_LIB_PREPARE_MULTILIB creates dnl - a function acl_is_expected_elfclass, that tests whether standard input dn; has a 32-bit or 64-bit ELF header, depending on the host CPU ABI, dnl - 3 variables acl_libdirstem, acl_libdirstem2, acl_libdirstem3, containing dnl the basename of the libdir to try in turn, either "lib" or "lib64" or dnl "lib/64" or "lib32" or "lib/sparcv9" or "lib/amd64" or similar. AC_DEFUN([AC_LIB_PREPARE_MULTILIB], [ dnl There is no formal standard regarding lib, lib32, and lib64. dnl On most glibc systems, the current practice is that on a system supporting dnl 32-bit and 64-bit instruction sets or ABIs, 64-bit libraries go under dnl $prefix/lib64 and 32-bit libraries go under $prefix/lib. However, on dnl Arch Linux based distributions, it's the opposite: 32-bit libraries go dnl under $prefix/lib32 and 64-bit libraries go under $prefix/lib. dnl We determine the compiler's default mode by looking at the compiler's dnl library search path. If at least one of its elements ends in /lib64 or dnl points to a directory whose absolute pathname ends in /lib64, we use that dnl for 64-bit ABIs. Similarly for 32-bit ABIs. Otherwise we use the default, dnl namely "lib". dnl On Solaris systems, the current practice is that on a system supporting dnl 32-bit and 64-bit instruction sets or ABIs, 64-bit libraries go under dnl $prefix/lib/64 (which is a symlink to either $prefix/lib/sparcv9 or dnl $prefix/lib/amd64) and 32-bit libraries go under $prefix/lib. AC_REQUIRE([AC_CANONICAL_HOST]) AC_REQUIRE([gl_HOST_CPU_C_ABI_32BIT]) AC_CACHE_CHECK([for ELF binary format], [gl_cv_elf], [AC_EGREP_CPP([Extensible Linking Format], [#ifdef __ELF__ Extensible Linking Format #endif ], [gl_cv_elf=yes], [gl_cv_elf=no]) ]) if test $gl_cv_elf; then # Extract the ELF class of a file (5th byte) in decimal. # Cf. https://en.wikipedia.org/wiki/Executable_and_Linkable_Format#File_header if od -A x < /dev/null >/dev/null 2>/dev/null; then # Use POSIX od. func_elfclass () { od -A n -t d1 -j 4 -N 1 } else # Use BSD hexdump. func_elfclass () { dd bs=1 count=1 skip=4 2>/dev/null | hexdump -e '1/1 "%3d "' echo } fi changequote(,)dnl case $HOST_CPU_C_ABI_32BIT in yes) # 32-bit ABI. acl_is_expected_elfclass () { test "`func_elfclass | sed -e 's/[ ]//g'`" = 1 } ;; no) # 64-bit ABI. acl_is_expected_elfclass () { test "`func_elfclass | sed -e 's/[ ]//g'`" = 2 } ;; *) # Unknown. acl_is_expected_elfclass () { : } ;; esac changequote([,])dnl else acl_is_expected_elfclass () { : } fi dnl Allow the user to override the result by setting acl_cv_libdirstems. AC_CACHE_CHECK([for the common suffixes of directories in the library search path], [acl_cv_libdirstems], [dnl Try 'lib' first, because that's the default for libdir in GNU, see dnl <https://www.gnu.org/prep/standards/html_node/Directory-Variables.html>. acl_libdirstem=lib acl_libdirstem2= acl_libdirstem3= case "$host_os" in solaris*) dnl See Solaris 10 Software Developer Collection > Solaris 64-bit Developer's Guide > The Development Environment dnl <https://docs.oracle.com/cd/E19253-01/816-5138/dev-env/index.html>. dnl "Portable Makefiles should refer to any library directories using the 64 symbolic link." dnl But we want to recognize the sparcv9 or amd64 subdirectory also if the dnl symlink is missing, so we set acl_libdirstem2 too. if test $HOST_CPU_C_ABI_32BIT = no; then acl_libdirstem2=lib/64 case "$host_cpu" in sparc*) acl_libdirstem3=lib/sparcv9 ;; i*86 | x86_64) acl_libdirstem3=lib/amd64 ;; esac fi ;; *) dnl If $CC generates code for a 32-bit ABI, the libraries are dnl surely under $prefix/lib or $prefix/lib32, not $prefix/lib64. dnl Similarly, if $CC generates code for a 64-bit ABI, the libraries dnl are surely under $prefix/lib or $prefix/lib64, not $prefix/lib32. dnl Find the compiler's search path. However, non-system compilers dnl sometimes have odd library search paths. But we can't simply invoke dnl '/usr/bin/gcc -print-search-dirs' because that would not take into dnl account the -m32/-m31 or -m64 options from the $CC or $CFLAGS. searchpath=`(LC_ALL=C $CC $CPPFLAGS $CFLAGS -print-search-dirs) 2>/dev/null \ | sed -n -e 's,^libraries: ,,p' | sed -e 's,^=,,'` if test $HOST_CPU_C_ABI_32BIT != no; then # 32-bit or unknown ABI. if test -d /usr/lib32; then acl_libdirstem2=lib32 fi fi if test $HOST_CPU_C_ABI_32BIT != yes; then # 64-bit or unknown ABI. if test -d /usr/lib64; then acl_libdirstem3=lib64 fi fi if test -n "$searchpath"; then acl_save_IFS="${IFS= }"; IFS=":" for searchdir in $searchpath; do if test -d "$searchdir"; then case "$searchdir" in */lib32/ | */lib32 ) acl_libdirstem2=lib32 ;; */lib64/ | */lib64 ) acl_libdirstem3=lib64 ;; */../ | */.. ) # Better ignore directories of this form. They are misleading. ;; *) searchdir=`cd "$searchdir" && pwd` case "$searchdir" in */lib32 ) acl_libdirstem2=lib32 ;; */lib64 ) acl_libdirstem3=lib64 ;; esac ;; esac fi done IFS="$acl_save_IFS" if test $HOST_CPU_C_ABI_32BIT = yes; then # 32-bit ABI. acl_libdirstem3= fi if test $HOST_CPU_C_ABI_32BIT = no; then # 64-bit ABI. acl_libdirstem2= fi fi ;; esac test -n "$acl_libdirstem2" || acl_libdirstem2="$acl_libdirstem" test -n "$acl_libdirstem3" || acl_libdirstem3="$acl_libdirstem" acl_cv_libdirstems="$acl_libdirstem,$acl_libdirstem2,$acl_libdirstem3" ]) dnl Decompose acl_cv_libdirstems into acl_libdirstem, acl_libdirstem2, and dnl acl_libdirstem3. changequote(,)dnl acl_libdirstem=`echo "$acl_cv_libdirstems" | sed -e 's/,.*//'` acl_libdirstem2=`echo "$acl_cv_libdirstems" | sed -e 's/^[^,]*,//' -e 's/,.*//'` acl_libdirstem3=`echo "$acl_cv_libdirstems" | sed -e 's/^[^,]*,[^,]*,//' -e 's/,.*//'` changequote([,])dnl ]) ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������webdar-1.0.0/m4/lib-link.m4�������������������������������������������������������������������������0000644�0001750�0001752�00000103762�15045134056�012176� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# lib-link.m4 serial 31 dnl Copyright (C) 2001-2020 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl From Bruno Haible. AC_PREREQ([2.61]) dnl AC_LIB_LINKFLAGS(name [, dependencies]) searches for libname and dnl the libraries corresponding to explicit and implicit dependencies. dnl Sets and AC_SUBSTs the LIB${NAME} and LTLIB${NAME} variables and dnl augments the CPPFLAGS variable. dnl Sets and AC_SUBSTs the LIB${NAME}_PREFIX variable to nonempty if libname dnl was found in ${LIB${NAME}_PREFIX}/$acl_libdirstem. AC_DEFUN([AC_LIB_LINKFLAGS], [ AC_REQUIRE([AC_LIB_PREPARE_PREFIX]) AC_REQUIRE([AC_LIB_RPATH]) pushdef([Name],[m4_translit([$1],[./+-], [____])]) pushdef([NAME],[m4_translit([$1],[abcdefghijklmnopqrstuvwxyz./+-], [ABCDEFGHIJKLMNOPQRSTUVWXYZ____])]) AC_CACHE_CHECK([how to link with lib[]$1], [ac_cv_lib[]Name[]_libs], [ AC_LIB_LINKFLAGS_BODY([$1], [$2]) ac_cv_lib[]Name[]_libs="$LIB[]NAME" ac_cv_lib[]Name[]_ltlibs="$LTLIB[]NAME" ac_cv_lib[]Name[]_cppflags="$INC[]NAME" ac_cv_lib[]Name[]_prefix="$LIB[]NAME[]_PREFIX" ]) LIB[]NAME="$ac_cv_lib[]Name[]_libs" LTLIB[]NAME="$ac_cv_lib[]Name[]_ltlibs" INC[]NAME="$ac_cv_lib[]Name[]_cppflags" LIB[]NAME[]_PREFIX="$ac_cv_lib[]Name[]_prefix" AC_LIB_APPENDTOVAR([CPPFLAGS], [$INC]NAME) AC_SUBST([LIB]NAME) AC_SUBST([LTLIB]NAME) AC_SUBST([LIB]NAME[_PREFIX]) dnl Also set HAVE_LIB[]NAME so that AC_LIB_HAVE_LINKFLAGS can reuse the dnl results of this search when this library appears as a dependency. HAVE_LIB[]NAME=yes popdef([NAME]) popdef([Name]) ]) dnl AC_LIB_HAVE_LINKFLAGS(name, dependencies, includes, testcode, [missing-message]) dnl searches for libname and the libraries corresponding to explicit and dnl implicit dependencies, together with the specified include files and dnl the ability to compile and link the specified testcode. The missing-message dnl defaults to 'no' and may contain additional hints for the user. dnl If found, it sets and AC_SUBSTs HAVE_LIB${NAME}=yes and the LIB${NAME} dnl and LTLIB${NAME} variables and augments the CPPFLAGS variable, and dnl #defines HAVE_LIB${NAME} to 1. Otherwise, it sets and AC_SUBSTs dnl HAVE_LIB${NAME}=no and LIB${NAME} and LTLIB${NAME} to empty. dnl Sets and AC_SUBSTs the LIB${NAME}_PREFIX variable to nonempty if libname dnl was found in ${LIB${NAME}_PREFIX}/$acl_libdirstem. AC_DEFUN([AC_LIB_HAVE_LINKFLAGS], [ AC_REQUIRE([AC_LIB_PREPARE_PREFIX]) AC_REQUIRE([AC_LIB_RPATH]) pushdef([Name],[m4_translit([$1],[./+-], [____])]) pushdef([NAME],[m4_translit([$1],[abcdefghijklmnopqrstuvwxyz./+-], [ABCDEFGHIJKLMNOPQRSTUVWXYZ____])]) dnl Search for lib[]Name and define LIB[]NAME, LTLIB[]NAME and INC[]NAME dnl accordingly. AC_LIB_LINKFLAGS_BODY([$1], [$2]) dnl Add $INC[]NAME to CPPFLAGS before performing the following checks, dnl because if the user has installed lib[]Name and not disabled its use dnl via --without-lib[]Name-prefix, he wants to use it. ac_save_CPPFLAGS="$CPPFLAGS" AC_LIB_APPENDTOVAR([CPPFLAGS], [$INC]NAME) AC_CACHE_CHECK([for lib[]$1], [ac_cv_lib[]Name], [ ac_save_LIBS="$LIBS" dnl If $LIB[]NAME contains some -l options, add it to the end of LIBS, dnl because these -l options might require -L options that are present in dnl LIBS. -l options benefit only from the -L options listed before it. dnl Otherwise, add it to the front of LIBS, because it may be a static dnl library that depends on another static library that is present in LIBS. dnl Static libraries benefit only from the static libraries listed after dnl it. case " $LIB[]NAME" in *" -l"*) LIBS="$LIBS $LIB[]NAME" ;; *) LIBS="$LIB[]NAME $LIBS" ;; esac AC_LINK_IFELSE( [AC_LANG_PROGRAM([[$3]], [[$4]])], [ac_cv_lib[]Name=yes], [ac_cv_lib[]Name='m4_if([$5], [], [no], [[$5]])']) LIBS="$ac_save_LIBS" ]) if test "$ac_cv_lib[]Name" = yes; then HAVE_LIB[]NAME=yes AC_DEFINE([HAVE_LIB]NAME, 1, [Define if you have the lib][$1 library.]) AC_MSG_CHECKING([how to link with lib[]$1]) AC_MSG_RESULT([$LIB[]NAME]) else HAVE_LIB[]NAME=no dnl If $LIB[]NAME didn't lead to a usable library, we don't need dnl $INC[]NAME either. CPPFLAGS="$ac_save_CPPFLAGS" LIB[]NAME= LTLIB[]NAME= LIB[]NAME[]_PREFIX= fi AC_SUBST([HAVE_LIB]NAME) AC_SUBST([LIB]NAME) AC_SUBST([LTLIB]NAME) AC_SUBST([LIB]NAME[_PREFIX]) popdef([NAME]) popdef([Name]) ]) dnl Determine the platform dependent parameters needed to use rpath: dnl acl_libext, dnl acl_shlibext, dnl acl_libname_spec, dnl acl_library_names_spec, dnl acl_hardcode_libdir_flag_spec, dnl acl_hardcode_libdir_separator, dnl acl_hardcode_direct, dnl acl_hardcode_minus_L. AC_DEFUN([AC_LIB_RPATH], [ dnl Complain if config.rpath is missing. AC_REQUIRE_AUX_FILE([config.rpath]) AC_REQUIRE([AC_PROG_CC]) dnl we use $CC, $GCC, $LDFLAGS AC_REQUIRE([AC_LIB_PROG_LD]) dnl we use $LD, $with_gnu_ld AC_REQUIRE([AC_CANONICAL_HOST]) dnl we use $host AC_REQUIRE([AC_CONFIG_AUX_DIR_DEFAULT]) dnl we use $ac_aux_dir AC_CACHE_CHECK([for shared library run path origin], [acl_cv_rpath], [ CC="$CC" GCC="$GCC" LDFLAGS="$LDFLAGS" LD="$LD" with_gnu_ld="$with_gnu_ld" \ ${CONFIG_SHELL-/bin/sh} "$ac_aux_dir/config.rpath" "$host" > conftest.sh . ./conftest.sh rm -f ./conftest.sh acl_cv_rpath=done ]) wl="$acl_cv_wl" acl_libext="$acl_cv_libext" acl_shlibext="$acl_cv_shlibext" acl_libname_spec="$acl_cv_libname_spec" acl_library_names_spec="$acl_cv_library_names_spec" acl_hardcode_libdir_flag_spec="$acl_cv_hardcode_libdir_flag_spec" acl_hardcode_libdir_separator="$acl_cv_hardcode_libdir_separator" acl_hardcode_direct="$acl_cv_hardcode_direct" acl_hardcode_minus_L="$acl_cv_hardcode_minus_L" dnl Determine whether the user wants rpath handling at all. AC_ARG_ENABLE([rpath], [ --disable-rpath do not hardcode runtime library paths], :, enable_rpath=yes) ]) dnl AC_LIB_FROMPACKAGE(name, package) dnl declares that libname comes from the given package. The configure file dnl will then not have a --with-libname-prefix option but a dnl --with-package-prefix option. Several libraries can come from the same dnl package. This declaration must occur before an AC_LIB_LINKFLAGS or similar dnl macro call that searches for libname. AC_DEFUN([AC_LIB_FROMPACKAGE], [ pushdef([NAME],[m4_translit([$1],[abcdefghijklmnopqrstuvwxyz./+-], [ABCDEFGHIJKLMNOPQRSTUVWXYZ____])]) define([acl_frompackage_]NAME, [$2]) popdef([NAME]) pushdef([PACK],[$2]) pushdef([PACKUP],[m4_translit(PACK,[abcdefghijklmnopqrstuvwxyz./+-], [ABCDEFGHIJKLMNOPQRSTUVWXYZ____])]) define([acl_libsinpackage_]PACKUP, m4_ifdef([acl_libsinpackage_]PACKUP, [m4_defn([acl_libsinpackage_]PACKUP)[, ]],)[lib$1]) popdef([PACKUP]) popdef([PACK]) ]) dnl AC_LIB_LINKFLAGS_BODY(name [, dependencies]) searches for libname and dnl the libraries corresponding to explicit and implicit dependencies. dnl Sets the LIB${NAME}, LTLIB${NAME} and INC${NAME} variables. dnl Also, sets the LIB${NAME}_PREFIX variable to nonempty if libname was found dnl in ${LIB${NAME}_PREFIX}/$acl_libdirstem. AC_DEFUN([AC_LIB_LINKFLAGS_BODY], [ AC_REQUIRE([AC_LIB_PREPARE_MULTILIB]) pushdef([NAME],[m4_translit([$1],[abcdefghijklmnopqrstuvwxyz./+-], [ABCDEFGHIJKLMNOPQRSTUVWXYZ____])]) pushdef([PACK],[m4_ifdef([acl_frompackage_]NAME, [acl_frompackage_]NAME, lib[$1])]) pushdef([PACKUP],[m4_translit(PACK,[abcdefghijklmnopqrstuvwxyz./+-], [ABCDEFGHIJKLMNOPQRSTUVWXYZ____])]) pushdef([PACKLIBS],[m4_ifdef([acl_frompackage_]NAME, [acl_libsinpackage_]PACKUP, lib[$1])]) dnl By default, look in $includedir and $libdir. use_additional=yes AC_LIB_WITH_FINAL_PREFIX([ eval additional_includedir=\"$includedir\" eval additional_libdir=\"$libdir\" eval additional_libdir2=\"$exec_prefix/$acl_libdirstem2\" eval additional_libdir3=\"$exec_prefix/$acl_libdirstem3\" ]) AC_ARG_WITH(PACK[-prefix], [[ --with-]]PACK[[-prefix[=DIR] search for ]PACKLIBS[ in DIR/include and DIR/lib --without-]]PACK[[-prefix don't search for ]PACKLIBS[ in includedir and libdir]], [ if test "X$withval" = "Xno"; then use_additional=no else if test "X$withval" = "X"; then AC_LIB_WITH_FINAL_PREFIX([ eval additional_includedir=\"$includedir\" eval additional_libdir=\"$libdir\" eval additional_libdir2=\"$exec_prefix/$acl_libdirstem2\" eval additional_libdir3=\"$exec_prefix/$acl_libdirstem3\" ]) else additional_includedir="$withval/include" additional_libdir="$withval/$acl_libdirstem" additional_libdir2="$withval/$acl_libdirstem2" additional_libdir3="$withval/$acl_libdirstem3" fi fi ]) if test "X$additional_libdir2" = "X$additional_libdir"; then additional_libdir2= fi if test "X$additional_libdir3" = "X$additional_libdir"; then additional_libdir3= fi dnl Search the library and its dependencies in $additional_libdir and dnl $LDFLAGS. Using breadth-first-seach. LIB[]NAME= LTLIB[]NAME= INC[]NAME= LIB[]NAME[]_PREFIX= dnl HAVE_LIB${NAME} is an indicator that LIB${NAME}, LTLIB${NAME} have been dnl computed. So it has to be reset here. HAVE_LIB[]NAME= rpathdirs= ltrpathdirs= names_already_handled= names_next_round='$1 $2' while test -n "$names_next_round"; do names_this_round="$names_next_round" names_next_round= for name in $names_this_round; do already_handled= for n in $names_already_handled; do if test "$n" = "$name"; then already_handled=yes break fi done if test -z "$already_handled"; then names_already_handled="$names_already_handled $name" dnl See if it was already located by an earlier AC_LIB_LINKFLAGS dnl or AC_LIB_HAVE_LINKFLAGS call. uppername=`echo "$name" | sed -e 'y|abcdefghijklmnopqrstuvwxyz./+-|ABCDEFGHIJKLMNOPQRSTUVWXYZ____|'` eval value=\"\$HAVE_LIB$uppername\" if test -n "$value"; then if test "$value" = yes; then eval value=\"\$LIB$uppername\" test -z "$value" || LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$value" eval value=\"\$LTLIB$uppername\" test -z "$value" || LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }$value" else dnl An earlier call to AC_LIB_HAVE_LINKFLAGS has determined dnl that this library doesn't exist. So just drop it. : fi else dnl Search the library lib$name in $additional_libdir and $LDFLAGS dnl and the already constructed $LIBNAME/$LTLIBNAME. found_dir= found_la= found_so= found_a= eval libname=\"$acl_libname_spec\" # typically: libname=lib$name if test -n "$acl_shlibext"; then shrext=".$acl_shlibext" # typically: shrext=.so else shrext= fi if test $use_additional = yes; then for additional_libdir_variable in additional_libdir additional_libdir2 additional_libdir3; do if test "X$found_dir" = "X"; then eval dir=\$$additional_libdir_variable if test -n "$dir"; then dnl The same code as in the loop below: dnl First look for a shared library. if test -n "$acl_shlibext"; then if test -f "$dir/$libname$shrext" && acl_is_expected_elfclass < "$dir/$libname$shrext"; then found_dir="$dir" found_so="$dir/$libname$shrext" else if test "$acl_library_names_spec" = '$libname$shrext$versuffix'; then ver=`(cd "$dir" && \ for f in "$libname$shrext".*; do echo "$f"; done \ | sed -e "s,^$libname$shrext\\\\.,," \ | sort -t '.' -n -r -k1,1 -k2,2 -k3,3 -k4,4 -k5,5 \ | sed 1q ) 2>/dev/null` if test -n "$ver" && test -f "$dir/$libname$shrext.$ver" && acl_is_expected_elfclass < "$dir/$libname$shrext.$ver"; then found_dir="$dir" found_so="$dir/$libname$shrext.$ver" fi else eval library_names=\"$acl_library_names_spec\" for f in $library_names; do if test -f "$dir/$f" && acl_is_expected_elfclass < "$dir/$f"; then found_dir="$dir" found_so="$dir/$f" break fi done fi fi fi dnl Then look for a static library. if test "X$found_dir" = "X"; then if test -f "$dir/$libname.$acl_libext" && ${AR-ar} -p "$dir/$libname.$acl_libext" | acl_is_expected_elfclass; then found_dir="$dir" found_a="$dir/$libname.$acl_libext" fi fi if test "X$found_dir" != "X"; then if test -f "$dir/$libname.la"; then found_la="$dir/$libname.la" fi fi fi fi done fi if test "X$found_dir" = "X"; then for x in $LDFLAGS $LTLIB[]NAME; do AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"]) case "$x" in -L*) dir=`echo "X$x" | sed -e 's/^X-L//'` dnl First look for a shared library. if test -n "$acl_shlibext"; then if test -f "$dir/$libname$shrext" && acl_is_expected_elfclass < "$dir/$libname$shrext"; then found_dir="$dir" found_so="$dir/$libname$shrext" else if test "$acl_library_names_spec" = '$libname$shrext$versuffix'; then ver=`(cd "$dir" && \ for f in "$libname$shrext".*; do echo "$f"; done \ | sed -e "s,^$libname$shrext\\\\.,," \ | sort -t '.' -n -r -k1,1 -k2,2 -k3,3 -k4,4 -k5,5 \ | sed 1q ) 2>/dev/null` if test -n "$ver" && test -f "$dir/$libname$shrext.$ver" && acl_is_expected_elfclass < "$dir/$libname$shrext.$ver"; then found_dir="$dir" found_so="$dir/$libname$shrext.$ver" fi else eval library_names=\"$acl_library_names_spec\" for f in $library_names; do if test -f "$dir/$f" && acl_is_expected_elfclass < "$dir/$f"; then found_dir="$dir" found_so="$dir/$f" break fi done fi fi fi dnl Then look for a static library. if test "X$found_dir" = "X"; then if test -f "$dir/$libname.$acl_libext" && ${AR-ar} -p "$dir/$libname.$acl_libext" | acl_is_expected_elfclass; then found_dir="$dir" found_a="$dir/$libname.$acl_libext" fi fi if test "X$found_dir" != "X"; then if test -f "$dir/$libname.la"; then found_la="$dir/$libname.la" fi fi ;; esac if test "X$found_dir" != "X"; then break fi done fi if test "X$found_dir" != "X"; then dnl Found the library. LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }-L$found_dir -l$name" if test "X$found_so" != "X"; then dnl Linking with a shared library. We attempt to hardcode its dnl directory into the executable's runpath, unless it's the dnl standard /usr/lib. if test "$enable_rpath" = no \ || test "X$found_dir" = "X/usr/$acl_libdirstem" \ || test "X$found_dir" = "X/usr/$acl_libdirstem2" \ || test "X$found_dir" = "X/usr/$acl_libdirstem3"; then dnl No hardcoding is needed. LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_so" else dnl Use an explicit option to hardcode DIR into the resulting dnl binary. dnl Potentially add DIR to ltrpathdirs. dnl The ltrpathdirs will be appended to $LTLIBNAME at the end. haveit= for x in $ltrpathdirs; do if test "X$x" = "X$found_dir"; then haveit=yes break fi done if test -z "$haveit"; then ltrpathdirs="$ltrpathdirs $found_dir" fi dnl The hardcoding into $LIBNAME is system dependent. if test "$acl_hardcode_direct" = yes; then dnl Using DIR/libNAME.so during linking hardcodes DIR into the dnl resulting binary. LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_so" else if test -n "$acl_hardcode_libdir_flag_spec" && test "$acl_hardcode_minus_L" = no; then dnl Use an explicit option to hardcode DIR into the resulting dnl binary. LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_so" dnl Potentially add DIR to rpathdirs. dnl The rpathdirs will be appended to $LIBNAME at the end. haveit= for x in $rpathdirs; do if test "X$x" = "X$found_dir"; then haveit=yes break fi done if test -z "$haveit"; then rpathdirs="$rpathdirs $found_dir" fi else dnl Rely on "-L$found_dir". dnl But don't add it if it's already contained in the LDFLAGS dnl or the already constructed $LIBNAME haveit= for x in $LDFLAGS $LIB[]NAME; do AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"]) if test "X$x" = "X-L$found_dir"; then haveit=yes break fi done if test -z "$haveit"; then LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-L$found_dir" fi if test "$acl_hardcode_minus_L" != no; then dnl FIXME: Not sure whether we should use dnl "-L$found_dir -l$name" or "-L$found_dir $found_so" dnl here. LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_so" else dnl We cannot use $acl_hardcode_runpath_var and LD_RUN_PATH dnl here, because this doesn't fit in flags passed to the dnl compiler. So give up. No hardcoding. This affects only dnl very old systems. dnl FIXME: Not sure whether we should use dnl "-L$found_dir -l$name" or "-L$found_dir $found_so" dnl here. LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-l$name" fi fi fi fi else if test "X$found_a" != "X"; then dnl Linking with a static library. LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_a" else dnl We shouldn't come here, but anyway it's good to have a dnl fallback. LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-L$found_dir -l$name" fi fi dnl Assume the include files are nearby. additional_includedir= case "$found_dir" in */$acl_libdirstem | */$acl_libdirstem/) basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e "s,/$acl_libdirstem/"'*$,,'` if test "$name" = '$1'; then LIB[]NAME[]_PREFIX="$basedir" fi additional_includedir="$basedir/include" ;; */$acl_libdirstem2 | */$acl_libdirstem2/) basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e "s,/$acl_libdirstem2/"'*$,,'` if test "$name" = '$1'; then LIB[]NAME[]_PREFIX="$basedir" fi additional_includedir="$basedir/include" ;; */$acl_libdirstem3 | */$acl_libdirstem3/) basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e "s,/$acl_libdirstem3/"'*$,,'` if test "$name" = '$1'; then LIB[]NAME[]_PREFIX="$basedir" fi additional_includedir="$basedir/include" ;; esac if test "X$additional_includedir" != "X"; then dnl Potentially add $additional_includedir to $INCNAME. dnl But don't add it dnl 1. if it's the standard /usr/include, dnl 2. if it's /usr/local/include and we are using GCC on Linux, dnl 3. if it's already present in $CPPFLAGS or the already dnl constructed $INCNAME, dnl 4. if it doesn't exist as a directory. if test "X$additional_includedir" != "X/usr/include"; then haveit= if test "X$additional_includedir" = "X/usr/local/include"; then if test -n "$GCC"; then case $host_os in linux* | gnu* | k*bsd*-gnu) haveit=yes;; esac fi fi if test -z "$haveit"; then for x in $CPPFLAGS $INC[]NAME; do AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"]) if test "X$x" = "X-I$additional_includedir"; then haveit=yes break fi done if test -z "$haveit"; then if test -d "$additional_includedir"; then dnl Really add $additional_includedir to $INCNAME. INC[]NAME="${INC[]NAME}${INC[]NAME:+ }-I$additional_includedir" fi fi fi fi fi dnl Look for dependencies. if test -n "$found_la"; then dnl Read the .la file. It defines the variables dnl dlname, library_names, old_library, dependency_libs, current, dnl age, revision, installed, dlopen, dlpreopen, libdir. save_libdir="$libdir" case "$found_la" in */* | *\\*) . "$found_la" ;; *) . "./$found_la" ;; esac libdir="$save_libdir" dnl We use only dependency_libs. for dep in $dependency_libs; do case "$dep" in -L*) dependency_libdir=`echo "X$dep" | sed -e 's/^X-L//'` dnl Potentially add $dependency_libdir to $LIBNAME and $LTLIBNAME. dnl But don't add it dnl 1. if it's the standard /usr/lib, dnl 2. if it's /usr/local/lib and we are using GCC on Linux, dnl 3. if it's already present in $LDFLAGS or the already dnl constructed $LIBNAME, dnl 4. if it doesn't exist as a directory. if test "X$dependency_libdir" != "X/usr/$acl_libdirstem" \ && test "X$dependency_libdir" != "X/usr/$acl_libdirstem2" \ && test "X$dependency_libdir" != "X/usr/$acl_libdirstem3"; then haveit= if test "X$dependency_libdir" = "X/usr/local/$acl_libdirstem" \ || test "X$dependency_libdir" = "X/usr/local/$acl_libdirstem2" \ || test "X$dependency_libdir" = "X/usr/local/$acl_libdirstem3"; then if test -n "$GCC"; then case $host_os in linux* | gnu* | k*bsd*-gnu) haveit=yes;; esac fi fi if test -z "$haveit"; then haveit= for x in $LDFLAGS $LIB[]NAME; do AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"]) if test "X$x" = "X-L$dependency_libdir"; then haveit=yes break fi done if test -z "$haveit"; then if test -d "$dependency_libdir"; then dnl Really add $dependency_libdir to $LIBNAME. LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-L$dependency_libdir" fi fi haveit= for x in $LDFLAGS $LTLIB[]NAME; do AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"]) if test "X$x" = "X-L$dependency_libdir"; then haveit=yes break fi done if test -z "$haveit"; then if test -d "$dependency_libdir"; then dnl Really add $dependency_libdir to $LTLIBNAME. LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }-L$dependency_libdir" fi fi fi fi ;; -R*) dir=`echo "X$dep" | sed -e 's/^X-R//'` if test "$enable_rpath" != no; then dnl Potentially add DIR to rpathdirs. dnl The rpathdirs will be appended to $LIBNAME at the end. haveit= for x in $rpathdirs; do if test "X$x" = "X$dir"; then haveit=yes break fi done if test -z "$haveit"; then rpathdirs="$rpathdirs $dir" fi dnl Potentially add DIR to ltrpathdirs. dnl The ltrpathdirs will be appended to $LTLIBNAME at the end. haveit= for x in $ltrpathdirs; do if test "X$x" = "X$dir"; then haveit=yes break fi done if test -z "$haveit"; then ltrpathdirs="$ltrpathdirs $dir" fi fi ;; -l*) dnl Handle this in the next round. names_next_round="$names_next_round "`echo "X$dep" | sed -e 's/^X-l//'` ;; *.la) dnl Handle this in the next round. Throw away the .la's dnl directory; it is already contained in a preceding -L dnl option. names_next_round="$names_next_round "`echo "X$dep" | sed -e 's,^X.*/,,' -e 's,^lib,,' -e 's,\.la$,,'` ;; *) dnl Most likely an immediate library name. LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$dep" LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }$dep" ;; esac done fi else dnl Didn't find the library; assume it is in the system directories dnl known to the linker and runtime loader. (All the system dnl directories known to the linker should also be known to the dnl runtime loader, otherwise the system is severely misconfigured.) LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-l$name" LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }-l$name" fi fi fi done done if test "X$rpathdirs" != "X"; then if test -n "$acl_hardcode_libdir_separator"; then dnl Weird platform: only the last -rpath option counts, the user must dnl pass all path elements in one option. We can arrange that for a dnl single library, but not when more than one $LIBNAMEs are used. alldirs= for found_dir in $rpathdirs; do alldirs="${alldirs}${alldirs:+$acl_hardcode_libdir_separator}$found_dir" done dnl Note: acl_hardcode_libdir_flag_spec uses $libdir and $wl. acl_save_libdir="$libdir" libdir="$alldirs" eval flag=\"$acl_hardcode_libdir_flag_spec\" libdir="$acl_save_libdir" LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$flag" else dnl The -rpath options are cumulative. for found_dir in $rpathdirs; do acl_save_libdir="$libdir" libdir="$found_dir" eval flag=\"$acl_hardcode_libdir_flag_spec\" libdir="$acl_save_libdir" LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$flag" done fi fi if test "X$ltrpathdirs" != "X"; then dnl When using libtool, the option that works for both libraries and dnl executables is -R. The -R options are cumulative. for found_dir in $ltrpathdirs; do LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }-R$found_dir" done fi popdef([PACKLIBS]) popdef([PACKUP]) popdef([PACK]) popdef([NAME]) ]) dnl AC_LIB_APPENDTOVAR(VAR, CONTENTS) appends the elements of CONTENTS to VAR, dnl unless already present in VAR. dnl Works only for CPPFLAGS, not for LIB* variables because that sometimes dnl contains two or three consecutive elements that belong together. AC_DEFUN([AC_LIB_APPENDTOVAR], [ for element in [$2]; do haveit= for x in $[$1]; do AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"]) if test "X$x" = "X$element"; then haveit=yes break fi done if test -z "$haveit"; then [$1]="${[$1]}${[$1]:+ }$element" fi done ]) dnl For those cases where a variable contains several -L and -l options dnl referring to unknown libraries and directories, this macro determines the dnl necessary additional linker options for the runtime path. dnl AC_LIB_LINKFLAGS_FROM_LIBS([LDADDVAR], [LIBSVALUE], [USE-LIBTOOL]) dnl sets LDADDVAR to linker options needed together with LIBSVALUE. dnl If USE-LIBTOOL evaluates to non-empty, linking with libtool is assumed, dnl otherwise linking without libtool is assumed. AC_DEFUN([AC_LIB_LINKFLAGS_FROM_LIBS], [ AC_REQUIRE([AC_LIB_RPATH]) AC_REQUIRE([AC_LIB_PREPARE_MULTILIB]) $1= if test "$enable_rpath" != no; then if test -n "$acl_hardcode_libdir_flag_spec" && test "$acl_hardcode_minus_L" = no; then dnl Use an explicit option to hardcode directories into the resulting dnl binary. rpathdirs= next= for opt in $2; do if test -n "$next"; then dir="$next" dnl No need to hardcode the standard /usr/lib. if test "X$dir" != "X/usr/$acl_libdirstem" \ && test "X$dir" != "X/usr/$acl_libdirstem2" \ && test "X$dir" != "X/usr/$acl_libdirstem3"; then rpathdirs="$rpathdirs $dir" fi next= else case $opt in -L) next=yes ;; -L*) dir=`echo "X$opt" | sed -e 's,^X-L,,'` dnl No need to hardcode the standard /usr/lib. if test "X$dir" != "X/usr/$acl_libdirstem" \ && test "X$dir" != "X/usr/$acl_libdirstem2" \ && test "X$dir" != "X/usr/$acl_libdirstem3"; then rpathdirs="$rpathdirs $dir" fi next= ;; *) next= ;; esac fi done if test "X$rpathdirs" != "X"; then if test -n ""$3""; then dnl libtool is used for linking. Use -R options. for dir in $rpathdirs; do $1="${$1}${$1:+ }-R$dir" done else dnl The linker is used for linking directly. if test -n "$acl_hardcode_libdir_separator"; then dnl Weird platform: only the last -rpath option counts, the user dnl must pass all path elements in one option. alldirs= for dir in $rpathdirs; do alldirs="${alldirs}${alldirs:+$acl_hardcode_libdir_separator}$dir" done acl_save_libdir="$libdir" libdir="$alldirs" eval flag=\"$acl_hardcode_libdir_flag_spec\" libdir="$acl_save_libdir" $1="$flag" else dnl The -rpath options are cumulative. for dir in $rpathdirs; do acl_save_libdir="$libdir" libdir="$dir" eval flag=\"$acl_hardcode_libdir_flag_spec\" libdir="$acl_save_libdir" $1="${$1}${$1:+ }$flag" done fi fi fi fi fi AC_SUBST([$1]) ]) ��������������webdar-1.0.0/ABOUT-NLS������������������������������������������������������������������������������0000644�0001750�0001752�00000000103�15045134055�011122� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������<https://www.gnu.org/software/gettext/manual/html_node/Users.html> �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������webdar-1.0.0/resources/�����������������������������������������������������������������������������0000755�0001750�0001752�00000000000�15045134253�011773� 5����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������webdar-1.0.0/resources/webdar_logo.jpg��������������������������������������������������������������0000644�0001750�0001752�00000011542�14773727254�014724� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������ÿØÿà�JFIF�,,��ÿþ�Webdar Faviconÿâ°ICC_PROFILE��� lcms@��mntrRGB XYZ é����,�acspAPPL��������������������������öÖ�����Ó-lcms����������������������������������������������� desc�� ���@cprt��`���6wtpt��˜���chad��¬���,rXYZ��Ø���bXYZ��ì���gXYZ������rTRC����� gTRC����� bTRC����� chrm��4���$dmnd��X���$dmdd��|���$mluc���������� enUS���$����G�I�M�P� �b�u�i�l�t�-�i�n� �s�R�G�Bmluc���������� enUS�������P�u�b�l�i�c� �D�o�m�a�i�n��XYZ ������öÖ�����Ó-sf32����� B��Þÿÿó%��“��ýÿÿû¡ÿÿý¢��Ü��ÀnXYZ ������o ��8õ��XYZ ������$Ÿ��„��¶ÄXYZ ������b—��·‡��Ùpara��������ff��ò§�� Y��Ð�� [chrm���������£×��T|��LÍ��™š��&g��\mluc���������� enUS�������G�I�M�Pmluc���������� enUS�������s�R�G�BÿÛ�C�   ")$+*($''-2@7-0=0''8L9=CEHIH+6OUNFT@GHEÿÛ�C !!E.'.EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEÿÀ��È,�ÿÄ�������������ÿÄ�L��  ����!1Q"2ARaq‘±ÑBSTr’¡Á#34c‚”¢²ÂÒ$Cbdsƒ“áð%DE£âÿÄ�������������ÿÄ�/�������1!QAq‘¡Ñð2Raá±ñ#CSÁÿÚ� ��?�ýp€�����������������������q““Žý)&×üóè�������������������������������«“©aâM×vU0¹GŽª•‘RkÈ›ò–¸Q¦ÑŸÉgeQ‰mµÂq…öÅ6šÝ%ÓÓÒäº;�Þ‹RŠ’{¦·L�������������������������������A›EyÓ®Ìzïã-”-Š”^ý»ø�ÌÂÑäœ,ç—AÕ|žõÆ ”ŠîTe¼^Ñè} `6€�������������������������������k‚® +ÁÖûX�������������������������������@€������������������������������������������������������������������������������������� IðÇC§U»MÉϯ*©(¸Þqodú$úZðµ ÆÈ)BJQ}N/tÀô�������������������������������``cFÍs_ÄΪ»«¶Ê²! ¤œ%Z‡Sò× <ŸôºæìÓ^N•gn θïô:`ý( #‰Â øGQ‚]Ë«’›N°‹^–<¸š¦Ÿ•‡Ó·*£ÊÔú:øÐßeå’ˆxÙxù´Fì[뾩-Ôë’’~” ���žý@������������������������}ÊUëø³[q-¢ÈOµ´âãöqý`h��~N‡ƒ“s½TèÉ{o~<S{unã¶ëÈ÷@A mgñYuj5/‰•Nο+gÑýŸH­™(j0³N±½—9IA½ö[Mo¿fûù�ÔŒ”¢¥š}Mx@>®€2¸1UÔpkN«&nw˜«$ÞûËÃöî¨������������������������¥›ó´é/²OÍÉËý€º����y8FÈ8N*Q’Ù©-Ó!psNzM×i²ñ({Ôÿ�Ë{Åz~P#–«©i-[ßJëËÁ‹š^YWÓ(ú8À]Ñ/¯'K…´ÉN©NÎ$—S\y$À¾������������������������+[ÝgãGÅŒçêÙ@������SÓ#ÅÆ±x¹úì“ûÀ¸������������������������+SøLÜ‹<Q©yúÛý¤½�Y������[m]«óÖ~óÈ�����������������������seŠª¥d·Ú)·°bÔêÇŒgß½å=¼f÷kP������°»Ë¿ÆŸ´ ����������������������¿…¾üXídÿ�…zÖþ€'�������¶ Þ?h@����ÔSri%ÒÛêŠy9MòÑéêS’ÞRò¥Ô½',×^Ü£ÍÛQ¿9òv°«øö]c핲ö'±bÜvÌø¤ÝžÈˆü<–2êvEöÆÙ/¼Mªgû’.Õ<!¨ÌÇî±ïå£òwuú$¾ó3MÊyÓ9ûO«QUº¹UûÇ£¼LødÎUJªøwÕϯλQmÝŠçLòž‰rÔÑ£œuZ:¸€�ƒœËæ×z—¼ÖœËæ×z—¼`9̾mw©{ÆœËæ×z—¼`yÎ¥ókýQ÷Œ}ÁæÆ=ý7ÇÍS—³qâÔ(ðò±útÎ>Ô4ÈñêxK¾Ê¥yæÓ=/WÓâ·–v:^[tUÐË•­ér{-K ¾Å|}ã‡_ILÃ×­i‘ëÔqžøûǾ†aïÂø;×™c}ìaldäûߥ‰¢¨Þ)ñë” Ý›r“|iíÛÙèêô€������kMÓ£³s±è’¾}Í–$úû:Δۮ¯–2“1§£_ÒòcÆ£:›ðÂ[‰·];Á˜”ÿ�ã>öS—ѪRö#:eO„¨ñ2V³ùF™„)ñ2V³ùF™ü!O‰‘úµŸÊ1!Ïêñ2?W³ùF|ë*ÍÄ ä×ÆÛºXÖ?¸åvÔÜ¢iÎ-\á×c*±çUÅ(ê9-/ oî9E‹ÑµÏ(v›Ög{~n™~_wê÷…ëò„âYú<ѵ™/ý†G£kî3À¿ÿ�O(j/Yõù§Á”ñìœò2r¯Ýl“DZ%ö-Y®‰™®¬¹Ý»EqM8X˜¶dÕ‘(^¬¯tŸ#5º}½æÔMQWl9ÅÉŠfŽÉOÏqþQ/:fñ,÷åW©ŒHsÜ•^¦1"r�������c.ú)ùÐsz_õ5ýT\ȯ]pÈÉãÆUPÚ‹K¾ŸSô.¯>ýƒ"á�������� ìL\|•t®¢«\2,qs‚{=ü–&ca¢’Kd¶D�����}™®ÊÎÃOgºý£ÏUÜN5Ä{ïzbÖc1Dûü *sï5 'æÿ�±Ìí\{üœ8蟄ŠÛ|9˜¯ôóÍ_Tx~ÙÓOÓ>?¤ÑçI«i’~üÆ£W_~,NˆìŸÒH)¥øGÿ�²¶5íbqØè¨���������� ÙwIq1é{]vé?+®^ým=uÆšã]khÅl��������–˜÷¯!ÿ�x³÷˜@�����<q[6£/(\«ñ2$»¸cËÉÓî1Š»péš#i—±Å®q|¾- ïÔ’—µ"h‰ù©‚nU-Rž1QŠŒRI-’^¤F9CœÎyËЀ����������ÏÕõIiXð¶½?3:S—“Ä­JKÊ÷il6 -•×äeh:ÕvY.,SÅãq`º—Có·çò]— 1+Û•ÁÕ«óé×?dYuð³GnveK+¯œÓ:vúéo[ÒóaÆÅÔ±.mwÆ^ƨäS>öÚåæ’`H�����›¡Ø­ÇÊiõf_U’@i�������������������0xIU¹:f45½>Û(r¸­&çÅn)îŸFÊ^€â<Õ«k‰Â­Ceà4Kø�éúô#µZí2}·à©~ì¢UUÂ*·år´ÌŽÍ¨²¯ãÕ“¬EËœéØÒK©ãå97è”#·¬–§¤ÕšFløÉÕ$ýSoì¦^±§C£3NÌiõï§Ybý˜°3­ÄàMÏ”ÈÓ´øJ]-ۇɿNñ@uDø\¹:2tŠåâG"~­ÀÒ®<qüØMy.OïhÃFø¶bú-^ð=âi>7ú‹Þ‰£ü¦7ú‹Þ›i_øïüÏ÷­Ú¯—Ú1ä×…ØýàAÁ9Q‡§åÒçU5¬üžJ<d»ŽR[mä{ãü½_]�çXÿ�/_×@^:ëÈ©~šêº}}þv4~•Ñ_x…pÜw®õrüÌ]Ÿº˜]ªN59ãiÙ¹/ÁÁVÿ�ú8COÍÖóuå Ì:°pª¡ÍÖ®VY9Ií6ËeÕ.„ßœ ð������������ ÖŸ-OK·¹ªï[YEž%‘|hKÐÒÍTŽ­§F÷Uðn»é}uXº%éêí[04�����8Æ]i?:—ERë®ÏõãÔÿ�A�æX¿6§ê <æX¿6§ý4KuQWÔ@9µ#_Ô@9®?ÈUõój>F¿ª€sz~F¿ª€szWõPú¨Ôcö)y䤣)4’[¶ü�E´î’jv¾6ÏÀº’õ}­0�������������›×1òt\Ékú]2¹l–~$:ï‚øñ^<W­tvµ¦êXº¶9¸7Fì{£ÆŒãì}È ���������������W”¹Í®¸þ*»~3ñ}þ®Ð,���������������áu};Pàn¡v·Áê^Ft¸ùÚl{|6WØûWüT}V‡­áð‡K«PÓç)Qf뺋‹Mu§æ Ð�Ú]`:À���������½–ï¨ »xC‚­•8²³6è½xvlû]Ì}-bÕXÌòïL m×óë”1ñ±ôØÉt[}œ¥‹ôcÑ¿ééÞsÝïÿ�›ŠôJPQ»„0Š[(bÓ]izÔŸ­—‰DmGŽF'«¸ðnI%-oW—t›ß"+äèBó,}0cîÛ84��������žn^V,âèÓì˯néÕdT“óI¤ýfé¦'yÂJ¥¼#ÅÆü«>¥‰d’ôÅ5ö›‹UU´ÇŒ¼¸qÁè>,õÂ^,«š~¦|5ÙÚT; ´»'Y™áaÛ/á'¸ß1êj‡ æß..‡™%àžD¡L~Öåö‡LoT.g£®/2"·žŸ…Ú”g{õïöñGYòõ9¢žƒ›‘ùO5¿Å¡WRû#¿ÚX»LmDyú¦'ª*x¦ÑRª7ê ·Åç–%»{·²kÂ_ˆ«¤xA¦C‚:D:é¾ÍþS*Ù{dI¿\ÿ�Pi‡²à†ƒ5Ýit?+OrEû±µF˜yèuþ/5¾Úìœ}ŒMû“¼®˜t¸+§GñSΫèg\¿ˆ¼zþÞèšaÓÐg•¾§VßžV~üY8i}ˇOWª´¨Õãd—‡+2ßê8“U<éðŸ\˜”väðƒ)ó ,ÔºùÝR~e$×í"ÔöÌ~3ïÁ9¸ÿ�©• þã¥j8}²tò±õׯ/?-Q>_Î ]Vñ8A¤ç>.6£9øœ¢R^‡Òb«UÓ¼,LKB2ŒÖñ’’íL½ ŠÜ¼z"Ý×ÕZ]nsH±; K„uŸ“äs§¾ßÑa+ºE=ð«ãü“0îY9÷­±pÕ>>TÒô¨ÇvüÍ¢b˜ÞD?¬µ¾­•fom]å?Qu¯¤Ù®&>HÇóï¸ÇV•T×Eq®šã]qèQ‚I/AÎfgœ«²�������������`�����������\Í/P7Œ…ùÊÔ½¦é®ªyÓ8IˆÙ/€ÜsãÇ“—殲»$uø«»Lÿ� ¢® h¼]¥‚¬]–Y9û[3ǹÙ+¦±´'ï¦âU/4Å?^Æj»][Õ$DBúJ+d’KÀŽj������������?ÿÙ��������������������������������������������������������������������������������������������������������������������������������������������������������������webdar-1.0.0/resources/webdar_title_logo.jpg��������������������������������������������������������0000644�0001750�0001752�00000013564�14773727254�016133� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������ÿØÿà�JFIF�,,��ÿþ�Webdar Faviconÿâ°ICC_PROFILE��� lcms@��mntrRGB XYZ é����,�acspAPPL��������������������������öÖ�����Ó-lcms����������������������������������������������� desc�� ���@cprt��`���6wtpt��˜���chad��¬���,rXYZ��Ø���bXYZ��ì���gXYZ������rTRC����� gTRC����� bTRC����� chrm��4���$dmnd��X���$dmdd��|���$mluc���������� enUS���$����G�I�M�P� �b�u�i�l�t�-�i�n� �s�R�G�Bmluc���������� enUS�������P�u�b�l�i�c� �D�o�m�a�i�n��XYZ ������öÖ�����Ó-sf32����� B��Þÿÿó%��“��ýÿÿû¡ÿÿý¢��Ü��ÀnXYZ ������o ��8õ��XYZ ������$Ÿ��„��¶ÄXYZ ������b—��·‡��Ùpara��������ff��ò§�� Y��Ð�� [chrm���������£×��T|��LÍ��™š��&g��\mluc���������� enUS�������G�I�M�Pmluc���������� enUS�������s�R�G�BÿÛ�C�    $.' ",#(7),01444'9=82<.342ÿÛ�C  2!!22222222222222222222222222222222222222222222222222ÿÀ�,,�ÿÄ��������������ÿÄ�O� ����!1AQaq‘±Ñ"2T“¡²Ó#3BRdrt’”¢ÁÒ$5S‚ƒ„£ÂÃ6CEUVbcðÿÄ������������ÿÄ�2� ������Q!1‘AaÑ"2Rq¡áð3Sb±Á#BÿÚ� ��?�ûù���������������������������������������������������������������������������������������������������������������������������ÙnÀ‹VD,̲1¶2\˜¨ÅK­õ¶¼ÒÌ ������������������������������Q­àeäUeÔkY0MJ¦»+~6¥S~I <®.“ª[¨ãäâÙ«bÔ¥K¨Åž=uÂ5Å.\ùQo§}¹0üH}+“ÛÙm»ë`d������������������������������1(Fi)E4š{>õÒ€å‹[®Ž•³”¥6»¹M½¾p;��������������������������������������������������������������������������������������������������������������������������������������������������������>s‹Ã¶jÜ_ÅáëÚΕ™ǘ¿—T¡,z¤·®Å(¿|åÔ—pëì÷K’Mhúõ ­®Vû~Üý$ÕÆuSÉŽ³¤jºDÞþúü~v¥·k¶§(¥ùM{ƒ¨ájxÑÉÀÌ£*‰-ãe)ÅùÐ@����������������������������IW‰Æ²qRRÔ0w—àïLÒßÊÕËÊ£âì�ùœ-£æe<·ˆ±óÛåbMÑkÙî·œmxžèˆ´äÞ}K}©Ï5g_R¶µ¶ÉttÁ¾öUN;qÖprô–·Þ̈)Q²íç`ÜRü§âò«ª¾¨ÛM²¹-ã8I4׉ 7 ì›§…µKõ¾Ó5Lš•WeãÆéVº£Ê[íæÜ������������������������Uê÷ZÒ,K¦V[S~'[—ú€��Ö&O áNÉäiö_¥eOvîÁ’‚”Ÿl Ó„ßG\¢Àø£Kmecck8˶â}¢ô·èÞ¹>Dº:Ú”|H Úgéz­óÆÇÉQÌ­of%ñu]„¶–ݧmŸc¦„£ "ªâ¶R²¤—g&rîÄ������������������������BËŠ³QÓ×l';<Ê?ë@M������®Õ´3\ªÔpë¹Ö÷®Î˜ÙSï„ÖÒ‹ñ¦€åÃtx.àêË,UdäENÉ9I®z{6ß[ñl������������������������!ÇíºÄå·E¨§ã›Ý¯2„} L������J[cÞ¿»ç²L À�����������������������oe»&œ¹XòÈkßdÍÛæ}ý•%€������…¦ýÏ#ó‹~“h�����������������������EÍûd#Šºï{Kž~Ž+@Jê�������š÷¯#ó‹>@�����!ۨץEžEñøP­tGÊßB9UËOðv§f3U62Ôf·”1ªñr¥?`‰Åžv¯‘1ƒ¦géæIjQ錱'âq”~}ØXåiüù‘£<ï'ÉÂZ­˜¿Ò–Që`ùÈyÚé^tsžÑ4~­6ñçŸ'Hìñ_éUSùóXUuwÖ¬¦ÈΪQ{¦z)ª*‹Ó7‡žªj¦mTZ[•�����Ü������ÞËwÔ\O·JYrê±mZ}ì~~¿Gp€�������ƒ¥ýÏ+ó«~€����õYå×§Øðkåät(®îöqí‰s¥—nÏs‰³hWâçåcP¡îðí—6ÓÝö³…ÕÓM´¦>zq0h®«êÄünìõŒ„º4ŒßBö›ôšÿ�n~žlz5¹SÖó×ÀÐò_–[~ãÚ±{°¥¨ì˜]ø°‘¦çgfÛbÉÓÞ5Q\廓îÛc¦..$Îz2Þ>FJóKé’ÃÕc~UãXŸ?Wfût4»ÉNáâæÃáÎ?Ø*퉅—ŒÇ)óZ§”�˜÷;âxÿ�%aôo,ç`üOä£ì÷;âxÿ�%`¼‡¹Ø?Çù(ûä=ÎÁø–?ÉGØ/!?˜>øAEüÄž#/–åCÅ ›#ê‘2ÆÃnbIl²óø™¿[&JvS˜³³71!’†®ŒŸ½Õ3¡äœ_®,d£aÅág7¿»Úšò:¾¬¹h÷cëæœ]±q2òsa=S6ê ¹WÆÎFÒd^Ñ]~¤ûÑÇ%1hŽ+zcÌÐ�������‡ÎÒòµIåÕ^·©`Õásn8–F ôõ)mºôžîÏ4Ó¦˜Ÿ‹EûÒqô…Z‡º:­»vÙ¨ZÛý£si›Ú:@ïÓû¾l¿+6ézäKFÑÐoàuwÛòÓö’Ѱx%]öü´ý£,l3àµþ¿+/hË)àÕþ¿+/h˃WøVü¬½£,l9mSm(e=¿öšýçZoìÏGm÷£«›OîyoÉ9{I©äô4”ug“_àe~œ½¦¢¸÷g¢i(êÏ&¥Ù“úS¼g§Ýú&”ï[ƘMoäCÉtâýféËT^ßF*¦i›]·3øÆ_ëVrS²Çã­YüC%;1øÆ_ëVÉNé¤��������ç}¼Í{¨¹ÎMF]r“èKÿ�Ý]dª¨¦/*¸ÓðÖ*­ÉNÙ>]³KáIõ¿'bîI#ÃTÌÍ夢��������cïvkünߤ{0}†e$è€����„ñ÷”¦ï¹vì¥Ð=X7™ªjž¯E8Öˆ¦)ŽŽ p’÷·fGÇÍË÷ÄáÓW*ª”ÿ�´»M5G:iëä·6X·†uÛ.Ž˜GøMÓ…]Qzqg¤y1V%ͪγæ•ãœœš]2}§®˜˜ˆ‰›¼ÕLLÌÄY’²����������Y8ø°SȾª`ÞÊVME7ÝÒ/a¦“…¨gY›áXó«R¦„¬OyõN}Ù^Iwž\jï6†¡éc8Ío&¼L⬀�������Éé³ç{]™ÙôXÑìÂö”ã¢������������������FµŸªã]‰£iÔge^æùäó)F)o³ÙîúWG”ç‰^EˆEŽ£Æ5ôdpDäûñµ:&¿mÀÆ¿‚ÙPwë×NµüžêY5B\¨ÆÕ‹tbú·ÛýÂqižpYí„1¢žO]R}Ú­Ûäã!›c‹¤täþ”®–›§à7Ð¥uKô”Z5ÿ�9N+ } Av+p5<ÚßZXÚÅê?¢¬ÛætIyYÏOÎurq¸U£ºQ•V?ó+Ѥ»Œ0¸š©o.¾Ø÷d`Ñ/¡™ÐÖé \Q¶ÖðeùzkýÖ¢hx—Hü@—¾Ô°$ÿ�1’ÿ�tº¹wE•­®¼Üþ_X4#rí¼/YøÞê’úÁ¡—cÂõ¯Ž`þ©/¬¹v’ÉןÁÏÀ^\)?÷F„n]_{ã)ÚÝ:ö“]}‘zTÛ^~|š%Ðø6ë®Óµ±Yt5L¸Îq%7ÏK¥-ÞÝ}GL8µ6Iz#¢���•ù4bÔíȾºkKw+&¢—‰› L1Òµ}nf•w†ýªwY‘Jn¨$ÒÛ—¶Òm¾¤ûˆ®&m g 6€�����������›ˆêȆ:žnÌÍ2å—Uqë±$Ôàºzå4¼mñ)ÍJÃ×àgcjz~>v±·"¸ÙTâú%·Lñ´�[­˜24­;..98·'Ö¬¦2õ +#Á<1^üÎ…ƒFïæôª¾ŽÅ¸ágè³³— j”¾êu\˜/B³bæ«q"<-‹\R†v¦’ïÌœ¾–åÔ«rÍßA­£©ê1òYë‹.­{¥œ_ ØßF¿«Ew.aúêµîY±{ò[üªµîY±kwÿ�ˆµF?Õ Z÷,ïœVÞíjRñµOÕZ÷,ÙðüÚþ˜ÔšŸ«µîY„«Ã„áªêÆvJÙ$©é”¤å'÷>ÖÛ$bUëd• ÉճߚŸ«.­{¥peÿ�uÎôSõcV½Ë3î íÕ3Ÿš¯àµîY²Ðªûì¼Éx—©!«^å™iê\©,›ëVeY%èåmóšêžõu«DÒ¨›zn$fúæ©)ù^Û™¸¬œaf£~D#•¤¶\˜·¿í7æHõ`Óh»2èv@������������Îaj õÊ—'‡u ·¢×ðp¯“ÝÂO²¹¾”û$Úêko.-›ÃQ/ ïºÝT���������������G)ÕERÚëZûÈöËÙãò3xtf”•tcAF+hÅl’ìGµ–@�������������GÎÂÆÔ°nÂ̦7cß +šÝI2L_„¥ñFWòs¨Ó ñ5Ö]Ã÷K‘¦êÓét÷UsñvK»Å¾ÞLJ2ËQ/ª×d-®6W8ÎIÆQ{¦»Ó9«`������������ l²Öì²q„#Òå'²^qqæ³xëI®¹ÇLvêÙ)5°k•±oÇ4¹1ó³ÓOeÄŸk‡Ç‡Ýœñܤ†­ÄwÊS«‡%Ë›ÞvæfB½üJ0å´—w­îÏ]8XTE¦®‘çfo3Üë ž,mr´Í*)´›Y“m.ý¹¾’Ìao=>éë/ÎM���������‡—«iØÑ™›m«xFÛy^MÍEUˆ/• !lyUÎ3|^èÈØ 6’Ý´—Œ ìÎ!Ѱ$¡•ªbU7Õ ]Sóu›§º¸Ä$ÌG4²ZnRð?RÌkú¼iW䕜”ý%Ó˜ç1ž.®Õc¬ëúuØðÆĺ;NÙ«D#-Ÿ2Í\ª«¤yؽ]ÐáÂúOð¾F‘ƒ~ *œåw=|’m´·Þ+eÕÕØsÑìþ3Ò<ËÔ¼Vq”—¿Ö4˜~FŸ7ë°š]ŸÝž¿cÖÝ´áÅR¯eÄX±ŸzÓVÞŽXÓÁ¿³=~ËënÒãuñŸgåiz¬,áövzý“ÖÝÚ¬®.®^ÿ�3F¾=Þ eoÓÎ?Q™ÁÁžQ=cÉbjoî×U?¤éWþ¼éÁúoÖgÑð­íOO¹š­’fRÒÈáÜý»geV%éš—ÌcѶª>¾K›À|w ÒöÍ»'ï·óÌ[*é8ò~rz&/t_á1&x[àjún©_9§ê¹Qï¦ØÏÔÎ5á×DÚ¨²ÄÄòM0 ���«Ëâ3R­äs×Gm鯋¶Å¿VñŽíy^ÈëN ur„™…Uº®»¨­±qêÒéó26¶æ¼PO“Η)yôàQOµ7þ™¼¢.öÅv£;µ;ÓO—›>q&»c4QÞ+šxSÃáùt¶ëXÆ0ŠŒ"£Ô’Ù# È����������¬ë…‘qœ#(¾µ%º¦þÐoœ§-+KáN˜óR~xìΑ‹_+¦XD|£v<ø®å¨]·Ò5¯_‡HòL°ÞÃÑû¦œ²ûÿ�9¶w}6ƾ'tÛáÃú2ÂÓIÓ´å¶.2ÿ�ãLaêG:«ª®5MÚˆˆä˜d�������a¥$ÓI§ØÀªÌá>Îs#KÆvÿ�[r&¿µŸÎt§ºbÑ<i‰q\?“‹ ´Î Õðû£+ùø/5ª_3$ÕM^Õ1?OêŶ–*§(\Ÿ²l<…Ù+´ÔŸìÉ"Mžñ1óû¶é0\Y&¹ÝG·›Óz}.Çê38xÔÏ_±ënßÀõ‹&¥ç¸öši­?Øoçpâ-–>¾kÇv…‡c›Ë–No/áG/"vÅÿ�bO’¼ÈÔUn\>“ꦺ+UÓ\+‚êŒ"’^ddn����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������ÿÙ��������������������������������������������������������������������������������������������������������������������������������������������webdar-1.0.0/resources/favicon.jpg������������������������������������������������������������������0000644�0001750�0001752�00000007236�14773727254�014072� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������ÿØÿà�JFIF�,,��ÿþ�Webdar Faviconÿâ°ICC_PROFILE��� lcms@��mntrRGB XYZ é�����4acspAPPL��������������������������öÖ�����Ó-lcms����������������������������������������������� desc�� ���@cprt��`���6wtpt��˜���chad��¬���,rXYZ��Ø���bXYZ��ì���gXYZ������rTRC����� gTRC����� bTRC����� chrm��4���$dmnd��X���$dmdd��|���$mluc���������� enUS���$����G�I�M�P� �b�u�i�l�t�-�i�n� �s�R�G�Bmluc���������� enUS�������P�u�b�l�i�c� �D�o�m�a�i�n��XYZ ������öÖ�����Ó-sf32����� B��Þÿÿó%��“��ýÿÿû¡ÿÿý¢��Ü��ÀnXYZ ������o ��8õ��XYZ ������$Ÿ��„��¶ÄXYZ ������b—��·‡��Ùpara��������ff��ò§�� Y��Ð�� [chrm���������£×��T|��LÍ��™š��&g��\mluc���������� enUS�������G�I�M�Pmluc���������� enUS�������s�R�G�BÿÛ�C�    %,'..+'+*17F;14B4*+=S>BHJNON/;V\UL[FMNKÿÛ�C $$K2+2KKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKÿÀ��´�´�ÿÄ��������������ÿÄ�B�  ������!1AQ"aq‘“¡±Ñ#STU’”Á%23BDbsÒ$„ÂáâÿÄ��������������ÿÄ�0�������!Q1AR‘2Ba¡Ñ"q±á3CSðÿÚ� ��?�ú©����������������������������������„ò²¹�����������������&¡qVÚ‹©NqޤÛm,ñÂëàM©^¥¿úšQ¥87FMç|Rüü K������������������5œââù2FÄ���������������������������������������������������!êôªVÒîéQMÔ)F)<<´‡ÑèßÔÓãu¢ë—Ï‚ñF¢„—¸îùˆÂÚÛ-‹CH¦c1+Xí¹§¿Ö:T/(¬|õŒž÷À|_˜µu©o4M- öûi¢U”¡Zï¸êÅáÓº‹¥/o3_Ôç S§(ÎYR‹Ê`l:U©ÖsTç:rÝž'Ùí ������������� 7…—ȳ~ Úª›„jßV”süK{ û.ÓñC}?¹ÎÑεUéºu©Â¤8Î)§ædÄÌxTÐÑ.tÊÒ–‡©Õ±£'—m8*´SñEµ3:#´ÌG8e:qä—Giu]>JƘëÒú͆f—kp~ódè®­-á,æ“  p®ì/®åQU¾ªÔ¥Áµž:°¸ªô¤�������������}Bâ¥ÅÅj‘§N•9JR“ÂX@ymšŒ£¡Y:‘ÝJ}$—ŽMËó<ýiÍåÓO…fd°��¶+L»ƒX”/«ÅýãÕr=�������������=¶÷Žˆí7ñRþ¤m —7¼ðü|³Äx ”TRŒV"¸%Øys9œºã”2@�� Œ¦©TÖ¡ìwt¥ÆM®1‹àº¹ž'5‰—,ò—¥,€��8׺¡o…Z¬`ß$ÙKjVŸázéÞÿ� eÁj¶M㧉Nñ¥êiÝõz%S© ±Þ§5(ö§“X˜˜Ì1šÍgÜ”�QÏií¡7ä¿xxák?¿ÝcÞ–;éµë´ÔíîIüÝcÞ¹žúôþºw±ñÊÒ¢ü‡ÿ�Ox7CktÅϺW–Úkò ý=àÝ-°Ñ*8¡Ž¤‹¼OgÔ#t;wÓ¡ý«kë _L›£©ßN‡ö­¯¬C«é“tuP;ÈíÒwe› :¥F¢— µ%æ¼Ipóœ}¦ÓHÙ>-´ã3•ÁÀÜ���š±§i·ÚÍ;ÛÊ6ó•Ú”cRXmtqâzúZWµ"kKLE¥ußN‡ö­¯¬Fœ _L«º:¶ï—EáúÊÛÛ#ƒ©é”æùto´­¾øàêzdÌ#\íf”¨Ï¹¯iÔ©u9,ù‘ÐÖÛ8ŽkRÔݼ»CgBNsèêÔ—T¨Þ}«ÇNËÚ)Îi™ýÝ·ÕÒ¿(¶#öNŽÓÚÔÌcÜMã—OóNÓñ³ˆÑÿ�±ÕßiÐèëZßÛ[ÖmtUVã]cºêF-HÄùôG³šßœyuY|¹¥ý¡mëQÓÿG.a¤ö‹GƒÄµ+Tÿ�º‰IùdÌ0l€��0âŸ4† kÑSú8ýÔ&ÓÜÆ…›³³Œ~P»[”c­è眹pKµ™ê^) ˆÌ¥éöTtë:v¶ñQ§Muu¾mùߎæö̺â1I*���VhTéÊÿ�XS„%8ݧ–“ÂtáŽ'±Ùþr_ÅuÑSú8ú…Zw-¿ÐRûˆîZAOî :Æ1ŠÄRKĈÄ7ÉÂ[ÎRJM®1ìÁäö˜¶³Ÿ¯ôô»>Û×Oí„nf¦©Ðžãâæ”±Ÿ1]v‹Ïè·ßú[V4i®¿dêZe´sÒ[ÛO³RÁéiWZ?Él¸5-§?aÓäë/©Ûú¨ü ùõdÇÉÖ_S·õQø}D¢���"\êv•U+›Ûj5…J±‹~füDf'¨Ð•JÖµ Š˜ð`«Eo>Ì‘6ˆ„¼Ö‘GhgZ®«s£R¯qr¼ÝqEOª c‡o>98õi:žkÖÑUƒÔuŠœ®örî1\½jur½)˜woªü_£2שÃ&Ÿ©ÓÏ[³›^Ì”îÖê·´Ïùkÿ�ÁÔøïs‰ ÖµÆ:~¢×orÈžín§ùv‡Õoÿ�SàGw¹Ä†¿l¹Û_¯öu>»ÜâCM“»…åÖµVœjF2»ŽH8¿ÝAr~CÑÐŒW -9—¢7T�²œcé%¼ð²ù±‘²mrm ˆŸçmóyr����� úCÒ-éºÄiÅO}Q®ð°Óå&ßcIyÌ5kç V^K¹¨o9t4òù½ÄsfZâœic¢Í<}q÷ºM°‘BööÞ{ô/ï)Ëáq&½ ã¨n”m„ª{A­Óy†¯uä{’÷ÄÒm„ŶZúþzËB#z6 mvŠ<#wl×õ[eûÐÞlg¿m£úÕ§áô7›ïßhþ³gøWþCy±Óhu‹[‹ªÑ¯m)]UéjæÝóÂ\<.Ä‹F¤Ç±+¾ÝkéèzŸû'ccYíN±(4®÷ëT¡ð#‹cb,µ­RyrÔ.[|ñ=ßv ÍæS¶vCNZ®»«Šõë|œ”×IVSðŸ®9Ç&ýšQºy©lCèÇR€������W6ô®¨T¡qN5)T‹Œá%”ИÌ`|Ëht:›7V-ÊUtú’Å:¸ý×ôÍörIœššsÒ¶@|9˜´�������9s&"fqzçZ¢…:s©œeÆ’Kµî§è÷ìÚ“Îc¿&s©Om¡]ÐÒ4èÛP°Ô®$¼*µ•£‹©.Þ8òyÓ]-±ŒÇ»9¶^ž2ÞŠ–ÊÎ4@È���ÊåWtd­¥N5…Ô‹qô"EOtm·ïl­o#½Î…]Æ—’_ø¤ùãÿ�}ÍÓåk÷ÁhwYþí?ò#m}_ÏàÌôc»ušïvŽ•Nßúî.^ˆ¦1N¿oÉÍÂãLÖ5+yѾ¿¶¥J§ƒ:TmÔÓ–Y÷ éôÏï?ƒš5¾ÂéÔiF›¯s(Ç’ÌWº"mYùcÙ<ú»w•¥cÇ­#1éh9õr–ÃØ<(ÜÝÅ%Ú‹ÿ�‰YŠZs5¼˜™7 » M)tÓÎ8*°R^̳N~_¼ÿ�fëuU\lŽ«F?7J•w½ÎqÃÈÒ÷• )ð™õ”ï·EU]6þŒÜ*ØÜÆK©R”½©4g=šØÌLOûüán$9«k–ð­n3ÙÐËàW»j}=ãòž%R(i•Ãù« –±ûR¦â½¸/–~kGòŽ$yBÒÛcu*Øé¥FÝuïK}úļhiGŒÌý¿*ï²ûNØí>ÛºÞ¼¨°þs„ñEyzòk[lŒS—óî¬óç/ANœ)ABœ#G‚ŒV l@�������������������������������������������������������������������������������������������������������������������������������������������������?ÿÙ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������webdar-1.0.0/Makefile.am����������������������������������������������������������������������������0000444�0001750�0001752�00000002636�15045134056�011743� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������######################################################################## # webdar - a web server and interface program to libdar # Copyright (C) 2013-2025 Denis Corbin # # This file is part of Webdar # # Webdar is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # Webdar is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with Webdar. If not, see <http://www.gnu.org/licenses/> # #---- # to contact the author: dar.linux@free.fr ######################################################################## SUBDIRS = src doc po misc dist_noinst_DATA = INSTALL README TODO AUTHORS COPYING ChangeLog CPPCHECKDIR=./cppcheckbuilddir cppcheck: @if cppcheck --help > /dev/null ; then \ ( mkdir -p $(CPPCHECKDIR) && cppcheck --force --file-filter="*.?pp" -isrc/testing -isrc/python --cppcheck-build-dir=$(CPPCHECKDIR) `pwd` ) || exit 1 ; \ else \ echo "cppcheck not present, aborting" || exit 1 ; \ fi clean-local: rm -rf $(CPPCHECKDIR) ACLOCAL_AMFLAGS = -I m4 EXTRA_DIST = m4/ChangeLog ��������������������������������������������������������������������������������������������������webdar-1.0.0/compile��������������������������������������������������������������������������������0000755�0001750�0001752�00000016350�14215102164�011256� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#! /bin/sh # Wrapper for compilers which do not understand '-c -o'. scriptversion=2018-03-07.03; # UTC # Copyright (C) 1999-2021 Free Software Foundation, Inc. # Written by Tom Tromey <tromey@cygnus.com>. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2, or (at your option) # any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see <https://www.gnu.org/licenses/>. # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. # This file is maintained in Automake, please report # bugs to <bug-automake@gnu.org> or send patches to # <automake-patches@gnu.org>. nl=' ' # We need space, tab and new line, in precisely that order. Quoting is # there to prevent tools from complaining about whitespace usage. IFS=" "" $nl" file_conv= # func_file_conv build_file lazy # Convert a $build file to $host form and store it in $file # Currently only supports Windows hosts. If the determined conversion # type is listed in (the comma separated) LAZY, no conversion will # take place. func_file_conv () { file=$1 case $file in / | /[!/]*) # absolute file, and not a UNC file if test -z "$file_conv"; then # lazily determine how to convert abs files case `uname -s` in MINGW*) file_conv=mingw ;; CYGWIN* | MSYS*) file_conv=cygwin ;; *) file_conv=wine ;; esac fi case $file_conv/,$2, in *,$file_conv,*) ;; mingw/*) file=`cmd //C echo "$file " | sed -e 's/"\(.*\) " *$/\1/'` ;; cygwin/* | msys/*) file=`cygpath -m "$file" || echo "$file"` ;; wine/*) file=`winepath -w "$file" || echo "$file"` ;; esac ;; esac } # func_cl_dashL linkdir # Make cl look for libraries in LINKDIR func_cl_dashL () { func_file_conv "$1" if test -z "$lib_path"; then lib_path=$file else lib_path="$lib_path;$file" fi linker_opts="$linker_opts -LIBPATH:$file" } # func_cl_dashl library # Do a library search-path lookup for cl func_cl_dashl () { lib=$1 found=no save_IFS=$IFS IFS=';' for dir in $lib_path $LIB do IFS=$save_IFS if $shared && test -f "$dir/$lib.dll.lib"; then found=yes lib=$dir/$lib.dll.lib break fi if test -f "$dir/$lib.lib"; then found=yes lib=$dir/$lib.lib break fi if test -f "$dir/lib$lib.a"; then found=yes lib=$dir/lib$lib.a break fi done IFS=$save_IFS if test "$found" != yes; then lib=$lib.lib fi } # func_cl_wrapper cl arg... # Adjust compile command to suit cl func_cl_wrapper () { # Assume a capable shell lib_path= shared=: linker_opts= for arg do if test -n "$eat"; then eat= else case $1 in -o) # configure might choose to run compile as 'compile cc -o foo foo.c'. eat=1 case $2 in *.o | *.[oO][bB][jJ]) func_file_conv "$2" set x "$@" -Fo"$file" shift ;; *) func_file_conv "$2" set x "$@" -Fe"$file" shift ;; esac ;; -I) eat=1 func_file_conv "$2" mingw set x "$@" -I"$file" shift ;; -I*) func_file_conv "${1#-I}" mingw set x "$@" -I"$file" shift ;; -l) eat=1 func_cl_dashl "$2" set x "$@" "$lib" shift ;; -l*) func_cl_dashl "${1#-l}" set x "$@" "$lib" shift ;; -L) eat=1 func_cl_dashL "$2" ;; -L*) func_cl_dashL "${1#-L}" ;; -static) shared=false ;; -Wl,*) arg=${1#-Wl,} save_ifs="$IFS"; IFS=',' for flag in $arg; do IFS="$save_ifs" linker_opts="$linker_opts $flag" done IFS="$save_ifs" ;; -Xlinker) eat=1 linker_opts="$linker_opts $2" ;; -*) set x "$@" "$1" shift ;; *.cc | *.CC | *.cxx | *.CXX | *.[cC]++) func_file_conv "$1" set x "$@" -Tp"$file" shift ;; *.c | *.cpp | *.CPP | *.lib | *.LIB | *.Lib | *.OBJ | *.obj | *.[oO]) func_file_conv "$1" mingw set x "$@" "$file" shift ;; *) set x "$@" "$1" shift ;; esac fi shift done if test -n "$linker_opts"; then linker_opts="-link$linker_opts" fi exec "$@" $linker_opts exit 1 } eat= case $1 in '') echo "$0: No command. Try '$0 --help' for more information." 1>&2 exit 1; ;; -h | --h*) cat <<\EOF Usage: compile [--help] [--version] PROGRAM [ARGS] Wrapper for compilers which do not understand '-c -o'. Remove '-o dest.o' from ARGS, run PROGRAM with the remaining arguments, and rename the output as expected. If you are trying to build a whole package this is not the right script to run: please start by reading the file 'INSTALL'. Report bugs to <bug-automake@gnu.org>. EOF exit $? ;; -v | --v*) echo "compile $scriptversion" exit $? ;; cl | *[/\\]cl | cl.exe | *[/\\]cl.exe | \ icl | *[/\\]icl | icl.exe | *[/\\]icl.exe ) func_cl_wrapper "$@" # Doesn't return... ;; esac ofile= cfile= for arg do if test -n "$eat"; then eat= else case $1 in -o) # configure might choose to run compile as 'compile cc -o foo foo.c'. # So we strip '-o arg' only if arg is an object. eat=1 case $2 in *.o | *.obj) ofile=$2 ;; *) set x "$@" -o "$2" shift ;; esac ;; *.c) cfile=$1 set x "$@" "$1" shift ;; *) set x "$@" "$1" shift ;; esac fi shift done if test -z "$ofile" || test -z "$cfile"; then # If no '-o' option was seen then we might have been invoked from a # pattern rule where we don't need one. That is ok -- this is a # normal compilation that the losing compiler can handle. If no # '.c' file was seen then we are probably linking. That is also # ok. exec "$@" fi # Name of file we expect compiler to create. cofile=`echo "$cfile" | sed 's|^.*[\\/]||; s|^[a-zA-Z]:||; s/\.c$/.o/'` # Create the lock directory. # Note: use '[/\\:.-]' here to ensure that we don't use the same name # that we are using for the .o file. Also, base the name on the expected # object file name, since that is what matters with a parallel build. lockdir=`echo "$cofile" | sed -e 's|[/\\:.-]|_|g'`.d while true; do if mkdir "$lockdir" >/dev/null 2>&1; then break fi sleep 1 done # FIXME: race condition here if user kills between mkdir and trap. trap "rmdir '$lockdir'; exit 1" 1 2 15 # Run the compile. "$@" ret=$? if test -f "$cofile"; then test "$cofile" = "$ofile" || mv "$cofile" "$ofile" elif test -f "${cofile}bj"; then test "${cofile}bj" = "$ofile" || mv "${cofile}bj" "$ofile" fi rmdir "$lockdir" exit $ret # Local Variables: # mode: shell-script # sh-indentation: 2 # eval: (add-hook 'before-save-hook 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-time-zone: "UTC0" # time-stamp-end: "; # UTC" # End: ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������webdar-1.0.0/README���������������������������������������������������������������������������������0000644�0001750�0001752�00000001600�15045133354�010557� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������ W E B D A R Backup and restore data with Dar, as a lazy "cloud" user --- Several document are lying around this README file: COPYING is the GPLv3 license under which webdar is available INSTALL will tell you how to compile and install libdar doc/WHY_WEBDAR will tell you about webdar design choices doc/webdar.txt which describes expected features for webdar Web resources: --------------- Tutorial : https://edrusb.github.io/webdar Packages download : https://sourceforge.net/projects/webdar Github : https://github.com/Edrusb/webdar Sourceforge : https://sourceforge.net/projects/webdar Internals doc : https://webdar.sourceforge.io/ Package Authentication ---------------------- Webdar author is the same as dar, libdar and libthreadar, webdar packages are signed with the following GPG key: http://dar.linux.free.fr/doc/authentification.html ��������������������������������������������������������������������������������������������������������������������������������webdar-1.0.0/config.rpath���������������������������������������������������������������������������0000755�0001750�0001752�00000044216�15045134055�012220� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#! /bin/sh # Output a system dependent set of variables, describing how to set the # run time search path of shared libraries in an executable. # # Copyright 1996-2020 Free Software Foundation, Inc. # Taken from GNU libtool, 2001 # Originally by Gordon Matzigkeit <gord@gnu.ai.mit.edu>, 1996 # # This file is free software; the Free Software Foundation gives # unlimited permission to copy and/or distribute it, with or without # modifications, as long as this notice is preserved. # # The first argument passed to this file is the canonical host specification, # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM # or # CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM # The environment variables CC, GCC, LDFLAGS, LD, with_gnu_ld # should be set by the caller. # # The set of defined variables is at the end of this script. # Known limitations: # - On IRIX 6.5 with CC="cc", the run time search patch must not be longer # than 256 bytes, otherwise the compiler driver will dump core. The only # known workaround is to choose shorter directory names for the build # directory and/or the installation directory. # All known linkers require a '.a' archive for static linking (except MSVC, # which needs '.lib'). libext=a shrext=.so host="$1" host_cpu=`echo "$host" | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'` host_vendor=`echo "$host" | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'` host_os=`echo "$host" | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'` # Code taken from libtool.m4's _LT_CC_BASENAME. for cc_temp in $CC""; do case $cc_temp in compile | *[\\/]compile | ccache | *[\\/]ccache ) ;; distcc | *[\\/]distcc | purify | *[\\/]purify ) ;; \-*) ;; *) break;; esac done cc_basename=`echo "$cc_temp" | sed -e 's%^.*/%%'` # Code taken from libtool.m4's _LT_COMPILER_PIC. wl= if test "$GCC" = yes; then wl='-Wl,' else case "$host_os" in aix*) wl='-Wl,' ;; mingw* | cygwin* | pw32* | os2* | cegcc*) ;; hpux9* | hpux10* | hpux11*) wl='-Wl,' ;; irix5* | irix6* | nonstopux*) wl='-Wl,' ;; linux* | k*bsd*-gnu | kopensolaris*-gnu) case $cc_basename in ecc*) wl='-Wl,' ;; icc* | ifort*) wl='-Wl,' ;; lf95*) wl='-Wl,' ;; nagfor*) wl='-Wl,-Wl,,' ;; pgcc* | pgf77* | pgf90* | pgf95* | pgfortran*) wl='-Wl,' ;; ccc*) wl='-Wl,' ;; xl* | bgxl* | bgf* | mpixl*) wl='-Wl,' ;; como) wl='-lopt=' ;; *) case `$CC -V 2>&1 | sed 5q` in *Sun\ F* | *Sun*Fortran*) wl= ;; *Sun\ C*) wl='-Wl,' ;; esac ;; esac ;; newsos6) ;; *nto* | *qnx*) ;; osf3* | osf4* | osf5*) wl='-Wl,' ;; rdos*) ;; solaris*) case $cc_basename in f77* | f90* | f95* | sunf77* | sunf90* | sunf95*) wl='-Qoption ld ' ;; *) wl='-Wl,' ;; esac ;; sunos4*) wl='-Qoption ld ' ;; sysv4 | sysv4.2uw2* | sysv4.3*) wl='-Wl,' ;; sysv4*MP*) ;; sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) wl='-Wl,' ;; unicos*) wl='-Wl,' ;; uts4*) ;; esac fi # Code taken from libtool.m4's _LT_LINKER_SHLIBS. hardcode_libdir_flag_spec= hardcode_libdir_separator= hardcode_direct=no hardcode_minus_L=no case "$host_os" in cygwin* | mingw* | pw32* | cegcc*) # FIXME: the MSVC++ port hasn't been tested in a loooong time # When not using gcc, we currently assume that we are using # Microsoft Visual C++. if test "$GCC" != yes; then with_gnu_ld=no fi ;; interix*) # we just hope/assume this is gcc and not c89 (= MSVC++) with_gnu_ld=yes ;; openbsd*) with_gnu_ld=no ;; esac ld_shlibs=yes if test "$with_gnu_ld" = yes; then # Set some defaults for GNU ld with shared library support. These # are reset later if shared libraries are not supported. Putting them # here allows them to be overridden if necessary. # Unlike libtool, we use -rpath here, not --rpath, since the documented # option of GNU ld is called -rpath, not --rpath. hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' case "$host_os" in aix[3-9]*) # On AIX/PPC, the GNU linker is very broken if test "$host_cpu" != ia64; then ld_shlibs=no fi ;; amigaos*) case "$host_cpu" in powerpc) ;; m68k) hardcode_libdir_flag_spec='-L$libdir' hardcode_minus_L=yes ;; esac ;; beos*) if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then : else ld_shlibs=no fi ;; cygwin* | mingw* | pw32* | cegcc*) # hardcode_libdir_flag_spec is actually meaningless, as there is # no search path for DLLs. hardcode_libdir_flag_spec='-L$libdir' if $LD --help 2>&1 | grep 'auto-import' > /dev/null; then : else ld_shlibs=no fi ;; haiku*) ;; interix[3-9]*) hardcode_direct=no hardcode_libdir_flag_spec='${wl}-rpath,$libdir' ;; gnu* | linux* | tpf* | k*bsd*-gnu | kopensolaris*-gnu) if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then : else ld_shlibs=no fi ;; netbsd*) ;; solaris*) if $LD -v 2>&1 | grep 'BFD 2\.8' > /dev/null; then ld_shlibs=no elif $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then : else ld_shlibs=no fi ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*) case `$LD -v 2>&1` in *\ [01].* | *\ 2.[0-9].* | *\ 2.1[0-5].*) ld_shlibs=no ;; *) if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then hardcode_libdir_flag_spec='`test -z "$SCOABSPATH" && echo ${wl}-rpath,$libdir`' else ld_shlibs=no fi ;; esac ;; sunos4*) hardcode_direct=yes ;; *) if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then : else ld_shlibs=no fi ;; esac if test "$ld_shlibs" = no; then hardcode_libdir_flag_spec= fi else case "$host_os" in aix3*) # Note: this linker hardcodes the directories in LIBPATH if there # are no directories specified by -L. hardcode_minus_L=yes if test "$GCC" = yes; then # Neither direct hardcoding nor static linking is supported with a # broken collect2. hardcode_direct=unsupported fi ;; aix[4-9]*) if test "$host_cpu" = ia64; then # On IA64, the linker does run time linking by default, so we don't # have to do anything special. aix_use_runtimelinking=no else aix_use_runtimelinking=no # Test if we are trying to use run time linking or normal # AIX style linking. If -brtl is somewhere in LDFLAGS, we # need to do runtime linking. case $host_os in aix4.[23]|aix4.[23].*|aix[5-9]*) for ld_flag in $LDFLAGS; do if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then aix_use_runtimelinking=yes break fi done ;; esac fi hardcode_direct=yes hardcode_libdir_separator=':' if test "$GCC" = yes; then case $host_os in aix4.[012]|aix4.[012].*) collect2name=`${CC} -print-prog-name=collect2` if test -f "$collect2name" && \ strings "$collect2name" | grep resolve_lib_name >/dev/null then # We have reworked collect2 : else # We have old collect2 hardcode_direct=unsupported hardcode_minus_L=yes hardcode_libdir_flag_spec='-L$libdir' hardcode_libdir_separator= fi ;; esac fi # Begin _LT_AC_SYS_LIBPATH_AIX. echo 'int main () { return 0; }' > conftest.c ${CC} ${LDFLAGS} conftest.c -o conftest aix_libpath=`dump -H conftest 2>/dev/null | sed -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } }'` if test -z "$aix_libpath"; then aix_libpath=`dump -HX64 conftest 2>/dev/null | sed -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } }'` fi if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib" fi rm -f conftest.c conftest # End _LT_AC_SYS_LIBPATH_AIX. if test "$aix_use_runtimelinking" = yes; then hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath" else if test "$host_cpu" = ia64; then hardcode_libdir_flag_spec='${wl}-R $libdir:/usr/lib:/lib' else hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath" fi fi ;; amigaos*) case "$host_cpu" in powerpc) ;; m68k) hardcode_libdir_flag_spec='-L$libdir' hardcode_minus_L=yes ;; esac ;; bsdi[45]*) ;; cygwin* | mingw* | pw32* | cegcc*) # When not using gcc, we currently assume that we are using # Microsoft Visual C++. # hardcode_libdir_flag_spec is actually meaningless, as there is # no search path for DLLs. hardcode_libdir_flag_spec=' ' libext=lib ;; darwin* | rhapsody*) hardcode_direct=no if { case $cc_basename in ifort*) true;; *) test "$GCC" = yes;; esac; }; then : else ld_shlibs=no fi ;; dgux*) hardcode_libdir_flag_spec='-L$libdir' ;; freebsd2.[01]*) hardcode_direct=yes hardcode_minus_L=yes ;; freebsd* | dragonfly*) hardcode_libdir_flag_spec='-R$libdir' hardcode_direct=yes ;; hpux9*) hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' hardcode_libdir_separator=: hardcode_direct=yes # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. hardcode_minus_L=yes ;; hpux10*) if test "$with_gnu_ld" = no; then hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' hardcode_libdir_separator=: hardcode_direct=yes # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. hardcode_minus_L=yes fi ;; hpux11*) if test "$with_gnu_ld" = no; then hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' hardcode_libdir_separator=: case $host_cpu in hppa*64*|ia64*) hardcode_direct=no ;; *) hardcode_direct=yes # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. hardcode_minus_L=yes ;; esac fi ;; irix5* | irix6* | nonstopux*) hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator=: ;; netbsd*) hardcode_libdir_flag_spec='-R$libdir' hardcode_direct=yes ;; newsos6) hardcode_direct=yes hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator=: ;; *nto* | *qnx*) ;; openbsd*) if test -f /usr/libexec/ld.so; then hardcode_direct=yes if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then hardcode_libdir_flag_spec='${wl}-rpath,$libdir' else case "$host_os" in openbsd[01].* | openbsd2.[0-7] | openbsd2.[0-7].*) hardcode_libdir_flag_spec='-R$libdir' ;; *) hardcode_libdir_flag_spec='${wl}-rpath,$libdir' ;; esac fi else ld_shlibs=no fi ;; os2*) hardcode_libdir_flag_spec='-L$libdir' hardcode_minus_L=yes ;; osf3*) hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator=: ;; osf4* | osf5*) if test "$GCC" = yes; then hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' else # Both cc and cxx compiler support -rpath directly hardcode_libdir_flag_spec='-rpath $libdir' fi hardcode_libdir_separator=: ;; solaris*) hardcode_libdir_flag_spec='-R$libdir' ;; sunos4*) hardcode_libdir_flag_spec='-L$libdir' hardcode_direct=yes hardcode_minus_L=yes ;; sysv4) case $host_vendor in sni) hardcode_direct=yes # is this really true??? ;; siemens) hardcode_direct=no ;; motorola) hardcode_direct=no #Motorola manual says yes, but my tests say they lie ;; esac ;; sysv4.3*) ;; sysv4*MP*) if test -d /usr/nec; then ld_shlibs=yes fi ;; sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7* | sco3.2v5.0.[024]*) ;; sysv5* | sco3.2v5* | sco5v6*) hardcode_libdir_flag_spec='`test -z "$SCOABSPATH" && echo ${wl}-R,$libdir`' hardcode_libdir_separator=':' ;; uts4*) hardcode_libdir_flag_spec='-L$libdir' ;; *) ld_shlibs=no ;; esac fi # Check dynamic linker characteristics # Code taken from libtool.m4's _LT_SYS_DYNAMIC_LINKER. # Unlike libtool.m4, here we don't care about _all_ names of the library, but # only about the one the linker finds when passed -lNAME. This is the last # element of library_names_spec in libtool.m4, or possibly two of them if the # linker has special search rules. library_names_spec= # the last element of library_names_spec in libtool.m4 libname_spec='lib$name' case "$host_os" in aix3*) library_names_spec='$libname.a' ;; aix[4-9]*) library_names_spec='$libname$shrext' ;; amigaos*) case "$host_cpu" in powerpc*) library_names_spec='$libname$shrext' ;; m68k) library_names_spec='$libname.a' ;; esac ;; beos*) library_names_spec='$libname$shrext' ;; bsdi[45]*) library_names_spec='$libname$shrext' ;; cygwin* | mingw* | pw32* | cegcc*) shrext=.dll library_names_spec='$libname.dll.a $libname.lib' ;; darwin* | rhapsody*) shrext=.dylib library_names_spec='$libname$shrext' ;; dgux*) library_names_spec='$libname$shrext' ;; freebsd[23].*) library_names_spec='$libname$shrext$versuffix' ;; freebsd* | dragonfly*) library_names_spec='$libname$shrext' ;; gnu*) library_names_spec='$libname$shrext' ;; haiku*) library_names_spec='$libname$shrext' ;; hpux9* | hpux10* | hpux11*) case $host_cpu in ia64*) shrext=.so ;; hppa*64*) shrext=.sl ;; *) shrext=.sl ;; esac library_names_spec='$libname$shrext' ;; interix[3-9]*) library_names_spec='$libname$shrext' ;; irix5* | irix6* | nonstopux*) library_names_spec='$libname$shrext' case "$host_os" in irix5* | nonstopux*) libsuff= shlibsuff= ;; *) case $LD in *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") libsuff= shlibsuff= ;; *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") libsuff=32 shlibsuff=N32 ;; *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") libsuff=64 shlibsuff=64 ;; *) libsuff= shlibsuff= ;; esac ;; esac ;; linux*oldld* | linux*aout* | linux*coff*) ;; linux* | k*bsd*-gnu | kopensolaris*-gnu) library_names_spec='$libname$shrext' ;; knetbsd*-gnu) library_names_spec='$libname$shrext' ;; netbsd*) library_names_spec='$libname$shrext' ;; newsos6) library_names_spec='$libname$shrext' ;; *nto* | *qnx*) library_names_spec='$libname$shrext' ;; openbsd*) library_names_spec='$libname$shrext$versuffix' ;; os2*) libname_spec='$name' shrext=.dll library_names_spec='$libname.a' ;; osf3* | osf4* | osf5*) library_names_spec='$libname$shrext' ;; rdos*) ;; solaris*) library_names_spec='$libname$shrext' ;; sunos4*) library_names_spec='$libname$shrext$versuffix' ;; sysv4 | sysv4.3*) library_names_spec='$libname$shrext' ;; sysv4*MP*) library_names_spec='$libname$shrext' ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) library_names_spec='$libname$shrext' ;; tpf*) library_names_spec='$libname$shrext' ;; uts4*) library_names_spec='$libname$shrext' ;; esac sed_quote_subst='s/\(["`$\\]\)/\\\1/g' escaped_wl=`echo "X$wl" | sed -e 's/^X//' -e "$sed_quote_subst"` shlibext=`echo "$shrext" | sed -e 's,^\.,,'` escaped_libname_spec=`echo "X$libname_spec" | sed -e 's/^X//' -e "$sed_quote_subst"` escaped_library_names_spec=`echo "X$library_names_spec" | sed -e 's/^X//' -e "$sed_quote_subst"` escaped_hardcode_libdir_flag_spec=`echo "X$hardcode_libdir_flag_spec" | sed -e 's/^X//' -e "$sed_quote_subst"` LC_ALL=C sed -e 's/^\([a-zA-Z0-9_]*\)=/acl_cv_\1=/' <<EOF # How to pass a linker flag through the compiler. wl="$escaped_wl" # Static library suffix (normally "a"). libext="$libext" # Shared library suffix (normally "so"). shlibext="$shlibext" # Format of library name prefix. libname_spec="$escaped_libname_spec" # Library names that the linker finds when passed -lNAME. library_names_spec="$escaped_library_names_spec" # Flag to hardcode \$libdir into a binary during linking. # This must work even if \$libdir does not exist. hardcode_libdir_flag_spec="$escaped_hardcode_libdir_flag_spec" # Whether we need a single -rpath flag with a separated argument. hardcode_libdir_separator="$hardcode_libdir_separator" # Set to yes if using DIR/libNAME.so during linking hardcodes DIR into the # resulting binary. hardcode_direct="$hardcode_direct" # Set to yes if using the -LDIR flag during linking hardcodes DIR into the # resulting binary. hardcode_minus_L="$hardcode_minus_L" EOF ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������webdar-1.0.0/Makefile.in����������������������������������������������������������������������������0000644�0001750�0001752�00000067521�15045134062�011757� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Makefile.in generated by automake 1.16.5 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2021 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ ######################################################################## # webdar - a web server and interface program to libdar # Copyright (C) 2013-2025 Denis Corbin # # This file is part of Webdar # # Webdar is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # Webdar is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with Webdar. If not, see <http://www.gnu.org/licenses/> # #---- # to contact the author: dar.linux@free.fr ######################################################################## VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = . ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/gettext.m4 \ $(top_srcdir)/m4/host-cpu-c-abi.m4 $(top_srcdir)/m4/iconv.m4 \ $(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/lib-ld.m4 \ $(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \ $(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/po.m4 \ $(top_srcdir)/m4/progtest.m4 $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(top_srcdir)/configure \ $(am__configure_deps) $(dist_noinst_DATA) $(am__DIST_COMMON) am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \ configure.lineno config.status.lineno mkinstalldirs = $(install_sh) -d CONFIG_HEADER = config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = SOURCES = DIST_SOURCES = RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \ ctags-recursive dvi-recursive html-recursive info-recursive \ install-data-recursive install-dvi-recursive \ install-exec-recursive install-html-recursive \ install-info-recursive install-pdf-recursive \ install-ps-recursive install-recursive installcheck-recursive \ installdirs-recursive pdf-recursive ps-recursive \ tags-recursive uninstall-recursive am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac DATA = $(dist_noinst_DATA) RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ distclean-recursive maintainer-clean-recursive am__recursive_targets = \ $(RECURSIVE_TARGETS) \ $(RECURSIVE_CLEAN_TARGETS) \ $(am__extra_recursive_targets) AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \ cscope distdir distdir-am dist dist-all distcheck am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) \ config.h.in # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` DIST_SUBDIRS = $(SUBDIRS) am__DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/config.h.in \ ABOUT-NLS AUTHORS COPYING ChangeLog INSTALL NEWS README TODO \ compile config.guess config.rpath config.sub install-sh \ ltmain.sh missing DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) distdir = $(PACKAGE)-$(VERSION) top_distdir = $(distdir) am__remove_distdir = \ if test -d "$(distdir)"; then \ find "$(distdir)" -type d ! -perm -200 -exec chmod u+w {} ';' \ && rm -rf "$(distdir)" \ || { sleep 5 && rm -rf "$(distdir)"; }; \ else :; fi am__post_remove_distdir = $(am__remove_distdir) am__relativize = \ dir0=`pwd`; \ sed_first='s,^\([^/]*\)/.*$$,\1,'; \ sed_rest='s,^[^/]*/*,,'; \ sed_last='s,^.*/\([^/]*\)$$,\1,'; \ sed_butlast='s,/*[^/]*$$,,'; \ while test -n "$$dir1"; do \ first=`echo "$$dir1" | sed -e "$$sed_first"`; \ if test "$$first" != "."; then \ if test "$$first" = ".."; then \ dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ else \ first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ if test "$$first2" = "$$first"; then \ dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ else \ dir2="../$$dir2"; \ fi; \ dir0="$$dir0"/"$$first"; \ fi; \ fi; \ dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ done; \ reldir="$$dir2" DIST_ARCHIVES = $(distdir).tar.gz GZIP_ENV = --best DIST_TARGETS = dist-gzip # Exists only to be overridden by the user if desired. AM_DISTCHECK_DVI_TARGET = dvi distuninstallcheck_listfiles = find . -type f -print am__distuninstallcheck_listfiles = $(distuninstallcheck_listfiles) \ | sed 's|^\./|$(prefix)/|' | grep -v '$(infodir)/dir$$' distcleancheck_listfiles = find . -type f -print ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPPFLAGS = @CPPFLAGS@ CSCOPE = @CSCOPE@ CTAGS = @CTAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CXXSTDFLAGS = @CXXSTDFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DOXYGEN_PROG = @DOXYGEN_PROG@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ ETAGS = @ETAGS@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ FILECMD = @FILECMD@ GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@ GMSGFMT = @GMSGFMT@ GMSGFMT_015 = @GMSGFMT_015@ GREP = @GREP@ HAS_DOT = @HAS_DOT@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INTLLIBS = @INTLLIBS@ INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBDAR_CFLAGS = @LIBDAR_CFLAGS@ LIBDAR_LIBS = @LIBDAR_LIBS@ LIBICONV = @LIBICONV@ LIBINTL = @LIBINTL@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTHREADAR_CFLAGS = @LIBTHREADAR_CFLAGS@ LIBTHREADAR_LIBS = @LIBTHREADAR_LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBICONV = @LTLIBICONV@ LTLIBINTL = @LTLIBINTL@ LTLIBOBJS = @LTLIBOBJS@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ MSGFMT = @MSGFMT@ MSGMERGE = @MSGMERGE@ MSGMERGE_FOR_MSGFMT_OPTION = @MSGMERGE_FOR_MSGFMT_OPTION@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OPENSSL_CFLAGS = @OPENSSL_CFLAGS@ OPENSSL_LIBS = @OPENSSL_LIBS@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ POSUB = @POSUB@ RANLIB = @RANLIB@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ UPX_PROG = @UPX_PROG@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ XGETTEXT = @XGETTEXT@ XGETTEXT_015 = @XGETTEXT_015@ XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dot = @dot@ doxygen = @doxygen@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ groff = @groff@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ pkgconfigdir = @pkgconfigdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ tmp = @tmp@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ upx = @upx@ SUBDIRS = src doc po misc dist_noinst_DATA = INSTALL README TODO AUTHORS COPYING ChangeLog CPPCHECKDIR = ./cppcheckbuilddir ACLOCAL_AMFLAGS = -I m4 EXTRA_DIST = m4/ChangeLog all: config.h $(MAKE) $(AM_MAKEFLAGS) all-recursive .SUFFIXES: am--refresh: Makefile @: $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ echo ' cd $(srcdir) && $(AUTOMAKE) --gnu'; \ $(am__cd) $(srcdir) && $(AUTOMAKE) --gnu \ && exit 0; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ echo ' $(SHELL) ./config.status'; \ $(SHELL) ./config.status;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__maybe_remake_depfiles)'; \ cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__maybe_remake_depfiles);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) $(SHELL) ./config.status --recheck $(top_srcdir)/configure: $(am__configure_deps) $(am__cd) $(srcdir) && $(AUTOCONF) $(ACLOCAL_M4): $(am__aclocal_m4_deps) $(am__cd) $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS) $(am__aclocal_m4_deps): config.h: stamp-h1 @test -f $@ || rm -f stamp-h1 @test -f $@ || $(MAKE) $(AM_MAKEFLAGS) stamp-h1 stamp-h1: $(srcdir)/config.h.in $(top_builddir)/config.status @rm -f stamp-h1 cd $(top_builddir) && $(SHELL) ./config.status config.h $(srcdir)/config.h.in: $(am__configure_deps) ($(am__cd) $(top_srcdir) && $(AUTOHEADER)) rm -f stamp-h1 touch $@ distclean-hdr: -rm -f config.h stamp-h1 mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs distclean-libtool: -rm -f libtool config.lt # This directory's subdirectories are mostly independent; you can cd # into them and run 'make' without going through this Makefile. # To change the values of 'make' variables: instead of editing Makefiles, # (1) if the variable is set in 'config.status', edit 'config.status' # (which will cause the Makefiles to be regenerated when you run 'make'); # (2) otherwise, pass the desired values on the 'make' command line. $(am__recursive_targets): @fail=; \ if $(am__make_keepgoing); then \ failcom='fail=yes'; \ else \ failcom='exit 1'; \ fi; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ case "$@" in \ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ *) list='$(SUBDIRS)' ;; \ esac; \ for subdir in $$list; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ dot_seen=yes; \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done; \ if test "$$dot_seen" = "no"; then \ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-recursive TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ include_option=--etags-include; \ empty_fix=.; \ else \ include_option=--include; \ empty_fix=; \ fi; \ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test ! -f $$subdir/TAGS || \ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ fi; \ done; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-recursive CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscope: cscope.files test ! -s cscope.files \ || $(CSCOPE) -b -q $(AM_CSCOPEFLAGS) $(CSCOPEFLAGS) -i cscope.files $(CSCOPE_ARGS) clean-cscope: -rm -f cscope.files cscope.files: clean-cscope cscopelist cscopelist: cscopelist-recursive cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags -rm -f cscope.out cscope.in.out cscope.po.out cscope.files distdir: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) distdir-am distdir-am: $(DISTFILES) $(am__remove_distdir) test -d "$(distdir)" || mkdir "$(distdir)" @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ $(am__make_dryrun) \ || test -d "$(distdir)/$$subdir" \ || $(MKDIR_P) "$(distdir)/$$subdir" \ || exit 1; \ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ $(am__relativize); \ new_distdir=$$reldir; \ dir1=$$subdir; dir2="$(top_distdir)"; \ $(am__relativize); \ new_top_distdir=$$reldir; \ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ ($(am__cd) $$subdir && \ $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$$new_top_distdir" \ distdir="$$new_distdir" \ am__remove_distdir=: \ am__skip_length_check=: \ am__skip_mode_fix=: \ distdir) \ || exit 1; \ fi; \ done -test -n "$(am__skip_mode_fix)" \ || find "$(distdir)" -type d ! -perm -755 \ -exec chmod u+rwx,go+rx {} \; -o \ ! -type d ! -perm -444 -links 1 -exec chmod a+r {} \; -o \ ! -type d ! -perm -400 -exec chmod a+r {} \; -o \ ! -type d ! -perm -444 -exec $(install_sh) -c -m a+r {} {} \; \ || chmod -R a+r "$(distdir)" dist-gzip: distdir tardir=$(distdir) && $(am__tar) | eval GZIP= gzip $(GZIP_ENV) -c >$(distdir).tar.gz $(am__post_remove_distdir) dist-bzip2: distdir tardir=$(distdir) && $(am__tar) | BZIP2=$${BZIP2--9} bzip2 -c >$(distdir).tar.bz2 $(am__post_remove_distdir) dist-lzip: distdir tardir=$(distdir) && $(am__tar) | lzip -c $${LZIP_OPT--9} >$(distdir).tar.lz $(am__post_remove_distdir) dist-xz: distdir tardir=$(distdir) && $(am__tar) | XZ_OPT=$${XZ_OPT--e} xz -c >$(distdir).tar.xz $(am__post_remove_distdir) dist-zstd: distdir tardir=$(distdir) && $(am__tar) | zstd -c $${ZSTD_CLEVEL-$${ZSTD_OPT--19}} >$(distdir).tar.zst $(am__post_remove_distdir) dist-tarZ: distdir @echo WARNING: "Support for distribution archives compressed with" \ "legacy program 'compress' is deprecated." >&2 @echo WARNING: "It will be removed altogether in Automake 2.0" >&2 tardir=$(distdir) && $(am__tar) | compress -c >$(distdir).tar.Z $(am__post_remove_distdir) dist-shar: distdir @echo WARNING: "Support for shar distribution archives is" \ "deprecated." >&2 @echo WARNING: "It will be removed altogether in Automake 2.0" >&2 shar $(distdir) | eval GZIP= gzip $(GZIP_ENV) -c >$(distdir).shar.gz $(am__post_remove_distdir) dist-zip: distdir -rm -f $(distdir).zip zip -rq $(distdir).zip $(distdir) $(am__post_remove_distdir) dist dist-all: $(MAKE) $(AM_MAKEFLAGS) $(DIST_TARGETS) am__post_remove_distdir='@:' $(am__post_remove_distdir) # This target untars the dist file and tries a VPATH configuration. Then # it guarantees that the distribution is self-contained by making another # tarfile. distcheck: dist case '$(DIST_ARCHIVES)' in \ *.tar.gz*) \ eval GZIP= gzip $(GZIP_ENV) -dc $(distdir).tar.gz | $(am__untar) ;;\ *.tar.bz2*) \ bzip2 -dc $(distdir).tar.bz2 | $(am__untar) ;;\ *.tar.lz*) \ lzip -dc $(distdir).tar.lz | $(am__untar) ;;\ *.tar.xz*) \ xz -dc $(distdir).tar.xz | $(am__untar) ;;\ *.tar.Z*) \ uncompress -c $(distdir).tar.Z | $(am__untar) ;;\ *.shar.gz*) \ eval GZIP= gzip $(GZIP_ENV) -dc $(distdir).shar.gz | unshar ;;\ *.zip*) \ unzip $(distdir).zip ;;\ *.tar.zst*) \ zstd -dc $(distdir).tar.zst | $(am__untar) ;;\ esac chmod -R a-w $(distdir) chmod u+w $(distdir) mkdir $(distdir)/_build $(distdir)/_build/sub $(distdir)/_inst chmod a-w $(distdir) test -d $(distdir)/_build || exit 0; \ dc_install_base=`$(am__cd) $(distdir)/_inst && pwd | sed -e 's,^[^:\\/]:[\\/],/,'` \ && dc_destdir="$${TMPDIR-/tmp}/am-dc-$$$$/" \ && am__cwd=`pwd` \ && $(am__cd) $(distdir)/_build/sub \ && ../../configure \ $(AM_DISTCHECK_CONFIGURE_FLAGS) \ $(DISTCHECK_CONFIGURE_FLAGS) \ --srcdir=../.. --prefix="$$dc_install_base" \ && $(MAKE) $(AM_MAKEFLAGS) \ && $(MAKE) $(AM_MAKEFLAGS) $(AM_DISTCHECK_DVI_TARGET) \ && $(MAKE) $(AM_MAKEFLAGS) check \ && $(MAKE) $(AM_MAKEFLAGS) install \ && $(MAKE) $(AM_MAKEFLAGS) installcheck \ && $(MAKE) $(AM_MAKEFLAGS) uninstall \ && $(MAKE) $(AM_MAKEFLAGS) distuninstallcheck_dir="$$dc_install_base" \ distuninstallcheck \ && chmod -R a-w "$$dc_install_base" \ && ({ \ (cd ../.. && umask 077 && mkdir "$$dc_destdir") \ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" install \ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" uninstall \ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" \ distuninstallcheck_dir="$$dc_destdir" distuninstallcheck; \ } || { rm -rf "$$dc_destdir"; exit 1; }) \ && rm -rf "$$dc_destdir" \ && $(MAKE) $(AM_MAKEFLAGS) dist \ && rm -rf $(DIST_ARCHIVES) \ && $(MAKE) $(AM_MAKEFLAGS) distcleancheck \ && cd "$$am__cwd" \ || exit 1 $(am__post_remove_distdir) @(echo "$(distdir) archives ready for distribution: "; \ list='$(DIST_ARCHIVES)'; for i in $$list; do echo $$i; done) | \ sed -e 1h -e 1s/./=/g -e 1p -e 1x -e '$$p' -e '$$x' distuninstallcheck: @test -n '$(distuninstallcheck_dir)' || { \ echo 'ERROR: trying to run $@ with an empty' \ '$$(distuninstallcheck_dir)' >&2; \ exit 1; \ }; \ $(am__cd) '$(distuninstallcheck_dir)' || { \ echo 'ERROR: cannot chdir into $(distuninstallcheck_dir)' >&2; \ exit 1; \ }; \ test `$(am__distuninstallcheck_listfiles) | wc -l` -eq 0 \ || { echo "ERROR: files left after uninstall:" ; \ if test -n "$(DESTDIR)"; then \ echo " (check DESTDIR support)"; \ fi ; \ $(distuninstallcheck_listfiles) ; \ exit 1; } >&2 distcleancheck: distclean @if test '$(srcdir)' = . ; then \ echo "ERROR: distcleancheck can only run from a VPATH build" ; \ exit 1 ; \ fi @test `$(distcleancheck_listfiles) | wc -l` -eq 0 \ || { echo "ERROR: files left in build directory after distclean:" ; \ $(distcleancheck_listfiles) ; \ exit 1; } >&2 check-am: all-am check: check-recursive all-am: Makefile $(DATA) config.h installdirs: installdirs-recursive installdirs-am: install: install-recursive install-exec: install-exec-recursive install-data: install-data-recursive uninstall: uninstall-recursive install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-recursive install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-recursive clean-am: clean-generic clean-libtool clean-local mostlyclean-am distclean: distclean-recursive -rm -f $(am__CONFIG_DISTCLEAN_FILES) -rm -f Makefile distclean-am: clean-am distclean-generic distclean-hdr \ distclean-libtool distclean-tags dvi: dvi-recursive dvi-am: html: html-recursive html-am: info: info-recursive info-am: install-data-am: install-dvi: install-dvi-recursive install-dvi-am: install-exec-am: install-html: install-html-recursive install-html-am: install-info: install-info-recursive install-info-am: install-man: install-pdf: install-pdf-recursive install-pdf-am: install-ps: install-ps-recursive install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-recursive -rm -f $(am__CONFIG_DISTCLEAN_FILES) -rm -rf $(top_srcdir)/autom4te.cache -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-recursive mostlyclean-am: mostlyclean-generic mostlyclean-libtool pdf: pdf-recursive pdf-am: ps: ps-recursive ps-am: uninstall-am: .MAKE: $(am__recursive_targets) all install-am install-strip .PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am \ am--refresh check check-am clean clean-cscope clean-generic \ clean-libtool clean-local cscope cscopelist-am ctags ctags-am \ dist dist-all dist-bzip2 dist-gzip dist-lzip dist-shar \ dist-tarZ dist-xz dist-zip dist-zstd distcheck distclean \ distclean-generic distclean-hdr distclean-libtool \ distclean-tags distcleancheck distdir distuninstallcheck dvi \ dvi-am html html-am info info-am install install-am \ install-data install-data-am install-dvi install-dvi-am \ install-exec install-exec-am install-html install-html-am \ install-info install-info-am install-man install-pdf \ install-pdf-am install-ps install-ps-am install-strip \ installcheck installcheck-am installdirs installdirs-am \ maintainer-clean maintainer-clean-generic mostlyclean \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ tags tags-am uninstall uninstall-am .PRECIOUS: Makefile cppcheck: @if cppcheck --help > /dev/null ; then \ ( mkdir -p $(CPPCHECKDIR) && cppcheck --force --file-filter="*.?pp" -isrc/testing -isrc/python --cppcheck-build-dir=$(CPPCHECKDIR) `pwd` ) || exit 1 ; \ else \ echo "cppcheck not present, aborting" || exit 1 ; \ fi clean-local: rm -rf $(CPPCHECKDIR) # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������webdar-1.0.0/NEWS�����������������������������������������������������������������������������������0000644�0001750�0001752�00000000203�14773727254�010413� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������no news, good news :) Want to have more than this stupid expression? -> check webdar on github: https://github.com/Edrusb/webdar �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������