libapreq2-2.17/acinclude.m40000644000175000017500000003222014277401734015135 0ustar jortonjortonAC_DEFUN([AC_APREQ], [ AC_ARG_ENABLE(profile, AC_HELP_STRING([--enable-profile],[compile libapreq2 with "-pg -fprofile-arcs -ftest-coverage" for gcov/gprof]), [PROFILE=$enableval],[PROFILE="no"]) AC_ARG_ENABLE(perl_glue, AC_HELP_STRING([--enable-perl-glue],[build perl modules Apache::Request and Apache::Cookie]), [PERL_GLUE=$enableval],[PERL_GLUE="no"]) AC_ARG_WITH(perl, AC_HELP_STRING([--with-perl],[path to perl executable]), [PERL=$withval],[PERL="perl"]) AC_ARG_WITH(apache2-apxs, AC_HELP_STRING([--with-apache2-apxs],[path to apache2's apxs]), [APACHE2_APXS=$withval],[APACHE2_APXS="apxs"]) AC_ARG_WITH(apache2-src, AC_HELP_STRING([--with-apache2-src],[path to httpd source]), [APACHE2_SRC=$withval],[APACHE2_SRC=""]) AC_ARG_WITH(apache2-httpd, AC_HELP_STRING([--with-apache2-httpd],[path to httpd binary]), [APACHE2_HTTPD=$withval],[APACHE2_HTTPD=""]) AC_ARG_WITH(apr-config, AC_HELP_STRING([ --with-apr-config],[path to apr-*-config script]), [APR_CONFIG=$withval],[APR_CONFIG=""]) AC_ARG_WITH(apu-config, AC_HELP_STRING([ --with-apu-config],[path to apu-*-config script]), [APU_CONFIG=$withval],[APU_CONFIG=""]) AC_ARG_WITH(apache1-apxs, AC_HELP_STRING([--with-apache1-apxs],[path to apache1's apxs]), [APACHE1_APXS=$withval],[APACHE1_APXS=""]) AC_ARG_WITH(perl-opts, AC_HELP_STRING([--with-perl-opts],[extra PERL options]), [PERL_OPTS=$withval],[PERL_OPTS=""]) AC_ARG_WITH(mm-opts, AC_HELP_STRING([--with-mm-opts], [extra ExtUtils::MakeMaker options]), [MM_OPTS=$withval], [MM_OPTS=""]) AC_ARG_WITH(expat, AC_HELP_STRING([--with-expat],[specify expat location]), [EXPAT_DIR=$withval],[EXPAT_DIR=""]) OS=`$PERL -e 'print $^O'` prereq_check="$PERL $PERL_OPTS build/version_check.pl" if test -n "$APACHE2_SRC"; then # no apxs: must compile httpd from source APACHE2_SRC=`cd $APACHE2_SRC;pwd` AC_CHECK_FILE([$APACHE2_SRC/include/httpd.h],, AC_MSG_ERROR([invalid Apache2 source directory])) APACHE2_INCLUDES=-I$APACHE2_SRC/include if test -z "$APR_CONFIG"; then APR_CONFIG="$APACHE2_SRC/srclib/apr/apr-config" fi if test -z "$APU_CONFIG"; then APU_CONFIG="$APACHE2_SRC/srclib/apr-util/apu-config" fi APACHE2_HTTPD=$APACHE2_SRC/httpd else # have apxs: use it APACHE2_INCLUDES=-I`$APACHE2_APXS -q INCLUDEDIR` APR_MAJOR_VERSION=`$APACHE2_APXS -q APR_VERSION 2>/dev/null | cut -d. -f 1` if test ${APR_MAJOR_VERSION:="0"} -eq 0; then apr_config=apr-config apu_config=apu-config apreq_libs="-lapr -laprutil" else apr_config=apr-$APR_MAJOR_VERSION-config apu_config=apu-$APR_MAJOR_VERSION-config apreq_libs="-lapr-$APR_MAJOR_VERSION -laprutil-$APR_MAJOR_VERSION" fi if test -z "$APR_CONFIG"; then APR_CONFIG=`$APACHE2_APXS -q APR_BINDIR`/$apr_config fi if test -z "$APU_CONFIG"; then APU_CONFIG=`$APACHE2_APXS -q APU_BINDIR`/$apu_config fi if test -z "$APACHE2_HTTPD"; then APACHE2_HTTPD=`$APACHE2_APXS -q SBINDIR`/`$APACHE2_APXS -q progname` fi if test -z "`$prereq_check apache2 $APACHE2_HTTPD`"; then AC_MSG_ERROR([Bad apache2 binary ($APACHE2_HTTPD)]) fi APR_DOC_VERSION=`$APACHE2_APXS -q APR_VERSION 2>/dev/null | cut -d. -f -2` APU_DOC_VERSION=`$APACHE2_APXS -q APU_VERSION 2>/dev/null | cut -d. -f -2` fi dnl Fallback to oldest version available if test "x$APR_DOC_VERSION" = 'x'; then APR_DOC_VERSION=0.9 fi if test "x$APU_DOC_VERSION" = 'x'; then APU_DOC_VERSION=0.9 fi AC_CHECK_FILE([$APR_CONFIG],, AC_MSG_ERROR([invalid apr-config location ($APR_CONFIG)- did you forget to configure apr?])) if test -z "`$prereq_check apr $APR_CONFIG`"; then AC_MSG_ERROR([Bad libapr version]) fi AC_CHECK_FILE([$APU_CONFIG],, AC_MSG_ERROR([invalid apu-config location ($APU_CONFIG)- did you forget to configure apr-util?])) if test -z "`$prereq_check apu $APU_CONFIG`"; then AC_MSG_ERROR([Bad libaprutil version]) fi if test "x$PERL_GLUE" != "xno"; then AC_MSG_CHECKING(for perl) if test -z "`$prereq_check perl $PERL`"; then AC_MSG_ERROR([Bad perl version]) fi AC_MSG_RESULT($PERL) AC_MSG_CHECKING(for ExtUtils::XSBuilder) if test -z "`$prereq_check ExtUtils::XSBuilder`"; then AC_MSG_WARN([Bad ExtUtils::XSBuilder version]) fi AC_MSG_RESULT(yes) AC_MSG_CHECKING(for mod_perl2) if test -z "`$prereq_check mod_perl2`"; then AC_MSG_WARN([Bad mod_perl2 version]) fi AC_MSG_RESULT(yes) AC_MSG_CHECKING(for Apache::Test) if test -z "`$prereq_check Apache::Test`"; then AC_MSG_WARN([Bad Apache::Test version]) fi AC_MSG_RESULT(yes) AC_MSG_CHECKING(for ExtUtils::MakeMaker) if test -z "`$prereq_check ExtUtils::MakeMaker`"; then AC_MSG_WARN([Bad ExtUtils::MakeMaker version]) fi AC_MSG_RESULT(yes) fi AM_CONDITIONAL(ENABLE_PROFILE, test "x$PROFILE" != "xno") AM_CONDITIONAL(BUILD_PERL_GLUE, test "x$PERL_GLUE" != "xno") AM_CONDITIONAL(HAVE_APACHE_TEST, test -n "`$prereq_check Apache::Test`") AM_CONDITIONAL(BUILD_HTTPD, test -n "$APACHE2_SRC") AM_CONDITIONAL(BUILD_APR, test "x$APR_CONFIG" = x`$APR_CONFIG --srcdir`/apr-config) AM_CONDITIONAL(BUILD_APU, test "x$APU_CONFIG" = x`$APU_CONFIG --srcdir`/apu-config) AM_CONDITIONAL(HAVE_APACHE1, test -n "$APACHE1_APXS") dnl Reset the default installation prefix to be the same as apu's ac_default_prefix="`$APU_CONFIG --prefix`" APR_ADDTO([APR_INCLUDES], "`$APR_CONFIG --includes`") APR_ADDTO([APR_INCLUDES], "`$APU_CONFIG --includes`") APR_LA="`$APR_CONFIG --apr-la-file`" APU_LA="`$APU_CONFIG --apu-la-file`" APR_ADDTO([APR_LTFLAGS], "`$APR_CONFIG --link-libtool`") APR_ADDTO([APR_LTFLAGS], "`$APU_CONFIG --link-libtool`") dnl perl glue/tests do not use libtool: need ld linker flags APR_ADDTO([APR_LIBS], "`$APR_CONFIG --libs`") apu_avoid_libs="" if $APU_CONFIG --avoid-ldap >/dev/null 2>&1; then apu_avoid_libs="--avoid-ldap" fi if $APU_CONFIG --avoid-dbm >/dev/null 2>&1; then apu_avoid_libs="--avoid-dbm $apu_avoid_libs" fi dnl ld: fatal: recording name conflict: dnl file `/usr/sfw/lib/gcc/i386-pc-solaris2.10/3.4.3/../../../libexpat.so' and dnl file `httpd/lib/libexpat.so' dnl provide identical dependency names: libexpat.so.0 dnl (possible multiple inclusion of the same file) if test "x$OS" = "xsolaris"; then APU_LIBS="`$APU_CONFIG $apu_avoid_libs --libs | $PERL -pe 's,-lexpat,,'`" else APU_LIBS="`$APU_CONFIG $apu_avoid_libs --libs`" fi APR_ADDTO([APR_LIBS], "$APU_LIBS") APR_ADDTO([APR_LDFLAGS], "`$APU_CONFIG --link-ld --ldflags`") APR_ADDTO([APR_LDFLAGS], "`$APR_CONFIG --link-ld --ldflags`") if test -n "$EXPAT_DIR"; then APR_ADDTO([APR_INCLUDES], "-I$EXPAT_DIR/include") APR_ADDTO([APR_LTFLAGS], "-L$EXPAT_DIR/lib") fi dnl Absolute source/build directory abs_srcdir=`(cd $srcdir && pwd)` abs_builddir=`pwd` top_builddir="$abs_srcdir" if test "$abs_builddir" != "$abs_srcdir"; then USE_VPATH=1 fi if test "x$USE_MAINTAINER_MODE" != "xno"; then APR_ADDTO([CFLAGS],[ -fno-strict-aliasing -Wall -Wmissing-prototypes -Wstrict-prototypes -Wmissing-declarations -Wwrite-strings -Wcast-qual -Wfloat-equal -Wshadow -Wpointer-arith -Wbad-function-cast -Wsign-compare -Waggregate-return -Wmissing-noreturn -Wmissing-format-attribute -Wpacked -Wredundant-decls -Wnested-externs -Wdisabled-optimization -Wno-long-long -Wendif-labels -Wcast-align -Wpacked ]) # -Wdeclaration-after-statement is only supported on gcc 3.4+ fi APR_ADDTO([CPPFLAGS], "`$APR_CONFIG --cppflags`") get_version="$SHELL $abs_srcdir/build/get-version.sh" version_hdr="$abs_srcdir/include/apreq_version.h" # set version data APREQ_CONFIG="$top_builddir/apreq2-config" APREQ_MAJOR_VERSION=`$get_version major $version_hdr APREQ` APREQ_MINOR_VERSION=`$get_version minor $version_hdr APREQ` APREQ_PATCH_VERSION=`$get_version patch $version_hdr APREQ` APREQ_DOTTED_VERSION=`$get_version all $version_hdr APREQ` # XXX: APR_MAJOR_VERSION doesn't yet work for static builds APREQ_LIBTOOL_CURRENT=`expr $APREQ_MAJOR_VERSION + $APREQ_MINOR_VERSION + $APR_MAJOR_VERSION` APREQ_LIBTOOL_REVISION=$APREQ_PATCH_VERSION APREQ_LIBTOOL_AGE=$APREQ_MINOR_VERSION APREQ_LIBTOOL_VERSION="$APREQ_LIBTOOL_CURRENT:$APREQ_LIBTOOL_REVISION:$APREQ_LIBTOOL_AGE" APREQ_LIBNAME="apreq$APREQ_MAJOR_VERSION" echo "lib$APREQ_LIBNAME Version: $APREQ_DOTTED_VERSION" ## Apparently FC5 doesn't like bsdtar ## which is the default /usr/bin/tar on FreeBSD ## by default /usr/ports/archivers/gtar installs here if test "x$OS" = 'xfreebsd'; then TAR='/usr/local/bin/gtar' else TAR='tar' fi AC_SUBST(APREQ_CONFIG) AC_SUBST(APREQ_LIBNAME) AC_SUBST(APREQ_LIBTOOL_VERSION) AC_SUBST(APREQ_MAJOR_VERSION) AC_SUBST(APREQ_DOTTED_VERSION) AC_SUBST(APACHE2_APXS) AC_SUBST(APACHE2_SRC) AC_SUBST(APACHE2_INCLUDES) AC_SUBST(APACHE2_HTTPD) AC_SUBST(APACHE1_APXS) AC_SUBST(APU_CONFIG) AC_SUBST(APR_CONFIG) AC_SUBST(APR_INCLUDES) AC_SUBST(APR_LDFLAGS) AC_SUBST(APR_LTFLAGS) AC_SUBST(APR_LIBS) AC_SUBST(APR_LA) AC_SUBST(APU_LA) AC_SUBST(PERL) AC_SUBST(PERL_OPTS) AC_SUBST(MM_OPTS) AC_SUBST(TAR) AC_SUBST(APR_DOC_VERSION) AC_SUBST(APU_DOC_VERSION) if test "x$OS" = "xsolaris"; then $PERL -pi -e 's,^shrext=,shrext_cmds=,' libtool fi ]) dnl APR_CONFIG_NICE(filename) dnl dnl Saves a snapshot of the configure command-line for later reuse dnl AC_DEFUN([APR_CONFIG_NICE],[ rm -f $1 cat >$1<> $1 fi if test -n "$CFLAGS"; then echo "CFLAGS=\"$CFLAGS\"; export CFLAGS" >> $1 fi if test -n "$CPPFLAGS"; then echo "CPPFLAGS=\"$CPPFLAGS\"; export CPPFLAGS" >> $1 fi if test -n "$LDFLAGS"; then echo "LDFLAGS=\"$LDFLAGS\"; export LDFLAGS" >> $1 fi if test -n "$LTFLAGS"; then echo "LTFLAGS=\"$LTFLAGS\"; export LTFLAGS" >> $1 fi if test -n "$LIBS"; then echo "LIBS=\"$LIBS\"; export LIBS" >> $1 fi if test -n "$INCLUDES"; then echo "INCLUDES=\"$INCLUDES\"; export INCLUDES" >> $1 fi if test -n "$NOTEST_CFLAGS"; then echo "NOTEST_CFLAGS=\"$NOTEST_CFLAGS\"; export NOTEST_CFLAGS" >> $1 fi if test -n "$NOTEST_CPPFLAGS"; then echo "NOTEST_CPPFLAGS=\"$NOTEST_CPPFLAGS\"; export NOTEST_CPPFLAGS" >> $1 fi if test -n "$NOTEST_LDFLAGS"; then echo "NOTEST_LDFLAGS=\"$NOTEST_LDFLAGS\"; export NOTEST_LDFLAGS" >> $1 fi if test -n "$NOTEST_LIBS"; then echo "NOTEST_LIBS=\"$NOTEST_LIBS\"; export NOTEST_LIBS" >> $1 fi echo [$]0 [$]ac_configure_args '"[$]@"' >> $1 chmod +x $1 ])dnl dnl dnl APR_ADDTO(variable, value) dnl dnl Add value to variable dnl AC_DEFUN([APR_ADDTO],[ if test "x$$1" = "x"; then echo " setting $1 to \"$2\"" $1="$2" else apr_addto_bugger="$2" for i in $apr_addto_bugger; do apr_addto_duplicate="0" for j in $$1; do if test "x$i" = "x$j"; then apr_addto_duplicate="1" break fi done if test $apr_addto_duplicate = "0"; then echo " adding \"$i\" to $1" $1="$$1 $i" fi done fi ])dnl libapreq2-2.17/aclocal.m40000644000175000017500000133766214277402426014626 0ustar jortonjorton# 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 # Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`: # 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 # Add ABI-specific directories to the system library path. sys_lib_dlsearch_path_spec="/lib64 /usr/lib64 /lib /usr/lib" # 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="$sys_lib_dlsearch_path_spec $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' ;; 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*) 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 if AC_TRY_EVAL(NM conftest.$ac_objext \| "$lt_cv_sys_global_symbol_pipe" \> $nlist) && 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*) ;; *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' ;; # 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 ;; *) _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 ;; 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(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*) 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 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' ;; esac ;; netbsd*) 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])]) # 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])]) # Add --enable-maintainer-mode option to configure. -*- Autoconf -*- # From Jim Meyering # 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_MAINTAINER_MODE([DEFAULT-MODE]) # ---------------------------------- # Control maintainer-specific portions of Makefiles. # Default is to disable them, unless 'enable' is passed literally. # For symmetry, 'disable' may be passed as well. Anyway, the user # can override the default with the --enable/--disable switch. AC_DEFUN([AM_MAINTAINER_MODE], [m4_case(m4_default([$1], [disable]), [enable], [m4_define([am_maintainer_other], [disable])], [disable], [m4_define([am_maintainer_other], [enable])], [m4_define([am_maintainer_other], [enable]) m4_warn([syntax], [unexpected argument to AM@&t@_MAINTAINER_MODE: $1])]) AC_MSG_CHECKING([whether to enable maintainer-specific portions of Makefiles]) dnl maintainer-mode's default is 'disable' unless 'enable' is passed AC_ARG_ENABLE([maintainer-mode], [AS_HELP_STRING([--]am_maintainer_other[-maintainer-mode], am_maintainer_other[ make rules and dependencies not useful (and sometimes confusing) to the casual installer])], [USE_MAINTAINER_MODE=$enableval], [USE_MAINTAINER_MODE=]m4_if(am_maintainer_other, [enable], [no], [yes])) AC_MSG_RESULT([$USE_MAINTAINER_MODE]) AM_CONDITIONAL([MAINTAINER_MODE], [test $USE_MAINTAINER_MODE = yes]) MAINT=$MAINTAINER_MODE_TRUE AC_SUBST([MAINT])dnl ] ) # 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 ]) # -*- Autoconf -*- # Obsolete and "removed" macros, that must however still report explicit # error messages when used, to smooth transition. # # 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. AC_DEFUN([AM_CONFIG_HEADER], [AC_DIAGNOSE([obsolete], ['$0': this macro is obsolete. You should use the 'AC][_CONFIG_HEADERS' macro instead.])dnl AC_CONFIG_HEADERS($@)]) AC_DEFUN([AM_PROG_CC_STDC], [AC_PROG_CC am_cv_prog_cc_stdc=$ac_cv_prog_cc_stdc AC_DIAGNOSE([obsolete], ['$0': this macro is obsolete. You should simply use the 'AC][_PROG_CC' macro instead. Also, your code should no longer depend upon 'am_cv_prog_cc_stdc', but upon 'ac_cv_prog_cc_stdc'.])]) AC_DEFUN([AM_C_PROTOTYPES], [AC_FATAL([automatic de-ANSI-fication support has been removed])]) AU_DEFUN([fp_C_PROTOTYPES], [AM_C_PROTOTYPES]) # 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([acinclude.m4]) libapreq2-2.17/apreq2-config.in0000644000175000017500000001345214277401734015737 0ustar jortonjorton#!/bin/sh ## ## Copyright 2003-2006 The Apache Software Foundation ## ## Licensed under the Apache License, Version 2.0 (the "License"); ## you may not use this file except in compliance with the License. ## You may obtain a copy of the License at ## ## http://www.apache.org/licenses/LICENSE-2.0 ## ## Unless required by applicable law or agreed to in writing, software ## distributed under the License is distributed on an "AS IS" BASIS, ## WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. ## See the License for the specific language governing permissions and ## limitations under the License. ## # apreq2-config- based on apu-config: # APR-util script designed to allow easy command line access to APR-util # configuration parameters. PATH=/bin:/usr/bin:/usr/local/bin prefix="@prefix@" exec_prefix="@exec_prefix@" bindir="@bindir@" libdir="@libdir@" includedir="@includedir@/@APREQ_LIBNAME@" LIBS="@APR_LIBS@" LDFLAGS="@APR_LDFLAGS@" INCLUDES="@APR_INCLUDES@" SOLARIS=`echo @build_os@ | grep -i solaris` APREQ_LIBNAME="@APREQ_LIBNAME@" APREQ_SOURCE_DIR="@abs_srcdir@" APREQ_BUILD_DIR="@abs_builddir@" show_usage() { cat << EOF Usage: apreq2-config [OPTION] Known values for OPTION are: --prefix[=DIR] change prefix to DIR --bindir print location where binaries are installed --includes print include information --includedir print location where headers are installed --ldflags print linker flags --libs print library information --srcdir print apreq2 source directory --link-ld print link switch(es) for linking to libapreq2 --link-libtool print the libtool inputs for linking to libapreq2 --la-file print the path to the library's .la file, if available --library-version print the API version as a dotted triple --libtool-version print the ABI version in a libtool-compatible format --package-version print the version number of the distribution --help print this help When linking with libtool, an application should do something like: APREQ_LIBS="\`apreq2-config --link-libtool --libs\`" or when linking directly: APREQ_LIBS="\`apreq2-config --link-ld --ldflags --libs\`" An application should use the results of --includes, and --ldflags in their build process. EOF } if test $# -eq 0; then show_usage exit 1 fi thisdir="`dirname $0`" thisdir="`cd $thisdir && pwd`" if test -d $bindir; then tmpbindir="`cd $bindir && pwd`" else tmpbindir="" fi # If we have the realpath program, use it to resolve symlinks. # Otherwise, being in a symlinked dir may result in incorrect output. if test -x "`which realpath 2>/dev/null`"; then thisdir="`realpath $thisdir`" if test -d "$APREQ_SOURCE_DIR"; then APREQ_SOURCE_DIR="`realpath $APREQ_SOURCE_DIR`" fi if test -n "$tmpbindir"; then tmpbindir="`realpath $tmpbindir`" fi fi if test "$tmpbindir" = "$thisdir"; then location=installed elif test "$APREQ_SOURCE_DIR" = "$thisdir"; then location=source else location=build fi if test "$location" = "installed"; then LA_FILE="$libdir/lib${APREQ_LIBNAME}.la" else LA_FILE="$thisdir/library/lib${APREQ_LIBNAME}.la" fi flags="" while test $# -gt 0; do # Normalize the prefix. case "$1" in -*=*) optarg=`echo "$1" | sed 's/[-_a-zA-Z0-9]*=//'` ;; *) optarg= ;; esac case "$1" in # It is possible for the user to override our prefix. --prefix=*) prefix=$optarg ;; --prefix) echo $prefix exit 0 ;; --bindir) echo $bindir exit 0 ;; --libs) flags="$flags $LIBS" ;; --includedir) if test "$location" = "installed"; then flags="$includedir" elif test "$location" = "source"; then flags="$APREQ_SOURCE_DIR/include" else # this is for VPATH builds flags="$thisdir/include $APREQ_SOURCE_DIR/include" fi echo $flags exit 0 ;; --includes) if test "$location" = "installed"; then flags="$flags -I$includedir $INCLUDES" elif test "$location" = "source"; then flags="$flags -I$APREQ_SOURCE_DIR/include $INCLUDES" else # this is for VPATH builds flags="$flags -I$thisdir/include -I$APREQ_SOURCE_DIR/include $INCLUDES" fi ;; --ldflags) flags="$flags $LDFLAGS" ;; --srcdir) echo $APREQ_SOURCE_DIR exit 0 ;; --library-version) echo @APREQ_DOTTED_VERSION@ exit 0 ;; --libtool-version) echo @APREQ_LIBTOOL_VERSION@ exit 0 ;; --package-version) echo "@VERSION@" exit 0 ;; --link-ld) if test "$location" = "installed"; then ### avoid using -L if libdir is a "standard" location like /usr/lib flags="$flags -L$libdir -l$APREQ_LIBNAME" else flags="$flags -L$thisdir/library/.libs -l$APREQ_LIBNAME" fi ;; --link-libtool) # If the LA_FILE exists where we think it should be, use it. If we're # installed and the LA_FILE does not exist, assume to use -L/-l # (the LA_FILE may not have been installed). If we're building ourselves, # we'll assume that at some point the .la file be created. if test -f "$LA_FILE"; then flags="$flags $LA_FILE" elif test "$location" = "installed"; then ### avoid using -L if libdir is a "standard" location like /usr/lib flags="$flags -L$libdir -l$APREQ_LIBNAME $apreq_libs" else flags="$flags $LA_FILE" fi ;; --la-file) if test -f "$LA_FILE"; then flags="$flags $LA_FILE" fi ;; --help) show_usage exit 0 ;; *) show_usage exit 1 ;; esac # Next please. shift done if test -n "$flags"; then if test -n "$SOLARIS"; then flags=`echo $flags | sed -e 's/-L\([^ ]*\)/-R\1 -L\1/g'` fi echo "$flags" fi exit 0 libapreq2-2.17/build/announcement.pl0000755000175000017500000000410514277401734017076 0ustar jortonjorton#! /usr/bin/perl use warnings; use strict; our($PACKAGE_VERSION, $LIBRARY_VERSION); foreach (qw/PACKAGE_VERSION LIBRARY_VERSION/) { no strict 'refs'; my $opt = lc; $opt =~ tr/_/-/; chomp ($$_ = `./apreq2-config --$opt`); } sub slurp { my $file_name = shift; open my $fh, "<", $file_name or die "Can't open $file_name: $!"; read $fh, my $buf, -s $fh; return wantarray ? split /\n/, $buf : $buf; } my $MAIL_FROM = shift; my $RCPT_TO = join ",\n ", map "<$_>" , qw( announce@httpd.apache.org apreq-dev@httpd.apache.org announce@perl.apache.org modperl@perl.apache.org ); my ($LICENSE_VERSION) = grep s/^\s+Version (\d\.\d),.*$/$1/, slurp "LICENSE"; my $CPAN_DATA = join "", <>; $CPAN_DATA =~ /^has entered CPAN as(.+?)\nNo action is required/ms or die "Bad CPAN message:\n$CPAN_DATA"; $CPAN_DATA = $1; my $TITLE = "libapreq2-$PACKAGE_VERSION Released"; my $mail_header = <s inside */ h2 a, h2 a:hover, h2 a:active { color: inherit; background-color: inherit; text-decoration: none; } /* h3, h4 */ /* ====================== */ h3 { background-color: inherit; color: #036; text-decoration: none; font-weight: bold; font-size: 16px; margin: 1.3em 0 0.4em 0; padding: 0; } h4 { background-color: inherit; color: #036; text-decoration: none; font-weight: bold; font-size: 14px; margin: 1.3em 0 0.2em 0; padding: 0; } /* margin adjustment */ h3 + *, h4 + * { margin-top: 0; } /* IE confuses the + * :-( * so reset some things */ ul, .section table, .directive-section table { margin-bottom: 1em; } /* take care of s inside */ h3 a, h3 a:hover, h3 a:active, h4 a, h4 a:hover, h4 a:active { color: inherit; background-color: inherit; text-decoration: none; } /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ * Tables * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */ /* general */ /* ====================== */ /* table { border: 1px solid #aaa; border-collapse: collapse; padding: 2px; margin-top: 0.5em; margin-bottom: 0; } td, th { empty-cells: show; /* show border around empty cells */ padding: 0.1em 0.2em; vertical-align: top; text-align: left; line-height: 1.3em; } */ th { font-weight: bold; } td.centered { text-align: center; } tr.odd { /* for large tables alternating colors */ background-color: #f2f2f2; } tr.header, tr.header th { background-color: #e2e2e2; border-top: 1px solid #aaa; border-bottom: 1px solid #aaa; } /* bordered table cells */ /* ====================== */ /* turn off borders in tables nested in * bordered tables per default */ table.bordered table td, table.bordered table th { border-style: none; } table.bordered td, table.bordered th, table table.bordered td, table table.bordered th { border: 1px solid #aaa; } /* index page layout table */ /* ======================= */ body#index-page div#page-content { width: 100%; /* IE fun */ } body[id]#index-page div#page-content { width: auto; /* reasonable browsers. */ } table#indextable { width: 100%; border-collapse: collapse; border: 0 none; } table#indextable td { width: 33.3%; border-left: 1px solid #aaa; padding-top: 0; padding-bottom: 0; } table#indextable td.col1 { border-left: 0 none; padding-left: 0; } table#indextable td.col3 { padding-right: 0; } /* mod/dir. overview table and quick reference */ /* ============================================ */ table.module th, table.directive th { white-space: nowrap; } table.qref { border-collapse: collapse; width: 100%; } table.qref td { border-style: none solid; border-color: #aaa; border-width: 1px; } table.qref td.descr { padding-left: 1em; font-size: 13px; } table#legend { width: 100%; border-style: none; border-width: 0; vertical-align: bottom; padding: 0; margin: 0; } table#legend td { vertical-align: bottom; margin: 0; padding: 0; } table#legend td.letters { width: 100%; padding-bottom: 0.5em; } table#legend table { vertical-align: bottom; margin: 0 0 0 0.4em; padding: 0; height: 7.5em; } table#legend table td, table#legend table th { vertical-align: middle; padding: 0.1ex 0.2em; line-height: 1em; white-space: nowrap; } /* related modules & dir. */ /* ====================== */ /* assuming, all links are enclosed by * or * */ table.related { border-collapse: separate; } table.related th { padding: 0.2ex 0.3em; background-color: #e5ecf3; color: #405871; vertical-align: middle; } table.related td { padding: 0.2ex 0.3em; } /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ * Lists * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */ /* list default values */ /* ====================== */ ul { list-style-type: disc; } ul ul { list-style-type: square; } ul ul ul { list-style-type: circle; } li, dt, dd { line-height: 1.3em; } dt { margin-top: 0.5em; font-weight: bold; } ol li { margin-top: 0.5em; } /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ * main page sections * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */ div#page-header img { padding: 0; display: block; margin: -70px 0 1px 2em; width: 248px; height: 70px; } div#page-header p.apache { background-color: #405871; color: #fff; padding: 0 0 0 248px; margin: 0; text-align: center; vertical-align: middle; font-size: 16px; font-weight: bold; line-height: 29px; } div#page-header p.menu { text-align: right; font-size: 13px; margin: 30px 0 0.5em 0; padding: 0; } /* breadcrumb navigation */ div.qindex, div#path { text-align:center; margin: 0.2em 0 1.2em 30px; padding: 0; font-size: 13px; } p { line-height: 1.3em; } /* page footer */ /* ====================== */ div#footer { /* margin-left: 30px; */ font-size: 13px; border-top: 1px solid #405871; padding-top: 0.2em; } div#footer p.apache { float: left; text-align: left; padding: 0 0 1em 0; margin-top: 0; } div#footer p.menu { float: right; text-align: right; margin-top: 0; padding: 0 0 1em 0; } /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ * -> The End (modified doxygen-generated stylesheet below) <- * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */ CAPTION { font-weight: bold } A.qindex { font-weight: bold; } A.qindexHL { font-weight: bold; background-color: #405871; color: #ffffff; padding: 2px 6px; } A.qindexHL:hover { background-color: #405871; color: #ffffff; } A.qindexHL:visited { background-color: #405871; color: #ffffff } A.el { font-weight: bold } A.elRef { font-weight: bold } DL.el { margin-left: -1cm } PRE.fragment { border: 1px solid #CCCCCC; background-color: #f5f5f5; margin-top: 4px; margin-bottom: 4px; margin-left: 2px; margin-right: 8px; padding-left: 6px; padding-right: 6px; padding-top: 4px; padding-bottom: 4px; } DIV.fragment { border: 1px solid #CCCCCC; background-color: #f5f5f5; padding: 6px; } DIV.ah { background-color: black; font-weight: bold; color: #ffffff; margin-bottom: 3px; margin-top: 3px } TD.md { background-color: #F4F4FB; font-weight: bold; } TD.mdname1 { background-color: #F4F4FB; font-weight: bold; color: #602020; } TD.mdname { background-color: #F4F4FB; font-weight: bold; color: #602020; width: 600px; } DIV.groupHeader { margin-left: 16px; margin-top: 12px; margin-bottom: 6px; font-weight: bold; } DIV.groupText { margin-left: 16px; font-style: italic; font-size: smaller } BODY { background: white; color: black; margin-right: 20px; margin-left: 30px; } TD.indexkey { background-color: #eeeeff; font-weight: bold; padding-right : 10px; padding-top : 2px; padding-left : 10px; padding-bottom : 2px; margin-left : 0px; margin-right : 0px; margin-top : 2px; margin-bottom : 2px; border: 1px solid #CCCCCC; } TD.indexvalue { background-color: #eeeeff; font-style: italic; padding-right : 10px; padding-top : 2px; padding-left : 10px; padding-bottom : 2px; margin-left : 0px; margin-right : 0px; margin-top : 2px; margin-bottom : 2px; border: 1px solid #CCCCCC; } TR.memlist { background-color: #f0f0f0; } P.formulaDsp { text-align: center; } IMG.formulaDsp { } IMG.formulaInl { vertical-align: middle; } SPAN.keyword { color: #008000 } SPAN.keywordtype { color: #604020 } SPAN.keywordflow { color: #e08000 } SPAN.comment { color: #800000 } SPAN.preprocessor { color: #806020 } SPAN.stringliteral { color: #002080 } SPAN.charliteral { color: #008080 } .mdTable { border: 1px solid #868686; background-color: #F4F4FB; } .mdRow { padding: 8px 10px; } .mdescLeft { font-size: smaller; font-style: italic; background-color: #FAFAFA; padding-left: 8px; border-top: 1px none #E0E0E0; border-right: 1px none #E0E0E0; border-bottom: 1px none #E0E0E0; border-left: 1px none #E0E0E0; margin: 0px; } .mdescRight { font-size: smaller; font-style: italic; background-color: #FAFAFA; padding-left: 4px; border-top: 1px none #E0E0E0; border-right: 1px none #E0E0E0; border-bottom: 1px none #E0E0E0; border-left: 1px none #E0E0E0; margin: 0px; padding-bottom: 0px; padding-right: 8px; } .memItemLeft { padding: 1px 0px 0px 8px; margin: 4px; border-top-width: 1px; border-right-width: 1px; border-bottom-width: 1px; border-left-width: 1px; border-top-style: solid; border-top-color: #E0E0E0; border-right-color: #E0E0E0; border-bottom-color: #E0E0E0; border-left-color: #E0E0E0; border-right-style: none; border-bottom-style: none; border-left-style: none; background-color: #FAFAFA; font-size: 12px; } .memItemRight { padding: 1px 0px 0px 8px; margin: 4px; border-top-width: 1px; border-right-width: 1px; border-bottom-width: 1px; border-left-width: 1px; border-top-style: solid; border-top-color: #E0E0E0; border-right-color: #E0E0E0; border-bottom-color: #E0E0E0; border-left-color: #E0E0E0; border-right-style: none; border-bottom-style: none; border-left-style: none; background-color: #FAFAFA; font-size: 13px; } td.tiny { font-size: 75%; } /* a { color: #252E78; } a:visited { color: #3D2185; } */ libapreq2-2.17/build/dox.foot0000644000175000017500000000056614277401734015536 0ustar jortonjorton libapreq2-2.17/build/dox.head0000644000175000017500000000075114277401734015464 0ustar jortonjorton $projectname-$projectnumber: $title libapreq2-2.17/build/doxygen.conf0000644000175000017500000000405714277402433016373 0ustar jortonjortonPROJECT_NAME = "libapreq2" PROJECT_NUMBER = "2.17" OUTPUT_DIRECTORY = docs OUTPUT_LANGUAGE = English BRIEF_MEMBER_DESC = YES REPEAT_BRIEF = YES TAB_SIZE = 8 ALIASES = "req=@arg The request handle" OPTIMIZE_OUTPUT_FOR_C = YES INTERNAL_DOCS = NO GENERATE_TODOLIST = YES GENERATE_TESTLIST = YES GENERATE_BUGLIST = YES GENERATE_DEPRECATEDLIST= YES MAX_INITIALIZER_LINES = 30 SHOW_USED_FILES = YES QUIET = NO WARNINGS = YES WARN_IF_UNDOCUMENTED = YES WARN_IF_DOC_ERROR = YES WARN_FORMAT = "$file:$line: $text" INPUT = . include module/apache module/apache2 FILE_PATTERNS = *.h *.dox CHANGES STATUS RECURSIVE = NO EXTRACT_STATIC = YES EXCLUDE = EXCLUDE_SYMLINKS = NO EXCLUDE_PATTERNS = apreq_config* apreq_private* EXAMPLE_PATH = . include EXAMPLE_PATTERNS = README INSTALL LICENSE NOTICE *.html *.man *.h IMAGE_PATH = SOURCE_BROWSER = NO ALPHABETICAL_INDEX = NO COLS_IN_ALPHA_INDEX = 5 IGNORE_PREFIX = GENERATE_HTML = YES HTML_HEADER = build/dox.head HTML_FOOTER = build/dox.foot HTML_STYLESHEET = build/dox.css HTML_ALIGN_MEMBERS = YES GENERATE_LATEX = NO GENERATE_RTF = NO GENERATE_MAN = YES MAN_LINKS = NO GENERATE_XML = NO GENERATE_AUTOGEN_DEF = NO GENERATE_PERLMOD = NO ENABLE_PREPROCESSING = YES MACRO_EXPANSION = YES EXPAND_ONLY_PREDEF = YES PREDEFINED = APREQ_DECLARE(x)=x \ APREQ_DECLARE_NONSTD(x)=x TAGFILES = docs/apr.tag=http://apr.apache.org/docs/apr/1.7 \ docs/apu.tag=http://apr.apache.org/docs/apr-util/1.6 GENERATE_TAGFILE = docs/apreq2.tag ALLEXTERNALS = NO EXTERNAL_GROUPS = NO PERL_PATH = perl HIDE_UNDOC_RELATIONS = YES SEARCHENGINE = NO libapreq2-2.17/build/doxygen.conf.in0000644000175000017500000000412214277401734016774 0ustar jortonjortonPROJECT_NAME = "@PACKAGE@" PROJECT_NUMBER = "@VERSION@" OUTPUT_DIRECTORY = docs OUTPUT_LANGUAGE = English BRIEF_MEMBER_DESC = YES REPEAT_BRIEF = YES TAB_SIZE = 8 ALIASES = "req=@arg The request handle" OPTIMIZE_OUTPUT_FOR_C = YES INTERNAL_DOCS = NO GENERATE_TODOLIST = YES GENERATE_TESTLIST = YES GENERATE_BUGLIST = YES GENERATE_DEPRECATEDLIST= YES MAX_INITIALIZER_LINES = 30 SHOW_USED_FILES = YES QUIET = NO WARNINGS = YES WARN_IF_UNDOCUMENTED = YES WARN_IF_DOC_ERROR = YES WARN_FORMAT = "$file:$line: $text" INPUT = . include module/apache module/apache2 FILE_PATTERNS = *.h *.dox CHANGES STATUS RECURSIVE = NO EXTRACT_STATIC = YES EXCLUDE = EXCLUDE_SYMLINKS = NO EXCLUDE_PATTERNS = apreq_config* apreq_private* EXAMPLE_PATH = . include EXAMPLE_PATTERNS = README INSTALL LICENSE NOTICE *.html *.man *.h IMAGE_PATH = SOURCE_BROWSER = NO ALPHABETICAL_INDEX = NO COLS_IN_ALPHA_INDEX = 5 IGNORE_PREFIX = GENERATE_HTML = YES HTML_HEADER = build/dox.head HTML_FOOTER = build/dox.foot HTML_STYLESHEET = build/dox.css HTML_ALIGN_MEMBERS = YES GENERATE_LATEX = NO GENERATE_RTF = NO GENERATE_MAN = YES MAN_LINKS = NO GENERATE_XML = NO GENERATE_AUTOGEN_DEF = NO GENERATE_PERLMOD = NO ENABLE_PREPROCESSING = YES MACRO_EXPANSION = YES EXPAND_ONLY_PREDEF = YES PREDEFINED = APREQ_DECLARE(x)=x \ APREQ_DECLARE_NONSTD(x)=x TAGFILES = docs/apr.tag=http://apr.apache.org/docs/apr/@APR_DOC_VERSION@ \ docs/apu.tag=http://apr.apache.org/docs/apr-util/@APU_DOC_VERSION@ GENERATE_TAGFILE = docs/apreq2.tag ALLEXTERNALS = NO EXTERNAL_GROUPS = NO PERL_PATH = @PERL@ HIDE_UNDOC_RELATIONS = YES SEARCHENGINE = NO libapreq2-2.17/build/get-version.sh0000755000175000017500000000221414277401734016644 0ustar jortonjorton#!/bin/sh # # extract version numbers from a header file # # USAGE: get-version.sh CMD VERSION_HEADER PREFIX # where CMD is one of: all, major, libtool # where PREFIX is the prefix to {MAJOR|MINOR|PATCH}_VERSION defines # # get-version.sh all returns a dotted version number # get-version.sh major returns just the major version number # get-version.sh minor returns just the minor version number # get-version.sh patch returns just the match version number # if test $# != 3; then echo "USAGE: $0 CMD INCLUDEDIR PREFIX" echo " where CMD is one of: all, major, minor, patch" exit 1 fi major_sed="/#define.*$3_MAJOR_VERSION/s/^[^0-9]*\([0-9]*\).*$/\1/p" minor_sed="/#define.*$3_MINOR_VERSION/s/^[^0-9]*\([0-9]*\).*$/\1/p" patch_sed="/#define.*$3_PATCH_VERSION/s/^[^0-9]*\([0-9]*\).*$/\1/p" major="`sed -n $major_sed $2`" minor="`sed -n $minor_sed $2`" patch="`sed -n $patch_sed $2`" if test "$1" = "all"; then echo ${major}.${minor}.${patch} elif test "$1" = "major"; then echo ${major} elif test "$1" = "minor"; then echo ${minor} elif test "$1" = "patch"; then echo ${patch} else echo "ERROR: unknown version CMD ($1)" exit 1 fi libapreq2-2.17/build/RELEASE0000644000175000017500000000760214277401734015054 0ustar jortonjortonInstructions for the apreq Release Manager (RM) FreeBSD/Solaris note: use gmake! 1. Create a realease branch: svn cp https://svn.apache.org/repos/asf/httpd/apreq/trunk \ https://svn.apache.org/repos/asf/httpd/apreq/branches/v2.17 2. On the BRANCH Edit STATUS, marking the release date /** @page STATUS 2.17 released on . Also add the release date to the top @section in CHANGES: /** @page CHANGES @section v2.17 Changes with libapreq2-2.12 (released ...). And #undef the APREQ_VERSION_IS_DEV macro definition in include/apreq_version.h: * This symbol will be #undef'd for releases. */ #undef APREQ_IS_DEV_VERSION % svn commit -m "2.17 release started" STATUS CHANGES include/apreq_version.h 3. On TRUNK: Update CHANGES and STATUS to reflect the start of a new develoment cycle, and run this to update the package version numbers throughout the tree: % build/update_version.pl 2.17 % svn commit -m "2.17 cycle" 4. Prep the package for CPAN by running: % make release This will generate a libapreq2-2.17.tar.gz candidate in the current directory. You should keep this source tree intact to tag the final release. 5. Test the generated file with % make release_test Make sure all perl tests pass. 6. Sign it via gpg: % gpg --detach-sign --armor libapreq2-2.17.tar.gz or pgp: % pgp -sba libapreq2-2.17.tar.gz 7. Upload the release candidate to people.apache.org/~username and post a candidate announcement to apreq-dev@. Also, it is strongly recommended that the RM crosspost the candidate announcement to the modperl@ list, to solicit feedback from a much larger audience. Subject: [RELEASE CANDIDATE] libapreq2 2.17 RC\d+ 8. Give the mailing list participants 48-72 hours to comment and vote on the candidate. If there is a "majority consensus" (three +1 and more +1s than -1s) among the httpd pmc members, the RM may proceed with the release. 9. Tag the Release -- from the BRANCH svn mv https://svn.apache.org/repos/asf/httpd/apreq/branches/v2.17 \ https://svn.apache.org/repos/asf/httpd/apreq/tags/v2.17 10. Upload (scp) the package, signature and SHA* hash files to www.apache.org for distribution: $ svn co https://dist.apache.org/repos/dist/release/httpd/libapreq/ apreq-dist-site $ cp libapreq2-2.17.tar.gz* apreq-dist-site $ svn commit -m "libapreq2 2.17 release artifacts" Ask another developer to confirm the uploaded signature is ok. % gpg --verify libapreq2-2.17.tar.gz.asc % pgp libapreq2-2.17.tar.gz.asc Check that your public key is among those listed in the /www/www.apache.org/dist/httpd/KEYS file. If not, you need to commit the necessary change to KEYS the httpd-dist repos. Then update the website's copy using "cvs co KEYS" in the /www/www.apache.org/dist/httpd/ directory. 11. Verify or get soeone to Verify that you have CPAN karma. Note, discuss getting a group kind of like AMPL in mod_perl land. (Currently, joes@, issac@ and pgollucci@ are active and have karma) 12. Upload the package to CPAN. Doublecheck that the md5 checksum received from PAUSE is correct. 13. Wait ~12-24 hours for the ASF mirrors to pick up the new package, then update the apreq homepage to list the new release in the News section Be sure to update the libapreq2 documentation. For instructions on updating the httpd website, see build/WEBSITE. IMPORTANT: YOU MUST UPDATE download.html TO POINT AT THE NEW RELEASE PACKAGE! 14. Mail the announcement from your people.apache.org account by piping the "CPAN Upload" email acknowledgement (from PAUSE) through build/announcement.pl: % build/announcement.pl $USER@apache.org < CPAN_ack | ssh $USER@people.apache.org "sendmail -oi -t -odq" 15. Drink Beer! libapreq2-2.17/build/update_version.pl0000755000175000017500000000254114277401734017435 0ustar jortonjorton#!/usr/bin/perl # update_version.pl - update all package version strings for apreq use strict; use warnings FATAL => "all"; my $version = shift; # .pod # glue/perl/xsbuilder # "This manpage documents version (\d+.\S+)" use File::Find; my @pod; find(sub { push @pod, $File::Find::name if /\.pod$/ }, qw(glue/perl/xsbuilder)); my $substitution = "s/(?<=This manpage documents version )\\S+/$version/"; system "perl -i -ple '$substitution' @pod"; # .pm # glue/perl/lib/Apache2/* # our $VERSION = "[^"]+" my @pm; find(sub { push @pm, $File::Find::name if /\.pm$/ }, qw(glue/perl/lib)); my $pattern = '(?<=our \$VERSION = ")([^"]+)(?=")'; system "perl -i -ple 's/$pattern/$version/' @pm"; # # configure.ac - my $pattern1 = "(?<=AC_INIT\\(Apache HTTP Server Request Library, )(\\S+)(?=,)"; my $pattern2 = "(?<=AM_INIT_AUTOMAKE\\(libapreq2, )(\\S+)(?=\\))"; system "perl -i -ple 's/$pattern1/$version/ or s/$pattern2/$version/' configure.ac"; # # win32/Configure.pl # my $VERSION = '[^']+' my $pattern3 = qr/my \$VERSION = "2.17"/; my $replace = "my \\\$VERSION = \"$version\""; system "perl -i -ple 's/$pattern3/$replace/' win32/Configure.pl"; # RELEASE/WEBSITE/this script system "perl -i -ple 's/2.17/$version/' build/RELEASE"; system "perl -i -ple 's/2.17/$version/' build/WEBSITE"; system "perl -i -ple 's/2.17/$version/' build/update_version.pl"; libapreq2-2.17/build/version_check.pl0000644000175000017500000001661514277401734017234 0ustar jortonjorton# version_check.pl tool version use strict; use warnings 'FATAL'; use Getopt::Long qw/GetOptions/; GetOptions(\my %opts, "version=s"); my ($tool, $path) = @ARGV; $path = $tool unless defined $path; sub exe_version { scalar qx/$path -v/ } sub gnu_version { scalar qx/$path --version/ } sub xsb_version { eval { require ExtUtils::XSBuilder; }; $@ ? return '' : return $ExtUtils::XSBuilder::VERSION; } sub ti_version { eval { require Test::Inline; }; @$ ? return '' : return $Test::Inline::VERSION; } sub a_t_version { require Apache::Test; $Apache::Test::VERSION; } sub tm_version { require Test::More; $Test::More::VERSION; } sub mm_version { require ExtUtils::MakeMaker; $ExtUtils::MakeMaker::VERSION; } sub mp2_version { eval { require mod_perl2; $mod_perl::VERSION; }; } my %svn = ( libtool => { version => "1.4.3", test => \&gnu_version }, autoconf => { version => "2.53", test => \&gnu_version }, automake => { version => "1.6.1", test => \&gnu_version }, doxygen => { version => "1.2", test => \&gnu_version, broken_version => { '1.4.5' => 1 } }, perl => { version => "5.6.1", test => \&gnu_version }, "ExtUtils::XSBuilder" => { version => "0.23", test => \&xsb_version }, ); my %build = ( apache2 => { version => "2.0.48", test => \&exe_version }, apr => { version => "0.9.4", test => \&gnu_version, comment => "bundled with apache2 2.0.48" }, apu => { version => "0.9.4", test => \&gnu_version, comment => "bundled with apache2 2.0.48" }, perl => $svn{perl}, ); my %perl_glue = ( perl => $svn{perl}, "ExtUtils::XSBuilder" => $svn{"ExtUtils::XSBuilder"}, "Apache::Test" => { version => "1.04", test => \&a_t_version, comment => "Win32 requires version 1.06" }, # mp2 does not contain "_" in its reported version number mod_perl2 => { version => "1.999022",test => \&mp2_version }, "ExtUtils::MakeMaker" => { version => "6.15", test => \&mm_version }, "Test::More" => { version => "0.47", test => \&tm_version }, ); my %test = ( "Test::Inline" => { version => "0.16", test => \&ti_version }, ); sub print_prereqs ($$) { my ($preamble, $prereq) = @_; print $preamble, "\n"; for (sort keys %$prereq) { my ($version, $comment) = @{$prereq->{$_}}{qw/version comment/}; if ($opts{version}) { print " $_: $version\n"; } else { $comment = defined $comment ? " ($comment)" : ""; printf "%30s: %s%s\n", $_, $version, $comment; } } } sub perl_prereqs { my @prereqs = map {"$_=>q[$perl_glue{$_}->{version}]"} grep {$_ ne 'perl'} keys %perl_glue; my $prereq_string = ''; if (@prereqs) { $prereq_string = 'PREREQ_PM => { ' . (join ', ', @prereqs) . ' }'; } return $prereq_string; } sub print_dummy_versions { require File::Spec; my $version = shift; my @mods = qw(APR::Request); push @mods, (map {"APR::Request::$_"} qw(Apache2 CGI Error Cookie Param)), (map {"Apache2::$_"} qw(Request Cookie Upload)); my $dummy_versions = File::Spec->catfile(qw(glue perl lib APR), 'DummyVersions.pm'); my $len = 0; for (@mods) { $len = length $_ if length $_ > $len; } $len += length '$::VERSION'; my $warning = << 'WARN'; ********************** WARNING ************************ This file was generated by build/version_check.pl Any changes made here will be lost. ******************************************************* WARN $warning =~ s/^/\# /mg; open(my $fh, '>', $dummy_versions) or die "Cannot open $dummy_versions for writing: $!"; print $fh $warning; for my $mod (@mods) { printf $fh "\npackage %s;\n%-${len}s = %s;\n", $mod, '$'.$mod."::VERSION", $version; } print $fh "\n\n1;\n"; close $fh; } if (@ARGV == 0) { if ($opts{version}) { # generate META.yml file content print < $perl_glue{mod_perl2}, perl => $perl_glue{perl}, ); print_prereqs "requires:", \%runtime_prereqs; print_prereqs "build_requires:", \%perl_glue; print_dummy_versions($opts{version}); } else { # generate PREREQUISITES file content print "=" x 50, "\n"; print_prereqs "Build system (core C API) prerequisites\n", \%build; print "\n", "=" x 50, "\n"; print_prereqs "Perl glue (Apache2::Request) prerequisites\n", \%perl_glue; print "\n", "=" x 50, "\n"; print_prereqs "Additional prerequisites for apreq subversion builds\n", \%svn; } exit 0; } elsif ($path eq 'perl_prereqs') { print perl_prereqs(); exit; } # test prerequisites from the command-line arguments my %prereq = (%svn, %build, %perl_glue, %test); die "$0 failed: unknown tool '$tool'.\n" unless $prereq{$tool}; my $version = $prereq{$tool}->{version}; $_ = $prereq{$tool}->{test}->(); die "$0 failed: no version_string found in '$_' for '$tool'.\n" unless /(\d[.\d]+)/; my $saw = $1; my $fail; if ($saw =~ /^(\d+)(\.(\d+))$/ and $version =~ /^(\d+)(\.(\d+))$/) { $fail = $saw < $version; } else { my @version = split /\./, $version; my @saw = split /\./, $saw; $_ = 0 for @saw[@saw .. $#version]; # ensure @saw has enough entries for (0.. $#version) { last if $version[$_] < $saw[$_]; $fail = 1, last if $version[$_] > $saw[$_]; } die "version $saw of $tool is broken" if exists $prereq{$tool}->{broken_version} && $prereq{$tool}->{broken_version}->{$saw}; } if ($fail) { die < 'all'; use File::Basename; use constant WIN32 => ($^O =~ /Win32/i); use Cwd; my $cwd = WIN32 ? Win32::GetLongPathName(cwd) : cwd; $cwd =~ m{^(.+)/glue/perl$} or die "Can't find base directory"; my $base_dir = $1; my $inc_dir = "$base_dir/include"; my $mod_dir = "$base_dir/module"; my $xs_dir = "$base_dir/glue/perl/xsbuilder"; sub slurp($$) { open my $file, $_[1] or die "Can't open $_[1]: $!"; read $file, $_[0], -s $file; } my %c_macro_cache = ( XS => sub {s/XS\s*\(([^)]+)\)/void $1()/g}, ); sub c_macro { return $c_macro_cache{"@_"} if exists $c_macro_cache{"@_"}; my ($name, $header) = @_; my $src; if (defined $header) { slurp local $_ => "$inc_dir/$header"; /^#define $name\s*\(([^)]+)\)\s+(.+?[^\\])$/ms or die "Can't find definition for '$name': $_"; my $def = $2; my @args = split /\s*,\s*/, $1; for (1..@args) { $def =~ s/\b$args[$_-1]\b/ \$$_ /g; } my $args = join ',' => ('([^,)]+)') x @args; $src = "sub { /^#define $name.+?[^\\\\]\$/gms + s{$name\\s*\\($args\\)}{$def}g}"; } else { $src = "sub { /^#define $name.+?[^\\\\]\$/gms + s{$name\\s*\\(([^)]+)\\)}{\$1}g}"; } return $c_macro_cache{"@_"} = eval $src; } package My::ParseSource; use constant WIN32 => ($^O =~ /Win32/i); my @dirs = ("$inc_dir", "$mod_dir/apache2/", "$base_dir/glue/perl/xsbuilder"); use base qw/ExtUtils::XSBuilder::ParseSource/; __PACKAGE__->run; system("touch $base_dir/glue/perl/xsbuilder") == 0 or die "touch $base_dir/glue/perl/xsbuilder failed: $!" unless WIN32; sub package {'APR::Request'} sub unwanted_includes {[qw/apreq_config.h apreq_private_apache2.h/]} # ParseSource.pm v 0.23 bug: line 214 should read # my @dirs = @{$self->include_dirs}; # for now, we override it here just to work around the bug sub find_includes { my $self = shift; return $self->{includes} if $self->{includes}; require File::Find; my(@dirs) = @{$self->include_dirs}; unless (-d $dirs[0]) { die "could not find include directory"; } # print "Will search @dirs for include files...\n" if ($verbose) ; my @includes; my $unwanted = join '|', @{$self -> unwanted_includes} ; for my $dir (@dirs) { File::Find::finddepth({ wanted => sub { return unless /\.h$/; return if ($unwanted && (/^($unwanted)/o)); my $dir = $File::Find::dir; push @includes, "$dir/$_"; }, follow => not WIN32, }, $dir); } return $self->{includes} = $self -> sort_includes (\@includes) ; } sub include_dirs {\@dirs} sub preprocess { # need to macro-expand APREQ_DECLARE et.al. so P::RD can DTRT with # ExtUtils::XSBuilder::C::grammar for ($_[1]) { ::c_macro("APREQ_DECLARE", "apreq.h")->(); ::c_macro("APREQ_DECLARE_HOOK", "apreq_parser.h")->(); ::c_macro("APREQ_DECLARE_PARSER", "apreq_parser.h")->(); ::c_macro("APR_DECLARE")->(); ::c_macro("XS")-> (); s/APR_INLINE//g; s/static//g; } } 1; libapreq2-2.17/buildconf0000755000175000017500000000531414277401734014643 0ustar jortonjorton#!/bin/sh # # Licensed to the Apache Software Foundation (ASF) under one or more # contributor license agreements. See the NOTICE file distributed with # this work for additional information regarding copyright ownership. # The ASF licenses this file to You under the Apache License, Version 2.0 # (the "License"); you may not use this file except in compliance with # the License. You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. # # # buildconf: Build the support scripts needed to compile from a # checked-out version of the source code. perl="${PERL:-perl}" libtool="${LIBTOOL:-libtool}" aclocal="${ACLOCAL:-aclocal}" automake="${AUTOMAKE:-automake}" autoconf="${AUTOCONF:-autoconf}" autoheader="${AUTOHEADER:-autoheader}" save_args="$*"; while test $# -gt 0 do # Normalize case "$1" in -*=*) optarg=`echo "$1" | sed 's/[-_a-zA-Z0-9]*=//'` ;; *) optarg= ;; esac case "$1" in --with-perl=*) perl=$optarg ;; --with-libtool=*) libtool=$optarg ;; --with-aclocal=*) aclocal=$optarg ;; --with-automake=*) automake=$optarg ;; --with-autoconf=*) autoconf=$optarg ;; --with-autoheader=*) autoheader=$optarg ;; esac shift done libtoolize="${libtool}ize --automake --copy --force" echo "removing stale config files" touch .deps rm -f aclocal.m4 rm -f generated_lists rm -rf autom4te*.cache echo "checking buildconf prereqs"; $perl build/version_check.pl libtool $libtool || exit 1 $perl build/version_check.pl autoconf $autoconf || exit 1 $perl build/version_check.pl automake $automake || exit 1 $perl build/version_check.pl ExtUtils::XSBuilder || exit 1 #$perl build/version_check.pl Test::Inline || exit 1 PREREQ_PM=`$perl build/version_check.pl perl_prereqs` echo "running $libtoolize" && $libtoolize && \ echo "running $aclocal" && $aclocal && \ echo "running $autoconf" && $autoconf && \ echo "running $autoheader" && $autoheader && \ echo "running $automake -a -c" && $automake -a -c && \ echo "running xsbuilder" && (cd glue/perl && $perl ../../build/xsbuilder.pl) && \ echo "running cpan prereq fixups" && $perl -i -wpe "s/PREREQ_PM/$PREREQ_PM/" Makefile.in && \ echo "saving arguments for reuse." && cat >buildconf.nice <cookies() to comply with its documentation - C API [Philip M. Gollucci] Use the APREQ_DEFAULT_READ_LIMIT constant for the read_limit - C API [Ville Skyttä, Dirk Nehring] Add explicit cast in apreq_escape()/apreq_util.h to keep C++ compilers happy. - C API [joes] Protect against arbitrary recursion depth in apreq_parse_multipart() by adding a reasonable compile-time MAX_LEVEL limit. - C API [joes] Clean up end-of-file parsing for apreq_parse_multipart(), conforming to rfc-2046 § 5.1.1. - Perl API [joes] Move APR::Request::Param::Table and APR::Request::Cookie::Table packages to APR::Request module. - Perl XS [Steve Hay] Fix compile problems on Win32 without PERL_IMPLICIT_SYS related to link being an unresolved symbol. - Perl API [joes] APR::Request::Cookie::thaw() isn't a class method. - C API [joes] Fix off-by-one bug in the continuation-lines portion of the header parser. - Perl API [joes] Move APR::Request::upload to APR::Request, where it belongs. - Perl XS [Nikolay Ananiev] Use MP_STATIC declarations to allow Cygwin builds. - Perl API [joes] encode()/decode() were busted with zero-length args. This caused Apache2::Cookie::new() to segfault on cookie value of "". - C API [joes] Add apreq_charset_divine() and eliminate charset offset from return value of apreq_decode(v). - C API [joes] Improve the cp1252-charset heuristics for apreq_decode(v). - C API [Ralph Mattes] Add explicit casts for apreq_param_charset_* to keep c++ compilers happy. @section v2_06_dev Changes with libapreq2-2.06-dev (released July 20, 2005) - C API [Marc Gràcia, joes] Fix apreq_decode(v) when iso-latin-1 chars appear at the end of an encoded string. - Perl API [Philip M. Gollucci] Fix "Attempt to free temp prematurely" error in apreq_xs_croak(). - C API [Philip M. Gollucci] Add mod_apreq2 to httpd's server tokens. - Perl API [joes] Drop support for $req->env(), which also died with 2.05-dev. - Perl API [joes] Support for table set/add/delete methods is formally withdrawn. Technically this feature died with the module API refactoring in 2.05-dev. - C API [max] Right-hand limit of apreq_brigade_move() is declared as "excluding", but APR_RING_UNSPLICE() wants an "including" right-hand limit. Fixed this by passing the previous bucket. - Perl API [joes] Drop support for Apache2::Request::new's HOOK_DATA. UPLOAD_HOOK now takes only two arguments: ($upload, $data). - Perl API [joes] Drop support for Apache2::Cookie::Jar::new's VALUE_CLASS. 2.05-dev broke that API, and it's not worth trying to fix. People who need that should use APR::Request::Cookie::Table's cookie_class() API instead. - Perl API [joes] Fix cookie domain/path munging in Apache2::Cookie::new(). @section v2_05_dev Changes with libapreq2-2.05-dev (released May 5, 2005) - Win32 build [Randy Kobes] Have top-level 'nmake', 'nmake test', and 'nmake install' targets, respectively, also include building, testing, and installing the corresponding perl glue targets. - C API [geoff] Minimum httpd version is now 2.0.48, which includes the official apr 0.9.4 release. - C API [Max Kellermann] Fix apreq_quote. - Perl API [joes] Remove Apache2::Request::args. WARNING: through inheritance, args() now maps to Apache2::RequestRec::args. Folks that want the pre-2.05-dev behavior need to invoke APR::Request::args by name. - C API [joes, Max Kellermann] Add apreq_initialize, apreq_pre_initialize and apreq_post_initialize. These are not thread-safe operations, so applications need to ensure they are invoked (in the correct sequence) prior to using any apreq2 modules. - C, Perl API [joes] Add pool, bucket_alloc to apreq_handle_t. - Perl API [joes] Drop $data argument from UPLOAD_HOOK, and also drop HOOK_DATA option. Perl folks should use a closure instead of passing in context data. - Perl API [joes] Move bake, bake2 to Apache2::Cookie, now requiring an extra $r argument. Also ""-operator is mapped to as_string() for Apache2::Cookie; but APR::Request::Cookie maps it to value(). - C API [joes] Remove header_in & header_out from apreq_module_t. Remove apreq_ua_cookie_version() and apreq_cookie_bake*(). Remove cookie2 argument to apreq_handle_custom(). - C API [joes] s/APREQ/APREQ2/g in webserver configuration directives. - C API [Igor Shevchenko, Philip Gollucci] Fix segfault in mfd parser caused by parts w/ empty param names. - C API [joes] Add apreq_cp1252_to_utf8(). - C, Perl API [joes] Add charset support for params and couple the SvUTF8 flag to the param's taint flag. - C API [joes] Replace v->size with v->nlen + v->dlen. Added supporting apreq_value_table_add(). - C API [joes] Remove apreq_cookie_attr(). - C API [joes] - Add apreq_error.h, apreq_module.h. - Rename apreq_run* and apreq_make* funcs to conform with apreq_$obj_$meth scheme. - Replace c->version & c->secure with flags. - Parsers are assumed to be working with external data, so the cookies & params they produce are marked tainted. - C API [joes] apreq_parse_cookie_header() failed to parse RFC Cookie headers which contained no space chars after the '$Version=1' preamble. - C API [joes] Reorganize around include/, library/, and module/ dirs. - C Tests [joes] Replace CuTest-based tests with custom TAP-compliant framework. - C API [Max Kellermann] Continue the API improvements: - Convert APREQ_RUN_PARSER and APREQ_RUN_HOOK to inline, and downcase them. - Remove apreq_memmem. - Convert apreq_(un)escape to inline. - apreq_escape does not create an apreq_value_t*. - Initialize default_parsers explicitly to NULL. - Convert APREQ_BRIGADE_COPY to inline, and downcase it. - Lowercase APREQ_BRIGADE_SETASIDE, APREQ_BRIGADE_COPY. - Convert apreq_cookie_name and apreq_cookie_value macros to inline. - Convert apreq_param_name, apreq_param_value, apreq_param_info, and apreq_param_brigade to inline. - C API [joes] Widespread API refactorization to remove apreq_jar_t and apreq_request_t: - Header includes reorganized; apreq_parsers.h added (back again). - Replaced apreq_jar_t and apreq_request_t with single apreq_env_handle_t. - Added const qualifier to "v" attribute of apreq_cookie_t and apreq_param_t. - Use union type-puns to drop const qualifiers inside the new apreq_value_to_cookie and apreq_value_to_param implementations (gcc generates same object code as the macro versions did). - Moved "flags" attribute from apreq_value_t to apreq_cookie_t and apreq_param_t. - Remove env argument from hooks and parsers. - Reduce apreq_env_module to minimal set of operations. - Replace apreq_log calls with apreq-specific error codes. - Hooks are called on each body param now, not just during file uploads. - Tie the cgi handle to its creator pool. Detailed changes by header file: [apreq.h] - Remove flags from apreq_value_t. - Remove const qualifier from apreq_value_t's "name" attribute. - Remove apreq_value_merge* and apreq_value_copy*. - Remove apreq_char_to_value, apreq_strtoval, and apreq_strlen. - Move apreq_enctype to apreq_env.h. - Move apreq_env_handle_t struct definition to apreq_env.h - Change signature of apreq_decode. - Move apreq_brigade_concat here, changed its signature and improved it alot. - Remove apreq_brigade_spoolfile. - Dropped APREQ_*_ENCTYPE, renamed some APREQ_$foo defaults APREQ_DEFAULT_$foo. - Added APREQ_ERROR_*. [apreq_cookie.h] - Remove apreq_env.h include. - Remove apreq_jar_t. - Add "flags" to apreq_cookie_t, add const qualifier to its "v" attr. - Remove apreq_jar* functions. - Add apreq_parse_cookie_header. - Move apreq_cookie, apreq_cookie_bake(2), and apreq_ua_cookie_version to apreq_env.h. [apreq_params.h] - Remove apreq_env.h include. - Remove apreq_request_t. - Add "flags" to apreq_param_t, and const qualifier to its "v" attr. - Rename "bb" attribute "upload" in apreq_param_t. - Remove apreq_request* functions. - Remove apreq_parse_request. - Changed apreq_decode_param signature. - Replace env argument with apr_table_t in apreq_params_as_array, apreq_params_as_string, - Move remaining apreq_param* to apreq_env.h. - Move parser and hook sections to apreq_parsers.h. - Change apreq_upload(s) old apreq_request_t arg to apr_table_t. [apreq_parsers.h] - Acquire the hook and parser sections of original apreq_params.h. - Remove env argument from APREQ_PARSER_ARGS and APREQ_HOOK_ARGS - Augment apreq_hook_t and apreq_parser_t to replace missing env features. - Change apreq_make_parser and apreq_make_hook signatures. - Rename apreq_add_hook to apreq_parser_add_hook, returning apr_status_t. - Change apreq_parser signature. [apreq_env.h] - Remove read, log, pool, bucket_alloc, request, jar, and query_string methods. - Include apreq_parsers.h. - Reorganize apreq_env_module_t to provide hook, parser, jar, args, & body table ops. - Rename max_brigade to "brigade_limit", max_body to "read_limit". - Change related module sigs, including temp_dir, to get/set methods. - Add parser and read_limit args to apreq_env_make_custom_handle. - Drop "name" arg and APREQ_ENV_MODULE =~ s/_ENV//. - s/apreq_env_make/apreq_handle/ in the handle constructor names. [mod_apreq.c, apreq_env_apache2.h] - Changed APREQ_Max* configs to APREQ_BrigadeLimit and APREQ_ReadLimit. - Handle constructor renamed apreq_handle_apache2. - C API [joes] Make our "libtool current interface" number depend on apr's major number. This allows libapreq2 to be installed into a system-wide location while avoiding ABI conflicts arising from our apr-based interfaces. - C API [Max Kellermann] Introduce apreq_env_handle_t to replace the void *env usage. Also added apreq_env_custom for making private handles, and new apreq_env_apache2.h to let mod_apreq export apreq_env_make_apache2. - C API [Max Kellermann] Rename apreq_env_t to apreq_env_module_t, to prepare for a new thread-safe apreq_env API. - C API [Max Kellermann] mod_apreq must check the return value of apreq_brigade_concat to avoid a RAM-consuming infinite loop. A bad APREQ_TempDir setting can cause this situation. - C API [joes] Provide workaround for chunked trailers bug in ap_http_filter. - C, Perl API [joes] Several upload-related bugfixes: 1) apreq_upload and apreq_uploads did not search the full body table, 2) $upload->slurp and $io->read did not autovivify the resultant string. - C API [joes] Add "flags" attribute to apreq_value_t, planning for charset support. This is an ABI change, starting with libapreq2.so.2.0.24. - C API [joes] Add apreq_env_bucket_alloc() to get an allocator directly from the environment instead of creating them from a pool. This is an ABI change, starting with libapreq2.so.2.0.23. - Build system [joes] Add --with-apache2-httpd option so users can override apxs's notion of where the httpd executable is. XSBuilder's header parser runs from buildconf now instead of configure, so we will include those tables in the release tarball. buildconf gets an additional --with-perl option for running the xsbuilder.pl parsing script. The XS generation code in xsbuilder.pl has moved to glue/perl/Makefile.PL. - Perl API [joes] Allow ctors for Apache::Cookie, Apache::Cookie::Jar and Apache:::Request to accept Apache::Request objects (instead of requiring an Apache::RequestRec object). This thread details the bug http://thread.gmane.org/gmane.comp.apache.mod-perl/15727 - C API [Bojan Smojver] Bake cookies with err_headers_out so they are sent on non-2xx server responses (ie. a 304 redirect). Also ensure that headers are copied with apr_table_add instead of apr_table_addn. Since apreq_cookie_bake() allocates from the stack, the Set-Cookie headers would occasionally get mangled without this patch. - C API [joes] Add apreq_register_parser(), which allows users to add their own parsers to apreq_parser()'s recognized MIME types. - C API [joes] Support "multipart/mixed" file uploads. Support XForms' "multipart/related" enctype. - C API [joes] Add apreq_hook_apr_xml_parser(), which is a simple wrapper hook around APR's expat-based apr_xml_parser. Add a generic parser apreq_parse_generic() to parse arbitrary enctypes using the hook API. @section v2_04_dev Changes with libapreq2-2.04-dev (released August 30, 2004) - Perl API [joes] Add TAINT checks, marking all parsed data as tainted. - C API [joes] Add body_status attribute to apreq_request_t, to allow the both environment and the parser to report any errors encountered. - C API [randyk, joes] Cookie parser was locking up on non-alphanumeric chars in cookie names. Also RFC Cookie attributes are always checked for quotes during bake(2), and the quotes are now stripped from incoming RFC cookies during parsing (but they are never stripped from the actual cookie value). - Perl API [joes] Apache::Cookie::Jar->new accepts a VALUE_CLASS argument, which effectively blesses all the jar's cookies into that class, which simplifies subclassing Apache::Cookie. Accordingly Apache::Cookie->freeze($value) no longer accepts a freeze()-able object in $value. - C API [Markus Wichitill, randyk, joes] Drop APR_DELONCLOSE from apreq_file_mktemp implementation and install apreq_file_cleanup. When passed to apr_file_open on Win32, APR_DELONCLOSE sets the FILE_SHARED_DELETE flag, which is, unfortunately, a property that is preserved across NTFS "hard" links. This breaks apps that link() the temp file to a permanent location, and subsequently expect to open it without FILE_SHARED_DELETE before the original tempfile is closed+deleted. In fact, even Apache::Upload does this, so it is a common enough event that the apreq_file_cleanup workaround is necessary. - C API [Ken Burcham, joes] Fix bug in url parser that occurs when a %XX-encoded sequence is split across multiple buckets. Added apreq_decode_decodev to make this problem less inconvenient. - Perl API [joes] Exception objects inherit from the object which raised it, which allows $@ to invoke its methods with impunity (exceptions are disabled for objects which derive from an exception class). - Perl API [joes] Implement HOOK_DATA and UPLOAD_HOOK. - Perl API [joes] Add safe XS wrappers for $table->add, $table->set, $table->STORE, and $table_class->new. - Perl API [joes] Add exceptions to $upload->link, $upload->tempname, $upload->slurp, and $cookie->set_attr. Return value of $upload->slurp is now the upload length. Also document new $upload->io. - C API [joes] Restrict all apr_status_t codes to APR_SUCCESS, APR_INCOMPLETE, APR_EGENERAL, APR_EINIT, APR_ENOTIMPL, since any others will generate confusing error messages from apr_strerror. - Perl API [joes] Added $upload->io with a TIEHANDLE API layered over APR::Brigade. $upload->fh remains implemented as an APR::PerlIO object, which is seekable but less efficient and currently suffers some portability issues associated with largefile support in perl and apr. - Perl API [joes] Added apreq_xs_croak for throwing APR::Error exceptions and included error-checking on $req->param, $req->args, $req->body, $req->upload, and $jar->get. - Perl API [joes] Added $jar->status, $req->args_status and $req->body_status to report parsing errors. Also add $upload->tempname per user request. - C API [joes] Dropped status attribute of apreq_value_t. Added status field to apreq_jar_t and added args_status field to apreq_request_t. Parsers also must return their public status code when a NULL brigade is passed. apreq_hook_disable_uploads() is also added. This is an ABI change affecting all versions of libapreq2 prior to 2.0.12. - Perl API [joes] $upload->info returns a proper APR::Table object now. Also implemented $upload->size, $upload->fh, and $upload->type. - C API [Jean-François Meesse] mfd parser fails to parse CRLF-terminated files when the terminating boundary string is at the start of a new bucket. This is reportedly a common event for PDF files uploaded with Netscape 7. - Perl API [joes] Add back-compat support for Apache::Cookie->fetch() via Apache->request. - C API [joes] Add MaxBody, MaxBrigade, and TempDir per-dir directives to mod_apreq filter. - C API [joes] Replace free/tempnam dependency in apreq_file_mktemp() with apr_temp_dir_get(). Add additional gcc warning flags when --enable-maintainer-mode is set. - C API [joes, Scott Hutton] Replace apreq_brigade_copy with more effective APREQ_BRIGADE_COPY macro. Also introduce APREQ_BRIGADE_SETASIDE to deal with buckets that need to be set aside for use in future function calls. mod_ssl generates transient buckets which tickled this bug. - Perl API [joes] Separate Apache::Upload module from Apache::Request for better organization. @section v2_03_dev Changes with libapreq2-2.03-dev (released June 12, 2004) - C API [joes] "Objectify" cookie/jar API: s/apreq_(make|serialize)_cookie/apreq_cookie_$1/ and reordering args so the cookie/jar object is always the first argument. Macros added to provide source-compatibility with the old names. - Perl API [joes] Added $upload->slurp($data), which reads the contents of the file upload "$upload" into the scalar "$data". - C API [joes, randyk] apreq_run_(hook|parser) are macros, so they are capitalized now. Fixed apreq_params_as_string() and added apreq_params_as_array(). Reworked definitions of APREQ_DECLARE_HOOK, APREQ_DECLARE_PARSER and apreq_(parser|hook)_t, hopefully to be more Win32 friendly. Also updated the documentation. - C API [joes] Compensate for a missing CRLF in empty file upload block, which actually complies with RFC 2046 Section 5.1.1. Konqueror (version unknown) and Mozilla 0.9.7 are known to emit such blocks. - Perl API [joes] $req->upload() in list context failed to filter out non-uploads. Also $req->upload("nonexistent-key-name") segfaults. - Perl test suite t/TEST.PL must run parent class' pre_configure to get the configuration right - C API [joes] apreq_brigade_concat() wasn't supplying the final EOS bucket to large brigades (>256K), which somtimes caused the prefetch loop in mod_apreq.c's apreq_filter() to hang. - Documentation [joes] CHANGES file reformatted, removing dates & other clutter as Stas suggests. - C API [joes] Rewrote cgi_read() in apreq_env.c and reworked mod_apreq.c to enforce apreq_env_max_body() settings. - C API [joes] Fixed bug in url_parser code- missing context brigade was needed to track key-value pairs which span multiple buckets. - C API [joes] API modifications: removed struct apreq_cfg_t, adding new apreq_env hooks max_body, max_brigade_len, and temp_dir. Folded apreq_parsers.h into apreq_params.h and modified the arguments to apreq_run_parser() and apreq_run_hook(). Renamed apreq_parser_t's content_type as enctype and apreq_copy_brigade() as apreq_brigade_copy(). These changes make libapreq2.so.2.0.5 incompatible with earlier versions. - Perl API [stas] Include ppport.h from blead-perl to support older perls. Add a proper support for ithreads. - C API [Swen Schillig, joes] Fixed bug in calculation of Netscape cookie expiration dates. apr_time_t is measured in microseconds, not seconds, which threw off the arithmetic; apr_time_from_sec was needed for the conversion. - C API [Max Kellermann] Fix segfault caused by invalid %-escape sequence in query string. @section v2_02_dev Changes with libapreq2-2.02-dev (released Nov 15, 2003) - Perl API [joes] Fix bogus pool/cookie initializers in Apache::Cookie::set_attr(), which caused Apache::Cookie::new to segfault. Bug first reported to modperl list by Wolfgang Kubens. @section v2_01_dev Changes with libapreq2-2.01-dev (released Nov 10, 2003) - build system [joes] Skip Apache::Test tests in env/ when Apache::Test is unavailable. This allows the C API to be build and installed without requiring Apache::Test (it is still a requirement for compiling the perl glue). - C API mod_apreq.c [joes] Parser errors were creeping into the return value of apreq_filter, which breaks the "transparent tee" paradigm. This caused bogus "400 Bad Request" responses (first reported by Vladimir Dudo) to occur when libapreq2 was used by an output filter during a GET request (handled by apache2's default handler). The test suite has been updated accordingly. - C API [joes] Incorporate libapreq_cgi into libapreq2 as the default environment, and add apreq_env_t and initializer apreq_env_module() to manage the environment at runtime (determining the environment at load-time was problematic on non-ELF systems). @section v2_0_0 Changes with libapreq2-2.00-dev (Oct 25, 2003) - C API: libapreq_cgi.c [randyk, joes] CGI environment defined by env/libapreq_cgi.c is functional (with tests added to env/t). This library may soon be incorporated directly into libapreq2 as a default enviroment. - C API: mod_apreq.c [joes] Added ctx->saw_eos to ensure we don't read from upstream filters after receiving an eos bucket. Otherwise it was possible for two eos buckets to appear when a prefetch read is involved, which breaks other modules like mod_proxy. This bug was uncovered by Philippe Chiasson. mod_apreq's apreq_env_majic_number bumped to reflect the added fixes. - configure: --enable-perl-glue [joes] The --enable-perl-glue option integrates the perl glue into the normal Unix build cycle. It is disabled by default, but is silently reenabled if the user configures the source tree via Makefile.PL. - C API [joes] Added apreq_header_attribute() and fixed mfd parser to allow "charset" attribute to appear in the Content-Type header. Sven Geisler points out that Opera 7.20 does generate such headers. - C API [joes] Added versioning API following http://apr.apache.org/versioning.html apreq_env renamed apreq_env_name, and apreq_env_magic_number added to provide versioning for environments (modules). The header files are now installed to "include/apreq2", and the library is renamed "libapreq2". Also added an apreq2-config script based on apu-config. - configure: static mod_apreq.c [Bojan Smojver, joes] Add --with-apache2-src configure option, along with --with-apr-config and --with-apu-config, and provide support for compiling mod_apreq into httpd as a static apache module. - C API: mod_apreq.c [joes] Support for internal redirects added to the mod_apreq filter. This ensures any POST data prefetched in the main request gets passed along to the subrequest handler(s). - C bugfix: apreq_decode [Graham Clark] If the source and destination strings are represented by the same pointer - e.g. if called as apreq_unescape(s) - string s is modified incorrectly in general. Patch includes new unit test. - Perl API [joes] Added $req->parse, $req->status, & "preparse" logic to $req->param & $req->upload. - C API [joes] Added "preparse" logic to apreq_params & apreq_uploads to bring behavior in line with libapreq-1.x. - C API [joes] Dropped param->charset. Make apreq_brigade_concat public, so mod_apreq can use it for its ctx->spool brigade. - Documentation [joes] Updated Cookie_pod to reflect API changes over v1.X. - Documentation [joes] Added doxygen links to Apache::Request and Apache::Cookie perl docs. - C API [joes] Added apreq_copy_brigade(bb) to apreq.h. - C API [joes] The new filter-based design required a complete departure from libapreq-1.X codebase. libapreq-2 is based solely on APR, and to be fully functional, requires a supporting environment similar to Apache-2. A person wishing to port libapreq-2 to a new environment needs to provide definitions for the declarations in apreq_env.h. - Perl API [joes] Aggregates are always collected into an APR::Table-based package. New table packages: Apache::Cookie::Table, Apache::Request::Table, and Apache::Upload::Table. - Perl API [joes] Apache::Cookie->fetch now requires an "environment" argument ($r). Its return value is blessed into the Apache::Cookie::Jar class. - Perl API [joes] Two new request lookup functions: -# $req->args - param lookup using only the query string -# $req->body - param lookup using only the POST data **/ libapreq2-2.17/compile0000755000175000017500000001635014277402427014330 0ustar jortonjorton#! /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 . # # 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. # This file is maintained in Automake, please report # bugs to or send patches to # . 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 . 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: libapreq2-2.17/config.guess0000755000175000017500000014120514277402421015262 0ustar jortonjorton#!/usr/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-05-25' # 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 . # # 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 . # 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 ." 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 #if defined(__UCLIBC__) LIBC=uclibc #elif defined(__dietlibc__) LIBC=dietlibc #elif defined(__GLIBC__) LIBC=gnu #else #include /* 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 /* 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 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 #include 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 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 CPU=$UNAME_MACHINE LIBCABI=$LIBC if test "$CC_FOR_BUILD" != no_compiler_found; then ABI=64 sed 's/^ //' << EOF > "$dummy.c" #ifdef __i386__ ABI=x86 #else #ifdef __ILP32__ ABI=x32 #endif #endif EOF cc_set_abi=`$CC_FOR_BUILD -E "$dummy.c" 2>/dev/null | grep '^ABI' | sed 's, ,,g'` eval "$cc_set_abi" case $ABI in x86) CPU=i686 ;; x32) LIBCABI=${LIBC}x32 ;; esac fi GUESS=$CPU-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' /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 GUESS=i586-unisys-sysv4 ;; *:UNIX_System_V:4*:FTX*) # From Gerald Hewes . # 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 ;; ppc:Haiku:*:*) # Haiku running on Apple PowerPC GUESS=powerpc-apple-haiku ;; *:Haiku:*:*) # Haiku modern gcc (not bound by BeOS compat) GUESS=$UNAME_MACHINE-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" < #include #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 #if defined(_SIZE_T_) || defined(SIGLOST) #include #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 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 #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 <&2 <&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: libapreq2-2.17/config.sub0000755000175000017500000010512114277402421014722 0ustar jortonjorton#!/usr/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 . # # 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 . # # 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 ." 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 <&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 <&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 <&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: libapreq2-2.17/configure0000755000175000017500000163455614277402427014700 0ustar jortonjorton#! /bin/sh # Guess values for system-dependent variables and create Makefiles. # Generated by GNU Autoconf 2.71 for Apache HTTP Server Request Library 2.17. # # 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 -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 test \$(( 1 + 1 )) = 2 || 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: apreq-dev@httpd.apache.org about your system, including $0: any error possibly output before this message. Then $0: install a modern shell, or manually run the script $0: 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='Apache HTTP Server Request Library' PACKAGE_TARNAME='libapreq2' PACKAGE_VERSION='2.17' PACKAGE_STRING='Apache HTTP Server Request Library 2.17' PACKAGE_BUGREPORT='apreq-dev@httpd.apache.org' PACKAGE_URL='' # 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_subst_vars='am__EXEEXT_FALSE am__EXEEXT_TRUE LTLIBOBJS LIBOBJS APU_DOC_VERSION APR_DOC_VERSION TAR MM_OPTS PERL_OPTS PERL APU_LA APR_LA APR_LIBS APR_LTFLAGS APR_LDFLAGS APR_INCLUDES APR_CONFIG APU_CONFIG APACHE1_APXS APACHE2_HTTPD APACHE2_INCLUDES APACHE2_SRC APACHE2_APXS APREQ_DOTTED_VERSION APREQ_MAJOR_VERSION APREQ_LIBTOOL_VERSION APREQ_LIBNAME APREQ_CONFIG HAVE_APACHE1_FALSE HAVE_APACHE1_TRUE BUILD_APU_FALSE BUILD_APU_TRUE BUILD_APR_FALSE BUILD_APR_TRUE BUILD_HTTPD_FALSE BUILD_HTTPD_TRUE HAVE_APACHE_TEST_FALSE HAVE_APACHE_TEST_TRUE BUILD_PERL_GLUE_FALSE BUILD_PERL_GLUE_TRUE ENABLE_PROFILE_FALSE ENABLE_PROFILE_TRUE MAINT MAINTAINER_MODE_FALSE MAINTAINER_MODE_TRUE 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 EGREP GREP SED host_os host_vendor host_cpu host build_os build_vendor build_cpu build LIBTOOL 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 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_dependency_tracking enable_shared enable_static with_pic enable_fast_install with_aix_soname with_gnu_ld with_sysroot enable_libtool_lock enable_maintainer_mode enable_profile enable_perl_glue with_perl with_apache2_apxs with_apache2_src with_apache2_httpd with_apr_config with_apu_config with_apache1_apxs with_perl_opts with_mm_opts with_expat ' ac_precious_vars='build_alias host_alias target_alias CC CFLAGS LDFLAGS LIBS CPPFLAGS LT_SYS_LIBRARY_PATH' # 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 Apache HTTP Server Request Library 2.17 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/libapreq2] --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 Apache HTTP Server Request Library 2.17:";; 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") --enable-dependency-tracking do not reject slow dependency extractors --disable-dependency-tracking speeds up one-time build --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) --enable-maintainer-mode enable make rules and dependencies not useful (and sometimes confusing) to the casual installer --enable-profile compile libapreq2 with "-pg -fprofile-arcs -ftest-coverage" for gcov/gprof --enable-perl-glue build perl modules Apache::Request and Apache::Cookie Optional Packages: --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no) --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). --with-perl path to perl executable --with-apache2-apxs path to apache2's apxs --with-apache2-src path to httpd source --with-apache2-httpd path to httpd binary --with-apr-config path to apr-*-config script --with-apu-config path to apu-*-config script --with-apache1-apxs path to apache1's apxs --with-perl-opts extra PERL options --with-mm-opts extra ExtUtils::MakeMaker options --with-expat specify expat location 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 LT_SYS_LIBRARY_PATH User-defined run-time library search path. 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 Apache HTTP Server Request Library configure 2.17 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_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_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 Apache HTTP Server Request Library $as_me 2.17, 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 # 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; } " 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" # Auxiliary files required by this configure script. ac_aux_files="config.guess config.sub ltmain.sh compile 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 rm -f config.nice cat >config.nice<> config.nice fi if test -n "$CFLAGS"; then echo "CFLAGS=\"$CFLAGS\"; export CFLAGS" >> config.nice fi if test -n "$CPPFLAGS"; then echo "CPPFLAGS=\"$CPPFLAGS\"; export CPPFLAGS" >> config.nice fi if test -n "$LDFLAGS"; then echo "LDFLAGS=\"$LDFLAGS\"; export LDFLAGS" >> config.nice fi if test -n "$LTFLAGS"; then echo "LTFLAGS=\"$LTFLAGS\"; export LTFLAGS" >> config.nice fi if test -n "$LIBS"; then echo "LIBS=\"$LIBS\"; export LIBS" >> config.nice fi if test -n "$INCLUDES"; then echo "INCLUDES=\"$INCLUDES\"; export INCLUDES" >> config.nice fi if test -n "$NOTEST_CFLAGS"; then echo "NOTEST_CFLAGS=\"$NOTEST_CFLAGS\"; export NOTEST_CFLAGS" >> config.nice fi if test -n "$NOTEST_CPPFLAGS"; then echo "NOTEST_CPPFLAGS=\"$NOTEST_CPPFLAGS\"; export NOTEST_CPPFLAGS" >> config.nice fi if test -n "$NOTEST_LDFLAGS"; then echo "NOTEST_LDFLAGS=\"$NOTEST_LDFLAGS\"; export NOTEST_LDFLAGS" >> config.nice fi if test -n "$NOTEST_LIBS"; then echo "NOTEST_LIBS=\"$NOTEST_LIBS\"; export NOTEST_LIBS" >> config.nice fi echo $0 $ac_configure_args '"$@"' >> config.nice chmod +x config.nice 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=libapreq2 VERSION=2.17 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 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 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=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_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=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 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 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 # 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 # 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 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 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*) 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_c_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 if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$NM conftest.$ac_objext \| "$lt_cv_sys_global_symbol_pipe" \> $nlist\""; } >&5 (eval $NM conftest.$ac_objext \| "$lt_cv_sys_global_symbol_pipe" \> $nlist) 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && 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 # 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' ;; # 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 ;; 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*) 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*) 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 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' ;; esac ;; netbsd*) 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 # Add ABI-specific directories to the system library path. sys_lib_dlsearch_path_spec="/lib64 /usr/lib64 /lib /usr/lib" # 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="$sys_lib_dlsearch_path_spec $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' ;; 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=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 CC=$lt_save_CC ac_config_commands="$ac_config_commands libtool" # Only expand once: 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 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 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether to enable maintainer-specific portions of Makefiles" >&5 printf %s "checking whether to enable maintainer-specific portions of Makefiles... " >&6; } # Check whether --enable-maintainer-mode was given. if test ${enable_maintainer_mode+y} then : enableval=$enable_maintainer_mode; USE_MAINTAINER_MODE=$enableval else $as_nop USE_MAINTAINER_MODE=no fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $USE_MAINTAINER_MODE" >&5 printf "%s\n" "$USE_MAINTAINER_MODE" >&6; } if test $USE_MAINTAINER_MODE = yes; then MAINTAINER_MODE_TRUE= MAINTAINER_MODE_FALSE='#' else MAINTAINER_MODE_TRUE='#' MAINTAINER_MODE_FALSE= fi MAINT=$MAINTAINER_MODE_TRUE ac_config_headers="$ac_config_headers include/apreq_config.h" # Check whether --enable-profile was given. if test ${enable_profile+y} then : enableval=$enable_profile; PROFILE=$enableval else $as_nop PROFILE="no" fi # Check whether --enable-perl_glue was given. if test ${enable_perl_glue+y} then : enableval=$enable_perl_glue; PERL_GLUE=$enableval else $as_nop PERL_GLUE="no" fi # Check whether --with-perl was given. if test ${with_perl+y} then : withval=$with_perl; PERL=$withval else $as_nop PERL="perl" fi # Check whether --with-apache2-apxs was given. if test ${with_apache2_apxs+y} then : withval=$with_apache2_apxs; APACHE2_APXS=$withval else $as_nop APACHE2_APXS="apxs" fi # Check whether --with-apache2-src was given. if test ${with_apache2_src+y} then : withval=$with_apache2_src; APACHE2_SRC=$withval else $as_nop APACHE2_SRC="" fi # Check whether --with-apache2-httpd was given. if test ${with_apache2_httpd+y} then : withval=$with_apache2_httpd; APACHE2_HTTPD=$withval else $as_nop APACHE2_HTTPD="" fi # Check whether --with-apr-config was given. if test ${with_apr_config+y} then : withval=$with_apr_config; APR_CONFIG=$withval else $as_nop APR_CONFIG="" fi # Check whether --with-apu-config was given. if test ${with_apu_config+y} then : withval=$with_apu_config; APU_CONFIG=$withval else $as_nop APU_CONFIG="" fi # Check whether --with-apache1-apxs was given. if test ${with_apache1_apxs+y} then : withval=$with_apache1_apxs; APACHE1_APXS=$withval else $as_nop APACHE1_APXS="" fi # Check whether --with-perl-opts was given. if test ${with_perl_opts+y} then : withval=$with_perl_opts; PERL_OPTS=$withval else $as_nop PERL_OPTS="" fi # Check whether --with-mm-opts was given. if test ${with_mm_opts+y} then : withval=$with_mm_opts; MM_OPTS=$withval else $as_nop MM_OPTS="" fi # Check whether --with-expat was given. if test ${with_expat+y} then : withval=$with_expat; EXPAT_DIR=$withval else $as_nop EXPAT_DIR="" fi OS=`$PERL -e 'print $^O'` prereq_check="$PERL $PERL_OPTS build/version_check.pl" if test -n "$APACHE2_SRC"; then # no apxs: must compile httpd from source APACHE2_SRC=`cd $APACHE2_SRC;pwd` as_ac_File=`printf "%s\n" "ac_cv_file_$APACHE2_SRC/include/httpd.h" | $as_tr_sh` { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $APACHE2_SRC/include/httpd.h" >&5 printf %s "checking for $APACHE2_SRC/include/httpd.h... " >&6; } if eval test \${$as_ac_File+y} then : printf %s "(cached) " >&6 else $as_nop test "$cross_compiling" = yes && as_fn_error $? "cannot check for file existence when cross compiling" "$LINENO" 5 if test -r "$APACHE2_SRC/include/httpd.h"; then eval "$as_ac_File=yes" else eval "$as_ac_File=no" fi fi eval ac_res=\$$as_ac_File { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 printf "%s\n" "$ac_res" >&6; } if eval test \"x\$"$as_ac_File"\" = x"yes" then : else $as_nop as_fn_error $? "invalid Apache2 source directory" "$LINENO" 5 fi APACHE2_INCLUDES=-I$APACHE2_SRC/include if test -z "$APR_CONFIG"; then APR_CONFIG="$APACHE2_SRC/srclib/apr/apr-config" fi if test -z "$APU_CONFIG"; then APU_CONFIG="$APACHE2_SRC/srclib/apr-util/apu-config" fi APACHE2_HTTPD=$APACHE2_SRC/httpd else # have apxs: use it APACHE2_INCLUDES=-I`$APACHE2_APXS -q INCLUDEDIR` APR_MAJOR_VERSION=`$APACHE2_APXS -q APR_VERSION 2>/dev/null | cut -d. -f 1` if test ${APR_MAJOR_VERSION:="0"} -eq 0; then apr_config=apr-config apu_config=apu-config apreq_libs="-lapr -laprutil" else apr_config=apr-$APR_MAJOR_VERSION-config apu_config=apu-$APR_MAJOR_VERSION-config apreq_libs="-lapr-$APR_MAJOR_VERSION -laprutil-$APR_MAJOR_VERSION" fi if test -z "$APR_CONFIG"; then APR_CONFIG=`$APACHE2_APXS -q APR_BINDIR`/$apr_config fi if test -z "$APU_CONFIG"; then APU_CONFIG=`$APACHE2_APXS -q APU_BINDIR`/$apu_config fi if test -z "$APACHE2_HTTPD"; then APACHE2_HTTPD=`$APACHE2_APXS -q SBINDIR`/`$APACHE2_APXS -q progname` fi if test -z "`$prereq_check apache2 $APACHE2_HTTPD`"; then as_fn_error $? "Bad apache2 binary ($APACHE2_HTTPD)" "$LINENO" 5 fi APR_DOC_VERSION=`$APACHE2_APXS -q APR_VERSION 2>/dev/null | cut -d. -f -2` APU_DOC_VERSION=`$APACHE2_APXS -q APU_VERSION 2>/dev/null | cut -d. -f -2` fi if test "x$APR_DOC_VERSION" = 'x'; then APR_DOC_VERSION=0.9 fi if test "x$APU_DOC_VERSION" = 'x'; then APU_DOC_VERSION=0.9 fi as_ac_File=`printf "%s\n" "ac_cv_file_$APR_CONFIG" | $as_tr_sh` { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $APR_CONFIG" >&5 printf %s "checking for $APR_CONFIG... " >&6; } if eval test \${$as_ac_File+y} then : printf %s "(cached) " >&6 else $as_nop test "$cross_compiling" = yes && as_fn_error $? "cannot check for file existence when cross compiling" "$LINENO" 5 if test -r "$APR_CONFIG"; then eval "$as_ac_File=yes" else eval "$as_ac_File=no" fi fi eval ac_res=\$$as_ac_File { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 printf "%s\n" "$ac_res" >&6; } if eval test \"x\$"$as_ac_File"\" = x"yes" then : else $as_nop as_fn_error $? "invalid apr-config location ($APR_CONFIG)- did you forget to configure apr?" "$LINENO" 5 fi if test -z "`$prereq_check apr $APR_CONFIG`"; then as_fn_error $? "Bad libapr version" "$LINENO" 5 fi as_ac_File=`printf "%s\n" "ac_cv_file_$APU_CONFIG" | $as_tr_sh` { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $APU_CONFIG" >&5 printf %s "checking for $APU_CONFIG... " >&6; } if eval test \${$as_ac_File+y} then : printf %s "(cached) " >&6 else $as_nop test "$cross_compiling" = yes && as_fn_error $? "cannot check for file existence when cross compiling" "$LINENO" 5 if test -r "$APU_CONFIG"; then eval "$as_ac_File=yes" else eval "$as_ac_File=no" fi fi eval ac_res=\$$as_ac_File { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 printf "%s\n" "$ac_res" >&6; } if eval test \"x\$"$as_ac_File"\" = x"yes" then : else $as_nop as_fn_error $? "invalid apu-config location ($APU_CONFIG)- did you forget to configure apr-util?" "$LINENO" 5 fi if test -z "`$prereq_check apu $APU_CONFIG`"; then as_fn_error $? "Bad libaprutil version" "$LINENO" 5 fi if test "x$PERL_GLUE" != "xno"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for perl" >&5 printf %s "checking for perl... " >&6; } if test -z "`$prereq_check perl $PERL`"; then as_fn_error $? "Bad perl version" "$LINENO" 5 fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $PERL" >&5 printf "%s\n" "$PERL" >&6; } { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for ExtUtils::XSBuilder" >&5 printf %s "checking for ExtUtils::XSBuilder... " >&6; } if test -z "`$prereq_check ExtUtils::XSBuilder`"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: Bad ExtUtils::XSBuilder version" >&5 printf "%s\n" "$as_me: WARNING: Bad ExtUtils::XSBuilder version" >&2;} fi { 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 mod_perl2" >&5 printf %s "checking for mod_perl2... " >&6; } if test -z "`$prereq_check mod_perl2`"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: Bad mod_perl2 version" >&5 printf "%s\n" "$as_me: WARNING: Bad mod_perl2 version" >&2;} fi { 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 Apache::Test" >&5 printf %s "checking for Apache::Test... " >&6; } if test -z "`$prereq_check Apache::Test`"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: Bad Apache::Test version" >&5 printf "%s\n" "$as_me: WARNING: Bad Apache::Test version" >&2;} fi { 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 ExtUtils::MakeMaker" >&5 printf %s "checking for ExtUtils::MakeMaker... " >&6; } if test -z "`$prereq_check ExtUtils::MakeMaker`"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: Bad ExtUtils::MakeMaker version" >&5 printf "%s\n" "$as_me: WARNING: Bad ExtUtils::MakeMaker version" >&2;} fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 printf "%s\n" "yes" >&6; } fi if test "x$PROFILE" != "xno"; then ENABLE_PROFILE_TRUE= ENABLE_PROFILE_FALSE='#' else ENABLE_PROFILE_TRUE='#' ENABLE_PROFILE_FALSE= fi if test "x$PERL_GLUE" != "xno"; then BUILD_PERL_GLUE_TRUE= BUILD_PERL_GLUE_FALSE='#' else BUILD_PERL_GLUE_TRUE='#' BUILD_PERL_GLUE_FALSE= fi if test -n "`$prereq_check Apache::Test`"; then HAVE_APACHE_TEST_TRUE= HAVE_APACHE_TEST_FALSE='#' else HAVE_APACHE_TEST_TRUE='#' HAVE_APACHE_TEST_FALSE= fi if test -n "$APACHE2_SRC"; then BUILD_HTTPD_TRUE= BUILD_HTTPD_FALSE='#' else BUILD_HTTPD_TRUE='#' BUILD_HTTPD_FALSE= fi if test "x$APR_CONFIG" = x`$APR_CONFIG --srcdir`/apr-config; then BUILD_APR_TRUE= BUILD_APR_FALSE='#' else BUILD_APR_TRUE='#' BUILD_APR_FALSE= fi if test "x$APU_CONFIG" = x`$APU_CONFIG --srcdir`/apu-config; then BUILD_APU_TRUE= BUILD_APU_FALSE='#' else BUILD_APU_TRUE='#' BUILD_APU_FALSE= fi if test -n "$APACHE1_APXS"; then HAVE_APACHE1_TRUE= HAVE_APACHE1_FALSE='#' else HAVE_APACHE1_TRUE='#' HAVE_APACHE1_FALSE= fi ac_default_prefix="`$APU_CONFIG --prefix`" if test "x$APR_INCLUDES" = "x"; then echo " setting APR_INCLUDES to \""`$APR_CONFIG --includes`"\"" APR_INCLUDES=""`$APR_CONFIG --includes`"" else apr_addto_bugger=""`$APR_CONFIG --includes`"" for i in $apr_addto_bugger; do apr_addto_duplicate="0" for j in $APR_INCLUDES; do if test "x$i" = "x$j"; then apr_addto_duplicate="1" break fi done if test $apr_addto_duplicate = "0"; then echo " adding \"$i\" to APR_INCLUDES" APR_INCLUDES="$APR_INCLUDES $i" fi done fi if test "x$APR_INCLUDES" = "x"; then echo " setting APR_INCLUDES to \""`$APU_CONFIG --includes`"\"" APR_INCLUDES=""`$APU_CONFIG --includes`"" else apr_addto_bugger=""`$APU_CONFIG --includes`"" for i in $apr_addto_bugger; do apr_addto_duplicate="0" for j in $APR_INCLUDES; do if test "x$i" = "x$j"; then apr_addto_duplicate="1" break fi done if test $apr_addto_duplicate = "0"; then echo " adding \"$i\" to APR_INCLUDES" APR_INCLUDES="$APR_INCLUDES $i" fi done fi APR_LA="`$APR_CONFIG --apr-la-file`" APU_LA="`$APU_CONFIG --apu-la-file`" if test "x$APR_LTFLAGS" = "x"; then echo " setting APR_LTFLAGS to \""`$APR_CONFIG --link-libtool`"\"" APR_LTFLAGS=""`$APR_CONFIG --link-libtool`"" else apr_addto_bugger=""`$APR_CONFIG --link-libtool`"" for i in $apr_addto_bugger; do apr_addto_duplicate="0" for j in $APR_LTFLAGS; do if test "x$i" = "x$j"; then apr_addto_duplicate="1" break fi done if test $apr_addto_duplicate = "0"; then echo " adding \"$i\" to APR_LTFLAGS" APR_LTFLAGS="$APR_LTFLAGS $i" fi done fi if test "x$APR_LTFLAGS" = "x"; then echo " setting APR_LTFLAGS to \""`$APU_CONFIG --link-libtool`"\"" APR_LTFLAGS=""`$APU_CONFIG --link-libtool`"" else apr_addto_bugger=""`$APU_CONFIG --link-libtool`"" for i in $apr_addto_bugger; do apr_addto_duplicate="0" for j in $APR_LTFLAGS; do if test "x$i" = "x$j"; then apr_addto_duplicate="1" break fi done if test $apr_addto_duplicate = "0"; then echo " adding \"$i\" to APR_LTFLAGS" APR_LTFLAGS="$APR_LTFLAGS $i" fi done fi if test "x$APR_LIBS" = "x"; then echo " setting APR_LIBS to \""`$APR_CONFIG --libs`"\"" APR_LIBS=""`$APR_CONFIG --libs`"" else apr_addto_bugger=""`$APR_CONFIG --libs`"" for i in $apr_addto_bugger; do apr_addto_duplicate="0" for j in $APR_LIBS; do if test "x$i" = "x$j"; then apr_addto_duplicate="1" break fi done if test $apr_addto_duplicate = "0"; then echo " adding \"$i\" to APR_LIBS" APR_LIBS="$APR_LIBS $i" fi done fi apu_avoid_libs="" if $APU_CONFIG --avoid-ldap >/dev/null 2>&1; then apu_avoid_libs="--avoid-ldap" fi if $APU_CONFIG --avoid-dbm >/dev/null 2>&1; then apu_avoid_libs="--avoid-dbm $apu_avoid_libs" fi if test "x$OS" = "xsolaris"; then APU_LIBS="`$APU_CONFIG $apu_avoid_libs --libs | $PERL -pe 's,-lexpat,,'`" else APU_LIBS="`$APU_CONFIG $apu_avoid_libs --libs`" fi if test "x$APR_LIBS" = "x"; then echo " setting APR_LIBS to \""$APU_LIBS"\"" APR_LIBS=""$APU_LIBS"" else apr_addto_bugger=""$APU_LIBS"" for i in $apr_addto_bugger; do apr_addto_duplicate="0" for j in $APR_LIBS; do if test "x$i" = "x$j"; then apr_addto_duplicate="1" break fi done if test $apr_addto_duplicate = "0"; then echo " adding \"$i\" to APR_LIBS" APR_LIBS="$APR_LIBS $i" fi done fi if test "x$APR_LDFLAGS" = "x"; then echo " setting APR_LDFLAGS to \""`$APU_CONFIG --link-ld --ldflags`"\"" APR_LDFLAGS=""`$APU_CONFIG --link-ld --ldflags`"" else apr_addto_bugger=""`$APU_CONFIG --link-ld --ldflags`"" for i in $apr_addto_bugger; do apr_addto_duplicate="0" for j in $APR_LDFLAGS; do if test "x$i" = "x$j"; then apr_addto_duplicate="1" break fi done if test $apr_addto_duplicate = "0"; then echo " adding \"$i\" to APR_LDFLAGS" APR_LDFLAGS="$APR_LDFLAGS $i" fi done fi if test "x$APR_LDFLAGS" = "x"; then echo " setting APR_LDFLAGS to \""`$APR_CONFIG --link-ld --ldflags`"\"" APR_LDFLAGS=""`$APR_CONFIG --link-ld --ldflags`"" else apr_addto_bugger=""`$APR_CONFIG --link-ld --ldflags`"" for i in $apr_addto_bugger; do apr_addto_duplicate="0" for j in $APR_LDFLAGS; do if test "x$i" = "x$j"; then apr_addto_duplicate="1" break fi done if test $apr_addto_duplicate = "0"; then echo " adding \"$i\" to APR_LDFLAGS" APR_LDFLAGS="$APR_LDFLAGS $i" fi done fi if test -n "$EXPAT_DIR"; then if test "x$APR_INCLUDES" = "x"; then echo " setting APR_INCLUDES to \""-I$EXPAT_DIR/include"\"" APR_INCLUDES=""-I$EXPAT_DIR/include"" else apr_addto_bugger=""-I$EXPAT_DIR/include"" for i in $apr_addto_bugger; do apr_addto_duplicate="0" for j in $APR_INCLUDES; do if test "x$i" = "x$j"; then apr_addto_duplicate="1" break fi done if test $apr_addto_duplicate = "0"; then echo " adding \"$i\" to APR_INCLUDES" APR_INCLUDES="$APR_INCLUDES $i" fi done fi if test "x$APR_LTFLAGS" = "x"; then echo " setting APR_LTFLAGS to \""-L$EXPAT_DIR/lib"\"" APR_LTFLAGS=""-L$EXPAT_DIR/lib"" else apr_addto_bugger=""-L$EXPAT_DIR/lib"" for i in $apr_addto_bugger; do apr_addto_duplicate="0" for j in $APR_LTFLAGS; do if test "x$i" = "x$j"; then apr_addto_duplicate="1" break fi done if test $apr_addto_duplicate = "0"; then echo " adding \"$i\" to APR_LTFLAGS" APR_LTFLAGS="$APR_LTFLAGS $i" fi done fi fi abs_srcdir=`(cd $srcdir && pwd)` abs_builddir=`pwd` top_builddir="$abs_srcdir" if test "$abs_builddir" != "$abs_srcdir"; then USE_VPATH=1 fi if test "x$USE_MAINTAINER_MODE" != "xno"; then if test "x$CFLAGS" = "x"; then echo " setting CFLAGS to \" -fno-strict-aliasing -Wall -Wmissing-prototypes -Wstrict-prototypes -Wmissing-declarations -Wwrite-strings -Wcast-qual -Wfloat-equal -Wshadow -Wpointer-arith -Wbad-function-cast -Wsign-compare -Waggregate-return -Wmissing-noreturn -Wmissing-format-attribute -Wpacked -Wredundant-decls -Wnested-externs -Wdisabled-optimization -Wno-long-long -Wendif-labels -Wcast-align -Wpacked \"" CFLAGS=" -fno-strict-aliasing -Wall -Wmissing-prototypes -Wstrict-prototypes -Wmissing-declarations -Wwrite-strings -Wcast-qual -Wfloat-equal -Wshadow -Wpointer-arith -Wbad-function-cast -Wsign-compare -Waggregate-return -Wmissing-noreturn -Wmissing-format-attribute -Wpacked -Wredundant-decls -Wnested-externs -Wdisabled-optimization -Wno-long-long -Wendif-labels -Wcast-align -Wpacked " else apr_addto_bugger=" -fno-strict-aliasing -Wall -Wmissing-prototypes -Wstrict-prototypes -Wmissing-declarations -Wwrite-strings -Wcast-qual -Wfloat-equal -Wshadow -Wpointer-arith -Wbad-function-cast -Wsign-compare -Waggregate-return -Wmissing-noreturn -Wmissing-format-attribute -Wpacked -Wredundant-decls -Wnested-externs -Wdisabled-optimization -Wno-long-long -Wendif-labels -Wcast-align -Wpacked " for i in $apr_addto_bugger; do apr_addto_duplicate="0" for j in $CFLAGS; do if test "x$i" = "x$j"; then apr_addto_duplicate="1" break fi done if test $apr_addto_duplicate = "0"; then echo " adding \"$i\" to CFLAGS" CFLAGS="$CFLAGS $i" fi done fi # -Wdeclaration-after-statement is only supported on gcc 3.4+ fi if test "x$CPPFLAGS" = "x"; then echo " setting CPPFLAGS to \""`$APR_CONFIG --cppflags`"\"" CPPFLAGS=""`$APR_CONFIG --cppflags`"" else apr_addto_bugger=""`$APR_CONFIG --cppflags`"" for i in $apr_addto_bugger; do apr_addto_duplicate="0" for j in $CPPFLAGS; do if test "x$i" = "x$j"; then apr_addto_duplicate="1" break fi done if test $apr_addto_duplicate = "0"; then echo " adding \"$i\" to CPPFLAGS" CPPFLAGS="$CPPFLAGS $i" fi done fi get_version="$SHELL $abs_srcdir/build/get-version.sh" version_hdr="$abs_srcdir/include/apreq_version.h" # set version data APREQ_CONFIG="$top_builddir/apreq2-config" APREQ_MAJOR_VERSION=`$get_version major $version_hdr APREQ` APREQ_MINOR_VERSION=`$get_version minor $version_hdr APREQ` APREQ_PATCH_VERSION=`$get_version patch $version_hdr APREQ` APREQ_DOTTED_VERSION=`$get_version all $version_hdr APREQ` # XXX: APR_MAJOR_VERSION doesn't yet work for static builds APREQ_LIBTOOL_CURRENT=`expr $APREQ_MAJOR_VERSION + $APREQ_MINOR_VERSION + $APR_MAJOR_VERSION` APREQ_LIBTOOL_REVISION=$APREQ_PATCH_VERSION APREQ_LIBTOOL_AGE=$APREQ_MINOR_VERSION APREQ_LIBTOOL_VERSION="$APREQ_LIBTOOL_CURRENT:$APREQ_LIBTOOL_REVISION:$APREQ_LIBTOOL_AGE" APREQ_LIBNAME="apreq$APREQ_MAJOR_VERSION" echo "lib$APREQ_LIBNAME Version: $APREQ_DOTTED_VERSION" ## Apparently FC5 doesn't like bsdtar ## which is the default /usr/bin/tar on FreeBSD ## by default /usr/ports/archivers/gtar installs here if test "x$OS" = 'xfreebsd'; then TAR='/usr/local/bin/gtar' else TAR='tar' fi if test "x$OS" = "xsolaris"; then $PERL -pi -e 's,^shrext=,shrext_cmds=,' libtool fi ac_config_files="$ac_config_files Makefile include/Makefile library/Makefile library/t/Makefile module/Makefile module/apache2/Makefile glue/Makefile" ac_config_files="$ac_config_files build/doxygen.conf include/groups.dox" ac_config_files="$ac_config_files apreq2-config" 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= 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 "${MAINTAINER_MODE_TRUE}" && test -z "${MAINTAINER_MODE_FALSE}"; then as_fn_error $? "conditional \"MAINTAINER_MODE\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${ENABLE_PROFILE_TRUE}" && test -z "${ENABLE_PROFILE_FALSE}"; then as_fn_error $? "conditional \"ENABLE_PROFILE\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${BUILD_PERL_GLUE_TRUE}" && test -z "${BUILD_PERL_GLUE_FALSE}"; then as_fn_error $? "conditional \"BUILD_PERL_GLUE\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${HAVE_APACHE_TEST_TRUE}" && test -z "${HAVE_APACHE_TEST_FALSE}"; then as_fn_error $? "conditional \"HAVE_APACHE_TEST\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${BUILD_HTTPD_TRUE}" && test -z "${BUILD_HTTPD_FALSE}"; then as_fn_error $? "conditional \"BUILD_HTTPD\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${BUILD_APR_TRUE}" && test -z "${BUILD_APR_FALSE}"; then as_fn_error $? "conditional \"BUILD_APR\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${BUILD_APU_TRUE}" && test -z "${BUILD_APU_FALSE}"; then as_fn_error $? "conditional \"BUILD_APU\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${HAVE_APACHE1_TRUE}" && test -z "${HAVE_APACHE1_FALSE}"; then as_fn_error $? "conditional \"HAVE_APACHE1\" 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 Apache HTTP Server Request Library $as_me 2.17, 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="\\ Apache HTTP Server Request Library config.status 2.17 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 # 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"`' 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; 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; 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 "depfiles") CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;; "libtool") CONFIG_COMMANDS="$CONFIG_COMMANDS libtool" ;; "include/apreq_config.h") CONFIG_HEADERS="$CONFIG_HEADERS include/apreq_config.h" ;; "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;; "include/Makefile") CONFIG_FILES="$CONFIG_FILES include/Makefile" ;; "library/Makefile") CONFIG_FILES="$CONFIG_FILES library/Makefile" ;; "library/t/Makefile") CONFIG_FILES="$CONFIG_FILES library/t/Makefile" ;; "module/Makefile") CONFIG_FILES="$CONFIG_FILES module/Makefile" ;; "module/apache2/Makefile") CONFIG_FILES="$CONFIG_FILES module/apache2/Makefile" ;; "glue/Makefile") CONFIG_FILES="$CONFIG_FILES glue/Makefile" ;; "build/doxygen.conf") CONFIG_FILES="$CONFIG_FILES build/doxygen.conf" ;; "include/groups.dox") CONFIG_FILES="$CONFIG_FILES include/groups.dox" ;; "apreq2-config") CONFIG_FILES="$CONFIG_FILES apreq2-config" ;; *) 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 "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 # Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`: # 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='' # 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 # ### 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" ;; "apreq2-config":F) chmod +x apreq2-config ;; 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 libapreq2-2.17/configure.ac0000644000175000017500000000223614277401734015236 0ustar jortonjortondnl Process this file with autoconf to produce a configure script. AC_PREREQ(2.53) AC_INIT(Apache HTTP Server Request Library, 2.17, apreq-dev@httpd.apache.org, libapreq2) dnl Generate config.nice script- macro must be here at the top dnl to avoid corruption of $0 and $@. APR_CONFIG_NICE(config.nice) dnl this: dnl AC_CONFIG_AUX_DIR(build) dnl causes problems on certain platforms dnl aclocal.m4:817: required file `build/ltmain.sh' not found dnl debian woody's archaic auto* tools don't set PACKAGE/VERSION correctly via dnl AC_INIT above, so we do it again here. AM_INIT_AUTOMAKE(libapreq2, 2.17) AC_PROG_MAKE_SET dnl Checks for programs. AC_PROG_CC AM_PROG_LIBTOOL AC_PROG_RANLIB AC_PROG_INSTALL AC_PROG_LN_S AM_MAINTAINER_MODE dnl Checks for header files. AM_CONFIG_HEADER(include/apreq_config.h) dnl Checks for typedefs, structures, and compiler characteristics. dnl Checks for library functions. AC_APREQ AC_CONFIG_FILES([Makefile include/Makefile library/Makefile library/t/Makefile module/Makefile module/apache2/Makefile glue/Makefile]) AC_CONFIG_FILES([build/doxygen.conf include/groups.dox]) AC_CONFIG_FILES([apreq2-config], [chmod +x apreq2-config]) AC_OUTPUT libapreq2-2.17/depcomp0000755000175000017500000005602014277402427014325 0ustar jortonjorton#! /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: libapreq2-2.17/docs/apr.tag0000644000175000017500000000014614277402434015153 0ustar jortonjorton libapreq2-2.17/docs/apreq2.tag0000644000175000017500000020425314277402434015570 0ustar jortonjorton apreq.h /home/jorton/src/asf/libapreq-v2.17/include/ apreq_8h.html apreq_value_t #define APREQ_DECLARE apreq_8h.html a02bf89714a74397155a11b9ccb942b0d (d) #define APREQ_DECLARE_NONSTD apreq_8h.html a8a1e7333187fdbc476473ac72d2ff38b (d) #define APREQ_DECLARE_DATA apreq_8h.html a142563500999527d486a2eac8c3a0973 #define APREQ_DEFAULT_READ_BLOCK_SIZE apreq_8h.html a73bfd1896ab59181f8e052fb8cc147cd #define APREQ_DEFAULT_READ_LIMIT apreq_8h.html a744fa55285c4a3868a9154f473d58ac4 #define APREQ_DEFAULT_BRIGADE_LIMIT apreq_8h.html af54c8645b8266fa7c9b2e261c608744f #define APREQ_DEFAULT_NELTS apreq_8h.html a253093cc2fffe7094828714ade120466 #define APREQ_FLAGS_OFF apreq_8h.html a5bcc4e81747b13b7bfbb946648453f9e (f, name) #define APREQ_FLAGS_ON apreq_8h.html adf8584e758a62fe0a79023821c359222 (f, name) #define APREQ_FLAGS_GET apreq_8h.html a07141b4d0c7daa6d5aba5ff33d52a31f (f, name) #define APREQ_FLAGS_SET apreq_8h.html a817a3e293b1ae4210ee68871d6b67e1f (f, name, value) #define APREQ_CHARSET_BIT apreq_8h.html aa9a11ce4168273452b3fde6e42221d74 #define APREQ_CHARSET_MASK apreq_8h.html a901fbcbe68a29cfce368b6640bd5bcde #define APREQ_TAINTED_BIT apreq_8h.html acecc7cc6c676725990e0be5f14179ca7 #define APREQ_TAINTED_MASK apreq_8h.html a3b151396d29841edc92a2889a38fda79 #define APREQ_COOKIE_VERSION_BIT apreq_8h.html a16af9730d0124fef7849c36121d63141 #define APREQ_COOKIE_VERSION_MASK apreq_8h.html ae70e687e9866ea4a61ed3594c97bf5ce #define APREQ_COOKIE_SECURE_BIT apreq_8h.html a79ac15b3b3d9905367b9758514513dc0 #define APREQ_COOKIE_SECURE_MASK apreq_8h.html acbe05bd23b067595cae2318473f42d9a #define APREQ_COOKIE_HTTPONLY_BIT apreq_8h.html a9fc978fd97cc558ff5f51a14503daab7 #define APREQ_COOKIE_HTTPONLY_MASK apreq_8h.html a71f0dc8a9004339edfa279266fab50e8 #define apreq_attr_to_type apreq_8h.html a6355f965e8eabf742537bfd8da534376 (T, A, P) struct apreq_value_t apreq_value_t apreq_8h.html ad1d0e6fa5f9cdecb695541c697789f3e apreq_charset_t apreq_8h.html a6607dfa756796989c15014870b48c8cd apreq_join_t apreq_8h.html ac3784c04255e92629350505d35b0473e APREQ_JOIN_AS_IS apreq_8h.html ac3784c04255e92629350505d35b0473ea9b74c73cbfdf7aad3effc0627018ff08 APREQ_JOIN_ENCODE apreq_8h.html ac3784c04255e92629350505d35b0473ea6cc82b38c229380cc7fbb274b7e3cf36 APREQ_JOIN_DECODE apreq_8h.html ac3784c04255e92629350505d35b0473ea9dd8468f9547f1dee0709f906e98cdc6 APREQ_JOIN_QUOTE apreq_8h.html ac3784c04255e92629350505d35b0473eab22a5a8f345963488381335b2f909fb9 apreq_match_t apreq_8h.html a590d7bfd9cd294f652d388c4f37fc8d5 APREQ_MATCH_FULL apreq_8h.html a590d7bfd9cd294f652d388c4f37fc8d5a6ff614170217cfafb5c32c1cefd6caba APREQ_MATCH_PARTIAL apreq_8h.html a590d7bfd9cd294f652d388c4f37fc8d5a2fbd9432fdb0e8bec90bd9ec76dcb3f9 apreq_expires_t apreq_8h.html aeb51f7cb925e3218c622ff82b8ee2f70 APREQ_EXPIRES_HTTP apreq_8h.html aeb51f7cb925e3218c622ff82b8ee2f70ad0fecca3f99d74b155630437504119f5 APREQ_EXPIRES_NSCOOKIE apreq_8h.html aeb51f7cb925e3218c622ff82b8ee2f70aa7e0989ec9839a8494ea328ff30eb5a1 static APR_INLINE void apreq_value_table_add apreq_8h.html a0d27c51db1532fa3f829838ed90f6226 (const apreq_value_t *v, apr_table_t *t) apr_status_t apreq_initialize apreq_8h.html a163e7aaee57baa89b4d7e00a4279b035 (apr_pool_t *pool) apr_status_t apreq_pre_initialize apreq_8h.html aff013107e72c94b917617fd42dce79e8 (apr_pool_t *pool) apr_status_t apreq_post_initialize apreq_8h.html acecad02f3b9982190143d1097bbfa555 (apr_pool_t *pool) apreq_cookie.h /home/jorton/src/asf/libapreq-v2.17/include/ apreq__cookie_8h.html apreq.h apreq_cookie_t #define APREQ_COOKIE_MAX_LENGTH apreq__cookie_8h.html a681b8ef60cad05e684876d4dd2be043b struct apreq_cookie_t apreq_cookie_t apreq__cookie_8h.html a40b9ebd9bc37f9019c0091ee97c4c535 static APR_INLINE apreq_cookie_t * apreq_value_to_cookie apreq__cookie_8h.html ab69d56f31d7c8f6f6f598a133817b46e (const char *val) static APR_INLINE unsigned apreq_cookie_version apreq__cookie_8h.html a04eaee766e51f143ff2ca4d8a0107004 (const apreq_cookie_t *c) static APR_INLINE void apreq_cookie_version_set apreq__cookie_8h.html aeff5b05ca6b935dd61dcc9da1a047546 (apreq_cookie_t *c, unsigned v) static APR_INLINE unsigned apreq_cookie_is_secure apreq__cookie_8h.html a7553c7f54497ce30e1828082c98c813e (const apreq_cookie_t *c) static APR_INLINE void apreq_cookie_secure_on apreq__cookie_8h.html a1df7a1ba35cf4c47fc907f40b95fe5e4 (apreq_cookie_t *c) static APR_INLINE void apreq_cookie_secure_off apreq__cookie_8h.html ad9f4813b99b80801ba1dc11d0099ac10 (apreq_cookie_t *c) static APR_INLINE unsigned apreq_cookie_is_httponly apreq__cookie_8h.html a61c3709414b9fe614e32587da8ee8e8a (const apreq_cookie_t *c) static APR_INLINE void apreq_cookie_httponly_on apreq__cookie_8h.html aa9a94a9b03dea7b286a9c4041d3c7e4e (apreq_cookie_t *c) static APR_INLINE void apreq_cookie_httponly_off apreq__cookie_8h.html a619cc2d56e20134e91bf1d31ab26bfec (apreq_cookie_t *c) static APR_INLINE unsigned apreq_cookie_is_tainted apreq__cookie_8h.html a08618139ba29e98cd2327de3f0e961fe (const apreq_cookie_t *c) static APR_INLINE void apreq_cookie_tainted_on apreq__cookie_8h.html afeec2e0802ae883d4f2fda750b74ca55 (apreq_cookie_t *c) static APR_INLINE void apreq_cookie_tainted_off apreq__cookie_8h.html ac3b777e9709fa062ff978afef3867964 (apreq_cookie_t *c) apr_status_t apreq_parse_cookie_header apreq__cookie_8h.html a113be08c01bc82605ec52d80c054cbf6 (apr_pool_t *pool, apr_table_t *jar, const char *header) apreq_cookie_t * apreq_cookie_make apreq__cookie_8h.html a53b5bb02baf7fb318cd643fb55820422 (apr_pool_t *pool, const char *name, const apr_size_t nlen, const char *value, const apr_size_t vlen) char * apreq_cookie_as_string apreq__cookie_8h.html a10c1d6639303c3f85fb5818d88e654d3 (const apreq_cookie_t *c, apr_pool_t *p) int apreq_cookie_serialize apreq__cookie_8h.html afc06d8f5e4ee8530013c4f3c3b12e01f (const apreq_cookie_t *c, char *buf, apr_size_t len) void apreq_cookie_expires apreq__cookie_8h.html a8c6eb3c7c0f003bdc150d2ce99dacc7f (apreq_cookie_t *c, const char *time_str) apreq_error.h /home/jorton/src/asf/libapreq-v2.17/include/ apreq__error_8h.html apreq.h #define APR_EBADARG apreq__error_8h.html a7f8849f2cb2d0bfd64f644a6ca0cec2b #define APREQ_ERROR_GENERAL apreq__error_8h.html a14b149a0f859ce1078d36db8e8f45a2a #define APREQ_ERROR_TAINTED apreq__error_8h.html a035ee2cee3527332669bdaf17142f520 #define APREQ_ERROR_INTERRUPT apreq__error_8h.html a91b1099a9cbf13d45a45a14b7d279b75 #define APREQ_ERROR_BADDATA apreq__error_8h.html ade2a5d60e2db8fc32d8c43580d74c0c8 #define APREQ_ERROR_BADCHAR apreq__error_8h.html a04b6a01738a1ee7fd1ecc79d256e721f #define APREQ_ERROR_BADSEQ apreq__error_8h.html a73a69e21acc2cf849310a421ab43d2ba #define APREQ_ERROR_BADATTR apreq__error_8h.html a3d696f49030bb7fc65f2804037d3ccb7 #define APREQ_ERROR_BADHEADER apreq__error_8h.html a11e549980ef0fce49ac7179bb9164d57 #define APREQ_ERROR_BADUTF8 apreq__error_8h.html a88ab15be9af4235cb6b1d9c6c512f0e1 #define APREQ_ERROR_NODATA apreq__error_8h.html a6e29823668899ad81365ae68f96f3ae4 #define APREQ_ERROR_NOTOKEN apreq__error_8h.html a59be3610ba54a58fbb3cd6bb655ff972 #define APREQ_ERROR_NOATTR apreq__error_8h.html affdf9393e5c9277aeae3ea8d2ecf55fa #define APREQ_ERROR_NOHEADER apreq__error_8h.html a3ce3cf5b410b1ccc2e42ae46d4577f20 #define APREQ_ERROR_NOPARSER apreq__error_8h.html a02ebfa80f1a413b46212df5682db5890 #define APREQ_ERROR_MISMATCH apreq__error_8h.html a33080081185585997ef9c5232ec4dd8f #define APREQ_ERROR_OVERLIMIT apreq__error_8h.html abcc1b4c98b1d8c5d128cffd50afb978e #define APREQ_ERROR_UNDERLIMIT apreq__error_8h.html a0370b1ba3534f6ae9f422c6b351c79cd #define APREQ_ERROR_NOTEMPTY apreq__error_8h.html a17d6bb14537a52ef53b56e4b385c76b2 char * apreq_strerror apreq__error_8h.html a48c0198d940b53fbd4d843d7deb65e47 (apr_status_t s, char *buf, apr_size_t bufsize) apreq_module.h /home/jorton/src/asf/libapreq-v2.17/include/ apreq__module_8h.html apreq_cookie.h apreq_parser.h apreq_error.h apreq_handle_t apreq_module_t #define APREQ_MODULE apreq__module_8h.html a7d6d0550f527e18c8cfab702e65daf3b (pre, mmn) #define apreq_cookie apreq__module_8h.html a5b5398d109fb933fb0367ef947e7c7b6 (req, name) struct apreq_handle_t apreq_handle_t apreq__module_8h.html acc662f2b62f1d13f6c9e03536f565952 struct apreq_module_t apreq_module_t apreq__module_8h.html ab584b3f1216e609ba8082d081cfb5659 static APR_INLINE unsigned apreq_module_status_is_error apreq__module_8h.html a08dedd0ec5b291dad6b58644896eb2ed (apr_status_t s) static APR_INLINE apr_status_t apreq_jar apreq__module_8h.html a2652c9a9b0e0f4162051fc3904ac480a (apreq_handle_t *req, const apr_table_t **t) static APR_INLINE apr_status_t apreq_args apreq__module_8h.html ade74830e449fa5bb24694ffc3b8374ca (apreq_handle_t *req, const apr_table_t **t) static APR_INLINE apr_status_t apreq_body apreq__module_8h.html ae928689622d094025a8efb8c6c17d680 (apreq_handle_t *req, const apr_table_t **t) static APR_INLINE apreq_cookie_t * apreq_jar_get apreq__module_8h.html a63dfa7b7b303d061fe56c7109528d430 (apreq_handle_t *req, const char *name) static APR_INLINE apreq_param_t * apreq_args_get apreq__module_8h.html aeadd074ee9dd8095d857820ce15f1701 (apreq_handle_t *req, const char *name) static APR_INLINE apreq_param_t * apreq_body_get apreq__module_8h.html a7c4cb1c2b91f5539b2231d09ebea2239 (apreq_handle_t *req, const char *name) static APR_INLINE apr_status_t apreq_parser_get apreq__module_8h.html a136584883dac2b5c76052bed1c4e61dc (apreq_handle_t *req, const apreq_parser_t **parser) static APR_INLINE apr_status_t apreq_parser_set apreq__module_8h.html a6842f8b5a1d1f9115ba8ff7b1da1e78b (apreq_handle_t *req, apreq_parser_t *parser) static APR_INLINE apr_status_t apreq_hook_add apreq__module_8h.html a0c24fc39ad03c54839a9cb03dc00dc28 (apreq_handle_t *req, apreq_hook_t *hook) static APR_INLINE apr_status_t apreq_brigade_limit_set apreq__module_8h.html ab368191aa61cd0386e824c1a6dbd6e49 (apreq_handle_t *req, apr_size_t bytes) static APR_INLINE apr_status_t apreq_brigade_limit_get apreq__module_8h.html ad98e3dac181ac837159581812229d8e3 (apreq_handle_t *req, apr_size_t *bytes) static APR_INLINE apr_status_t apreq_read_limit_set apreq__module_8h.html a97d4d8090e7847ace598c7a65b309564 (apreq_handle_t *req, apr_uint64_t bytes) static APR_INLINE apr_status_t apreq_read_limit_get apreq__module_8h.html ab5cc462231ee5e4389ceb46eab1e456f (apreq_handle_t *req, apr_uint64_t *bytes) static APR_INLINE apr_status_t apreq_temp_dir_set apreq__module_8h.html afc1b7d33062581140fd16b859b06d24a (apreq_handle_t *req, const char *path) static APR_INLINE apr_status_t apreq_temp_dir_get apreq__module_8h.html a51c4bd2bc98e9355f8595341ba6aff0b (apreq_handle_t *req, const char **path) apreq_handle_t * apreq_handle_cgi apreq__module_8h.html a3f9b9c725672298c86b081aaa258fbdc (apr_pool_t *pool) apreq_handle_t * apreq_handle_custom apreq__module_8h.html abeaaad6c03b54ca963f9f14a3031e912 (apr_pool_t *pool, const char *query_string, const char *cookie, apreq_parser_t *parser, apr_uint64_t read_limit, apr_bucket_brigade *in) apreq_param_t * apreq_param apreq__module_8h.html a08c59b5f07fb36080bb4d62e68bfeddf (apreq_handle_t *req, const char *key) apr_table_t * apreq_params apreq__module_8h.html a0dff48fd4e83399a07853abe9d67c251 (apreq_handle_t *req, apr_pool_t *p) apr_table_t * apreq_cookies apreq__module_8h.html a7435376b1f543c604d8326de3157e075 (apreq_handle_t *req, apr_pool_t *p) apreq_param.h /home/jorton/src/asf/libapreq-v2.17/include/ apreq__param_8h.html apreq.h apreq_param_t struct apreq_param_t apreq_param_t apreq__param_8h.html ad7b3956f0310dec4b970ad7135aeabd7 static APR_INLINE unsigned apreq_param_is_tainted apreq__param_8h.html af407c2ab726bc8bc34a1b1924a4f327a (const apreq_param_t *p) static APR_INLINE void apreq_param_tainted_on apreq__param_8h.html a967919466da31283c6d668c58fe5223c (apreq_param_t *p) static APR_INLINE void apreq_param_tainted_off apreq__param_8h.html ae76641d443483db5274624f948e1c347 (apreq_param_t *p) static APR_INLINE apreq_charset_t apreq_param_charset_set apreq__param_8h.html abe765ec55aebc8409ddd6d3db44ff917 (apreq_param_t *p, apreq_charset_t c) static APR_INLINE apreq_charset_t apreq_param_charset_get apreq__param_8h.html abe2a7a47df83a5667fe2834bfc03f15a (apreq_param_t *p) static APR_INLINE apreq_param_t * apreq_value_to_param apreq__param_8h.html a121453693ef7c6af821ae723b6dbe34b (const char *val) apreq_param_t * apreq_param_make apreq__param_8h.html a25c915d3d0fd1694d2c538f108646560 (apr_pool_t *p, const char *name, const apr_size_t nlen, const char *val, const apr_size_t vlen) apr_status_t apreq_param_decode apreq__param_8h.html aeea075c59169992492f6f5c40b9b8a70 (apreq_param_t **param, apr_pool_t *pool, const char *word, apr_size_t nlen, apr_size_t vlen) char * apreq_param_encode apreq__param_8h.html a4b8b032f9d2ae8e0a6e95b6dd95b5aa9 (apr_pool_t *pool, const apreq_param_t *param) apr_status_t apreq_parse_query_string apreq__param_8h.html a0aa638519951d85d1faf7bf6ba986226 (apr_pool_t *pool, apr_table_t *t, const char *qs) apr_array_header_t * apreq_params_as_array apreq__param_8h.html a76c7e698fd45f3f3e07db60fcba15e52 (apr_pool_t *p, const apr_table_t *t, const char *key) const char * apreq_params_as_string apreq__param_8h.html a0f1db12120bb2307f5e33186f094b0d6 (apr_pool_t *p, const apr_table_t *t, const char *key, apreq_join_t mode) const apr_table_t * apreq_uploads apreq__param_8h.html ae449c4a1890767d1e9a50c78ea42769c (const apr_table_t *body, apr_pool_t *pool) const apreq_param_t * apreq_upload apreq__param_8h.html a1be07e7c4c8a687203ccc0d38ec3aedd (const apr_table_t *body, const char *name) apreq_parser.h /home/jorton/src/asf/libapreq-v2.17/include/ apreq__parser_8h.html apreq_param.h apreq_hook_t apreq_parser_t apreq_hook_find_param_ctx_t #define APREQ_PARSER_ARGS apreq__parser_8h.html af39d2adfdd09c2fe0c8c6a3c1ea1437e #define APREQ_HOOK_ARGS apreq__parser_8h.html a61c8b1c319752bde3cc35e98247707bf #define APREQ_DECLARE_PARSER apreq__parser_8h.html a855c07ea7fc9e240c8620d29eea4a019 (f) #define APREQ_DECLARE_HOOK apreq__parser_8h.html abaa196498d8cf959e07b4c84d5264f7f (f) struct apreq_hook_t apreq_hook_t apreq__parser_8h.html a2c35885676cec315fc7dea19a6d1d870 struct apreq_parser_t apreq_parser_t apreq__parser_8h.html ade5e15a40b9e1ec626ee56c494c7cdbb apr_status_t(* apreq_parser_function_t apreq__parser_8h.html affb8f3ab5b29a4e09f3aa3bde8630118 )(APREQ_PARSER_ARGS) apr_status_t(* apreq_hook_function_t apreq__parser_8h.html a6ff78d9001f60363061d0608b52afbe0 )(APREQ_HOOK_ARGS) struct apreq_hook_find_param_ctx_t apreq_hook_find_param_ctx_t apreq__parser_8h.html ab9e03fd28359c5a82771a25d806c2165 static APR_INLINE apr_status_t apreq_parser_run apreq__parser_8h.html a3c00aa3a31daba2c06110d5fc8edf1fe (struct apreq_parser_t *psr, apr_table_t *t, apr_bucket_brigade *bb) static APR_INLINE apr_status_t apreq_hook_run apreq__parser_8h.html a14d03a414fc4a0663af55fbb1f532bab (struct apreq_hook_t *h, apreq_param_t *param, apr_bucket_brigade *bb) APREQ_DECLARE_PARSER apreq__parser_8h.html a6fd1ffe554941172fce54217c35f9db3 (apreq_parse_headers) APREQ_DECLARE_PARSER apreq__parser_8h.html aec4b20f646ea57ad84d6a3391c548838 (apreq_parse_urlencoded) APREQ_DECLARE_PARSER apreq__parser_8h.html a3bb6d9580fcbaf11cef33072ed3b14cb (apreq_parse_multipart) APREQ_DECLARE_PARSER apreq__parser_8h.html a2833122bb6995f056a96df80a9f5a45f (apreq_parse_generic) APREQ_DECLARE_HOOK apreq__parser_8h.html adda61d873abf1c0ed1857bda405baa49 (apreq_hook_apr_xml_parser) apreq_parser_t * apreq_parser_make apreq__parser_8h.html a562191171c5df0a83360435d0fe1a667 (apr_pool_t *pool, apr_bucket_alloc_t *ba, const char *content_type, apreq_parser_function_t pfn, apr_size_t brigade_limit, const char *temp_dir, apreq_hook_t *hook, void *ctx) apreq_hook_t * apreq_hook_make apreq__parser_8h.html a3cf15457eea6991b36f47f6139ab163c (apr_pool_t *pool, apreq_hook_function_t hook, apreq_hook_t *next, void *ctx) apr_status_t apreq_parser_add_hook apreq__parser_8h.html a97972c08b20917465b745c8b8eec95ed (apreq_parser_t *p, apreq_hook_t *h) apreq_parser_function_t apreq_parser apreq__parser_8h.html a73013ecad087f14075d319a4a983dd82 (const char *enctype) apr_status_t apreq_register_parser apreq__parser_8h.html a595f05be3d241a5b339fd6ef948bfbc8 (const char *enctype, apreq_parser_function_t pfn) APREQ_DECLARE_HOOK apreq__parser_8h.html a162c74d59738663d7cb2109ee0b87c0a (apreq_hook_disable_uploads) APREQ_DECLARE_HOOK apreq__parser_8h.html ad169b0ac7b7b1a66d3df3ae66c96a16c (apreq_hook_discard_brigade) APREQ_DECLARE_HOOK apreq__parser_8h.html a5deeed0646b3d61cafe4eb5b6e40b16c (apreq_hook_find_param) apreq_util.h /home/jorton/src/asf/libapreq-v2.17/include/ apreq__util_8h.html apreq.h char * apreq_join apreq__util_8h.html a1aa668dc806fce4bd0fef348d1601930 (apr_pool_t *p, const char *sep, const apr_array_header_t *arr, apreq_join_t mode) apr_ssize_t apreq_index apreq__util_8h.html ac72c51ffe478faa804eaea5f68276dd8 (const char *hay, apr_size_t hlen, const char *ndl, apr_size_t nlen, const apreq_match_t type) apr_size_t apreq_quote apreq__util_8h.html ab4aa9bed839bb576444f464666e0bd85 (char *dest, const char *src, const apr_size_t slen) apr_size_t apreq_quote_once apreq__util_8h.html afef8b7af9d36b0f7ec24e9d0f64a29a7 (char *dest, const char *src, const apr_size_t slen) apr_size_t apreq_encode apreq__util_8h.html a034ccdfdcf751be6c0f8c2a1d30c2ae6 (char *dest, const char *src, const apr_size_t slen) apr_size_t apreq_cp1252_to_utf8 apreq__util_8h.html a801aa204656988ff4aa32cec6dd80e5a (char *dest, const char *src, apr_size_t slen) apreq_charset_t apreq_charset_divine apreq__util_8h.html ae11e0b3e2304a2e8c30aaa464ea78037 (const char *src, apr_size_t slen) apr_status_t apreq_decode apreq__util_8h.html a3c1d46b8c0e7991ae1ced0178c2f4738 (char *dest, apr_size_t *dlen, const char *src, apr_size_t slen) apr_status_t apreq_decodev apreq__util_8h.html a13a090a30a4d05353caabab92a67179d (char *dest, apr_size_t *dlen, struct iovec *v, int nelts) static APR_INLINE char * apreq_escape apreq__util_8h.html a785be2ceae273b0a7b2ffda223b2ebae (apr_pool_t *p, const char *src, const apr_size_t slen) static APR_INLINE apr_ssize_t apreq_unescape apreq__util_8h.html a979c0af9322189581bde4644eec5fd41 (char *str) apr_int64_t apreq_atoi64f apreq__util_8h.html a69acb9425572cb8f694d49277160b1f7 (const char *s) apr_int64_t apreq_atoi64t apreq__util_8h.html a4e838a92724aa7d9be0b978dc5c4e50c (const char *s) apr_status_t apreq_brigade_fwrite apreq__util_8h.html a3bbe5ee2d1537c6a9f30d0fed9f5f1e1 (apr_file_t *f, apr_off_t *wlen, apr_bucket_brigade *bb) apr_status_t apreq_file_mktemp apreq__util_8h.html ab266a81c528de92654eb37f9890c4a7d (apr_file_t **fp, apr_pool_t *pool, const char *path) static APR_INLINE apr_status_t apreq_brigade_setaside apreq__util_8h.html a91f3144692934b2daf54fb3c9ca7b180 (apr_bucket_brigade *bb, apr_pool_t *p) static APR_INLINE apr_status_t apreq_brigade_copy apreq__util_8h.html ab4def9e77622cf22cfa427e7fbf2ac45 (apr_bucket_brigade *d, apr_bucket_brigade *s) static APR_INLINE void apreq_brigade_move apreq__util_8h.html aa23561a0d169b50454a815926ccc0ba5 (apr_bucket_brigade *d, apr_bucket_brigade *s, apr_bucket *e) apr_status_t apreq_header_attribute apreq__util_8h.html a8195b6a32954928a6088e7cea077dd75 (const char *hdr, const char *name, const apr_size_t nlen, const char **val, apr_size_t *vlen) apr_status_t apreq_brigade_concat apreq__util_8h.html a4ddf563c9902474bdedbf014e24aafc8 (apr_pool_t *pool, const char *temp_dir, apr_size_t brigade_limit, apr_bucket_brigade *out, apr_bucket_brigade *in) apr_file_t * apreq_brigade_spoolfile apreq__util_8h.html aec0de2141b6b742a1468667eb8f8158e (apr_bucket_brigade *bb) apreq_version.h /home/jorton/src/asf/libapreq-v2.17/include/ apreq__version_8h.html apreq.h #define APREQ_MAJOR_VERSION apreq__version_8h.html a7fb04b0c2a9da6237e235b845ee89f9a #define APREQ_MINOR_VERSION apreq__version_8h.html a44bf530fbecff4ee7bcc0158784da0ff #define APREQ_PATCH_VERSION apreq__version_8h.html a365b89d742846921cb3619341e5eb266 #define APREQ_VERSION_STRING apreq__version_8h.html add82c8ea79b8cc142eeec45772d24fdb #define APREQ_IS_DEV_STRING apreq__version_8h.html ac9445f3e18e852cae2a91bd2a63394be void apreq_version apreq__version_8h.html a8d20db97717fa1bad4f31c7f9a29594f (apr_version_t *pvsn) const char * apreq_version_string apreq__version_8h.html a663ea74082d9bbe18a0c15b66b8fddaa (void) apreq_cookie_t structapreq__cookie__t.html char * path structapreq__cookie__t.html a75e2ad6da3068f50aca9b989e7e1729c char * domain structapreq__cookie__t.html a8097326f4b8711db7d3f085f283ac5a6 char * port structapreq__cookie__t.html a45dafe4c4b5a751a40bb4123ed691837 char * comment structapreq__cookie__t.html af911681788862a8b0910074ef886bed2 char * commentURL structapreq__cookie__t.html a1fa5dfca7e94ebeb6f31d87d926f7626 apr_time_t max_age structapreq__cookie__t.html ae4f9a1bec2731a70e14b43342abe1077 unsigned flags structapreq__cookie__t.html a7d83540c84756a3d4ad3c8503d24de6a const apreq_value_t v structapreq__cookie__t.html a4a4741916f814017f20b64061755cf76 apreq_handle_t structapreq__handle__t.html const struct apreq_module_t * module structapreq__handle__t.html aa22bbb005e208580eff0ffe8d57cde46 apr_pool_t * pool structapreq__handle__t.html a698eaa56cf54f2cbbc39704fb9d8ab42 apr_bucket_alloc_t * bucket_alloc structapreq__handle__t.html a89a335e21236423de239a6a6d2526559 apreq_hook_find_param_ctx_t structapreq__hook__find__param__ctx__t.html apreq_hook_t structapreq__hook__t.html apreq_hook_function_t hook structapreq__hook__t.html a9e61fe14dbacf28528f69de468fb1fc0 apreq_hook_t * next structapreq__hook__t.html a09efec3f75c52dbeaeedde059c953f7f apr_pool_t * pool structapreq__hook__t.html a2316f4a8fb1cf0a9d5a46866b3229db1 void * ctx structapreq__hook__t.html a52aeaf774a4d37758b6a3de625913ac5 apreq_module_t structapreq__module__t.html const char * name structapreq__module__t.html ae326f2fad3c575876a0da35c5a81123a apr_uint32_t magic_number structapreq__module__t.html adae50d06225fdd6eefeb18ff83045cf7 apr_status_t(* jar structapreq__module__t.html a10c511ad46d0b2b4ce7a0604991bed72 )(apreq_handle_t *, const apr_table_t **) apr_status_t(* args structapreq__module__t.html a14ba1d0aabf56f1b192d925fafaa2ee5 )(apreq_handle_t *, const apr_table_t **) apr_status_t(* body structapreq__module__t.html ad1af73336e0ee49e646e1a1a3a23d8e2 )(apreq_handle_t *, const apr_table_t **) apreq_cookie_t *(* jar_get structapreq__module__t.html adf5c6b34126c0c2fc649d6a9aea1052f )(apreq_handle_t *, const char *) apreq_param_t *(* args_get structapreq__module__t.html abc9a40e7a6e4303355f84051469b48a2 )(apreq_handle_t *, const char *) apreq_param_t *(* body_get structapreq__module__t.html a908dd59f44f9c1e6eed8d71fac5b7554 )(apreq_handle_t *, const char *) apr_status_t(* parser_get structapreq__module__t.html a2a42030641ddc29cc629549bbf8f58b3 )(apreq_handle_t *, const apreq_parser_t **) apr_status_t(* parser_set structapreq__module__t.html adb0cf9c30845f70e267ebd43895be40d )(apreq_handle_t *, apreq_parser_t *) apr_status_t(* hook_add structapreq__module__t.html ad376b42c74164633f8c5e95515736e19 )(apreq_handle_t *, apreq_hook_t *) apr_status_t(* brigade_limit_get structapreq__module__t.html ac1bcc2dcac811dea8cc8a9fd061a6b44 )(apreq_handle_t *, apr_size_t *) apr_status_t(* brigade_limit_set structapreq__module__t.html a77b7df138df0f31cb242e4eec9fc77b0 )(apreq_handle_t *, apr_size_t) apr_status_t(* read_limit_get structapreq__module__t.html a153d2c1b612d9abf03dddfe66827994f )(apreq_handle_t *, apr_uint64_t *) apr_status_t(* read_limit_set structapreq__module__t.html aba6308fcc4257ed357b137bf21a9e5ac )(apreq_handle_t *, apr_uint64_t) apr_status_t(* temp_dir_get structapreq__module__t.html a712b4c529bfafd030c58377e73534cd7 )(apreq_handle_t *, const char **) apr_status_t(* temp_dir_set structapreq__module__t.html acc8487557a17cae2887c669d7a5d2733 )(apreq_handle_t *, const char *) apreq_param_t structapreq__param__t.html apr_table_t * info structapreq__param__t.html abb8ddaeb79c4d96691289520a2a4777f apr_bucket_brigade * upload structapreq__param__t.html a03674c98f355545deeb3fcbe109d8c9a unsigned flags structapreq__param__t.html a802bd45ab5afd0784d730e0dbb01aa71 const apreq_value_t v structapreq__param__t.html af710878750c677daa9cd61868434d67f apreq_parser_t structapreq__parser__t.html apreq_parser_function_t parser structapreq__parser__t.html adc117877c27713515c7617b560efb9a9 const char * content_type structapreq__parser__t.html a3acc7764c18c52c33bb64e3ee3375670 apr_pool_t * pool structapreq__parser__t.html a8148c125f670a73aedb9b228612b5901 apr_bucket_alloc_t * bucket_alloc structapreq__parser__t.html ae2d1910ffc51047ff2759843d1babbc8 apr_size_t brigade_limit structapreq__parser__t.html a203d6cfc8d36892a995a535bfe644e32 const char * temp_dir structapreq__parser__t.html a928f16aae17f84fadf06a52a51a6385c apreq_hook_t * hook structapreq__parser__t.html add1d982c326705e8da838041a645de33 void * ctx structapreq__parser__t.html ab73f196059129e0ca7926526ebba0a78 apreq_value_t structapreq__value__t.html char * name structapreq__value__t.html a3015440cd334584cafa3e19078cbf778 apr_size_t nlen structapreq__value__t.html ae0d07fb5f672d1bd32c9bb53b4da941a apr_size_t dlen structapreq__value__t.html a7881ecfbe424c4708792fe4b2b1bd4a7 char data structapreq__value__t.html a4aab05328f30a972ae6cd56235a4350e [1] libapreq2 Apache Request Library group__libapreq2.html apreq.h apreq_cookie.h apreq_error.h apreq_module.h apreq_param.h apreq_parser.h apreq_util.h apreq_version.h apreq2_config apreq_module Modules group__apreq__module.html mod_apreq2 apreq_lang Language Bindings group__apreq__lang.html apreq_xs apreq_xs Perl group__apreq__xs.html apreq_xs_request apreq_xs_upload apreq_xs_cookie apreq_xs_apr_request apreq_xs_apr_request_cookie apreq_xs_apr_request_param apreq_xs_apr_request_error apreq_xs_apr_request_cgi apreq_xs_apr_request_apache2 apreq_xs_request Apache2::Request group__apreq__xs__request.html apreq_xs_upload Apache2::Upload group__apreq__xs__upload.html apreq_xs_cookie Apache2::Cookie group__apreq__xs__cookie.html apreq_xs_apr_request APR::Request group__apreq__xs__apr__request.html apreq_xs_apr_request_cookie APR::Request::Cookie group__apreq__xs__apr__request__cookie.html apreq_xs_apr_request_param APR::Request::Param group__apreq__xs__apr__request__param.html apreq_xs_apr_request_error APR::Request::Error group__apreq__xs__apr__request__error.html apreq_xs_apr_request_cgi APR::Request::CGI group__apreq__xs__apr__request__cgi.html apreq_xs_apr_request_apache2 APR::Request::Apache2 group__apreq__xs__apr__request__apache2.html mod_apreq2 Apache 2.X Filter Module group__mod__apreq2.html #define APREQ_FILTER_NAME group__mod__apreq2.html ga4b67634b709506e4912f86ebda448504 #define APREQ_APACHE2_MMN group__mod__apreq2.html gaab4a3c4b04f2aee2e17b648da09463b0 apreq_handle_t * apreq_handle_apache2 group__mod__apreq2.html ga68f508b2e1d9909328d7b1277ce4aa80 (request_rec *r) apreq_license LICENSE apreq_license.html apreq_notice NOTICE apreq_notice.html apreq_install INSTALL apreq_install.html apreq_faq FAQ apreq_faq.html index index.html libapreq2-2.17/docs/apu.tag0000644000175000017500000000014614277402434015156 0ustar jortonjorton libapreq2-2.17/docs/html/annotated.html0000644000175000017500000000755414277402434017515 0ustar jortonjorton libapreq2-2.17: Data Structures
Data Structures
Here are the data structures with brief descriptions:
 Capreq_cookie_tCookie type, supporting both Netscape and RFC cookie specifications
 Capreq_handle_t
 Capreq_hook_find_param_ctx_t
 Capreq_hook_t
 Capreq_module_tVtable describing the necessary module functions
 Capreq_param_t
 Capreq_parser_t
 Capreq_value_tLibapreq's pre-extensible string type
libapreq2-2.17/docs/html/apreq_8h.html0000644000175000017500000013713514277402434017246 0ustar jortonjorton libapreq2-2.17: include/apreq.h File Reference

Main header file... More...

#include "apr_tables.h"
#include <stddef.h>

Go to the source code of this file.

Data Structures

struct  apreq_value_t
 libapreq's pre-extensible string type More...
 

Macros

#define APREQ_DECLARE(d)   APR_DECLARE(d)
 
#define APREQ_DECLARE_NONSTD(d)   APR_DECLARE_NONSTD(d)
 
#define APREQ_DECLARE_DATA
 
#define APREQ_DEFAULT_READ_BLOCK_SIZE   (64 * 1024)
 
#define APREQ_DEFAULT_READ_LIMIT   (64 * 1024 * 1024)
 
#define APREQ_DEFAULT_BRIGADE_LIMIT   (256 * 1024)
 
#define APREQ_DEFAULT_NELTS   8
 
#define APREQ_FLAGS_OFF(f, name)   ((f) &= ~(name##_MASK << name##_BIT))
 
#define APREQ_FLAGS_ON(f, name)   ((f) |= (name##_MASK << name##_BIT))
 
#define APREQ_FLAGS_GET(f, name)   (((f) >> name##_BIT) & name##_MASK)
 
#define APREQ_FLAGS_SET(f, name, value)
 
#define APREQ_CHARSET_BIT   0
 
#define APREQ_CHARSET_MASK   255
 
#define APREQ_TAINTED_BIT   8
 
#define APREQ_TAINTED_MASK   1
 
#define APREQ_COOKIE_VERSION_BIT   11
 
#define APREQ_COOKIE_VERSION_MASK   3
 
#define APREQ_COOKIE_SECURE_BIT   13
 
#define APREQ_COOKIE_SECURE_MASK   1
 
#define APREQ_COOKIE_HTTPONLY_BIT   14
 
#define APREQ_COOKIE_HTTPONLY_MASK   1
 
#define apreq_attr_to_type(T, A, P)   ( (T*) ((char*)(P)-offsetof(T,A)) )
 

Typedefs

typedef struct apreq_value_t apreq_value_t
 libapreq's pre-extensible string type
 

Enumerations

enum  apreq_charset_t { APREQ_CHARSET_ASCII =0 , APREQ_CHARSET_LATIN1 =1 , APREQ_CHARSET_CP1252 =2 , APREQ_CHARSET_UTF8 =8 }
 
enum  apreq_join_t { APREQ_JOIN_AS_IS , APREQ_JOIN_ENCODE , APREQ_JOIN_DECODE , APREQ_JOIN_QUOTE }
 
enum  apreq_match_t { APREQ_MATCH_FULL , APREQ_MATCH_PARTIAL }
 
enum  apreq_expires_t { APREQ_EXPIRES_HTTP , APREQ_EXPIRES_NSCOOKIE }
 

Functions

static APR_INLINE void apreq_value_table_add (const apreq_value_t *v, apr_table_t *t)
 
apr_status_t apreq_initialize (apr_pool_t *pool)
 
apr_status_t apreq_pre_initialize (apr_pool_t *pool)
 
apr_status_t apreq_post_initialize (apr_pool_t *pool)
 

Detailed Description

Main header file...

Define the generic APREQ_ macros and common data structures.

Macro Definition Documentation

◆ apreq_attr_to_type

#define apreq_attr_to_type (   T,
  A,
 
)    ( (T*) ((char*)(P)-offsetof(T,A)) )
Parameters
Ttype
Aattribute
PXXX

◆ APREQ_CHARSET_BIT

#define APREQ_CHARSET_BIT   0

◆ APREQ_CHARSET_MASK

#define APREQ_CHARSET_MASK   255

◆ APREQ_COOKIE_HTTPONLY_BIT

#define APREQ_COOKIE_HTTPONLY_BIT   14

◆ APREQ_COOKIE_HTTPONLY_MASK

#define APREQ_COOKIE_HTTPONLY_MASK   1

◆ APREQ_COOKIE_SECURE_BIT

#define APREQ_COOKIE_SECURE_BIT   13

◆ APREQ_COOKIE_SECURE_MASK

#define APREQ_COOKIE_SECURE_MASK   1

◆ APREQ_COOKIE_VERSION_BIT

#define APREQ_COOKIE_VERSION_BIT   11

◆ APREQ_COOKIE_VERSION_MASK

#define APREQ_COOKIE_VERSION_MASK   3

◆ APREQ_DECLARE

#define APREQ_DECLARE (   d)    APR_DECLARE(d)

The public APREQ functions are declared with APREQ_DECLARE(), so they may use the most appropriate calling convention. Public APR functions with variable arguments must use APR_DECLARE_NONSTD().

Remarks
Both the declaration and implementations must use the same macro. APREQ_DECLARE(rettype) apeq_func(args)
Examples
/home/jorton/src/asf/libapreq-v2.17/include/apreq.h.

◆ APREQ_DECLARE_DATA

#define APREQ_DECLARE_DATA

The public APREQ variables are declared with APREQ_DECLARE_DATA. This assures the appropriate indirection is invoked at compile time.

See also
APREQ_DECLARE
APREQ_DECLARE_NONSTD
Remarks
Note that the declaration and implementations use different forms, but both must include the macro. extern APREQ_DECLARE_DATA type apr_variable;
APREQ_DECLARE_DATA type apr_variable = value;

◆ APREQ_DECLARE_NONSTD

#define APREQ_DECLARE_NONSTD (   d)    APR_DECLARE_NONSTD(d)

APEQ_DECLARE_NONSTD(rettype) apr_func(args, ...);

◆ APREQ_DEFAULT_BRIGADE_LIMIT

#define APREQ_DEFAULT_BRIGADE_LIMIT   (256 * 1024)

Maximum number of bytes mod_apreq2 will let accumulate within the heap-buckets in a brigade. Excess data will be spooled to an appended file bucket

See also
ap_set_brigade_read_limit

◆ APREQ_DEFAULT_NELTS

#define APREQ_DEFAULT_NELTS   8

Number of elements in the initial apr_table

See also
apr_table_make

◆ APREQ_DEFAULT_READ_BLOCK_SIZE

#define APREQ_DEFAULT_READ_BLOCK_SIZE   (64 * 1024)

Read chucks of data in 64k blocks from the request

◆ APREQ_DEFAULT_READ_LIMIT

#define APREQ_DEFAULT_READ_LIMIT   (64 * 1024 * 1024)

Maximum number of bytes mod_apreq2 will send off to libapreq2 for parsing. mod_apreq2 will log this event and subsequently remove itself from the filter chain.

See also
ap_set_read_limit

◆ APREQ_FLAGS_GET

#define APREQ_FLAGS_GET (   f,
  name 
)    (((f) >> name##_BIT) & name##_MASK)

Get specified bit f in bitfield name

◆ APREQ_FLAGS_OFF

#define APREQ_FLAGS_OFF (   f,
  name 
)    ((f) &= ~(name##_MASK << name##_BIT))

Check to see if specified bit f is off in bitfield name

◆ APREQ_FLAGS_ON

#define APREQ_FLAGS_ON (   f,
  name 
)    ((f) |= (name##_MASK << name##_BIT))

Check to see if specified bit f is on in bitfield name

◆ APREQ_FLAGS_SET

#define APREQ_FLAGS_SET (   f,
  name,
  value 
)
Value:
((f) = (((f) & ~(name##_MASK << name##_BIT)) \
| ((name##_MASK & (value)) << name##_BIT)))

Set specified bit f in bitfield name to value Note the below BIT/Mask defines are used sans the _BIT, _MASK because of the this define's ##_MASK, ##_BIT usage. Each come in a pair

◆ APREQ_TAINTED_BIT

#define APREQ_TAINTED_BIT   8

◆ APREQ_TAINTED_MASK

#define APREQ_TAINTED_MASK   1

Enumeration Type Documentation

◆ apreq_charset_t

◆ apreq_expires_t

Expiration date format

Enumerator
APREQ_EXPIRES_HTTP 

Use date formatting consistent with RFC 2616

APREQ_EXPIRES_NSCOOKIE 

Use format consistent with Netscape's Cookie Spec

Examples
/home/jorton/src/asf/libapreq-v2.17/include/apreq.h.

◆ apreq_join_t

Join type

Enumerator
APREQ_JOIN_AS_IS 

Join the strings without modification

APREQ_JOIN_ENCODE 

Url-encode the strings before joining them

APREQ_JOIN_DECODE 

Url-decode the strings before joining them

APREQ_JOIN_QUOTE 

Quote the strings, backslashing existing quote marks.

Examples
/home/jorton/src/asf/libapreq-v2.17/include/apreq.h.

◆ apreq_match_t

Match type

Enumerator
APREQ_MATCH_FULL 

Full match only.

APREQ_MATCH_PARTIAL 

Partial matches are ok.

Examples
/home/jorton/src/asf/libapreq-v2.17/include/apreq.h.

Function Documentation

◆ apreq_initialize()

apr_status_t apreq_initialize ( apr_pool_t *  pool)

Initialize libapreq2. Applications (except apache modules using mod_apreq) should call this exactly once before they use any libapreq2 modules. If you want to modify the list of default parsers with apreq_register_parser(), please use apreq_pre_initialize() and apreq_post_initialize() instead.

Parameters
poola base pool persisting while libapreq2 is used
Remarks
after you destroy the pool, you have to call this function again with a new pool if you still plan to use libapreq2
Examples
/home/jorton/src/asf/libapreq-v2.17/include/apreq.h.

◆ apreq_post_initialize()

apr_status_t apreq_post_initialize ( apr_pool_t *  pool)

Post-initialize libapreq2. Applications (except apache modules using mod_apreq2) should this exactly once before they use any libapreq2 modules for parsing.

Parameters
poolthe same pool that was used in apreq_pre_initialize().
Examples
/home/jorton/src/asf/libapreq-v2.17/include/apreq.h.

◆ apreq_pre_initialize()

apr_status_t apreq_pre_initialize ( apr_pool_t *  pool)

Pre-initialize libapreq2. Applications (except apache modules using mod_apreq2) should call this exactly once before they register custom parsers with libapreq2. mod_apreq2 does this automatically during the post-config phase, so modules that need call apreq_register_parser should create a post-config hook using APR_HOOK_MIDDLE.

Parameters
poola base pool persisting while libapreq2 is used
Remarks
after you destroyed the pool, you have to call this function again with a new pool if you still plan to use libapreq2
Examples
/home/jorton/src/asf/libapreq-v2.17/include/apreq.h.

◆ apreq_value_table_add()

static APR_INLINE void apreq_value_table_add ( const apreq_value_t v,
apr_table_t *  t 
)
static

Adds the specified apreq_value_t to the apr_table_t.

Parameters
vvalue to add
tadd v to this table
Returns
void

@ see apr_table_t

See also
apr_value_t
Examples
/home/jorton/src/asf/libapreq-v2.17/include/apreq.h.
libapreq2-2.17/docs/html/apreq_8h_source.html0000644000175000017500000010021114277402434020607 0ustar jortonjorton libapreq2-2.17: include/apreq.h Source File
apreq.h
Go to the documentation of this file.
1 /*
2 ** Licensed to the Apache Software Foundation (ASF) under one or more
3 ** contributor license agreements. See the NOTICE file distributed with
4 ** this work for additional information regarding copyright ownership.
5 ** The ASF licenses this file to You under the Apache License, Version 2.0
6 ** (the "License"); you may not use this file except in compliance with
7 ** the License. You may obtain a copy of the License at
8 **
9 ** http://www.apache.org/licenses/LICENSE-2.0
10 **
11 ** Unless required by applicable law or agreed to in writing, software
12 ** distributed under the License is distributed on an "AS IS" BASIS,
13 ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 ** See the License for the specific language governing permissions and
15 ** limitations under the License.
16 */
17 
18 #ifndef APREQ_H
19 #define APREQ_H
20 
21 #ifdef APREQ_DEBUG
22 #include <assert.h>
23 #endif
24 
25 #include "apr_tables.h"
26 #include <stddef.h>
27 
28 #ifdef __cplusplus
29  extern "C" {
30 #endif
31 
40 #ifndef WIN32
50 #define APREQ_DECLARE(d) APR_DECLARE(d)
60 #define APREQ_DECLARE_NONSTD(d) APR_DECLARE_NONSTD(d)
71 #define APREQ_DECLARE_DATA
72 #elif defined (APREQ_DECLARE_STATIC)
73 #define APREQ_DECLARE(type) type __stdcall
74 #define APREQ_DECLARE_NONSTD(type) type
75 #define APREQ_DECLARE_DATA
76 #elif defined (APREQ_DECLARE_EXPORT)
77 #define APREQ_DECLARE(type) __declspec(dllexport) type __stdcall
78 #define APREQ_DECLARE_NONSTD(type) __declspec(dllexport) type
79 #define APREQ_DECLARE_DATA __declspec(dllexport)
80 #else
81 #define APREQ_DECLARE(type) __declspec(dllimport) type __stdcall
82 #define APREQ_DECLARE_NONSTD(type) __declspec(dllimport) type
83 #define APREQ_DECLARE_DATA __declspec(dllimport)
84 #endif
85 
90 #define APREQ_DEFAULT_READ_BLOCK_SIZE (64 * 1024)
91 
98 #define APREQ_DEFAULT_READ_LIMIT (64 * 1024 * 1024)
105 #define APREQ_DEFAULT_BRIGADE_LIMIT (256 * 1024)
106 
111 #define APREQ_DEFAULT_NELTS 8
112 
113 
114 
118 #define APREQ_FLAGS_OFF(f, name) ((f) &= ~(name##_MASK << name##_BIT))
122 #define APREQ_FLAGS_ON(f, name) ((f) |= (name##_MASK << name##_BIT))
126 #define APREQ_FLAGS_GET(f, name) (((f) >> name##_BIT) & name##_MASK)
133 #define APREQ_FLAGS_SET(f, name, value) \
134  ((f) = (((f) & ~(name##_MASK << name##_BIT)) \
135  | ((name##_MASK & (value)) << name##_BIT)))
136 
142 #define APREQ_CHARSET_BIT 0
143 
149 #define APREQ_CHARSET_MASK 255
150 
156 #define APREQ_TAINTED_BIT 8
162 #define APREQ_TAINTED_MASK 1
163 
170 #define APREQ_COOKIE_VERSION_BIT 11
176 #define APREQ_COOKIE_VERSION_MASK 3
177 
183 #define APREQ_COOKIE_SECURE_BIT 13
189 #define APREQ_COOKIE_SECURE_MASK 1
190 
196 #define APREQ_COOKIE_HTTPONLY_BIT 14
202 #define APREQ_COOKIE_HTTPONLY_MASK 1
203 
205 typedef enum {
206  APREQ_CHARSET_ASCII =0,
207  APREQ_CHARSET_LATIN1 =1, /* ISO-8859-1 */
208  APREQ_CHARSET_CP1252 =2, /* Windows-1252 */
209  APREQ_CHARSET_UTF8 =8
211 
212 
214 typedef enum {
220 
222 typedef enum {
226 
228 typedef enum {
232 
233 
235 typedef struct apreq_value_t {
236  char *name;
237  apr_size_t nlen;
238  apr_size_t dlen;
239  char data[1];
241 
253 static APR_INLINE
254 void apreq_value_table_add(const apreq_value_t *v, apr_table_t *t) {
255  apr_table_addn(t, v->name, v->data);
256 }
257 
265 #define apreq_attr_to_type(T,A,P) ( (T*) ((char*)(P)-offsetof(T,A)) )
266 
278 APREQ_DECLARE(apr_status_t) apreq_initialize(apr_pool_t *pool);
279 
280 
292 APREQ_DECLARE(apr_status_t) apreq_pre_initialize(apr_pool_t *pool);
293 
301 APREQ_DECLARE(apr_status_t) apreq_post_initialize(apr_pool_t *pool);
302 
303 
304 #ifdef __cplusplus
305  }
306 #endif
307 
308 #endif /* APREQ_H */
#define APREQ_DECLARE(d)
Definition: apreq.h:50
static APR_INLINE void apreq_value_table_add(const apreq_value_t *v, apr_table_t *t)
Definition: apreq.h:254
apr_status_t apreq_initialize(apr_pool_t *pool)
apreq_match_t
Definition: apreq.h:222
@ APREQ_MATCH_PARTIAL
Definition: apreq.h:224
@ APREQ_MATCH_FULL
Definition: apreq.h:223
apreq_charset_t
Definition: apreq.h:205
apreq_join_t
Definition: apreq.h:214
@ APREQ_JOIN_ENCODE
Definition: apreq.h:216
@ APREQ_JOIN_AS_IS
Definition: apreq.h:215
@ APREQ_JOIN_DECODE
Definition: apreq.h:217
@ APREQ_JOIN_QUOTE
Definition: apreq.h:218
apr_status_t apreq_post_initialize(apr_pool_t *pool)
struct apreq_value_t apreq_value_t
libapreq's pre-extensible string type
apreq_expires_t
Definition: apreq.h:228
@ APREQ_EXPIRES_NSCOOKIE
Definition: apreq.h:230
@ APREQ_EXPIRES_HTTP
Definition: apreq.h:229
apr_status_t apreq_pre_initialize(apr_pool_t *pool)
libapreq's pre-extensible string type
Definition: apreq.h:235
char * name
Definition: apreq.h:236
char data[1]
Definition: apreq.h:239
apr_size_t dlen
Definition: apreq.h:238
apr_size_t nlen
Definition: apreq.h:237
libapreq2-2.17/docs/html/apreq__cookie_8h.html0000644000175000017500000010361114277402434020726 0ustar jortonjorton libapreq2-2.17: include/apreq_cookie.h File Reference
apreq_cookie.h File Reference

Cookies and Jars. More...

#include "apreq.h"
#include "apr_time.h"

Go to the source code of this file.

Data Structures

struct  apreq_cookie_t
 Cookie type, supporting both Netscape and RFC cookie specifications. More...
 

Macros

#define APREQ_COOKIE_MAX_LENGTH   4096
 

Typedefs

typedef struct apreq_cookie_t apreq_cookie_t
 Cookie type, supporting both Netscape and RFC cookie specifications.
 

Functions

static APR_INLINE apreq_cookie_tapreq_value_to_cookie (const char *val)
 
static APR_INLINE unsigned apreq_cookie_version (const apreq_cookie_t *c)
 
static APR_INLINE void apreq_cookie_version_set (apreq_cookie_t *c, unsigned v)
 
static APR_INLINE unsigned apreq_cookie_is_secure (const apreq_cookie_t *c)
 
static APR_INLINE void apreq_cookie_secure_on (apreq_cookie_t *c)
 
static APR_INLINE void apreq_cookie_secure_off (apreq_cookie_t *c)
 
static APR_INLINE unsigned apreq_cookie_is_httponly (const apreq_cookie_t *c)
 
static APR_INLINE void apreq_cookie_httponly_on (apreq_cookie_t *c)
 
static APR_INLINE void apreq_cookie_httponly_off (apreq_cookie_t *c)
 
static APR_INLINE unsigned apreq_cookie_is_tainted (const apreq_cookie_t *c)
 
static APR_INLINE void apreq_cookie_tainted_on (apreq_cookie_t *c)
 
static APR_INLINE void apreq_cookie_tainted_off (apreq_cookie_t *c)
 
apr_status_t apreq_parse_cookie_header (apr_pool_t *pool, apr_table_t *jar, const char *header)
 
apreq_cookie_tapreq_cookie_make (apr_pool_t *pool, const char *name, const apr_size_t nlen, const char *value, const apr_size_t vlen)
 
char * apreq_cookie_as_string (const apreq_cookie_t *c, apr_pool_t *p)
 
int apreq_cookie_serialize (const apreq_cookie_t *c, char *buf, apr_size_t len)
 
void apreq_cookie_expires (apreq_cookie_t *c, const char *time_str)
 

Detailed Description

Cookies and Jars.

apreq_cookie.h describes a common server-side API for request (incoming) and response (outgoing) cookies. It aims towards compliance with the standard cookie specifications listed below.

See also
http://wp.netscape.com/newsref/std/cookie_spec.html
http://www.ietf.org/rfc/rfc2109.txt
http://www.ietf.org/rfc/rfc2964.txt
http://www.ietf.org/rfc/rfc2965.txt

Macro Definition Documentation

◆ APREQ_COOKIE_MAX_LENGTH

#define APREQ_COOKIE_MAX_LENGTH   4096

This macro is deprecated.

Maximum length of a single Set-Cookie(2) header.

Function Documentation

◆ apreq_cookie_as_string()

char* apreq_cookie_as_string ( const apreq_cookie_t c,
apr_pool_t *  p 
)

Returns a string that represents the cookie as it would appear in a valid "Set-Cookie*" header.

Parameters
ccookie.
ppool which allocates the returned string.
Returns
header string.

◆ apreq_cookie_expires()

void apreq_cookie_expires ( apreq_cookie_t c,
const char *  time_str 
)

Set the Cookie's expiration date.

Parameters
cThe cookie.
time_strIf NULL, the Cookie's expiration date is unset, making it a session cookie. This means no "expires" or "max-age" attribute will appear in the cookie's serialized form. If time_str is not NULL, the expiration date will be reset to the offset (from now) represented by time_str. The time_str should be in a format that apreq_atoi64t() can understand, namely /[+-]?\d+\s*[YMDhms]/.
Remarks
Now time_str may also be a fixed date; see apr_date_parse_rfc() for admissible formats.

◆ apreq_cookie_httponly_off()

static APR_INLINE void apreq_cookie_httponly_off ( apreq_cookie_t c)
static

Turns off the cookie's HttpOnly flag.

◆ apreq_cookie_httponly_on()

static APR_INLINE void apreq_cookie_httponly_on ( apreq_cookie_t c)
static

Sets the cookie's HttpOnly flag, meaning it is not accessible through client-side script in supported browsers.

◆ apreq_cookie_is_httponly()

static APR_INLINE unsigned apreq_cookie_is_httponly ( const apreq_cookie_t c)
static
Returns
1 if the HttpOnly flag is set, 0 otherwise.

◆ apreq_cookie_is_secure()

static APR_INLINE unsigned apreq_cookie_is_secure ( const apreq_cookie_t c)
static
Returns
1 if the secure flag is set, 0 otherwise.

◆ apreq_cookie_is_tainted()

static APR_INLINE unsigned apreq_cookie_is_tainted ( const apreq_cookie_t c)
static
Returns
1 if the taint flag is set, 0 otherwise.

◆ apreq_cookie_make()

apreq_cookie_t* apreq_cookie_make ( apr_pool_t *  pool,
const char *  name,
const apr_size_t  nlen,
const char *  value,
const apr_size_t  vlen 
)

Returns a new cookie, made from the argument list.

Parameters
poolPool which allocates the cookie.
nameThe cookie's name.
nlenLength of name.
valueThe cookie's value.
vlenLength of value.
Returns
the new cookie

◆ apreq_cookie_secure_off()

static APR_INLINE void apreq_cookie_secure_off ( apreq_cookie_t c)
static

Turns off the cookie's secure flag.

◆ apreq_cookie_secure_on()

static APR_INLINE void apreq_cookie_secure_on ( apreq_cookie_t c)
static

Sets the cookie's secure flag, meaning it only comes back over an SSL-encrypted connction.

◆ apreq_cookie_serialize()

int apreq_cookie_serialize ( const apreq_cookie_t c,
char *  buf,
apr_size_t  len 
)

Same functionality as apreq_cookie_as_string. Stores the string representation in buf, using up to len bytes in buf as storage. The return value has the same semantics as that of apr_snprintf, including the special behavior for a "len = 0" argument.

Parameters
ccookie.
bufstorage location for the result.
lensize of buf's storage area.
Returns
size of resulting header string.

◆ apreq_cookie_tainted_off()

static APR_INLINE void apreq_cookie_tainted_off ( apreq_cookie_t c)
static

Turns off the cookie's tainted flag.

◆ apreq_cookie_tainted_on()

static APR_INLINE void apreq_cookie_tainted_on ( apreq_cookie_t c)
static

Sets the cookie's tainted flag.

◆ apreq_cookie_version()

static APR_INLINE unsigned apreq_cookie_version ( const apreq_cookie_t c)
static
Returns
1 if this is an RFC cookie, 0 if its a Netscape cookie.

◆ apreq_cookie_version_set()

static APR_INLINE void apreq_cookie_version_set ( apreq_cookie_t c,
unsigned  v 
)
static

Sets the cookie's protocol version.

◆ apreq_parse_cookie_header()

apr_status_t apreq_parse_cookie_header ( apr_pool_t *  pool,
apr_table_t *  jar,
const char *  header 
)

Parse a cookie header and store the cookies in an apr_table_t.

Parameters
poolpool which allocates the cookies
jartable where parsed cookies are stored
headerthe header value
Returns
APR_SUCCESS.
APREQ_ERROR_BADSEQ if an unparsable character sequence appears.
APREQ_ERROR_MISMATCH if an rfc-cookie attribute appears in a netscape cookie header.
::APR_ENOTIMPL if an unrecognized rfc-cookie attribute appears.
APREQ_ERROR_NOTOKEN if a required token was not present.
APREQ_ERROR_BADCHAR if an unexpected token was present.

◆ apreq_value_to_cookie()

static APR_INLINE apreq_cookie_t* apreq_value_to_cookie ( const char *  val)
static

Upgrades a jar's table values to apreq_cookie_t structs.

libapreq2-2.17/docs/html/apreq__cookie_8h_source.html0000644000175000017500000011504214277402434022307 0ustar jortonjorton libapreq2-2.17: include/apreq_cookie.h Source File
apreq_cookie.h
Go to the documentation of this file.
1 /*
2 ** Licensed to the Apache Software Foundation (ASF) under one or more
3 ** contributor license agreements. See the NOTICE file distributed with
4 ** this work for additional information regarding copyright ownership.
5 ** The ASF licenses this file to You under the Apache License, Version 2.0
6 ** (the "License"); you may not use this file except in compliance with
7 ** the License. You may obtain a copy of the License at
8 **
9 ** http://www.apache.org/licenses/LICENSE-2.0
10 **
11 ** Unless required by applicable law or agreed to in writing, software
12 ** distributed under the License is distributed on an "AS IS" BASIS,
13 ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 ** See the License for the specific language governing permissions and
15 ** limitations under the License.
16 */
17 
18 #ifndef APREQ_COOKIE_H
19 #define APREQ_COOKIE_H
20 
21 #include "apreq.h"
22 #include "apr_time.h"
23 
24 #ifdef __cplusplus
25 extern "C" {
26 #endif
27 
48 #define APREQ_COOKIE_MAX_LENGTH 4096
49 
53 typedef struct apreq_cookie_t {
54 
55  char *path;
56  char *domain;
57  char *port;
58  char *comment;
59  char *commentURL;
60  apr_time_t max_age;
61  unsigned flags;
62  const apreq_value_t v;
65 
66 
68 static APR_INLINE
70 {
71  union { const char *in; char *out; } deconst;
72 
73  deconst.in = val;
75  apreq_attr_to_type(apreq_value_t, data, deconst.out));
76 }
77 
79 static APR_INLINE
81  return APREQ_FLAGS_GET(c->flags, APREQ_COOKIE_VERSION);
82 }
83 
85 static APR_INLINE
87  APREQ_FLAGS_SET(c->flags, APREQ_COOKIE_VERSION, v);
88 }
89 
91 static APR_INLINE
93  return APREQ_FLAGS_GET(c->flags, APREQ_COOKIE_SECURE);
94 }
95 
99 static APR_INLINE
101  APREQ_FLAGS_ON(c->flags, APREQ_COOKIE_SECURE);
102 }
103 
105 static APR_INLINE
107  APREQ_FLAGS_OFF(c->flags, APREQ_COOKIE_SECURE);
108 }
109 
111 static APR_INLINE
113  return APREQ_FLAGS_GET(c->flags, APREQ_COOKIE_HTTPONLY);
114 }
115 
120 static APR_INLINE
122  APREQ_FLAGS_ON(c->flags, APREQ_COOKIE_HTTPONLY);
123 }
124 
126 static APR_INLINE
128  APREQ_FLAGS_OFF(c->flags, APREQ_COOKIE_HTTPONLY);
129 }
130 
131 
133 static APR_INLINE
135  return APREQ_FLAGS_GET(c->flags, APREQ_TAINTED);
136 }
137 
139 static APR_INLINE
141  APREQ_FLAGS_ON(c->flags, APREQ_TAINTED);
142 }
143 
145 static APR_INLINE
147  APREQ_FLAGS_OFF(c->flags, APREQ_TAINTED);
148 }
149 
165 APREQ_DECLARE(apr_status_t) apreq_parse_cookie_header(apr_pool_t *pool,
166  apr_table_t *jar,
167  const char *header);
168 
181  const char *name,
182  const apr_size_t nlen,
183  const char *value,
184  const apr_size_t vlen);
185 
196  apr_pool_t *p);
197 
198 
212  char *buf, apr_size_t len);
213 
229  const char *time_str);
230 
231 #ifdef __cplusplus
232  }
233 #endif
234 
235 #endif /*APREQ_COOKIE_H*/
236 
237 
Main header file...
#define APREQ_DECLARE(d)
Definition: apreq.h:50
#define APREQ_FLAGS_GET(f, name)
Definition: apreq.h:126
#define APREQ_FLAGS_OFF(f, name)
Definition: apreq.h:118
#define apreq_attr_to_type(T, A, P)
Definition: apreq.h:265
#define APREQ_FLAGS_SET(f, name, value)
Definition: apreq.h:133
#define APREQ_FLAGS_ON(f, name)
Definition: apreq.h:122
libapreq's pre-extensible string type
Definition: apreq.h:235
libapreq2-2.17/docs/html/apreq__error_8h.html0000644000175000017500000005763414277402434020623 0ustar jortonjorton libapreq2-2.17: include/apreq_error.h File Reference
apreq_error.h File Reference

Error status codes. More...

#include "apr_errno.h"
#include "apreq.h"

Go to the source code of this file.

Macros

#define APR_EBADARG   APR_BADARG /* XXX: don't use APR_BADARG */
 
#define APREQ_ERROR_GENERAL   APR_OS_START_USERERR
 
#define APREQ_ERROR_TAINTED   (APREQ_ERROR_GENERAL + 1)
 
#define APREQ_ERROR_INTERRUPT   (APREQ_ERROR_GENERAL + 2)
 
#define APREQ_ERROR_BADDATA   (APREQ_ERROR_GENERAL + 10)
 
#define APREQ_ERROR_BADCHAR   (APREQ_ERROR_BADDATA + 1)
 
#define APREQ_ERROR_BADSEQ   (APREQ_ERROR_BADDATA + 2)
 
#define APREQ_ERROR_BADATTR   (APREQ_ERROR_BADDATA + 3)
 
#define APREQ_ERROR_BADHEADER   (APREQ_ERROR_BADDATA + 4)
 
#define APREQ_ERROR_BADUTF8   (APREQ_ERROR_BADDATA + 5)
 
#define APREQ_ERROR_NODATA   (APREQ_ERROR_GENERAL + 20)
 
#define APREQ_ERROR_NOTOKEN   (APREQ_ERROR_NODATA + 1)
 
#define APREQ_ERROR_NOATTR   (APREQ_ERROR_NODATA + 2)
 
#define APREQ_ERROR_NOHEADER   (APREQ_ERROR_NODATA + 3)
 
#define APREQ_ERROR_NOPARSER   (APREQ_ERROR_NODATA + 4)
 
#define APREQ_ERROR_MISMATCH   (APREQ_ERROR_GENERAL + 30)
 
#define APREQ_ERROR_OVERLIMIT   (APREQ_ERROR_MISMATCH + 1)
 
#define APREQ_ERROR_UNDERLIMIT   (APREQ_ERROR_MISMATCH + 2)
 
#define APREQ_ERROR_NOTEMPTY   (APREQ_ERROR_MISMATCH + 3)
 

Functions

char * apreq_strerror (apr_status_t s, char *buf, apr_size_t bufsize)
 

Detailed Description

Error status codes.

Define the APREQ_ error codes.

Macro Definition Documentation

◆ APR_EBADARG

#define APR_EBADARG   APR_BADARG /* XXX: don't use APR_BADARG */

Bad Arguments return value

See also
APR_BADARG

◆ APREQ_ERROR_BADATTR

#define APREQ_ERROR_BADATTR   (APREQ_ERROR_BADDATA + 3)

Invalid attribute.

◆ APREQ_ERROR_BADCHAR

#define APREQ_ERROR_BADCHAR   (APREQ_ERROR_BADDATA + 1)

Invalid character.

◆ APREQ_ERROR_BADDATA

#define APREQ_ERROR_BADDATA   (APREQ_ERROR_GENERAL + 10)

Invalid input data.

◆ APREQ_ERROR_BADHEADER

#define APREQ_ERROR_BADHEADER   (APREQ_ERROR_BADDATA + 4)

Invalid header.

◆ APREQ_ERROR_BADSEQ

#define APREQ_ERROR_BADSEQ   (APREQ_ERROR_BADDATA + 2)

Invalid byte sequence.

◆ APREQ_ERROR_BADUTF8

#define APREQ_ERROR_BADUTF8   (APREQ_ERROR_BADDATA + 5)

Invalid utf8 encoding.

◆ APREQ_ERROR_GENERAL

#define APREQ_ERROR_GENERAL   APR_OS_START_USERERR

Internal apreq error.

◆ APREQ_ERROR_INTERRUPT

#define APREQ_ERROR_INTERRUPT   (APREQ_ERROR_GENERAL + 2)

Parsing interrupted.

◆ APREQ_ERROR_MISMATCH

#define APREQ_ERROR_MISMATCH   (APREQ_ERROR_GENERAL + 30)

Conflicting information.

◆ APREQ_ERROR_NOATTR

#define APREQ_ERROR_NOATTR   (APREQ_ERROR_NODATA + 2)

Missing attribute.

◆ APREQ_ERROR_NODATA

#define APREQ_ERROR_NODATA   (APREQ_ERROR_GENERAL + 20)

Missing input data.

◆ APREQ_ERROR_NOHEADER

#define APREQ_ERROR_NOHEADER   (APREQ_ERROR_NODATA + 3)

Missing header.

◆ APREQ_ERROR_NOPARSER

#define APREQ_ERROR_NOPARSER   (APREQ_ERROR_NODATA + 4)

Missing parser.

◆ APREQ_ERROR_NOTEMPTY

#define APREQ_ERROR_NOTEMPTY   (APREQ_ERROR_MISMATCH + 3)

Setting already configured.

◆ APREQ_ERROR_NOTOKEN

#define APREQ_ERROR_NOTOKEN   (APREQ_ERROR_NODATA + 1)

Missing required token.

◆ APREQ_ERROR_OVERLIMIT

#define APREQ_ERROR_OVERLIMIT   (APREQ_ERROR_MISMATCH + 1)

Exceeds configured maximum limit.

◆ APREQ_ERROR_TAINTED

#define APREQ_ERROR_TAINTED   (APREQ_ERROR_GENERAL + 1)

Attempted to perform unsafe action with tainted data.

◆ APREQ_ERROR_UNDERLIMIT

#define APREQ_ERROR_UNDERLIMIT   (APREQ_ERROR_MISMATCH + 2)

Below configured minimum limit.

Function Documentation

◆ apreq_strerror()

char* apreq_strerror ( apr_status_t  s,
char *  buf,
apr_size_t  bufsize 
)

apreq's wrapper around apr_strerror(); recognizes APREQ_ERROR_* status codes.

libapreq2-2.17/docs/html/apreq__error_8h_source.html0000644000175000017500000003262414277402434022173 0ustar jortonjorton libapreq2-2.17: include/apreq_error.h Source File
apreq_error.h
Go to the documentation of this file.
1 /*
2 ** Licensed to the Apache Software Foundation (ASF) under one or more
3 ** contributor license agreements. See the NOTICE file distributed with
4 ** this work for additional information regarding copyright ownership.
5 ** The ASF licenses this file to You under the Apache License, Version 2.0
6 ** (the "License"); you may not use this file except in compliance with
7 ** the License. You may obtain a copy of the License at
8 **
9 ** http://www.apache.org/licenses/LICENSE-2.0
10 **
11 ** Unless required by applicable law or agreed to in writing, software
12 ** distributed under the License is distributed on an "AS IS" BASIS,
13 ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 ** See the License for the specific language governing permissions and
15 ** limitations under the License.
16 */
17 
18 #ifndef APREQ_ERROR_H
19 #define APREQ_ERROR_H
20 
21 #include "apr_errno.h"
22 #include "apreq.h"
23 
24 #ifdef __cplusplus
25  extern "C" {
26 #endif
27 
32 APREQ_DECLARE(char *)
33 apreq_strerror(apr_status_t s, char *buf, apr_size_t bufsize);
34 
43 #ifndef APR_EBADARG
48 #define APR_EBADARG APR_BADARG /* XXX: don't use APR_BADARG */
49 #endif
50 
52 #define APREQ_ERROR_GENERAL APR_OS_START_USERERR
54 #define APREQ_ERROR_TAINTED (APREQ_ERROR_GENERAL + 1)
56 #define APREQ_ERROR_INTERRUPT (APREQ_ERROR_GENERAL + 2)
57 
59 #define APREQ_ERROR_BADDATA (APREQ_ERROR_GENERAL + 10)
61 #define APREQ_ERROR_BADCHAR (APREQ_ERROR_BADDATA + 1)
63 #define APREQ_ERROR_BADSEQ (APREQ_ERROR_BADDATA + 2)
65 #define APREQ_ERROR_BADATTR (APREQ_ERROR_BADDATA + 3)
67 #define APREQ_ERROR_BADHEADER (APREQ_ERROR_BADDATA + 4)
69 #define APREQ_ERROR_BADUTF8 (APREQ_ERROR_BADDATA + 5)
70 
72 #define APREQ_ERROR_NODATA (APREQ_ERROR_GENERAL + 20)
74 #define APREQ_ERROR_NOTOKEN (APREQ_ERROR_NODATA + 1)
76 #define APREQ_ERROR_NOATTR (APREQ_ERROR_NODATA + 2)
78 #define APREQ_ERROR_NOHEADER (APREQ_ERROR_NODATA + 3)
80 #define APREQ_ERROR_NOPARSER (APREQ_ERROR_NODATA + 4)
81 
82 
84 #define APREQ_ERROR_MISMATCH (APREQ_ERROR_GENERAL + 30)
86 #define APREQ_ERROR_OVERLIMIT (APREQ_ERROR_MISMATCH + 1)
88 #define APREQ_ERROR_UNDERLIMIT (APREQ_ERROR_MISMATCH + 2)
90 #define APREQ_ERROR_NOTEMPTY (APREQ_ERROR_MISMATCH + 3)
91 
92 
93 #ifdef __cplusplus
94  }
95 #endif
96 
97 #endif /* APREQ_ERROR_H */
Main header file...
#define APREQ_DECLARE(d)
Definition: apreq.h:50
char * apreq_strerror(apr_status_t s, char *buf, apr_size_t bufsize)
libapreq2-2.17/docs/html/apreq__module_8h.html0000644000175000017500000015007714277402434020752 0ustar jortonjorton libapreq2-2.17: include/apreq_module.h File Reference
apreq_module.h File Reference

Module API. More...

#include "apreq_cookie.h"
#include "apreq_parser.h"
#include "apreq_error.h"

Go to the source code of this file.

Data Structures

struct  apreq_handle_t
 
struct  apreq_module_t
 Vtable describing the necessary module functions. More...
 

Macros

#define APREQ_MODULE(pre, mmn)
 
#define apreq_cookie(req, name)   apreq_jar_get(req, name)
 

Typedefs

typedef struct apreq_handle_t apreq_handle_t
 
typedef struct apreq_module_t apreq_module_t
 Vtable describing the necessary module functions.
 

Functions

static APR_INLINE unsigned apreq_module_status_is_error (apr_status_t s)
 
static APR_INLINE apr_status_t apreq_jar (apreq_handle_t *req, const apr_table_t **t)
 
static APR_INLINE apr_status_t apreq_args (apreq_handle_t *req, const apr_table_t **t)
 
static APR_INLINE apr_status_t apreq_body (apreq_handle_t *req, const apr_table_t **t)
 
static APR_INLINE apreq_cookie_tapreq_jar_get (apreq_handle_t *req, const char *name)
 
static APR_INLINE apreq_param_tapreq_args_get (apreq_handle_t *req, const char *name)
 
static APR_INLINE apreq_param_tapreq_body_get (apreq_handle_t *req, const char *name)
 
static APR_INLINE apr_status_t apreq_parser_get (apreq_handle_t *req, const apreq_parser_t **parser)
 
static APR_INLINE apr_status_t apreq_parser_set (apreq_handle_t *req, apreq_parser_t *parser)
 
static APR_INLINE apr_status_t apreq_hook_add (apreq_handle_t *req, apreq_hook_t *hook)
 
static APR_INLINE apr_status_t apreq_brigade_limit_set (apreq_handle_t *req, apr_size_t bytes)
 
static APR_INLINE apr_status_t apreq_brigade_limit_get (apreq_handle_t *req, apr_size_t *bytes)
 
static APR_INLINE apr_status_t apreq_read_limit_set (apreq_handle_t *req, apr_uint64_t bytes)
 
static APR_INLINE apr_status_t apreq_read_limit_get (apreq_handle_t *req, apr_uint64_t *bytes)
 
static APR_INLINE apr_status_t apreq_temp_dir_set (apreq_handle_t *req, const char *path)
 
static APR_INLINE apr_status_t apreq_temp_dir_get (apreq_handle_t *req, const char **path)
 
apreq_handle_tapreq_handle_cgi (apr_pool_t *pool)
 
apreq_handle_tapreq_handle_custom (apr_pool_t *pool, const char *query_string, const char *cookie, apreq_parser_t *parser, apr_uint64_t read_limit, apr_bucket_brigade *in)
 
apreq_param_tapreq_param (apreq_handle_t *req, const char *key)
 
apr_table_t * apreq_params (apreq_handle_t *req, apr_pool_t *p)
 
apr_table_t * apreq_cookies (apreq_handle_t *req, apr_pool_t *p)
 

Detailed Description

Module API.

Macro Definition Documentation

◆ apreq_cookie

#define apreq_cookie (   req,
  name 
)    apreq_jar_get(req, name)

Find the first cookie with the specified name. The match is case-insensitive.

Parameters
reqrequest handle.
namedesired cookie name
Returns
The first matching cookie or NULL.

◆ APREQ_MODULE

#define APREQ_MODULE (   pre,
  mmn 
)
Value:
const apreq_module_t \
pre##_module = { #pre, mmn, \
pre##_jar, pre##_args, pre##_body, \
pre##_jar_get, pre##_args_get, pre##_body_get, \
pre##_parser_get, pre##_parser_set, pre##_hook_add, \
pre##_brigade_limit_get, pre##_brigade_limit_set, \
pre##_read_limit_get, pre##_read_limit_set, \
pre##_temp_dir_get, pre##_temp_dir_set, \
}

Convenience macro for defining a module by mapping a function prefix to an associated apreq_module_t structure.

Parameters
prePrefix to define new module. All attributes of the apreq_module_t struct are defined with this as their prefix. The generated struct is named by appending "_module" to the prefix.
mmnMagic number (i.e. version number) of this module.

Typedef Documentation

◆ apreq_handle_t

An apreq handle associated with a module. The structure may have variable size, because the module may append its own data structures after it.

Function Documentation

◆ apreq_args()

static APR_INLINE apr_status_t apreq_args ( apreq_handle_t req,
const apr_table_t **  t 
)
static

Expose the parsed "query string" associated to this handle.

Parameters
reqThe request handle
tThe resulting table, which will either be NULL or a valid table object on return.
Returns
APR_SUCCESS or a module-specific error status code.

◆ apreq_args_get()

static APR_INLINE apreq_param_t* apreq_args_get ( apreq_handle_t req,
const char *  name 
)
static

Fetch the first query string param with the given name.

Parameters
reqThe request handle
nameCase-insensitive param name.
Returns
First matching param, or NULL if none match.

◆ apreq_body()

static APR_INLINE apr_status_t apreq_body ( apreq_handle_t req,
const apr_table_t **  t 
)
static

Expose the parsed "request body" associated to this handle.

Parameters
reqThe request handle
tThe resulting table, which will either be NULL or a valid table object on return.
Returns
APR_SUCCESS or a module-specific error status code.

◆ apreq_body_get()

static APR_INLINE apreq_param_t* apreq_body_get ( apreq_handle_t req,
const char *  name 
)
static

Fetch the first body param with the given name.

Parameters
reqThe request handle
nameCase-insensitive cookie name.
Returns
First matching param, or NULL if none match.

◆ apreq_brigade_limit_get()

static APR_INLINE apr_status_t apreq_brigade_limit_get ( apreq_handle_t req,
apr_size_t *  bytes 
)
static

Get the active brigade limit.

Parameters
reqThe handle.
bytesPointer to resulting (current) limit.
Returns
APR_SUCCESS or a module-specific error, which may leave bytes undefined.

◆ apreq_brigade_limit_set()

static APR_INLINE apr_status_t apreq_brigade_limit_set ( apreq_handle_t req,
apr_size_t  bytes 
)
static

Set the active brigade limit.

Parameters
reqThe handle.
bytesNew limit to use.
Returns
APR_SUCCESS or module-specific error.

◆ apreq_cookies()

apr_table_t* apreq_cookies ( apreq_handle_t req,
apr_pool_t *  p 
)

Returns a table containing all request cookies.

Parameters
reqthe apreq request handle
pAllocates the returned table.

◆ apreq_handle_cgi()

apreq_handle_t* apreq_handle_cgi ( apr_pool_t *  pool)

Create an apreq handle which is suitable for a CGI program. It reads input from stdin and writes output to stdout.

Parameters
poolPool associated to this handle.
Returns
New handle; can only be NULL if the pool allocation failed.
Remarks
The handle gets cached in the pool's userdata, so subsequent calls will retrieve the original cached handle.

◆ apreq_handle_custom()

apreq_handle_t* apreq_handle_custom ( apr_pool_t *  pool,
const char *  query_string,
const char *  cookie,
apreq_parser_t parser,
apr_uint64_t  read_limit,
apr_bucket_brigade *  in 
)

Create a custom apreq handle which knows only some static values. Useful if you want to test the parser code or if you have got data from a custom source (neither Apache 2 nor CGI).

Parameters
poolallocates the parse data,
query_stringparsed into args table
cookievalue of the request "Cookie" header
parserparses the request body
read_limitmaximum bytes to read from the body
inbrigade containing the request body
Returns
new handle; can only be NULL if the pool allocation failed.

◆ apreq_hook_add()

static APR_INLINE apr_status_t apreq_hook_add ( apreq_handle_t req,
apreq_hook_t hook 
)
static

Add a parser hook for this request.

Parameters
reqThe request handle
hookHook to add.
Returns
APR_SUCCESS or module-specific error.

◆ apreq_jar()

static APR_INLINE apr_status_t apreq_jar ( apreq_handle_t req,
const apr_table_t **  t 
)
static

Expose the parsed "cookie" header associated to this handle.

Parameters
reqThe request handle
tThe resulting table, which will either be NULL or a valid table object on return.
Returns
APR_SUCCESS or a module-specific error status code.

◆ apreq_jar_get()

static APR_INLINE apreq_cookie_t* apreq_jar_get ( apreq_handle_t req,
const char *  name 
)
static

Fetch the first cookie with the given name.

Parameters
reqThe request handle
nameCase-insensitive cookie name.
Returns
First matching cookie, or NULL if none match.

◆ apreq_module_status_is_error()

static APR_INLINE unsigned apreq_module_status_is_error ( apr_status_t  s)
static

Defines the module-specific status codes which are commonly considered to be non-fatal.

Parameters
sstatus code returned by an apreq_module_t method.
Returns
1 if s is fatal, 0 otherwise.

◆ apreq_param()

apreq_param_t* apreq_param ( apreq_handle_t req,
const char *  key 
)

Find the first query string parameter or body parameter with the specified name. The match is case-insensitive.

Parameters
reqrequest handle.
keydesired parameter name
Returns
The first matching parameter (with args searched first) or NULL.

◆ apreq_params()

apr_table_t* apreq_params ( apreq_handle_t req,
apr_pool_t *  p 
)

Returns a table containing key-value pairs for the full request (args + body).

Parameters
reqrequest handle
pallocates the returned table.
Returns
table representing all available params; is never NULL.

◆ apreq_parser_get()

static APR_INLINE apr_status_t apreq_parser_get ( apreq_handle_t req,
const apreq_parser_t **  parser 
)
static

Fetch the active body parser.

Parameters
reqThe request handle
parserPoints to the active parser on return.
Returns
APR_SUCCESS or module-specific error.

◆ apreq_parser_set()

static APR_INLINE apr_status_t apreq_parser_set ( apreq_handle_t req,
apreq_parser_t parser 
)
static

Set the body parser for this request.

Parameters
reqThe request handle
parserNew parser to use.
Returns
APR_SUCCESS or module-specific error.

◆ apreq_read_limit_get()

static APR_INLINE apr_status_t apreq_read_limit_get ( apreq_handle_t req,
apr_uint64_t *  bytes 
)
static

Get the active read limit.

Parameters
reqThe request handle.
bytesPointer to resulting (current) limit.
Returns
APR_SUCCESS or a module-specific error, which may leave bytes undefined.

◆ apreq_read_limit_set()

static APR_INLINE apr_status_t apreq_read_limit_set ( apreq_handle_t req,
apr_uint64_t  bytes 
)
static

Set the active read limit.

Parameters
reqThe handle.
bytesNew limit to use.
Returns
APR_SUCCESS or a module-specific error.

◆ apreq_temp_dir_get()

static APR_INLINE apr_status_t apreq_temp_dir_get ( apreq_handle_t req,
const char **  path 
)
static

Get the active temp directory.

Parameters
reqThe handle.
pathResulting path to temp dir.
Returns
APR_SUCCESS implies path is valid, but may also be NULL. Any other return value is module-specific, and may leave path undefined.

◆ apreq_temp_dir_set()

static APR_INLINE apr_status_t apreq_temp_dir_set ( apreq_handle_t req,
const char *  path 
)
static

Set the active temp directory.

Parameters
reqThe handle.
pathNew path to use; may be NULL.
Returns
APR_SUCCESS or a module-specific error .
libapreq2-2.17/docs/html/apreq__module_8h_source.html0000644000175000017500000017117614277402434022335 0ustar jortonjorton libapreq2-2.17: include/apreq_module.h Source File
apreq_module.h
Go to the documentation of this file.
1 /*
2 ** Licensed to the Apache Software Foundation (ASF) under one or more
3 ** contributor license agreements. See the NOTICE file distributed with
4 ** this work for additional information regarding copyright ownership.
5 ** The ASF licenses this file to You under the Apache License, Version 2.0
6 ** (the "License"); you may not use this file except in compliance with
7 ** the License. You may obtain a copy of the License at
8 **
9 ** http://www.apache.org/licenses/LICENSE-2.0
10 **
11 ** Unless required by applicable law or agreed to in writing, software
12 ** distributed under the License is distributed on an "AS IS" BASIS,
13 ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 ** See the License for the specific language governing permissions and
15 ** limitations under the License.
16 */
17 
18 #ifndef APREQ_MODULE_H
19 #define APREQ_MODULE_H
20 
21 #include "apreq_cookie.h"
22 #include "apreq_parser.h"
23 #include "apreq_error.h"
24 
25 #ifdef __cplusplus
26  extern "C" {
27 #endif
28 
41 typedef struct apreq_handle_t {
43  const struct apreq_module_t *module;
45  apr_pool_t *pool;
47  apr_bucket_alloc_t *bucket_alloc;
48 
50 
56 typedef struct apreq_module_t {
58  const char *name;
60  apr_uint32_t magic_number;
61 
63  apr_status_t (*jar)(apreq_handle_t *, const apr_table_t **);
65  apr_status_t (*args)(apreq_handle_t *, const apr_table_t **);
67  apr_status_t (*body)(apreq_handle_t *, const apr_table_t **);
68 
70  apreq_cookie_t *(*jar_get)(apreq_handle_t *, const char *);
72  apreq_param_t *(*args_get)(apreq_handle_t *, const char *);
74  apreq_param_t *(*body_get)(apreq_handle_t *, const char *);
75 
77  apr_status_t (*parser_get)(apreq_handle_t *, const apreq_parser_t **);
79  apr_status_t (*parser_set)(apreq_handle_t *, apreq_parser_t *);
81  apr_status_t (*hook_add)(apreq_handle_t *, apreq_hook_t *);
82 
84  apr_status_t (*brigade_limit_get)(apreq_handle_t *, apr_size_t *);
86  apr_status_t (*brigade_limit_set)(apreq_handle_t *, apr_size_t);
87 
89  apr_status_t (*read_limit_get)(apreq_handle_t *, apr_uint64_t *);
91  apr_status_t (*read_limit_set)(apreq_handle_t *, apr_uint64_t);
92 
94  apr_status_t (*temp_dir_get)(apreq_handle_t *, const char **);
96  apr_status_t (*temp_dir_set)(apreq_handle_t *, const char *);
97 
99 
100 
109 static APR_INLINE
110 unsigned apreq_module_status_is_error(apr_status_t s) {
111  switch (s) {
112  case APR_SUCCESS:
113  case APR_INCOMPLETE:
114  case APR_EINIT:
115  case APREQ_ERROR_NODATA:
118  return 0;
119  default:
120  return 1;
121  }
122 }
123 
124 
134 static APR_INLINE
135 apr_status_t apreq_jar(apreq_handle_t *req, const apr_table_t **t)
136 {
137  return req->module->jar(req,t);
138 }
139 
149 static APR_INLINE
150 apr_status_t apreq_args(apreq_handle_t *req, const apr_table_t **t)
151 {
152  return req->module->args(req,t);
153 }
154 
164 static APR_INLINE
165 apr_status_t apreq_body(apreq_handle_t *req, const apr_table_t **t)
166 {
167  return req->module->body(req, t);
168 }
169 
170 
179 static APR_INLINE
181 {
182  return req->module->jar_get(req, name);
183 }
184 
193 static APR_INLINE
195 {
196  return req->module->args_get(req, name);
197 }
198 
207 static APR_INLINE
209 {
210  return req->module->body_get(req, name);
211 }
212 
222 static APR_INLINE
224  const apreq_parser_t **parser)
225 {
226  return req->module->parser_get(req, parser);
227 }
228 
229 
238 static APR_INLINE
240  apreq_parser_t *parser)
241 {
242  return req->module->parser_set(req, parser);
243 }
244 
253 static APR_INLINE
254 apr_status_t apreq_hook_add(apreq_handle_t *req, apreq_hook_t *hook)
255 {
256  return req->module->hook_add(req, hook);
257 }
258 
259 
269 static APR_INLINE
271  apr_size_t bytes)
272 {
273  return req->module->brigade_limit_set(req, bytes);
274 }
275 
285 static APR_INLINE
287  apr_size_t *bytes)
288 {
289  return req->module->brigade_limit_get(req, bytes);
290 }
291 
301 static APR_INLINE
303  apr_uint64_t bytes)
304 {
305  return req->module->read_limit_set(req, bytes);
306 }
307 
317 static APR_INLINE
319  apr_uint64_t *bytes)
320 {
321  return req->module->read_limit_get(req, bytes);
322 }
323 
332 static APR_INLINE
333 apr_status_t apreq_temp_dir_set(apreq_handle_t *req, const char *path)
334 {
335  return req->module->temp_dir_set(req, path);
336 }
337 
348 static APR_INLINE
349 apr_status_t apreq_temp_dir_get(apreq_handle_t *req, const char **path)
350 {
351  return req->module->temp_dir_get(req, path);
352 }
353 
354 
355 
366 #define APREQ_MODULE(pre, mmn) const apreq_module_t \
367  pre##_module = { #pre, mmn, \
368  pre##_jar, pre##_args, pre##_body, \
369  pre##_jar_get, pre##_args_get, pre##_body_get, \
370  pre##_parser_get, pre##_parser_set, pre##_hook_add, \
371  pre##_brigade_limit_get, pre##_brigade_limit_set, \
372  pre##_read_limit_get, pre##_read_limit_set, \
373  pre##_temp_dir_get, pre##_temp_dir_set, \
374  }
375 
376 
389 
405  const char *query_string,
406  const char *cookie,
407  apreq_parser_t *parser,
408  apr_uint64_t read_limit,
409  apr_bucket_brigade *in);
410 
421 
431 #define apreq_cookie(req, name) apreq_jar_get(req, name)
432 
442 APREQ_DECLARE(apr_table_t *) apreq_params(apreq_handle_t *req, apr_pool_t *p);
443 
444 
451 APREQ_DECLARE(apr_table_t *)apreq_cookies(apreq_handle_t *req, apr_pool_t *p);
452 
453 #ifdef __cplusplus
454  }
455 #endif
456 
457 #endif /* APREQ_MODULE_H */
#define APREQ_DECLARE(d)
Definition: apreq.h:50
Error status codes.
#define APREQ_ERROR_NOPARSER
Definition: apreq_error.h:80
#define APREQ_ERROR_NOHEADER
Definition: apreq_error.h:78
#define APREQ_ERROR_NODATA
Definition: apreq_error.h:72
apreq_param_t * apreq_param(apreq_handle_t *req, const char *key)
static APR_INLINE unsigned apreq_module_status_is_error(apr_status_t s)
Definition: apreq_module.h:110
static APR_INLINE apr_status_t apreq_hook_add(apreq_handle_t *req, apreq_hook_t *hook)
Definition: apreq_module.h:254
apr_table_t * apreq_params(apreq_handle_t *req, apr_pool_t *p)
static APR_INLINE apr_status_t apreq_parser_get(apreq_handle_t *req, const apreq_parser_t **parser)
Definition: apreq_module.h:223
static APR_INLINE apr_status_t apreq_jar(apreq_handle_t *req, const apr_table_t **t)
Definition: apreq_module.h:135
apreq_handle_t * apreq_handle_cgi(apr_pool_t *pool)
static APR_INLINE apr_status_t apreq_temp_dir_get(apreq_handle_t *req, const char **path)
Definition: apreq_module.h:349
static APR_INLINE apreq_cookie_t * apreq_jar_get(apreq_handle_t *req, const char *name)
Definition: apreq_module.h:180
static APR_INLINE apr_status_t apreq_parser_set(apreq_handle_t *req, apreq_parser_t *parser)
Definition: apreq_module.h:239
apr_table_t * apreq_cookies(apreq_handle_t *req, apr_pool_t *p)
static APR_INLINE apreq_param_t * apreq_body_get(apreq_handle_t *req, const char *name)
Definition: apreq_module.h:208
static APR_INLINE apr_status_t apreq_read_limit_set(apreq_handle_t *req, apr_uint64_t bytes)
Definition: apreq_module.h:302
static APR_INLINE apr_status_t apreq_brigade_limit_set(apreq_handle_t *req, apr_size_t bytes)
Definition: apreq_module.h:270
struct apreq_module_t apreq_module_t
Vtable describing the necessary module functions.
static APR_INLINE apr_status_t apreq_read_limit_get(apreq_handle_t *req, apr_uint64_t *bytes)
Definition: apreq_module.h:318
apreq_handle_t * apreq_handle_custom(apr_pool_t *pool, const char *query_string, const char *cookie, apreq_parser_t *parser, apr_uint64_t read_limit, apr_bucket_brigade *in)
struct apreq_handle_t apreq_handle_t
static APR_INLINE apr_status_t apreq_brigade_limit_get(apreq_handle_t *req, apr_size_t *bytes)
Definition: apreq_module.h:286
static APR_INLINE apr_status_t apreq_args(apreq_handle_t *req, const apr_table_t **t)
Definition: apreq_module.h:150
static APR_INLINE apr_status_t apreq_body(apreq_handle_t *req, const apr_table_t **t)
Definition: apreq_module.h:165
static APR_INLINE apreq_param_t * apreq_args_get(apreq_handle_t *req, const char *name)
Definition: apreq_module.h:194
static APR_INLINE apr_status_t apreq_temp_dir_set(apreq_handle_t *req, const char *path)
Definition: apreq_module.h:333
Request body parser API.
Definition: apreq_module.h:41
apr_pool_t * pool
Definition: apreq_module.h:45
apr_bucket_alloc_t * bucket_alloc
Definition: apreq_module.h:47
const struct apreq_module_t * module
Definition: apreq_module.h:43
Definition: apreq_parser.h:83
Vtable describing the necessary module functions.
Definition: apreq_module.h:56
apr_status_t(* jar)(apreq_handle_t *, const apr_table_t **)
Definition: apreq_module.h:63
apr_status_t(* args)(apreq_handle_t *, const apr_table_t **)
Definition: apreq_module.h:65
apr_status_t(* read_limit_get)(apreq_handle_t *, apr_uint64_t *)
Definition: apreq_module.h:89
apr_status_t(* parser_get)(apreq_handle_t *, const apreq_parser_t **)
Definition: apreq_module.h:77
apr_status_t(* temp_dir_get)(apreq_handle_t *, const char **)
Definition: apreq_module.h:94
apr_status_t(* brigade_limit_set)(apreq_handle_t *, apr_size_t)
Definition: apreq_module.h:86
apreq_param_t *(* body_get)(apreq_handle_t *, const char *)
Definition: apreq_module.h:74
apr_status_t(* read_limit_set)(apreq_handle_t *, apr_uint64_t)
Definition: apreq_module.h:91
apreq_param_t *(* args_get)(apreq_handle_t *, const char *)
Definition: apreq_module.h:72
apr_status_t(* brigade_limit_get)(apreq_handle_t *, apr_size_t *)
Definition: apreq_module.h:84
apr_status_t(* temp_dir_set)(apreq_handle_t *, const char *)
Definition: apreq_module.h:96
apr_status_t(* body)(apreq_handle_t *, const apr_table_t **)
Definition: apreq_module.h:67
apr_status_t(* hook_add)(apreq_handle_t *, apreq_hook_t *)
Definition: apreq_module.h:81
apr_uint32_t magic_number
Definition: apreq_module.h:60
apr_status_t(* parser_set)(apreq_handle_t *, apreq_parser_t *)
Definition: apreq_module.h:79
apreq_cookie_t *(* jar_get)(apreq_handle_t *, const char *)
Definition: apreq_module.h:70
const char * name
Definition: apreq_module.h:58
Definition: apreq_param.h:37
Definition: apreq_parser.h:93
libapreq2-2.17/docs/html/apreq__module__apache2_8h_source.html0000644000175000017500000002357114277402434024052 0ustar jortonjorton libapreq2-2.17: module/apache2/apreq_module_apache2.h Source File
apreq_module_apache2.h
1 /*
2 ** Licensed to the Apache Software Foundation (ASF) under one or more
3 ** contributor license agreements. See the NOTICE file distributed with
4 ** this work for additional information regarding copyright ownership.
5 ** The ASF licenses this file to You under the Apache License, Version 2.0
6 ** (the "License"); you may not use this file except in compliance with
7 ** the License. You may obtain a copy of the License at
8 **
9 ** http://www.apache.org/licenses/LICENSE-2.0
10 **
11 ** Unless required by applicable law or agreed to in writing, software
12 ** distributed under the License is distributed on an "AS IS" BASIS,
13 ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 ** See the License for the specific language governing permissions and
15 ** limitations under the License.
16 */
17 
18 #ifndef APREQ_APACHE2_H
19 #define APREQ_APACHE2_H
20 
21 #include "apreq_module.h"
22 #include "apr_optional.h"
23 #include <httpd.h>
24 
25 #ifdef __cplusplus
26  extern "C" {
27 #endif
28 
29 
143 
148 #ifdef WIN32
149 typedef __declspec(dllexport) apreq_handle_t *
150 (__stdcall apr_OFN_apreq_handle_apache2_t) (request_rec *r);
151 #else
152 APR_DECLARE_OPTIONAL_FN(APREQ_DECLARE(apreq_handle_t *),
153  apreq_handle_apache2, (request_rec *r));
154 #endif
155 
166 #define APREQ_FILTER_NAME "apreq2"
167 
174 #define APREQ_APACHE2_MMN 20101207
175 
178 #ifdef __cplusplus
179  }
180 #endif
181 
182 #endif
#define APREQ_DECLARE(d)
Definition: apreq.h:50
Module API.
apreq_handle_t * apreq_handle_apache2(request_rec *r)
Definition: apreq_module.h:41
libapreq2-2.17/docs/html/apreq__module__apache_8h_source.html0000644000175000017500000002061014277402434023757 0ustar jortonjorton libapreq2-2.17: module/apache/apreq_module_apache.h Source File
apreq_module_apache.h
1 /*
2 ** Licensed to the Apache Software Foundation (ASF) under one or more
3 ** contributor license agreements. See the NOTICE file distributed with
4 ** this work for additional information regarding copyright ownership.
5 ** The ASF licenses this file to You under the Apache License, Version 2.0
6 ** (the "License"); you may not use this file except in compliance with
7 ** the License. You may obtain a copy of the License at
8 **
9 ** http://www.apache.org/licenses/LICENSE-2.0
10 **
11 ** Unless required by applicable law or agreed to in writing, software
12 ** distributed under the License is distributed on an "AS IS" BASIS,
13 ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 ** See the License for the specific language governing permissions and
15 ** limitations under the License.
16 */
17 
18 #ifndef APREQ_APACHE_H
19 #define APREQ_APACHE_H
20 
21 #include "apreq_module.h"
22 #include <httpd.h>
23 
24 #ifdef __cplusplus
25  extern "C" {
26 #endif
27 
32 APREQ_DECLARE(apreq_handle_t*) apreq_handle_apache(request_rec *r);
33 
34 
35 APREQ_DECLARE(apr_pool_t *) apreq_handle_apache_pool(apreq_handle_t *req);
36 
37 APREQ_DECLARE(apr_bucket_alloc_t *)
38  apreq_handle_apache_bucket_alloc(apreq_handle_t *req);
39 
40 #define APREQ_APACHE_MMN 20050712
41 
42 #ifdef __cplusplus
43  }
44 #endif
45 
46 #endif
#define APREQ_DECLARE(d)
Definition: apreq.h:50
Module API.
Definition: apreq_module.h:41
libapreq2-2.17/docs/html/apreq__param_8h.html0000644000175000017500000007657214277402434020574 0ustar jortonjorton libapreq2-2.17: include/apreq_param.h File Reference
apreq_param.h File Reference

Request parsing and parameter API. More...

#include "apreq.h"
#include "apr_buckets.h"

Go to the source code of this file.

Data Structures

struct  apreq_param_t
 

Typedefs

typedef struct apreq_param_t apreq_param_t
 

Functions

static APR_INLINE unsigned apreq_param_is_tainted (const apreq_param_t *p)
 
static APR_INLINE void apreq_param_tainted_on (apreq_param_t *p)
 
static APR_INLINE void apreq_param_tainted_off (apreq_param_t *p)
 
static APR_INLINE apreq_charset_t apreq_param_charset_set (apreq_param_t *p, apreq_charset_t c)
 
static APR_INLINE apreq_charset_t apreq_param_charset_get (apreq_param_t *p)
 
static APR_INLINE apreq_param_tapreq_value_to_param (const char *val)
 
apreq_param_tapreq_param_make (apr_pool_t *p, const char *name, const apr_size_t nlen, const char *val, const apr_size_t vlen)
 
apr_status_t apreq_param_decode (apreq_param_t **param, apr_pool_t *pool, const char *word, apr_size_t nlen, apr_size_t vlen)
 
char * apreq_param_encode (apr_pool_t *pool, const apreq_param_t *param)
 
apr_status_t apreq_parse_query_string (apr_pool_t *pool, apr_table_t *t, const char *qs)
 
apr_array_header_t * apreq_params_as_array (apr_pool_t *p, const apr_table_t *t, const char *key)
 
const char * apreq_params_as_string (apr_pool_t *p, const apr_table_t *t, const char *key, apreq_join_t mode)
 
const apr_table_t * apreq_uploads (const apr_table_t *body, apr_pool_t *pool)
 
const apreq_param_tapreq_upload (const apr_table_t *body, const char *name)
 

Detailed Description

Request parsing and parameter API.

Typedef Documentation

◆ apreq_param_t

typedef struct apreq_param_t apreq_param_t

Common data structure for params and file uploads

Function Documentation

◆ apreq_param_charset_get()

static APR_INLINE apreq_charset_t apreq_param_charset_get ( apreq_param_t p)
static

Gets the character encoding for this parameter.

◆ apreq_param_charset_set()

static APR_INLINE apreq_charset_t apreq_param_charset_set ( apreq_param_t p,
apreq_charset_t  c 
)
static

Sets the character encoding for this parameter.

◆ apreq_param_decode()

apr_status_t apreq_param_decode ( apreq_param_t **  param,
apr_pool_t *  pool,
const char *  word,
apr_size_t  nlen,
apr_size_t  vlen 
)

Url-decodes a name=value pair into a param.

Parameters
parampoints to the decoded parameter on success
poolPool from which the param is allocated.
wordStart of the name=value pair.
nlenLength of urlencoded name.
vlenLength of urlencoded value.
Returns
APR_SUCCESS on success.
APREQ_ERROR_BADSEQ or APREQ_ERROR_BADCHAR on malformed input.
Remarks
Unless vlen == 0, this function assumes there is exactly one character ('=') which separates the pair.

◆ apreq_param_encode()

char* apreq_param_encode ( apr_pool_t *  pool,
const apreq_param_t param 
)

Url-encodes the param into a name-value pair.

Parameters
poolPool which allocates the returned string.
paramParam to encode.
Returns
name-value pair representing the param.

◆ apreq_param_is_tainted()

static APR_INLINE unsigned apreq_param_is_tainted ( const apreq_param_t p)
static
Returns
1 if the taint flag is set, 0 otherwise.

◆ apreq_param_make()

apreq_param_t* apreq_param_make ( apr_pool_t *  p,
const char *  name,
const apr_size_t  nlen,
const char *  val,
const apr_size_t  vlen 
)

creates a param from name/value information

◆ apreq_param_tainted_off()

static APR_INLINE void apreq_param_tainted_off ( apreq_param_t p)
static

Turns off the taint flag.

◆ apreq_param_tainted_on()

static APR_INLINE void apreq_param_tainted_on ( apreq_param_t p)
static

Sets the tainted flag.

◆ apreq_params_as_array()

apr_array_header_t* apreq_params_as_array ( apr_pool_t *  p,
const apr_table_t *  t,
const char *  key 
)

Returns an array of parameters (apreq_param_t *) matching the given key. The key is case-insensitive.

Parameters
pAllocates the returned array.
tthe parameter table returned by apreq_args(), apreq_body() or apreq_params()
keyNull-terminated search key, case insensitive. key==NULL fetches all parameters.
Returns
an array of apreq_param_t* (pointers)
Remarks
Also parses the request if necessary.

◆ apreq_params_as_string()

const char* apreq_params_as_string ( apr_pool_t *  p,
const apr_table_t *  t,
const char *  key,
apreq_join_t  mode 
)

Returns a ", " -joined string containing all parameters for the requested key, an empty string if none are found. The key is case-insensitive.

Parameters
pAllocates the return string.
tthe parameter table returned by apreq_args(), apreq_body() or apreq_params()
keyNull-terminated parameter name, case insensitive. key==NULL fetches all values.
modeJoin type- see apreq_join().
Returns
the joined string or NULL on error
Remarks
Also parses the request if necessary.

◆ apreq_parse_query_string()

apr_status_t apreq_parse_query_string ( apr_pool_t *  pool,
apr_table_t *  t,
const char *  qs 
)

Parse a url-encoded string into a param table.

Parameters
poolpool used to allocate the param data.
ttable to which the params are added.
qsQuery string to url-decode.
Returns
APR_SUCCESS if successful, error otherwise.
Remarks
This function uses [&;] as the set of tokens to delineate words, and will treat a word w/o '=' as a name-value pair with value-length = 0.

◆ apreq_upload()

const apreq_param_t* apreq_upload ( const apr_table_t *  body,
const char *  name 
)

Returns the first param in req->body which has both param->v.name matching key (case insensitive) and param->upload != NULL.

Parameters
bodyparameter table returned by apreq_body() or apreq_params()
nameParameter name. key == NULL returns first upload.
Returns
Corresponding upload, NULL if none found.
Remarks
Will parse the request as necessary.

◆ apreq_uploads()

const apr_table_t* apreq_uploads ( const apr_table_t *  body,
apr_pool_t *  pool 
)

Returns a table of all params in req->body with non-NULL upload brigades.

Parameters
bodyparameter table returned by apreq_body() or apreq_params()
poolPool which allocates the table struct.
Returns
Upload table.
Remarks
Will parse the request if necessary.

◆ apreq_value_to_param()

static APR_INLINE apreq_param_t* apreq_value_to_param ( const char *  val)
static

Upgrades args and body table values to apreq_param_t structs.

libapreq2-2.17/docs/html/apreq__param_8h_source.html0000644000175000017500000010214214277402434022133 0ustar jortonjorton libapreq2-2.17: include/apreq_param.h Source File
apreq_param.h
Go to the documentation of this file.
1 /*
2 ** Licensed to the Apache Software Foundation (ASF) under one or more
3 ** contributor license agreements. See the NOTICE file distributed with
4 ** this work for additional information regarding copyright ownership.
5 ** The ASF licenses this file to You under the Apache License, Version 2.0
6 ** (the "License"); you may not use this file except in compliance with
7 ** the License. You may obtain a copy of the License at
8 **
9 ** http://www.apache.org/licenses/LICENSE-2.0
10 **
11 ** Unless required by applicable law or agreed to in writing, software
12 ** distributed under the License is distributed on an "AS IS" BASIS,
13 ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 ** See the License for the specific language governing permissions and
15 ** limitations under the License.
16 */
17 
18 #ifndef APREQ_PARAM_H
19 #define APREQ_PARAM_H
20 
21 #include "apreq.h"
22 #include "apr_buckets.h"
23 
24 #ifdef __cplusplus
25 extern "C" {
26 #endif
27 
28 
37 typedef struct apreq_param_t {
38  apr_table_t *info;
39  apr_bucket_brigade *upload;
40  unsigned flags;
41  const apreq_value_t v;
43 
44 
46 static APR_INLINE
48  return APREQ_FLAGS_GET(p->flags, APREQ_TAINTED);
49 }
50 
52 static APR_INLINE
54  APREQ_FLAGS_ON(p->flags, APREQ_TAINTED);
55 }
56 
58 static APR_INLINE
60  APREQ_FLAGS_OFF(p->flags, APREQ_TAINTED);
61 }
62 
64 static APR_INLINE
67  APREQ_FLAGS_GET(p->flags, APREQ_CHARSET);
68  APREQ_FLAGS_SET(p->flags, APREQ_CHARSET, c);
69  return old;
70 }
71 
73 static APR_INLINE
75  return (apreq_charset_t)APREQ_FLAGS_GET(p->flags, APREQ_CHARSET);
76 }
77 
78 
80 static APR_INLINE
82 {
83  union { const char *in; char *out; } deconst;
84 
85  deconst.in = val;
87  apreq_attr_to_type(apreq_value_t, data, deconst.out));
88 }
89 
90 
91 
94  const char *name,
95  const apr_size_t nlen,
96  const char *val,
97  const apr_size_t vlen);
98 
116  apr_pool_t *pool,
117  const char *word,
118  apr_size_t nlen,
119  apr_size_t vlen);
120 
127 APREQ_DECLARE(char *) apreq_param_encode(apr_pool_t *pool,
128  const apreq_param_t *param);
129 
141 APREQ_DECLARE(apr_status_t) apreq_parse_query_string(apr_pool_t *pool,
142  apr_table_t *t,
143  const char *qs);
144 
145 
157 APREQ_DECLARE(apr_array_header_t *) apreq_params_as_array(apr_pool_t *p,
158  const apr_table_t *t,
159  const char *key);
160 
175 APREQ_DECLARE(const char *) apreq_params_as_string(apr_pool_t *p,
176  const apr_table_t *t,
177  const char *key,
178  apreq_join_t mode);
179 
187 APREQ_DECLARE(const apr_table_t *) apreq_uploads(const apr_table_t *body,
188  apr_pool_t *pool);
189 
198 APREQ_DECLARE(const apreq_param_t *) apreq_upload(const apr_table_t *body,
199  const char *name);
200 
201 
202 #ifdef __cplusplus
203 }
204 #endif
205 
206 #endif /* APREQ_PARAM_H */
207 
208 
209 
Main header file...
#define APREQ_DECLARE(d)
Definition: apreq.h:50
#define APREQ_FLAGS_GET(f, name)
Definition: apreq.h:126
#define APREQ_FLAGS_OFF(f, name)
Definition: apreq.h:118
#define apreq_attr_to_type(T, A, P)
Definition: apreq.h:265
apreq_charset_t
Definition: apreq.h:205
#define APREQ_FLAGS_SET(f, name, value)
Definition: apreq.h:133
apreq_join_t
Definition: apreq.h:214
#define APREQ_FLAGS_ON(f, name)
Definition: apreq.h:122
apr_status_t apreq_parse_query_string(apr_pool_t *pool, apr_table_t *t, const char *qs)
const char * apreq_params_as_string(apr_pool_t *p, const apr_table_t *t, const char *key, apreq_join_t mode)
static APR_INLINE apreq_param_t * apreq_value_to_param(const char *val)
Definition: apreq_param.h:81
const apreq_param_t * apreq_upload(const apr_table_t *body, const char *name)
apreq_param_t * apreq_param_make(apr_pool_t *p, const char *name, const apr_size_t nlen, const char *val, const apr_size_t vlen)
char * apreq_param_encode(apr_pool_t *pool, const apreq_param_t *param)
apr_array_header_t * apreq_params_as_array(apr_pool_t *p, const apr_table_t *t, const char *key)
static APR_INLINE void apreq_param_tainted_on(apreq_param_t *p)
Definition: apreq_param.h:53
static APR_INLINE apreq_charset_t apreq_param_charset_get(apreq_param_t *p)
Definition: apreq_param.h:74
static APR_INLINE apreq_charset_t apreq_param_charset_set(apreq_param_t *p, apreq_charset_t c)
Definition: apreq_param.h:65
struct apreq_param_t apreq_param_t
const apr_table_t * apreq_uploads(const apr_table_t *body, apr_pool_t *pool)
static APR_INLINE void apreq_param_tainted_off(apreq_param_t *p)
Definition: apreq_param.h:59
apr_status_t apreq_param_decode(apreq_param_t **param, apr_pool_t *pool, const char *word, apr_size_t nlen, apr_size_t vlen)
static APR_INLINE unsigned apreq_param_is_tainted(const apreq_param_t *p)
Definition: apreq_param.h:47
Definition: apreq_param.h:37
apr_bucket_brigade * upload
Definition: apreq_param.h:39
unsigned flags
Definition: apreq_param.h:40
apr_table_t * info
Definition: apreq_param.h:38
const apreq_value_t v
Definition: apreq_param.h:41
libapreq's pre-extensible string type
Definition: apreq.h:235
libapreq2-2.17/docs/html/apreq__parser_8h.html0000644000175000017500000012342114277402434020752 0ustar jortonjorton libapreq2-2.17: include/apreq_parser.h File Reference
apreq_parser.h File Reference

Request body parser API. More...

#include "apreq_param.h"

Go to the source code of this file.

Data Structures

struct  apreq_hook_t
 
struct  apreq_parser_t
 
struct  apreq_hook_find_param_ctx_t
 

Macros

#define APREQ_PARSER_ARGS
 
#define APREQ_HOOK_ARGS
 
#define APREQ_DECLARE_PARSER(f)
 
#define APREQ_DECLARE_HOOK(f)
 

Typedefs

typedef struct apreq_hook_t apreq_hook_t
 
typedef struct apreq_parser_t apreq_parser_t
 
typedef apr_status_t(* apreq_parser_function_t) (APREQ_PARSER_ARGS)
 
typedef apr_status_t(* apreq_hook_function_t) (APREQ_HOOK_ARGS)
 
typedef struct apreq_hook_find_param_ctx_t apreq_hook_find_param_ctx_t
 

Functions

static APR_INLINE apr_status_t apreq_parser_run (struct apreq_parser_t *psr, apr_table_t *t, apr_bucket_brigade *bb)
 
static APR_INLINE apr_status_t apreq_hook_run (struct apreq_hook_t *h, apreq_param_t *param, apr_bucket_brigade *bb)
 
 APREQ_DECLARE_PARSER (apreq_parse_headers)
 
 APREQ_DECLARE_PARSER (apreq_parse_urlencoded)
 
 APREQ_DECLARE_PARSER (apreq_parse_multipart)
 
 APREQ_DECLARE_PARSER (apreq_parse_generic)
 
 APREQ_DECLARE_HOOK (apreq_hook_apr_xml_parser)
 
apreq_parser_tapreq_parser_make (apr_pool_t *pool, apr_bucket_alloc_t *ba, const char *content_type, apreq_parser_function_t pfn, apr_size_t brigade_limit, const char *temp_dir, apreq_hook_t *hook, void *ctx)
 
apreq_hook_tapreq_hook_make (apr_pool_t *pool, apreq_hook_function_t hook, apreq_hook_t *next, void *ctx)
 
apr_status_t apreq_parser_add_hook (apreq_parser_t *p, apreq_hook_t *h)
 
apreq_parser_function_t apreq_parser (const char *enctype)
 
apr_status_t apreq_register_parser (const char *enctype, apreq_parser_function_t pfn)
 
 APREQ_DECLARE_HOOK (apreq_hook_disable_uploads)
 
 APREQ_DECLARE_HOOK (apreq_hook_discard_brigade)
 
 APREQ_DECLARE_HOOK (apreq_hook_find_param)
 

Detailed Description

Request body parser API.

Macro Definition Documentation

◆ APREQ_DECLARE_HOOK

#define APREQ_DECLARE_HOOK (   f)
Value:
APREQ_DECLARE_NONSTD(apr_status_t) \
#define APREQ_DECLARE_NONSTD(d)
Definition: apreq.h:60
#define APREQ_HOOK_ARGS
Definition: apreq_parser.h:52

Declares an API hook.

◆ APREQ_DECLARE_PARSER

#define APREQ_DECLARE_PARSER (   f)
Value:
APREQ_DECLARE_NONSTD(apr_status_t) \
#define APREQ_PARSER_ARGS
Definition: apreq_parser.h:47

Declares a API parser.

◆ APREQ_HOOK_ARGS

#define APREQ_HOOK_ARGS
Value:
apreq_hook_t *hook, \
apreq_param_t *param, \
apr_bucket_brigade *bb
Definition: apreq_parser.h:83

Hook arguments

◆ APREQ_PARSER_ARGS

#define APREQ_PARSER_ARGS
Value:
apreq_parser_t *parser, \
apr_table_t *t, \
apr_bucket_brigade *bb
Definition: apreq_parser.h:93

Parser arguments.

Typedef Documentation

◆ apreq_hook_find_param_ctx_t

Context struct for the apreq_hook_find_param hook.

◆ apreq_hook_function_t

typedef apr_status_t(* apreq_hook_function_t) (APREQ_HOOK_ARGS)

The callback function of a hook. See apreq_hook_t.

◆ apreq_hook_t

typedef struct apreq_hook_t apreq_hook_t

A hook is called by the parser whenever data arrives in a file upload parameter of the request body. You may associate any number of hooks with a parser instance with apreq_parser_add_hook().

◆ apreq_parser_function_t

typedef apr_status_t(* apreq_parser_function_t) (APREQ_PARSER_ARGS)

The callback function implementing a request body parser.

◆ apreq_parser_t

A request body parser instance.

Function Documentation

◆ APREQ_DECLARE_HOOK() [1/4]

APREQ_DECLARE_HOOK ( apreq_hook_apr_xml_parser  )

apr_xml_parser hook. It will parse until EOS appears. The parsed document isn't available until parsing has completed successfully. The hook's ctx pointer may be cast as (apr_xml_doc **) to retrieve the parsed document.

◆ APREQ_DECLARE_HOOK() [2/4]

APREQ_DECLARE_HOOK ( apreq_hook_disable_uploads  )

Returns APREQ_ERROR_GENERAL. Effectively disables mfd parser if a file-upload field is present.

◆ APREQ_DECLARE_HOOK() [3/4]

APREQ_DECLARE_HOOK ( apreq_hook_discard_brigade  )

Calls apr_brigade_cleanup on the incoming brigade after passing the brigade to any subsequent hooks.

◆ APREQ_DECLARE_HOOK() [4/4]

APREQ_DECLARE_HOOK ( apreq_hook_find_param  )

Special purpose utility for locating a parameter during parsing. The hook's ctx should be initialized to an apreq_hook_find_param_ctx_t *, with the name attribute set to the sought parameter name, the param attribute set to NULL, and the prev attribute set to the address of the previous hook. The param attribute will be reassigned to the first param found, and once that happens this hook is immediately removed from the chain.

Remarks
When used, this should always be the first hook invoked, so add it manually with ctx->prev = &parser->hook instead of using apreq_parser_add_hook.

◆ APREQ_DECLARE_PARSER() [1/4]

APREQ_DECLARE_PARSER ( apreq_parse_generic  )

Generic parser. No table entries will be added to the req->body table by this parser. The parser creates a dummy apreq_param_t to pass to any configured hooks. If no hooks are configured, the dummy param's bb slot will contain a copy of the request body. It can be retrieved by casting the parser's ctx pointer to (apreq_param_t **).

◆ APREQ_DECLARE_PARSER() [2/4]

APREQ_DECLARE_PARSER ( apreq_parse_headers  )

RFC 822 Header parser. It will reject all data after the first CRLF CRLF sequence (an empty line). See apreq_parser_run() for more info on rejected data.

◆ APREQ_DECLARE_PARSER() [3/4]

APREQ_DECLARE_PARSER ( apreq_parse_multipart  )

RFC 2388 multipart/form-data (and XForms 1.0 multipart/related) parser. It will reject any buckets representing preamble and postamble text (this is normal behavior, not an error condition). See apreq_parser_run() for more info on rejected data.

◆ APREQ_DECLARE_PARSER() [4/4]

APREQ_DECLARE_PARSER ( apreq_parse_urlencoded  )

RFC 2396 application/x-www-form-urlencoded parser.

◆ apreq_hook_make()

apreq_hook_t* apreq_hook_make ( apr_pool_t *  pool,
apreq_hook_function_t  hook,
apreq_hook_t next,
void *  ctx 
)

Construct a hook.

Parameters
poolused to allocate the hook.
hookThe hook function.
nextList of other hooks for this hook to call on.
ctxHook's internal scratch pad.
Returns
New hook.

◆ apreq_hook_run()

static APR_INLINE apr_status_t apreq_hook_run ( struct apreq_hook_t h,
apreq_param_t param,
apr_bucket_brigade *  bb 
)
static

Run the hook with the current parameter and the incoming bucket brigade. The hook may modify the brigade if necessary. Once all hooks have completed, the contents of the brigade will be added to the parameter's bb attribute.

Returns
APR_SUCCESS on success. All other values represent errors.

◆ apreq_parser()

apreq_parser_function_t apreq_parser ( const char *  enctype)

Fetch the default parser function associated with the given MIME type.

Parameters
enctypeThe desired enctype (can also be a full "Content-Type" header).
Returns
The parser function, or NULL if the enctype is unrecognized.

◆ apreq_parser_add_hook()

apr_status_t apreq_parser_add_hook ( apreq_parser_t p,
apreq_hook_t h 
)

Add a new hook to the end of the parser's hook list.

Parameters
pParser.
hHook to append.

◆ apreq_parser_make()

apreq_parser_t* apreq_parser_make ( apr_pool_t *  pool,
apr_bucket_alloc_t *  ba,
const char *  content_type,
apreq_parser_function_t  pfn,
apr_size_t  brigade_limit,
const char *  temp_dir,
apreq_hook_t hook,
void *  ctx 
)

Construct a parser.

Parameters
poolPool used to allocate the parser.
babucket allocator used to create bucket brigades
content_typeContent-type that this parser can deal with.
pfnThe parser function.
brigade_limitthe maximum in-memory bytes a brigade may use
temp_dirthe directory used by the parser for temporary files
hookHooks to associate this parser with.
ctxParser's internal scratch pad.
Returns
New parser.

◆ apreq_parser_run()

static APR_INLINE apr_status_t apreq_parser_run ( struct apreq_parser_t psr,
apr_table_t *  t,
apr_bucket_brigade *  bb 
)
static

Parse the incoming brigade into a table. Parsers normally consume all the buckets of the brigade during parsing. However parsers may leave "rejected" data in the brigade, even during a successful parse, so callers may need to clean up the brigade themselves (in particular, rejected buckets should not be passed back to the parser again).

Remarks
bb == NULL is valid: the parser should return its public status: APR_INCOMPLETE, APR_SUCCESS, or an error code.

◆ apreq_register_parser()

apr_status_t apreq_register_parser ( const char *  enctype,
apreq_parser_function_t  pfn 
)

Register a new parsing function with a MIME enctype. Registered parsers are added to apreq_parser()'s internal lookup table.

Parameters
enctypeThe MIME type.
pfnThe function to use during parsing. Setting parser == NULL will remove an existing parser.
Returns
APR_SUCCESS or error.
libapreq2-2.17/docs/html/apreq__parser_8h_source.html0000644000175000017500000011233114277402434022330 0ustar jortonjorton libapreq2-2.17: include/apreq_parser.h Source File
apreq_parser.h
Go to the documentation of this file.
1 /*
2 ** Licensed to the Apache Software Foundation (ASF) under one or more
3 ** contributor license agreements. See the NOTICE file distributed with
4 ** this work for additional information regarding copyright ownership.
5 ** The ASF licenses this file to You under the Apache License, Version 2.0
6 ** (the "License"); you may not use this file except in compliance with
7 ** the License. You may obtain a copy of the License at
8 **
9 ** http://www.apache.org/licenses/LICENSE-2.0
10 **
11 ** Unless required by applicable law or agreed to in writing, software
12 ** distributed under the License is distributed on an "AS IS" BASIS,
13 ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 ** See the License for the specific language governing permissions and
15 ** limitations under the License.
16 */
17 
18 #ifndef APREQ_PARSERS_H
19 #define APREQ_PARSERS_H
20 /* These structs are defined below */
21 
22 #include "apreq_param.h"
23 
24 #ifdef __cplusplus
25 extern "C" {
26 #endif /* __cplusplus */
27 
39 typedef struct apreq_hook_t apreq_hook_t;
40 
44 typedef struct apreq_parser_t apreq_parser_t;
45 
47 #define APREQ_PARSER_ARGS apreq_parser_t *parser, \
48  apr_table_t *t, \
49  apr_bucket_brigade *bb
50 
52 #define APREQ_HOOK_ARGS apreq_hook_t *hook, \
53  apreq_param_t *param, \
54  apr_bucket_brigade *bb
55 
59 typedef apr_status_t (*apreq_parser_function_t)(APREQ_PARSER_ARGS);
60 
64 typedef apr_status_t (*apreq_hook_function_t)(APREQ_HOOK_ARGS);
65 
69 #define APREQ_DECLARE_PARSER(f) APREQ_DECLARE_NONSTD(apr_status_t) \
70  f (APREQ_PARSER_ARGS)
71 
75 #define APREQ_DECLARE_HOOK(f) APREQ_DECLARE_NONSTD(apr_status_t) \
76  f (APREQ_HOOK_ARGS)
77 
83 struct apreq_hook_t {
86  apr_pool_t *pool;
87  void *ctx;
88 };
89 
97  const char *content_type;
99  apr_pool_t *pool;
101  apr_bucket_alloc_t *bucket_alloc;
103  apr_size_t brigade_limit;
105  const char *temp_dir;
109  void *ctx;
110 };
111 
112 
123 static APR_INLINE
124 apr_status_t apreq_parser_run(struct apreq_parser_t *psr, apr_table_t *t,
125  apr_bucket_brigade *bb)
126 {
127  return psr->parser(psr, t, bb);
128 }
129 
137 static APR_INLINE
138 apr_status_t apreq_hook_run(struct apreq_hook_t *h, apreq_param_t *param,
139  apr_bucket_brigade *bb)
140 {
141  return h->hook(h, param, bb);
142 }
143 
144 
150 APREQ_DECLARE_PARSER(apreq_parse_headers);
151 
155 APREQ_DECLARE_PARSER(apreq_parse_urlencoded);
156 
163 APREQ_DECLARE_PARSER(apreq_parse_multipart);
164 
173 APREQ_DECLARE_PARSER(apreq_parse_generic);
174 
182 APREQ_DECLARE_HOOK(apreq_hook_apr_xml_parser);
183 
198  apr_bucket_alloc_t *ba,
199  const char *content_type,
201  apr_size_t brigade_limit,
202  const char *temp_dir,
203  apreq_hook_t *hook,
204  void *ctx);
205 
217  apreq_hook_t *next,
218  void *ctx);
219 
220 
228  apreq_hook_t *h);
229 
230 
238 
239 
252 APREQ_DECLARE(apr_status_t) apreq_register_parser(const char *enctype,
254 
255 
261 APREQ_DECLARE_HOOK(apreq_hook_disable_uploads);
262 
267 APREQ_DECLARE_HOOK(apreq_hook_discard_brigade);
268 
273  const char *name;
274  apreq_param_t *param;
275  apreq_hook_t *prev;
277 
278 
293 APREQ_DECLARE_HOOK(apreq_hook_find_param);
294 
295 
296 #ifdef __cplusplus
297 }
298 
299 #endif
300 #endif /* APREQ_PARSERS_H */
#define APREQ_DECLARE(d)
Definition: apreq.h:50
Request parsing and parameter API.
static APR_INLINE apr_status_t apreq_hook_run(struct apreq_hook_t *h, apreq_param_t *param, apr_bucket_brigade *bb)
Definition: apreq_parser.h:138
static APR_INLINE apr_status_t apreq_parser_run(struct apreq_parser_t *psr, apr_table_t *t, apr_bucket_brigade *bb)
Definition: apreq_parser.h:124
apreq_hook_t * apreq_hook_make(apr_pool_t *pool, apreq_hook_function_t hook, apreq_hook_t *next, void *ctx)
apreq_parser_t * apreq_parser_make(apr_pool_t *pool, apr_bucket_alloc_t *ba, const char *content_type, apreq_parser_function_t pfn, apr_size_t brigade_limit, const char *temp_dir, apreq_hook_t *hook, void *ctx)
apr_status_t apreq_register_parser(const char *enctype, apreq_parser_function_t pfn)
#define APREQ_HOOK_ARGS
Definition: apreq_parser.h:52
apr_status_t(* apreq_hook_function_t)(APREQ_HOOK_ARGS)
Definition: apreq_parser.h:64
apreq_parser_function_t apreq_parser(const char *enctype)
#define APREQ_DECLARE_PARSER(f)
Definition: apreq_parser.h:69
apr_status_t apreq_parser_add_hook(apreq_parser_t *p, apreq_hook_t *h)
struct apreq_hook_find_param_ctx_t apreq_hook_find_param_ctx_t
#define APREQ_DECLARE_HOOK(f)
Definition: apreq_parser.h:75
#define APREQ_PARSER_ARGS
Definition: apreq_parser.h:47
apr_status_t(* apreq_parser_function_t)(APREQ_PARSER_ARGS)
Definition: apreq_parser.h:59
Definition: apreq_parser.h:272
Definition: apreq_parser.h:83
apreq_hook_t * next
Definition: apreq_parser.h:85
apr_pool_t * pool
Definition: apreq_parser.h:86
void * ctx
Definition: apreq_parser.h:87
apreq_hook_function_t hook
Definition: apreq_parser.h:84
Definition: apreq_param.h:37
Definition: apreq_parser.h:93
apr_size_t brigade_limit
Definition: apreq_parser.h:103
const char * content_type
Definition: apreq_parser.h:97
apr_pool_t * pool
Definition: apreq_parser.h:99
const char * temp_dir
Definition: apreq_parser.h:105
void * ctx
Definition: apreq_parser.h:109
apreq_parser_function_t parser
Definition: apreq_parser.h:95
apreq_hook_t * hook
Definition: apreq_parser.h:107
apr_bucket_alloc_t * bucket_alloc
Definition: apreq_parser.h:101
libapreq2-2.17/docs/html/apreq__util_8h.html0000644000175000017500000013773214277402434020445 0ustar jortonjorton libapreq2-2.17: include/apreq_util.h File Reference
apreq_util.h File Reference

Utility functions for apreq. More...

#include "apr_file_io.h"
#include "apr_buckets.h"
#include "apreq.h"

Go to the source code of this file.

Functions

char * apreq_join (apr_pool_t *p, const char *sep, const apr_array_header_t *arr, apreq_join_t mode)
 
apr_ssize_t apreq_index (const char *hay, apr_size_t hlen, const char *ndl, apr_size_t nlen, const apreq_match_t type)
 
apr_size_t apreq_quote (char *dest, const char *src, const apr_size_t slen)
 
apr_size_t apreq_quote_once (char *dest, const char *src, const apr_size_t slen)
 
apr_size_t apreq_encode (char *dest, const char *src, const apr_size_t slen)
 
apr_size_t apreq_cp1252_to_utf8 (char *dest, const char *src, apr_size_t slen)
 
apreq_charset_t apreq_charset_divine (const char *src, apr_size_t slen)
 
apr_status_t apreq_decode (char *dest, apr_size_t *dlen, const char *src, apr_size_t slen)
 
apr_status_t apreq_decodev (char *dest, apr_size_t *dlen, struct iovec *v, int nelts)
 
static APR_INLINE char * apreq_escape (apr_pool_t *p, const char *src, const apr_size_t slen)
 
static APR_INLINE apr_ssize_t apreq_unescape (char *str)
 
apr_int64_t apreq_atoi64f (const char *s)
 
apr_int64_t apreq_atoi64t (const char *s)
 
apr_status_t apreq_brigade_fwrite (apr_file_t *f, apr_off_t *wlen, apr_bucket_brigade *bb)
 
apr_status_t apreq_file_mktemp (apr_file_t **fp, apr_pool_t *pool, const char *path)
 
static APR_INLINE apr_status_t apreq_brigade_setaside (apr_bucket_brigade *bb, apr_pool_t *p)
 
static APR_INLINE apr_status_t apreq_brigade_copy (apr_bucket_brigade *d, apr_bucket_brigade *s)
 
static APR_INLINE void apreq_brigade_move (apr_bucket_brigade *d, apr_bucket_brigade *s, apr_bucket *e)
 
apr_status_t apreq_header_attribute (const char *hdr, const char *name, const apr_size_t nlen, const char **val, apr_size_t *vlen)
 
apr_status_t apreq_brigade_concat (apr_pool_t *pool, const char *temp_dir, apr_size_t brigade_limit, apr_bucket_brigade *out, apr_bucket_brigade *in)
 
apr_file_t * apreq_brigade_spoolfile (apr_bucket_brigade *bb)
 

Detailed Description

Utility functions for apreq.

This header contains useful functions for creating new parsers, hooks or modules. It includes

  • string <-> array converters
  • substring search functions
  • simple encoders & decoders for urlencoded strings
  • simple time, date, & file-size converters

Function Documentation

◆ apreq_atoi64f()

apr_int64_t apreq_atoi64f ( const char *  s)

Converts file sizes (KMG) to bytes

Parameters
sfile size matching m/^\d+[KMG]b?$/i
Returns
64-bit integer representation of s.
Todo:
What happens when s is malformed? Should this return an unsigned value instead?

◆ apreq_atoi64t()

apr_int64_t apreq_atoi64t ( const char *  s)

Converts time strings (YMDhms) to seconds

Parameters
stime string matching m/^\+?\d+[YMDhms]$/
Returns
64-bit integer representation of s as seconds.
Todo:
What happens when s is malformed? Should this return an unsigned value instead?

◆ apreq_brigade_concat()

apr_status_t apreq_brigade_concat ( apr_pool_t *  pool,
const char *  temp_dir,
apr_size_t  brigade_limit,
apr_bucket_brigade *  out,
apr_bucket_brigade *  in 
)

Concatenates the brigades, spooling large brigades into a tempfile (APREQ_SPOOL) bucket.

Parameters
poolPool for creating a tempfile bucket.
temp_dirDirectory for tempfile creation.
brigade_limitIf out's length would exceed this value, the appended buckets get written to a tempfile.
outResulting brigade.
inBrigade to append.
Returns
APR_SUCCESS.
Error status code resulting from either apr_brigade_length(), apreq_file_mktemp(), apreq_brigade_fwrite(), or apr_file_seek().
Todo:
Flesh out these error codes, making them as explicit as possible.

◆ apreq_brigade_copy()

static APR_INLINE apr_status_t apreq_brigade_copy ( apr_bucket_brigade *  d,
apr_bucket_brigade *  s 
)
static

Copy a brigade.

Parameters
d(destination) Copied buckets are appended to this brigade.
s(source) Brigade to copy from.
Returns
APR_SUCCESS.
Error status code from an unsuccessful apr_bucket_copy().
Remarks
s == d produces Undefined Behavior.

◆ apreq_brigade_fwrite()

apr_status_t apreq_brigade_fwrite ( apr_file_t *  f,
apr_off_t *  wlen,
apr_bucket_brigade *  bb 
)

Writes brigade to a file.

Parameters
fFile that gets the brigade.
wlenOn a successful return, wlen holds the length of the brigade, which is the amount of data written to the file.
bbBucket brigade.
Returns
APR_SUCCESS.
Error status code from either an unsuccessful apr_bucket_read(), or a failed apr_file_writev().
Remarks
This function leaks a bucket brigade into bb->p whenever the final bucket in bb is a spool bucket.

◆ apreq_brigade_move()

static APR_INLINE void apreq_brigade_move ( apr_bucket_brigade *  d,
apr_bucket_brigade *  s,
apr_bucket *  e 
)
static

Move the front of a brigade.

Parameters
d(destination) Append buckets to this brigade.
s(source) Brigade to take buckets from.
eFirst bucket of s after the move. All buckets before e are appended to d.
Remarks
This moves all buckets when e == APR_BRIGADE_SENTINEL(s).

◆ apreq_brigade_setaside()

static APR_INLINE apr_status_t apreq_brigade_setaside ( apr_bucket_brigade *  bb,
apr_pool_t *  p 
)
static

Set aside all buckets in the brigade.

Parameters
bbBrigade.
pSetaside buckets into this pool.
Returns
APR_SUCCESS.
Error status code from an unsuccessful apr_bucket_setaside().

◆ apreq_brigade_spoolfile()

apr_file_t* apreq_brigade_spoolfile ( apr_bucket_brigade *  bb)

Determines the spool file used by the brigade. Returns NULL if the brigade is not spooled in a file (does not use an APREQ_SPOOL bucket).

Parameters
bbthe bucket brigade
Returns
the spool file, or NULL.

◆ apreq_charset_divine()

apreq_charset_t apreq_charset_divine ( const char *  src,
apr_size_t  slen 
)

Heuristically determine the charset of a string.

Parameters
srcString to scan.
slenLength of string.
Returns
APREQ_CHARSET_ASCII if the string contains only 7-bit chars;
APREQ_CHARSET_UTF8 if the string is a valid utf8 byte sequence;
APREQ_CHARSET_LATIN1 if the string has no control chars;
APREQ_CHARSET_CP1252 if the string has control chars.

◆ apreq_cp1252_to_utf8()

apr_size_t apreq_cp1252_to_utf8 ( char *  dest,
const char *  src,
apr_size_t  slen 
)

Convert a string from cp1252 to utf8. Caller must ensure it is large enough to hold the encoded string and trailing '\0'.

Parameters
destLocation of utf8-encoded result string. Caller must ensure it is large enough to hold the encoded string and trailing '\0'.
srcOriginal string.
slenLength of original string.
Returns
length of utf8-encoded string in dest; does not exceed 3 * slen.

◆ apreq_decode()

apr_status_t apreq_decode ( char *  dest,
apr_size_t *  dlen,
const char *  src,
apr_size_t  slen 
)

Url-decodes a string.

Parameters
destLocation of url-encoded result string. Caller must ensure dest is large enough to hold the encoded string and trailing null character.
dlenpoints to resultant length of url-decoded string in dest
srcOriginal string.
slenLength of original string.
Returns
APR_SUCCESS.
APR_INCOMPLETE if the string ends in the middle of an escape sequence.
APREQ_ERROR_BADSEQ or APREQ_ERROR_BADCHAR on malformed input.
Remarks
In the non-success case, dlen will be set to include the last successfully decoded value. This function decodes %uXXXX into a utf8 (wide) character, following ECMA-262 (the Javascript spec) Section B.2.1.

◆ apreq_decodev()

apr_status_t apreq_decodev ( char *  dest,
apr_size_t *  dlen,
struct iovec *  v,
int  nelts 
)

Url-decodes an iovec array.

Parameters
destLocation of url-encoded result string. Caller must ensure dest is large enough to hold the encoded string and trailing null character.
dlenResultant length of dest.
vArray of iovecs that represent the source string
neltsNumber of iovecs in the array.
Returns
APR_SUCCESS.
APR_INCOMPLETE if the iovec ends in the middle of an escape sequence.
APREQ_ERROR_BADSEQ or APREQ_ERROR_BADCHAR on malformed input.
Remarks
In the non-APR_SUCCESS case, dlen will be set to include the last successfully decoded value. This function decodes %uXXXX into a utf8 (wide) character, following ECMA-262 (the Javascript spec) Section B.2.1.

◆ apreq_encode()

apr_size_t apreq_encode ( char *  dest,
const char *  src,
const apr_size_t  slen 
)

Url-encodes a string.

Parameters
destLocation of url-encoded result string. Caller must ensure it is large enough to hold the encoded string and trailing '\0'.
srcOriginal string.
slenLength of original string.
Returns
length of url-encoded string in dest; does not exceed 3 * slen.

◆ apreq_escape()

static APR_INLINE char* apreq_escape ( apr_pool_t *  p,
const char *  src,
const apr_size_t  slen 
)
static

Returns an url-encoded copy of a string.

Parameters
pPool used to allocate the return value.
srcOriginal string.
slenLength of original string.
Returns
The url-encoded string.
Remarks
Use this function insead of apreq_encode if its caller might otherwise overflow dest.

◆ apreq_file_mktemp()

apr_status_t apreq_file_mktemp ( apr_file_t **  fp,
apr_pool_t *  pool,
const char *  path 
)

Makes a temporary file.

Parameters
fpPoints to the temporary apr_file_t on success.
poolPool to associate with the temp file. When the pool is destroyed, the temp file will be closed and deleted.
pathThe base directory which will contain the temp file. If param == NULL, the directory will be selected via tempnam(). See the tempnam manpage for details.
Returns
APR_SUCCESS.
Error status code from unsuccessful apr_filepath_merge(), or a failed apr_file_mktemp().

◆ apreq_header_attribute()

apr_status_t apreq_header_attribute ( const char *  hdr,
const char *  name,
const apr_size_t  nlen,
const char **  val,
apr_size_t *  vlen 
)

Search a header string for the value of a particular named attribute.

Parameters
hdrHeader string to scan.
nameName of attribute to search for.
nlenLength of name.
valLocation of (first) matching value.
vlenLength of matching value.
Returns
APR_SUCCESS.
APREQ_ERROR_NOATTR if the attribute is not found.
APREQ_ERROR_BADSEQ if an unpaired quote mark was detected.

◆ apreq_index()

apr_ssize_t apreq_index ( const char *  hay,
apr_size_t  hlen,
const char *  ndl,
apr_size_t  nlen,
const apreq_match_t  type 
)

Returns offset of match string's location, or -1 if no match is found.

Parameters
hayLocation of bytes to scan.
hlenNumber of bytes available for scanning.
ndlSearch string
nlenLength of search string.
typeMatch type.
Returns
Offset of match string, or -1 if no match is found.

◆ apreq_join()

char* apreq_join ( apr_pool_t *  p,
const char *  sep,
const apr_array_header_t *  arr,
apreq_join_t  mode 
)

Join an array of values. The result is an empty string if there are no values.

Parameters
pPool to allocate return value.
sepString that is inserted between the joined values.
arrArray of apreq_value_t entries.
modeJoin type- see apreq_join_t.
Returns
Joined string, or NULL on error

◆ apreq_quote()

apr_size_t apreq_quote ( char *  dest,
const char *  src,
const apr_size_t  slen 
)

Places a quoted copy of src into dest. Embedded quotes are escaped with a backslash ('\').

Parameters
destLocation of quoted copy. Must be large enough to hold the copy and trailing null byte.
srcOriginal string.
slenLength of original string.
destDestination string.
Returns
length of quoted copy in dest.

◆ apreq_quote_once()

apr_size_t apreq_quote_once ( char *  dest,
const char *  src,
const apr_size_t  slen 
)

Same as apreq_quote() except when src begins and ends in quote marks. In that case it assumes src is quoted correctly, and just copies src to dest.

Parameters
destLocation of quoted copy. Must be large enough to hold the copy and trailing null byte.
srcOriginal string.
slenLength of original string.
destDestination string.
Returns
length of quoted copy in dest.

◆ apreq_unescape()

static APR_INLINE apr_ssize_t apreq_unescape ( char *  str)
static

An in-situ url-decoder.

Parameters
strThe string to decode
Returns
Length of decoded string, or < 0 on error.
libapreq2-2.17/docs/html/apreq__util_8h_source.html0000644000175000017500000011166214277402434022017 0ustar jortonjorton libapreq2-2.17: include/apreq_util.h Source File
apreq_util.h
Go to the documentation of this file.
1 /*
2 ** Licensed to the Apache Software Foundation (ASF) under one or more
3 ** contributor license agreements. See the NOTICE file distributed with
4 ** this work for additional information regarding copyright ownership.
5 ** The ASF licenses this file to You under the Apache License, Version 2.0
6 ** (the "License"); you may not use this file except in compliance with
7 ** the License. You may obtain a copy of the License at
8 **
9 ** http://www.apache.org/licenses/LICENSE-2.0
10 **
11 ** Unless required by applicable law or agreed to in writing, software
12 ** distributed under the License is distributed on an "AS IS" BASIS,
13 ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 ** See the License for the specific language governing permissions and
15 ** limitations under the License.
16 */
17 
18 #ifndef APREQ_UTIL_H
19 #define APREQ_UTIL_H
20 
21 #include "apr_file_io.h"
22 #include "apr_buckets.h"
23 #include "apreq.h"
24 
25 #ifdef __cplusplus
26  extern "C" {
27 #endif
28 
53 APREQ_DECLARE(char *) apreq_join(apr_pool_t *p,
54  const char *sep,
55  const apr_array_header_t *arr,
56  apreq_join_t mode);
57 
70 APREQ_DECLARE(apr_ssize_t) apreq_index(const char* hay, apr_size_t hlen,
71  const char* ndl, apr_size_t nlen,
72  const apreq_match_t type);
73 
86 APREQ_DECLARE(apr_size_t) apreq_quote(char *dest, const char *src,
87  const apr_size_t slen);
88 
102 APREQ_DECLARE(apr_size_t) apreq_quote_once(char *dest, const char *src,
103  const apr_size_t slen);
104 
115 APREQ_DECLARE(apr_size_t) apreq_encode(char *dest, const char *src,
116  const apr_size_t slen);
117 
129 APREQ_DECLARE(apr_size_t) apreq_cp1252_to_utf8(char *dest,
130  const char *src, apr_size_t slen);
131 
144  apr_size_t slen);
145 
166 APREQ_DECLARE(apr_status_t) apreq_decode(char *dest, apr_size_t *dlen,
167  const char *src, apr_size_t slen);
168 
189 APREQ_DECLARE(apr_status_t) apreq_decodev(char *dest, apr_size_t *dlen,
190  struct iovec *v, int nelts);
191 
204 static APR_INLINE
205 char *apreq_escape(apr_pool_t *p, const char *src, const apr_size_t slen)
206 {
207  char *rv;
208 
209  if (src == NULL)
210  return NULL;
211 
212  rv = (char *)apr_palloc(p, 3 * slen + 1);
213  apreq_encode(rv, src, slen);
214  return rv;
215 }
216 
224 static APR_INLINE apr_ssize_t apreq_unescape(char *str)
225 {
226  apr_size_t len;
227  apr_status_t rv = apreq_decode(str, &len, str, strlen(str));
228  if (rv == APR_SUCCESS)
229  return (apr_ssize_t)len;
230  else
231  return -1;
232 }
233 
245 APREQ_DECLARE(apr_int64_t) apreq_atoi64f(const char *s);
246 
258 APREQ_DECLARE(apr_int64_t) apreq_atoi64t(const char *s);
259 
277 APREQ_DECLARE(apr_status_t) apreq_brigade_fwrite(apr_file_t *f,
278  apr_off_t *wlen,
279  apr_bucket_brigade *bb);
296 APREQ_DECLARE(apr_status_t) apreq_file_mktemp(apr_file_t **fp,
297  apr_pool_t *pool,
298  const char *path);
299 
309 static APR_INLINE
310 apr_status_t apreq_brigade_setaside(apr_bucket_brigade *bb, apr_pool_t *p)
311 {
312  apr_bucket *e;
313  for (e = APR_BRIGADE_FIRST(bb); e != APR_BRIGADE_SENTINEL(bb);
314  e = APR_BUCKET_NEXT(e))
315  {
316  apr_status_t rv = apr_bucket_setaside(e, p);
317  if (rv != APR_SUCCESS)
318  return rv;
319  }
320  return APR_SUCCESS;
321 }
322 
323 
336 static APR_INLINE
337 apr_status_t apreq_brigade_copy(apr_bucket_brigade *d, apr_bucket_brigade *s) {
338  apr_bucket *e;
339  for (e = APR_BRIGADE_FIRST(s); e != APR_BRIGADE_SENTINEL(s);
340  e = APR_BUCKET_NEXT(e))
341  {
342  apr_bucket *c;
343  apr_status_t rv = apr_bucket_copy(e, &c);
344  if (rv != APR_SUCCESS)
345  return rv;
346 
347  APR_BRIGADE_INSERT_TAIL(d, c);
348  }
349  return APR_SUCCESS;
350 }
351 
363 static APR_INLINE
364 void apreq_brigade_move(apr_bucket_brigade *d, apr_bucket_brigade *s,
365  apr_bucket *e)
366 {
367  apr_bucket *f;
368 
369  if (e != APR_BRIGADE_SENTINEL(s)) {
370  f = APR_RING_FIRST(&s->list);
371  if (f == e) /* zero buckets to be moved */
372  return;
373 
374  /* obtain the last bucket to be moved */
375  e = APR_RING_PREV(e, link);
376 
377  APR_RING_UNSPLICE(f, e, link);
378  APR_RING_SPLICE_HEAD(&d->list, f, e, apr_bucket, link);
379  }
380  else {
381  APR_BRIGADE_CONCAT(d, s);
382  }
383 }
384 
385 
399 APREQ_DECLARE(apr_status_t) apreq_header_attribute(const char *hdr,
400  const char *name,
401  const apr_size_t nlen,
402  const char **val,
403  apr_size_t *vlen);
404 
405 
423 APREQ_DECLARE(apr_status_t) apreq_brigade_concat(apr_pool_t *pool,
424  const char *temp_dir,
425  apr_size_t brigade_limit,
426  apr_bucket_brigade *out,
427  apr_bucket_brigade *in);
428 
437 APREQ_DECLARE(apr_file_t *) apreq_brigade_spoolfile(apr_bucket_brigade *bb);
438 
439 #ifdef __cplusplus
440  }
441 #endif
442 
443 #endif /* APREQ_UTIL_H */
Main header file...
#define APREQ_DECLARE(d)
Definition: apreq.h:50
apreq_match_t
Definition: apreq.h:222
apreq_charset_t
Definition: apreq.h:205
apreq_join_t
Definition: apreq.h:214
apr_size_t apreq_encode(char *dest, const char *src, const apr_size_t slen)
apr_status_t apreq_decodev(char *dest, apr_size_t *dlen, struct iovec *v, int nelts)
char * apreq_join(apr_pool_t *p, const char *sep, const apr_array_header_t *arr, apreq_join_t mode)
apr_status_t apreq_brigade_fwrite(apr_file_t *f, apr_off_t *wlen, apr_bucket_brigade *bb)
apr_status_t apreq_decode(char *dest, apr_size_t *dlen, const char *src, apr_size_t slen)
apr_status_t apreq_brigade_concat(apr_pool_t *pool, const char *temp_dir, apr_size_t brigade_limit, apr_bucket_brigade *out, apr_bucket_brigade *in)
apr_int64_t apreq_atoi64t(const char *s)
apr_int64_t apreq_atoi64f(const char *s)
static APR_INLINE char * apreq_escape(apr_pool_t *p, const char *src, const apr_size_t slen)
Definition: apreq_util.h:205
apr_size_t apreq_cp1252_to_utf8(char *dest, const char *src, apr_size_t slen)
apr_status_t apreq_header_attribute(const char *hdr, const char *name, const apr_size_t nlen, const char **val, apr_size_t *vlen)
static APR_INLINE apr_status_t apreq_brigade_setaside(apr_bucket_brigade *bb, apr_pool_t *p)
Definition: apreq_util.h:310
static APR_INLINE apr_ssize_t apreq_unescape(char *str)
Definition: apreq_util.h:224
static APR_INLINE void apreq_brigade_move(apr_bucket_brigade *d, apr_bucket_brigade *s, apr_bucket *e)
Definition: apreq_util.h:364
apr_status_t apreq_file_mktemp(apr_file_t **fp, apr_pool_t *pool, const char *path)
apr_size_t apreq_quote(char *dest, const char *src, const apr_size_t slen)
static APR_INLINE apr_status_t apreq_brigade_copy(apr_bucket_brigade *d, apr_bucket_brigade *s)
Definition: apreq_util.h:337
apr_ssize_t apreq_index(const char *hay, apr_size_t hlen, const char *ndl, apr_size_t nlen, const apreq_match_t type)
apreq_charset_t apreq_charset_divine(const char *src, apr_size_t slen)
apr_file_t * apreq_brigade_spoolfile(apr_bucket_brigade *bb)
apr_size_t apreq_quote_once(char *dest, const char *src, const apr_size_t slen)
libapreq2-2.17/docs/html/apreq__version_8h.html0000644000175000017500000002726414277402434021153 0ustar jortonjorton libapreq2-2.17: include/apreq_version.h File Reference
apreq_version.h File Reference

Versioning API for libapreq. More...

#include "apr_version.h"
#include "apreq.h"

Go to the source code of this file.

Macros

#define APREQ_MAJOR_VERSION   2
 
#define APREQ_MINOR_VERSION   8
 
#define APREQ_PATCH_VERSION   1
 
#define APREQ_VERSION_STRING
 
#define APREQ_IS_DEV_STRING   ""
 

Functions

void apreq_version (apr_version_t *pvsn)
 
const char * apreq_version_string (void)
 

Detailed Description

Versioning API for libapreq.

There are several different mechanisms for accessing the version. There is a string form, and a set of numbers; in addition, there are constants which can be compiled into your application, and you can query the library being used for its actual version.

Note that it is possible for an application to detect that it has been compiled against a different version of libapreq by use of the compile-time constants and the use of the run-time query function.

libapreq version numbering follows the guidelines specified in:

http://apr.apache.org/versioning.html

Macro Definition Documentation

◆ APREQ_IS_DEV_STRING

#define APREQ_IS_DEV_STRING   ""

Internal: string form of the "is dev" flag

◆ APREQ_MAJOR_VERSION

#define APREQ_MAJOR_VERSION   2

major version Major API changes that could cause compatibility problems for older programs such as structure size changes. No binary compatibility is possible across a change in the major version.

◆ APREQ_MINOR_VERSION

#define APREQ_MINOR_VERSION   8

Minor API changes that do not cause binary compatibility problems. Should be reset to 0 when upgrading APREQ_MAJOR_VERSION

◆ APREQ_PATCH_VERSION

#define APREQ_PATCH_VERSION   1

patch level

◆ APREQ_VERSION_STRING

#define APREQ_VERSION_STRING
Value:
APR_STRINGIFY(APREQ_MAJOR_VERSION) "." \
APR_STRINGIFY(APREQ_MINOR_VERSION) "." \
APR_STRINGIFY(APREQ_PATCH_VERSION) \
APREQ_IS_DEV_STRING
#define APREQ_PATCH_VERSION
Definition: apreq_version.h:65
#define APREQ_MINOR_VERSION
Definition: apreq_version.h:62
#define APREQ_MAJOR_VERSION
Definition: apreq_version.h:56

This symbol is defined for internal, "development" copies of libapreq. This symbol will be #undef'd for releases. The formatted string of libapreq's version

Function Documentation

◆ apreq_version()

void apreq_version ( apr_version_t *  pvsn)

Return libapreq's version information information in a numeric form.

Parameters
pvsnPointer to a version structure for returning the version information.

◆ apreq_version_string()

const char* apreq_version_string ( void  )

Return libapreq's version information as a string.

libapreq2-2.17/docs/html/apreq__version_8h_source.html0000644000175000017500000002767514277402434022541 0ustar jortonjorton libapreq2-2.17: include/apreq_version.h Source File
apreq_version.h
Go to the documentation of this file.
1 /*
2 ** Licensed to the Apache Software Foundation (ASF) under one or more
3 ** contributor license agreements. See the NOTICE file distributed with
4 ** this work for additional information regarding copyright ownership.
5 ** The ASF licenses this file to You under the Apache License, Version 2.0
6 ** (the "License"); you may not use this file except in compliance with
7 ** the License. You may obtain a copy of the License at
8 **
9 ** http://www.apache.org/licenses/LICENSE-2.0
10 **
11 ** Unless required by applicable law or agreed to in writing, software
12 ** distributed under the License is distributed on an "AS IS" BASIS,
13 ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 ** See the License for the specific language governing permissions and
15 ** limitations under the License.
16 */
17 
18 #ifndef APREQ_VERSION_H
19 #define APREQ_VERSION_H
20 
21 #ifdef __cplusplus
22 extern "C" {
23 #endif
24 
25 #include "apr_version.h"
26 #include "apreq.h"
27 
47 /* The numeric compile-time version constants. These constants are the
48  * authoritative version numbers for libapreq.
49  */
50 
56 #define APREQ_MAJOR_VERSION 2
57 
62 #define APREQ_MINOR_VERSION 8
63 
65 #define APREQ_PATCH_VERSION 1
66 
71 #undef APREQ_IS_DEV_VERSION
72 
73 
75 #define APREQ_VERSION_STRING \
76  APR_STRINGIFY(APREQ_MAJOR_VERSION) "." \
77  APR_STRINGIFY(APREQ_MINOR_VERSION) "." \
78  APR_STRINGIFY(APREQ_PATCH_VERSION) \
79  APREQ_IS_DEV_STRING
80 
87 APREQ_DECLARE(void) apreq_version(apr_version_t *pvsn);
88 
90 APREQ_DECLARE(const char *) apreq_version_string(void);
91 
92 
94 #ifdef APREQ_IS_DEV_VERSION
95 #define APREQ_IS_DEV_STRING "-dev"
96 #else
97 #define APREQ_IS_DEV_STRING ""
98 #endif
99 
100 
101 #ifdef __cplusplus
102 }
103 #endif
104 
105 #endif /* APREQ_VERSION_H */
Main header file...
#define APREQ_DECLARE(d)
Definition: apreq.h:50
const char * apreq_version_string(void)
void apreq_version(apr_version_t *pvsn)
libapreq2-2.17/docs/html/apreq_faq.html0000644000175000017500000001366714277402434017501 0ustar jortonjorton libapreq2-2.17: FAQ
FAQ

Issues during installation.

[...]

Using libapreq2 with Apache2 and mod_perl2.

I keep getting "undefined symbol" errors whenever I use Apache2::Request or APR::Request::Apache2.

You need to load mod_apreq2.so at server startup, which grabs all the required symbols at server startup. Be sure your server config contains a line like

LoadModule apreq_module   modules/mod_apreq2.so

When I use Apache2::Request in my output filter, it seems to lose the incoming POST variables.

The problem is likely that the mod_apreq2 filter has not been added to the input filter chain in time to read the POST data.

There are two solutions to this problem:

1) Write a filter init handler for you filter that instantiates an
   Apache2::Request object. 

   http://perl.apache.org/docs/2.0/api/Apache2/Filter.html#C_FilterInitHandler_

2) Use .htaccess or your server config to ensure the apreq input filter
   is active for this request with "AddInputFilter APREQ" or somesuch.

We recommend using (1), and falling back to (2) until you get (1) working.

When I try to upload a file, why do I get this error "[error] Can't locate .../Apache2/Request/upload.al in @INC"?

Apache2::Upload is now a separate module in apreq2, so you need to use Apache2::Upload to load the Apache2::Request::upload function.

This also applies to "Can't locate auto/APR/Request/Param/slurp.al in @INC". This is because Apache2::Upload is implement by wrapping the APR::Request::* packages.

Using libapreq2 outside of Apache.

[...]

Contributing to apreq development.

How is the subversion repository managed?

apreq's repository is broken into three subdirectories:

/trunk    - the current codebase for active development.
/tags     - release snapshots.
/branches - where older releases and experimental development lines live.

apreq follows a Commit-then-Review policy for its entire repository, but being a shared library places certain restrictions on the admissible changes for stable trees. Basically the header files cannot be modified; only new functions and structures may be added to them. Any time that happens, the minor-version needs to be bumped, and the patch-level gets reset to zero. Changes that only modify the library's implementation (.c) files require a bump to the patch-level. On stable trees, this version tracking should happen on each commit, to make auditing easy for other developers without resorting to a draconian Review-then-Commit policy.

libapreq2-2.17/docs/html/apreq_install.html0000644000175000017500000000641514277402434020371 0ustar jortonjorton libapreq2-2.17: INSTALL
INSTALL
PREREQUISITES:

Please see the PREREQUISITES file.  If you are building httpd-apreq-2 
directly from svn, you can generate the list of prerequisites:

            % perl build/version_check.pl


INSTRUCTIONS:

FreeBSD/Solaris users must substitute "gmake" for "make" below.

Unix build, where libtool/automake/autoconf works:

            % ./configure --with-apache2-apxs=/path/to/apache2/bin/apxs
            % make
  (optional)% make test
            % make install
  (optional)% make docs_install

Or using the CPAN/perlish way (which includes the Apache2::Request and
Apache2::Cookie modules):

            % perl Makefile.PL --with-apache2-apxs=/path/to/apache2/bin/apxs
            % make
  (optional)% make test
            % make install
  (optional)% make docs_install

Developers and other folks using httpd-apreq-2 directly from svn need to
execute "./buildconf" prior to running "./configure".


Win32 build:
  C:\httpd-apreq-2> perl Makefile.PL
  C:\httpd-apreq-2> nmake
  C:\httpd-apreq-2> nmake test
  C:\httpd-apreq-2> nmake docs
  C:\httpd-apreq-2> nmake install

SVN (Subversion) ACCESS

Development of httpd-apreq-2 can be followed through the svn repository:

  $ svn checkout https://svn.apache.org/repos/asf/httpd/apreq/trunk/ httpd-apreq-2

Developers with commit access must use the https protocol instead;
note that, if you are compiling svn from sources, you must
supply the configure script with the appropriate switch to
enable ssl.

Subversion sources, and binaries for some platforms, may be obtained
through the home page:

     https://subversion.apache.org/

Documentation on using svn is available at

     https://svnbook.red-bean.com/

In particular,

     https://svnbook.red-bean.com/en/1.0/apa.html

contains a guide for users familiar with cvs.



libapreq2-2.17/docs/html/apreq_license.html0000644000175000017500000003113714277402434020344 0ustar jortonjorton libapreq2-2.17: LICENSE
LICENSE
                                 Apache License
                           Version 2.0, January 2004
                        http://www.apache.org/licenses/

   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION

   1. Definitions.

      "License" shall mean the terms and conditions for use, reproduction,
      and distribution as defined by Sections 1 through 9 of this document.

      "Licensor" shall mean the copyright owner or entity authorized by
      the copyright owner that is granting the License.

      "Legal Entity" shall mean the union of the acting entity and all
      other entities that control, are controlled by, or are under common
      control with that entity. For the purposes of this definition,
      "control" means (i) the power, direct or indirect, to cause the
      direction or management of such entity, whether by contract or
      otherwise, or (ii) ownership of fifty percent (50%) or more of the
      outstanding shares, or (iii) beneficial ownership of such entity.

      "You" (or "Your") shall mean an individual or Legal Entity
      exercising permissions granted by this License.

      "Source" form shall mean the preferred form for making modifications,
      including but not limited to software source code, documentation
      source, and configuration files.

      "Object" form shall mean any form resulting from mechanical
      transformation or translation of a Source form, including but
      not limited to compiled object code, generated documentation,
      and conversions to other media types.

      "Work" shall mean the work of authorship, whether in Source or
      Object form, made available under the License, as indicated by a
      copyright notice that is included in or attached to the work
      (an example is provided in the Appendix below).

      "Derivative Works" shall mean any work, whether in Source or Object
      form, that is based on (or derived from) the Work and for which the
      editorial revisions, annotations, elaborations, or other modifications
      represent, as a whole, an original work of authorship. For the purposes
      of this License, Derivative Works shall not include works that remain
      separable from, or merely link (or bind by name) to the interfaces of,
      the Work and Derivative Works thereof.

      "Contribution" shall mean any work of authorship, including
      the original version of the Work and any modifications or additions
      to that Work or Derivative Works thereof, that is intentionally
      submitted to Licensor for inclusion in the Work by the copyright owner
      or by an individual or Legal Entity authorized to submit on behalf of
      the copyright owner. For the purposes of this definition, "submitted"
      means any form of electronic, verbal, or written communication sent
      to the Licensor or its representatives, including but not limited to
      communication on electronic mailing lists, source code control systems,
      and issue tracking systems that are managed by, or on behalf of, the
      Licensor for the purpose of discussing and improving the Work, but
      excluding communication that is conspicuously marked or otherwise
      designated in writing by the copyright owner as "Not a Contribution."

      "Contributor" shall mean Licensor and any individual or Legal Entity
      on behalf of whom a Contribution has been received by Licensor and
      subsequently incorporated within the Work.

   2. Grant of Copyright License. Subject to the terms and conditions of
      this License, each Contributor hereby grants to You a perpetual,
      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
      copyright license to reproduce, prepare Derivative Works of,
      publicly display, publicly perform, sublicense, and distribute the
      Work and such Derivative Works in Source or Object form.

   3. Grant of Patent License. Subject to the terms and conditions of
      this License, each Contributor hereby grants to You a perpetual,
      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
      (except as stated in this section) patent license to make, have made,
      use, offer to sell, sell, import, and otherwise transfer the Work,
      where such license applies only to those patent claims licensable
      by such Contributor that are necessarily infringed by their
      Contribution(s) alone or by combination of their Contribution(s)
      with the Work to which such Contribution(s) was submitted. If You
      institute patent litigation against any entity (including a
      cross-claim or counterclaim in a lawsuit) alleging that the Work
      or a Contribution incorporated within the Work constitutes direct
      or contributory patent infringement, then any patent licenses
      granted to You under this License for that Work shall terminate
      as of the date such litigation is filed.

   4. Redistribution. You may reproduce and distribute copies of the
      Work or Derivative Works thereof in any medium, with or without
      modifications, and in Source or Object form, provided that You
      meet the following conditions:

      (a) You must give any other recipients of the Work or
          Derivative Works a copy of this License; and

      (b) You must cause any modified files to carry prominent notices
          stating that You changed the files; and

      (c) You must retain, in the Source form of any Derivative Works
          that You distribute, all copyright, patent, trademark, and
          attribution notices from the Source form of the Work,
          excluding those notices that do not pertain to any part of
          the Derivative Works; and

      (d) If the Work includes a "NOTICE" text file as part of its
          distribution, then any Derivative Works that You distribute must
          include a readable copy of the attribution notices contained
          within such NOTICE file, excluding those notices that do not
          pertain to any part of the Derivative Works, in at least one
          of the following places: within a NOTICE text file distributed
          as part of the Derivative Works; within the Source form or
          documentation, if provided along with the Derivative Works; or,
          within a display generated by the Derivative Works, if and
          wherever such third-party notices normally appear. The contents
          of the NOTICE file are for informational purposes only and
          do not modify the License. You may add Your own attribution
          notices within Derivative Works that You distribute, alongside
          or as an addendum to the NOTICE text from the Work, provided
          that such additional attribution notices cannot be construed
          as modifying the License.

      You may add Your own copyright statement to Your modifications and
      may provide additional or different license terms and conditions
      for use, reproduction, or distribution of Your modifications, or
      for any such Derivative Works as a whole, provided Your use,
      reproduction, and distribution of the Work otherwise complies with
      the conditions stated in this License.

   5. Submission of Contributions. Unless You explicitly state otherwise,
      any Contribution intentionally submitted for inclusion in the Work
      by You to the Licensor shall be under the terms and conditions of
      this License, without any additional terms or conditions.
      Notwithstanding the above, nothing herein shall supersede or modify
      the terms of any separate license agreement you may have executed
      with Licensor regarding such Contributions.

   6. Trademarks. This License does not grant permission to use the trade
      names, trademarks, service marks, or product names of the Licensor,
      except as required for reasonable and customary use in describing the
      origin of the Work and reproducing the content of the NOTICE file.

   7. Disclaimer of Warranty. Unless required by applicable law or
      agreed to in writing, Licensor provides the Work (and each
      Contributor provides its Contributions) on an "AS IS" BASIS,
      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
      implied, including, without limitation, any warranties or conditions
      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
      PARTICULAR PURPOSE. You are solely responsible for determining the
      appropriateness of using or redistributing the Work and assume any
      risks associated with Your exercise of permissions under this License.

   8. Limitation of Liability. In no event and under no legal theory,
      whether in tort (including negligence), contract, or otherwise,
      unless required by applicable law (such as deliberate and grossly
      negligent acts) or agreed to in writing, shall any Contributor be
      liable to You for damages, including any direct, indirect, special,
      incidental, or consequential damages of any character arising as a
      result of this License or out of the use or inability to use the
      Work (including but not limited to damages for loss of goodwill,
      work stoppage, computer failure or malfunction, or any and all
      other commercial damages or losses), even if such Contributor
      has been advised of the possibility of such damages.

   9. Accepting Warranty or Additional Liability. While redistributing
      the Work or Derivative Works thereof, You may choose to offer,
      and charge a fee for, acceptance of support, warranty, indemnity,
      or other liability obligations and/or rights consistent with this
      License. However, in accepting such obligations, You may act only
      on Your own behalf and on Your sole responsibility, not on behalf
      of any other Contributor, and only if You agree to indemnify,
      defend, and hold each Contributor harmless for any liability
      incurred by, or claims asserted against, such Contributor by reason
      of your accepting any such warranty or additional liability.

   END OF TERMS AND CONDITIONS

   APPENDIX: How to apply the Apache License to your work.

      To apply the Apache License to your work, attach the following
      boilerplate notice, with the fields enclosed by brackets "[]"
      replaced with your own identifying information. (Don't include
      the brackets!)  The text should be enclosed in the appropriate
      comment syntax for the file format. We also recommend that a
      file or class name and description of purpose be included on the
      same "printed page" as the copyright notice for easier
      identification within third-party archives.

   Copyright [yyyy] [name of copyright owner]

   Licensed under the Apache License, Version 2.0 (the "License");
   you may not use this file except in compliance with the License.
   You may obtain a copy of the License at

       http://www.apache.org/licenses/LICENSE-2.0

   Unless required by applicable law or agreed to in writing, software
   distributed under the License is distributed on an "AS IS" BASIS,
   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   See the License for the specific language governing permissions and
   limitations under the License.
libapreq2-2.17/docs/html/apreq_notice.html0000644000175000017500000000314414277402434020200 0ustar jortonjorton libapreq2-2.17: NOTICE
NOTICE
This product includes software developed by
The Apache Software Foundation (http://www.apache.org/).
libapreq2-2.17/docs/html/bc_s.png0000644000175000017500000000124414277402434016254 0ustar jortonjorton‰PNG  IHDR€_ kIDATxíËkQÆÏ¹É̤I&“¦mš&156*nÄ…”ܸR,4 +Hµ(U­b”ª1‚ŠˆJ.º(E·mßúhëJmKS'C›(‚èäÑ…¤ï &äÖþ ‡ïrÎåü3gö(z÷ýÒ&_9ó}’ÕŸ@‰mÚu ` Øh`ñ÷Ô¯  „ú&·ññ×Ù~“½—Üò‡ÎÝÑM4¸%‰3²§?Êêh)€ÿù™\ÄYi>Jb @gûßiÞˆú²Ñkg§ãê\è½­šEUæv+?E€î"pæÖÛB\ƒY&ðØó$vM+ê’Dn¼)}òþ:§Xoâ ƒ3ŠÚ¯'¯¿.‚fÁ0ìuŠ9òLýj€f6¸%«3Gf”Ô#Ôsm(,ùÃk*Ê’³Jª…¯¼JË¢o䆔¼u_~ °r]%%mnu]z°r5[ÍÆ°«Úò•Xeµ’†Iù<ÈèÐÅg@IÔÚÞàµë3‚:/<JÇ’ÐQ) ñ¹…tÚß÷(Mû\63éCgl!ýí;ÿ¸4Ùhâñ=÷Zë29­w’ÝÒ´·ˆV;ÊL3ƒj&7©·º½÷a!I†)ëë$-öÇÓú³›‹7tIV¾VàñÔübf¨8¡ÈƒB<﫵imnÿœÈ‡„ lߣù‡ÛD —#É5“­'Æ4?쬲øM’™›°»g¬‚|5Åçµ½GNdÓÐr|ô”Ã&„ì"7+'³@ 5‡G➑Džâɬ^;õã–.3Òr"ý_R³¿Â@²oI¾å$IEND®B`‚libapreq2-2.17/docs/html/bdwn.png0000644000175000017500000000022314277402434016274 0ustar jortonjorton‰PNG  IHDR5åZIDATxíË € DŸP–1ñlžmÀ r±j².e è†D[ØÉ¾ÙÏÔ¼µ¦ã´Þ|陣6€Všë3´Å?Ls'(}¬>+ žKó÷¥¿ch`‚ ^׃ÞnIEND®B`‚libapreq2-2.17/docs/html/classes.html0000644000175000017500000000434314277402434017166 0ustar jortonjorton libapreq2-2.17: Data Structure Index
Data Structure Index
libapreq2-2.17/docs/html/closed.png0000644000175000017500000000020414277402434016612 0ustar jortonjorton‰PNG  IHDR à‘KIDATxíÝm @!†ÑGk™É7À-`&séts¦Àñþòð@åk}ª2€… P%Á_Ëþ¿N² .:0Dk¥‹Â›x" Ö›)¡xÒ5õIEND®B`‚libapreq2-2.17/docs/html/dir_a7b0466279106ea0b8f86f609f621680.html0000644000175000017500000000335714277402434022463 0ustar jortonjorton libapreq2-2.17: module Directory Reference
module Directory Reference

Directories

libapreq2-2.17/docs/html/dir_b9a38c20fd386f968f52d9fe1a11fa5c.html0000644000175000017500000000331014277402434023113 0ustar jortonjorton libapreq2-2.17: module/apache2 Directory Reference
apache2 Directory Reference
libapreq2-2.17/docs/html/dir_cdd8a03ded30941fff17be6eb886221f.html0000644000175000017500000000330514277402434023167 0ustar jortonjorton libapreq2-2.17: module/apache Directory Reference
apache Directory Reference
libapreq2-2.17/docs/html/dir_d44c64559bbebec7f509842c48db8b23.html0000644000175000017500000001264014277402434023041 0ustar jortonjorton libapreq2-2.17: include Directory Reference
include Directory Reference

Files

file  apreq.h [code]
 Main header file...
 
 
file  apreq_error.h [code]
 Error status codes.
 
file  apreq_module.h [code]
 Module API.
 
file  apreq_param.h [code]
 Request parsing and parameter API.
 
file  apreq_parser.h [code]
 Request body parser API.
 
file  apreq_util.h [code]
 Utility functions for apreq.
 
file  apreq_version.h [code]
 Versioning API for libapreq.
 
libapreq2-2.17/docs/html/doc.png0000644000175000017500000000135214277402434016113 0ustar jortonjorton‰PNG  IHDRÚ}\ˆ±IDATxíMOS[…Ÿžsúa?-XZ(PD4‚ AWbu`b 77wäHFÆCËÔÂÿà/`vo„ˆAPòq‹P @ ­ûÝè980 îà¤+»§Ýy×^ïZï9SW¹\83g‰3'°Nâçl¹¸_b¯p ïåûÆVÜÖ¡€Ÿ×"¬Ö†X€d]Ðà3“ÉÃÄÌ™xŸ ßMàœ[<çSPkvc—hÈ'…™˜^Åm™hØ7 `Û™¦ èÀåráq›‘œ¾!daeKŸþÆÕ˜:Ì*³_דâèi?I–eP*B7Ÿ¿åô!¹Ýgr6Ër6oKbëþãðôrI”ËTˆüªŒ¨xóö=›ù¢&‰(e+ßóÄkýÇ`ëÁÜb.“¸ÐW×w0¥°jÑzN™¬|©WEãµ¢a¯6[öX†AkÓù*/œ¨‰€ÉY­ ÿV’§–u²jÂ>1W *½·°PGŽzÿ¨/Eg{ ŸÇâaoŠÁVú:è¿™¤1$ôR§W,–ªà¨@ŠË56¾ÀÔÜ-¾,mê¸Î/æè¹– òr5¥T*S(Vf8ö9u’ Õ£w›ùóa=Í<{Ò¡UŒ÷r¯+ÉådDÏF$è°…£é¿`zþ»ÎúöN‘µÜ®0Q3£~_^Ëóâ¯N=ˆvpTà±LžT}ˆîkq†Òm<¼ÎÓ?Zh¿X£ï_þÝ¥[)ƒ `gêÃa_Ô*äÔ2`'=õ´Fÿ2EâÁPú ÷»›l=8‹Wv°%THqÉ¿<"¤ïG¾ÆxH{#ÆÖ«aÔJÕÞ‡—m‹„ çñKsÿàñVŠØ¡°·MâÒ^ TÁ– Ý›r¥ß½ømüÿ_™?ªWİ÷#uIEND®B`‚libapreq2-2.17/docs/html/dox.css0000644000175000017500000003033214277402434016144 0ustar jortonjorton/* Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ * mainframe ;-) * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */ html { font-size: 14px; } body { background-color: #fff; color: #036; padding: 0 1em 0 0; margin: 0; font-family: Arial, Helvetica, sans-serif; font-weight: normal; } pre, code { font-family: "Courier New", Courier, monospace; } strong { font-weight: bold; } q, em, var { font-style: italic; } span.transnote { background-color: inherit; color: #888; } /* fixup IE & Opera * otherwise they forget to inherit * the computed font-size value */ table, code { font-size: 1em; } /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ * Links * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */ /* normal links */ /* ====================== */ a:link { color: #0073c7; background-color: inherit; } a:visited { color: #5A88B5; background-color: inherit; } a:link:hover, a:link:active, a:visited:hover, a:visited:active { color: #0073c7; background-color: #f0f0f0; } /* hover on non-white backgrounds */ tr.odd a:hover, tr.odd a:active, tr.header a:hover, tr.header a:active, /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ * Headings * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */ /* h1 */ /* ====================== */ h1 { padding: 0.2em; margin: 0; background-color: inherit; color: #036; text-decoration: none; font-size: 22px; font-weight: bold; text-align:center; } /* h2 */ /* ====================== */ h2 { padding: 0.2em 0 0.2em 0.7em; margin: 0 0 0.5em 0; text-decoration: none; font-size: 18px; font-weight: bold; text-align:left; } /* take care of s inside */ h2 a, h2 a:hover, h2 a:active { color: inherit; background-color: inherit; text-decoration: none; } /* h3, h4 */ /* ====================== */ h3 { background-color: inherit; color: #036; text-decoration: none; font-weight: bold; font-size: 16px; margin: 1.3em 0 0.4em 0; padding: 0; } h4 { background-color: inherit; color: #036; text-decoration: none; font-weight: bold; font-size: 14px; margin: 1.3em 0 0.2em 0; padding: 0; } /* margin adjustment */ h3 + *, h4 + * { margin-top: 0; } /* IE confuses the + * :-( * so reset some things */ ul, .section table, .directive-section table { margin-bottom: 1em; } /* take care of s inside */ h3 a, h3 a:hover, h3 a:active, h4 a, h4 a:hover, h4 a:active { color: inherit; background-color: inherit; text-decoration: none; } /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ * Tables * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */ /* general */ /* ====================== */ /* table { border: 1px solid #aaa; border-collapse: collapse; padding: 2px; margin-top: 0.5em; margin-bottom: 0; } td, th { empty-cells: show; /* show border around empty cells */ padding: 0.1em 0.2em; vertical-align: top; text-align: left; line-height: 1.3em; } */ th { font-weight: bold; } td.centered { text-align: center; } tr.odd { /* for large tables alternating colors */ background-color: #f2f2f2; } tr.header, tr.header th { background-color: #e2e2e2; border-top: 1px solid #aaa; border-bottom: 1px solid #aaa; } /* bordered table cells */ /* ====================== */ /* turn off borders in tables nested in * bordered tables per default */ table.bordered table td, table.bordered table th { border-style: none; } table.bordered td, table.bordered th, table table.bordered td, table table.bordered th { border: 1px solid #aaa; } /* index page layout table */ /* ======================= */ body#index-page div#page-content { width: 100%; /* IE fun */ } body[id]#index-page div#page-content { width: auto; /* reasonable browsers. */ } table#indextable { width: 100%; border-collapse: collapse; border: 0 none; } table#indextable td { width: 33.3%; border-left: 1px solid #aaa; padding-top: 0; padding-bottom: 0; } table#indextable td.col1 { border-left: 0 none; padding-left: 0; } table#indextable td.col3 { padding-right: 0; } /* mod/dir. overview table and quick reference */ /* ============================================ */ table.module th, table.directive th { white-space: nowrap; } table.qref { border-collapse: collapse; width: 100%; } table.qref td { border-style: none solid; border-color: #aaa; border-width: 1px; } table.qref td.descr { padding-left: 1em; font-size: 13px; } table#legend { width: 100%; border-style: none; border-width: 0; vertical-align: bottom; padding: 0; margin: 0; } table#legend td { vertical-align: bottom; margin: 0; padding: 0; } table#legend td.letters { width: 100%; padding-bottom: 0.5em; } table#legend table { vertical-align: bottom; margin: 0 0 0 0.4em; padding: 0; height: 7.5em; } table#legend table td, table#legend table th { vertical-align: middle; padding: 0.1ex 0.2em; line-height: 1em; white-space: nowrap; } /* related modules & dir. */ /* ====================== */ /* assuming, all links are enclosed by * or * */ table.related { border-collapse: separate; } table.related th { padding: 0.2ex 0.3em; background-color: #e5ecf3; color: #405871; vertical-align: middle; } table.related td { padding: 0.2ex 0.3em; } /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ * Lists * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */ /* list default values */ /* ====================== */ ul { list-style-type: disc; } ul ul { list-style-type: square; } ul ul ul { list-style-type: circle; } li, dt, dd { line-height: 1.3em; } dt { margin-top: 0.5em; font-weight: bold; } ol li { margin-top: 0.5em; } /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ * main page sections * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */ div#page-header img { padding: 0; display: block; margin: -70px 0 1px 2em; width: 248px; height: 70px; } div#page-header p.apache { background-color: #405871; color: #fff; padding: 0 0 0 248px; margin: 0; text-align: center; vertical-align: middle; font-size: 16px; font-weight: bold; line-height: 29px; } div#page-header p.menu { text-align: right; font-size: 13px; margin: 30px 0 0.5em 0; padding: 0; } /* breadcrumb navigation */ div.qindex, div#path { text-align:center; margin: 0.2em 0 1.2em 30px; padding: 0; font-size: 13px; } p { line-height: 1.3em; } /* page footer */ /* ====================== */ div#footer { /* margin-left: 30px; */ font-size: 13px; border-top: 1px solid #405871; padding-top: 0.2em; } div#footer p.apache { float: left; text-align: left; padding: 0 0 1em 0; margin-top: 0; } div#footer p.menu { float: right; text-align: right; margin-top: 0; padding: 0 0 1em 0; } /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ * -> The End (modified doxygen-generated stylesheet below) <- * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */ CAPTION { font-weight: bold } A.qindex { font-weight: bold; } A.qindexHL { font-weight: bold; background-color: #405871; color: #ffffff; padding: 2px 6px; } A.qindexHL:hover { background-color: #405871; color: #ffffff; } A.qindexHL:visited { background-color: #405871; color: #ffffff } A.el { font-weight: bold } A.elRef { font-weight: bold } DL.el { margin-left: -1cm } PRE.fragment { border: 1px solid #CCCCCC; background-color: #f5f5f5; margin-top: 4px; margin-bottom: 4px; margin-left: 2px; margin-right: 8px; padding-left: 6px; padding-right: 6px; padding-top: 4px; padding-bottom: 4px; } DIV.fragment { border: 1px solid #CCCCCC; background-color: #f5f5f5; padding: 6px; } DIV.ah { background-color: black; font-weight: bold; color: #ffffff; margin-bottom: 3px; margin-top: 3px } TD.md { background-color: #F4F4FB; font-weight: bold; } TD.mdname1 { background-color: #F4F4FB; font-weight: bold; color: #602020; } TD.mdname { background-color: #F4F4FB; font-weight: bold; color: #602020; width: 600px; } DIV.groupHeader { margin-left: 16px; margin-top: 12px; margin-bottom: 6px; font-weight: bold; } DIV.groupText { margin-left: 16px; font-style: italic; font-size: smaller } BODY { background: white; color: black; margin-right: 20px; margin-left: 30px; } TD.indexkey { background-color: #eeeeff; font-weight: bold; padding-right : 10px; padding-top : 2px; padding-left : 10px; padding-bottom : 2px; margin-left : 0px; margin-right : 0px; margin-top : 2px; margin-bottom : 2px; border: 1px solid #CCCCCC; } TD.indexvalue { background-color: #eeeeff; font-style: italic; padding-right : 10px; padding-top : 2px; padding-left : 10px; padding-bottom : 2px; margin-left : 0px; margin-right : 0px; margin-top : 2px; margin-bottom : 2px; border: 1px solid #CCCCCC; } TR.memlist { background-color: #f0f0f0; } P.formulaDsp { text-align: center; } IMG.formulaDsp { } IMG.formulaInl { vertical-align: middle; } SPAN.keyword { color: #008000 } SPAN.keywordtype { color: #604020 } SPAN.keywordflow { color: #e08000 } SPAN.comment { color: #800000 } SPAN.preprocessor { color: #806020 } SPAN.stringliteral { color: #002080 } SPAN.charliteral { color: #008080 } .mdTable { border: 1px solid #868686; background-color: #F4F4FB; } .mdRow { padding: 8px 10px; } .mdescLeft { font-size: smaller; font-style: italic; background-color: #FAFAFA; padding-left: 8px; border-top: 1px none #E0E0E0; border-right: 1px none #E0E0E0; border-bottom: 1px none #E0E0E0; border-left: 1px none #E0E0E0; margin: 0px; } .mdescRight { font-size: smaller; font-style: italic; background-color: #FAFAFA; padding-left: 4px; border-top: 1px none #E0E0E0; border-right: 1px none #E0E0E0; border-bottom: 1px none #E0E0E0; border-left: 1px none #E0E0E0; margin: 0px; padding-bottom: 0px; padding-right: 8px; } .memItemLeft { padding: 1px 0px 0px 8px; margin: 4px; border-top-width: 1px; border-right-width: 1px; border-bottom-width: 1px; border-left-width: 1px; border-top-style: solid; border-top-color: #E0E0E0; border-right-color: #E0E0E0; border-bottom-color: #E0E0E0; border-left-color: #E0E0E0; border-right-style: none; border-bottom-style: none; border-left-style: none; background-color: #FAFAFA; font-size: 12px; } .memItemRight { padding: 1px 0px 0px 8px; margin: 4px; border-top-width: 1px; border-right-width: 1px; border-bottom-width: 1px; border-left-width: 1px; border-top-style: solid; border-top-color: #E0E0E0; border-right-color: #E0E0E0; border-bottom-color: #E0E0E0; border-left-color: #E0E0E0; border-right-style: none; border-bottom-style: none; border-left-style: none; background-color: #FAFAFA; font-size: 13px; } td.tiny { font-size: 75%; } /* a { color: #252E78; } a:visited { color: #3D2185; } */ libapreq2-2.17/docs/html/doxygen.svg0000644000175000017500000003602614277402434017044 0ustar jortonjorton libapreq2-2.17/docs/html/dynsections.js0000644000175000017500000001054414277402434017543 0ustar jortonjorton/* @licstart The following is the entire license notice for the JavaScript code in this file. The MIT License (MIT) Copyright (C) 1997-2020 by Dimitri van Heesch 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 AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. @licend The above is the entire license notice for the JavaScript code in this file */ function toggleVisibility(linkObj) { var base = $(linkObj).attr('id'); var summary = $('#'+base+'-summary'); var content = $('#'+base+'-content'); var trigger = $('#'+base+'-trigger'); var src=$(trigger).attr('src'); if (content.is(':visible')===true) { content.hide(); summary.show(); $(linkObj).addClass('closed').removeClass('opened'); $(trigger).attr('src',src.substring(0,src.length-8)+'closed.png'); } else { content.show(); summary.hide(); $(linkObj).removeClass('closed').addClass('opened'); $(trigger).attr('src',src.substring(0,src.length-10)+'open.png'); } return false; } function updateStripes() { $('table.directory tr'). removeClass('even').filter(':visible:even').addClass('even'); } function toggleLevel(level) { $('table.directory tr').each(function() { var l = this.id.split('_').length-1; var i = $('#img'+this.id.substring(3)); var a = $('#arr'+this.id.substring(3)); if (l libapreq2-2.17: Examples
Examples
Here is a list of all examples:
libapreq2-2.17/docs/html/feather.gif0000644000175000017500000001450714277402434016753 0ustar jortonjortonGIF89aøF÷‚þŽþ®úúþoýOþ5­üËþýËþãþþäÿŽüpý¢`þXoý3ÿè«‹Püp•sú/ýîϤn6üK¬ûc®JŽ+ Š ¼3PÝnܪVÃF¤w@qU j §:¬ÃO+„8 ÉÚ2ä$r)ÇÐ7ÕRš úù÷Ê.ü‘8ÔѲfÍêèå–“†mi[|}eàãCCCX7¾º©QPKïïïä æ!!!¯¬•___..-ppoöf ŽsüÈ£þó㌆£—‘——•Ówô«š››ì¸›ÏÏÏÜ×ÈËÇÀ°¯®ç’fßàßüç¨ýåíýªV¿¿¿ôßЃ‚k-3û™"êgañÊ^Êr3ÍŠWÕ´@Ö’ó—ee_x’ay’)Rz?n7hDf‡8i6[ýþÿGt<`ƒ3fÿÿÿ!ù‚,øF@ÿ H° Áƒ*\Ȱ¡Ã‡#Jœ8Q‰Š3jÜȱ£Ç{Pù A‚"B„ø0ãÅ;¼ìADI$Y”“L•/{„‰2"Ñ'iz€\Ê´iS5+I–trÇŽ¨²ò¸ÐD‚` A€À€1RX À â ˆ B@ì4$Ê3E¦,A2D 0E0]¼Ã¥N#Kž|¥rå+@8° sŽ9¾‚¢@ÙÓÔ²U‘ë¸ ,¨x-W èÖm¡A'NT®AC’—P̸¹Q EÂ@؃ “!L¾0™Ìi4?~lÿAžŠ^¿ÆX‘2kI NP\ö´Žêëp¡¢mœÐŸk¸Àܵ›n,Dà›Ñ‚ÃU &h\%tœ xà܈xPB†QÂpFpÀ‹,X @tP…]D]taDP¬EvFLFwK©Ñz¢™F€ ¥…EL‚eÚ©ù×*¸ÀA^`ÊðÀ°å%à ,èæ[ Ôðbn ž „1!…¨¨á†%d`‚ %ˆHâ `Üœ-± ĸÛpÀ²%À宵եj¬–W<|@…Q’0Al0Á°RÿðB«Aþ6£ ð‡@™ŒyMú& rBXa -§ Î—ÁqÏ‚¢‚2Gè¶ÏaàÁ Dp§o0z,´Ð€”k®xÁ†+lp)€¬ÀY¸°/¿$(Ð<”D^V!Þ3 Ê ®¾J G,k«Ã0ƒ k;" «jh¸í‚+C G0 C¹ç2`—ƒ»E ¨nè2˜È0éÍ Ü&€ËÂÖ˜W ²! %.<ÐÖZMÿC¾ü^ Ãi1Äp €uié¶ä(4%ñ ‚Y‰€ƒJ0бÃܵDÁݲR0Ä/èÿ-1 ­ÂàôÓ`I`é^- Â.¨µõÔ[“e^ÝpYVÞ€Bäg¥0¥Àk}Ú” œ ÁI8QRÛV}@ pï@à ³Û È3Ѐ#Ðp;ÈtoüñÈ'üP§¦±†G‚±ÓaÔÃF<ÑEõÊwï=C=¸áFxT”/üî¥ÂÙKæPÚiƒY1ÐW 1EP@±DJƒ¤0½ídJXBQÇ'\ä{<žà¶Öå`l xœ“Êr–$Ü >fI¶ôšzå%HÙ›àÕ›M¨Ó^˜0…)ŒÀc#B ÁBä eàÂÂÿvà6l?¢ÛpÀö9NléÉAjØòLt)dd¬ÔLM¾9Áº|óuÅ‘VŸüTnåÁˆcj4,p0H  z¤…(Lá Üó¡F†0„+Ìa\ @|çÕq¦ î³ÚÅš&à>N#P—p} …{@mæò%0)hA_$£„†Ã4òiCÀ–pH(8š@E@¨pÒd^= R:›”€üó€”å !ƒ²°Aô  ü«‘7&.+„ Úã'ä€`(ØÌ’¼–$.£äU Â$J0ýLe`ÔnÈh;)«%8ðÔÿ!Xrè8l Qˆ¸E( t @°*´ì.G8a\T€Î¡å jW‹¬¤€ \°3+¸JÂ0ð½no{Û€¬`à·W½®ŠXúS°¡YJ# þÄSÌ[%(ð¾œoµ‹1‚YnÂå4¨;³Ë Zf̨gV‘ D™)ö .ª¢¾D—~é k§ñܧ¼‚*-‰W ·À1Ý ’ `f@X½ÀUA€)J7 ØZöU,uiVé…+¥²Š„Û——®  L4 )¥¾úÅÿ¬%™lËbð/´ ®-.ÈhYÀB‚|s X\ãP€Òÿ‘mª3À 𙳙ä¯ûh§ànD´+ñî A‘”¤‚Þ T5A¬`ºÑ­.ðCÛÇe33XȮ˱^à¼+À np÷Mw8ØXtApƒÎ4Á!ƒ.s÷Ëßþúw¿_˜BÈÿøÀ©ÌBˆ3`!'m„ÀPŒ fm(0‚7,™+XÁ ^ðBJT¢•²ó+hBgäÙ pKèIˆ`ê¤ B¤Ðœ'ˆAÃòDàÀ…" q<(yêšpó0©£¯=ÝEE;8Ìj*?"BÛÐ…%haš‚ Ã?öG ùÌQH¬•Ì´øÿÉ{3“@@~uVF­ `“¬ A/Š'¼ÒÔ€½Àx Kx–†"±³·ûH³¸`ŠŸlK¨í¤ð²â(WmñÆEóŒÀ=ñéq±ƒ;–€wPc¢ ÅÚžhAoàUÔ ”'ŒXÀl¯Å@Å Õ@Òð#‚„ ZйqàoäR¡Øç•Ÿ©¡ÍÈeþu&uÿT |wæÅ‹¸“Sjz5`E‚×+T€nÈClœå¸ ú­Žë²º×Tuo2)¶!)X/–RLk!Vü‚%«už†6>Pþez%+<@_•7pyô±A¡“5ÛGBOíÇ.‚öjº7OdÔwBÅ"KÖr"2P³7(†.pçv—~*L.Ãb’)þÁ§¢³Zôå+ÐgƒÃ6Ãe\w……R)•7ó7z£RlPz+¤&-pîBFRBPFô(ò'!Ò!²´ƒAå-EU4ir&ëò"9ó"”âPç)`",:ãEë|³ÿ¡4NH8Q³¦å5¨±QVÒ:¯c #áAWýÅW€•1}•R{#+cX}+°ò®ø30 ¤‡…R(ØrÞrP0ȆºAˆ wæ‚~„¸2Tulø&2W'84ug/mᄎi¡/oÑ"¤Y…Sg«%IŸByé¡9ðQgïá0`d/P]6A0²Â;cFQ^-ñR+ÅŠA0ïˆRw³73E„/cU°±UdB P3øg.s‚¿r/ÍèŒna°ñŒÓø2PÞG‰gA]c‰g…8¬u5`b¡áóQ’p³uAªsÿÆ6¶ó:0AW±4ÿ°MãÁŽ;Çx+‰†³ò7c81­òèÔU ø/ûÁI«UšÓYOYkqZc‰eWi‰1°‘hA’`‘¤E‰.@é!pçµ$g³gMôLÄ6•…°6à0½C3@RrÓ;Çi,%+}X3pQ¡3]Œ#9+€ã8ŽViL" •´åRäVm¹]a_(@U–ã:&Þ¨žóopÇU—ÂcP^QWú˜¸™›º)ZP`¶›À)dL0dÐe`Ò÷Õ!¿œÎ =àGL@X P€|!½–>!{€Éùœâÿyi^`àA^ePVp$ñ3VDÀwÌ =Y q=EÐÑ'žþih >n°H4ptìÃdÿv66€>&A=†!ŸJýƒF a i Qþ£-“öŸ¹lÊçZ;Ã%G'E¯eg•‰'yu?EY`GS`ò™`aàhÍK o :oëY¤"7YA<°MäD²•@gw&Bj…P8ù3ˤKÀwXðS ¤Ám€#"U ¦CdWàå×0rZ“ë3N(™a¡[y¥"ôˆ\b/_õÛ¡?Q€€¡Ha¦?ÿ–C6’*u@1©:©“8ðšAùqôl ZâIQ“’Œrn"††#Pƒ1?FP«ƒ"?©ÿö«ÅÆ©G'P*%ŒS¬bqQ™Ð¿buïT'° ‡k¯êhë¶-O€Ê«wås}ñ“ÇdÇ*t–p$:vÖ®˜ÂgÁ’B“2,êg-Pt‚O)ÒÅ¡LR0‹ÎñOP ®Ì5#ññ!6 Y[ÅŠ:ð®MCB\âþqE*`;h+ã~Û¦,d'-;5KÛrH jª°ÝbJà°sŠ}éÿZ:@±ð“5vJ¥ê„}ÆNA[,¾ç °–{@@!@àÒ’"û×À3RàGZ€mY`F°Rà­.û–AHC@…TF i胢ÞTBÇÓl¢mu{ªîDŒ¦)h¨~ €,2¨'G(;(zp¤=0ì†êÆnEP\ûn¶!©“Êrp°¹p0Uä¤îáKj“Æ™át8™ú±öbªèt4xk,(˜zn˜{ê²O¬„GiG"ØÂvøä @]pQPQ‰önSÐ4¶=–[@TcàØ{tã„/@³/qº<ÿÀÈ¥:0NæRz¥ú’RWE8³ˆoR3pÒúÄm³æmÆQ²{(¿;(ptPÅ‘'»Ç.rx—Qà#R ZÐEÀrk6ŸÒ»¦` ãZ>¶ƒ;¢‹½)yËÖ¤N¤šçU±Í†g[JÒgÝW§¤‚G ƒ÷¤¿bÇ»~’‡ü×-p¿‚{Så2HC&*€w $X`nfÚ¥4`àGáIiV€&aU¬ëN`§#u°’":I¿Ò3IðeŒ‘]Ô €¶Ttƒ9¥cWvkôOQ;"‚F‡+FÈj/" –Rw’ƒw‚ üƒ‚ÿ@c>‘Åü¥¿J}#§ßk;’Ž‰ã‘ ÷YIp8væ.@&}v»±%ä±;Ã{m\­n(!rX !eƒ„[¸ü.d×Ãw‚&/‚4„X¯‹Åy°^˜cÈ‚€sk@`3:ßdgðÚÛ˜!Žþ†©×¼®wÖ€ç´Â±‘ýÆ=ÓP€Æ.puØ6,×2ó¿Ñ­'Ç%;¸üK‹Þâ‰B¼MEqüÌ.hØ&3r_âŒÂç+ð”$°p~@RÐLÔQbPig°¢ ú€dÑIõã$rë%àœŠXmè"ÐË+½ñÆ-@h’{÷ëzM{‚‡¸ÿ<{p´ÃãB¿¼d.”Ò·”RÐv7~ƒóY©±5°$M@£rt`³‹±h¼séÃ>ž3ÆãLμâ§b‚±}&­½×Æ F·×†]篮4vhÓuˆÃ´X"ßb{%@F,Ô‹wÑ{`‚UîT/Jã}h:ea9°…¬)\N=nõd7³5ª©§(ðAðÓ®..c,誀)Ø'¿ØÒoÌÃiÔ!a§SqtÚ×RÓøü¿8!BÀ2 ·‡ˆ×åŒ:Èã—•óZ+Ù8L¦:T? €yW6`7Ap71E"ê[uÈI§æÝGÆ£„,,p»ÌRF¸«»ÿÂ,iÔ´áÖ'±§ƒw¼‡ÁË‹òÄvB31ƒ×ЈÁ"WT/KSÌÛ—¥šn帗"ªŠ}u7ø8†*ÅR®B8ðòm âà?³Bç&.Øvk½'ö§2=v²wÞ;h(³ºGq½h°1Ò2=Í(ò{.«VQ[Å„TÙ€J÷€€M˜:¾ZW"0›ÃÓ_p…I+|ÓRˆUŠfØBÜ]' zGËÍ’"<•ÚoM"в#ð>8r‡BàË-Ⱦ§ÊÁÂ0^UWÕ±@L‘ù„5?eU9` •ëE¡’—Å&Fôëh`OP˜cˆRõ…dÿø*5UXfx"å­ƒYÞ·èƒq(HÅé— €œ êíTQy=YG¯J3/Ô­±Sùn‘YO:g±§¥1`%PÉ8H}Ô¾¥6áÁ0`/p›X˜ žR®ØþØWÉ}7¾‹Ë-=.ßB2E#.üŒ,üìθUŠX€  ˆx×y=,¢2ðš$ ™’š•ŸôY£Æ/95ÿÂ5`ygùMcÓã¾%n“¤¶s70ðBfRþˆéвX‹Œ2Ã;…i˜¬HBˆ")`Ò±×ägˆ=mqÍg[äNqQ~}†E{–)À?BÚXÌ£&5yI ÿWëÑ9VCó³®’,é :&‘hS'‘—5)Ü8 ìB†0Àì#Ð7/€*õ`HX25”5å7ßègtÒ8…“jA,»³±4¾¢%__ꙥ/10|]bÂXÙZ±Nšû­mu–‘I:w’œé>A/( c;.Ûä6v5à¸i7¯¢ŠD9X¬rЇ5SzCÎg[å4c5ü¢ãðºÑæXI0–u›å¨Þ€{ @ªëžóŸâ9®e[‹“:dƒëk©‰ÀD¾å+ÀšCÏç±H\¸;²É«EN1ÅžRÉ]ð/1„UàlPöš~³¢‰8éñ8kÿoã”8s_¡ ª¤éWÚ‘f‰¾æ0¶n…Ÿ1ïqYxx™—; 6Å…;Ya;Û!DÌÀ hDAA .dØÐáCˆ%N¤X1â&l ÐQ#GØpÀä$n(  M,€ã )àY nÜTPt¦ME,ȱ"O:.ä  ÁЧ,‡æ€ A‚8||øâƒ4Ðâ "Ä8FDø°®E¼yõîåÛwáˆ3æŽxð FŒ ‚0¬¸ÐøÂŠ+HHqÁE –-‹‚X‘Ôå ]¿ò¸´‰'9PèÈœƒ gIƒÐü™†$GØà=×ïoàÁ…'þûnÃãŠ1,‡¸¸ñŠäÅ¥O§N< ;libapreq2-2.17/docs/html/files.html0000644000175000017500000001413314277402434016631 0ustar jortonjorton libapreq2-2.17: File List
File List
Here is a list of all documented files with brief descriptions:
[detail level 123]
  include
 apreq.hMain header file..
 apreq_cookie.hCookies and Jars
 apreq_error.hError status codes
 apreq_module.hModule API
 apreq_param.hRequest parsing and parameter API
 apreq_parser.hRequest body parser API
 apreq_util.hUtility functions for apreq
 apreq_version.hVersioning API for libapreq
  module
  apache
 apreq_module_apache.h
  apache2
 apreq_module_apache2.h
libapreq2-2.17/docs/html/folderclosed.png0000644000175000017500000000115014277402434020007 0ustar jortonjorton‰PNG  IHDRÚ}\ˆ/IDATxí]MOÔ@~ÚúuØlp]ö¿#›Å]PYECˆ\9ù¼yÑß`ÖÄÿàÿÀÉxóâ¢C &=qÐÄ£—vZçv¶3m؃‡vžLûNç}Þ÷}Þ½ZA@n° OäNp ’xóþK°ññ€xÜj”°8sÑ€“ “€œ_¼[Âíæ§ïD'‚•yye+ø¼û 7#rNŸlïük* ¾0Ь_d«_(àñÖ±àôz=ñxõv§÷h©‰z¹€šØP-äóä’̪uý¼$»\DãJc—B4¯ãÝÖ.:£Ï-ÑÏß}µŠLEíºþ #—ûáºÀÏgN;BŠ€6ïýñ䬜…ö@’Ðåñp&™h>p9¤™EEά¨ÎÊ‘" u¥n€$R"?{¹<˜…ë…%PNtâ$‰ß¶±úá+^<é"§2 ªDq”q´\¬«Ò™a–Œ‘©Aÿ€"Ôµ ™êŸèP£}#Eàz{û.8i îp³ê(ADwD¦E<ê¬cE¦$ HdÊÄ ”.:Ù GŽ-`ŒL‚ý¾'¢‰Ä<¤CIª½;ÙÇTZd±i};>èôß‚z×;K×§8t ¤Ž q”:uvÿv•Ý›¬²ÙvEân{„M·FXg¼ÌfZÖ¨°¹‰*›ßÌß©±ù©:›j–YqèÜë#3çÏSøWøÿÿÑr'ø Ôùù‚ ©¡IEND®B`‚libapreq2-2.17/docs/html/folderopen.png0000644000175000017500000000112514277402434017501 0ustar jortonjorton‰PNG  IHDRÚ}\ˆIDATxí]?oÓPÿ9iš4i°;ii“¶‰ZЉ‘‰ÀÀ7`bèÔÙ¬Øù,HìU'ô$*Tµ]‚T¡DPÚÄ6wÏ}‰;¡C; a¿ÓߟûÝïîž¼jAÀ­InSþ}€9H“ÓŽ|?íÁ÷ =_ÊÆŠ­†¥Àue*;¯YEäsYäæB¢Ÿ¿þÄ—£sÙ½½ÙŒ† É«›©ÀYÇq !GÇ¿v̇¹ÑØ®š °Œ‚ÔF¹}q¥b]÷7í·0)Úd›¾ÿð-èº}Pfä£ÖY{4™ÑÂ@}úæôñ2ÛüÔ—ñúåNŒI‚ÁǃcçÁº%£¬UаI³mc±ô˜å¼ÔÆüÈ>é¸xþt9Æ$µý OæVE*õU´Ì‚ç#ž×ˆ•ïûr@l$øPÿrHaaÇ¥ ²›dZ®rè‘ãqI„o¼øT\Ž,tªj2FAxv-LŸp׌p TÄI/ \¥sfí½; jViTƒèú¤o^cpÅü¼ûû»Ïb]”€¢¤<†aþÕœ²“ßÓ˜y“£§9:Œîù+À³€ñà,E žf³6éNˆÄE£KU}Ü^;¶ØnZ¢uß­US4— ѬëbížN¶.Úk¦ØjTÄöº%µªâ i¯VÄÊÝò§™ Èù¸)ùÿG€™òºJ@T x”IEND®B`‚libapreq2-2.17/docs/html/functions.html0000644000175000017500000001731114277402434017540 0ustar jortonjorton libapreq2-2.17: Data Fields
Here is a list of all documented struct and union fields with links to the struct/union documentation for each field:

- a -

- b -

- c -

- d -

- f -

- h -

- i -

- j -

- m -

- n -

- p -

- r -

- t -

- u -

- v -

libapreq2-2.17/docs/html/functions_vars.html0000644000175000017500000001711114277402434020571 0ustar jortonjorton libapreq2-2.17: Data Fields - Variables
 

- a -

- b -

- c -

- d -

- f -

- h -

- i -

- j -

- m -

- n -

- p -

- r -

- t -

- u -

- v -

libapreq2-2.17/docs/html/globals.html0000644000175000017500000005252314277402434017157 0ustar jortonjorton libapreq2-2.17: Globals
Here is a list of all documented functions, variables, defines, enums, and typedefs with links to the documentation:

- a -

libapreq2-2.17/docs/html/globals_defs.html0000644000175000017500000001721014277402434020152 0ustar jortonjorton libapreq2-2.17: Globals
 

- a -

libapreq2-2.17/docs/html/globals_enum.html0000644000175000017500000000335414277402434020201 0ustar jortonjorton libapreq2-2.17: Globals
 
libapreq2-2.17/docs/html/globals_eval.html0000644000175000017500000000470214277402434020162 0ustar jortonjorton libapreq2-2.17: Globals
 
libapreq2-2.17/docs/html/globals_func.html0000644000175000017500000003063114277402434020166 0ustar jortonjorton libapreq2-2.17: Globals
 

- a -

libapreq2-2.17/docs/html/globals_type.html0000644000175000017500000000502314277402434020211 0ustar jortonjorton libapreq2-2.17: Globals
 
libapreq2-2.17/docs/html/group__apreq__lang.html0000644000175000017500000000441114277402434021350 0ustar jortonjorton libapreq2-2.17: Language Bindings
Language Bindings

libapreq2 APIs for programming languages other than C More...

Modules

 Perl
 XS Modules.
 

Detailed Description

libapreq2 APIs for programming languages other than C

XXX

libapreq2-2.17/docs/html/group__apreq__module.html0000644000175000017500000000444714277402434021725 0ustar jortonjorton libapreq2-2.17: Modules
Modules

apreq2 modules included in libapreq2-2.17. More...

Modules

 Apache 2.X Filter Module
 mod_apreq2 - DSO that ties libapreq2 to Apache HTTPD 2.X.
 

Detailed Description

apreq2 modules included in libapreq2-2.17.

XXX

libapreq2-2.17/docs/html/group__apreq__xs.html0000644000175000017500000001130314277402434021057 0ustar jortonjorton libapreq2-2.17: Perl

XS Modules. More...

Modules

 Apache2::Request
 
 Apache2::Upload
 
 
 APR::Request
 
 
 APR::Request::Param
 
 APR::Request::Error
 
 APR::Request::CGI
 
 APR::Request::Apache2
 

Detailed Description

XS Modules.

libapreq2-2.17/docs/html/group__apreq__xs__apr__request.html0000644000175000017500000004567514277402434024012 0ustar jortonjorton libapreq2-2.17: APR::Request
APR::Request

NAME

APR::Request - wrapper for libapreq2's module/handle API.

SYNOPSIS

use APR::Request;

$req = APR::Request::Custom->handle($pool,
                                    "foo=arg1&bar=arg2",
                                    "apache=quux",
                                     $parser, 1e6, $bb);
$param = $req->param("foo");
$cookie = $req->jar("apache");

DESCRIPTION

The APR::Request module provides the base methods for interfacing with libapreq2's module API. It also provides a few utility functions and constants.

This manpage documents version 2.17 of the APR::Request, APR::Request::Custom, APR::Request::Cookie::Table, and APR::Request::Param::Table packages.

METHODS

APR::Request::Custom - derived from APR::Request.

handle

APR::Request::Custom->handle($pool,
                             $query_string,
                             $cookie_header,
                             $parser,
                             $read_limit,
                             $brigade)

Creates a new APR::Request::Custom object. The $query_string and $cookie_headers are immediately parsed into the args and jar tables. The $parser is an APR::Request::Parser object which is invoked when fetching body entries from the $brigade. The $read_limit represents the maximum number of bytes this handle may feed into the parser.

METHODS

APR::Request

pool

$req->pool()

Returns the APR::Pool object associated to this handle.

bucket_alloc

$req->bucket_alloc()

Returns the APR::BucketAlloc object associated to this handle.

jar_status

$req->jar_status()

Returns the final status code of the handle's cookie header parser.

args_status

$req->args_status()

Returns the final status code of the handle's query-string parser.

body_status

$req->body_status()

Returns the final status code of the handle's body parser.

param_status

$req->param_status()

Returns ($req->args_status, $req->body_status) in list context; otherwise returns $req->args_status || $req->body_status.

parse

$req->parse()

Parses the jar, args, and body tables. Returns $req->jar_status, $req->args_status, $req->body_status.

@status = $req->parse;
ok @status == 3;
ok $status[0] == $req->jar_status;
ok $status[1] == $req->args_status;
ok $status[2] == $req->body_status;

jar

$req->jar()
$req->jar($key)

With no arguments, this method returns a tied APR::Request::Cookie::Table object (or undef if the "Cookie" header is absent) in scalar context, or the names (in order, with repetitions) of all the parsed cookies.

With the $key argument, in scalar context this method fetches the first matching cookie. In list context it returns all matching cookies. The returned cookies are the values as they appeared in the incoming Cookie header.

jar() will throw an APR::Request::Error object whenever jar_status() is non-zero and the return value is potentially invalid (eg scalar $req->jar($key) will not die if the desired cookie was successfully parsed).

$jar = $req->jar;
@cookie_names = $req->jar;
ok $jar->isa("APR::Request::Cookie::Table");
ok shift @cookie_names eq $_ for keys %$jar;

$cookie = $req->jar("apache");
@cookies = $req->jar("apache");

args

$req->args()
$req->args($key)

With no arguments, this method returns a tied APR::Request::Param::Table object (or undef if the query string is absent) in scalar context, or the names (in order, with repetitions) of all the parsed query-string arguments.

With the $key argument, in scalar context this method fetches the first matching query-string arg. In list context it returns all matching args.

args() will throw an APR::Request::Error object whenever args_status() is non-zero and the return value is potentially invalid (eg scalar $req->args($key) will not die if the desired query argument was successfully parsed).

$args = $req->args;
@arg_names = $req->args;
ok $args->isa("APR::Request::Param::Table");
ok shift @arg_names eq $_ for keys %$args;

$foo = $req->args("foo");
@bar = $req->args("bar");

body

$req->body()
$req->body($key)

With no arguments, this method returns a tied APR::Request::Param::Table object (or undef if the request body is absent) in scalar context, or the names (in order, with repetitions) of all the parsed cookies.

With the $key argument, in scalar context this method fetches the first matching body param. In list context it returns all matching body params.

body() will throw an APR::Request::Error object whenever body_status() is non-zero and the return value is potentially invalid (eg scalar $req->body($key) will not die if the desired body param was successfully parsed).

$body = $req->body;
@body_names = $req->body;
ok $body->isa("APR::Request::Param::Table");
ok shift @body_names eq $_ for keys %$body;

$alpha = $req->body("alpha");
@beta = $req->body("beta");

param

$req->param()
$req->param($key)

With no arguments, this method returns a tied APR::Request::Param::Table object (or undef, if the query string and request body are absent) in scalar context, or the names (in order, with repetitions) of all the incoming (args + body) params.

With the $key argument, in scalar context this method fetches the first matching param. In list context it returns all matching params.

param() will throw an APR::Request::Error object whenever param_status() is non-zero and the return value is potentially invalid (eg scalar $req->param($key) will not die if the desired param was successfully parsed).

$param = $req->param;
@param_names = $req->param;
ok $param->isa("APR::Request::Param::Table");
ok shift @param_names eq $_ for keys %$param;

$foo = $req->param("foo");
@foo = $req->param("foo");

upload

$req->upload()
$req->upload($key)

With no arguments, this method returns a tied APR::Request::Param::Table object (or undef if the request body is absent) in scalar context (whose entries are APR::Request::Param objects), or the names (in order, with repetitions) of all the incoming uploads.

With the $key argument, in scalar context this method fetches the first matching upload. In list context it returns all matching uploads. The return values are APR::Request::Param objects.

upload() will throw an APR::Request::Error object whenever body_status() is non-zero.

$uploads = $req->upload;
@upload_names = $req->upload;
ok $uploads->isa("APR::Request::Param::Table");
ok shift @upload_names eq $_ for keys %$uploads;
ok $_->upload for values %$uploads;

$up = $req->upload("beta");
@ups = $req->upload("beta");
ok $_->isa("APR::Request::Param") for $up, @ups;
ok $_->upload for $up, @ups;

read_limit

$req->read_limit()
$req->read_limit($set)

Get/set the read limit, which controls the total amount of bytes that can be fed to the current parser.

brigade_limit

$req->brigade_limit()
$req->brigade_limit($set)

Get/set the brigade_limit for the current parser. This limit determines how many bytes of a file upload that the parser may spool into main memory. Uploads exceeding this limit are written directly to disk.

temp_dir

$req->temp_dir()
$req->temp_dir($set)

Get/set the spool directory for uploads which exceed the configured brigade_limit.

disable_uploads

$req->disable_uploads()

Engage the disable_uploads hook for this request.

upload_hook

$req->upload_hook($callback)

Add an upload hook callback for this request. The arguments to the $callback sub are ($upload, $new_data).

import

Exports a list of subs into the caller's package.

SUBROUTINES

APR::Request

encode

encode($string)

Exportable sub which returns the url-encoded form of $string.

decode

decode($string)

Exportable sub which returns the url-decoded form of $string.

SUBCLASSING

APR::Request

If the instances of your subclass are hash references then you can actually inherit from APR::Request as long as the APR::Request object is stored in an attribute called "r" or "_r". (The APR::Request class effectively does the delegation for you automagically, as long as it knows where to find the APR::Request object to delegate to.) For example:

package MySubClass;
use APR::Request::Custom;
our @ISA = qw(APR::Request);
sub new {
    my($class, @args) = @_;
    return bless { r => APR::Request::Custom->handle(@args) }, $class;
}

METHODS

APR::Request::Cookie::Table - read-only version of APR::Table.

Tables in this class normally arise from calls to APR::Request::jar().

$table->cookie_class()
$table->cookie_class($set)

Get/set the class each table element is blessed into during a get or FETCH call. If defined, the class must be derived from APR::Request::Cookie. When called with $set, it returns the $table. Otherwise it returns the name of the current class, or undef if no cookie class is defined.

get

$table->get($key)

Same as FETCH.

FETCH

$table->FETCH($key)

In scalar context, this returns the first value matching $key (note: see NEXTKEY for additional notes). The match is always case-insensitive. In list context, this returns all matching values. Note: the type of the return values depends on the table's current cookie_class.

EXISTS

Synonym for defined; these tables are not allowed to contain undefined values. Since these are constant tables, they don't autovivify either.

FIRSTKEY

$table->FIRSTKEY()

Returns the first key in the table.

NEXTKEY

$table->NEXTKEY()

Returns the next key in the table. For perl 5.8+, if the key is multivalued, a subsequent FETCH on this key will return the corresponding value, until either NEXTKEY or FIRSTKEY is invoked again. For perl 5.6, FETCH always returns the first value.

do

$table->do($callback, @keys)

Same as APR::Table::do; iterates over the table calling $callback->($key, $value) for each matching @keys. If @keys is empty, this iterates over the entire table.

Note: The type of $value inserted into the callback depends on the table's current cookie_class.

METHODS

APR::Request::Param::Table

param_class

$table->param_class()
$table->param_class($set)

Get/set the class each table element is blessed into during a get or FETCH call. If defined, the class must be derived from APR::Request::Param. When called with $set, it returns the $table. Otherwise it returns the name of the current class, or undef if no param class is defined.

get

$table->get($key)

Same as FETCH.

FETCH

$table->FETCH($key)

In scalar context, this returns the first value matching $key (see NEXTKEY for additional notes on this). The match is always case-insensitive. In list context, this returns all matching values. Note: the type of the return values depends on the table's current param_class.

EXISTS

Synonym for defined; these tables are not allowed to contain undefined values. Since these are constant tables, they don't autovivify either.

NEXTKEY

$table->NEXTKEY()

Returns the next key in the table. For perl 5.8+, if the key is multivalued, a subsequent FETCH on this key will return the corresponding value, until either NEXTKEY or FIRSTKEY is invoked again. For perl 5.6, FETCH always returns the first value.

FIRSTKEY

$table->FIRSTKEY()

Returns the first key in the table.

do

$table->do($callback, @keys)

Same as APR::Table::do; iterates over the table calling $callback->($key, $value) for each matching @keys. If @keys is empty, this iterates over the entire table.

Note: The type of $value inserted into the callback depends on the table's current value_class.

SEE ALSO

APR::Request::Error, APR::Request::Param, APR::Request::Cookie, APR::Request::Parser

COPYRIGHT

Licensed to the Apache Software Foundation (ASF) under one or more
contributor license agreements.  See the NOTICE file distributed with
this work for additional information regarding copyright ownership.
The ASF licenses this file to You under the Apache License, Version 2.0
(the "License"); you may not use this file except in compliance with
the License.  You may obtain a copy of the License at

    http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
libapreq2-2.17/docs/html/group__apreq__xs__apr__request__apache2.html0000644000175000017500000000714014277402434025515 0ustar jortonjorton libapreq2-2.17: APR::Request::Apache2
APR::Request::Apache2

NAME

APR::Request::Apache2 - wrapper for a mod_apreq2 handle.

SYNOPSIS

use APR::Request::Apache2;
my $req = APR::Request::Apache2->handle($r);

DESCRIPTION

The APR::Request::Apache2 module provides a constructor for interfacing with the mod_apreq2 Apache module.

This manpage documents version 2.17 of the APR::Request::Apache2 package.

METHODS

APR::Request::Apache2 - derived from APR::Request.

handle

APR::Request::Apache2->handle($r)

Creates an APR::Request::Apache2 object. The argument $r is an Apache2::RequestRec object (from mod_perl2).

SEE ALSO

APR::Request, Apache2::RequestRec.

COPYRIGHT

Licensed to the Apache Software Foundation (ASF) under one or more
contributor license agreements.  See the NOTICE file distributed with
this work for additional information regarding copyright ownership.
The ASF licenses this file to You under the Apache License, Version 2.0
(the "License"); you may not use this file except in compliance with
the License.  You may obtain a copy of the License at

    http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
libapreq2-2.17/docs/html/group__apreq__xs__apr__request__cgi.html0000644000175000017500000000706314277402434024760 0ustar jortonjorton libapreq2-2.17: APR::Request::CGI
APR::Request::CGI

NAME

APR::Request::CGI - wrapper for libapreq2's CGI handle.

SYNOPSIS

use APR::Request::CGI;
my $req = APR::Request::CGI->handle($pool);

DESCRIPTION

The APR::Request::CGI module provides a constructor for accessing CGI request data associated to a pool via libapreq2.

This manpage documents version 2.17 of the APR::Request::CGI package.

METHODS

APR::Request::CGI - derived from APR::Request.

handle

APR::Request::CGI->handle($pool)

Creates an APR::Request::CGI object. The argument $pool is an APR::Pool object.

SEE ALSO

APR::Request, APR::Pool.

COPYRIGHT

Licensed to the Apache Software Foundation (ASF) under one or more
contributor license agreements.  See the NOTICE file distributed with
this work for additional information regarding copyright ownership.
The ASF licenses this file to You under the Apache License, Version 2.0
(the "License"); you may not use this file except in compliance with
the License.  You may obtain a copy of the License at

    http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
libapreq2-2.17/docs/html/group__apreq__xs__apr__request__cookie.html0000644000175000017500000002452714277402434025473 0ustar jortonjorton libapreq2-2.17: APR::Request::Cookie
APR::Request::Cookie

NAME

APR::Request::Cookie - wrapper for libapreq2's cookie API.

SYNOPSIS

use APR::Request::Cookie;

# fetch inbound cookie
$jar = $req->jar;
$cookie1 = $jar->get("cookie1");

# generate new cookie
$cookie = APR::Request::Cookie->new($req->pool,
                                    name => "foo",
                                   value => "bar",
                                  domain => "capricorn.com");
print "$cookie"; # prints "bar"

$cookie->domain("example.com"); # change domains
$cookie->version(1); # upgrade it to conform with RFC 2109/2965.

# send a response header
print sprintf "Set-Cookie: %s\n", $cookie->as_string;

DESCRIPTION

The APR::Request::Cookie module provides base methods for interfacing with libapreq2's cookie API. It also provides a few utility functions and constants.

This manpage documents version 2.17 of the APR::Request::Cookie package.

OVERLOADS

APR::Request::Cookie

""

"$cookie"

The double-quote interpolation operator maps to APR::Request::Cookie::value().

ok "$cookie" eq $cookie->value;

METHODS

APR::Request::Cookie

new

APR::Request::Cookie->new($pool,
                           name => $name,
                          value => $value,
                          %args)

Creates a new cookie. Here $pool is an APR::Pool object, and $name is the cookie's name. The $value is transformed into the cookie's raw value through the class' freeze() method. The remaining arguments are optional:

-secure
-httponly
-version
-path
-domain
-port
-expires
-comment
-commentURL

For details on these arguments, please consult the corresponding method's documentation.

freeze

APR::Request::Cookie->freeze($value)

Class method representing the default serializer; here it returns $value unmodified.

ok "foo" eq APR::Request::Cookie->freeze("foo");

thaw

$cookie->thaw()

Reverses freeze(); here it simply returns $cookie->value since freeze() is a noop.

ok $cookie->thaw eq $cookie->value;

name

$cookie->name()

Fetch the cookie's name. This attribute cannot be modified and is never serialized; ie freeze() and thaw() do not act on the cookie's name.

value

$cookie->value()

Fetch the cookie's raw (frozen) value. This attribute cannot be modified.

secure

$cookie->secure()
$cookie->secure($set)

Get/set the cookie's secure flag.

$cookie->secure(1);
ok $cookie->secure == 1;

httponly

$cookie->httponly()
$cookie->httponly($set)

Get/set the cookie's HttpOnly flag.

$cookie->httponly(1);
ok $cookie->httponly == 1;

version

$cookie->version()
$cookie->version($set)

Get/set the cookie's version number. Version 0 cookies conform to the Netscape spec; Version 1 cookies conform to either RFC 2109 or RFC 2965.

$version = $cookie->version;
$cookie->version(1);
ok $cookie->version == 1;

path

$cookie->path()
$cookie->path($set)

Get/set the cookie's path string.

$path = $cookie->path;
$cookie->path("/1/2/3/4");
ok $cookie->path eq "/1/2/3/4";

domain

$cookie->domain()
$cookie->domain($set)

Get/set the cookie's domain string.

$domain = $cookie->domain;
$cookie->domain("apache.org");
ok $cookie->domain eq "apache.org";

port

$cookie->port()
$cookie->port($set)

Get/set the cookie's port string. Only valid for Version 1 cookies.

$port = $cookie->port;
$cookie->port(8888);
ok $cookie->port == 8888;

comment

$cookie->comment()
$cookie->comment($set)

Get/set the cookie's comment string. Only valid for Version 1 cookies.

$comment = $cookie->comment;
$cookie->comment("quux");
ok $cookie->comment eq "quux";

commentURL

$cookie->commentURL()
$cookie->commentURL($set)

Get/set the cookie's commentURL string. Only valid for Version 1 cookies.

$commentURL = $cookie->commentURL;
$cookie->commentURL("/foo/bar");
ok $cookie->commentURL eq "/foo/bar";

is_tainted

$cookie->is_tainted()
$cookie->is_tainted($set)

Get/set the cookie's internal tainted flag.

$tainted = $cookie->is_tainted;
$cookie->is_tainted(1);
ok $cookie->is_tainted == 1;

make

APR::Request::Cookie->make($pool, $name, $value)

Fast XS cookie constructor invoked by new(). The cookie's raw name & value are taken directly from the passed in arguments; no freezing/encoding is done on the $value.

as_string

$cookie->as_string()

String representation of the cookie, suitable for inclusion in a "Set-Cookie" header.

print "Set-Cookie: ", $cookie->as_string, "\n";

SUBROUTINES

APR::Request::Cookie

expires

expires($date_string)

SEE ALSO

Apache2::Cookie, APR::Request.

COPYRIGHT

Licensed to the Apache Software Foundation (ASF) under one or more
contributor license agreements.  See the NOTICE file distributed with
this work for additional information regarding copyright ownership.
The ASF licenses this file to You under the Apache License, Version 2.0
(the "License"); you may not use this file except in compliance with
the License.  You may obtain a copy of the License at

    http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
libapreq2-2.17/docs/html/group__apreq__xs__apr__request__error.html0000644000175000017500000001223514277402434025344 0ustar jortonjorton libapreq2-2.17: APR::Request::Error
APR::Request::Error

NAME

APR::Request::Error - wrapper for libapreq2's error API.

SYNOPSIS

use APR::Request::Error;

DESCRIPTION

This manpage documents version 2.17 of the APR::Request::Error package.

SUBROUTINES

APR::Request::Error - derived from APR::Request and APR::Error.

strerror

strerror($status)

Returns the apreq error string associated with a numeric $status code.

ERROR CONSTANTS

GENERAL

Internal apreq error

TAINTED

Attempt to perform unsafe action with tainted data

BADDATA

Malformed input data

BADCHAR

Invalid character

BADSEQ

Invalid byte sequence

BADATTR

Unrecognized attribute

BADHEADER

Malformed header string

NODATA

Missing input data

NOTOKEN

Expected token not present

NOATTR

Missing attribute

NOHEADER

Missing header

NOPARSER

Missing parser

MISMATCH

Conflicting information

OVERLIMIT

Exceeds configured maximum limit

NOTEMPTY

Setting already configured

SEE ALSO

APR::Request, APR::Error

COPYRIGHT

Licensed to the Apache Software Foundation (ASF) under one or more
contributor license agreements.  See the NOTICE file distributed with
this work for additional information regarding copyright ownership.
The ASF licenses this file to You under the Apache License, Version 2.0
(the "License"); you may not use this file except in compliance with
the License.  You may obtain a copy of the License at

    http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
libapreq2-2.17/docs/html/group__apreq__xs__apr__request__param.html0000644000175000017500000002465214277402434025321 0ustar jortonjorton libapreq2-2.17: APR::Request::Param
APR::Request::Param

NAME

APR::Request::Param - wrapper for libapreq2's param API.

SYNOPSIS

use APR::Request::Param;

$arg1 = $req->args('alpha');
$body = $req->body;
$body->param_class("APR::Request::Param");
ok $_->isa("APR::Request::Param") for values %$body;

@uploads = grep {$_->upload} values %$body;
$param = $body->get('beta');
$param->upload_slurp(my $content);

DESCRIPTION

The APR::Request::Param module provides base methods for interfacing with libapreq2's param API. It also provides a few utility functions and constants.

This manpage documents version 2.17 of the APR::Request::Param, APR::Request::Brigade, and APR::Request::Brigade::IO packages.

OVERLOADS

APR::Request::Param

""

"$param"

The double-quote interpolation operator maps to APR::Request::Param::value().

METHODS

APR::Request::Param

name

$param->name()

Returns the param's name. This attribute cannot be modified.

value

$param->value()

Returns the param's value. This attribute cannot be modified.

is_tainted

$param->is_tainted()
$param->is_tainted($set)

Get/set the param's internal tainted flag. Note: if the param's charset is APREQ_CHARSET_UTF8 (8), this also activates the SvUTF8_on flag during calls to name() and/or value().

$tainted = $param->is_tainted;
$param->is_tainted(0);
ok $param->is_tainted == 0;

charset

$param->charset()
$param->charset($set)

Get/set the param's internal charset. The charset is a number between 0 and 255; the current recognized values are

0 APREQ_CHARSET_ASCII (7-bit us-ascii)
1 APREQ_CHARSET_LATIN1 (8-bit iso-8859-1)
2 APREQ_CHARSET_CP1252 (8-bit Windows-1252)
8 APREQ_CHARSET_UTF8 (utf8 encoded Unicode)

See is_tainted above for info about how APREQ_CHARSET_UTF8 relates to perl's UTF-8 flag.

$charset = $param->charset;
$param->charset(2);
ok $param->charset == 2;

make

APR::Request::Param->make($pool, $name, $value)

Fast XS param constructor.

info

$param->info()
$param->info($set)

Get/set the APR::Table headers for this param.

upload

$param->upload()
$param->upload($set)

Get/set the APR::Brigade file-upload content for this param.

upload_filename

$param->upload_filename()

Returns the client-side filename associated with this param.

$param->upload_link($path)

Links the file-upload content with the local file named $path. Creates a hard-link if the spoolfile's (see upload_tempname) temporary directory is on the same device as $path; otherwise this writes a copy.

upload_slurp

$param->upload_slurp($data)

Reads the entire file-upload content into $data.

upload_size

$param->upload_size()

Returns the size of the param's file-upload content.

upload_type

$param->upload_type()

Returns the MIME-type of the param's file-upload content.

upload_tempname

$param->upload_tempname()

Returns the name of the local spoolfile for this param.

upload_io

$param->upload_io()

Returns an APR::Request::Brigade::IO object, which can be treated as a non-seekable IO stream.

upload_fh

$param->upload_fh()

Returns a seekable filehandle representing the file-upload content.

METHODS

APR::Request::Brigade

This class is derived from APR::Brigade, providing additional methods for TIEHANDLE, READ and READLINE. To be memory efficient, these methods delete buckets from the brigade as soon as their data is actually read, so you cannot seek on handles tied to this class. Such handles have semantics similar to that of a read-only socket.

new, TIEHANDLE

APR::Request::Brigade->TIEHANDLE($bb)

Creates a copy of the bucket brigade represented by $bb, and blesses that copy into the APR::Request::Brigade class. This provides syntactic sugar for using perl's builtin read, readline, and <> operations on handles tied to this package:

use Symbol;
$fh = gensym;
tie *$fh, "APR::Request::Brigade", $bb;
print while <$fh>;

READ

$bb->READ($contents)
$bb->READ($contents, $length)
$bb->READ($contents, $length, $offset)

Reads data from the brigade $bb into $contents. When omitted $length defaults to -1, which reads the first bucket into $contents. A positive $length will read in $length bytes, or the remainder of the brigade, whichever is greater. $offset represents the index in $context to read the new data.

READLINE

$bb->READLINE()

Returns the first line of data from the bride. Lines are terminated by linefeeds (the '\012' character), but we may eventually use $/ instead.

METHODS

APR::Request::Brigade::IO

read

OO interface to APR::Request::Brigade::READ.

readline

OO interface to APR::Request::Brigade::READLINE.

SEE ALSO

APR::Request, APR::Table, APR::Brigade.

COPYRIGHT

Licensed to the Apache Software Foundation (ASF) under one or more
contributor license agreements.  See the NOTICE file distributed with
this work for additional information regarding copyright ownership.
The ASF licenses this file to You under the Apache License, Version 2.0
(the "License"); you may not use this file except in compliance with
the License.  You may obtain a copy of the License at

    http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
libapreq2-2.17/docs/html/group__apreq__xs__cookie.html0000644000175000017500000003476014277402434022563 0ustar jortonjorton libapreq2-2.17: Apache2::Cookie
Apache2::Cookie

NAME

Apache2::Cookie, Apache2::Cookie::Jar - HTTP Cookies Class

SYNOPSIS

use Apache2::Cookie;

$j = Apache2::Cookie::Jar->new($r);
$c_in = $j->cookies("foo");         # get cookie from request headers

$c_out = Apache2::Cookie->new($r,
                              -name  => "mycookie",
                              -value => $c_in->name );

$c_out->path("/bar");               # set path to "/bar"
$c_out->bake($r);                   # send cookie in response headers

DESCRIPTION

The Apache2::Cookie module is based on the original 1.X versions, which mimic the CGI::Cookie API. The current version of this module includes several packages and methods which are patterned after Apache2::Request, yet remain largely backwards-compatible with the original 1.X API (see the "PORTING from 1.X" section below for known issues).

This manpage documents the Apache2::Cookie and Apache2::Cookie::Jar packages.

Apache2::Cookie::Jar

This class collects Apache2::Cookie objects into a lookup table. It plays the same role for accessing the incoming cookies as Apache2::Request does for accessing the incoming params and file uploads.

new

Apache2::Cookie::Jar->new($env)

Class method that retrieves the parsed cookie jar from the current environment.

cookies

$jar->cookies()
$jar->cookies($key)

Retrieve cookies named $key with from the jar object. In scalar context the first such cookie is returned, and in list context the full list of such cookies are returned.

If the $key argument is omitted, scalar $jar->cookies() will return an APR::Request::Cookie::Table object containing all the cookies in the jar. Modifications to the this object will affect the jar's internal cookies table in apreq_jar_t, so their impact will be noticed by all libapreq2 applications during this request.

In list context $jar->cookies() returns the list of names for all the cookies in the jar. The order corresponds to the order in which the cookies appeared in the incoming "Cookie" header.

This method will throw an APR::Request::Error object into $@ if the returned value(s) could be unreliable. In particular, note that scalar $jar->cookies("foo") will not croak if it can locate the a "foo" cookie within the jar's parsed cookie table, even if the cookie parser has failed (the cookies are parsed in the same order as they appeared in the "Cookie" header). In all other circumstances cookies will croak if the parser failed to successfully parse the "Cookie" header.

$c = Apache2::Cookie->new($r, name => "foo", value => 3);
$j->cookies->add($c);

$cookie = $j->cookies("foo");  # first foo cookie
@cookies = $j->cookies("foo"); # all foo cookies
@names = $j->cookies();        # all cookie names

status

$jar->status()

Get the APR status code of the cookie parser: APR_SUCCESS on success, error otherwise.

Apache2::Cookie

new

Apache2::Cookie->new($env, %args)

Just like CGI::Cookie::new, but requires an additional environment argument:

$cookie = Apache2::Cookie->new($r,
                         -name    =>  'foo',
                         -value   =>  'bar',
                         -expires =>  '+3M',
                         -domain  =>  '.capricorn.com',
                         -path    =>  '/cgi-bin/database',
                         -secure  =>  1
                        );

The -value argument may be either an arrayref, a hashref, or a string. Apache2::Cookie::freeze encodes this argument into the cookie's raw value.

freeze

Apache2::Cookie->freeze($value)

Helper function (for new) that serializes a new cookie's value in a manner compatible with CGI::Cookie (and Apache2::Cookie 1.X). This class method accepts an arrayref, hashref, or normal perl string in $value.

$value = Apache2::Cookie->freeze(["2+2", "=4"]);

thaw

Apache2::Cookie->thaw($value)
$cookie->thaw()

This is the helper method (for value) responsible for decoding the raw value of a cookie. An optional argument $value may be used in place of the cookie's raw value. This method can also decode cookie values created using CGI::Cookie or Apache2::Cookie 1.X.

print $cookie->thaw;                    # prints "bar"
@values = Apache2::Cookie->thaw($value); # ( "2+2", "=4" )

as_string

$cookie->as_string()

Format the cookie object as a string. The quote-operator for Apache2::Cookie is overloaded to run this method whenever a cookie appears in quotes.

ok "$cookie" eq $cookie->as_string;

name

$cookie->name()

Get the name of the cookie.

value

$cookie->value()

Get the (unswizzled) value of the cookie:

my $value = $cookie->value;
my @values = $cookie->value;

Note: if the cookie's value was created using a freeze method, one way to reconstitute the object is by subclassing Apache2::Cookie with a package that provides the associated thaw sub:

{
    package My::COOKIE;
    @ISA = 'Apache2::Cookie';
    sub thaw { my $val = shift->raw_value; $val =~ tr/a-z/A-Z/; $val }
}

bless $cookie, "My::COOKIE";

ok $cookie->value eq "BAR";

raw_value

$cookie->raw_value()

Gets the raw (opaque) value string as it appears in the incoming "Cookie" header.

ok $cookie->raw_value eq "bar";

bake

$cookie->bake($r)

Adds a Set-Cookie header to the outgoing headers table.

bake2

$cookie->bake2($r)

Adds a Set-Cookie2 header to the outgoing headers table.

domain

$cookie->domain()
$cookie->domain($set)

Get or set the domain for the cookie:

$domain = $cookie->domain;
$cookie->domain(".cp.net");

path

$cookie->path()
$cookie->path($set)

Get or set the path for the cookie:

$path = $cookie->path;
$cookie->path("/");

version

$cookie->version()
$cookie->version($set)

Get or set the cookie version for this cookie. Netscape spec cookies have version = 0; RFC-compliant cookies have version = 1.

ok $cookie->version == 0;
$cookie->version(1);
ok $cookie->version == 1;

expires

$cookie->expires()
$cookie->expires($set)

Get or set the future expire time for the cookie. When assigning, the new value ($set) should match /^\+?(\d+)([YMDhms]?)$/ $2 qualifies the number in $1 as representing "Y"ears, "M"onths, "D"ays, "h"ours, "m"inutes, or "s"econds (if the qualifier is omitted, the number is interpreted as representing seconds). As a special case, $set = "now" is equivalent to $set = "0".

my $expires = $cookie->expires;
$cookie->expires("+3h"); # cookie is set to expire in 3 hours

secure

$cookie->secure()
$cookie->secure($set)

Get or set the secure flag for the cookie:

$cookie->secure(1);
$is_secure = $cookie->secure;
$cookie->secure(0);

httponly

$cookie->httponly()
$cookie->httponly($set)

Get or set the HttpOnly flag for the cookie:

$cookie->httponly(1);
$is_HttpOnly = $cookie->httponly;
$cookie->httponly(0);

comment

$cookie->comment()
$cookie->comment($set)

Get or set the comment field of an RFC (Version > 0) cookie.

$cookie->comment("Never eat yellow snow");
print $cookie->comment;

commentURL

$cookie->commentURL()
$cookie->commentURL($set)

Get or set the commentURL field of an RFC (Version > 0) cookie.

$cookie->commentURL("http://localhost/cookie.policy");
print $cookie->commentURL;

fetch

Apache2::Cookie->fetch($r)

Fetch and parse the incoming Cookie header:

my $cookies = Apache2::Cookie->fetch($r); # APR::Request::Cookie::Table ref

It should be noted, that with perl 5.8+ Iterator magic, table is able
to handle multiple cookies of the same name.

my %cookies = Apache2::Cookie->fetch($r);

PORTING from 1.X

Changes to the 1.X API:

  • Apache2::Cookie::fetch now expects an $r object as (second) argument, although this isn't necessary in mod_perl 2 if Apache2::RequestUtil is loaded and 'PerlOptions +GlobalRequest' is in effect.

  • Apache2::Cookie::parse is gone.

  • Apache2::Cookie::new no longer encodes the supplied cookie name.

  • Apache2::Cookie::new() returns undef if -value is not specified or -value => undef.

  • name() and value() no longer accept a "set" argument. In other words, neither a cookie's name, nor its value, may be modified. A new cookie should be made instead.

SEE ALSO

Apache2::Request, APR::Request::Cookie, APR::Request::Error, CGI::Cookie(3)

COPYRIGHT

Licensed to the Apache Software Foundation (ASF) under one or more
contributor license agreements.  See the NOTICE file distributed with
this work for additional information regarding copyright ownership.
The ASF licenses this file to You under the Apache License, Version 2.0
(the "License"); you may not use this file except in compliance with
the License.  You may obtain a copy of the License at

    http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
libapreq2-2.17/docs/html/group__apreq__xs__request.html0000644000175000017500000004000714277402434022771 0ustar jortonjorton libapreq2-2.17: Apache2::Request
Apache2::Request

NAME

Apache2::Request - Methods for dealing with client request data

SYNOPSIS

use Apache2::Request;
$req = Apache2::Request->new($r);
@foo = $req->param("foo");
$bar = $req->args("bar");

DESCRIPTION

The Apache2::Request module provides methods for parsing GET and POST parameters encoded with either application/x-www-form-urlencoded or multipart/form-data. Although Apache2::Request provides a few new APIs for accessing the parsed data, it remains largely backwards-compatible with the original 1.X API. See the "PORTING from 1.X" section below for a list of known issues.

This manpage documents the Apache2::Request package.

Apache2::Request

The interface is designed to mimic the CGI.pm routines for parsing query parameters. The main differences are

  • Apache2::Request::new takes an environment-specific object $r as (second) argument. Newer versions of CGI.pm also accept this syntax within modperl.

  • The query parameters are stored in APR::Table derived objects, and are therefore retrieved from the table by using case-insensitive keys.

  • The query string is always parsed immediately, even for POST requests.

new

Apache2::Request->new($r, %args)

Creates a new Apache2::Request object.

my $req = Apache2::Request->new($r, POST_MAX => "1M");

With mod_perl2, the environment object $r must be an Apache2::RequestRec object. In that case, all methods from Apache2::RequestRec are inherited. In the (default) CGI environment, $r must be an APR::Pool object.

The following args are optional:

  • POST_MAX, MAX_BODY

    Limit the size of POST data (in bytes).

  • DISABLE_UPLOADS

    Disable file uploads.

  • TEMP_DIR

    Sets the directory where upload files are spooled. On a *nix-like that supports link(2), the TEMP_DIR should be located on the same file system as the final destination file:

    use Apache2::Upload;
    my $req = Apache2::Request->new($r, TEMP_DIR => "/home/httpd/tmp");
    my $upload = $req->upload('file');
    $upload->link("/home/user/myfile");

    For more details on link, see Apache2::Upload.

  • HOOK_DATA

    Extra configuration info passed as the fourth argument to an upload hook. See the description for the next item, UPLOAD_HOOK.

  • UPLOAD_HOOK

    Sets up a callback to run whenever file upload data is read. This can be used to provide an upload progress meter during file uploads. Apache will automatically continue writing the original data to $upload->fh after the hook exits.

    my $transparent_hook = sub {
      my ($upload, $data, $data_len, $hook_data) = @_;
      warn "$hook_data: got $data_len bytes for " . $upload->name;
    };
    
    my $req = Apache2::Request->new($r,
                                    HOOK_DATA => "Note",
                                    UPLOAD_HOOK => $transparent_hook,
                                   );

instance

Apache2::Request->instance($r)

The default (and only) behavior of Apache2::Request is to intelligently cache POST data for the duration of the request. Thus there is no longer the need for a separate instance() method as existed in Apache2::Request for Apache 1.3 - all POST data is always available from each and every Apache2::Request object created during the request's lifetime.

However an instance() method is aliased to new() in this release to ease the pain of porting from 1.X to 2.X.

param

$req->param()
$req->param($name)

Get the request parameters (using case-insensitive keys) by mimicing the OO interface of CGI::param.

# similar to CGI.pm

my $foo_value   = $req->param('foo');
my @foo_values  = $req->param('foo');
my @param_names = $req->param;

# the following differ slightly from CGI.pm

# returns ref to APR::Request::Param::Table object representing
# all (args + body) params
my $table = $req->param;
@table_keys = keys %$table;

In list context, or when invoked with no arguments as $req->param(), param induces libapreq2 to read and parse all remaining data in the request body. However, scalar $req->param("foo") is lazy: libapreq2 will only read and parse more data if

1) no "foo" param appears in the query string arguments, AND
2) no "foo" param appears in the previously parsed POST data.

In this circumstance libapreq2 will read and parse additional blocks of the incoming request body until either

1) it has found the the "foo" param, or
2) parsing is completed.

Observe that scalar $req->param("foo") will not raise an exception if it can locate "foo" in the existing body or args tables, even if the query-string parser or the body parser has failed. In all other circumstances param will throw an Apache2::Request::Error object into $@ should either parser fail.

$req->args_status(1); # set error state for query-string parser
ok $req->param_status == 1;

$foo = $req->param("foo");
ok $foo == 1;
eval { @foo = $req->param("foo") };
ok $@->isa("Apache2::Request::Error");
undef $@;
eval { my $not_found = $req->param("non-existent-param") };
ok $@->isa("Apache2::Request::Error");

$req->args_status(0); # reset query-string parser state to "success"

Note: modifications to the scalar $req->param() table only affect the returned table object (the underlying C apr_table_t is generated from the parse data by apreq_params()). Modifications do not affect the actual request data, and will not be seen by other libapreq2 applications.

parms, params

The functionality of these functions is assumed by param, so they are no longer necessary. Aliases to param are provided in this release for backwards compatibility, however they are deprecated and may be removed from a future release.

body

$req->body()
$req->body($name)

Returns an APR::Request::Param::Table object containing the POST data parameters of the Apache2::Request object.

my $body = $req->body;

An optional name parameter can be passed to return the POST data parameter associated with the given name:

my $foo_body = $req->body("foo");

More generally, body() follows the same pattern as param() with respect to its return values and argument list. The main difference is that modifications to the scalar $req->body() table affect the underlying apr_table_t attribute in apreq_request_t, so their impact will be noticed by all libapreq2 applications during this request.

upload

$req->upload()
$req->upload($name)

Requires Apache2::Upload. With no arguments, this method returns an APR::Request::Param::Table object in scalar context, or the names of all Apache2::Upload objects in list context.

An optional name parameter can be passed to return the Apache2::Upload object associated with the given name:

my $upload = $req->upload($name);

More generally, upload() follows the same pattern as param() with respect to its return values and argument list. The main difference is that its returned values are Apache2::Upload object refs, not simple scalars.

Note: modifications to the scalar $req->upload() table only affect the returned table object (the underlying C apr_table_t is generated by apreq_uploads()). They do not affect the actual request data, and will not be seen by other libapreq2 applications.

args_status

$req->args_status()

Get the APR status code of the query-string parser. APR_SUCCESS on success, error otherwise.

body_status

$req->body_status()

Get the current APR status code of the parsed POST data. APR_SUCCESS when parser has completed, APR_INCOMPLETE if parser has more data to parse, APR_EINIT if no post data has been parsed, error otherwise.

param_status

$req->param_status()

In scalar context, this returns args_status if there was an error during the query-string parse, otherwise this returns body_status, ie

$req->args_status || $req->body_status

In list context param_status returns the list (args_status, body_status).

parse

$req->parse()

Forces the request to be parsed immediately. In void context, this will throw an APR::Request::Error should the either the query-string or body parser fail. In all other contexts it will return the two parsers' combined APR status code

$req->body_status || $req->args_status

However parse should be avoided in most normal situations. For example, in a mod_perl content handler it is more efficient to write

sub handler {
    my $r = shift;
    my $req = Apache2::Request->new($r);
    $r->discard_request_body;   # efficiently parses the request body
    my $parser_status = $req->body_status;

    #...
}

Calling $r->discard_request_body outside the content handler is generally a mistake, so use $req->parse there, but only as a last resort. The Apache2::Request API is designed around a lazy-parsing scheme, so calling parse should not affect the behavior of any other methods.

SUBCLASSING Apache2::Request

If the instances of your subclass are hash references then you can actually inherit from Apache2::Request as long as the Apache2::Request object is stored in an attribute called "r" or "_r". (The Apache2::Request class effectively does the delegation for you automagically, as long as it knows where to find the Apache2::Request object to delegate to.) For example:

package MySubClass;
use Apache2::Request;
our @ISA = qw(Apache2::Request);
sub new {
        my($class, @args) = @_;
        return bless { r => Apache2::Request->new(@args) }, $class;
}

PORTING from 1.X

This is the complete list of changes to existing methods from Apache2::Request 1.X. These issues need to be addressed when porting 1.X apps to the new 2.X API.

  • Apache2::Upload is now a separate module. Applications requiring the upload API must use Apache2::Upload in 2.X. This is easily addressed by preloading the modules during server startup.

  • You can no longer add (or set or delete) parameters in the scalar $req->param, scalar $req->args or scalar $req->body tables. Nor can you add (or set or delete) cookies in the scalar $req->jar table.

  • instance() is now identical to new(), and is now deprecated. It may be removed from a future 2.X release.

  • param includes the functionality of parms() and params(), so they are now deprecated and may be removed from a future 2.X release.

  • param called in a list context no longer returns a unique list of paramaters. The returned list contains multiple instances of the parameter name for multivalued fields.

SEE ALSO

APR::Request::Param, APR::Request::Error, Apache2::Upload, Apache2::Cookie, APR::Table(3).

COPYRIGHT

Licensed to the Apache Software Foundation (ASF) under one or more
contributor license agreements.  See the NOTICE file distributed with
this work for additional information regarding copyright ownership.
The ASF licenses this file to You under the Apache License, Version 2.0
(the "License"); you may not use this file except in compliance with
the License.  You may obtain a copy of the License at

    http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
libapreq2-2.17/docs/html/group__apreq__xs__upload.html0000644000175000017500000002446414277402434022576 0ustar jortonjorton libapreq2-2.17: Apache2::Upload
Apache2::Upload

NAME

Apache2::Upload - Methods for dealing with file uploads.

SYNOPSIS

use Apache2::Upload;

$req = Apache2::Request->new($r);
$upload = $req->upload("foo");
$size = $upload->size;

# three methods to get at the upload's contents ... slurp, fh, io

$upload->slurp($slurp_data);

read $upload->fh, $fh_data, $size;
ok $slurp_data eq $fh_data;

my $io = $upload->io;
print while <$io>;

DESCRIPTION

Apache2::Upload is a new module based on the original package included in Apache2::Request 1.X. Users requiring the upload API must now use Apache2::Upload, which adds the upload method to Apache2::Request. Apache2::Upload is largely backwards-compatible with the original 1.X API. See the "PORTING from 1.X" section below for a list of known issues.

This manpage documents the Apache2::Upload package.

Apache2::Upload

name

$upload->name()

The name of the HTML form element which generated the upload.

filename

$upload->filename()

The (client-side) filename as submitted in the HTML form. Note: some agents will submit the file's full pathname, while others may submit just the basename.

fh

$upload->fh()

Creates filehandle reference to the upload's spooled tempfile, which contains the full contents of the upload.

io

$upload->io()

Creates a tied IO handle. This method is a more efficient version of fh, but with io the handle ref returned is not seekable. It is tied to an APR::Request::Brigade object, so you may use the brigade API on the tied object if you want to manipulate the IO stream (beyond simply reading from it).

The returned reference is actually an object which has read and readline methods available. However these methods are just syntactic sugar for the underlying READ and READLINE methods from APR::Request::Brigade.

$io = $upload->io;
print while $io->read($_); # equivalent to: tied(*$io)->READ($_)

See READ and READLINE below for additional notes on their usage.

bb

$upload->bb()
$upload->bb($set)

Get/set the APR::Brigade which represents the upload's contents.

size

$upload->size()

Returns the size of the upload in bytes.

info

$upload->info()
$upload->info($set)

Get/set the additional header information table for the uploaded file. Returns a hash reference tied to the APR::Table class. An optional $table argument can be passed to reassign the upload's internal (apr_table_t) info table to the one $table represents.

my $info = $upload->info;
while (my($hdr_name, $hdr_value) = each %$info) {
    # ...
}

# fetch upload's Content-Type header
my $type = $upload->info->{"Content-type"};

type

$upload->type()

Returns the MIME type of the given Apache2::Upload object.

my $type = $upload->type;

#same as
my $content_type = $upload->info->{"Content-Type"};
$content_type =~ s/;.*$//ms;
$upload->link()

To avoid recopying the upload's internal tempfile brigade on a *nix-like system, link will create a hard link to it:

my $upload = $req->upload('foo');
$upload->link("/path/to/newfile") or
    die sprintf "link from '%s' failed: $!", $upload->tempname;

Typically the new name must lie on the same device and partition as the brigade's tempfile. If this or any other reason prevents the OS from linking the files, link() will instead copy the temporary file to the specified location.

slurp

$upload->slurp($contents)

Reads the full contents of a file upload into the scalar argument. The return value is the length of the file.

my $size = $upload->slurp($contents);

tempname

$upload->tempname()

Provides the name of the spool file.

my $tempname = $upload->tempname;

APR::Request::Brigade

This class is derived from APR::Brigade, providing additional methods for TIEHANDLE, READ and READLINE. To be memory efficient, these methods delete buckets from the brigade as soon as their data is actually read, so you cannot seek on handles tied to this class. Such handles have semantics similar to that of a read-only socket.

TIEHANDLE

APR::Request::Brigade->TIEHANDLE($bb)

Creates a copy of the bucket brigade represented by $bb, and blesses that copy into the APR::Request::Brigade class. This provides syntactic sugar for using perl's builtin read, readline, and <> operations on handles tied to this package:

use Symbol;
$fh = gensym;
tie *$fh, "APR::Request:Brigade", $bb;
print while <$fh>;

READ

$bb->READ($contents)
$bb->READ($contents, $length)
$bb->READ($contents, $length, $offset)

Reads data from the brigade $bb into $contents. When omitted $length defaults to -1, which reads the first bucket into $contents. A positive $length will read in $length bytes, or the remainder of the brigade, whichever is greater. $offset represents the index in $context to read the new data.

READLINE

$bb->READLINE()

Returns the first line of data from the bride. Lines are terminated by linefeeds (the '\012' character), but we may eventually use $/ instead.

PORTING from 1.X

  • $upload->next() is no longer available; please use the APR::Request::Param::Table API when iterating over upload entries.

  • info($header_name) is replaced by info($set).

  • type() returns only the MIME-type portion of the Content-Type header.

SEE ALSO

APR::Request::Param::Table, APR::Request::Error, Apache2::Request, APR::Table(3)

COPYRIGHT

Licensed to the Apache Software Foundation (ASF) under one or more
contributor license agreements.  See the NOTICE file distributed with
this work for additional information regarding copyright ownership.
The ASF licenses this file to You under the Apache License, Version 2.0
(the "License"); you may not use this file except in compliance with
the License.  You may obtain a copy of the License at

    http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
libapreq2-2.17/docs/html/group__libapreq2.html0000644000175000017500000001316114277402434020763 0ustar jortonjorton libapreq2-2.17: Apache Request Library
Apache Request Library

libapreq2 Version 2.8.1 More...

Files

file  apreq.h
 Main header file...
 
 
file  apreq_error.h
 Error status codes.
 
file  apreq_module.h
 Module API.
 
file  apreq_param.h
 Request parsing and parameter API.
 
file  apreq_parser.h
 Request body parser API.
 
file  apreq_util.h
 Utility functions for apreq.
 
file  apreq_version.h
 Versioning API for libapreq.
 

Detailed Description

libapreq2 Version 2.8.1

libapreq2 is a shared library based on the Apache Portable Runtime libraries libapr and libaprutil.

See also
http://apr.apache.org/

Configuring libapreq2 Applications

This package includes apreq2-config, a configuration script for building applications with libapreq2. Run apreq2-config –help to display its options. XXX add examples here XXX

libapreq2-2.17/docs/html/group__mod__apreq2.html0000644000175000017500000002351614277402434021277 0ustar jortonjorton libapreq2-2.17: Apache 2.X Filter Module
Apache 2.X Filter Module

mod_apreq2 - DSO that ties libapreq2 to Apache HTTPD 2.X. More...

Macros

#define APREQ_FILTER_NAME   "apreq2"
 
#define APREQ_APACHE2_MMN   20101207
 

Functions

apreq_handle_tapreq_handle_apache2 (request_rec *r)
 
 APR_DECLARE_OPTIONAL_FN (apreq_handle_t *, apreq_handle_apache2,(request_rec *r))
 

Detailed Description

mod_apreq2 - DSO that ties libapreq2 to Apache HTTPD 2.X.

mod_apreq2 provides the "APREQ2" input filter for using libapreq2 (and allow its parsed data structures to be shared) within the Apache 2.X webserver. Using it, libapreq2 works properly in every phase of the HTTP request, from translation handlers to output filters, and even for subrequests / internal redirects.


Activating mod_apreq2 in Apache 2.X

The installation process triggered by % make install will not modify your webserver's config file. Hence, be sure you activate it on startup by adding a LoadModule directive to your webserver config; e.g.

LoadModule apreq_module modules/mod_apreq2.so

The mod_apreq2 filter is named "apreq2", and may be used in Apache's input filter directives, e.g.

AddInputFilter apreq2 # or
SetInputFilter apreq2

However, this is not required because libapreq2 will add the filter (only) if it's necessary. You just need to ensure that your module invokes apreq_handle_apache2() before the content handler ultimately reads from the input filter chain. It is important to realize that no matter how the input filters are initially arranged, the APREQ2 filter will attempt to reposition itself to be the last input filter to read the data.

If you want to use other input filters to transform the incoming HTTP request data, is important to register those filters with Apache as having type AP_FTYPE_CONTENT_SET or AP_FTYPE_RESOURCE. Due to the limitations of Apache's current input filter design, types higher than AP_FTYPE_CONTENT_SET may not work properly whenever the apreq filter is active.

This is especially true when a content handler uses libapreq2 to parse some of the post data before doing an internal redirect. Any input filter subsequently added to the redirected request will bypass the original apreq filter (and therefore lose access to some of the original post data), unless its type is less than the type of the apreq filter (currently AP_FTYPE_PROTOCOL-1).

Server Configuration Directives

Per-directory commands for mod_apreq2
Directive Context DefaultDescription
APREQ2_ReadLimit directory APREQ_DEFAULT_READ_LIMIT Maximum number of bytes mod_apreq2 will send off to libapreq2 for parsing. mod_apreq2 will log this event and subsequently remove itself from the filter chain.
APREQ2_BrigadeLimit directory APREQ_DEFAULT_BRIGADE_LIMIT Maximum number of bytes mod_apreq2 will let accumulate within the heap-buckets in a brigade. Excess data will be spooled to an appended file bucket.
APREQ2_TempDir directory NULL Sets the location of the temporary directory apreq will use to spool overflow brigade data (based on the APREQ2_BrigadeLimit setting). If left unset, libapreq2 will select a platform-specific location via apr_temp_dir_get().

Implementation Details

  XXX apreq as a normal input filter
  XXX apreq as a "virtual" content handler.
  XXX apreq as a transparent "tee".
  XXX apreq parser registration in post_config

Macro Definition Documentation

◆ APREQ_APACHE2_MMN

#define APREQ_APACHE2_MMN   20101207

The Apache2 Module Magic Number for use in the Apache 2.x module structures This gets bumped if changes in th4e API will break third party applications using this apache2 module

See also
APREQ_MODULE

◆ APREQ_FILTER_NAME

#define APREQ_FILTER_NAME   "apreq2"

The mod_apreq2 filter is named "apreq2", and may be used in Apache's input filter directives, e.g.

AddInputFilter apreq2 # or
SetInputFilter apreq2

See above

Function Documentation

◆ apreq_handle_apache2()

apreq_handle_t* apreq_handle_apache2 ( request_rec *  r)

Create an apreq handle which communicates with an Apache 2.X request_rec.

libapreq2-2.17/docs/html/index.html0000644000175000017500000001157214277402434016642 0ustar jortonjorton libapreq2-2.17: Main Page
libapreq2 Documentation

Project Website: http://httpd.apache.org/apreq/

                    Apache HTTP Server Request Library

  What is it?
  -----------
  httpd-apreq is subproject of the Apache HTTP Server Project 
  whose committers develop and maintain the libapreq C library
  and its language bindings for Perl (contributions for additional 
  language bindings are most welcome).

  libapreq is a safe, standards-compliant, high-performance library 
  used for parsing HTTP cookies, query-strings and POST data.  The 
  original version (libapreq-1.X) was designed by Lincoln Stein and Doug 
  MacEachern.  The perl APIs Apache::Request and Apache::Cookie are the
  lightweight mod_perl analogs of the CGI and CGI::Cookie perl modules.

  Version 2 of libapreq is an improved codebase designed around APR
  and Apache-2's input filter API.  The C codebase is separated into
  two independent components:

      1) libapreq2, a shared library which is based on 
         libapr and libaprutil.

      2) A collection of modules:

          - mod_apreq2, a filter module for the Apache 2.X webserver,
          - a CGI module included in libapreq2 itself,
          - a custom module for general applications.

  Version 2 also includes the perl APIs for libapreq2- Apache2::Request,
  Apache2::Upload and Apache2::Cookie.  The corresponding XS modules 
  are generated by ExtUtils::XSBuilder, which is based on the new build
  system created specifically for mod_perl2.


  The Latest Version
  ------------------

  Details of the latest version can be found on the libapreq
  project page at 

                https://httpd.apache.org/apreq


  Documentation
  -------------

  The documentation is in the docs/ directory.  It is
  based on Doxygen, and can be regenerated by typing

        % make docs

  in the main directory.


  Installation
  ------------

  For full details please consult the INSTALL file.  Briefly,
  to install just the C API (libapreq2 + environment modules)
  on a Unix-like system:

            % ./configure --with-apache2-apxs=/path/to/apache2/bin/apxs
            % make
            % make test
            % make install

   To build and install the perl API as well, either add
   the "--enable-perl-glue" configure option, or let Makefile.PL
   enable it for you:

            % perl Makefile.PL --with-apache2-apxs=/path/to/apache2/bin/apxs
            % make
            % make test 
            % make install

  Licensing
  ---------

  Please see the file called LICENSE.


  Contacts
  --------

     o Project homepage:

        https://httpd.apache.org/apreq/

     o Mailing Lists:

        user lists:
               C/C++ API - modules-dev@httpd.apache.org
                Perl API - modperl@perl.apache.org
                 Tcl API - XXX
                Java API - XXX
              Python API - XXX

        developer list (bugs, patches, code contributions, etc.):
                apreq-dev@httpd.apache.org


  Acknowledgments
  ----------------

  We wish to acknowledge the following copyrighted works that
  make up portions of the Apache software:

  libapreq2 relies heavily on the use of the GNU auto-tools 
  to provide a build environment.  The tests are based on 
  the Apache::Test, Test::Harness and Test::Inline.

  Doxygen generates the documentation for libapreq2. The perl glue
  and pods are generated by ExtUtils::XSBuilder.
libapreq2-2.17/docs/html/jquery.js0000644000175000017500000052654114277402434016531 0ustar jortonjorton/*! jQuery v3.4.1 | (c) JS Foundation and other contributors | jquery.org/license */ !function(e,t){"use strict";"object"==typeof module&&"object"==typeof module.exports?module.exports=e.document?t(e,!0):function(e){if(!e.document)throw new Error("jQuery requires a window with a document");return t(e)}:t(e)}("undefined"!=typeof window?window:this,function(C,e){"use strict";var t=[],E=C.document,r=Object.getPrototypeOf,s=t.slice,g=t.concat,u=t.push,i=t.indexOf,n={},o=n.toString,v=n.hasOwnProperty,a=v.toString,l=a.call(Object),y={},m=function(e){return"function"==typeof e&&"number"!=typeof e.nodeType},x=function(e){return null!=e&&e===e.window},c={type:!0,src:!0,nonce:!0,noModule:!0};function b(e,t,n){var r,i,o=(n=n||E).createElement("script");if(o.text=e,t)for(r in c)(i=t[r]||t.getAttribute&&t.getAttribute(r))&&o.setAttribute(r,i);n.head.appendChild(o).parentNode.removeChild(o)}function w(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?n[o.call(e)]||"object":typeof e}var f="3.4.1",k=function(e,t){return new k.fn.init(e,t)},p=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g;function d(e){var t=!!e&&"length"in e&&e.length,n=w(e);return!m(e)&&!x(e)&&("array"===n||0===t||"number"==typeof t&&0+~]|"+M+")"+M+"*"),U=new RegExp(M+"|>"),X=new RegExp($),V=new RegExp("^"+I+"$"),G={ID:new RegExp("^#("+I+")"),CLASS:new RegExp("^\\.("+I+")"),TAG:new RegExp("^("+I+"|[*])"),ATTR:new RegExp("^"+W),PSEUDO:new RegExp("^"+$),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+M+"*(even|odd|(([+-]|)(\\d*)n|)"+M+"*(?:([+-]|)"+M+"*(\\d+)|))"+M+"*\\)|)","i"),bool:new RegExp("^(?:"+R+")$","i"),needsContext:new RegExp("^"+M+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+M+"*((?:-\\d)?\\d*)"+M+"*\\)|)(?=[^-]|$)","i")},Y=/HTML$/i,Q=/^(?:input|select|textarea|button)$/i,J=/^h\d$/i,K=/^[^{]+\{\s*\[native \w/,Z=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,ee=/[+~]/,te=new RegExp("\\\\([\\da-f]{1,6}"+M+"?|("+M+")|.)","ig"),ne=function(e,t,n){var r="0x"+t-65536;return r!=r||n?t:r<0?String.fromCharCode(r+65536):String.fromCharCode(r>>10|55296,1023&r|56320)},re=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,ie=function(e,t){return t?"\0"===e?"\ufffd":e.slice(0,-1)+"\\"+e.charCodeAt(e.length-1).toString(16)+" ":"\\"+e},oe=function(){T()},ae=be(function(e){return!0===e.disabled&&"fieldset"===e.nodeName.toLowerCase()},{dir:"parentNode",next:"legend"});try{H.apply(t=O.call(m.childNodes),m.childNodes),t[m.childNodes.length].nodeType}catch(e){H={apply:t.length?function(e,t){L.apply(e,O.call(t))}:function(e,t){var n=e.length,r=0;while(e[n++]=t[r++]);e.length=n-1}}}function se(t,e,n,r){var i,o,a,s,u,l,c,f=e&&e.ownerDocument,p=e?e.nodeType:9;if(n=n||[],"string"!=typeof t||!t||1!==p&&9!==p&&11!==p)return n;if(!r&&((e?e.ownerDocument||e:m)!==C&&T(e),e=e||C,E)){if(11!==p&&(u=Z.exec(t)))if(i=u[1]){if(9===p){if(!(a=e.getElementById(i)))return n;if(a.id===i)return n.push(a),n}else if(f&&(a=f.getElementById(i))&&y(e,a)&&a.id===i)return n.push(a),n}else{if(u[2])return H.apply(n,e.getElementsByTagName(t)),n;if((i=u[3])&&d.getElementsByClassName&&e.getElementsByClassName)return H.apply(n,e.getElementsByClassName(i)),n}if(d.qsa&&!A[t+" "]&&(!v||!v.test(t))&&(1!==p||"object"!==e.nodeName.toLowerCase())){if(c=t,f=e,1===p&&U.test(t)){(s=e.getAttribute("id"))?s=s.replace(re,ie):e.setAttribute("id",s=k),o=(l=h(t)).length;while(o--)l[o]="#"+s+" "+xe(l[o]);c=l.join(","),f=ee.test(t)&&ye(e.parentNode)||e}try{return H.apply(n,f.querySelectorAll(c)),n}catch(e){A(t,!0)}finally{s===k&&e.removeAttribute("id")}}}return g(t.replace(B,"$1"),e,n,r)}function ue(){var r=[];return function e(t,n){return r.push(t+" ")>b.cacheLength&&delete e[r.shift()],e[t+" "]=n}}function le(e){return e[k]=!0,e}function ce(e){var t=C.createElement("fieldset");try{return!!e(t)}catch(e){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function fe(e,t){var n=e.split("|"),r=n.length;while(r--)b.attrHandle[n[r]]=t}function pe(e,t){var n=t&&e,r=n&&1===e.nodeType&&1===t.nodeType&&e.sourceIndex-t.sourceIndex;if(r)return r;if(n)while(n=n.nextSibling)if(n===t)return-1;return e?1:-1}function de(t){return function(e){return"input"===e.nodeName.toLowerCase()&&e.type===t}}function he(n){return function(e){var t=e.nodeName.toLowerCase();return("input"===t||"button"===t)&&e.type===n}}function ge(t){return function(e){return"form"in e?e.parentNode&&!1===e.disabled?"label"in e?"label"in e.parentNode?e.parentNode.disabled===t:e.disabled===t:e.isDisabled===t||e.isDisabled!==!t&&ae(e)===t:e.disabled===t:"label"in e&&e.disabled===t}}function ve(a){return le(function(o){return o=+o,le(function(e,t){var n,r=a([],e.length,o),i=r.length;while(i--)e[n=r[i]]&&(e[n]=!(t[n]=e[n]))})})}function ye(e){return e&&"undefined"!=typeof e.getElementsByTagName&&e}for(e in d=se.support={},i=se.isXML=function(e){var t=e.namespaceURI,n=(e.ownerDocument||e).documentElement;return!Y.test(t||n&&n.nodeName||"HTML")},T=se.setDocument=function(e){var t,n,r=e?e.ownerDocument||e:m;return r!==C&&9===r.nodeType&&r.documentElement&&(a=(C=r).documentElement,E=!i(C),m!==C&&(n=C.defaultView)&&n.top!==n&&(n.addEventListener?n.addEventListener("unload",oe,!1):n.attachEvent&&n.attachEvent("onunload",oe)),d.attributes=ce(function(e){return e.className="i",!e.getAttribute("className")}),d.getElementsByTagName=ce(function(e){return e.appendChild(C.createComment("")),!e.getElementsByTagName("*").length}),d.getElementsByClassName=K.test(C.getElementsByClassName),d.getById=ce(function(e){return a.appendChild(e).id=k,!C.getElementsByName||!C.getElementsByName(k).length}),d.getById?(b.filter.ID=function(e){var t=e.replace(te,ne);return function(e){return e.getAttribute("id")===t}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n=t.getElementById(e);return n?[n]:[]}}):(b.filter.ID=function(e){var n=e.replace(te,ne);return function(e){var t="undefined"!=typeof e.getAttributeNode&&e.getAttributeNode("id");return t&&t.value===n}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n,r,i,o=t.getElementById(e);if(o){if((n=o.getAttributeNode("id"))&&n.value===e)return[o];i=t.getElementsByName(e),r=0;while(o=i[r++])if((n=o.getAttributeNode("id"))&&n.value===e)return[o]}return[]}}),b.find.TAG=d.getElementsByTagName?function(e,t){return"undefined"!=typeof t.getElementsByTagName?t.getElementsByTagName(e):d.qsa?t.querySelectorAll(e):void 0}:function(e,t){var n,r=[],i=0,o=t.getElementsByTagName(e);if("*"===e){while(n=o[i++])1===n.nodeType&&r.push(n);return r}return o},b.find.CLASS=d.getElementsByClassName&&function(e,t){if("undefined"!=typeof t.getElementsByClassName&&E)return t.getElementsByClassName(e)},s=[],v=[],(d.qsa=K.test(C.querySelectorAll))&&(ce(function(e){a.appendChild(e).innerHTML="",e.querySelectorAll("[msallowcapture^='']").length&&v.push("[*^$]="+M+"*(?:''|\"\")"),e.querySelectorAll("[selected]").length||v.push("\\["+M+"*(?:value|"+R+")"),e.querySelectorAll("[id~="+k+"-]").length||v.push("~="),e.querySelectorAll(":checked").length||v.push(":checked"),e.querySelectorAll("a#"+k+"+*").length||v.push(".#.+[+~]")}),ce(function(e){e.innerHTML="";var t=C.createElement("input");t.setAttribute("type","hidden"),e.appendChild(t).setAttribute("name","D"),e.querySelectorAll("[name=d]").length&&v.push("name"+M+"*[*^$|!~]?="),2!==e.querySelectorAll(":enabled").length&&v.push(":enabled",":disabled"),a.appendChild(e).disabled=!0,2!==e.querySelectorAll(":disabled").length&&v.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),v.push(",.*:")})),(d.matchesSelector=K.test(c=a.matches||a.webkitMatchesSelector||a.mozMatchesSelector||a.oMatchesSelector||a.msMatchesSelector))&&ce(function(e){d.disconnectedMatch=c.call(e,"*"),c.call(e,"[s!='']:x"),s.push("!=",$)}),v=v.length&&new RegExp(v.join("|")),s=s.length&&new RegExp(s.join("|")),t=K.test(a.compareDocumentPosition),y=t||K.test(a.contains)?function(e,t){var n=9===e.nodeType?e.documentElement:e,r=t&&t.parentNode;return e===r||!(!r||1!==r.nodeType||!(n.contains?n.contains(r):e.compareDocumentPosition&&16&e.compareDocumentPosition(r)))}:function(e,t){if(t)while(t=t.parentNode)if(t===e)return!0;return!1},D=t?function(e,t){if(e===t)return l=!0,0;var n=!e.compareDocumentPosition-!t.compareDocumentPosition;return n||(1&(n=(e.ownerDocument||e)===(t.ownerDocument||t)?e.compareDocumentPosition(t):1)||!d.sortDetached&&t.compareDocumentPosition(e)===n?e===C||e.ownerDocument===m&&y(m,e)?-1:t===C||t.ownerDocument===m&&y(m,t)?1:u?P(u,e)-P(u,t):0:4&n?-1:1)}:function(e,t){if(e===t)return l=!0,0;var n,r=0,i=e.parentNode,o=t.parentNode,a=[e],s=[t];if(!i||!o)return e===C?-1:t===C?1:i?-1:o?1:u?P(u,e)-P(u,t):0;if(i===o)return pe(e,t);n=e;while(n=n.parentNode)a.unshift(n);n=t;while(n=n.parentNode)s.unshift(n);while(a[r]===s[r])r++;return r?pe(a[r],s[r]):a[r]===m?-1:s[r]===m?1:0}),C},se.matches=function(e,t){return se(e,null,null,t)},se.matchesSelector=function(e,t){if((e.ownerDocument||e)!==C&&T(e),d.matchesSelector&&E&&!A[t+" "]&&(!s||!s.test(t))&&(!v||!v.test(t)))try{var n=c.call(e,t);if(n||d.disconnectedMatch||e.document&&11!==e.document.nodeType)return n}catch(e){A(t,!0)}return 0":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(te,ne),e[3]=(e[3]||e[4]||e[5]||"").replace(te,ne),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||se.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&se.error(e[0]),e},PSEUDO:function(e){var t,n=!e[6]&&e[2];return G.CHILD.test(e[0])?null:(e[3]?e[2]=e[4]||e[5]||"":n&&X.test(n)&&(t=h(n,!0))&&(t=n.indexOf(")",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(te,ne).toLowerCase();return"*"===e?function(){return!0}:function(e){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=p[e+" "];return t||(t=new RegExp("(^|"+M+")"+e+"("+M+"|$)"))&&p(e,function(e){return t.test("string"==typeof e.className&&e.className||"undefined"!=typeof e.getAttribute&&e.getAttribute("class")||"")})},ATTR:function(n,r,i){return function(e){var t=se.attr(e,n);return null==t?"!="===r:!r||(t+="","="===r?t===i:"!="===r?t!==i:"^="===r?i&&0===t.indexOf(i):"*="===r?i&&-1:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i;function j(e,n,r){return m(n)?k.grep(e,function(e,t){return!!n.call(e,t,e)!==r}):n.nodeType?k.grep(e,function(e){return e===n!==r}):"string"!=typeof n?k.grep(e,function(e){return-1)[^>]*|#([\w-]+))$/;(k.fn.init=function(e,t,n){var r,i;if(!e)return this;if(n=n||q,"string"==typeof e){if(!(r="<"===e[0]&&">"===e[e.length-1]&&3<=e.length?[null,e,null]:L.exec(e))||!r[1]&&t)return!t||t.jquery?(t||n).find(e):this.constructor(t).find(e);if(r[1]){if(t=t instanceof k?t[0]:t,k.merge(this,k.parseHTML(r[1],t&&t.nodeType?t.ownerDocument||t:E,!0)),D.test(r[1])&&k.isPlainObject(t))for(r in t)m(this[r])?this[r](t[r]):this.attr(r,t[r]);return this}return(i=E.getElementById(r[2]))&&(this[0]=i,this.length=1),this}return e.nodeType?(this[0]=e,this.length=1,this):m(e)?void 0!==n.ready?n.ready(e):e(k):k.makeArray(e,this)}).prototype=k.fn,q=k(E);var H=/^(?:parents|prev(?:Until|All))/,O={children:!0,contents:!0,next:!0,prev:!0};function P(e,t){while((e=e[t])&&1!==e.nodeType);return e}k.fn.extend({has:function(e){var t=k(e,this),n=t.length;return this.filter(function(){for(var e=0;e\x20\t\r\n\f]*)/i,he=/^$|^module$|\/(?:java|ecma)script/i,ge={option:[1,""],thead:[1,"","
"],col:[2,"","
"],tr:[2,"","
"],td:[3,"","
"],_default:[0,"",""]};function ve(e,t){var n;return n="undefined"!=typeof e.getElementsByTagName?e.getElementsByTagName(t||"*"):"undefined"!=typeof e.querySelectorAll?e.querySelectorAll(t||"*"):[],void 0===t||t&&A(e,t)?k.merge([e],n):n}function ye(e,t){for(var n=0,r=e.length;nx",y.noCloneChecked=!!me.cloneNode(!0).lastChild.defaultValue;var Te=/^key/,Ce=/^(?:mouse|pointer|contextmenu|drag|drop)|click/,Ee=/^([^.]*)(?:\.(.+)|)/;function ke(){return!0}function Se(){return!1}function Ne(e,t){return e===function(){try{return E.activeElement}catch(e){}}()==("focus"===t)}function Ae(e,t,n,r,i,o){var a,s;if("object"==typeof t){for(s in"string"!=typeof n&&(r=r||n,n=void 0),t)Ae(e,s,n,r,t[s],o);return e}if(null==r&&null==i?(i=n,r=n=void 0):null==i&&("string"==typeof n?(i=r,r=void 0):(i=r,r=n,n=void 0)),!1===i)i=Se;else if(!i)return e;return 1===o&&(a=i,(i=function(e){return k().off(e),a.apply(this,arguments)}).guid=a.guid||(a.guid=k.guid++)),e.each(function(){k.event.add(this,t,i,r,n)})}function De(e,i,o){o?(Q.set(e,i,!1),k.event.add(e,i,{namespace:!1,handler:function(e){var t,n,r=Q.get(this,i);if(1&e.isTrigger&&this[i]){if(r.length)(k.event.special[i]||{}).delegateType&&e.stopPropagation();else if(r=s.call(arguments),Q.set(this,i,r),t=o(this,i),this[i](),r!==(n=Q.get(this,i))||t?Q.set(this,i,!1):n={},r!==n)return e.stopImmediatePropagation(),e.preventDefault(),n.value}else r.length&&(Q.set(this,i,{value:k.event.trigger(k.extend(r[0],k.Event.prototype),r.slice(1),this)}),e.stopImmediatePropagation())}})):void 0===Q.get(e,i)&&k.event.add(e,i,ke)}k.event={global:{},add:function(t,e,n,r,i){var o,a,s,u,l,c,f,p,d,h,g,v=Q.get(t);if(v){n.handler&&(n=(o=n).handler,i=o.selector),i&&k.find.matchesSelector(ie,i),n.guid||(n.guid=k.guid++),(u=v.events)||(u=v.events={}),(a=v.handle)||(a=v.handle=function(e){return"undefined"!=typeof k&&k.event.triggered!==e.type?k.event.dispatch.apply(t,arguments):void 0}),l=(e=(e||"").match(R)||[""]).length;while(l--)d=g=(s=Ee.exec(e[l])||[])[1],h=(s[2]||"").split(".").sort(),d&&(f=k.event.special[d]||{},d=(i?f.delegateType:f.bindType)||d,f=k.event.special[d]||{},c=k.extend({type:d,origType:g,data:r,handler:n,guid:n.guid,selector:i,needsContext:i&&k.expr.match.needsContext.test(i),namespace:h.join(".")},o),(p=u[d])||((p=u[d]=[]).delegateCount=0,f.setup&&!1!==f.setup.call(t,r,h,a)||t.addEventListener&&t.addEventListener(d,a)),f.add&&(f.add.call(t,c),c.handler.guid||(c.handler.guid=n.guid)),i?p.splice(p.delegateCount++,0,c):p.push(c),k.event.global[d]=!0)}},remove:function(e,t,n,r,i){var o,a,s,u,l,c,f,p,d,h,g,v=Q.hasData(e)&&Q.get(e);if(v&&(u=v.events)){l=(t=(t||"").match(R)||[""]).length;while(l--)if(d=g=(s=Ee.exec(t[l])||[])[1],h=(s[2]||"").split(".").sort(),d){f=k.event.special[d]||{},p=u[d=(r?f.delegateType:f.bindType)||d]||[],s=s[2]&&new RegExp("(^|\\.)"+h.join("\\.(?:.*\\.|)")+"(\\.|$)"),a=o=p.length;while(o--)c=p[o],!i&&g!==c.origType||n&&n.guid!==c.guid||s&&!s.test(c.namespace)||r&&r!==c.selector&&("**"!==r||!c.selector)||(p.splice(o,1),c.selector&&p.delegateCount--,f.remove&&f.remove.call(e,c));a&&!p.length&&(f.teardown&&!1!==f.teardown.call(e,h,v.handle)||k.removeEvent(e,d,v.handle),delete u[d])}else for(d in u)k.event.remove(e,d+t[l],n,r,!0);k.isEmptyObject(u)&&Q.remove(e,"handle events")}},dispatch:function(e){var t,n,r,i,o,a,s=k.event.fix(e),u=new Array(arguments.length),l=(Q.get(this,"events")||{})[s.type]||[],c=k.event.special[s.type]||{};for(u[0]=s,t=1;t\x20\t\r\n\f]*)[^>]*)\/>/gi,qe=/\s*$/g;function Oe(e,t){return A(e,"table")&&A(11!==t.nodeType?t:t.firstChild,"tr")&&k(e).children("tbody")[0]||e}function Pe(e){return e.type=(null!==e.getAttribute("type"))+"/"+e.type,e}function Re(e){return"true/"===(e.type||"").slice(0,5)?e.type=e.type.slice(5):e.removeAttribute("type"),e}function Me(e,t){var n,r,i,o,a,s,u,l;if(1===t.nodeType){if(Q.hasData(e)&&(o=Q.access(e),a=Q.set(t,o),l=o.events))for(i in delete a.handle,a.events={},l)for(n=0,r=l[i].length;n")},clone:function(e,t,n){var r,i,o,a,s,u,l,c=e.cloneNode(!0),f=oe(e);if(!(y.noCloneChecked||1!==e.nodeType&&11!==e.nodeType||k.isXMLDoc(e)))for(a=ve(c),r=0,i=(o=ve(e)).length;r").attr(n.scriptAttrs||{}).prop({charset:n.scriptCharset,src:n.url}).on("load error",i=function(e){r.remove(),i=null,e&&t("error"===e.type?404:200,e.type)}),E.head.appendChild(r[0])},abort:function(){i&&i()}}});var Vt,Gt=[],Yt=/(=)\?(?=&|$)|\?\?/;k.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var e=Gt.pop()||k.expando+"_"+kt++;return this[e]=!0,e}}),k.ajaxPrefilter("json jsonp",function(e,t,n){var r,i,o,a=!1!==e.jsonp&&(Yt.test(e.url)?"url":"string"==typeof e.data&&0===(e.contentType||"").indexOf("application/x-www-form-urlencoded")&&Yt.test(e.data)&&"data");if(a||"jsonp"===e.dataTypes[0])return r=e.jsonpCallback=m(e.jsonpCallback)?e.jsonpCallback():e.jsonpCallback,a?e[a]=e[a].replace(Yt,"$1"+r):!1!==e.jsonp&&(e.url+=(St.test(e.url)?"&":"?")+e.jsonp+"="+r),e.converters["script json"]=function(){return o||k.error(r+" was not called"),o[0]},e.dataTypes[0]="json",i=C[r],C[r]=function(){o=arguments},n.always(function(){void 0===i?k(C).removeProp(r):C[r]=i,e[r]&&(e.jsonpCallback=t.jsonpCallback,Gt.push(r)),o&&m(i)&&i(o[0]),o=i=void 0}),"script"}),y.createHTMLDocument=((Vt=E.implementation.createHTMLDocument("").body).innerHTML="
",2===Vt.childNodes.length),k.parseHTML=function(e,t,n){return"string"!=typeof e?[]:("boolean"==typeof t&&(n=t,t=!1),t||(y.createHTMLDocument?((r=(t=E.implementation.createHTMLDocument("")).createElement("base")).href=E.location.href,t.head.appendChild(r)):t=E),o=!n&&[],(i=D.exec(e))?[t.createElement(i[1])]:(i=we([e],t,o),o&&o.length&&k(o).remove(),k.merge([],i.childNodes)));var r,i,o},k.fn.load=function(e,t,n){var r,i,o,a=this,s=e.indexOf(" ");return-1").append(k.parseHTML(e)).find(r):e)}).always(n&&function(e,t){a.each(function(){n.apply(this,o||[e.responseText,t,e])})}),this},k.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(e,t){k.fn[t]=function(e){return this.on(t,e)}}),k.expr.pseudos.animated=function(t){return k.grep(k.timers,function(e){return t===e.elem}).length},k.offset={setOffset:function(e,t,n){var r,i,o,a,s,u,l=k.css(e,"position"),c=k(e),f={};"static"===l&&(e.style.position="relative"),s=c.offset(),o=k.css(e,"top"),u=k.css(e,"left"),("absolute"===l||"fixed"===l)&&-1<(o+u).indexOf("auto")?(a=(r=c.position()).top,i=r.left):(a=parseFloat(o)||0,i=parseFloat(u)||0),m(t)&&(t=t.call(e,n,k.extend({},s))),null!=t.top&&(f.top=t.top-s.top+a),null!=t.left&&(f.left=t.left-s.left+i),"using"in t?t.using.call(e,f):c.css(f)}},k.fn.extend({offset:function(t){if(arguments.length)return void 0===t?this:this.each(function(e){k.offset.setOffset(this,t,e)});var e,n,r=this[0];return r?r.getClientRects().length?(e=r.getBoundingClientRect(),n=r.ownerDocument.defaultView,{top:e.top+n.pageYOffset,left:e.left+n.pageXOffset}):{top:0,left:0}:void 0},position:function(){if(this[0]){var e,t,n,r=this[0],i={top:0,left:0};if("fixed"===k.css(r,"position"))t=r.getBoundingClientRect();else{t=this.offset(),n=r.ownerDocument,e=r.offsetParent||n.documentElement;while(e&&(e===n.body||e===n.documentElement)&&"static"===k.css(e,"position"))e=e.parentNode;e&&e!==r&&1===e.nodeType&&((i=k(e).offset()).top+=k.css(e,"borderTopWidth",!0),i.left+=k.css(e,"borderLeftWidth",!0))}return{top:t.top-i.top-k.css(r,"marginTop",!0),left:t.left-i.left-k.css(r,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var e=this.offsetParent;while(e&&"static"===k.css(e,"position"))e=e.offsetParent;return e||ie})}}),k.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(t,i){var o="pageYOffset"===i;k.fn[t]=function(e){return _(this,function(e,t,n){var r;if(x(e)?r=e:9===e.nodeType&&(r=e.defaultView),void 0===n)return r?r[i]:e[t];r?r.scrollTo(o?r.pageXOffset:n,o?n:r.pageYOffset):e[t]=n},t,e,arguments.length)}}),k.each(["top","left"],function(e,n){k.cssHooks[n]=ze(y.pixelPosition,function(e,t){if(t)return t=_e(e,n),$e.test(t)?k(e).position()[n]+"px":t})}),k.each({Height:"height",Width:"width"},function(a,s){k.each({padding:"inner"+a,content:s,"":"outer"+a},function(r,o){k.fn[o]=function(e,t){var n=arguments.length&&(r||"boolean"!=typeof e),i=r||(!0===e||!0===t?"margin":"border");return _(this,function(e,t,n){var r;return x(e)?0===o.indexOf("outer")?e["inner"+a]:e.document.documentElement["client"+a]:9===e.nodeType?(r=e.documentElement,Math.max(e.body["scroll"+a],r["scroll"+a],e.body["offset"+a],r["offset"+a],r["client"+a])):void 0===n?k.css(e,t,i):k.style(e,t,n,i)},s,n?e:void 0,n)}})}),k.each("blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu".split(" "),function(e,n){k.fn[n]=function(e,t){return 0a;a++)for(i in o[a])n=o[a][i],o[a].hasOwnProperty(i)&&void 0!==n&&(e[i]=t.isPlainObject(n)?t.isPlainObject(e[i])?t.widget.extend({},e[i],n):t.widget.extend({},n):n);return e},t.widget.bridge=function(e,i){var n=i.prototype.widgetFullName||e;t.fn[e]=function(o){var a="string"==typeof o,r=s.call(arguments,1),h=this;return a?this.length||"instance"!==o?this.each(function(){var i,s=t.data(this,n);return"instance"===o?(h=s,!1):s?t.isFunction(s[o])&&"_"!==o.charAt(0)?(i=s[o].apply(s,r),i!==s&&void 0!==i?(h=i&&i.jquery?h.pushStack(i.get()):i,!1):void 0):t.error("no such method '"+o+"' for "+e+" widget instance"):t.error("cannot call methods on "+e+" prior to initialization; "+"attempted to call method '"+o+"'")}):h=void 0:(r.length&&(o=t.widget.extend.apply(null,[o].concat(r))),this.each(function(){var e=t.data(this,n);e?(e.option(o||{}),e._init&&e._init()):t.data(this,n,new i(o,this))})),h}},t.Widget=function(){},t.Widget._childConstructors=[],t.Widget.prototype={widgetName:"widget",widgetEventPrefix:"",defaultElement:"
",options:{classes:{},disabled:!1,create:null},_createWidget:function(e,s){s=t(s||this.defaultElement||this)[0],this.element=t(s),this.uuid=i++,this.eventNamespace="."+this.widgetName+this.uuid,this.bindings=t(),this.hoverable=t(),this.focusable=t(),this.classesElementLookup={},s!==this&&(t.data(s,this.widgetFullName,this),this._on(!0,this.element,{remove:function(t){t.target===s&&this.destroy()}}),this.document=t(s.style?s.ownerDocument:s.document||s),this.window=t(this.document[0].defaultView||this.document[0].parentWindow)),this.options=t.widget.extend({},this.options,this._getCreateOptions(),e),this._create(),this.options.disabled&&this._setOptionDisabled(this.options.disabled),this._trigger("create",null,this._getCreateEventData()),this._init()},_getCreateOptions:function(){return{}},_getCreateEventData:t.noop,_create:t.noop,_init:t.noop,destroy:function(){var e=this;this._destroy(),t.each(this.classesElementLookup,function(t,i){e._removeClass(i,t)}),this.element.off(this.eventNamespace).removeData(this.widgetFullName),this.widget().off(this.eventNamespace).removeAttr("aria-disabled"),this.bindings.off(this.eventNamespace)},_destroy:t.noop,widget:function(){return this.element},option:function(e,i){var s,n,o,a=e;if(0===arguments.length)return t.widget.extend({},this.options);if("string"==typeof e)if(a={},s=e.split("."),e=s.shift(),s.length){for(n=a[e]=t.widget.extend({},this.options[e]),o=0;s.length-1>o;o++)n[s[o]]=n[s[o]]||{},n=n[s[o]];if(e=s.pop(),1===arguments.length)return void 0===n[e]?null:n[e];n[e]=i}else{if(1===arguments.length)return void 0===this.options[e]?null:this.options[e];a[e]=i}return this._setOptions(a),this},_setOptions:function(t){var e;for(e in t)this._setOption(e,t[e]);return this},_setOption:function(t,e){return"classes"===t&&this._setOptionClasses(e),this.options[t]=e,"disabled"===t&&this._setOptionDisabled(e),this},_setOptionClasses:function(e){var i,s,n;for(i in e)n=this.classesElementLookup[i],e[i]!==this.options.classes[i]&&n&&n.length&&(s=t(n.get()),this._removeClass(n,i),s.addClass(this._classes({element:s,keys:i,classes:e,add:!0})))},_setOptionDisabled:function(t){this._toggleClass(this.widget(),this.widgetFullName+"-disabled",null,!!t),t&&(this._removeClass(this.hoverable,null,"ui-state-hover"),this._removeClass(this.focusable,null,"ui-state-focus"))},enable:function(){return this._setOptions({disabled:!1})},disable:function(){return this._setOptions({disabled:!0})},_classes:function(e){function i(i,o){var a,r;for(r=0;i.length>r;r++)a=n.classesElementLookup[i[r]]||t(),a=e.add?t(t.unique(a.get().concat(e.element.get()))):t(a.not(e.element).get()),n.classesElementLookup[i[r]]=a,s.push(i[r]),o&&e.classes[i[r]]&&s.push(e.classes[i[r]])}var s=[],n=this;return e=t.extend({element:this.element,classes:this.options.classes||{}},e),this._on(e.element,{remove:"_untrackClassesElement"}),e.keys&&i(e.keys.match(/\S+/g)||[],!0),e.extra&&i(e.extra.match(/\S+/g)||[]),s.join(" ")},_untrackClassesElement:function(e){var i=this;t.each(i.classesElementLookup,function(s,n){-1!==t.inArray(e.target,n)&&(i.classesElementLookup[s]=t(n.not(e.target).get()))})},_removeClass:function(t,e,i){return this._toggleClass(t,e,i,!1)},_addClass:function(t,e,i){return this._toggleClass(t,e,i,!0)},_toggleClass:function(t,e,i,s){s="boolean"==typeof s?s:i;var n="string"==typeof t||null===t,o={extra:n?e:i,keys:n?t:e,element:n?this.element:t,add:s};return o.element.toggleClass(this._classes(o),s),this},_on:function(e,i,s){var n,o=this;"boolean"!=typeof e&&(s=i,i=e,e=!1),s?(i=n=t(i),this.bindings=this.bindings.add(i)):(s=i,i=this.element,n=this.widget()),t.each(s,function(s,a){function r(){return e||o.options.disabled!==!0&&!t(this).hasClass("ui-state-disabled")?("string"==typeof a?o[a]:a).apply(o,arguments):void 0}"string"!=typeof a&&(r.guid=a.guid=a.guid||r.guid||t.guid++);var h=s.match(/^([\w:-]*)\s*(.*)$/),l=h[1]+o.eventNamespace,c=h[2];c?n.on(l,c,r):i.on(l,r)})},_off:function(e,i){i=(i||"").split(" ").join(this.eventNamespace+" ")+this.eventNamespace,e.off(i).off(i),this.bindings=t(this.bindings.not(e).get()),this.focusable=t(this.focusable.not(e).get()),this.hoverable=t(this.hoverable.not(e).get())},_delay:function(t,e){function i(){return("string"==typeof t?s[t]:t).apply(s,arguments)}var s=this;return setTimeout(i,e||0)},_hoverable:function(e){this.hoverable=this.hoverable.add(e),this._on(e,{mouseenter:function(e){this._addClass(t(e.currentTarget),null,"ui-state-hover")},mouseleave:function(e){this._removeClass(t(e.currentTarget),null,"ui-state-hover")}})},_focusable:function(e){this.focusable=this.focusable.add(e),this._on(e,{focusin:function(e){this._addClass(t(e.currentTarget),null,"ui-state-focus")},focusout:function(e){this._removeClass(t(e.currentTarget),null,"ui-state-focus")}})},_trigger:function(e,i,s){var n,o,a=this.options[e];if(s=s||{},i=t.Event(i),i.type=(e===this.widgetEventPrefix?e:this.widgetEventPrefix+e).toLowerCase(),i.target=this.element[0],o=i.originalEvent)for(n in o)n in i||(i[n]=o[n]);return this.element.trigger(i,s),!(t.isFunction(a)&&a.apply(this.element[0],[i].concat(s))===!1||i.isDefaultPrevented())}},t.each({show:"fadeIn",hide:"fadeOut"},function(e,i){t.Widget.prototype["_"+e]=function(s,n,o){"string"==typeof n&&(n={effect:n});var a,r=n?n===!0||"number"==typeof n?i:n.effect||i:e;n=n||{},"number"==typeof n&&(n={duration:n}),a=!t.isEmptyObject(n),n.complete=o,n.delay&&s.delay(n.delay),a&&t.effects&&t.effects.effect[r]?s[e](n):r!==e&&s[r]?s[r](n.duration,n.easing,o):s.queue(function(i){t(this)[e](),o&&o.call(s[0]),i()})}}),t.widget,function(){function e(t,e,i){return[parseFloat(t[0])*(u.test(t[0])?e/100:1),parseFloat(t[1])*(u.test(t[1])?i/100:1)]}function i(e,i){return parseInt(t.css(e,i),10)||0}function s(e){var i=e[0];return 9===i.nodeType?{width:e.width(),height:e.height(),offset:{top:0,left:0}}:t.isWindow(i)?{width:e.width(),height:e.height(),offset:{top:e.scrollTop(),left:e.scrollLeft()}}:i.preventDefault?{width:0,height:0,offset:{top:i.pageY,left:i.pageX}}:{width:e.outerWidth(),height:e.outerHeight(),offset:e.offset()}}var n,o=Math.max,a=Math.abs,r=/left|center|right/,h=/top|center|bottom/,l=/[\+\-]\d+(\.[\d]+)?%?/,c=/^\w+/,u=/%$/,d=t.fn.position;t.position={scrollbarWidth:function(){if(void 0!==n)return n;var e,i,s=t("
"),o=s.children()[0];return t("body").append(s),e=o.offsetWidth,s.css("overflow","scroll"),i=o.offsetWidth,e===i&&(i=s[0].clientWidth),s.remove(),n=e-i},getScrollInfo:function(e){var i=e.isWindow||e.isDocument?"":e.element.css("overflow-x"),s=e.isWindow||e.isDocument?"":e.element.css("overflow-y"),n="scroll"===i||"auto"===i&&e.widthi?"left":e>0?"right":"center",vertical:0>r?"top":s>0?"bottom":"middle"};l>p&&p>a(e+i)&&(u.horizontal="center"),c>f&&f>a(s+r)&&(u.vertical="middle"),u.important=o(a(e),a(i))>o(a(s),a(r))?"horizontal":"vertical",n.using.call(this,t,u)}),h.offset(t.extend(D,{using:r}))})},t.ui.position={fit:{left:function(t,e){var i,s=e.within,n=s.isWindow?s.scrollLeft:s.offset.left,a=s.width,r=t.left-e.collisionPosition.marginLeft,h=n-r,l=r+e.collisionWidth-a-n;e.collisionWidth>a?h>0&&0>=l?(i=t.left+h+e.collisionWidth-a-n,t.left+=h-i):t.left=l>0&&0>=h?n:h>l?n+a-e.collisionWidth:n:h>0?t.left+=h:l>0?t.left-=l:t.left=o(t.left-r,t.left)},top:function(t,e){var i,s=e.within,n=s.isWindow?s.scrollTop:s.offset.top,a=e.within.height,r=t.top-e.collisionPosition.marginTop,h=n-r,l=r+e.collisionHeight-a-n;e.collisionHeight>a?h>0&&0>=l?(i=t.top+h+e.collisionHeight-a-n,t.top+=h-i):t.top=l>0&&0>=h?n:h>l?n+a-e.collisionHeight:n:h>0?t.top+=h:l>0?t.top-=l:t.top=o(t.top-r,t.top)}},flip:{left:function(t,e){var i,s,n=e.within,o=n.offset.left+n.scrollLeft,r=n.width,h=n.isWindow?n.scrollLeft:n.offset.left,l=t.left-e.collisionPosition.marginLeft,c=l-h,u=l+e.collisionWidth-r-h,d="left"===e.my[0]?-e.elemWidth:"right"===e.my[0]?e.elemWidth:0,p="left"===e.at[0]?e.targetWidth:"right"===e.at[0]?-e.targetWidth:0,f=-2*e.offset[0];0>c?(i=t.left+d+p+f+e.collisionWidth-r-o,(0>i||a(c)>i)&&(t.left+=d+p+f)):u>0&&(s=t.left-e.collisionPosition.marginLeft+d+p+f-h,(s>0||u>a(s))&&(t.left+=d+p+f))},top:function(t,e){var i,s,n=e.within,o=n.offset.top+n.scrollTop,r=n.height,h=n.isWindow?n.scrollTop:n.offset.top,l=t.top-e.collisionPosition.marginTop,c=l-h,u=l+e.collisionHeight-r-h,d="top"===e.my[1],p=d?-e.elemHeight:"bottom"===e.my[1]?e.elemHeight:0,f="top"===e.at[1]?e.targetHeight:"bottom"===e.at[1]?-e.targetHeight:0,m=-2*e.offset[1];0>c?(s=t.top+p+f+m+e.collisionHeight-r-o,(0>s||a(c)>s)&&(t.top+=p+f+m)):u>0&&(i=t.top-e.collisionPosition.marginTop+p+f+m-h,(i>0||u>a(i))&&(t.top+=p+f+m))}},flipfit:{left:function(){t.ui.position.flip.left.apply(this,arguments),t.ui.position.fit.left.apply(this,arguments)},top:function(){t.ui.position.flip.top.apply(this,arguments),t.ui.position.fit.top.apply(this,arguments)}}}}(),t.ui.position,t.extend(t.expr[":"],{data:t.expr.createPseudo?t.expr.createPseudo(function(e){return function(i){return!!t.data(i,e)}}):function(e,i,s){return!!t.data(e,s[3])}}),t.fn.extend({disableSelection:function(){var t="onselectstart"in document.createElement("div")?"selectstart":"mousedown";return function(){return this.on(t+".ui-disableSelection",function(t){t.preventDefault()})}}(),enableSelection:function(){return this.off(".ui-disableSelection")}}),t.ui.focusable=function(i,s){var n,o,a,r,h,l=i.nodeName.toLowerCase();return"area"===l?(n=i.parentNode,o=n.name,i.href&&o&&"map"===n.nodeName.toLowerCase()?(a=t("img[usemap='#"+o+"']"),a.length>0&&a.is(":visible")):!1):(/^(input|select|textarea|button|object)$/.test(l)?(r=!i.disabled,r&&(h=t(i).closest("fieldset")[0],h&&(r=!h.disabled))):r="a"===l?i.href||s:s,r&&t(i).is(":visible")&&e(t(i)))},t.extend(t.expr[":"],{focusable:function(e){return t.ui.focusable(e,null!=t.attr(e,"tabindex"))}}),t.ui.focusable,t.fn.form=function(){return"string"==typeof this[0].form?this.closest("form"):t(this[0].form)},t.ui.formResetMixin={_formResetHandler:function(){var e=t(this);setTimeout(function(){var i=e.data("ui-form-reset-instances");t.each(i,function(){this.refresh()})})},_bindFormResetHandler:function(){if(this.form=this.element.form(),this.form.length){var t=this.form.data("ui-form-reset-instances")||[];t.length||this.form.on("reset.ui-form-reset",this._formResetHandler),t.push(this),this.form.data("ui-form-reset-instances",t)}},_unbindFormResetHandler:function(){if(this.form.length){var e=this.form.data("ui-form-reset-instances");e.splice(t.inArray(this,e),1),e.length?this.form.data("ui-form-reset-instances",e):this.form.removeData("ui-form-reset-instances").off("reset.ui-form-reset")}}},"1.7"===t.fn.jquery.substring(0,3)&&(t.each(["Width","Height"],function(e,i){function s(e,i,s,o){return t.each(n,function(){i-=parseFloat(t.css(e,"padding"+this))||0,s&&(i-=parseFloat(t.css(e,"border"+this+"Width"))||0),o&&(i-=parseFloat(t.css(e,"margin"+this))||0)}),i}var n="Width"===i?["Left","Right"]:["Top","Bottom"],o=i.toLowerCase(),a={innerWidth:t.fn.innerWidth,innerHeight:t.fn.innerHeight,outerWidth:t.fn.outerWidth,outerHeight:t.fn.outerHeight};t.fn["inner"+i]=function(e){return void 0===e?a["inner"+i].call(this):this.each(function(){t(this).css(o,s(this,e)+"px")})},t.fn["outer"+i]=function(e,n){return"number"!=typeof e?a["outer"+i].call(this,e):this.each(function(){t(this).css(o,s(this,e,!0,n)+"px")})}}),t.fn.addBack=function(t){return this.add(null==t?this.prevObject:this.prevObject.filter(t))}),t.ui.keyCode={BACKSPACE:8,COMMA:188,DELETE:46,DOWN:40,END:35,ENTER:13,ESCAPE:27,HOME:36,LEFT:37,PAGE_DOWN:34,PAGE_UP:33,PERIOD:190,RIGHT:39,SPACE:32,TAB:9,UP:38},t.ui.escapeSelector=function(){var t=/([!"#$%&'()*+,./:;<=>?@[\]^`{|}~])/g;return function(e){return e.replace(t,"\\$1")}}(),t.fn.labels=function(){var e,i,s,n,o;return this[0].labels&&this[0].labels.length?this.pushStack(this[0].labels):(n=this.eq(0).parents("label"),s=this.attr("id"),s&&(e=this.eq(0).parents().last(),o=e.add(e.length?e.siblings():this.siblings()),i="label[for='"+t.ui.escapeSelector(s)+"']",n=n.add(o.find(i).addBack(i))),this.pushStack(n))},t.fn.scrollParent=function(e){var i=this.css("position"),s="absolute"===i,n=e?/(auto|scroll|hidden)/:/(auto|scroll)/,o=this.parents().filter(function(){var e=t(this);return s&&"static"===e.css("position")?!1:n.test(e.css("overflow")+e.css("overflow-y")+e.css("overflow-x"))}).eq(0);return"fixed"!==i&&o.length?o:t(this[0].ownerDocument||document)},t.extend(t.expr[":"],{tabbable:function(e){var i=t.attr(e,"tabindex"),s=null!=i;return(!s||i>=0)&&t.ui.focusable(e,s)}}),t.fn.extend({uniqueId:function(){var t=0;return function(){return this.each(function(){this.id||(this.id="ui-id-"+ ++t)})}}(),removeUniqueId:function(){return this.each(function(){/^ui-id-\d+$/.test(this.id)&&t(this).removeAttr("id")})}}),t.ui.ie=!!/msie [\w.]+/.exec(navigator.userAgent.toLowerCase());var n=!1;t(document).on("mouseup",function(){n=!1}),t.widget("ui.mouse",{version:"1.12.1",options:{cancel:"input, textarea, button, select, option",distance:1,delay:0},_mouseInit:function(){var e=this;this.element.on("mousedown."+this.widgetName,function(t){return e._mouseDown(t)}).on("click."+this.widgetName,function(i){return!0===t.data(i.target,e.widgetName+".preventClickEvent")?(t.removeData(i.target,e.widgetName+".preventClickEvent"),i.stopImmediatePropagation(),!1):void 0}),this.started=!1},_mouseDestroy:function(){this.element.off("."+this.widgetName),this._mouseMoveDelegate&&this.document.off("mousemove."+this.widgetName,this._mouseMoveDelegate).off("mouseup."+this.widgetName,this._mouseUpDelegate)},_mouseDown:function(e){if(!n){this._mouseMoved=!1,this._mouseStarted&&this._mouseUp(e),this._mouseDownEvent=e;var i=this,s=1===e.which,o="string"==typeof this.options.cancel&&e.target.nodeName?t(e.target).closest(this.options.cancel).length:!1;return s&&!o&&this._mouseCapture(e)?(this.mouseDelayMet=!this.options.delay,this.mouseDelayMet||(this._mouseDelayTimer=setTimeout(function(){i.mouseDelayMet=!0},this.options.delay)),this._mouseDistanceMet(e)&&this._mouseDelayMet(e)&&(this._mouseStarted=this._mouseStart(e)!==!1,!this._mouseStarted)?(e.preventDefault(),!0):(!0===t.data(e.target,this.widgetName+".preventClickEvent")&&t.removeData(e.target,this.widgetName+".preventClickEvent"),this._mouseMoveDelegate=function(t){return i._mouseMove(t)},this._mouseUpDelegate=function(t){return i._mouseUp(t)},this.document.on("mousemove."+this.widgetName,this._mouseMoveDelegate).on("mouseup."+this.widgetName,this._mouseUpDelegate),e.preventDefault(),n=!0,!0)):!0}},_mouseMove:function(e){if(this._mouseMoved){if(t.ui.ie&&(!document.documentMode||9>document.documentMode)&&!e.button)return this._mouseUp(e);if(!e.which)if(e.originalEvent.altKey||e.originalEvent.ctrlKey||e.originalEvent.metaKey||e.originalEvent.shiftKey)this.ignoreMissingWhich=!0;else if(!this.ignoreMissingWhich)return this._mouseUp(e)}return(e.which||e.button)&&(this._mouseMoved=!0),this._mouseStarted?(this._mouseDrag(e),e.preventDefault()):(this._mouseDistanceMet(e)&&this._mouseDelayMet(e)&&(this._mouseStarted=this._mouseStart(this._mouseDownEvent,e)!==!1,this._mouseStarted?this._mouseDrag(e):this._mouseUp(e)),!this._mouseStarted)},_mouseUp:function(e){this.document.off("mousemove."+this.widgetName,this._mouseMoveDelegate).off("mouseup."+this.widgetName,this._mouseUpDelegate),this._mouseStarted&&(this._mouseStarted=!1,e.target===this._mouseDownEvent.target&&t.data(e.target,this.widgetName+".preventClickEvent",!0),this._mouseStop(e)),this._mouseDelayTimer&&(clearTimeout(this._mouseDelayTimer),delete this._mouseDelayTimer),this.ignoreMissingWhich=!1,n=!1,e.preventDefault()},_mouseDistanceMet:function(t){return Math.max(Math.abs(this._mouseDownEvent.pageX-t.pageX),Math.abs(this._mouseDownEvent.pageY-t.pageY))>=this.options.distance},_mouseDelayMet:function(){return this.mouseDelayMet},_mouseStart:function(){},_mouseDrag:function(){},_mouseStop:function(){},_mouseCapture:function(){return!0}}),t.ui.plugin={add:function(e,i,s){var n,o=t.ui[e].prototype;for(n in s)o.plugins[n]=o.plugins[n]||[],o.plugins[n].push([i,s[n]])},call:function(t,e,i,s){var n,o=t.plugins[e];if(o&&(s||t.element[0].parentNode&&11!==t.element[0].parentNode.nodeType))for(n=0;o.length>n;n++)t.options[o[n][0]]&&o[n][1].apply(t.element,i)}},t.widget("ui.resizable",t.ui.mouse,{version:"1.12.1",widgetEventPrefix:"resize",options:{alsoResize:!1,animate:!1,animateDuration:"slow",animateEasing:"swing",aspectRatio:!1,autoHide:!1,classes:{"ui-resizable-se":"ui-icon ui-icon-gripsmall-diagonal-se"},containment:!1,ghost:!1,grid:!1,handles:"e,s,se",helper:!1,maxHeight:null,maxWidth:null,minHeight:10,minWidth:10,zIndex:90,resize:null,start:null,stop:null},_num:function(t){return parseFloat(t)||0},_isNumber:function(t){return!isNaN(parseFloat(t))},_hasScroll:function(e,i){if("hidden"===t(e).css("overflow"))return!1;var s=i&&"left"===i?"scrollLeft":"scrollTop",n=!1;return e[s]>0?!0:(e[s]=1,n=e[s]>0,e[s]=0,n)},_create:function(){var e,i=this.options,s=this;this._addClass("ui-resizable"),t.extend(this,{_aspectRatio:!!i.aspectRatio,aspectRatio:i.aspectRatio,originalElement:this.element,_proportionallyResizeElements:[],_helper:i.helper||i.ghost||i.animate?i.helper||"ui-resizable-helper":null}),this.element[0].nodeName.match(/^(canvas|textarea|input|select|button|img)$/i)&&(this.element.wrap(t("
").css({position:this.element.css("position"),width:this.element.outerWidth(),height:this.element.outerHeight(),top:this.element.css("top"),left:this.element.css("left")})),this.element=this.element.parent().data("ui-resizable",this.element.resizable("instance")),this.elementIsWrapper=!0,e={marginTop:this.originalElement.css("marginTop"),marginRight:this.originalElement.css("marginRight"),marginBottom:this.originalElement.css("marginBottom"),marginLeft:this.originalElement.css("marginLeft")},this.element.css(e),this.originalElement.css("margin",0),this.originalResizeStyle=this.originalElement.css("resize"),this.originalElement.css("resize","none"),this._proportionallyResizeElements.push(this.originalElement.css({position:"static",zoom:1,display:"block"})),this.originalElement.css(e),this._proportionallyResize()),this._setupHandles(),i.autoHide&&t(this.element).on("mouseenter",function(){i.disabled||(s._removeClass("ui-resizable-autohide"),s._handles.show())}).on("mouseleave",function(){i.disabled||s.resizing||(s._addClass("ui-resizable-autohide"),s._handles.hide())}),this._mouseInit()},_destroy:function(){this._mouseDestroy();var e,i=function(e){t(e).removeData("resizable").removeData("ui-resizable").off(".resizable").find(".ui-resizable-handle").remove()};return this.elementIsWrapper&&(i(this.element),e=this.element,this.originalElement.css({position:e.css("position"),width:e.outerWidth(),height:e.outerHeight(),top:e.css("top"),left:e.css("left")}).insertAfter(e),e.remove()),this.originalElement.css("resize",this.originalResizeStyle),i(this.originalElement),this},_setOption:function(t,e){switch(this._super(t,e),t){case"handles":this._removeHandles(),this._setupHandles();break;default:}},_setupHandles:function(){var e,i,s,n,o,a=this.options,r=this;if(this.handles=a.handles||(t(".ui-resizable-handle",this.element).length?{n:".ui-resizable-n",e:".ui-resizable-e",s:".ui-resizable-s",w:".ui-resizable-w",se:".ui-resizable-se",sw:".ui-resizable-sw",ne:".ui-resizable-ne",nw:".ui-resizable-nw"}:"e,s,se"),this._handles=t(),this.handles.constructor===String)for("all"===this.handles&&(this.handles="n,e,s,w,se,sw,ne,nw"),s=this.handles.split(","),this.handles={},i=0;s.length>i;i++)e=t.trim(s[i]),n="ui-resizable-"+e,o=t("
"),this._addClass(o,"ui-resizable-handle "+n),o.css({zIndex:a.zIndex}),this.handles[e]=".ui-resizable-"+e,this.element.append(o);this._renderAxis=function(e){var i,s,n,o;e=e||this.element;for(i in this.handles)this.handles[i].constructor===String?this.handles[i]=this.element.children(this.handles[i]).first().show():(this.handles[i].jquery||this.handles[i].nodeType)&&(this.handles[i]=t(this.handles[i]),this._on(this.handles[i],{mousedown:r._mouseDown})),this.elementIsWrapper&&this.originalElement[0].nodeName.match(/^(textarea|input|select|button)$/i)&&(s=t(this.handles[i],this.element),o=/sw|ne|nw|se|n|s/.test(i)?s.outerHeight():s.outerWidth(),n=["padding",/ne|nw|n/.test(i)?"Top":/se|sw|s/.test(i)?"Bottom":/^e$/.test(i)?"Right":"Left"].join(""),e.css(n,o),this._proportionallyResize()),this._handles=this._handles.add(this.handles[i])},this._renderAxis(this.element),this._handles=this._handles.add(this.element.find(".ui-resizable-handle")),this._handles.disableSelection(),this._handles.on("mouseover",function(){r.resizing||(this.className&&(o=this.className.match(/ui-resizable-(se|sw|ne|nw|n|e|s|w)/i)),r.axis=o&&o[1]?o[1]:"se")}),a.autoHide&&(this._handles.hide(),this._addClass("ui-resizable-autohide"))},_removeHandles:function(){this._handles.remove()},_mouseCapture:function(e){var i,s,n=!1;for(i in this.handles)s=t(this.handles[i])[0],(s===e.target||t.contains(s,e.target))&&(n=!0);return!this.options.disabled&&n},_mouseStart:function(e){var i,s,n,o=this.options,a=this.element;return this.resizing=!0,this._renderProxy(),i=this._num(this.helper.css("left")),s=this._num(this.helper.css("top")),o.containment&&(i+=t(o.containment).scrollLeft()||0,s+=t(o.containment).scrollTop()||0),this.offset=this.helper.offset(),this.position={left:i,top:s},this.size=this._helper?{width:this.helper.width(),height:this.helper.height()}:{width:a.width(),height:a.height()},this.originalSize=this._helper?{width:a.outerWidth(),height:a.outerHeight()}:{width:a.width(),height:a.height()},this.sizeDiff={width:a.outerWidth()-a.width(),height:a.outerHeight()-a.height()},this.originalPosition={left:i,top:s},this.originalMousePosition={left:e.pageX,top:e.pageY},this.aspectRatio="number"==typeof o.aspectRatio?o.aspectRatio:this.originalSize.width/this.originalSize.height||1,n=t(".ui-resizable-"+this.axis).css("cursor"),t("body").css("cursor","auto"===n?this.axis+"-resize":n),this._addClass("ui-resizable-resizing"),this._propagate("start",e),!0},_mouseDrag:function(e){var i,s,n=this.originalMousePosition,o=this.axis,a=e.pageX-n.left||0,r=e.pageY-n.top||0,h=this._change[o];return this._updatePrevProperties(),h?(i=h.apply(this,[e,a,r]),this._updateVirtualBoundaries(e.shiftKey),(this._aspectRatio||e.shiftKey)&&(i=this._updateRatio(i,e)),i=this._respectSize(i,e),this._updateCache(i),this._propagate("resize",e),s=this._applyChanges(),!this._helper&&this._proportionallyResizeElements.length&&this._proportionallyResize(),t.isEmptyObject(s)||(this._updatePrevProperties(),this._trigger("resize",e,this.ui()),this._applyChanges()),!1):!1},_mouseStop:function(e){this.resizing=!1;var i,s,n,o,a,r,h,l=this.options,c=this;return this._helper&&(i=this._proportionallyResizeElements,s=i.length&&/textarea/i.test(i[0].nodeName),n=s&&this._hasScroll(i[0],"left")?0:c.sizeDiff.height,o=s?0:c.sizeDiff.width,a={width:c.helper.width()-o,height:c.helper.height()-n},r=parseFloat(c.element.css("left"))+(c.position.left-c.originalPosition.left)||null,h=parseFloat(c.element.css("top"))+(c.position.top-c.originalPosition.top)||null,l.animate||this.element.css(t.extend(a,{top:h,left:r})),c.helper.height(c.size.height),c.helper.width(c.size.width),this._helper&&!l.animate&&this._proportionallyResize()),t("body").css("cursor","auto"),this._removeClass("ui-resizable-resizing"),this._propagate("stop",e),this._helper&&this.helper.remove(),!1},_updatePrevProperties:function(){this.prevPosition={top:this.position.top,left:this.position.left},this.prevSize={width:this.size.width,height:this.size.height}},_applyChanges:function(){var t={};return this.position.top!==this.prevPosition.top&&(t.top=this.position.top+"px"),this.position.left!==this.prevPosition.left&&(t.left=this.position.left+"px"),this.size.width!==this.prevSize.width&&(t.width=this.size.width+"px"),this.size.height!==this.prevSize.height&&(t.height=this.size.height+"px"),this.helper.css(t),t},_updateVirtualBoundaries:function(t){var e,i,s,n,o,a=this.options;o={minWidth:this._isNumber(a.minWidth)?a.minWidth:0,maxWidth:this._isNumber(a.maxWidth)?a.maxWidth:1/0,minHeight:this._isNumber(a.minHeight)?a.minHeight:0,maxHeight:this._isNumber(a.maxHeight)?a.maxHeight:1/0},(this._aspectRatio||t)&&(e=o.minHeight*this.aspectRatio,s=o.minWidth/this.aspectRatio,i=o.maxHeight*this.aspectRatio,n=o.maxWidth/this.aspectRatio,e>o.minWidth&&(o.minWidth=e),s>o.minHeight&&(o.minHeight=s),o.maxWidth>i&&(o.maxWidth=i),o.maxHeight>n&&(o.maxHeight=n)),this._vBoundaries=o},_updateCache:function(t){this.offset=this.helper.offset(),this._isNumber(t.left)&&(this.position.left=t.left),this._isNumber(t.top)&&(this.position.top=t.top),this._isNumber(t.height)&&(this.size.height=t.height),this._isNumber(t.width)&&(this.size.width=t.width)},_updateRatio:function(t){var e=this.position,i=this.size,s=this.axis;return this._isNumber(t.height)?t.width=t.height*this.aspectRatio:this._isNumber(t.width)&&(t.height=t.width/this.aspectRatio),"sw"===s&&(t.left=e.left+(i.width-t.width),t.top=null),"nw"===s&&(t.top=e.top+(i.height-t.height),t.left=e.left+(i.width-t.width)),t},_respectSize:function(t){var e=this._vBoundaries,i=this.axis,s=this._isNumber(t.width)&&e.maxWidth&&e.maxWidtht.width,a=this._isNumber(t.height)&&e.minHeight&&e.minHeight>t.height,r=this.originalPosition.left+this.originalSize.width,h=this.originalPosition.top+this.originalSize.height,l=/sw|nw|w/.test(i),c=/nw|ne|n/.test(i);return o&&(t.width=e.minWidth),a&&(t.height=e.minHeight),s&&(t.width=e.maxWidth),n&&(t.height=e.maxHeight),o&&l&&(t.left=r-e.minWidth),s&&l&&(t.left=r-e.maxWidth),a&&c&&(t.top=h-e.minHeight),n&&c&&(t.top=h-e.maxHeight),t.width||t.height||t.left||!t.top?t.width||t.height||t.top||!t.left||(t.left=null):t.top=null,t},_getPaddingPlusBorderDimensions:function(t){for(var e=0,i=[],s=[t.css("borderTopWidth"),t.css("borderRightWidth"),t.css("borderBottomWidth"),t.css("borderLeftWidth")],n=[t.css("paddingTop"),t.css("paddingRight"),t.css("paddingBottom"),t.css("paddingLeft")];4>e;e++)i[e]=parseFloat(s[e])||0,i[e]+=parseFloat(n[e])||0;return{height:i[0]+i[2],width:i[1]+i[3]}},_proportionallyResize:function(){if(this._proportionallyResizeElements.length)for(var t,e=0,i=this.helper||this.element;this._proportionallyResizeElements.length>e;e++)t=this._proportionallyResizeElements[e],this.outerDimensions||(this.outerDimensions=this._getPaddingPlusBorderDimensions(t)),t.css({height:i.height()-this.outerDimensions.height||0,width:i.width()-this.outerDimensions.width||0})},_renderProxy:function(){var e=this.element,i=this.options;this.elementOffset=e.offset(),this._helper?(this.helper=this.helper||t("
"),this._addClass(this.helper,this._helper),this.helper.css({width:this.element.outerWidth(),height:this.element.outerHeight(),position:"absolute",left:this.elementOffset.left+"px",top:this.elementOffset.top+"px",zIndex:++i.zIndex}),this.helper.appendTo("body").disableSelection()):this.helper=this.element },_change:{e:function(t,e){return{width:this.originalSize.width+e}},w:function(t,e){var i=this.originalSize,s=this.originalPosition;return{left:s.left+e,width:i.width-e}},n:function(t,e,i){var s=this.originalSize,n=this.originalPosition;return{top:n.top+i,height:s.height-i}},s:function(t,e,i){return{height:this.originalSize.height+i}},se:function(e,i,s){return t.extend(this._change.s.apply(this,arguments),this._change.e.apply(this,[e,i,s]))},sw:function(e,i,s){return t.extend(this._change.s.apply(this,arguments),this._change.w.apply(this,[e,i,s]))},ne:function(e,i,s){return t.extend(this._change.n.apply(this,arguments),this._change.e.apply(this,[e,i,s]))},nw:function(e,i,s){return t.extend(this._change.n.apply(this,arguments),this._change.w.apply(this,[e,i,s]))}},_propagate:function(e,i){t.ui.plugin.call(this,e,[i,this.ui()]),"resize"!==e&&this._trigger(e,i,this.ui())},plugins:{},ui:function(){return{originalElement:this.originalElement,element:this.element,helper:this.helper,position:this.position,size:this.size,originalSize:this.originalSize,originalPosition:this.originalPosition}}}),t.ui.plugin.add("resizable","animate",{stop:function(e){var i=t(this).resizable("instance"),s=i.options,n=i._proportionallyResizeElements,o=n.length&&/textarea/i.test(n[0].nodeName),a=o&&i._hasScroll(n[0],"left")?0:i.sizeDiff.height,r=o?0:i.sizeDiff.width,h={width:i.size.width-r,height:i.size.height-a},l=parseFloat(i.element.css("left"))+(i.position.left-i.originalPosition.left)||null,c=parseFloat(i.element.css("top"))+(i.position.top-i.originalPosition.top)||null;i.element.animate(t.extend(h,c&&l?{top:c,left:l}:{}),{duration:s.animateDuration,easing:s.animateEasing,step:function(){var s={width:parseFloat(i.element.css("width")),height:parseFloat(i.element.css("height")),top:parseFloat(i.element.css("top")),left:parseFloat(i.element.css("left"))};n&&n.length&&t(n[0]).css({width:s.width,height:s.height}),i._updateCache(s),i._propagate("resize",e)}})}}),t.ui.plugin.add("resizable","containment",{start:function(){var e,i,s,n,o,a,r,h=t(this).resizable("instance"),l=h.options,c=h.element,u=l.containment,d=u instanceof t?u.get(0):/parent/.test(u)?c.parent().get(0):u;d&&(h.containerElement=t(d),/document/.test(u)||u===document?(h.containerOffset={left:0,top:0},h.containerPosition={left:0,top:0},h.parentData={element:t(document),left:0,top:0,width:t(document).width(),height:t(document).height()||document.body.parentNode.scrollHeight}):(e=t(d),i=[],t(["Top","Right","Left","Bottom"]).each(function(t,s){i[t]=h._num(e.css("padding"+s))}),h.containerOffset=e.offset(),h.containerPosition=e.position(),h.containerSize={height:e.innerHeight()-i[3],width:e.innerWidth()-i[1]},s=h.containerOffset,n=h.containerSize.height,o=h.containerSize.width,a=h._hasScroll(d,"left")?d.scrollWidth:o,r=h._hasScroll(d)?d.scrollHeight:n,h.parentData={element:d,left:s.left,top:s.top,width:a,height:r}))},resize:function(e){var i,s,n,o,a=t(this).resizable("instance"),r=a.options,h=a.containerOffset,l=a.position,c=a._aspectRatio||e.shiftKey,u={top:0,left:0},d=a.containerElement,p=!0;d[0]!==document&&/static/.test(d.css("position"))&&(u=h),l.left<(a._helper?h.left:0)&&(a.size.width=a.size.width+(a._helper?a.position.left-h.left:a.position.left-u.left),c&&(a.size.height=a.size.width/a.aspectRatio,p=!1),a.position.left=r.helper?h.left:0),l.top<(a._helper?h.top:0)&&(a.size.height=a.size.height+(a._helper?a.position.top-h.top:a.position.top),c&&(a.size.width=a.size.height*a.aspectRatio,p=!1),a.position.top=a._helper?h.top:0),n=a.containerElement.get(0)===a.element.parent().get(0),o=/relative|absolute/.test(a.containerElement.css("position")),n&&o?(a.offset.left=a.parentData.left+a.position.left,a.offset.top=a.parentData.top+a.position.top):(a.offset.left=a.element.offset().left,a.offset.top=a.element.offset().top),i=Math.abs(a.sizeDiff.width+(a._helper?a.offset.left-u.left:a.offset.left-h.left)),s=Math.abs(a.sizeDiff.height+(a._helper?a.offset.top-u.top:a.offset.top-h.top)),i+a.size.width>=a.parentData.width&&(a.size.width=a.parentData.width-i,c&&(a.size.height=a.size.width/a.aspectRatio,p=!1)),s+a.size.height>=a.parentData.height&&(a.size.height=a.parentData.height-s,c&&(a.size.width=a.size.height*a.aspectRatio,p=!1)),p||(a.position.left=a.prevPosition.left,a.position.top=a.prevPosition.top,a.size.width=a.prevSize.width,a.size.height=a.prevSize.height)},stop:function(){var e=t(this).resizable("instance"),i=e.options,s=e.containerOffset,n=e.containerPosition,o=e.containerElement,a=t(e.helper),r=a.offset(),h=a.outerWidth()-e.sizeDiff.width,l=a.outerHeight()-e.sizeDiff.height;e._helper&&!i.animate&&/relative/.test(o.css("position"))&&t(this).css({left:r.left-n.left-s.left,width:h,height:l}),e._helper&&!i.animate&&/static/.test(o.css("position"))&&t(this).css({left:r.left-n.left-s.left,width:h,height:l})}}),t.ui.plugin.add("resizable","alsoResize",{start:function(){var e=t(this).resizable("instance"),i=e.options;t(i.alsoResize).each(function(){var e=t(this);e.data("ui-resizable-alsoresize",{width:parseFloat(e.width()),height:parseFloat(e.height()),left:parseFloat(e.css("left")),top:parseFloat(e.css("top"))})})},resize:function(e,i){var s=t(this).resizable("instance"),n=s.options,o=s.originalSize,a=s.originalPosition,r={height:s.size.height-o.height||0,width:s.size.width-o.width||0,top:s.position.top-a.top||0,left:s.position.left-a.left||0};t(n.alsoResize).each(function(){var e=t(this),s=t(this).data("ui-resizable-alsoresize"),n={},o=e.parents(i.originalElement[0]).length?["width","height"]:["width","height","top","left"];t.each(o,function(t,e){var i=(s[e]||0)+(r[e]||0);i&&i>=0&&(n[e]=i||null)}),e.css(n)})},stop:function(){t(this).removeData("ui-resizable-alsoresize")}}),t.ui.plugin.add("resizable","ghost",{start:function(){var e=t(this).resizable("instance"),i=e.size;e.ghost=e.originalElement.clone(),e.ghost.css({opacity:.25,display:"block",position:"relative",height:i.height,width:i.width,margin:0,left:0,top:0}),e._addClass(e.ghost,"ui-resizable-ghost"),t.uiBackCompat!==!1&&"string"==typeof e.options.ghost&&e.ghost.addClass(this.options.ghost),e.ghost.appendTo(e.helper)},resize:function(){var e=t(this).resizable("instance");e.ghost&&e.ghost.css({position:"relative",height:e.size.height,width:e.size.width})},stop:function(){var e=t(this).resizable("instance");e.ghost&&e.helper&&e.helper.get(0).removeChild(e.ghost.get(0))}}),t.ui.plugin.add("resizable","grid",{resize:function(){var e,i=t(this).resizable("instance"),s=i.options,n=i.size,o=i.originalSize,a=i.originalPosition,r=i.axis,h="number"==typeof s.grid?[s.grid,s.grid]:s.grid,l=h[0]||1,c=h[1]||1,u=Math.round((n.width-o.width)/l)*l,d=Math.round((n.height-o.height)/c)*c,p=o.width+u,f=o.height+d,m=s.maxWidth&&p>s.maxWidth,g=s.maxHeight&&f>s.maxHeight,_=s.minWidth&&s.minWidth>p,v=s.minHeight&&s.minHeight>f;s.grid=h,_&&(p+=l),v&&(f+=c),m&&(p-=l),g&&(f-=c),/^(se|s|e)$/.test(r)?(i.size.width=p,i.size.height=f):/^(ne)$/.test(r)?(i.size.width=p,i.size.height=f,i.position.top=a.top-d):/^(sw)$/.test(r)?(i.size.width=p,i.size.height=f,i.position.left=a.left-u):((0>=f-c||0>=p-l)&&(e=i._getPaddingPlusBorderDimensions(this)),f-c>0?(i.size.height=f,i.position.top=a.top-d):(f=c-e.height,i.size.height=f,i.position.top=a.top+o.height-f),p-l>0?(i.size.width=p,i.position.left=a.left-u):(p=l-e.width,i.size.width=p,i.position.left=a.left+o.width-p))}}),t.ui.resizable});/** * Copyright (c) 2007 Ariel Flesler - aflesler ○ gmail • com | https://github.com/flesler * Licensed under MIT * @author Ariel Flesler * @version 2.1.2 */ ;(function(f){"use strict";"function"===typeof define&&define.amd?define(["jquery"],f):"undefined"!==typeof module&&module.exports?module.exports=f(require("jquery")):f(jQuery)})(function($){"use strict";function n(a){return!a.nodeName||-1!==$.inArray(a.nodeName.toLowerCase(),["iframe","#document","html","body"])}function h(a){return $.isFunction(a)||$.isPlainObject(a)?a:{top:a,left:a}}var p=$.scrollTo=function(a,d,b){return $(window).scrollTo(a,d,b)};p.defaults={axis:"xy",duration:0,limit:!0};$.fn.scrollTo=function(a,d,b){"object"=== typeof d&&(b=d,d=0);"function"===typeof b&&(b={onAfter:b});"max"===a&&(a=9E9);b=$.extend({},p.defaults,b);d=d||b.duration;var u=b.queue&&1=f[g]?0:Math.min(f[g],n));!a&&1-1){targetElements.on(evt+EVENT_NAMESPACE,function elementToggle(event){$.powerTip.toggle(this,event)})}else{targetElements.on(evt+EVENT_NAMESPACE,function elementOpen(event){$.powerTip.show(this,event)})}});$.each(options.closeEvents,function(idx,evt){if($.inArray(evt,options.openEvents)<0){targetElements.on(evt+EVENT_NAMESPACE,function elementClose(event){$.powerTip.hide(this,!isMouseEvent(event))})}});targetElements.on("keydown"+EVENT_NAMESPACE,function elementKeyDown(event){if(event.keyCode===27){$.powerTip.hide(this,true)}})}return targetElements};$.fn.powerTip.defaults={fadeInTime:200,fadeOutTime:100,followMouse:false,popupId:"powerTip",popupClass:null,intentSensitivity:7,intentPollInterval:100,closeDelay:100,placement:"n",smartPlacement:false,offset:10,mouseOnToPopup:false,manual:false,openEvents:["mouseenter","focus"],closeEvents:["mouseleave","blur"]};$.fn.powerTip.smartPlacementLists={n:["n","ne","nw","s"],e:["e","ne","se","w","nw","sw","n","s","e"],s:["s","se","sw","n"],w:["w","nw","sw","e","ne","se","n","s","w"],nw:["nw","w","sw","n","s","se","nw"],ne:["ne","e","se","n","s","sw","ne"],sw:["sw","w","nw","s","n","ne","sw"],se:["se","e","ne","s","n","nw","se"],"nw-alt":["nw-alt","n","ne-alt","sw-alt","s","se-alt","w","e"],"ne-alt":["ne-alt","n","nw-alt","se-alt","s","sw-alt","e","w"],"sw-alt":["sw-alt","s","se-alt","nw-alt","n","ne-alt","w","e"],"se-alt":["se-alt","s","sw-alt","ne-alt","n","nw-alt","e","w"]};$.powerTip={show:function apiShowTip(element,event){if(isMouseEvent(event)){trackMouse(event);session.previousX=event.pageX;session.previousY=event.pageY;$(element).data(DATA_DISPLAYCONTROLLER).show()}else{$(element).first().data(DATA_DISPLAYCONTROLLER).show(true,true)}return element},reposition:function apiResetPosition(element){$(element).first().data(DATA_DISPLAYCONTROLLER).resetPosition();return element},hide:function apiCloseTip(element,immediate){var displayController;immediate=element?immediate:true;if(element){displayController=$(element).first().data(DATA_DISPLAYCONTROLLER)}else if(session.activeHover){displayController=session.activeHover.data(DATA_DISPLAYCONTROLLER)}if(displayController){displayController.hide(immediate)}return element},toggle:function apiToggle(element,event){if(session.activeHover&&session.activeHover.is(element)){$.powerTip.hide(element,!isMouseEvent(event))}else{$.powerTip.show(element,event)}return element}};$.powerTip.showTip=$.powerTip.show;$.powerTip.closeTip=$.powerTip.hide;function CSSCoordinates(){var me=this;me.top="auto";me.left="auto";me.right="auto";me.bottom="auto";me.set=function(property,value){if($.isNumeric(value)){me[property]=Math.round(value)}}}function DisplayController(element,options,tipController){var hoverTimer=null,myCloseDelay=null;function openTooltip(immediate,forceOpen){cancelTimer();if(!element.data(DATA_HASACTIVEHOVER)){if(!immediate){session.tipOpenImminent=true;hoverTimer=setTimeout(function intentDelay(){hoverTimer=null;checkForIntent()},options.intentPollInterval)}else{if(forceOpen){element.data(DATA_FORCEDOPEN,true)}closeAnyDelayed();tipController.showTip(element)}}else{cancelClose()}}function closeTooltip(disableDelay){if(myCloseDelay){myCloseDelay=session.closeDelayTimeout=clearTimeout(myCloseDelay);session.delayInProgress=false}cancelTimer();session.tipOpenImminent=false;if(element.data(DATA_HASACTIVEHOVER)){element.data(DATA_FORCEDOPEN,false);if(!disableDelay){session.delayInProgress=true;session.closeDelayTimeout=setTimeout(function closeDelay(){session.closeDelayTimeout=null;tipController.hideTip(element);session.delayInProgress=false;myCloseDelay=null},options.closeDelay);myCloseDelay=session.closeDelayTimeout}else{tipController.hideTip(element)}}}function checkForIntent(){var xDifference=Math.abs(session.previousX-session.currentX),yDifference=Math.abs(session.previousY-session.currentY),totalDifference=xDifference+yDifference;if(totalDifference",{id:options.popupId});if($body.length===0){$body=$("body")}$body.append(tipElement);session.tooltips=session.tooltips?session.tooltips.add(tipElement):tipElement}if(options.followMouse){if(!tipElement.data(DATA_HASMOUSEMOVE)){$document.on("mousemove"+EVENT_NAMESPACE,positionTipOnCursor);$window.on("scroll"+EVENT_NAMESPACE,positionTipOnCursor);tipElement.data(DATA_HASMOUSEMOVE,true)}}function beginShowTip(element){element.data(DATA_HASACTIVEHOVER,true);tipElement.queue(function queueTipInit(next){showTip(element);next()})}function showTip(element){var tipContent;if(!element.data(DATA_HASACTIVEHOVER)){return}if(session.isTipOpen){if(!session.isClosing){hideTip(session.activeHover)}tipElement.delay(100).queue(function queueTipAgain(next){showTip(element);next()});return}element.trigger("powerTipPreRender");tipContent=getTooltipContent(element);if(tipContent){tipElement.empty().append(tipContent)}else{return}element.trigger("powerTipRender");session.activeHover=element;session.isTipOpen=true;tipElement.data(DATA_MOUSEONTOTIP,options.mouseOnToPopup);tipElement.addClass(options.popupClass);if(!options.followMouse||element.data(DATA_FORCEDOPEN)){positionTipOnElement(element);session.isFixedTipOpen=true}else{positionTipOnCursor()}if(!element.data(DATA_FORCEDOPEN)&&!options.followMouse){$document.on("click"+EVENT_NAMESPACE,function documentClick(event){var target=event.target;if(target!==element[0]){if(options.mouseOnToPopup){if(target!==tipElement[0]&&!$.contains(tipElement[0],target)){$.powerTip.hide()}}else{$.powerTip.hide()}}})}if(options.mouseOnToPopup&&!options.manual){tipElement.on("mouseenter"+EVENT_NAMESPACE,function tipMouseEnter(){if(session.activeHover){session.activeHover.data(DATA_DISPLAYCONTROLLER).cancel()}});tipElement.on("mouseleave"+EVENT_NAMESPACE,function tipMouseLeave(){if(session.activeHover){session.activeHover.data(DATA_DISPLAYCONTROLLER).hide()}})}tipElement.fadeIn(options.fadeInTime,function fadeInCallback(){if(!session.desyncTimeout){session.desyncTimeout=setInterval(closeDesyncedTip,500)}element.trigger("powerTipOpen")})}function hideTip(element){session.isClosing=true;session.isTipOpen=false;session.desyncTimeout=clearInterval(session.desyncTimeout);element.data(DATA_HASACTIVEHOVER,false);element.data(DATA_FORCEDOPEN,false);$document.off("click"+EVENT_NAMESPACE);tipElement.off(EVENT_NAMESPACE);tipElement.fadeOut(options.fadeOutTime,function fadeOutCallback(){var coords=new CSSCoordinates;session.activeHover=null;session.isClosing=false;session.isFixedTipOpen=false;tipElement.removeClass();coords.set("top",session.currentY+options.offset);coords.set("left",session.currentX+options.offset);tipElement.css(coords);element.trigger("powerTipClose")})}function positionTipOnCursor(){var tipWidth,tipHeight,coords,collisions,collisionCount;if(!session.isFixedTipOpen&&(session.isTipOpen||session.tipOpenImminent&&tipElement.data(DATA_HASMOUSEMOVE))){tipWidth=tipElement.outerWidth();tipHeight=tipElement.outerHeight();coords=new CSSCoordinates;coords.set("top",session.currentY+options.offset);coords.set("left",session.currentX+options.offset);collisions=getViewportCollisions(coords,tipWidth,tipHeight);if(collisions!==Collision.none){collisionCount=countFlags(collisions);if(collisionCount===1){if(collisions===Collision.right){coords.set("left",session.scrollLeft+session.windowWidth-tipWidth)}else if(collisions===Collision.bottom){coords.set("top",session.scrollTop+session.windowHeight-tipHeight)}}else{coords.set("left",session.currentX-tipWidth-options.offset);coords.set("top",session.currentY-tipHeight-options.offset)}}tipElement.css(coords)}}function positionTipOnElement(element){var priorityList,finalPlacement;if(options.smartPlacement||options.followMouse&&element.data(DATA_FORCEDOPEN)){priorityList=$.fn.powerTip.smartPlacementLists[options.placement];$.each(priorityList,function(idx,pos){var collisions=getViewportCollisions(placeTooltip(element,pos),tipElement.outerWidth(),tipElement.outerHeight());finalPlacement=pos;return collisions!==Collision.none})}else{placeTooltip(element,options.placement);finalPlacement=options.placement}tipElement.removeClass("w nw sw e ne se n s w se-alt sw-alt ne-alt nw-alt");tipElement.addClass(finalPlacement)}function placeTooltip(element,placement){var iterationCount=0,tipWidth,tipHeight,coords=new CSSCoordinates;coords.set("top",0);coords.set("left",0);tipElement.css(coords);do{tipWidth=tipElement.outerWidth();tipHeight=tipElement.outerHeight();coords=placementCalculator.compute(element,placement,tipWidth,tipHeight,options.offset);tipElement.css(coords)}while(++iterationCount<=5&&(tipWidth!==tipElement.outerWidth()||tipHeight!==tipElement.outerHeight()));return coords}function closeDesyncedTip(){var isDesynced=false,hasDesyncableCloseEvent=$.grep(["mouseleave","mouseout","blur","focusout"],function(eventType){return $.inArray(eventType,options.closeEvents)!==-1}).length>0;if(session.isTipOpen&&!session.isClosing&&!session.delayInProgress&&hasDesyncableCloseEvent){if(session.activeHover.data(DATA_HASACTIVEHOVER)===false||session.activeHover.is(":disabled")){isDesynced=true}else if(!isMouseOver(session.activeHover)&&!session.activeHover.is(":focus")&&!session.activeHover.data(DATA_FORCEDOPEN)){if(tipElement.data(DATA_MOUSEONTOTIP)){if(!isMouseOver(tipElement)){isDesynced=true}}else{isDesynced=true}}if(isDesynced){hideTip(session.activeHover)}}}this.showTip=beginShowTip;this.hideTip=hideTip;this.resetPosition=positionTipOnElement}function isSvgElement(element){return Boolean(window.SVGElement&&element[0]instanceof SVGElement)}function isMouseEvent(event){return Boolean(event&&$.inArray(event.type,MOUSE_EVENTS)>-1&&typeof event.pageX==="number")}function initTracking(){if(!session.mouseTrackingActive){session.mouseTrackingActive=true;getViewportDimensions();$(getViewportDimensions);$document.on("mousemove"+EVENT_NAMESPACE,trackMouse);$window.on("resize"+EVENT_NAMESPACE,trackResize);$window.on("scroll"+EVENT_NAMESPACE,trackScroll)}}function getViewportDimensions(){session.scrollLeft=$window.scrollLeft();session.scrollTop=$window.scrollTop();session.windowWidth=$window.width();session.windowHeight=$window.height()}function trackResize(){session.windowWidth=$window.width();session.windowHeight=$window.height()}function trackScroll(){var x=$window.scrollLeft(),y=$window.scrollTop();if(x!==session.scrollLeft){session.currentX+=x-session.scrollLeft;session.scrollLeft=x}if(y!==session.scrollTop){session.currentY+=y-session.scrollTop;session.scrollTop=y}}function trackMouse(event){session.currentX=event.pageX;session.currentY=event.pageY}function isMouseOver(element){var elementPosition=element.offset(),elementBox=element[0].getBoundingClientRect(),elementWidth=elementBox.right-elementBox.left,elementHeight=elementBox.bottom-elementBox.top;return session.currentX>=elementPosition.left&&session.currentX<=elementPosition.left+elementWidth&&session.currentY>=elementPosition.top&&session.currentY<=elementPosition.top+elementHeight}function getTooltipContent(element){var tipText=element.data(DATA_POWERTIP),tipObject=element.data(DATA_POWERTIPJQ),tipTarget=element.data(DATA_POWERTIPTARGET),targetElement,content;if(tipText){if($.isFunction(tipText)){tipText=tipText.call(element[0])}content=tipText}else if(tipObject){if($.isFunction(tipObject)){tipObject=tipObject.call(element[0])}if(tipObject.length>0){content=tipObject.clone(true,true)}}else if(tipTarget){targetElement=$("#"+tipTarget);if(targetElement.length>0){content=targetElement.html()}}return content}function getViewportCollisions(coords,elementWidth,elementHeight){var viewportTop=session.scrollTop,viewportLeft=session.scrollLeft,viewportBottom=viewportTop+session.windowHeight,viewportRight=viewportLeft+session.windowWidth,collisions=Collision.none;if(coords.topviewportBottom||Math.abs(coords.bottom-session.windowHeight)>viewportBottom){collisions|=Collision.bottom}if(coords.leftviewportRight){collisions|=Collision.left}if(coords.left+elementWidth>viewportRight||coords.right1)){a.preventDefault();var c=a.originalEvent.changedTouches[0],d=document.createEvent("MouseEvents");d.initMouseEvent(b,!0,!0,window,1,c.screenX,c.screenY,c.clientX,c.clientY,!1,!1,!1,!1,0,null),a.target.dispatchEvent(d)}}if(a.support.touch="ontouchend"in document,a.support.touch){var e,b=a.ui.mouse.prototype,c=b._mouseInit,d=b._mouseDestroy;b._touchStart=function(a){var b=this;!e&&b._mouseCapture(a.originalEvent.changedTouches[0])&&(e=!0,b._touchMoved=!1,f(a,"mouseover"),f(a,"mousemove"),f(a,"mousedown"))},b._touchMove=function(a){e&&(this._touchMoved=!0,f(a,"mousemove"))},b._touchEnd=function(a){e&&(f(a,"mouseup"),f(a,"mouseout"),this._touchMoved||f(a,"click"),e=!1)},b._mouseInit=function(){var b=this;b.element.bind({touchstart:a.proxy(b,"_touchStart"),touchmove:a.proxy(b,"_touchMove"),touchend:a.proxy(b,"_touchEnd")}),c.call(b)},b._mouseDestroy=function(){var b=this;b.element.unbind({touchstart:a.proxy(b,"_touchStart"),touchmove:a.proxy(b,"_touchMove"),touchend:a.proxy(b,"_touchEnd")}),d.call(b)}}}(jQuery);/*! SmartMenus jQuery Plugin - v1.1.0 - September 17, 2017 * http://www.smartmenus.org/ * Copyright Vasil Dinkov, Vadikom Web Ltd. http://vadikom.com; Licensed MIT */(function(t){"function"==typeof define&&define.amd?define(["jquery"],t):"object"==typeof module&&"object"==typeof module.exports?module.exports=t(require("jquery")):t(jQuery)})(function($){function initMouseDetection(t){var e=".smartmenus_mouse";if(mouseDetectionEnabled||t)mouseDetectionEnabled&&t&&($(document).off(e),mouseDetectionEnabled=!1);else{var i=!0,s=null,o={mousemove:function(t){var e={x:t.pageX,y:t.pageY,timeStamp:(new Date).getTime()};if(s){var o=Math.abs(s.x-e.x),a=Math.abs(s.y-e.y);if((o>0||a>0)&&2>=o&&2>=a&&300>=e.timeStamp-s.timeStamp&&(mouse=!0,i)){var n=$(t.target).closest("a");n.is("a")&&$.each(menuTrees,function(){return $.contains(this.$root[0],n[0])?(this.itemEnter({currentTarget:n[0]}),!1):void 0}),i=!1}}s=e}};o[touchEvents?"touchstart":"pointerover pointermove pointerout MSPointerOver MSPointerMove MSPointerOut"]=function(t){isTouchEvent(t.originalEvent)&&(mouse=!1)},$(document).on(getEventsNS(o,e)),mouseDetectionEnabled=!0}}function isTouchEvent(t){return!/^(4|mouse)$/.test(t.pointerType)}function getEventsNS(t,e){e||(e="");var i={};for(var s in t)i[s.split(" ").join(e+" ")+e]=t[s];return i}var menuTrees=[],mouse=!1,touchEvents="ontouchstart"in window,mouseDetectionEnabled=!1,requestAnimationFrame=window.requestAnimationFrame||function(t){return setTimeout(t,1e3/60)},cancelAnimationFrame=window.cancelAnimationFrame||function(t){clearTimeout(t)},canAnimate=!!$.fn.animate;return $.SmartMenus=function(t,e){this.$root=$(t),this.opts=e,this.rootId="",this.accessIdPrefix="",this.$subArrow=null,this.activatedItems=[],this.visibleSubMenus=[],this.showTimeout=0,this.hideTimeout=0,this.scrollTimeout=0,this.clickActivated=!1,this.focusActivated=!1,this.zIndexInc=0,this.idInc=0,this.$firstLink=null,this.$firstSub=null,this.disabled=!1,this.$disableOverlay=null,this.$touchScrollingSub=null,this.cssTransforms3d="perspective"in t.style||"webkitPerspective"in t.style,this.wasCollapsible=!1,this.init()},$.extend($.SmartMenus,{hideAll:function(){$.each(menuTrees,function(){this.menuHideAll()})},destroy:function(){for(;menuTrees.length;)menuTrees[0].destroy();initMouseDetection(!0)},prototype:{init:function(t){var e=this;if(!t){menuTrees.push(this),this.rootId=((new Date).getTime()+Math.random()+"").replace(/\D/g,""),this.accessIdPrefix="sm-"+this.rootId+"-",this.$root.hasClass("sm-rtl")&&(this.opts.rightToLeftSubMenus=!0);var i=".smartmenus";this.$root.data("smartmenus",this).attr("data-smartmenus-id",this.rootId).dataSM("level",1).on(getEventsNS({"mouseover focusin":$.proxy(this.rootOver,this),"mouseout focusout":$.proxy(this.rootOut,this),keydown:$.proxy(this.rootKeyDown,this)},i)).on(getEventsNS({mouseenter:$.proxy(this.itemEnter,this),mouseleave:$.proxy(this.itemLeave,this),mousedown:$.proxy(this.itemDown,this),focus:$.proxy(this.itemFocus,this),blur:$.proxy(this.itemBlur,this),click:$.proxy(this.itemClick,this)},i),"a"),i+=this.rootId,this.opts.hideOnClick&&$(document).on(getEventsNS({touchstart:$.proxy(this.docTouchStart,this),touchmove:$.proxy(this.docTouchMove,this),touchend:$.proxy(this.docTouchEnd,this),click:$.proxy(this.docClick,this)},i)),$(window).on(getEventsNS({"resize orientationchange":$.proxy(this.winResize,this)},i)),this.opts.subIndicators&&(this.$subArrow=$("").addClass("sub-arrow"),this.opts.subIndicatorsText&&this.$subArrow.html(this.opts.subIndicatorsText)),initMouseDetection()}if(this.$firstSub=this.$root.find("ul").each(function(){e.menuInit($(this))}).eq(0),this.$firstLink=this.$root.find("a").eq(0),this.opts.markCurrentItem){var s=/(index|default)\.[^#\?\/]*/i,o=/#.*/,a=window.location.href.replace(s,""),n=a.replace(o,"");this.$root.find("a").each(function(){var t=this.href.replace(s,""),i=$(this);(t==a||t==n)&&(i.addClass("current"),e.opts.markCurrentTree&&i.parentsUntil("[data-smartmenus-id]","ul").each(function(){$(this).dataSM("parent-a").addClass("current")}))})}this.wasCollapsible=this.isCollapsible()},destroy:function(t){if(!t){var e=".smartmenus";this.$root.removeData("smartmenus").removeAttr("data-smartmenus-id").removeDataSM("level").off(e),e+=this.rootId,$(document).off(e),$(window).off(e),this.opts.subIndicators&&(this.$subArrow=null)}this.menuHideAll();var i=this;this.$root.find("ul").each(function(){var t=$(this);t.dataSM("scroll-arrows")&&t.dataSM("scroll-arrows").remove(),t.dataSM("shown-before")&&((i.opts.subMenusMinWidth||i.opts.subMenusMaxWidth)&&t.css({width:"",minWidth:"",maxWidth:""}).removeClass("sm-nowrap"),t.dataSM("scroll-arrows")&&t.dataSM("scroll-arrows").remove(),t.css({zIndex:"",top:"",left:"",marginLeft:"",marginTop:"",display:""})),0==(t.attr("id")||"").indexOf(i.accessIdPrefix)&&t.removeAttr("id")}).removeDataSM("in-mega").removeDataSM("shown-before").removeDataSM("scroll-arrows").removeDataSM("parent-a").removeDataSM("level").removeDataSM("beforefirstshowfired").removeAttr("role").removeAttr("aria-hidden").removeAttr("aria-labelledby").removeAttr("aria-expanded"),this.$root.find("a.has-submenu").each(function(){var t=$(this);0==t.attr("id").indexOf(i.accessIdPrefix)&&t.removeAttr("id")}).removeClass("has-submenu").removeDataSM("sub").removeAttr("aria-haspopup").removeAttr("aria-controls").removeAttr("aria-expanded").closest("li").removeDataSM("sub"),this.opts.subIndicators&&this.$root.find("span.sub-arrow").remove(),this.opts.markCurrentItem&&this.$root.find("a.current").removeClass("current"),t||(this.$root=null,this.$firstLink=null,this.$firstSub=null,this.$disableOverlay&&(this.$disableOverlay.remove(),this.$disableOverlay=null),menuTrees.splice($.inArray(this,menuTrees),1))},disable:function(t){if(!this.disabled){if(this.menuHideAll(),!t&&!this.opts.isPopup&&this.$root.is(":visible")){var e=this.$root.offset();this.$disableOverlay=$('
').css({position:"absolute",top:e.top,left:e.left,width:this.$root.outerWidth(),height:this.$root.outerHeight(),zIndex:this.getStartZIndex(!0),opacity:0}).appendTo(document.body)}this.disabled=!0}},docClick:function(t){return this.$touchScrollingSub?(this.$touchScrollingSub=null,void 0):((this.visibleSubMenus.length&&!$.contains(this.$root[0],t.target)||$(t.target).closest("a").length)&&this.menuHideAll(),void 0)},docTouchEnd:function(){if(this.lastTouch){if(!(!this.visibleSubMenus.length||void 0!==this.lastTouch.x2&&this.lastTouch.x1!=this.lastTouch.x2||void 0!==this.lastTouch.y2&&this.lastTouch.y1!=this.lastTouch.y2||this.lastTouch.target&&$.contains(this.$root[0],this.lastTouch.target))){this.hideTimeout&&(clearTimeout(this.hideTimeout),this.hideTimeout=0);var t=this;this.hideTimeout=setTimeout(function(){t.menuHideAll()},350)}this.lastTouch=null}},docTouchMove:function(t){if(this.lastTouch){var e=t.originalEvent.touches[0];this.lastTouch.x2=e.pageX,this.lastTouch.y2=e.pageY}},docTouchStart:function(t){var e=t.originalEvent.touches[0];this.lastTouch={x1:e.pageX,y1:e.pageY,target:e.target}},enable:function(){this.disabled&&(this.$disableOverlay&&(this.$disableOverlay.remove(),this.$disableOverlay=null),this.disabled=!1)},getClosestMenu:function(t){for(var e=$(t).closest("ul");e.dataSM("in-mega");)e=e.parent().closest("ul");return e[0]||null},getHeight:function(t){return this.getOffset(t,!0)},getOffset:function(t,e){var i;"none"==t.css("display")&&(i={position:t[0].style.position,visibility:t[0].style.visibility},t.css({position:"absolute",visibility:"hidden"}).show());var s=t[0].getBoundingClientRect&&t[0].getBoundingClientRect(),o=s&&(e?s.height||s.bottom-s.top:s.width||s.right-s.left);return o||0===o||(o=e?t[0].offsetHeight:t[0].offsetWidth),i&&t.hide().css(i),o},getStartZIndex:function(t){var e=parseInt(this[t?"$root":"$firstSub"].css("z-index"));return!t&&isNaN(e)&&(e=parseInt(this.$root.css("z-index"))),isNaN(e)?1:e},getTouchPoint:function(t){return t.touches&&t.touches[0]||t.changedTouches&&t.changedTouches[0]||t},getViewport:function(t){var e=t?"Height":"Width",i=document.documentElement["client"+e],s=window["inner"+e];return s&&(i=Math.min(i,s)),i},getViewportHeight:function(){return this.getViewport(!0)},getViewportWidth:function(){return this.getViewport()},getWidth:function(t){return this.getOffset(t)},handleEvents:function(){return!this.disabled&&this.isCSSOn()},handleItemEvents:function(t){return this.handleEvents()&&!this.isLinkInMegaMenu(t)},isCollapsible:function(){return"static"==this.$firstSub.css("position")},isCSSOn:function(){return"inline"!=this.$firstLink.css("display")},isFixed:function(){var t="fixed"==this.$root.css("position");return t||this.$root.parentsUntil("body").each(function(){return"fixed"==$(this).css("position")?(t=!0,!1):void 0}),t},isLinkInMegaMenu:function(t){return $(this.getClosestMenu(t[0])).hasClass("mega-menu")},isTouchMode:function(){return!mouse||this.opts.noMouseOver||this.isCollapsible()},itemActivate:function(t,e){var i=t.closest("ul"),s=i.dataSM("level");if(s>1&&(!this.activatedItems[s-2]||this.activatedItems[s-2][0]!=i.dataSM("parent-a")[0])){var o=this;$(i.parentsUntil("[data-smartmenus-id]","ul").get().reverse()).add(i).each(function(){o.itemActivate($(this).dataSM("parent-a"))})}if((!this.isCollapsible()||e)&&this.menuHideSubMenus(this.activatedItems[s-1]&&this.activatedItems[s-1][0]==t[0]?s:s-1),this.activatedItems[s-1]=t,this.$root.triggerHandler("activate.smapi",t[0])!==!1){var a=t.dataSM("sub");a&&(this.isTouchMode()||!this.opts.showOnClick||this.clickActivated)&&this.menuShow(a)}},itemBlur:function(t){var e=$(t.currentTarget);this.handleItemEvents(e)&&this.$root.triggerHandler("blur.smapi",e[0])},itemClick:function(t){var e=$(t.currentTarget);if(this.handleItemEvents(e)){if(this.$touchScrollingSub&&this.$touchScrollingSub[0]==e.closest("ul")[0])return this.$touchScrollingSub=null,t.stopPropagation(),!1;if(this.$root.triggerHandler("click.smapi",e[0])===!1)return!1;var i=$(t.target).is(".sub-arrow"),s=e.dataSM("sub"),o=s?2==s.dataSM("level"):!1,a=this.isCollapsible(),n=/toggle$/.test(this.opts.collapsibleBehavior),r=/link$/.test(this.opts.collapsibleBehavior),h=/^accordion/.test(this.opts.collapsibleBehavior);if(s&&!s.is(":visible")){if((!r||!a||i)&&(this.opts.showOnClick&&o&&(this.clickActivated=!0),this.itemActivate(e,h),s.is(":visible")))return this.focusActivated=!0,!1}else if(a&&(n||i))return this.itemActivate(e,h),this.menuHide(s),n&&(this.focusActivated=!1),!1;return this.opts.showOnClick&&o||e.hasClass("disabled")||this.$root.triggerHandler("select.smapi",e[0])===!1?!1:void 0}},itemDown:function(t){var e=$(t.currentTarget);this.handleItemEvents(e)&&e.dataSM("mousedown",!0)},itemEnter:function(t){var e=$(t.currentTarget);if(this.handleItemEvents(e)){if(!this.isTouchMode()){this.showTimeout&&(clearTimeout(this.showTimeout),this.showTimeout=0);var i=this;this.showTimeout=setTimeout(function(){i.itemActivate(e)},this.opts.showOnClick&&1==e.closest("ul").dataSM("level")?1:this.opts.showTimeout)}this.$root.triggerHandler("mouseenter.smapi",e[0])}},itemFocus:function(t){var e=$(t.currentTarget);this.handleItemEvents(e)&&(!this.focusActivated||this.isTouchMode()&&e.dataSM("mousedown")||this.activatedItems.length&&this.activatedItems[this.activatedItems.length-1][0]==e[0]||this.itemActivate(e,!0),this.$root.triggerHandler("focus.smapi",e[0]))},itemLeave:function(t){var e=$(t.currentTarget);this.handleItemEvents(e)&&(this.isTouchMode()||(e[0].blur(),this.showTimeout&&(clearTimeout(this.showTimeout),this.showTimeout=0)),e.removeDataSM("mousedown"),this.$root.triggerHandler("mouseleave.smapi",e[0]))},menuHide:function(t){if(this.$root.triggerHandler("beforehide.smapi",t[0])!==!1&&(canAnimate&&t.stop(!0,!0),"none"!=t.css("display"))){var e=function(){t.css("z-index","")};this.isCollapsible()?canAnimate&&this.opts.collapsibleHideFunction?this.opts.collapsibleHideFunction.call(this,t,e):t.hide(this.opts.collapsibleHideDuration,e):canAnimate&&this.opts.hideFunction?this.opts.hideFunction.call(this,t,e):t.hide(this.opts.hideDuration,e),t.dataSM("scroll")&&(this.menuScrollStop(t),t.css({"touch-action":"","-ms-touch-action":"","-webkit-transform":"",transform:""}).off(".smartmenus_scroll").removeDataSM("scroll").dataSM("scroll-arrows").hide()),t.dataSM("parent-a").removeClass("highlighted").attr("aria-expanded","false"),t.attr({"aria-expanded":"false","aria-hidden":"true"});var i=t.dataSM("level");this.activatedItems.splice(i-1,1),this.visibleSubMenus.splice($.inArray(t,this.visibleSubMenus),1),this.$root.triggerHandler("hide.smapi",t[0])}},menuHideAll:function(){this.showTimeout&&(clearTimeout(this.showTimeout),this.showTimeout=0);for(var t=this.opts.isPopup?1:0,e=this.visibleSubMenus.length-1;e>=t;e--)this.menuHide(this.visibleSubMenus[e]);this.opts.isPopup&&(canAnimate&&this.$root.stop(!0,!0),this.$root.is(":visible")&&(canAnimate&&this.opts.hideFunction?this.opts.hideFunction.call(this,this.$root):this.$root.hide(this.opts.hideDuration))),this.activatedItems=[],this.visibleSubMenus=[],this.clickActivated=!1,this.focusActivated=!1,this.zIndexInc=0,this.$root.triggerHandler("hideAll.smapi")},menuHideSubMenus:function(t){for(var e=this.activatedItems.length-1;e>=t;e--){var i=this.activatedItems[e].dataSM("sub");i&&this.menuHide(i)}},menuInit:function(t){if(!t.dataSM("in-mega")){t.hasClass("mega-menu")&&t.find("ul").dataSM("in-mega",!0);for(var e=2,i=t[0];(i=i.parentNode.parentNode)!=this.$root[0];)e++;var s=t.prevAll("a").eq(-1);s.length||(s=t.prevAll().find("a").eq(-1)),s.addClass("has-submenu").dataSM("sub",t),t.dataSM("parent-a",s).dataSM("level",e).parent().dataSM("sub",t);var o=s.attr("id")||this.accessIdPrefix+ ++this.idInc,a=t.attr("id")||this.accessIdPrefix+ ++this.idInc;s.attr({id:o,"aria-haspopup":"true","aria-controls":a,"aria-expanded":"false"}),t.attr({id:a,role:"group","aria-hidden":"true","aria-labelledby":o,"aria-expanded":"false"}),this.opts.subIndicators&&s[this.opts.subIndicatorsPos](this.$subArrow.clone())}},menuPosition:function(t){var e,i,s=t.dataSM("parent-a"),o=s.closest("li"),a=o.parent(),n=t.dataSM("level"),r=this.getWidth(t),h=this.getHeight(t),u=s.offset(),l=u.left,c=u.top,d=this.getWidth(s),m=this.getHeight(s),p=$(window),f=p.scrollLeft(),v=p.scrollTop(),b=this.getViewportWidth(),S=this.getViewportHeight(),g=a.parent().is("[data-sm-horizontal-sub]")||2==n&&!a.hasClass("sm-vertical"),M=this.opts.rightToLeftSubMenus&&!o.is("[data-sm-reverse]")||!this.opts.rightToLeftSubMenus&&o.is("[data-sm-reverse]"),w=2==n?this.opts.mainMenuSubOffsetX:this.opts.subMenusSubOffsetX,T=2==n?this.opts.mainMenuSubOffsetY:this.opts.subMenusSubOffsetY;if(g?(e=M?d-r-w:w,i=this.opts.bottomToTopSubMenus?-h-T:m+T):(e=M?w-r:d-w,i=this.opts.bottomToTopSubMenus?m-T-h:T),this.opts.keepInViewport){var y=l+e,I=c+i;if(M&&f>y?e=g?f-y+e:d-w:!M&&y+r>f+b&&(e=g?f+b-r-y+e:w-r),g||(S>h&&I+h>v+S?i+=v+S-h-I:(h>=S||v>I)&&(i+=v-I)),g&&(I+h>v+S+.49||v>I)||!g&&h>S+.49){var x=this;t.dataSM("scroll-arrows")||t.dataSM("scroll-arrows",$([$('')[0],$('')[0]]).on({mouseenter:function(){t.dataSM("scroll").up=$(this).hasClass("scroll-up"),x.menuScroll(t)},mouseleave:function(e){x.menuScrollStop(t),x.menuScrollOut(t,e)},"mousewheel DOMMouseScroll":function(t){t.preventDefault()}}).insertAfter(t));var A=".smartmenus_scroll";if(t.dataSM("scroll",{y:this.cssTransforms3d?0:i-m,step:1,itemH:m,subH:h,arrowDownH:this.getHeight(t.dataSM("scroll-arrows").eq(1))}).on(getEventsNS({mouseover:function(e){x.menuScrollOver(t,e)},mouseout:function(e){x.menuScrollOut(t,e)},"mousewheel DOMMouseScroll":function(e){x.menuScrollMousewheel(t,e)}},A)).dataSM("scroll-arrows").css({top:"auto",left:"0",marginLeft:e+(parseInt(t.css("border-left-width"))||0),width:r-(parseInt(t.css("border-left-width"))||0)-(parseInt(t.css("border-right-width"))||0),zIndex:t.css("z-index")}).eq(g&&this.opts.bottomToTopSubMenus?0:1).show(),this.isFixed()){var C={};C[touchEvents?"touchstart touchmove touchend":"pointerdown pointermove pointerup MSPointerDown MSPointerMove MSPointerUp"]=function(e){x.menuScrollTouch(t,e)},t.css({"touch-action":"none","-ms-touch-action":"none"}).on(getEventsNS(C,A))}}}t.css({top:"auto",left:"0",marginLeft:e,marginTop:i-m})},menuScroll:function(t,e,i){var s,o=t.dataSM("scroll"),a=t.dataSM("scroll-arrows"),n=o.up?o.upEnd:o.downEnd;if(!e&&o.momentum){if(o.momentum*=.92,s=o.momentum,.5>s)return this.menuScrollStop(t),void 0}else s=i||(e||!this.opts.scrollAccelerate?this.opts.scrollStep:Math.floor(o.step));var r=t.dataSM("level");if(this.activatedItems[r-1]&&this.activatedItems[r-1].dataSM("sub")&&this.activatedItems[r-1].dataSM("sub").is(":visible")&&this.menuHideSubMenus(r-1),o.y=o.up&&o.y>=n||!o.up&&n>=o.y?o.y:Math.abs(n-o.y)>s?o.y+(o.up?s:-s):n,t.css(this.cssTransforms3d?{"-webkit-transform":"translate3d(0, "+o.y+"px, 0)",transform:"translate3d(0, "+o.y+"px, 0)"}:{marginTop:o.y}),mouse&&(o.up&&o.y>o.downEnd||!o.up&&o.y0;t.dataSM("scroll-arrows").eq(i?0:1).is(":visible")&&(t.dataSM("scroll").up=i,this.menuScroll(t,!0))}e.preventDefault()},menuScrollOut:function(t,e){mouse&&(/^scroll-(up|down)/.test((e.relatedTarget||"").className)||(t[0]==e.relatedTarget||$.contains(t[0],e.relatedTarget))&&this.getClosestMenu(e.relatedTarget)==t[0]||t.dataSM("scroll-arrows").css("visibility","hidden"))},menuScrollOver:function(t,e){if(mouse&&!/^scroll-(up|down)/.test(e.target.className)&&this.getClosestMenu(e.target)==t[0]){this.menuScrollRefreshData(t);var i=t.dataSM("scroll"),s=$(window).scrollTop()-t.dataSM("parent-a").offset().top-i.itemH;t.dataSM("scroll-arrows").eq(0).css("margin-top",s).end().eq(1).css("margin-top",s+this.getViewportHeight()-i.arrowDownH).end().css("visibility","visible")}},menuScrollRefreshData:function(t){var e=t.dataSM("scroll"),i=$(window).scrollTop()-t.dataSM("parent-a").offset().top-e.itemH;this.cssTransforms3d&&(i=-(parseFloat(t.css("margin-top"))-i)),$.extend(e,{upEnd:i,downEnd:i+this.getViewportHeight()-e.subH})},menuScrollStop:function(t){return this.scrollTimeout?(cancelAnimationFrame(this.scrollTimeout),this.scrollTimeout=0,t.dataSM("scroll").step=1,!0):void 0},menuScrollTouch:function(t,e){if(e=e.originalEvent,isTouchEvent(e)){var i=this.getTouchPoint(e);if(this.getClosestMenu(i.target)==t[0]){var s=t.dataSM("scroll");if(/(start|down)$/i.test(e.type))this.menuScrollStop(t)?(e.preventDefault(),this.$touchScrollingSub=t):this.$touchScrollingSub=null,this.menuScrollRefreshData(t),$.extend(s,{touchStartY:i.pageY,touchStartTime:e.timeStamp});else if(/move$/i.test(e.type)){var o=void 0!==s.touchY?s.touchY:s.touchStartY;if(void 0!==o&&o!=i.pageY){this.$touchScrollingSub=t;var a=i.pageY>o;void 0!==s.up&&s.up!=a&&$.extend(s,{touchStartY:i.pageY,touchStartTime:e.timeStamp}),$.extend(s,{up:a,touchY:i.pageY}),this.menuScroll(t,!0,Math.abs(i.pageY-o))}e.preventDefault()}else void 0!==s.touchY&&((s.momentum=15*Math.pow(Math.abs(i.pageY-s.touchStartY)/(e.timeStamp-s.touchStartTime),2))&&(this.menuScrollStop(t),this.menuScroll(t),e.preventDefault()),delete s.touchY)}}},menuShow:function(t){if((t.dataSM("beforefirstshowfired")||(t.dataSM("beforefirstshowfired",!0),this.$root.triggerHandler("beforefirstshow.smapi",t[0])!==!1))&&this.$root.triggerHandler("beforeshow.smapi",t[0])!==!1&&(t.dataSM("shown-before",!0),canAnimate&&t.stop(!0,!0),!t.is(":visible"))){var e=t.dataSM("parent-a"),i=this.isCollapsible();if((this.opts.keepHighlighted||i)&&e.addClass("highlighted"),i)t.removeClass("sm-nowrap").css({zIndex:"",width:"auto",minWidth:"",maxWidth:"",top:"",left:"",marginLeft:"",marginTop:""});else{if(t.css("z-index",this.zIndexInc=(this.zIndexInc||this.getStartZIndex())+1),(this.opts.subMenusMinWidth||this.opts.subMenusMaxWidth)&&(t.css({width:"auto",minWidth:"",maxWidth:""}).addClass("sm-nowrap"),this.opts.subMenusMinWidth&&t.css("min-width",this.opts.subMenusMinWidth),this.opts.subMenusMaxWidth)){var s=this.getWidth(t);t.css("max-width",this.opts.subMenusMaxWidth),s>this.getWidth(t)&&t.removeClass("sm-nowrap").css("width",this.opts.subMenusMaxWidth)}this.menuPosition(t)}var o=function(){t.css("overflow","")};i?canAnimate&&this.opts.collapsibleShowFunction?this.opts.collapsibleShowFunction.call(this,t,o):t.show(this.opts.collapsibleShowDuration,o):canAnimate&&this.opts.showFunction?this.opts.showFunction.call(this,t,o):t.show(this.opts.showDuration,o),e.attr("aria-expanded","true"),t.attr({"aria-expanded":"true","aria-hidden":"false"}),this.visibleSubMenus.push(t),this.$root.triggerHandler("show.smapi",t[0])}},popupHide:function(t){this.hideTimeout&&(clearTimeout(this.hideTimeout),this.hideTimeout=0);var e=this;this.hideTimeout=setTimeout(function(){e.menuHideAll()},t?1:this.opts.hideTimeout)},popupShow:function(t,e){if(!this.opts.isPopup)return alert('SmartMenus jQuery Error:\n\nIf you want to show this menu via the "popupShow" method, set the isPopup:true option.'),void 0;if(this.hideTimeout&&(clearTimeout(this.hideTimeout),this.hideTimeout=0),this.$root.dataSM("shown-before",!0),canAnimate&&this.$root.stop(!0,!0),!this.$root.is(":visible")){this.$root.css({left:t,top:e});var i=this,s=function(){i.$root.css("overflow","")};canAnimate&&this.opts.showFunction?this.opts.showFunction.call(this,this.$root,s):this.$root.show(this.opts.showDuration,s),this.visibleSubMenus[0]=this.$root}},refresh:function(){this.destroy(!0),this.init(!0)},rootKeyDown:function(t){if(this.handleEvents())switch(t.keyCode){case 27:var e=this.activatedItems[0];if(e){this.menuHideAll(),e[0].focus();var i=e.dataSM("sub");i&&this.menuHide(i)}break;case 32:var s=$(t.target);if(s.is("a")&&this.handleItemEvents(s)){var i=s.dataSM("sub");i&&!i.is(":visible")&&(this.itemClick({currentTarget:t.target}),t.preventDefault())}}},rootOut:function(t){if(this.handleEvents()&&!this.isTouchMode()&&t.target!=this.$root[0]&&(this.hideTimeout&&(clearTimeout(this.hideTimeout),this.hideTimeout=0),!this.opts.showOnClick||!this.opts.hideOnClick)){var e=this;this.hideTimeout=setTimeout(function(){e.menuHideAll()},this.opts.hideTimeout)}},rootOver:function(t){this.handleEvents()&&!this.isTouchMode()&&t.target!=this.$root[0]&&this.hideTimeout&&(clearTimeout(this.hideTimeout),this.hideTimeout=0)},winResize:function(t){if(this.handleEvents()){if(!("onorientationchange"in window)||"orientationchange"==t.type){var e=this.isCollapsible();this.wasCollapsible&&e||(this.activatedItems.length&&this.activatedItems[this.activatedItems.length-1][0].blur(),this.menuHideAll()),this.wasCollapsible=e}}else if(this.$disableOverlay){var i=this.$root.offset();this.$disableOverlay.css({top:i.top,left:i.left,width:this.$root.outerWidth(),height:this.$root.outerHeight()})}}}}),$.fn.dataSM=function(t,e){return e?this.data(t+"_smartmenus",e):this.data(t+"_smartmenus")},$.fn.removeDataSM=function(t){return this.removeData(t+"_smartmenus")},$.fn.smartmenus=function(options){if("string"==typeof options){var args=arguments,method=options;return Array.prototype.shift.call(args),this.each(function(){var t=$(this).data("smartmenus");t&&t[method]&&t[method].apply(t,args)})}return this.each(function(){var dataOpts=$(this).data("sm-options")||null;if(dataOpts)try{dataOpts=eval("("+dataOpts+")")}catch(e){dataOpts=null,alert('ERROR\n\nSmartMenus jQuery init:\nInvalid "data-sm-options" attribute value syntax.')}new $.SmartMenus(this,$.extend({},$.fn.smartmenus.defaults,options,dataOpts))})},$.fn.smartmenus.defaults={isPopup:!1,mainMenuSubOffsetX:0,mainMenuSubOffsetY:0,subMenusSubOffsetX:0,subMenusSubOffsetY:0,subMenusMinWidth:"10em",subMenusMaxWidth:"20em",subIndicators:!0,subIndicatorsPos:"append",subIndicatorsText:"",scrollStep:30,scrollAccelerate:!0,showTimeout:250,hideTimeout:500,showDuration:0,showFunction:null,hideDuration:0,hideFunction:function(t,e){t.fadeOut(200,e)},collapsibleShowDuration:0,collapsibleShowFunction:function(t,e){t.slideDown(200,e)},collapsibleHideDuration:0,collapsibleHideFunction:function(t,e){t.slideUp(200,e)},showOnClick:!1,hideOnClick:!0,noMouseOver:!1,keepInViewport:!0,keepHighlighted:!0,markCurrentItem:!1,markCurrentTree:!0,rightToLeftSubMenus:!1,bottomToTopSubMenus:!1,collapsibleBehavior:"default"},$});libapreq2-2.17/docs/html/menu.js0000644000175000017500000000622614277402434016147 0ustar jortonjorton/* @licstart The following is the entire license notice for the JavaScript code in this file. The MIT License (MIT) Copyright (C) 1997-2020 by Dimitri van Heesch 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 AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. @licend The above is the entire license notice for the JavaScript code in this file */ function initMenu(relPath,searchEnabled,serverSide,searchPage,search) { function makeTree(data,relPath) { var result=''; if ('children' in data) { result+=''; } return result; } $('#main-nav').append(makeTree(menudata,relPath)); $('#main-nav').children(':first').addClass('sm sm-dox').attr('id','main-menu'); if (searchEnabled) { if (serverSide) { $('#main-menu').append('
  • '); } else { $('#main-menu').append('
  • '); } } $('#main-menu').smartmenus(); } /* @license-end */ libapreq2-2.17/docs/html/menudata.js0000644000175000017500000000677714277402434017014 0ustar jortonjorton/* @licstart The following is the entire license notice for the JavaScript code in this file. The MIT License (MIT) Copyright (C) 1997-2020 by Dimitri van Heesch 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 AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. @licend The above is the entire license notice for the JavaScript code in this file */ var menudata={children:[ {text:"Main Page",url:"index.html"}, {text:"Related Pages",url:"pages.html"}, {text:"Modules",url:"modules.html"}, {text:"Data Structures",url:"annotated.html",children:[ {text:"Data Structures",url:"annotated.html"}, {text:"Data Fields",url:"functions.html",children:[ {text:"All",url:"functions.html",children:[ {text:"a",url:"functions.html#index_a"}, {text:"b",url:"functions.html#index_b"}, {text:"c",url:"functions.html#index_c"}, {text:"d",url:"functions.html#index_d"}, {text:"f",url:"functions.html#index_f"}, {text:"h",url:"functions.html#index_h"}, {text:"i",url:"functions.html#index_i"}, {text:"j",url:"functions.html#index_j"}, {text:"m",url:"functions.html#index_m"}, {text:"n",url:"functions.html#index_n"}, {text:"p",url:"functions.html#index_p"}, {text:"r",url:"functions.html#index_r"}, {text:"t",url:"functions.html#index_t"}, {text:"u",url:"functions.html#index_u"}, {text:"v",url:"functions.html#index_v"}]}, {text:"Variables",url:"functions_vars.html",children:[ {text:"a",url:"functions_vars.html#index_a"}, {text:"b",url:"functions_vars.html#index_b"}, {text:"c",url:"functions_vars.html#index_c"}, {text:"d",url:"functions_vars.html#index_d"}, {text:"f",url:"functions_vars.html#index_f"}, {text:"h",url:"functions_vars.html#index_h"}, {text:"i",url:"functions_vars.html#index_i"}, {text:"j",url:"functions_vars.html#index_j"}, {text:"m",url:"functions_vars.html#index_m"}, {text:"n",url:"functions_vars.html#index_n"}, {text:"p",url:"functions_vars.html#index_p"}, {text:"r",url:"functions_vars.html#index_r"}, {text:"t",url:"functions_vars.html#index_t"}, {text:"u",url:"functions_vars.html#index_u"}, {text:"v",url:"functions_vars.html#index_v"}]}]}]}, {text:"Files",url:"files.html",children:[ {text:"File List",url:"files.html"}, {text:"Globals",url:"globals.html",children:[ {text:"All",url:"globals.html",children:[ {text:"a",url:"globals.html#index_a"}]}, {text:"Functions",url:"globals_func.html",children:[ {text:"a",url:"globals_func.html#index_a"}]}, {text:"Typedefs",url:"globals_type.html"}, {text:"Enumerations",url:"globals_enum.html"}, {text:"Enumerator",url:"globals_eval.html"}, {text:"Macros",url:"globals_defs.html",children:[ {text:"a",url:"globals_defs.html#index_a"}]}]}]}, {text:"Examples",url:"examples.html"}]} libapreq2-2.17/docs/html/modules.html0000644000175000017500000001234014277402434017175 0ustar jortonjorton libapreq2-2.17: Modules
    Modules
    Here is a list of all modules:
    [detail level 123]
     Apache Request LibraryLibapreq2 Version 2.8.1
     ModulesApreq2 modules included in libapreq2-2.17
     Apache 2.X Filter ModuleMod_apreq2 - DSO that ties libapreq2 to Apache HTTPD 2.X
     Language BindingsLibapreq2 APIs for programming languages other than C
     PerlXS Modules
     Apache2::Request
     Apache2::Upload
     Apache2::Cookie
     APR::Request
     APR::Request::Cookie
     APR::Request::Param
     APR::Request::Error
     APR::Request::CGI
     APR::Request::Apache2
    libapreq2-2.17/docs/html/nav_f.png0000644000175000017500000000023114277402434016432 0ustar jortonjorton‰PNG  IHDR8³»`IDATxíÝK€ EÑ–·[†øBÑmkâÄÂH—prÓ¼.‚Žó‚ꎤR6Z VI±E‚5j³„lóš›iI˜¬ÞêçJ0ŒÑÑ/Žû›™uøñóÞ¿6sH ÝõyIEND®B`‚libapreq2-2.17/docs/html/nav_g.png0000644000175000017500000000013714277402434016440 0ustar jortonjorton‰PNG  IHDRô1&IDATxíÝ1 ÁOHf„á_ ->~¸åM iËMèÀƒS½ü‚<IEND®B`‚libapreq2-2.17/docs/html/nav_h.png0000644000175000017500000000014214277402434016435 0ustar jortonjorton‰PNG  IHDR ,é@)IDATxíÝA @BQ­³šÛ›Ð¢Žáà) )ëý éaÅèÜ¿Æo‡RlÐßIEND®B`‚libapreq2-2.17/docs/html/open.png0000644000175000017500000000017314277402434016307 0ustar jortonjorton‰PNG  IHDR à‘BIDATxíÝÁ €0 Ð׬ՙ\Àº€39—b!©9{|ðI>$#Àß´ý8/¨ÄØzƒ/Ï>2À[ÎgiU,/¬~¼Ï\ Ä9Ù¸IEND®B`‚libapreq2-2.17/docs/html/pages.html0000644000175000017500000000504414277402434016627 0ustar jortonjorton libapreq2-2.17: Related Pages
    Related Pages
    Here is a list of all related documentation pages:
    libapreq2-2.17/docs/html/splitbar.png0000644000175000017500000000047214277402434017170 0ustar jortonjorton‰PNG  IHDRM¸¿IDATxíÝ¡JCa‡ñç(˜ ëƒ%±Ø4 b±È˜Í¶3˜v^Á±˜…ãó–ŽELƒõ…¥•³ ,ÿb;íç{Ã/¼ðÞÀaYÕ¯åóøq:¼º¹›\òIIIIIIIIIIIIIIIIII-Òçl¹›«õ抢è_t/Ï»ã£ÑíYQVõðêäíã÷´×ùY¬Úÿµ§¦ivók¾_íåýÛ£I@$I@$I@$I@$I@$I@$I@$I@$I@$I@$I@$I@$I@$I@$I@$I@$I@$I@$ýC[Vì=ü[„fÆIEND®B`‚libapreq2-2.17/docs/html/structapreq__cookie__t.html0000644000175000017500000002142614277402434022261 0ustar jortonjorton libapreq2-2.17: apreq_cookie_t Struct Reference
    apreq_cookie_t Struct Reference

    Cookie type, supporting both Netscape and RFC cookie specifications. More...

    #include <apreq_cookie.h>

    Data Fields

    char * path
     
    char * domain
     
    char * port
     
    char * comment
     
    char * commentURL
     
    apr_time_t max_age
     
    unsigned flags
     
    const apreq_value_t v
     

    Detailed Description

    Cookie type, supporting both Netscape and RFC cookie specifications.

    Field Documentation

    ◆ comment

    char* apreq_cookie_t::comment

    RFC cookies may send a comment

    ◆ commentURL

    char* apreq_cookie_t::commentURL

    RFC cookies may place an URL here

    ◆ domain

    char* apreq_cookie_t::domain

    Restricts server domain

    ◆ flags

    unsigned apreq_cookie_t::flags

    charsets, taint marks, app-specific bits

    ◆ max_age

    apr_time_t apreq_cookie_t::max_age

    total duration of cookie: -1 == session

    ◆ path

    char* apreq_cookie_t::path

    Restricts url path

    ◆ port

    char* apreq_cookie_t::port

    Restricts server port

    ◆ v

    const apreq_value_t apreq_cookie_t::v

    "raw" cookie value


    The documentation for this struct was generated from the following file:
    libapreq2-2.17/docs/html/structapreq__handle__t.html0000644000175000017500000001162214277402434022240 0ustar jortonjorton libapreq2-2.17: apreq_handle_t Struct Reference
    apreq_handle_t Struct Reference

    #include <apreq_module.h>

    Data Fields

    const struct apreq_module_tmodule
     
    apr_pool_t * pool
     
    apr_bucket_alloc_t * bucket_alloc
     

    Detailed Description

    An apreq handle associated with a module. The structure may have variable size, because the module may append its own data structures after it.

    Field Documentation

    ◆ bucket_alloc

    apr_bucket_alloc_t* apreq_handle_t::bucket_alloc

    the allocator, which persists at least as long as the pool

    ◆ module

    const struct apreq_module_t* apreq_handle_t::module

    the apreq module which implements this handle

    ◆ pool

    apr_pool_t* apreq_handle_t::pool

    the pool which defines the lifetime of the parsed data


    The documentation for this struct was generated from the following file:
    libapreq2-2.17/docs/html/structapreq__hook__find__param__ctx__t.html0000644000175000017500000000641114277402434025440 0ustar jortonjorton libapreq2-2.17: apreq_hook_find_param_ctx_t Struct Reference
    apreq_hook_find_param_ctx_t Struct Reference

    #include <apreq_parser.h>

    Data Fields

    const char * name
     
    apreq_param_tparam
     
    apreq_hook_tprev
     

    Detailed Description

    Context struct for the apreq_hook_find_param hook.


    The documentation for this struct was generated from the following file:
    libapreq2-2.17/docs/html/structapreq__hook__t.html0000644000175000017500000001351214277402434021745 0ustar jortonjorton libapreq2-2.17: apreq_hook_t Struct Reference
    apreq_hook_t Struct Reference

    #include <apreq_parser.h>

    Data Fields

    apreq_hook_function_t hook
     
    apreq_hook_tnext
     
    apr_pool_t * pool
     
    void * ctx
     

    Detailed Description

    A hook is called by the parser whenever data arrives in a file upload parameter of the request body. You may associate any number of hooks with a parser instance with apreq_parser_add_hook().

    Field Documentation

    ◆ ctx

    void* apreq_hook_t::ctx

    a user defined pointer passed to the hook function

    ◆ hook

    apreq_hook_function_t apreq_hook_t::hook

    the hook function

    ◆ next

    apreq_hook_t* apreq_hook_t::next

    next item in the linked list

    ◆ pool

    apr_pool_t* apreq_hook_t::pool

    pool which allocated this hook


    The documentation for this struct was generated from the following file:
    libapreq2-2.17/docs/html/structapreq__module__t.html0000644000175000017500000004732014277402434022276 0ustar jortonjorton libapreq2-2.17: apreq_module_t Struct Reference
    apreq_module_t Struct Reference

    Vtable describing the necessary module functions. More...

    #include <apreq_module.h>

    Data Fields

    const char * name
     
    apr_uint32_t magic_number
     
    apr_status_t(* jar )(apreq_handle_t *, const apr_table_t **)
     
    apr_status_t(* args )(apreq_handle_t *, const apr_table_t **)
     
    apr_status_t(* body )(apreq_handle_t *, const apr_table_t **)
     
    apreq_cookie_t *(* jar_get )(apreq_handle_t *, const char *)
     
    apreq_param_t *(* args_get )(apreq_handle_t *, const char *)
     
    apreq_param_t *(* body_get )(apreq_handle_t *, const char *)
     
    apr_status_t(* parser_get )(apreq_handle_t *, const apreq_parser_t **)
     
    apr_status_t(* parser_set )(apreq_handle_t *, apreq_parser_t *)
     
    apr_status_t(* hook_add )(apreq_handle_t *, apreq_hook_t *)
     
    apr_status_t(* brigade_limit_get )(apreq_handle_t *, apr_size_t *)
     
    apr_status_t(* brigade_limit_set )(apreq_handle_t *, apr_size_t)
     
    apr_status_t(* read_limit_get )(apreq_handle_t *, apr_uint64_t *)
     
    apr_status_t(* read_limit_set )(apreq_handle_t *, apr_uint64_t)
     
    apr_status_t(* temp_dir_get )(apreq_handle_t *, const char **)
     
    apr_status_t(* temp_dir_set )(apreq_handle_t *, const char *)
     

    Detailed Description

    Vtable describing the necessary module functions.

    Field Documentation

    ◆ args

    apr_status_t(* apreq_module_t::args) (apreq_handle_t *, const apr_table_t **)

    get a table with all query string parameters

    ◆ args_get

    apreq_param_t*(* apreq_module_t::args_get) (apreq_handle_t *, const char *)

    get a query string parameter by its name

    ◆ body

    apr_status_t(* apreq_module_t::body) (apreq_handle_t *, const apr_table_t **)

    get a table with all body parameters

    ◆ body_get

    apreq_param_t*(* apreq_module_t::body_get) (apreq_handle_t *, const char *)

    get a body parameter by its name

    ◆ brigade_limit_get

    apr_status_t(* apreq_module_t::brigade_limit_get) (apreq_handle_t *, apr_size_t *)

    determine the maximum in-memory bytes a brigade may use

    ◆ brigade_limit_set

    apr_status_t(* apreq_module_t::brigade_limit_set) (apreq_handle_t *, apr_size_t)

    set the maximum in-memory bytes a brigade may use

    ◆ hook_add

    apr_status_t(* apreq_module_t::hook_add) (apreq_handle_t *, apreq_hook_t *)

    add a hook function

    ◆ jar

    apr_status_t(* apreq_module_t::jar) (apreq_handle_t *, const apr_table_t **)

    get a table with all cookies

    ◆ jar_get

    apreq_cookie_t*(* apreq_module_t::jar_get) (apreq_handle_t *, const char *)

    get a cookie by its name

    ◆ magic_number

    apr_uint32_t apreq_module_t::magic_number

    magic number identifying the module and version

    ◆ name

    const char* apreq_module_t::name

    name of this apreq module

    ◆ parser_get

    apr_status_t(* apreq_module_t::parser_get) (apreq_handle_t *, const apreq_parser_t **)

    gets the parser associated with the request body

    ◆ parser_set

    apr_status_t(* apreq_module_t::parser_set) (apreq_handle_t *, apreq_parser_t *)

    manually set a parser for the request body

    ◆ read_limit_get

    apr_status_t(* apreq_module_t::read_limit_get) (apreq_handle_t *, apr_uint64_t *)

    determine the maximum amount of data that will be fed into a parser

    ◆ read_limit_set

    apr_status_t(* apreq_module_t::read_limit_set) (apreq_handle_t *, apr_uint64_t)

    set the maximum amount of data that will be fed into a parser

    ◆ temp_dir_get

    apr_status_t(* apreq_module_t::temp_dir_get) (apreq_handle_t *, const char **)

    determine the directory used by the parser for temporary files

    ◆ temp_dir_set

    apr_status_t(* apreq_module_t::temp_dir_set) (apreq_handle_t *, const char *)

    set the directory used by the parser for temporary files


    The documentation for this struct was generated from the following file:
    libapreq2-2.17/docs/html/structapreq__param__t.html0000644000175000017500000001276014277402434022111 0ustar jortonjorton libapreq2-2.17: apreq_param_t Struct Reference
    apreq_param_t Struct Reference

    #include <apreq_param.h>

    Data Fields

    apr_table_t * info
     
    apr_bucket_brigade * upload
     
    unsigned flags
     
    const apreq_value_t v
     

    Detailed Description

    Common data structure for params and file uploads

    Field Documentation

    ◆ flags

    unsigned apreq_param_t::flags

    charsets, taint marks, app-specific bits

    ◆ info

    apr_table_t* apreq_param_t::info

    header table associated with the param

    ◆ upload

    apr_bucket_brigade* apreq_param_t::upload

    brigade used to spool upload files

    ◆ v

    const apreq_value_t apreq_param_t::v

    underlying name/value info


    The documentation for this struct was generated from the following file:
    libapreq2-2.17/docs/html/structapreq__parser__t.html0000644000175000017500000002176514277402434022312 0ustar jortonjorton libapreq2-2.17: apreq_parser_t Struct Reference
    apreq_parser_t Struct Reference

    #include <apreq_parser.h>

    Data Fields

    apreq_parser_function_t parser
     
    const char * content_type
     
    apr_pool_t * pool
     
    apr_bucket_alloc_t * bucket_alloc
     
    apr_size_t brigade_limit
     
    const char * temp_dir
     
    apreq_hook_thook
     
    void * ctx
     

    Detailed Description

    A request body parser instance.

    Field Documentation

    ◆ brigade_limit

    apr_size_t apreq_parser_t::brigade_limit

    the maximum in-memory bytes a brigade may use

    ◆ bucket_alloc

    apr_bucket_alloc_t* apreq_parser_t::bucket_alloc

    bucket allocator used to create bucket brigades

    ◆ content_type

    const char* apreq_parser_t::content_type

    the Content-Type request header

    ◆ ctx

    void* apreq_parser_t::ctx

    internal context pointer used by the parser function

    ◆ hook

    apreq_hook_t* apreq_parser_t::hook

    linked list of hooks

    ◆ parser

    apreq_parser_function_t apreq_parser_t::parser

    the function which parses chunks of body data

    ◆ pool

    apr_pool_t* apreq_parser_t::pool

    a pool which outlasts the bucket_alloc.

    ◆ temp_dir

    const char* apreq_parser_t::temp_dir

    the directory for generating temporary files


    The documentation for this struct was generated from the following file:
    libapreq2-2.17/docs/html/structapreq__value__t.html0000644000175000017500000001460514277402434022125 0ustar jortonjorton libapreq2-2.17: apreq_value_t Struct Reference
    apreq_value_t Struct Reference

    libapreq's pre-extensible string type More...

    #include <apreq.h>

    Data Fields

    char * name
     
    apr_size_t nlen
     
    apr_size_t dlen
     
    char data [1]
     

    Detailed Description

    libapreq's pre-extensible string type

    Examples
    /home/jorton/src/asf/libapreq-v2.17/include/apreq.h.

    Field Documentation

    ◆ data

    char apreq_value_t::data[1]

    ◆ dlen

    apr_size_t apreq_value_t::dlen

    ◆ name

    char* apreq_value_t::name

    ◆ nlen

    apr_size_t apreq_value_t::nlen

    The documentation for this struct was generated from the following file:
    libapreq2-2.17/docs/html/sync_off.png0000644000175000017500000000152514277402434017156 0ustar jortonjorton‰PNG  IHDRàw=øIDATxíÝKhTWÀñÿä1I&3™8M¦Iš™†I3Ú©b$cÌ I1V1±-(Tö±±Ð.* t!‚K[¥Ä¥ˆ„¨´f£`l(øl©"Y”¤6ÆgÌTú}·sgîܹ ±d{8?æÌ¹÷;çÜuíÚ`:!±F¬¢BäŠ?ŰÄm'yÊÅ>ÑlU¯½üý‰è_‹?€Œê ]€Y(ŠNñ±8fý1°Öqún-eâ¨øtºmâÈ Ó0}b›ù%·©µ×Œ®=Ÿ0´³?Š1sŸ‹0€¯8À‘;_ ‹W|%\ Zð— >舽ln¨p©.aÇ{ )t;Ú b nŸš¯›65°¢¡2çÅÔ?Žž>Oдàuönm¤¢Ì`×­Z¬WjC~>‘Ö¾0+á {{©fÝ×Mæ·æÅ•ìÙ¼˜` Ý›%uA6´½ÅÆö¨Á,]k¢ÄW¼™u±›]‹ˆ7§¯iòh€ ¶¶¬ÏÖu1 ló —Ҷ̺–:ÞÍ\ÄcãÏxøhR²Êè‡Qt$¿ß§¨ ª fdºü<4BÿÙ[•f¸d7=.Mé9/—éªÃëù/ÿO Üaàò}€,‘j?Ÿõ.5Úšm?œÿŸ®ŽXÿ2¬#¸d píæ(£?cÛú¼!½›a1¥Þ—ŽòØ©ܾ7dÔK:‚ùÒ‰ì)Ê3‚Ü™àÌà]€,±H€µ+køöäu<|`·LhC7¹ÔeÍ Ÿ×Ÿ˜tÜ‹ óH$^2%l.êaeÐäýE”ÌÉ|ÅÜìî‰Ýsä }¸ýDû^hzé~ðR›¦Ã¡¿]|#ü¯@×—Ö‡[k¹–<|š(Ç*€Ý¹dÇtMé:Ýñø«Ø,êÅû¢]”' øXÓ_nò¡Æ|Øý /c§fžâOIEND®B`‚libapreq2-2.17/docs/html/sync_on.png0000644000175000017500000000151514277402434017017 0ustar jortonjorton‰PNG  IHDRàw=øIDATxíÝ_HTYÀñï8ã¤ó§i§4-g6ÆËÕ&kQ)¨Ô!Š0ÒURKÚ…„ê¡/»PEÁ>ìK-+KÁ²Ñ.Y”¾dEPaA‰ø°¥¶›ZSÓïÜ;3wºŠ–¯—߯gfîïœsçœWKÇñ.€ÉøD­¨a‘'¬âq_ôˆk¢ÀŒ ÀDŽøQ´ÄïC¨¶åñÏÿgÅ ñ 0„Y‚:qZ¦Á)~õâ€èLý0HVñ× žz-¿‰C“%¨g¦˜6€é8%Úõ¬ëwêÙUÏ¿˜ª³Ä }? ?€·3ÀÀž©Š À”K• @hà a±ðaÇæUe‹ sù~ë2²ì“&Ú&B*AÄljæºììi*˨,Ëçí»÷oÆ£T”,d[˜¼3-*ÁÀ…>å‡Ë çLÉŸçfk˜Ò éw#*AEjKUy>ûšËÉõ&{µ¢8—m5Ki¬ jjƒD*¿NŽÖigwÃ7Dª’mz骹úKÛ¾±ˆ¶M!æ¤ÍkÐ?šoý¬_åÓlXí#Ò~–¸¬ê×ÒÑXŠÓ‘ùRÙ*Eû‚ՂדðEÜ;6«e"Q(²Ù=–¿Ezæ5Kؼָ_ 1òzBªJë ±XŒì96åªjL^7{ùãJÑ÷1½i@%8'7M©_\Qœ#ÓUŒËñýÿyõ Wo Éx8¼s¥v¯ªì|×SnÜ q_m Ýé î>bèÕí[JX,½4[Tú{R£ë¼ôˆ¾þa€tÝjjzzÅ'ÅìȶiIžŽòwÏs ¡€—ÕKøõâC^ŽŒ˜Y­¨µÉ%6¨´êˆº]vÛðhâ½iWv–hôëê°Ò¨¾'æÌ‚·ñ|[ßìúÅ^€YrD=<ýDû]äÇ÷s€Ïõ‹8™ºCì? À ¨—t4õᩎ¡Jã‡W‹É± îr¼cjMɘìx| šE©øNÔ‰œøA¢þ«–€Z¼ñ‡jó î#™§¢¢4gIEND®B`‚libapreq2-2.17/docs/html/tab_a.png0000644000175000017500000000021614277402434016412 0ustar jortonjorton‰PNG  IHDR$ÇÇ[UIDATxíK €0C'o¤(Šˆ[Žà%Üxÿ#Ù©­ç ùÁöó¦W¦e# 3t I 3+¼øEã~\D½9¯Ûàè’wM·¿öÿ}Yõ_êA4Yžã}IEND®B`‚libapreq2-2.17/docs/html/tab_b.png0000644000175000017500000000025114277402434016412 0ustar jortonjorton‰PNG  IHDR$ÇÇ[pIDATxíÝMƒ EáÇ»ÐÔ¸¸u`âÀ´V0РÆ}:t]DÁ²s¿ä®‚¶ýËu¥ø|’xùî½À>ÿ1»& mÄ8ÜSÙÑxÜLÀUûšÞ²ÄiE–ŠåOs„¢’nxàÒêÓKN²~jIEND®B`‚libapreq2-2.17/docs/html/tab_h.png0000644000175000017500000000026114277402434016421 0ustar jortonjorton‰PNG  IHDR$ÇÇ[xIDATxíÝMÁ@†áž~¥ÜÆÎ’Evˆ¿"!•²‘d*×rGq=Š{¼ßSݧçë­ÓÉHÇ uO^õø[À_‡¢ãXvyËþÒ±=·VCffææ{°öŠó´Rçœ%_õçÿŽ¢ö·°Çrug¶(?gh\i>|sIEND®B`‚libapreq2-2.17/docs/html/tab_s.png0000644000175000017500000000027014277402434016434 0ustar jortonjorton‰PNG  IHDR$ÇÇ[IDATxíÝ ‚@@Ñ£?Q…¤"š¢%¦I‘—Šf–6[´HÃäQƒ<Þâõþ]ždr Í’s?ˆO=Ñññw'ÌF‡Ž íðö-~rÃ[œèŠ­ì¬mƒÖ¬ƒݯнŠÕF)Yº% §`nÌ,9B ™’©!ÑŒ\ý<Å#üîî•IEND®B`‚libapreq2-2.17/docs/html/tabs.css0000644000175000017500000002174014277402434016306 0ustar jortonjorton.sm{position:relative;z-index:9999}.sm,.sm ul,.sm li{display:block;list-style:none;margin:0;padding:0;line-height:normal;direction:ltr;text-align:left;-webkit-tap-highlight-color:rgba(0,0,0,0)}.sm-rtl,.sm-rtl ul,.sm-rtl li{direction:rtl;text-align:right}.sm>li>h1,.sm>li>h2,.sm>li>h3,.sm>li>h4,.sm>li>h5,.sm>li>h6{margin:0;padding:0}.sm ul{display:none}.sm li,.sm a{position:relative}.sm a{display:block}.sm a.disabled{cursor:not-allowed}.sm:after{content:"\00a0";display:block;height:0;font:0/0 serif;clear:both;visibility:hidden;overflow:hidden}.sm,.sm *,.sm *:before,.sm *:after{-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}.sm-dox{background-image:url("tab_b.png")}.sm-dox a,.sm-dox a:focus,.sm-dox a:hover,.sm-dox a:active{padding:0 12px;padding-right:43px;font-family:"Lucida Grande","Geneva","Helvetica",Arial,sans-serif;font-size:13px;font-weight:bold;line-height:36px;text-decoration:none;text-shadow:0 1px 1px rgba(255,255,255,0.9);color:#283a5d;outline:0}.sm-dox a:hover{background-image:url("tab_a.png");background-repeat:repeat-x;color:white;text-shadow:0 1px 1px black}.sm-dox a.current{color:#d23600}.sm-dox a.disabled{color:#bbb}.sm-dox a span.sub-arrow{position:absolute;top:50%;margin-top:-14px;left:auto;right:3px;width:28px;height:28px;overflow:hidden;font:bold 12px/28px monospace!important;text-align:center;text-shadow:none;background:rgba(255,255,255,0.5);-moz-border-radius:5px;-webkit-border-radius:5px;border-radius:5px}.sm-dox a.highlighted span.sub-arrow:before{display:block;content:'-'}.sm-dox>li:first-child>a,.sm-dox>li:first-child>:not(ul) a{-moz-border-radius:5px 5px 0 0;-webkit-border-radius:5px;border-radius:5px 5px 0 0}.sm-dox>li:last-child>a,.sm-dox>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul,.sm-dox>li:last-child>ul>li:last-child>a,.sm-dox>li:last-child>ul>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul>li:last-child>ul,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul{-moz-border-radius:0 0 5px 5px;-webkit-border-radius:0;border-radius:0 0 5px 5px}.sm-dox>li:last-child>a.highlighted,.sm-dox>li:last-child>*:not(ul) a.highlighted,.sm-dox>li:last-child>ul>li:last-child>a.highlighted,.sm-dox>li:last-child>ul>li:last-child>*:not(ul) a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a.highlighted{-moz-border-radius:0;-webkit-border-radius:0;border-radius:0}.sm-dox ul{background:rgba(162,162,162,0.1)}.sm-dox ul a,.sm-dox ul a:focus,.sm-dox ul a:hover,.sm-dox ul a:active{font-size:12px;border-left:8px solid transparent;line-height:36px;text-shadow:none;background-color:white;background-image:none}.sm-dox ul a:hover{background-image:url("tab_a.png");background-repeat:repeat-x;color:white;text-shadow:0 1px 1px black}.sm-dox ul ul a,.sm-dox ul ul a:hover,.sm-dox ul ul a:focus,.sm-dox ul ul a:active{border-left:16px solid transparent}.sm-dox ul ul ul a,.sm-dox ul ul ul a:hover,.sm-dox ul ul ul a:focus,.sm-dox ul ul ul a:active{border-left:24px solid transparent}.sm-dox ul ul ul ul a,.sm-dox ul ul ul ul a:hover,.sm-dox ul ul ul ul a:focus,.sm-dox ul ul ul ul a:active{border-left:32px solid transparent}.sm-dox ul ul ul ul ul a,.sm-dox ul ul ul ul ul a:hover,.sm-dox ul ul ul ul ul a:focus,.sm-dox ul ul ul ul ul a:active{border-left:40px solid transparent}@media(min-width:768px){.sm-dox ul{position:absolute;width:12em}.sm-dox li{float:left}.sm-dox.sm-rtl li{float:right}.sm-dox ul li,.sm-dox.sm-rtl ul li,.sm-dox.sm-vertical li{float:none}.sm-dox a{white-space:nowrap}.sm-dox ul a,.sm-dox.sm-vertical a{white-space:normal}.sm-dox .sm-nowrap>li>a,.sm-dox .sm-nowrap>li>:not(ul) a{white-space:nowrap}.sm-dox{padding:0 10px;background-image:url("tab_b.png");line-height:36px}.sm-dox a span.sub-arrow{top:50%;margin-top:-2px;right:12px;width:0;height:0;border-width:4px;border-style:solid dashed dashed dashed;border-color:#283a5d transparent transparent transparent;background:transparent;-moz-border-radius:0;-webkit-border-radius:0;border-radius:0}.sm-dox a,.sm-dox a:focus,.sm-dox a:active,.sm-dox a:hover,.sm-dox a.highlighted{padding:0 12px;background-image:url("tab_s.png");background-repeat:no-repeat;background-position:right;-moz-border-radius:0!important;-webkit-border-radius:0;border-radius:0!important}.sm-dox a:hover{background-image:url("tab_a.png");background-repeat:repeat-x;color:white;text-shadow:0 1px 1px black}.sm-dox a:hover span.sub-arrow{border-color:white transparent transparent transparent}.sm-dox a.has-submenu{padding-right:24px}.sm-dox li{border-top:0}.sm-dox>li>ul:before,.sm-dox>li>ul:after{content:'';position:absolute;top:-18px;left:30px;width:0;height:0;overflow:hidden;border-width:9px;border-style:dashed dashed solid dashed;border-color:transparent transparent #bbb transparent}.sm-dox>li>ul:after{top:-16px;left:31px;border-width:8px;border-color:transparent transparent #fff transparent}.sm-dox ul{border:1px solid #bbb;padding:5px 0;background:#fff;-moz-border-radius:5px!important;-webkit-border-radius:5px;border-radius:5px!important;-moz-box-shadow:0 5px 9px rgba(0,0,0,0.2);-webkit-box-shadow:0 5px 9px rgba(0,0,0,0.2);box-shadow:0 5px 9px rgba(0,0,0,0.2)}.sm-dox ul a span.sub-arrow{right:8px;top:50%;margin-top:-5px;border-width:5px;border-color:transparent transparent transparent #555;border-style:dashed dashed dashed solid}.sm-dox ul a,.sm-dox ul a:hover,.sm-dox ul a:focus,.sm-dox ul a:active,.sm-dox ul a.highlighted{color:#555;background-image:none;border:0!important;color:#555;background-image:none}.sm-dox ul a:hover{background-image:url("tab_a.png");background-repeat:repeat-x;color:white;text-shadow:0 1px 1px black}.sm-dox ul a:hover span.sub-arrow{border-color:transparent transparent transparent white}.sm-dox span.scroll-up,.sm-dox span.scroll-down{position:absolute;display:none;visibility:hidden;overflow:hidden;background:#fff;height:36px}.sm-dox span.scroll-up:hover,.sm-dox span.scroll-down:hover{background:#eee}.sm-dox span.scroll-up:hover span.scroll-up-arrow,.sm-dox span.scroll-up:hover span.scroll-down-arrow{border-color:transparent transparent #d23600 transparent}.sm-dox span.scroll-down:hover span.scroll-down-arrow{border-color:#d23600 transparent transparent transparent}.sm-dox span.scroll-up-arrow,.sm-dox span.scroll-down-arrow{position:absolute;top:0;left:50%;margin-left:-6px;width:0;height:0;overflow:hidden;border-width:6px;border-style:dashed dashed solid dashed;border-color:transparent transparent #555 transparent}.sm-dox span.scroll-down-arrow{top:8px;border-style:solid dashed dashed dashed;border-color:#555 transparent transparent transparent}.sm-dox.sm-rtl a.has-submenu{padding-right:12px;padding-left:24px}.sm-dox.sm-rtl a span.sub-arrow{right:auto;left:12px}.sm-dox.sm-rtl.sm-vertical a.has-submenu{padding:10px 20px}.sm-dox.sm-rtl.sm-vertical a span.sub-arrow{right:auto;left:8px;border-style:dashed solid dashed dashed;border-color:transparent #555 transparent transparent}.sm-dox.sm-rtl>li>ul:before{left:auto;right:30px}.sm-dox.sm-rtl>li>ul:after{left:auto;right:31px}.sm-dox.sm-rtl ul a.has-submenu{padding:10px 20px!important}.sm-dox.sm-rtl ul a span.sub-arrow{right:auto;left:8px;border-style:dashed solid dashed dashed;border-color:transparent #555 transparent transparent}.sm-dox.sm-vertical{padding:10px 0;-moz-border-radius:5px;-webkit-border-radius:5px;border-radius:5px}.sm-dox.sm-vertical a{padding:10px 20px}.sm-dox.sm-vertical a:hover,.sm-dox.sm-vertical a:focus,.sm-dox.sm-vertical a:active,.sm-dox.sm-vertical a.highlighted{background:#fff}.sm-dox.sm-vertical a.disabled{background-image:url("tab_b.png")}.sm-dox.sm-vertical a span.sub-arrow{right:8px;top:50%;margin-top:-5px;border-width:5px;border-style:dashed dashed dashed solid;border-color:transparent transparent transparent #555}.sm-dox.sm-vertical>li>ul:before,.sm-dox.sm-vertical>li>ul:after{display:none}.sm-dox.sm-vertical ul a{padding:10px 20px}.sm-dox.sm-vertical ul a:hover,.sm-dox.sm-vertical ul a:focus,.sm-dox.sm-vertical ul a:active,.sm-dox.sm-vertical ul a.highlighted{background:#eee}.sm-dox.sm-vertical ul a.disabled{background:#fff}}libapreq2-2.17/docs/html/todo.html0000644000175000017500000000453714277402434016503 0ustar jortonjorton libapreq2-2.17: Todo List
    Todo List
    Global apreq_atoi64f (const char *s)
    What happens when s is malformed? Should this return an unsigned value instead?
    Global apreq_atoi64t (const char *s)
    What happens when s is malformed? Should this return an unsigned value instead?
    Global apreq_brigade_concat (apr_pool_t *pool, const char *temp_dir, apr_size_t brigade_limit, apr_bucket_brigade *out, apr_bucket_brigade *in)
    Flesh out these error codes, making them as explicit as possible.
    libapreq2-2.17/docs/man/man3/apreq.h.30000644000175000017500000002672214277402434016737 0ustar jortonjorton.TH "include/apreq.h" 3 "Thu Aug 18 2022" "Version 2.17" "libapreq2" \" -*- nroff -*- .ad l .nh .SH NAME include/apreq.h \- Main header file\&.\&.\&. .SH SYNOPSIS .br .PP \fC#include 'apr_tables\&.h'\fP .br \fC#include \fP .br .SS "Data Structures" .in +1c .ti -1c .RI "struct \fBapreq_value_t\fP" .br .RI "libapreq's pre-extensible string type " .in -1c .SS "Macros" .in +1c .ti -1c .RI "#define \fBAPREQ_DECLARE\fP(d) APR_DECLARE(d)" .br .ti -1c .RI "#define \fBAPREQ_DECLARE_NONSTD\fP(d) APR_DECLARE_NONSTD(d)" .br .ti -1c .RI "#define \fBAPREQ_DECLARE_DATA\fP" .br .ti -1c .RI "#define \fBAPREQ_DEFAULT_READ_BLOCK_SIZE\fP (64 * 1024)" .br .ti -1c .RI "#define \fBAPREQ_DEFAULT_READ_LIMIT\fP (64 * 1024 * 1024)" .br .ti -1c .RI "#define \fBAPREQ_DEFAULT_BRIGADE_LIMIT\fP (256 * 1024)" .br .ti -1c .RI "#define \fBAPREQ_DEFAULT_NELTS\fP 8" .br .ti -1c .RI "#define \fBAPREQ_FLAGS_OFF\fP(f, name) ((f) &= ~(name##_MASK << name##_BIT))" .br .ti -1c .RI "#define \fBAPREQ_FLAGS_ON\fP(f, name) ((f) |= (name##_MASK << name##_BIT))" .br .ti -1c .RI "#define \fBAPREQ_FLAGS_GET\fP(f, name) (((f) >> name##_BIT) & name##_MASK)" .br .ti -1c .RI "#define \fBAPREQ_FLAGS_SET\fP(f, name, value)" .br .ti -1c .RI "#define \fBAPREQ_CHARSET_BIT\fP 0" .br .ti -1c .RI "#define \fBAPREQ_CHARSET_MASK\fP 255" .br .ti -1c .RI "#define \fBAPREQ_TAINTED_BIT\fP 8" .br .ti -1c .RI "#define \fBAPREQ_TAINTED_MASK\fP 1" .br .ti -1c .RI "#define \fBAPREQ_COOKIE_VERSION_BIT\fP 11" .br .ti -1c .RI "#define \fBAPREQ_COOKIE_VERSION_MASK\fP 3" .br .ti -1c .RI "#define \fBAPREQ_COOKIE_SECURE_BIT\fP 13" .br .ti -1c .RI "#define \fBAPREQ_COOKIE_SECURE_MASK\fP 1" .br .ti -1c .RI "#define \fBAPREQ_COOKIE_HTTPONLY_BIT\fP 14" .br .ti -1c .RI "#define \fBAPREQ_COOKIE_HTTPONLY_MASK\fP 1" .br .ti -1c .RI "#define \fBapreq_attr_to_type\fP(T, A, P) ( (T*) ((char*)(P)\-offsetof(T,A)) )" .br .in -1c .SS "Typedefs" .in +1c .ti -1c .RI "typedef struct \fBapreq_value_t\fP \fBapreq_value_t\fP" .br .RI "libapreq's pre-extensible string type " .in -1c .SS "Enumerations" .in +1c .ti -1c .RI "enum \fBapreq_charset_t\fP { \fBAPREQ_CHARSET_ASCII\fP =0, \fBAPREQ_CHARSET_LATIN1\fP =1, \fBAPREQ_CHARSET_CP1252\fP =2, \fBAPREQ_CHARSET_UTF8\fP =8 }" .br .ti -1c .RI "enum \fBapreq_join_t\fP { \fBAPREQ_JOIN_AS_IS\fP, \fBAPREQ_JOIN_ENCODE\fP, \fBAPREQ_JOIN_DECODE\fP, \fBAPREQ_JOIN_QUOTE\fP }" .br .ti -1c .RI "enum \fBapreq_match_t\fP { \fBAPREQ_MATCH_FULL\fP, \fBAPREQ_MATCH_PARTIAL\fP }" .br .ti -1c .RI "enum \fBapreq_expires_t\fP { \fBAPREQ_EXPIRES_HTTP\fP, \fBAPREQ_EXPIRES_NSCOOKIE\fP }" .br .in -1c .SS "Functions" .in +1c .ti -1c .RI "static APR_INLINE void \fBapreq_value_table_add\fP (const \fBapreq_value_t\fP *v, apr_table_t *t)" .br .ti -1c .RI "apr_status_t \fBapreq_initialize\fP (apr_pool_t *pool)" .br .ti -1c .RI "apr_status_t \fBapreq_pre_initialize\fP (apr_pool_t *pool)" .br .ti -1c .RI "apr_status_t \fBapreq_post_initialize\fP (apr_pool_t *pool)" .br .in -1c .SH "Detailed Description" .PP Main header file\&.\&.\&. Define the generic APREQ_ macros and common data structures\&. .SH "Macro Definition Documentation" .PP .SS "#define apreq_attr_to_type(T, A, P) ( (T*) ((char*)(P)\-offsetof(T,A)) )" .PP \fBParameters\fP .RS 4 \fIT\fP type .br \fIA\fP attribute .br \fIP\fP XXX .RE .PP .SS "#define APREQ_CHARSET_BIT 0" Charset Bit .PP \fBSee also\fP .RS 4 \fBAPREQ_FLAGS_OFF\fP .PP \fBAPREQ_FLAGS_ON\fP .PP \fBAPREQ_FLAGS_GET\fP .PP \fBAPREQ_FLAGS_SET\fP .RE .PP .SS "#define APREQ_CHARSET_MASK 255" Charset Mask .PP \fBSee also\fP .RS 4 \fBAPREQ_FLAGS_OFF\fP .PP \fBAPREQ_FLAGS_ON\fP .PP \fBAPREQ_FLAGS_GET\fP .PP \fBAPREQ_FLAGS_SET\fP .RE .PP .SS "#define APREQ_COOKIE_HTTPONLY_BIT 14" Cookie's HttpOnly Bit .PP \fBSee also\fP .RS 4 \fBAPREQ_FLAGS_OFF\fP .PP \fBAPREQ_FLAGS_ON\fP .PP \fBAPREQ_FLAGS_GET\fP .PP \fBAPREQ_FLAGS_SET\fP .RE .PP .SS "#define APREQ_COOKIE_HTTPONLY_MASK 1" Cookie's HttpOnly Mask .PP \fBSee also\fP .RS 4 \fBAPREQ_FLAGS_OFF\fP .PP \fBAPREQ_FLAGS_ON\fP .PP \fBAPREQ_FLAGS_GET\fP .PP \fBAPREQ_FLAGS_SET\fP .RE .PP .SS "#define APREQ_COOKIE_SECURE_BIT 13" Cookie's Secure Bit .PP \fBSee also\fP .RS 4 \fBAPREQ_FLAGS_OFF\fP .PP \fBAPREQ_FLAGS_ON\fP .PP \fBAPREQ_FLAGS_GET\fP .PP \fBAPREQ_FLAGS_SET\fP .RE .PP .SS "#define APREQ_COOKIE_SECURE_MASK 1" Cookie's Secure Mask .PP \fBSee also\fP .RS 4 \fBAPREQ_FLAGS_OFF\fP .PP \fBAPREQ_FLAGS_ON\fP .PP \fBAPREQ_FLAGS_GET\fP .PP \fBAPREQ_FLAGS_SET\fP .RE .PP .SS "#define APREQ_COOKIE_VERSION_BIT 11" Cookier Version Bit .PP \fBSee also\fP .RS 4 \fBAPREQ_FLAGS_OFF\fP .PP \fBAPREQ_FLAGS_ON\fP .PP \fBAPREQ_FLAGS_GET\fP .PP \fBAPREQ_FLAGS_SET\fP .RE .PP .SS "#define APREQ_COOKIE_VERSION_MASK 3" Cookie Version Mask .PP \fBSee also\fP .RS 4 \fBAPREQ_FLAGS_OFF\fP .PP \fBAPREQ_FLAGS_ON\fP .PP \fBAPREQ_FLAGS_GET\fP .PP \fBAPREQ_FLAGS_SET\fP .RE .PP .SS "#define APREQ_DECLARE(d) APR_DECLARE(d)" The public APREQ functions are declared with \fBAPREQ_DECLARE()\fP, so they may use the most appropriate calling convention\&. Public APR functions with variable arguments must use APR_DECLARE_NONSTD()\&. .PP \fBRemarks\fP .RS 4 Both the declaration and implementations must use the same macro\&. \fBAPREQ_DECLARE(rettype)\fP apeq_func(args) .RE .PP .PP \fBExamples\fP .in +1c \fB/home/jorton/src/asf/libapreq\-v2\&.17/include/apreq\&.h\fP\&. .SS "#define APREQ_DECLARE_DATA" The public APREQ variables are declared with APREQ_DECLARE_DATA\&. This assures the appropriate indirection is invoked at compile time\&. .PP \fBSee also\fP .RS 4 \fBAPREQ_DECLARE\fP .PP \fBAPREQ_DECLARE_NONSTD\fP .RE .PP \fBRemarks\fP .RS 4 Note that the declaration and implementations use different forms, but both must include the macro\&. extern APREQ_DECLARE_DATA type apr_variable; .br APREQ_DECLARE_DATA type apr_variable = value; .RE .PP .SS "#define APREQ_DECLARE_NONSTD(d) APR_DECLARE_NONSTD(d)" APEQ_DECLARE_NONSTD(rettype) apr_func(args, \&.\&.\&.); .SS "#define APREQ_DEFAULT_BRIGADE_LIMIT (256 * 1024)" Maximum number of bytes mod_apreq2 will let accumulate within the heap-buckets in a brigade\&. Excess data will be spooled to an appended file bucket .PP \fBSee also\fP .RS 4 ap_set_brigade_read_limit .RE .PP .SS "#define APREQ_DEFAULT_NELTS 8" Number of elements in the initial apr_table .PP \fBSee also\fP .RS 4 apr_table_make .RE .PP .SS "#define APREQ_DEFAULT_READ_BLOCK_SIZE (64 * 1024)" Read chucks of data in 64k blocks from the request .SS "#define APREQ_DEFAULT_READ_LIMIT (64 * 1024 * 1024)" Maximum number of bytes mod_apreq2 will send off to libapreq2 for parsing\&. mod_apreq2 will log this event and subsequently remove itself from the filter chain\&. .br .PP \fBSee also\fP .RS 4 ap_set_read_limit .br .RE .PP .SS "#define APREQ_FLAGS_GET(f, name) (((f) >> name##_BIT) & name##_MASK)" Get specified bit f in bitfield name .SS "#define APREQ_FLAGS_OFF(f, name) ((f) &= ~(name##_MASK << name##_BIT))" Check to see if specified bit f is off in bitfield name .SS "#define APREQ_FLAGS_ON(f, name) ((f) |= (name##_MASK << name##_BIT))" Check to see if specified bit f is on in bitfield name .SS "#define APREQ_FLAGS_SET(f, name, value)" \fBValue:\fP .PP .nf ((f) = (((f) & ~(name##_MASK << name##_BIT)) \ | ((name##_MASK & (value)) << name##_BIT))) .fi Set specified bit f in bitfield name to value Note the below BIT/Mask defines are used sans the _BIT, _MASK because of the this define's ##_MASK, ##_BIT usage\&. Each come in a pair .SS "#define APREQ_TAINTED_BIT 8" Tainted Bit .PP \fBSee also\fP .RS 4 \fBAPREQ_FLAGS_OFF\fP .PP \fBAPREQ_FLAGS_ON\fP .PP \fBAPREQ_FLAGS_GET\fP .PP \fBAPREQ_FLAGS_SET\fP .RE .PP .SS "#define APREQ_TAINTED_MASK 1" Tainted Mask .PP \fBSee also\fP .RS 4 \fBAPREQ_FLAGS_OFF\fP .PP \fBAPREQ_FLAGS_ON\fP .PP \fBAPREQ_FLAGS_GET\fP .PP \fBAPREQ_FLAGS_SET\fP .RE .PP .SH "Enumeration Type Documentation" .PP .SS "enum \fBapreq_charset_t\fP" Character encodings\&. .PP \fBExamples\fP .in +1c \fB/home/jorton/src/asf/libapreq\-v2\&.17/include/apreq\&.h\fP\&. .SS "enum \fBapreq_expires_t\fP" Expiration date format .PP \fBEnumerator\fP .in +1c .TP \fB\fIAPREQ_EXPIRES_HTTP \fP\fP Use date formatting consistent with RFC 2616 .TP \fB\fIAPREQ_EXPIRES_NSCOOKIE \fP\fP Use format consistent with Netscape's Cookie Spec .PP \fBExamples\fP .in +1c \fB/home/jorton/src/asf/libapreq\-v2\&.17/include/apreq\&.h\fP\&. .SS "enum \fBapreq_join_t\fP" Join type .PP \fBEnumerator\fP .in +1c .TP \fB\fIAPREQ_JOIN_AS_IS \fP\fP Join the strings without modification .TP \fB\fIAPREQ_JOIN_ENCODE \fP\fP Url-encode the strings before joining them .TP \fB\fIAPREQ_JOIN_DECODE \fP\fP Url-decode the strings before joining them .TP \fB\fIAPREQ_JOIN_QUOTE \fP\fP Quote the strings, backslashing existing quote marks\&. .PP \fBExamples\fP .in +1c \fB/home/jorton/src/asf/libapreq\-v2\&.17/include/apreq\&.h\fP\&. .SS "enum \fBapreq_match_t\fP" Match type .PP \fBEnumerator\fP .in +1c .TP \fB\fIAPREQ_MATCH_FULL \fP\fP Full match only\&. .TP \fB\fIAPREQ_MATCH_PARTIAL \fP\fP Partial matches are ok\&. .PP \fBExamples\fP .in +1c \fB/home/jorton/src/asf/libapreq\-v2\&.17/include/apreq\&.h\fP\&. .SH "Function Documentation" .PP .SS "apr_status_t apreq_initialize (apr_pool_t * pool)" Initialize libapreq2\&. Applications (except apache modules using mod_apreq) should call this exactly once before they use any libapreq2 modules\&. If you want to modify the list of default parsers with \fBapreq_register_parser()\fP, please use \fBapreq_pre_initialize()\fP and \fBapreq_post_initialize()\fP instead\&. .PP \fBParameters\fP .RS 4 \fIpool\fP a base pool persisting while libapreq2 is used .RE .PP \fBRemarks\fP .RS 4 after you destroy the pool, you have to call this function again with a new pool if you still plan to use libapreq2 .RE .PP .PP \fBExamples\fP .in +1c \fB/home/jorton/src/asf/libapreq\-v2\&.17/include/apreq\&.h\fP\&. .SS "apr_status_t apreq_post_initialize (apr_pool_t * pool)" Post-initialize libapreq2\&. Applications (except apache modules using mod_apreq2) should this exactly once before they use any libapreq2 modules for parsing\&. .PP \fBParameters\fP .RS 4 \fIpool\fP the same pool that was used in \fBapreq_pre_initialize()\fP\&. .RE .PP .PP \fBExamples\fP .in +1c \fB/home/jorton/src/asf/libapreq\-v2\&.17/include/apreq\&.h\fP\&. .SS "apr_status_t apreq_pre_initialize (apr_pool_t * pool)" Pre-initialize libapreq2\&. Applications (except apache modules using mod_apreq2) should call this exactly once before they register custom parsers with libapreq2\&. mod_apreq2 does this automatically during the post-config phase, so modules that need call apreq_register_parser should create a post-config hook using APR_HOOK_MIDDLE\&. .PP \fBParameters\fP .RS 4 \fIpool\fP a base pool persisting while libapreq2 is used .RE .PP \fBRemarks\fP .RS 4 after you destroyed the pool, you have to call this function again with a new pool if you still plan to use libapreq2 .RE .PP .PP \fBExamples\fP .in +1c \fB/home/jorton/src/asf/libapreq\-v2\&.17/include/apreq\&.h\fP\&. .SS "static APR_INLINE void apreq_value_table_add (const \fBapreq_value_t\fP * v, apr_table_t * t)\fC [static]\fP" Adds the specified \fBapreq_value_t\fP to the apr_table_t\&. .PP \fBParameters\fP .RS 4 \fIv\fP value to add .br \fIt\fP add v to this table .RE .PP \fBReturns\fP .RS 4 void .RE .PP @ see apr_table_t .PP \fBSee also\fP .RS 4 apr_value_t .RE .PP .PP \fBExamples\fP .in +1c \fB/home/jorton/src/asf/libapreq\-v2\&.17/include/apreq\&.h\fP\&. .SH "Author" .PP Generated automatically by Doxygen for libapreq2 from the source code\&. libapreq2-2.17/docs/man/man3/apreq_cookie.h.30000644000175000017500000001773414277402434020273 0ustar jortonjorton.TH "include/apreq_cookie.h" 3 "Thu Aug 18 2022" "Version 2.17" "libapreq2" \" -*- nroff -*- .ad l .nh .SH NAME include/apreq_cookie.h \- Cookies and Jars\&. .SH SYNOPSIS .br .PP \fC#include 'apreq\&.h'\fP .br \fC#include 'apr_time\&.h'\fP .br .SS "Data Structures" .in +1c .ti -1c .RI "struct \fBapreq_cookie_t\fP" .br .RI "Cookie type, supporting both Netscape and RFC cookie specifications\&. " .in -1c .SS "Macros" .in +1c .ti -1c .RI "#define \fBAPREQ_COOKIE_MAX_LENGTH\fP 4096" .br .in -1c .SS "Typedefs" .in +1c .ti -1c .RI "typedef struct \fBapreq_cookie_t\fP \fBapreq_cookie_t\fP" .br .RI "Cookie type, supporting both Netscape and RFC cookie specifications\&. " .in -1c .SS "Functions" .in +1c .ti -1c .RI "static APR_INLINE \fBapreq_cookie_t\fP * \fBapreq_value_to_cookie\fP (const char *val)" .br .ti -1c .RI "static APR_INLINE unsigned \fBapreq_cookie_version\fP (const \fBapreq_cookie_t\fP *c)" .br .ti -1c .RI "static APR_INLINE void \fBapreq_cookie_version_set\fP (\fBapreq_cookie_t\fP *c, unsigned v)" .br .ti -1c .RI "static APR_INLINE unsigned \fBapreq_cookie_is_secure\fP (const \fBapreq_cookie_t\fP *c)" .br .ti -1c .RI "static APR_INLINE void \fBapreq_cookie_secure_on\fP (\fBapreq_cookie_t\fP *c)" .br .ti -1c .RI "static APR_INLINE void \fBapreq_cookie_secure_off\fP (\fBapreq_cookie_t\fP *c)" .br .ti -1c .RI "static APR_INLINE unsigned \fBapreq_cookie_is_httponly\fP (const \fBapreq_cookie_t\fP *c)" .br .ti -1c .RI "static APR_INLINE void \fBapreq_cookie_httponly_on\fP (\fBapreq_cookie_t\fP *c)" .br .ti -1c .RI "static APR_INLINE void \fBapreq_cookie_httponly_off\fP (\fBapreq_cookie_t\fP *c)" .br .ti -1c .RI "static APR_INLINE unsigned \fBapreq_cookie_is_tainted\fP (const \fBapreq_cookie_t\fP *c)" .br .ti -1c .RI "static APR_INLINE void \fBapreq_cookie_tainted_on\fP (\fBapreq_cookie_t\fP *c)" .br .ti -1c .RI "static APR_INLINE void \fBapreq_cookie_tainted_off\fP (\fBapreq_cookie_t\fP *c)" .br .ti -1c .RI "apr_status_t \fBapreq_parse_cookie_header\fP (apr_pool_t *pool, apr_table_t *jar, const char *header)" .br .ti -1c .RI "\fBapreq_cookie_t\fP * \fBapreq_cookie_make\fP (apr_pool_t *pool, const char *name, const apr_size_t nlen, const char *value, const apr_size_t vlen)" .br .ti -1c .RI "char * \fBapreq_cookie_as_string\fP (const \fBapreq_cookie_t\fP *c, apr_pool_t *p)" .br .ti -1c .RI "int \fBapreq_cookie_serialize\fP (const \fBapreq_cookie_t\fP *c, char *buf, apr_size_t len)" .br .ti -1c .RI "void \fBapreq_cookie_expires\fP (\fBapreq_cookie_t\fP *c, const char *time_str)" .br .in -1c .SH "Detailed Description" .PP Cookies and Jars\&. \fBapreq_cookie\&.h\fP describes a common server-side API for request (incoming) and response (outgoing) cookies\&. It aims towards compliance with the standard cookie specifications listed below\&. .PP \fBSee also\fP .RS 4 http://wp.netscape.com/newsref/std/cookie_spec.html .PP http://www.ietf.org/rfc/rfc2109.txt .PP http://www.ietf.org/rfc/rfc2964.txt .PP http://www.ietf.org/rfc/rfc2965.txt .RE .PP .SH "Macro Definition Documentation" .PP .SS "#define APREQ_COOKIE_MAX_LENGTH 4096" This macro is deprecated\&. .PP Maximum length of a single Set-Cookie(2) header\&. .SH "Function Documentation" .PP .SS "char* apreq_cookie_as_string (const \fBapreq_cookie_t\fP * c, apr_pool_t * p)" Returns a string that represents the cookie as it would appear in a valid 'Set-Cookie*' header\&. .PP \fBParameters\fP .RS 4 \fIc\fP cookie\&. .br \fIp\fP pool which allocates the returned string\&. .RE .PP \fBReturns\fP .RS 4 header string\&. .RE .PP .SS "void apreq_cookie_expires (\fBapreq_cookie_t\fP * c, const char * time_str)" Set the Cookie's expiration date\&. .PP \fBParameters\fP .RS 4 \fIc\fP The cookie\&. .br \fItime_str\fP If NULL, the Cookie's expiration date is unset, making it a session cookie\&. This means no 'expires' or 'max-age' attribute will appear in the cookie's serialized form\&. If time_str is not NULL, the expiration date will be reset to the offset (from now) represented by time_str\&. The time_str should be in a format that \fBapreq_atoi64t()\fP can understand, namely /[+-]?\\d+\\s*[YMDhms]/\&. .RE .PP \fBRemarks\fP .RS 4 Now time_str may also be a fixed date; see apr_date_parse_rfc() for admissible formats\&. .RE .PP .SS "static APR_INLINE void apreq_cookie_httponly_off (\fBapreq_cookie_t\fP * c)\fC [static]\fP" Turns off the cookie's HttpOnly flag\&. .SS "static APR_INLINE void apreq_cookie_httponly_on (\fBapreq_cookie_t\fP * c)\fC [static]\fP" Sets the cookie's HttpOnly flag, meaning it is not accessible through client-side script in supported browsers\&. .SS "static APR_INLINE unsigned apreq_cookie_is_httponly (const \fBapreq_cookie_t\fP * c)\fC [static]\fP" .PP \fBReturns\fP .RS 4 1 if the HttpOnly flag is set, 0 otherwise\&. .RE .PP .SS "static APR_INLINE unsigned apreq_cookie_is_secure (const \fBapreq_cookie_t\fP * c)\fC [static]\fP" .PP \fBReturns\fP .RS 4 1 if the secure flag is set, 0 otherwise\&. .RE .PP .SS "static APR_INLINE unsigned apreq_cookie_is_tainted (const \fBapreq_cookie_t\fP * c)\fC [static]\fP" .PP \fBReturns\fP .RS 4 1 if the taint flag is set, 0 otherwise\&. .RE .PP .SS "\fBapreq_cookie_t\fP* apreq_cookie_make (apr_pool_t * pool, const char * name, const apr_size_t nlen, const char * value, const apr_size_t vlen)" Returns a new cookie, made from the argument list\&. .PP \fBParameters\fP .RS 4 \fIpool\fP Pool which allocates the cookie\&. .br \fIname\fP The cookie's name\&. .br \fInlen\fP Length of name\&. .br \fIvalue\fP The cookie's value\&. .br \fIvlen\fP Length of value\&. .RE .PP \fBReturns\fP .RS 4 the new cookie .RE .PP .SS "static APR_INLINE void apreq_cookie_secure_off (\fBapreq_cookie_t\fP * c)\fC [static]\fP" Turns off the cookie's secure flag\&. .SS "static APR_INLINE void apreq_cookie_secure_on (\fBapreq_cookie_t\fP * c)\fC [static]\fP" Sets the cookie's secure flag, meaning it only comes back over an SSL-encrypted connction\&. .SS "int apreq_cookie_serialize (const \fBapreq_cookie_t\fP * c, char * buf, apr_size_t len)" Same functionality as apreq_cookie_as_string\&. Stores the string representation in buf, using up to len bytes in buf as storage\&. The return value has the same semantics as that of apr_snprintf, including the special behavior for a 'len = 0' argument\&. .PP \fBParameters\fP .RS 4 \fIc\fP cookie\&. .br \fIbuf\fP storage location for the result\&. .br \fIlen\fP size of buf's storage area\&. .RE .PP \fBReturns\fP .RS 4 size of resulting header string\&. .RE .PP .SS "static APR_INLINE void apreq_cookie_tainted_off (\fBapreq_cookie_t\fP * c)\fC [static]\fP" Turns off the cookie's tainted flag\&. .SS "static APR_INLINE void apreq_cookie_tainted_on (\fBapreq_cookie_t\fP * c)\fC [static]\fP" Sets the cookie's tainted flag\&. .SS "static APR_INLINE unsigned apreq_cookie_version (const \fBapreq_cookie_t\fP * c)\fC [static]\fP" .PP \fBReturns\fP .RS 4 1 if this is an RFC cookie, 0 if its a Netscape cookie\&. .RE .PP .SS "static APR_INLINE void apreq_cookie_version_set (\fBapreq_cookie_t\fP * c, unsigned v)\fC [static]\fP" Sets the cookie's protocol version\&. .SS "apr_status_t apreq_parse_cookie_header (apr_pool_t * pool, apr_table_t * jar, const char * header)" Parse a cookie header and store the cookies in an apr_table_t\&. .PP \fBParameters\fP .RS 4 \fIpool\fP pool which allocates the cookies .br \fIjar\fP table where parsed cookies are stored .br \fIheader\fP the header value .RE .PP \fBReturns\fP .RS 4 APR_SUCCESS\&. .PP \fBAPREQ_ERROR_BADSEQ\fP if an unparsable character sequence appears\&. .PP \fBAPREQ_ERROR_MISMATCH\fP if an rfc-cookie attribute appears in a netscape cookie header\&. .PP ::APR_ENOTIMPL if an unrecognized rfc-cookie attribute appears\&. .PP \fBAPREQ_ERROR_NOTOKEN\fP if a required token was not present\&. .PP \fBAPREQ_ERROR_BADCHAR\fP if an unexpected token was present\&. .RE .PP .SS "static APR_INLINE \fBapreq_cookie_t\fP* apreq_value_to_cookie (const char * val)\fC [static]\fP" Upgrades a jar's table values to \fBapreq_cookie_t\fP structs\&. .SH "Author" .PP Generated automatically by Doxygen for libapreq2 from the source code\&. libapreq2-2.17/docs/man/man3/apreq_cookie_t.30000644000175000017500000000255014277402434020356 0ustar jortonjorton.TH "apreq_cookie_t" 3 "Thu Aug 18 2022" "Version 2.17" "libapreq2" \" -*- nroff -*- .ad l .nh .SH NAME apreq_cookie_t \- Cookie type, supporting both Netscape and RFC cookie specifications\&. .SH SYNOPSIS .br .PP .PP \fC#include \fP .SS "Data Fields" .in +1c .ti -1c .RI "char * \fBpath\fP" .br .ti -1c .RI "char * \fBdomain\fP" .br .ti -1c .RI "char * \fBport\fP" .br .ti -1c .RI "char * \fBcomment\fP" .br .ti -1c .RI "char * \fBcommentURL\fP" .br .ti -1c .RI "apr_time_t \fBmax_age\fP" .br .ti -1c .RI "unsigned \fBflags\fP" .br .ti -1c .RI "const \fBapreq_value_t\fP \fBv\fP" .br .in -1c .SH "Detailed Description" .PP Cookie type, supporting both Netscape and RFC cookie specifications\&. .SH "Field Documentation" .PP .SS "char* apreq_cookie_t::comment" RFC cookies may send a comment .SS "char* apreq_cookie_t::commentURL" RFC cookies may place an URL here .SS "char* apreq_cookie_t::domain" Restricts server domain .SS "unsigned apreq_cookie_t::flags" charsets, taint marks, app-specific bits .SS "apr_time_t apreq_cookie_t::max_age" total duration of cookie: -1 == session .SS "char* apreq_cookie_t::path" Restricts url path .SS "char* apreq_cookie_t::port" Restricts server port .SS "const \fBapreq_value_t\fP apreq_cookie_t::v" 'raw' cookie value .SH "Author" .PP Generated automatically by Doxygen for libapreq2 from the source code\&. libapreq2-2.17/docs/man/man3/apreq_error.h.30000644000175000017500000001042514277402434020141 0ustar jortonjorton.TH "include/apreq_error.h" 3 "Thu Aug 18 2022" "Version 2.17" "libapreq2" \" -*- nroff -*- .ad l .nh .SH NAME include/apreq_error.h \- Error status codes\&. .SH SYNOPSIS .br .PP \fC#include 'apr_errno\&.h'\fP .br \fC#include 'apreq\&.h'\fP .br .SS "Macros" .in +1c .ti -1c .RI "#define \fBAPR_EBADARG\fP APR_BADARG /* XXX: don't use APR_BADARG */" .br .ti -1c .RI "#define \fBAPREQ_ERROR_GENERAL\fP APR_OS_START_USERERR" .br .ti -1c .RI "#define \fBAPREQ_ERROR_TAINTED\fP (\fBAPREQ_ERROR_GENERAL\fP + 1)" .br .ti -1c .RI "#define \fBAPREQ_ERROR_INTERRUPT\fP (\fBAPREQ_ERROR_GENERAL\fP + 2)" .br .ti -1c .RI "#define \fBAPREQ_ERROR_BADDATA\fP (\fBAPREQ_ERROR_GENERAL\fP + 10)" .br .ti -1c .RI "#define \fBAPREQ_ERROR_BADCHAR\fP (\fBAPREQ_ERROR_BADDATA\fP + 1)" .br .ti -1c .RI "#define \fBAPREQ_ERROR_BADSEQ\fP (\fBAPREQ_ERROR_BADDATA\fP + 2)" .br .ti -1c .RI "#define \fBAPREQ_ERROR_BADATTR\fP (\fBAPREQ_ERROR_BADDATA\fP + 3)" .br .ti -1c .RI "#define \fBAPREQ_ERROR_BADHEADER\fP (\fBAPREQ_ERROR_BADDATA\fP + 4)" .br .ti -1c .RI "#define \fBAPREQ_ERROR_BADUTF8\fP (\fBAPREQ_ERROR_BADDATA\fP + 5)" .br .ti -1c .RI "#define \fBAPREQ_ERROR_NODATA\fP (\fBAPREQ_ERROR_GENERAL\fP + 20)" .br .ti -1c .RI "#define \fBAPREQ_ERROR_NOTOKEN\fP (\fBAPREQ_ERROR_NODATA\fP + 1)" .br .ti -1c .RI "#define \fBAPREQ_ERROR_NOATTR\fP (\fBAPREQ_ERROR_NODATA\fP + 2)" .br .ti -1c .RI "#define \fBAPREQ_ERROR_NOHEADER\fP (\fBAPREQ_ERROR_NODATA\fP + 3)" .br .ti -1c .RI "#define \fBAPREQ_ERROR_NOPARSER\fP (\fBAPREQ_ERROR_NODATA\fP + 4)" .br .ti -1c .RI "#define \fBAPREQ_ERROR_MISMATCH\fP (\fBAPREQ_ERROR_GENERAL\fP + 30)" .br .ti -1c .RI "#define \fBAPREQ_ERROR_OVERLIMIT\fP (\fBAPREQ_ERROR_MISMATCH\fP + 1)" .br .ti -1c .RI "#define \fBAPREQ_ERROR_UNDERLIMIT\fP (\fBAPREQ_ERROR_MISMATCH\fP + 2)" .br .ti -1c .RI "#define \fBAPREQ_ERROR_NOTEMPTY\fP (\fBAPREQ_ERROR_MISMATCH\fP + 3)" .br .in -1c .SS "Functions" .in +1c .ti -1c .RI "char * \fBapreq_strerror\fP (apr_status_t s, char *buf, apr_size_t bufsize)" .br .in -1c .SH "Detailed Description" .PP Error status codes\&. Define the APREQ_ error codes\&. .SH "Macro Definition Documentation" .PP .SS "#define APR_EBADARG APR_BADARG /* XXX: don't use APR_BADARG */" Bad Arguments return value .PP \fBSee also\fP .RS 4 APR_BADARG .RE .PP .SS "#define APREQ_ERROR_BADATTR (\fBAPREQ_ERROR_BADDATA\fP + 3)" Invalid attribute\&. .SS "#define APREQ_ERROR_BADCHAR (\fBAPREQ_ERROR_BADDATA\fP + 1)" Invalid character\&. .SS "#define APREQ_ERROR_BADDATA (\fBAPREQ_ERROR_GENERAL\fP + 10)" Invalid input data\&. .SS "#define APREQ_ERROR_BADHEADER (\fBAPREQ_ERROR_BADDATA\fP + 4)" Invalid header\&. .SS "#define APREQ_ERROR_BADSEQ (\fBAPREQ_ERROR_BADDATA\fP + 2)" Invalid byte sequence\&. .SS "#define APREQ_ERROR_BADUTF8 (\fBAPREQ_ERROR_BADDATA\fP + 5)" Invalid utf8 encoding\&. .SS "#define APREQ_ERROR_GENERAL APR_OS_START_USERERR" Internal apreq error\&. .SS "#define APREQ_ERROR_INTERRUPT (\fBAPREQ_ERROR_GENERAL\fP + 2)" Parsing interrupted\&. .SS "#define APREQ_ERROR_MISMATCH (\fBAPREQ_ERROR_GENERAL\fP + 30)" Conflicting information\&. .SS "#define APREQ_ERROR_NOATTR (\fBAPREQ_ERROR_NODATA\fP + 2)" Missing attribute\&. .SS "#define APREQ_ERROR_NODATA (\fBAPREQ_ERROR_GENERAL\fP + 20)" Missing input data\&. .SS "#define APREQ_ERROR_NOHEADER (\fBAPREQ_ERROR_NODATA\fP + 3)" Missing header\&. .SS "#define APREQ_ERROR_NOPARSER (\fBAPREQ_ERROR_NODATA\fP + 4)" Missing parser\&. .SS "#define APREQ_ERROR_NOTEMPTY (\fBAPREQ_ERROR_MISMATCH\fP + 3)" Setting already configured\&. .SS "#define APREQ_ERROR_NOTOKEN (\fBAPREQ_ERROR_NODATA\fP + 1)" Missing required token\&. .SS "#define APREQ_ERROR_OVERLIMIT (\fBAPREQ_ERROR_MISMATCH\fP + 1)" Exceeds configured maximum limit\&. .SS "#define APREQ_ERROR_TAINTED (\fBAPREQ_ERROR_GENERAL\fP + 1)" Attempted to perform unsafe action with tainted data\&. .SS "#define APREQ_ERROR_UNDERLIMIT (\fBAPREQ_ERROR_MISMATCH\fP + 2)" Below configured minimum limit\&. .SH "Function Documentation" .PP .SS "char* apreq_strerror (apr_status_t s, char * buf, apr_size_t bufsize)" apreq's wrapper around apr_strerror(); recognizes APREQ_ERROR_* status codes\&. .SH "Author" .PP Generated automatically by Doxygen for libapreq2 from the source code\&. libapreq2-2.17/docs/man/man3/apreq_faq.30000644000175000017500000000016714277402434017333 0ustar jortonjorton.TH "apreq_faq" 3 "Thu Aug 18 2022" "Version 2.17" "libapreq2" \" -*- nroff -*- .ad l .nh .SH NAME apreq_faq \- FAQ libapreq2-2.17/docs/man/man3/apreq_handle_t.30000644000175000017500000000175514277402434020346 0ustar jortonjorton.TH "apreq_handle_t" 3 "Thu Aug 18 2022" "Version 2.17" "libapreq2" \" -*- nroff -*- .ad l .nh .SH NAME apreq_handle_t .SH SYNOPSIS .br .PP .PP \fC#include \fP .SS "Data Fields" .in +1c .ti -1c .RI "const struct \fBapreq_module_t\fP * \fBmodule\fP" .br .ti -1c .RI "apr_pool_t * \fBpool\fP" .br .ti -1c .RI "apr_bucket_alloc_t * \fBbucket_alloc\fP" .br .in -1c .SH "Detailed Description" .PP An apreq handle associated with a module\&. The structure may have variable size, because the module may append its own data structures after it\&. .SH "Field Documentation" .PP .SS "apr_bucket_alloc_t* apreq_handle_t::bucket_alloc" the allocator, which persists at least as long as the pool .SS "const struct \fBapreq_module_t\fP* apreq_handle_t::module" the apreq module which implements this handle .SS "apr_pool_t* apreq_handle_t::pool" the pool which defines the lifetime of the parsed data .SH "Author" .PP Generated automatically by Doxygen for libapreq2 from the source code\&. libapreq2-2.17/docs/man/man3/apreq_hook_find_param_ctx_t.30000644000175000017500000000106114277402434023077 0ustar jortonjorton.TH "apreq_hook_find_param_ctx_t" 3 "Thu Aug 18 2022" "Version 2.17" "libapreq2" \" -*- nroff -*- .ad l .nh .SH NAME apreq_hook_find_param_ctx_t .SH SYNOPSIS .br .PP .PP \fC#include \fP .SS "Data Fields" .in +1c .ti -1c .RI "const char * \fBname\fP" .br .ti -1c .RI "\fBapreq_param_t\fP * \fBparam\fP" .br .ti -1c .RI "\fBapreq_hook_t\fP * \fBprev\fP" .br .in -1c .SH "Detailed Description" .PP Context struct for the apreq_hook_find_param hook\&. .SH "Author" .PP Generated automatically by Doxygen for libapreq2 from the source code\&. libapreq2-2.17/docs/man/man3/apreq_hook_t.30000644000175000017500000000203114277402434020037 0ustar jortonjorton.TH "apreq_hook_t" 3 "Thu Aug 18 2022" "Version 2.17" "libapreq2" \" -*- nroff -*- .ad l .nh .SH NAME apreq_hook_t .SH SYNOPSIS .br .PP .PP \fC#include \fP .SS "Data Fields" .in +1c .ti -1c .RI "\fBapreq_hook_function_t\fP \fBhook\fP" .br .ti -1c .RI "\fBapreq_hook_t\fP * \fBnext\fP" .br .ti -1c .RI "apr_pool_t * \fBpool\fP" .br .ti -1c .RI "void * \fBctx\fP" .br .in -1c .SH "Detailed Description" .PP A hook is called by the parser whenever data arrives in a file upload parameter of the request body\&. You may associate any number of hooks with a parser instance with \fBapreq_parser_add_hook()\fP\&. .SH "Field Documentation" .PP .SS "void* apreq_hook_t::ctx" a user defined pointer passed to the hook function .SS "\fBapreq_hook_function_t\fP apreq_hook_t::hook" the hook function .SS "\fBapreq_hook_t\fP* apreq_hook_t::next" next item in the linked list .SS "apr_pool_t* apreq_hook_t::pool" pool which allocated this hook .SH "Author" .PP Generated automatically by Doxygen for libapreq2 from the source code\&. libapreq2-2.17/docs/man/man3/apreq_install.30000644000175000017500000000362214277402434020231 0ustar jortonjorton.TH "apreq_install" 3 "Thu Aug 18 2022" "Version 2.17" "libapreq2" \" -*- nroff -*- .ad l .nh .SH NAME apreq_install \- INSTALL .PP .nf PREREQUISITES: Please see the PREREQUISITES file. If you are building httpd-apreq-2 directly from svn, you can generate the list of prerequisites: % perl build/version_check.pl INSTRUCTIONS: FreeBSD/Solaris users must substitute "gmake" for "make" below. Unix build, where libtool/automake/autoconf works: % ./configure --with-apache2-apxs=/path/to/apache2/bin/apxs % make (optional)% make test % make install (optional)% make docs_install Or using the CPAN/perlish way (which includes the Apache2::Request and Apache2::Cookie modules): % perl Makefile.PL --with-apache2-apxs=/path/to/apache2/bin/apxs % make (optional)% make test % make install (optional)% make docs_install Developers and other folks using httpd-apreq-2 directly from svn need to execute "./buildconf" prior to running "./configure". Win32 build: C:\httpd-apreq-2> perl Makefile.PL C:\httpd-apreq-2> nmake C:\httpd-apreq-2> nmake test C:\httpd-apreq-2> nmake docs C:\httpd-apreq-2> nmake install SVN (Subversion) ACCESS Development of httpd-apreq-2 can be followed through the svn repository: $ svn checkout https://svn.apache.org/repos/asf/httpd/apreq/trunk/ httpd-apreq-2 Developers with commit access must use the https protocol instead; note that, if you are compiling svn from sources, you must supply the configure script with the appropriate switch to enable ssl. Subversion sources, and binaries for some platforms, may be obtained through the home page: https://subversion.apache.org/ Documentation on using svn is available at https://svnbook.red-bean.com/ In particular, https://svnbook.red-bean.com/en/1.0/apa.html contains a guide for users familiar with cvs. .fi .PP libapreq2-2.17/docs/man/man3/apreq_lang.30000644000175000017500000000074314277402434017505 0ustar jortonjorton.TH "apreq_lang" 3 "Thu Aug 18 2022" "Version 2.17" "libapreq2" \" -*- nroff -*- .ad l .nh .SH NAME apreq_lang \- Language Bindings .PP \- libapreq2 APIs for programming languages other than C .SH SYNOPSIS .br .PP .SS "Modules" .in +1c .ti -1c .RI "\fBPerl\fP" .br .RI "XS Modules\&. " .in -1c .SH "Detailed Description" .PP libapreq2 APIs for programming languages other than C XXX .SH "Author" .PP Generated automatically by Doxygen for libapreq2 from the source code\&. libapreq2-2.17/docs/man/man3/apreq_license.30000644000175000017500000002636314277402434020214 0ustar jortonjorton.TH "apreq_license" 3 "Thu Aug 18 2022" "Version 2.17" "libapreq2" \" -*- nroff -*- .ad l .nh .SH NAME apreq_license \- LICENSE .PP .nf Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION 1. Definitions. "License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document. "Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License. "Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. "You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License. "Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files. "Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types. "Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below). "Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof. "Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "submitted" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution." "Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work. 2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form. 3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed. 4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions: (a) You must give any other recipients of the Work or Derivative Works a copy of this License; and (b) You must cause any modified files to carry prominent notices stating that You changed the files; and (c) You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and (d) If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License. 5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions. 6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file. 7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License. 8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages. 9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. END OF TERMS AND CONDITIONS APPENDIX: How to apply the Apache License to your work. To apply the Apache License to your work, attach the following boilerplate notice, with the fields enclosed by brackets "[]" replaced with your own identifying information. (Don't include the brackets!) The text should be enclosed in the appropriate comment syntax for the file format. We also recommend that a file or class name and description of purpose be included on the same "printed page" as the copyright notice for easier identification within third-party archives. Copyright [yyyy] [name of copyright owner] Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. .fi .PP libapreq2-2.17/docs/man/man3/apreq_module.30000644000175000017500000000102514277402434020043 0ustar jortonjorton.TH "apreq_module" 3 "Thu Aug 18 2022" "Version 2.17" "libapreq2" \" -*- nroff -*- .ad l .nh .SH NAME apreq_module \- Modules .PP \- apreq2 modules included in libapreq2-2\&.17\&. .SH SYNOPSIS .br .PP .SS "Modules" .in +1c .ti -1c .RI "\fBApache 2\&.X Filter Module\fP" .br .RI "mod_apreq2 - DSO that ties libapreq2 to Apache HTTPD 2\&.X\&. " .in -1c .SH "Detailed Description" .PP apreq2 modules included in libapreq2-2\&.17\&. XXX .SH "Author" .PP Generated automatically by Doxygen for libapreq2 from the source code\&. libapreq2-2.17/docs/man/man3/apreq_module.h.30000644000175000017500000003206114277402434020275 0ustar jortonjorton.TH "include/apreq_module.h" 3 "Thu Aug 18 2022" "Version 2.17" "libapreq2" \" -*- nroff -*- .ad l .nh .SH NAME include/apreq_module.h \- Module API\&. .SH SYNOPSIS .br .PP \fC#include 'apreq_cookie\&.h'\fP .br \fC#include 'apreq_parser\&.h'\fP .br \fC#include 'apreq_error\&.h'\fP .br .SS "Data Structures" .in +1c .ti -1c .RI "struct \fBapreq_handle_t\fP" .br .ti -1c .RI "struct \fBapreq_module_t\fP" .br .RI "Vtable describing the necessary module functions\&. " .in -1c .SS "Macros" .in +1c .ti -1c .RI "#define \fBAPREQ_MODULE\fP(pre, mmn)" .br .ti -1c .RI "#define \fBapreq_cookie\fP(req, name) \fBapreq_jar_get\fP(req, name)" .br .in -1c .SS "Typedefs" .in +1c .ti -1c .RI "typedef struct \fBapreq_handle_t\fP \fBapreq_handle_t\fP" .br .ti -1c .RI "typedef struct \fBapreq_module_t\fP \fBapreq_module_t\fP" .br .RI "Vtable describing the necessary module functions\&. " .in -1c .SS "Functions" .in +1c .ti -1c .RI "static APR_INLINE unsigned \fBapreq_module_status_is_error\fP (apr_status_t s)" .br .ti -1c .RI "static APR_INLINE apr_status_t \fBapreq_jar\fP (\fBapreq_handle_t\fP *req, const apr_table_t **t)" .br .ti -1c .RI "static APR_INLINE apr_status_t \fBapreq_args\fP (\fBapreq_handle_t\fP *req, const apr_table_t **t)" .br .ti -1c .RI "static APR_INLINE apr_status_t \fBapreq_body\fP (\fBapreq_handle_t\fP *req, const apr_table_t **t)" .br .ti -1c .RI "static APR_INLINE \fBapreq_cookie_t\fP * \fBapreq_jar_get\fP (\fBapreq_handle_t\fP *req, const char *name)" .br .ti -1c .RI "static APR_INLINE \fBapreq_param_t\fP * \fBapreq_args_get\fP (\fBapreq_handle_t\fP *req, const char *name)" .br .ti -1c .RI "static APR_INLINE \fBapreq_param_t\fP * \fBapreq_body_get\fP (\fBapreq_handle_t\fP *req, const char *name)" .br .ti -1c .RI "static APR_INLINE apr_status_t \fBapreq_parser_get\fP (\fBapreq_handle_t\fP *req, const \fBapreq_parser_t\fP **parser)" .br .ti -1c .RI "static APR_INLINE apr_status_t \fBapreq_parser_set\fP (\fBapreq_handle_t\fP *req, \fBapreq_parser_t\fP *parser)" .br .ti -1c .RI "static APR_INLINE apr_status_t \fBapreq_hook_add\fP (\fBapreq_handle_t\fP *req, \fBapreq_hook_t\fP *hook)" .br .ti -1c .RI "static APR_INLINE apr_status_t \fBapreq_brigade_limit_set\fP (\fBapreq_handle_t\fP *req, apr_size_t bytes)" .br .ti -1c .RI "static APR_INLINE apr_status_t \fBapreq_brigade_limit_get\fP (\fBapreq_handle_t\fP *req, apr_size_t *bytes)" .br .ti -1c .RI "static APR_INLINE apr_status_t \fBapreq_read_limit_set\fP (\fBapreq_handle_t\fP *req, apr_uint64_t bytes)" .br .ti -1c .RI "static APR_INLINE apr_status_t \fBapreq_read_limit_get\fP (\fBapreq_handle_t\fP *req, apr_uint64_t *bytes)" .br .ti -1c .RI "static APR_INLINE apr_status_t \fBapreq_temp_dir_set\fP (\fBapreq_handle_t\fP *req, const char *path)" .br .ti -1c .RI "static APR_INLINE apr_status_t \fBapreq_temp_dir_get\fP (\fBapreq_handle_t\fP *req, const char **path)" .br .ti -1c .RI "\fBapreq_handle_t\fP * \fBapreq_handle_cgi\fP (apr_pool_t *pool)" .br .ti -1c .RI "\fBapreq_handle_t\fP * \fBapreq_handle_custom\fP (apr_pool_t *pool, const char *query_string, const char *cookie, \fBapreq_parser_t\fP *parser, apr_uint64_t read_limit, apr_bucket_brigade *in)" .br .ti -1c .RI "\fBapreq_param_t\fP * \fBapreq_param\fP (\fBapreq_handle_t\fP *req, const char *key)" .br .ti -1c .RI "apr_table_t * \fBapreq_params\fP (\fBapreq_handle_t\fP *req, apr_pool_t *p)" .br .ti -1c .RI "apr_table_t * \fBapreq_cookies\fP (\fBapreq_handle_t\fP *req, apr_pool_t *p)" .br .in -1c .SH "Detailed Description" .PP Module API\&. .SH "Macro Definition Documentation" .PP .SS "#define apreq_cookie(req, name) \fBapreq_jar_get\fP(req, name)" Find the first cookie with the specified name\&. The match is case-insensitive\&. .PP \fBParameters\fP .RS 4 \fIreq\fP request handle\&. .br \fIname\fP desired cookie name .RE .PP \fBReturns\fP .RS 4 The first matching cookie or NULL\&. .RE .PP .SS "#define APREQ_MODULE(pre, mmn)" \fBValue:\fP .PP .nf const apreq_module_t \ pre##_module = { #pre, mmn, \ pre##_jar, pre##_args, pre##_body, \ pre##_jar_get, pre##_args_get, pre##_body_get, \ pre##_parser_get, pre##_parser_set, pre##_hook_add, \ pre##_brigade_limit_get, pre##_brigade_limit_set, \ pre##_read_limit_get, pre##_read_limit_set, \ pre##_temp_dir_get, pre##_temp_dir_set, \ } .fi Convenience macro for defining a module by mapping a function prefix to an associated \fBapreq_module_t\fP structure\&. .PP \fBParameters\fP .RS 4 \fIpre\fP Prefix to define new module\&. All attributes of the \fBapreq_module_t\fP struct are defined with this as their prefix\&. The generated struct is named by appending '_module' to the prefix\&. .br \fImmn\fP Magic number (i\&.e\&. version number) of this module\&. .RE .PP .SH "Typedef Documentation" .PP .SS "typedef struct \fBapreq_handle_t\fP \fBapreq_handle_t\fP" An apreq handle associated with a module\&. The structure may have variable size, because the module may append its own data structures after it\&. .SH "Function Documentation" .PP .SS "static APR_INLINE apr_status_t apreq_args (\fBapreq_handle_t\fP * req, const apr_table_t ** t)\fC [static]\fP" Expose the parsed 'query string' associated to this handle\&. .PP \fBParameters\fP .RS 4 \fIreq\fP The request handle .br \fIt\fP The resulting table, which will either be NULL or a valid table object on return\&. .RE .PP \fBReturns\fP .RS 4 APR_SUCCESS or a module-specific error status code\&. .RE .PP .SS "static APR_INLINE \fBapreq_param_t\fP* apreq_args_get (\fBapreq_handle_t\fP * req, const char * name)\fC [static]\fP" Fetch the first query string param with the given name\&. .PP \fBParameters\fP .RS 4 \fIreq\fP The request handle .br \fIname\fP Case-insensitive param name\&. .RE .PP \fBReturns\fP .RS 4 First matching param, or NULL if none match\&. .RE .PP .SS "static APR_INLINE apr_status_t apreq_body (\fBapreq_handle_t\fP * req, const apr_table_t ** t)\fC [static]\fP" Expose the parsed 'request body' associated to this handle\&. .PP \fBParameters\fP .RS 4 \fIreq\fP The request handle .br \fIt\fP The resulting table, which will either be NULL or a valid table object on return\&. .RE .PP \fBReturns\fP .RS 4 APR_SUCCESS or a module-specific error status code\&. .RE .PP .SS "static APR_INLINE \fBapreq_param_t\fP* apreq_body_get (\fBapreq_handle_t\fP * req, const char * name)\fC [static]\fP" Fetch the first body param with the given name\&. .PP \fBParameters\fP .RS 4 \fIreq\fP The request handle .br \fIname\fP Case-insensitive cookie name\&. .RE .PP \fBReturns\fP .RS 4 First matching param, or NULL if none match\&. .RE .PP .SS "static APR_INLINE apr_status_t apreq_brigade_limit_get (\fBapreq_handle_t\fP * req, apr_size_t * bytes)\fC [static]\fP" Get the active brigade limit\&. .PP \fBParameters\fP .RS 4 \fIreq\fP The handle\&. .br \fIbytes\fP Pointer to resulting (current) limit\&. .RE .PP \fBReturns\fP .RS 4 APR_SUCCESS or a module-specific error, which may leave bytes undefined\&. .RE .PP .SS "static APR_INLINE apr_status_t apreq_brigade_limit_set (\fBapreq_handle_t\fP * req, apr_size_t bytes)\fC [static]\fP" Set the active brigade limit\&. .PP \fBParameters\fP .RS 4 \fIreq\fP The handle\&. .br \fIbytes\fP New limit to use\&. .RE .PP \fBReturns\fP .RS 4 APR_SUCCESS or module-specific error\&. .RE .PP .SS "apr_table_t* apreq_cookies (\fBapreq_handle_t\fP * req, apr_pool_t * p)" Returns a table containing all request cookies\&. .PP \fBParameters\fP .RS 4 \fIreq\fP the apreq request handle .br \fIp\fP Allocates the returned table\&. .RE .PP .SS "\fBapreq_handle_t\fP* apreq_handle_cgi (apr_pool_t * pool)" Create an apreq handle which is suitable for a CGI program\&. It reads input from stdin and writes output to stdout\&. .PP \fBParameters\fP .RS 4 \fIpool\fP Pool associated to this handle\&. .RE .PP \fBReturns\fP .RS 4 New handle; can only be NULL if the pool allocation failed\&. .RE .PP \fBRemarks\fP .RS 4 The handle gets cached in the pool's userdata, so subsequent calls will retrieve the original cached handle\&. .RE .PP .SS "\fBapreq_handle_t\fP* apreq_handle_custom (apr_pool_t * pool, const char * query_string, const char * cookie, \fBapreq_parser_t\fP * parser, apr_uint64_t read_limit, apr_bucket_brigade * in)" Create a custom apreq handle which knows only some static values\&. Useful if you want to test the parser code or if you have got data from a custom source (neither Apache 2 nor CGI)\&. .PP \fBParameters\fP .RS 4 \fIpool\fP allocates the parse data, .br \fIquery_string\fP parsed into args table .br \fIcookie\fP value of the request 'Cookie' header .br \fIparser\fP parses the request body .br \fIread_limit\fP maximum bytes to read from the body .br \fIin\fP brigade containing the request body .RE .PP \fBReturns\fP .RS 4 new handle; can only be NULL if the pool allocation failed\&. .RE .PP .SS "static APR_INLINE apr_status_t apreq_hook_add (\fBapreq_handle_t\fP * req, \fBapreq_hook_t\fP * hook)\fC [static]\fP" Add a parser hook for this request\&. .PP \fBParameters\fP .RS 4 \fIreq\fP The request handle .br \fIhook\fP Hook to add\&. .RE .PP \fBReturns\fP .RS 4 APR_SUCCESS or module-specific error\&. .RE .PP .SS "static APR_INLINE apr_status_t apreq_jar (\fBapreq_handle_t\fP * req, const apr_table_t ** t)\fC [static]\fP" Expose the parsed 'cookie' header associated to this handle\&. .PP \fBParameters\fP .RS 4 \fIreq\fP The request handle .br \fIt\fP The resulting table, which will either be NULL or a valid table object on return\&. .RE .PP \fBReturns\fP .RS 4 APR_SUCCESS or a module-specific error status code\&. .RE .PP .SS "static APR_INLINE \fBapreq_cookie_t\fP* apreq_jar_get (\fBapreq_handle_t\fP * req, const char * name)\fC [static]\fP" Fetch the first cookie with the given name\&. .PP \fBParameters\fP .RS 4 \fIreq\fP The request handle .br \fIname\fP Case-insensitive cookie name\&. .RE .PP \fBReturns\fP .RS 4 First matching cookie, or NULL if none match\&. .RE .PP .SS "static APR_INLINE unsigned apreq_module_status_is_error (apr_status_t s)\fC [static]\fP" Defines the module-specific status codes which are commonly considered to be non-fatal\&. .PP \fBParameters\fP .RS 4 \fIs\fP status code returned by an \fBapreq_module_t\fP method\&. .RE .PP \fBReturns\fP .RS 4 1 if s is fatal, 0 otherwise\&. .RE .PP .SS "\fBapreq_param_t\fP* apreq_param (\fBapreq_handle_t\fP * req, const char * key)" Find the first query string parameter or body parameter with the specified name\&. The match is case-insensitive\&. .PP \fBParameters\fP .RS 4 \fIreq\fP request handle\&. .br \fIkey\fP desired parameter name .RE .PP \fBReturns\fP .RS 4 The first matching parameter (with args searched first) or NULL\&. .RE .PP .SS "apr_table_t* apreq_params (\fBapreq_handle_t\fP * req, apr_pool_t * p)" Returns a table containing key-value pairs for the full request (args + body)\&. .PP \fBParameters\fP .RS 4 \fIreq\fP request handle .br \fIp\fP allocates the returned table\&. .RE .PP \fBReturns\fP .RS 4 table representing all available params; is never NULL\&. .RE .PP .SS "static APR_INLINE apr_status_t apreq_parser_get (\fBapreq_handle_t\fP * req, const \fBapreq_parser_t\fP ** parser)\fC [static]\fP" Fetch the active body parser\&. .PP \fBParameters\fP .RS 4 \fIreq\fP The request handle .br \fIparser\fP Points to the active parser on return\&. .RE .PP \fBReturns\fP .RS 4 APR_SUCCESS or module-specific error\&. .RE .PP .SS "static APR_INLINE apr_status_t apreq_parser_set (\fBapreq_handle_t\fP * req, \fBapreq_parser_t\fP * parser)\fC [static]\fP" Set the body parser for this request\&. .PP \fBParameters\fP .RS 4 \fIreq\fP The request handle .br \fIparser\fP New parser to use\&. .RE .PP \fBReturns\fP .RS 4 APR_SUCCESS or module-specific error\&. .RE .PP .SS "static APR_INLINE apr_status_t apreq_read_limit_get (\fBapreq_handle_t\fP * req, apr_uint64_t * bytes)\fC [static]\fP" Get the active read limit\&. .PP \fBParameters\fP .RS 4 \fIreq\fP The request handle\&. .br \fIbytes\fP Pointer to resulting (current) limit\&. .RE .PP \fBReturns\fP .RS 4 APR_SUCCESS or a module-specific error, which may leave bytes undefined\&. .RE .PP .SS "static APR_INLINE apr_status_t apreq_read_limit_set (\fBapreq_handle_t\fP * req, apr_uint64_t bytes)\fC [static]\fP" Set the active read limit\&. .PP \fBParameters\fP .RS 4 \fIreq\fP The handle\&. .br \fIbytes\fP New limit to use\&. .RE .PP \fBReturns\fP .RS 4 APR_SUCCESS or a module-specific error\&. .RE .PP .SS "static APR_INLINE apr_status_t apreq_temp_dir_get (\fBapreq_handle_t\fP * req, const char ** path)\fC [static]\fP" Get the active temp directory\&. .PP \fBParameters\fP .RS 4 \fIreq\fP The handle\&. .br \fIpath\fP Resulting path to temp dir\&. .RE .PP \fBReturns\fP .RS 4 APR_SUCCESS implies path is valid, but may also be NULL\&. Any other return value is module-specific, and may leave path undefined\&. .RE .PP .SS "static APR_INLINE apr_status_t apreq_temp_dir_set (\fBapreq_handle_t\fP * req, const char * path)\fC [static]\fP" Set the active temp directory\&. .PP \fBParameters\fP .RS 4 \fIreq\fP The handle\&. .br \fIpath\fP New path to use; may be NULL\&. .RE .PP \fBReturns\fP .RS 4 APR_SUCCESS or a module-specific error \&. .RE .PP .SH "Author" .PP Generated automatically by Doxygen for libapreq2 from the source code\&. libapreq2-2.17/docs/man/man3/apreq_module_t.30000644000175000017500000001025214277402434020370 0ustar jortonjorton.TH "apreq_module_t" 3 "Thu Aug 18 2022" "Version 2.17" "libapreq2" \" -*- nroff -*- .ad l .nh .SH NAME apreq_module_t \- Vtable describing the necessary module functions\&. .SH SYNOPSIS .br .PP .PP \fC#include \fP .SS "Data Fields" .in +1c .ti -1c .RI "const char * \fBname\fP" .br .ti -1c .RI "apr_uint32_t \fBmagic_number\fP" .br .ti -1c .RI "apr_status_t(* \fBjar\fP )(\fBapreq_handle_t\fP *, const apr_table_t **)" .br .ti -1c .RI "apr_status_t(* \fBargs\fP )(\fBapreq_handle_t\fP *, const apr_table_t **)" .br .ti -1c .RI "apr_status_t(* \fBbody\fP )(\fBapreq_handle_t\fP *, const apr_table_t **)" .br .ti -1c .RI "\fBapreq_cookie_t\fP *(* \fBjar_get\fP )(\fBapreq_handle_t\fP *, const char *)" .br .ti -1c .RI "\fBapreq_param_t\fP *(* \fBargs_get\fP )(\fBapreq_handle_t\fP *, const char *)" .br .ti -1c .RI "\fBapreq_param_t\fP *(* \fBbody_get\fP )(\fBapreq_handle_t\fP *, const char *)" .br .ti -1c .RI "apr_status_t(* \fBparser_get\fP )(\fBapreq_handle_t\fP *, const \fBapreq_parser_t\fP **)" .br .ti -1c .RI "apr_status_t(* \fBparser_set\fP )(\fBapreq_handle_t\fP *, \fBapreq_parser_t\fP *)" .br .ti -1c .RI "apr_status_t(* \fBhook_add\fP )(\fBapreq_handle_t\fP *, \fBapreq_hook_t\fP *)" .br .ti -1c .RI "apr_status_t(* \fBbrigade_limit_get\fP )(\fBapreq_handle_t\fP *, apr_size_t *)" .br .ti -1c .RI "apr_status_t(* \fBbrigade_limit_set\fP )(\fBapreq_handle_t\fP *, apr_size_t)" .br .ti -1c .RI "apr_status_t(* \fBread_limit_get\fP )(\fBapreq_handle_t\fP *, apr_uint64_t *)" .br .ti -1c .RI "apr_status_t(* \fBread_limit_set\fP )(\fBapreq_handle_t\fP *, apr_uint64_t)" .br .ti -1c .RI "apr_status_t(* \fBtemp_dir_get\fP )(\fBapreq_handle_t\fP *, const char **)" .br .ti -1c .RI "apr_status_t(* \fBtemp_dir_set\fP )(\fBapreq_handle_t\fP *, const char *)" .br .in -1c .SH "Detailed Description" .PP Vtable describing the necessary module functions\&. .SH "Field Documentation" .PP .SS "apr_status_t(* apreq_module_t::args) (\fBapreq_handle_t\fP *, const apr_table_t **)" get a table with all query string parameters .SS "\fBapreq_param_t\fP*(* apreq_module_t::args_get) (\fBapreq_handle_t\fP *, const char *)" get a query string parameter by its name .SS "apr_status_t(* apreq_module_t::body) (\fBapreq_handle_t\fP *, const apr_table_t **)" get a table with all body parameters .SS "\fBapreq_param_t\fP*(* apreq_module_t::body_get) (\fBapreq_handle_t\fP *, const char *)" get a body parameter by its name .SS "apr_status_t(* apreq_module_t::brigade_limit_get) (\fBapreq_handle_t\fP *, apr_size_t *)" determine the maximum in-memory bytes a brigade may use .SS "apr_status_t(* apreq_module_t::brigade_limit_set) (\fBapreq_handle_t\fP *, apr_size_t)" set the maximum in-memory bytes a brigade may use .SS "apr_status_t(* apreq_module_t::hook_add) (\fBapreq_handle_t\fP *, \fBapreq_hook_t\fP *)" add a hook function .SS "apr_status_t(* apreq_module_t::jar) (\fBapreq_handle_t\fP *, const apr_table_t **)" get a table with all cookies .SS "\fBapreq_cookie_t\fP*(* apreq_module_t::jar_get) (\fBapreq_handle_t\fP *, const char *)" get a cookie by its name .SS "apr_uint32_t apreq_module_t::magic_number" magic number identifying the module and version .SS "const char* apreq_module_t::name" name of this apreq module .SS "apr_status_t(* apreq_module_t::parser_get) (\fBapreq_handle_t\fP *, const \fBapreq_parser_t\fP **)" gets the parser associated with the request body .SS "apr_status_t(* apreq_module_t::parser_set) (\fBapreq_handle_t\fP *, \fBapreq_parser_t\fP *)" manually set a parser for the request body .SS "apr_status_t(* apreq_module_t::read_limit_get) (\fBapreq_handle_t\fP *, apr_uint64_t *)" determine the maximum amount of data that will be fed into a parser .SS "apr_status_t(* apreq_module_t::read_limit_set) (\fBapreq_handle_t\fP *, apr_uint64_t)" set the maximum amount of data that will be fed into a parser .SS "apr_status_t(* apreq_module_t::temp_dir_get) (\fBapreq_handle_t\fP *, const char **)" determine the directory used by the parser for temporary files .SS "apr_status_t(* apreq_module_t::temp_dir_set) (\fBapreq_handle_t\fP *, const char *)" set the directory used by the parser for temporary files .SH "Author" .PP Generated automatically by Doxygen for libapreq2 from the source code\&. libapreq2-2.17/docs/man/man3/apreq_notice.30000644000175000017500000000036714277402434020047 0ustar jortonjorton.TH "apreq_notice" 3 "Thu Aug 18 2022" "Version 2.17" "libapreq2" \" -*- nroff -*- .ad l .nh .SH NAME apreq_notice \- NOTICE .PP .nf This product includes software developed by The Apache Software Foundation (http://www.apache.org/). .fi .PP libapreq2-2.17/docs/man/man3/apreq_param.h.30000644000175000017500000001674614277402434020124 0ustar jortonjorton.TH "include/apreq_param.h" 3 "Thu Aug 18 2022" "Version 2.17" "libapreq2" \" -*- nroff -*- .ad l .nh .SH NAME include/apreq_param.h \- Request parsing and parameter API\&. .SH SYNOPSIS .br .PP \fC#include 'apreq\&.h'\fP .br \fC#include 'apr_buckets\&.h'\fP .br .SS "Data Structures" .in +1c .ti -1c .RI "struct \fBapreq_param_t\fP" .br .in -1c .SS "Typedefs" .in +1c .ti -1c .RI "typedef struct \fBapreq_param_t\fP \fBapreq_param_t\fP" .br .in -1c .SS "Functions" .in +1c .ti -1c .RI "static APR_INLINE unsigned \fBapreq_param_is_tainted\fP (const \fBapreq_param_t\fP *p)" .br .ti -1c .RI "static APR_INLINE void \fBapreq_param_tainted_on\fP (\fBapreq_param_t\fP *p)" .br .ti -1c .RI "static APR_INLINE void \fBapreq_param_tainted_off\fP (\fBapreq_param_t\fP *p)" .br .ti -1c .RI "static APR_INLINE \fBapreq_charset_t\fP \fBapreq_param_charset_set\fP (\fBapreq_param_t\fP *p, \fBapreq_charset_t\fP c)" .br .ti -1c .RI "static APR_INLINE \fBapreq_charset_t\fP \fBapreq_param_charset_get\fP (\fBapreq_param_t\fP *p)" .br .ti -1c .RI "static APR_INLINE \fBapreq_param_t\fP * \fBapreq_value_to_param\fP (const char *val)" .br .ti -1c .RI "\fBapreq_param_t\fP * \fBapreq_param_make\fP (apr_pool_t *p, const char *name, const apr_size_t nlen, const char *val, const apr_size_t vlen)" .br .ti -1c .RI "apr_status_t \fBapreq_param_decode\fP (\fBapreq_param_t\fP **param, apr_pool_t *pool, const char *word, apr_size_t nlen, apr_size_t vlen)" .br .ti -1c .RI "char * \fBapreq_param_encode\fP (apr_pool_t *pool, const \fBapreq_param_t\fP *param)" .br .ti -1c .RI "apr_status_t \fBapreq_parse_query_string\fP (apr_pool_t *pool, apr_table_t *t, const char *qs)" .br .ti -1c .RI "apr_array_header_t * \fBapreq_params_as_array\fP (apr_pool_t *p, const apr_table_t *t, const char *key)" .br .ti -1c .RI "const char * \fBapreq_params_as_string\fP (apr_pool_t *p, const apr_table_t *t, const char *key, \fBapreq_join_t\fP mode)" .br .ti -1c .RI "const apr_table_t * \fBapreq_uploads\fP (const apr_table_t *body, apr_pool_t *pool)" .br .ti -1c .RI "const \fBapreq_param_t\fP * \fBapreq_upload\fP (const apr_table_t *body, const char *name)" .br .in -1c .SH "Detailed Description" .PP Request parsing and parameter API\&. .SH "Typedef Documentation" .PP .SS "typedef struct \fBapreq_param_t\fP \fBapreq_param_t\fP" Common data structure for params and file uploads .SH "Function Documentation" .PP .SS "static APR_INLINE \fBapreq_charset_t\fP apreq_param_charset_get (\fBapreq_param_t\fP * p)\fC [static]\fP" Gets the character encoding for this parameter\&. .SS "static APR_INLINE \fBapreq_charset_t\fP apreq_param_charset_set (\fBapreq_param_t\fP * p, \fBapreq_charset_t\fP c)\fC [static]\fP" Sets the character encoding for this parameter\&. .SS "apr_status_t apreq_param_decode (\fBapreq_param_t\fP ** param, apr_pool_t * pool, const char * word, apr_size_t nlen, apr_size_t vlen)" Url-decodes a name=value pair into a param\&. .PP \fBParameters\fP .RS 4 \fIparam\fP points to the decoded parameter on success .br \fIpool\fP Pool from which the param is allocated\&. .br \fIword\fP Start of the name=value pair\&. .br \fInlen\fP Length of urlencoded name\&. .br \fIvlen\fP Length of urlencoded value\&. .RE .PP \fBReturns\fP .RS 4 APR_SUCCESS on success\&. .PP \fBAPREQ_ERROR_BADSEQ\fP or \fBAPREQ_ERROR_BADCHAR\fP on malformed input\&. .RE .PP \fBRemarks\fP .RS 4 Unless vlen == 0, this function assumes there is exactly one character ('=') which separates the pair\&. .RE .PP .SS "char* apreq_param_encode (apr_pool_t * pool, const \fBapreq_param_t\fP * param)" Url-encodes the param into a name-value pair\&. .PP \fBParameters\fP .RS 4 \fIpool\fP Pool which allocates the returned string\&. .br \fIparam\fP Param to encode\&. .RE .PP \fBReturns\fP .RS 4 name-value pair representing the param\&. .RE .PP .SS "static APR_INLINE unsigned apreq_param_is_tainted (const \fBapreq_param_t\fP * p)\fC [static]\fP" .PP \fBReturns\fP .RS 4 1 if the taint flag is set, 0 otherwise\&. .RE .PP .SS "\fBapreq_param_t\fP* apreq_param_make (apr_pool_t * p, const char * name, const apr_size_t nlen, const char * val, const apr_size_t vlen)" creates a param from name/value information .SS "static APR_INLINE void apreq_param_tainted_off (\fBapreq_param_t\fP * p)\fC [static]\fP" Turns off the taint flag\&. .SS "static APR_INLINE void apreq_param_tainted_on (\fBapreq_param_t\fP * p)\fC [static]\fP" Sets the tainted flag\&. .SS "apr_array_header_t* apreq_params_as_array (apr_pool_t * p, const apr_table_t * t, const char * key)" Returns an array of parameters (\fBapreq_param_t\fP *) matching the given key\&. The key is case-insensitive\&. .PP \fBParameters\fP .RS 4 \fIp\fP Allocates the returned array\&. .br \fIt\fP the parameter table returned by \fBapreq_args()\fP, \fBapreq_body()\fP or \fBapreq_params()\fP .br \fIkey\fP Null-terminated search key, case insensitive\&. key==NULL fetches all parameters\&. .RE .PP \fBReturns\fP .RS 4 an array of apreq_param_t* (pointers) .RE .PP \fBRemarks\fP .RS 4 Also parses the request if necessary\&. .RE .PP .SS "const char* apreq_params_as_string (apr_pool_t * p, const apr_table_t * t, const char * key, \fBapreq_join_t\fP mode)" Returns a ', ' -joined string containing all parameters for the requested key, an empty string if none are found\&. The key is case-insensitive\&. .PP \fBParameters\fP .RS 4 \fIp\fP Allocates the return string\&. .br \fIt\fP the parameter table returned by \fBapreq_args()\fP, \fBapreq_body()\fP or \fBapreq_params()\fP .br \fIkey\fP Null-terminated parameter name, case insensitive\&. key==NULL fetches all values\&. .br \fImode\fP Join type- see \fBapreq_join()\fP\&. .RE .PP \fBReturns\fP .RS 4 the joined string or NULL on error .RE .PP \fBRemarks\fP .RS 4 Also parses the request if necessary\&. .RE .PP .SS "apr_status_t apreq_parse_query_string (apr_pool_t * pool, apr_table_t * t, const char * qs)" Parse a url-encoded string into a param table\&. .PP \fBParameters\fP .RS 4 \fIpool\fP pool used to allocate the param data\&. .br \fIt\fP table to which the params are added\&. .br \fIqs\fP Query string to url-decode\&. .RE .PP \fBReturns\fP .RS 4 APR_SUCCESS if successful, error otherwise\&. .RE .PP \fBRemarks\fP .RS 4 This function uses [&;] as the set of tokens to delineate words, and will treat a word w/o '=' as a name-value pair with value-length = 0\&. .RE .PP .SS "const \fBapreq_param_t\fP* apreq_upload (const apr_table_t * body, const char * name)" Returns the first param in req->body which has both param->v\&.name matching key (case insensitive) and param->upload != NULL\&. .PP \fBParameters\fP .RS 4 \fIbody\fP parameter table returned by \fBapreq_body()\fP or \fBapreq_params()\fP .br \fIname\fP Parameter name\&. key == NULL returns first upload\&. .RE .PP \fBReturns\fP .RS 4 Corresponding upload, NULL if none found\&. .RE .PP \fBRemarks\fP .RS 4 Will parse the request as necessary\&. .RE .PP .SS "const apr_table_t* apreq_uploads (const apr_table_t * body, apr_pool_t * pool)" Returns a table of all params in req->body with non-NULL upload brigades\&. .PP \fBParameters\fP .RS 4 \fIbody\fP parameter table returned by \fBapreq_body()\fP or \fBapreq_params()\fP .br \fIpool\fP Pool which allocates the table struct\&. .RE .PP \fBReturns\fP .RS 4 Upload table\&. .RE .PP \fBRemarks\fP .RS 4 Will parse the request if necessary\&. .RE .PP .SS "static APR_INLINE \fBapreq_param_t\fP* apreq_value_to_param (const char * val)\fC [static]\fP" Upgrades args and body table values to \fBapreq_param_t\fP structs\&. .SH "Author" .PP Generated automatically by Doxygen for libapreq2 from the source code\&. libapreq2-2.17/docs/man/man3/apreq_param_t.30000644000175000017500000000163014277402434020203 0ustar jortonjorton.TH "apreq_param_t" 3 "Thu Aug 18 2022" "Version 2.17" "libapreq2" \" -*- nroff -*- .ad l .nh .SH NAME apreq_param_t .SH SYNOPSIS .br .PP .PP \fC#include \fP .SS "Data Fields" .in +1c .ti -1c .RI "apr_table_t * \fBinfo\fP" .br .ti -1c .RI "apr_bucket_brigade * \fBupload\fP" .br .ti -1c .RI "unsigned \fBflags\fP" .br .ti -1c .RI "const \fBapreq_value_t\fP \fBv\fP" .br .in -1c .SH "Detailed Description" .PP Common data structure for params and file uploads .SH "Field Documentation" .PP .SS "unsigned apreq_param_t::flags" charsets, taint marks, app-specific bits .SS "apr_table_t* apreq_param_t::info" header table associated with the param .SS "apr_bucket_brigade* apreq_param_t::upload" brigade used to spool upload files .SS "const \fBapreq_value_t\fP apreq_param_t::v" underlying name/value info .SH "Author" .PP Generated automatically by Doxygen for libapreq2 from the source code\&. libapreq2-2.17/docs/man/man3/apreq_parser.h.30000644000175000017500000002421614277402434020307 0ustar jortonjorton.TH "include/apreq_parser.h" 3 "Thu Aug 18 2022" "Version 2.17" "libapreq2" \" -*- nroff -*- .ad l .nh .SH NAME include/apreq_parser.h \- Request body parser API\&. .SH SYNOPSIS .br .PP \fC#include 'apreq_param\&.h'\fP .br .SS "Data Structures" .in +1c .ti -1c .RI "struct \fBapreq_hook_t\fP" .br .ti -1c .RI "struct \fBapreq_parser_t\fP" .br .ti -1c .RI "struct \fBapreq_hook_find_param_ctx_t\fP" .br .in -1c .SS "Macros" .in +1c .ti -1c .RI "#define \fBAPREQ_PARSER_ARGS\fP" .br .ti -1c .RI "#define \fBAPREQ_HOOK_ARGS\fP" .br .ti -1c .RI "#define \fBAPREQ_DECLARE_PARSER\fP(f)" .br .ti -1c .RI "#define \fBAPREQ_DECLARE_HOOK\fP(f)" .br .in -1c .SS "Typedefs" .in +1c .ti -1c .RI "typedef struct \fBapreq_hook_t\fP \fBapreq_hook_t\fP" .br .ti -1c .RI "typedef struct \fBapreq_parser_t\fP \fBapreq_parser_t\fP" .br .ti -1c .RI "typedef apr_status_t(* \fBapreq_parser_function_t\fP) (\fBAPREQ_PARSER_ARGS\fP)" .br .ti -1c .RI "typedef apr_status_t(* \fBapreq_hook_function_t\fP) (\fBAPREQ_HOOK_ARGS\fP)" .br .ti -1c .RI "typedef struct \fBapreq_hook_find_param_ctx_t\fP \fBapreq_hook_find_param_ctx_t\fP" .br .in -1c .SS "Functions" .in +1c .ti -1c .RI "static APR_INLINE apr_status_t \fBapreq_parser_run\fP (struct \fBapreq_parser_t\fP *psr, apr_table_t *t, apr_bucket_brigade *bb)" .br .ti -1c .RI "static APR_INLINE apr_status_t \fBapreq_hook_run\fP (struct \fBapreq_hook_t\fP *h, \fBapreq_param_t\fP *param, apr_bucket_brigade *bb)" .br .ti -1c .RI "\fBAPREQ_DECLARE_PARSER\fP (apreq_parse_headers)" .br .ti -1c .RI "\fBAPREQ_DECLARE_PARSER\fP (apreq_parse_urlencoded)" .br .ti -1c .RI "\fBAPREQ_DECLARE_PARSER\fP (apreq_parse_multipart)" .br .ti -1c .RI "\fBAPREQ_DECLARE_PARSER\fP (apreq_parse_generic)" .br .ti -1c .RI "\fBAPREQ_DECLARE_HOOK\fP (apreq_hook_apr_xml_parser)" .br .ti -1c .RI "\fBapreq_parser_t\fP * \fBapreq_parser_make\fP (apr_pool_t *pool, apr_bucket_alloc_t *ba, const char *content_type, \fBapreq_parser_function_t\fP pfn, apr_size_t brigade_limit, const char *temp_dir, \fBapreq_hook_t\fP *hook, void *ctx)" .br .ti -1c .RI "\fBapreq_hook_t\fP * \fBapreq_hook_make\fP (apr_pool_t *pool, \fBapreq_hook_function_t\fP hook, \fBapreq_hook_t\fP *next, void *ctx)" .br .ti -1c .RI "apr_status_t \fBapreq_parser_add_hook\fP (\fBapreq_parser_t\fP *p, \fBapreq_hook_t\fP *h)" .br .ti -1c .RI "\fBapreq_parser_function_t\fP \fBapreq_parser\fP (const char *enctype)" .br .ti -1c .RI "apr_status_t \fBapreq_register_parser\fP (const char *enctype, \fBapreq_parser_function_t\fP pfn)" .br .ti -1c .RI "\fBAPREQ_DECLARE_HOOK\fP (apreq_hook_disable_uploads)" .br .ti -1c .RI "\fBAPREQ_DECLARE_HOOK\fP (apreq_hook_discard_brigade)" .br .ti -1c .RI "\fBAPREQ_DECLARE_HOOK\fP (apreq_hook_find_param)" .br .in -1c .SH "Detailed Description" .PP Request body parser API\&. .SH "Macro Definition Documentation" .PP .SS "#define APREQ_DECLARE_HOOK(f)" \fBValue:\fP .PP .nf APREQ_DECLARE_NONSTD(apr_status_t) \ f (APREQ_HOOK_ARGS) .fi Declares an API hook\&. .SS "#define APREQ_DECLARE_PARSER(f)" \fBValue:\fP .PP .nf APREQ_DECLARE_NONSTD(apr_status_t) \ f (APREQ_PARSER_ARGS) .fi Declares a API parser\&. .SS "#define APREQ_HOOK_ARGS" \fBValue:\fP .PP .nf apreq_hook_t *hook, \ apreq_param_t *param, \ apr_bucket_brigade *bb .fi Hook arguments .SS "#define APREQ_PARSER_ARGS" \fBValue:\fP .PP .nf apreq_parser_t *parser, \ apr_table_t *t, \ apr_bucket_brigade *bb .fi Parser arguments\&. .SH "Typedef Documentation" .PP .SS "typedef struct \fBapreq_hook_find_param_ctx_t\fP \fBapreq_hook_find_param_ctx_t\fP" Context struct for the apreq_hook_find_param hook\&. .SS "typedef apr_status_t(* apreq_hook_function_t) (\fBAPREQ_HOOK_ARGS\fP)" The callback function of a hook\&. See \fBapreq_hook_t\fP\&. .SS "typedef struct \fBapreq_hook_t\fP \fBapreq_hook_t\fP" A hook is called by the parser whenever data arrives in a file upload parameter of the request body\&. You may associate any number of hooks with a parser instance with \fBapreq_parser_add_hook()\fP\&. .SS "typedef apr_status_t(* apreq_parser_function_t) (\fBAPREQ_PARSER_ARGS\fP)" The callback function implementing a request body parser\&. .SS "typedef struct \fBapreq_parser_t\fP \fBapreq_parser_t\fP" A request body parser instance\&. .SH "Function Documentation" .PP .SS "APREQ_DECLARE_HOOK (apreq_hook_apr_xml_parser)" apr_xml_parser hook\&. It will parse until EOS appears\&. The parsed document isn't available until parsing has completed successfully\&. The hook's ctx pointer may be cast as (apr_xml_doc **) to retrieve the parsed document\&. .SS "APREQ_DECLARE_HOOK (apreq_hook_disable_uploads)" Returns APREQ_ERROR_GENERAL\&. Effectively disables mfd parser if a file-upload field is present\&. .SS "APREQ_DECLARE_HOOK (apreq_hook_discard_brigade)" Calls apr_brigade_cleanup on the incoming brigade after passing the brigade to any subsequent hooks\&. .SS "APREQ_DECLARE_HOOK (apreq_hook_find_param)" Special purpose utility for locating a parameter during parsing\&. The hook's ctx should be initialized to an \fBapreq_hook_find_param_ctx_t\fP *, with the name attribute set to the sought parameter name, the param attribute set to NULL, and the prev attribute set to the address of the previous hook\&. The param attribute will be reassigned to the first param found, and once that happens this hook is immediately removed from the chain\&. .PP \fBRemarks\fP .RS 4 When used, this should always be the first hook invoked, so add it manually with ctx->prev = &parser->hook instead of using apreq_parser_add_hook\&. .RE .PP .SS "APREQ_DECLARE_PARSER (apreq_parse_generic)" Generic parser\&. No table entries will be added to the req->body table by this parser\&. The parser creates a dummy \fBapreq_param_t\fP to pass to any configured hooks\&. If no hooks are configured, the dummy param's bb slot will contain a copy of the request body\&. It can be retrieved by casting the parser's ctx pointer to (\fBapreq_param_t\fP **)\&. .SS "APREQ_DECLARE_PARSER (apreq_parse_headers)" RFC 822 Header parser\&. It will reject all data after the first CRLF CRLF sequence (an empty line)\&. See \fBapreq_parser_run()\fP for more info on rejected data\&. .SS "APREQ_DECLARE_PARSER (apreq_parse_multipart)" RFC 2388 multipart/form-data (and XForms 1\&.0 multipart/related) parser\&. It will reject any buckets representing preamble and postamble text (this is normal behavior, not an error condition)\&. See \fBapreq_parser_run()\fP for more info on rejected data\&. .SS "APREQ_DECLARE_PARSER (apreq_parse_urlencoded)" RFC 2396 application/x-www-form-urlencoded parser\&. .SS "\fBapreq_hook_t\fP* apreq_hook_make (apr_pool_t * pool, \fBapreq_hook_function_t\fP hook, \fBapreq_hook_t\fP * next, void * ctx)" Construct a hook\&. .PP \fBParameters\fP .RS 4 \fIpool\fP used to allocate the hook\&. .br \fIhook\fP The hook function\&. .br \fInext\fP List of other hooks for this hook to call on\&. .br \fIctx\fP Hook's internal scratch pad\&. .RE .PP \fBReturns\fP .RS 4 New hook\&. .RE .PP .SS "static APR_INLINE apr_status_t apreq_hook_run (struct \fBapreq_hook_t\fP * h, \fBapreq_param_t\fP * param, apr_bucket_brigade * bb)\fC [static]\fP" Run the hook with the current parameter and the incoming bucket brigade\&. The hook may modify the brigade if necessary\&. Once all hooks have completed, the contents of the brigade will be added to the parameter's bb attribute\&. .PP \fBReturns\fP .RS 4 APR_SUCCESS on success\&. All other values represent errors\&. .RE .PP .SS "\fBapreq_parser_function_t\fP apreq_parser (const char * enctype)" Fetch the default parser function associated with the given MIME type\&. .PP \fBParameters\fP .RS 4 \fIenctype\fP The desired enctype (can also be a full 'Content-Type' header)\&. .RE .PP \fBReturns\fP .RS 4 The parser function, or NULL if the enctype is unrecognized\&. .RE .PP .SS "apr_status_t apreq_parser_add_hook (\fBapreq_parser_t\fP * p, \fBapreq_hook_t\fP * h)" Add a new hook to the end of the parser's hook list\&. .PP \fBParameters\fP .RS 4 \fIp\fP Parser\&. .br \fIh\fP Hook to append\&. .RE .PP .SS "\fBapreq_parser_t\fP* apreq_parser_make (apr_pool_t * pool, apr_bucket_alloc_t * ba, const char * content_type, \fBapreq_parser_function_t\fP pfn, apr_size_t brigade_limit, const char * temp_dir, \fBapreq_hook_t\fP * hook, void * ctx)" Construct a parser\&. .PP \fBParameters\fP .RS 4 \fIpool\fP Pool used to allocate the parser\&. .br \fIba\fP bucket allocator used to create bucket brigades .br \fIcontent_type\fP Content-type that this parser can deal with\&. .br \fIpfn\fP The parser function\&. .br \fIbrigade_limit\fP the maximum in-memory bytes a brigade may use .br \fItemp_dir\fP the directory used by the parser for temporary files .br \fIhook\fP Hooks to associate this parser with\&. .br \fIctx\fP Parser's internal scratch pad\&. .RE .PP \fBReturns\fP .RS 4 New parser\&. .RE .PP .SS "static APR_INLINE apr_status_t apreq_parser_run (struct \fBapreq_parser_t\fP * psr, apr_table_t * t, apr_bucket_brigade * bb)\fC [static]\fP" Parse the incoming brigade into a table\&. Parsers normally consume all the buckets of the brigade during parsing\&. However parsers may leave 'rejected' data in the brigade, even during a successful parse, so callers may need to clean up the brigade themselves (in particular, rejected buckets should not be passed back to the parser again)\&. .PP \fBRemarks\fP .RS 4 bb == NULL is valid: the parser should return its public status: APR_INCOMPLETE, APR_SUCCESS, or an error code\&. .RE .PP .SS "apr_status_t apreq_register_parser (const char * enctype, \fBapreq_parser_function_t\fP pfn)" Register a new parsing function with a MIME enctype\&. Registered parsers are added to \fBapreq_parser()\fP's internal lookup table\&. .PP \fBParameters\fP .RS 4 \fIenctype\fP The MIME type\&. .br \fIpfn\fP The function to use during parsing\&. Setting parser == NULL will remove an existing parser\&. .RE .PP \fBReturns\fP .RS 4 APR_SUCCESS or error\&. .RE .PP .SH "Author" .PP Generated automatically by Doxygen for libapreq2 from the source code\&. libapreq2-2.17/docs/man/man3/apreq_parser_t.30000644000175000017500000000274014277402434020402 0ustar jortonjorton.TH "apreq_parser_t" 3 "Thu Aug 18 2022" "Version 2.17" "libapreq2" \" -*- nroff -*- .ad l .nh .SH NAME apreq_parser_t .SH SYNOPSIS .br .PP .PP \fC#include \fP .SS "Data Fields" .in +1c .ti -1c .RI "\fBapreq_parser_function_t\fP \fBparser\fP" .br .ti -1c .RI "const char * \fBcontent_type\fP" .br .ti -1c .RI "apr_pool_t * \fBpool\fP" .br .ti -1c .RI "apr_bucket_alloc_t * \fBbucket_alloc\fP" .br .ti -1c .RI "apr_size_t \fBbrigade_limit\fP" .br .ti -1c .RI "const char * \fBtemp_dir\fP" .br .ti -1c .RI "\fBapreq_hook_t\fP * \fBhook\fP" .br .ti -1c .RI "void * \fBctx\fP" .br .in -1c .SH "Detailed Description" .PP A request body parser instance\&. .SH "Field Documentation" .PP .SS "apr_size_t apreq_parser_t::brigade_limit" the maximum in-memory bytes a brigade may use .SS "apr_bucket_alloc_t* apreq_parser_t::bucket_alloc" bucket allocator used to create bucket brigades .SS "const char* apreq_parser_t::content_type" the Content-Type request header .SS "void* apreq_parser_t::ctx" internal context pointer used by the parser function .SS "\fBapreq_hook_t\fP* apreq_parser_t::hook" linked list of hooks .SS "\fBapreq_parser_function_t\fP apreq_parser_t::parser" the function which parses chunks of body data .SS "apr_pool_t* apreq_parser_t::pool" a pool which outlasts the bucket_alloc\&. .SS "const char* apreq_parser_t::temp_dir" the directory for generating temporary files .SH "Author" .PP Generated automatically by Doxygen for libapreq2 from the source code\&. libapreq2-2.17/docs/man/man3/apreq_util.h.30000644000175000017500000003430414277402434017767 0ustar jortonjorton.TH "include/apreq_util.h" 3 "Thu Aug 18 2022" "Version 2.17" "libapreq2" \" -*- nroff -*- .ad l .nh .SH NAME include/apreq_util.h \- Utility functions for apreq\&. .SH SYNOPSIS .br .PP \fC#include 'apr_file_io\&.h'\fP .br \fC#include 'apr_buckets\&.h'\fP .br \fC#include 'apreq\&.h'\fP .br .SS "Functions" .in +1c .ti -1c .RI "char * \fBapreq_join\fP (apr_pool_t *p, const char *sep, const apr_array_header_t *arr, \fBapreq_join_t\fP mode)" .br .ti -1c .RI "apr_ssize_t \fBapreq_index\fP (const char *hay, apr_size_t hlen, const char *ndl, apr_size_t nlen, const \fBapreq_match_t\fP type)" .br .ti -1c .RI "apr_size_t \fBapreq_quote\fP (char *dest, const char *src, const apr_size_t slen)" .br .ti -1c .RI "apr_size_t \fBapreq_quote_once\fP (char *dest, const char *src, const apr_size_t slen)" .br .ti -1c .RI "apr_size_t \fBapreq_encode\fP (char *dest, const char *src, const apr_size_t slen)" .br .ti -1c .RI "apr_size_t \fBapreq_cp1252_to_utf8\fP (char *dest, const char *src, apr_size_t slen)" .br .ti -1c .RI "\fBapreq_charset_t\fP \fBapreq_charset_divine\fP (const char *src, apr_size_t slen)" .br .ti -1c .RI "apr_status_t \fBapreq_decode\fP (char *dest, apr_size_t *dlen, const char *src, apr_size_t slen)" .br .ti -1c .RI "apr_status_t \fBapreq_decodev\fP (char *dest, apr_size_t *dlen, struct iovec *v, int nelts)" .br .ti -1c .RI "static APR_INLINE char * \fBapreq_escape\fP (apr_pool_t *p, const char *src, const apr_size_t slen)" .br .ti -1c .RI "static APR_INLINE apr_ssize_t \fBapreq_unescape\fP (char *str)" .br .ti -1c .RI "apr_int64_t \fBapreq_atoi64f\fP (const char *s)" .br .ti -1c .RI "apr_int64_t \fBapreq_atoi64t\fP (const char *s)" .br .ti -1c .RI "apr_status_t \fBapreq_brigade_fwrite\fP (apr_file_t *f, apr_off_t *wlen, apr_bucket_brigade *bb)" .br .ti -1c .RI "apr_status_t \fBapreq_file_mktemp\fP (apr_file_t **fp, apr_pool_t *pool, const char *path)" .br .ti -1c .RI "static APR_INLINE apr_status_t \fBapreq_brigade_setaside\fP (apr_bucket_brigade *bb, apr_pool_t *p)" .br .ti -1c .RI "static APR_INLINE apr_status_t \fBapreq_brigade_copy\fP (apr_bucket_brigade *d, apr_bucket_brigade *s)" .br .ti -1c .RI "static APR_INLINE void \fBapreq_brigade_move\fP (apr_bucket_brigade *d, apr_bucket_brigade *s, apr_bucket *e)" .br .ti -1c .RI "apr_status_t \fBapreq_header_attribute\fP (const char *hdr, const char *name, const apr_size_t nlen, const char **val, apr_size_t *vlen)" .br .ti -1c .RI "apr_status_t \fBapreq_brigade_concat\fP (apr_pool_t *pool, const char *temp_dir, apr_size_t brigade_limit, apr_bucket_brigade *out, apr_bucket_brigade *in)" .br .ti -1c .RI "apr_file_t * \fBapreq_brigade_spoolfile\fP (apr_bucket_brigade *bb)" .br .in -1c .SH "Detailed Description" .PP Utility functions for apreq\&. This header contains useful functions for creating new parsers, hooks or modules\&. It includes .PP .IP "\(bu" 2 string <-> array converters .IP "\(bu" 2 substring search functions .IP "\(bu" 2 simple encoders & decoders for urlencoded strings .IP "\(bu" 2 simple time, date, & file-size converters .PP .SH "Function Documentation" .PP .SS "apr_int64_t apreq_atoi64f (const char * s)" Converts file sizes (KMG) to bytes .PP \fBParameters\fP .RS 4 \fIs\fP file size matching m/^\\d+[KMG]b?$/i .RE .PP \fBReturns\fP .RS 4 64-bit integer representation of s\&. .RE .PP \fBTodo\fP .RS 4 What happens when s is malformed? Should this return an unsigned value instead? .RE .PP .SS "apr_int64_t apreq_atoi64t (const char * s)" Converts time strings (YMDhms) to seconds .PP \fBParameters\fP .RS 4 \fIs\fP time string matching m/^\\+?\\d+[YMDhms]$/ .RE .PP \fBReturns\fP .RS 4 64-bit integer representation of s as seconds\&. .RE .PP \fBTodo\fP .RS 4 What happens when s is malformed? Should this return an unsigned value instead? .RE .PP .SS "apr_status_t apreq_brigade_concat (apr_pool_t * pool, const char * temp_dir, apr_size_t brigade_limit, apr_bucket_brigade * out, apr_bucket_brigade * in)" Concatenates the brigades, spooling large brigades into a tempfile (APREQ_SPOOL) bucket\&. .PP \fBParameters\fP .RS 4 \fIpool\fP Pool for creating a tempfile bucket\&. .br \fItemp_dir\fP Directory for tempfile creation\&. .br \fIbrigade_limit\fP If out's length would exceed this value, the appended buckets get written to a tempfile\&. .br \fIout\fP Resulting brigade\&. .br \fIin\fP Brigade to append\&. .RE .PP \fBReturns\fP .RS 4 APR_SUCCESS\&. .PP Error status code resulting from either apr_brigade_length(), \fBapreq_file_mktemp()\fP, \fBapreq_brigade_fwrite()\fP, or apr_file_seek()\&. .RE .PP \fBTodo\fP .RS 4 Flesh out these error codes, making them as explicit as possible\&. .RE .PP .SS "static APR_INLINE apr_status_t apreq_brigade_copy (apr_bucket_brigade * d, apr_bucket_brigade * s)\fC [static]\fP" Copy a brigade\&. .PP \fBParameters\fP .RS 4 \fId\fP (destination) Copied buckets are appended to this brigade\&. .br \fIs\fP (source) Brigade to copy from\&. .RE .PP \fBReturns\fP .RS 4 APR_SUCCESS\&. .PP Error status code from an unsuccessful apr_bucket_copy()\&. .RE .PP \fBRemarks\fP .RS 4 s == d produces Undefined Behavior\&. .RE .PP .SS "apr_status_t apreq_brigade_fwrite (apr_file_t * f, apr_off_t * wlen, apr_bucket_brigade * bb)" Writes brigade to a file\&. .PP \fBParameters\fP .RS 4 \fIf\fP File that gets the brigade\&. .br \fIwlen\fP On a successful return, wlen holds the length of the brigade, which is the amount of data written to the file\&. .br \fIbb\fP Bucket brigade\&. .RE .PP \fBReturns\fP .RS 4 APR_SUCCESS\&. .PP Error status code from either an unsuccessful apr_bucket_read(), or a failed apr_file_writev()\&. .RE .PP \fBRemarks\fP .RS 4 This function leaks a bucket brigade into bb->p whenever the final bucket in bb is a spool bucket\&. .RE .PP .SS "static APR_INLINE void apreq_brigade_move (apr_bucket_brigade * d, apr_bucket_brigade * s, apr_bucket * e)\fC [static]\fP" Move the front of a brigade\&. .PP \fBParameters\fP .RS 4 \fId\fP (destination) Append buckets to this brigade\&. .br \fIs\fP (source) Brigade to take buckets from\&. .br \fIe\fP First bucket of s after the move\&. All buckets before e are appended to d\&. .RE .PP \fBRemarks\fP .RS 4 This moves all buckets when e == APR_BRIGADE_SENTINEL(s)\&. .RE .PP .SS "static APR_INLINE apr_status_t apreq_brigade_setaside (apr_bucket_brigade * bb, apr_pool_t * p)\fC [static]\fP" Set aside all buckets in the brigade\&. .PP \fBParameters\fP .RS 4 \fIbb\fP Brigade\&. .br \fIp\fP Setaside buckets into this pool\&. .RE .PP \fBReturns\fP .RS 4 APR_SUCCESS\&. .PP Error status code from an unsuccessful apr_bucket_setaside()\&. .RE .PP .SS "apr_file_t* apreq_brigade_spoolfile (apr_bucket_brigade * bb)" Determines the spool file used by the brigade\&. Returns NULL if the brigade is not spooled in a file (does not use an APREQ_SPOOL bucket)\&. .PP \fBParameters\fP .RS 4 \fIbb\fP the bucket brigade .RE .PP \fBReturns\fP .RS 4 the spool file, or NULL\&. .RE .PP .SS "\fBapreq_charset_t\fP apreq_charset_divine (const char * src, apr_size_t slen)" Heuristically determine the charset of a string\&. .PP \fBParameters\fP .RS 4 \fIsrc\fP String to scan\&. .br \fIslen\fP Length of string\&. .RE .PP \fBReturns\fP .RS 4 APREQ_CHARSET_ASCII if the string contains only 7-bit chars; .PP APREQ_CHARSET_UTF8 if the string is a valid utf8 byte sequence; .PP APREQ_CHARSET_LATIN1 if the string has no control chars; .PP APREQ_CHARSET_CP1252 if the string has control chars\&. .RE .PP .SS "apr_size_t apreq_cp1252_to_utf8 (char * dest, const char * src, apr_size_t slen)" Convert a string from cp1252 to utf8\&. Caller must ensure it is large enough to hold the encoded string and trailing '\\0'\&. .PP \fBParameters\fP .RS 4 \fIdest\fP Location of utf8-encoded result string\&. Caller must ensure it is large enough to hold the encoded string and trailing '\\0'\&. .br \fIsrc\fP Original string\&. .br \fIslen\fP Length of original string\&. .RE .PP \fBReturns\fP .RS 4 length of utf8-encoded string in dest; does not exceed 3 * slen\&. .RE .PP .SS "apr_status_t apreq_decode (char * dest, apr_size_t * dlen, const char * src, apr_size_t slen)" Url-decodes a string\&. .PP \fBParameters\fP .RS 4 \fIdest\fP Location of url-encoded result string\&. Caller must ensure dest is large enough to hold the encoded string and trailing null character\&. .br \fIdlen\fP points to resultant length of url-decoded string in dest .br \fIsrc\fP Original string\&. .br \fIslen\fP Length of original string\&. .RE .PP \fBReturns\fP .RS 4 APR_SUCCESS\&. .PP APR_INCOMPLETE if the string ends in the middle of an escape sequence\&. .PP \fBAPREQ_ERROR_BADSEQ\fP or \fBAPREQ_ERROR_BADCHAR\fP on malformed input\&. .RE .PP \fBRemarks\fP .RS 4 In the non-success case, dlen will be set to include the last successfully decoded value\&. This function decodes %uXXXX into a utf8 (wide) character, following ECMA-262 (the Javascript spec) Section B\&.2\&.1\&. .RE .PP .SS "apr_status_t apreq_decodev (char * dest, apr_size_t * dlen, struct iovec * v, int nelts)" Url-decodes an iovec array\&. .PP \fBParameters\fP .RS 4 \fIdest\fP Location of url-encoded result string\&. Caller must ensure dest is large enough to hold the encoded string and trailing null character\&. .br \fIdlen\fP Resultant length of dest\&. .br \fIv\fP Array of iovecs that represent the source string .br \fInelts\fP Number of iovecs in the array\&. .RE .PP \fBReturns\fP .RS 4 APR_SUCCESS\&. .PP APR_INCOMPLETE if the iovec ends in the middle of an escape sequence\&. .PP \fBAPREQ_ERROR_BADSEQ\fP or \fBAPREQ_ERROR_BADCHAR\fP on malformed input\&. .RE .PP \fBRemarks\fP .RS 4 In the non-APR_SUCCESS case, dlen will be set to include the last successfully decoded value\&. This function decodes %uXXXX into a utf8 (wide) character, following ECMA-262 (the Javascript spec) Section B\&.2\&.1\&. .RE .PP .SS "apr_size_t apreq_encode (char * dest, const char * src, const apr_size_t slen)" Url-encodes a string\&. .PP \fBParameters\fP .RS 4 \fIdest\fP Location of url-encoded result string\&. Caller must ensure it is large enough to hold the encoded string and trailing '\\0'\&. .br \fIsrc\fP Original string\&. .br \fIslen\fP Length of original string\&. .RE .PP \fBReturns\fP .RS 4 length of url-encoded string in dest; does not exceed 3 * slen\&. .RE .PP .SS "static APR_INLINE char* apreq_escape (apr_pool_t * p, const char * src, const apr_size_t slen)\fC [static]\fP" Returns an url-encoded copy of a string\&. .PP \fBParameters\fP .RS 4 \fIp\fP Pool used to allocate the return value\&. .br \fIsrc\fP Original string\&. .br \fIslen\fP Length of original string\&. .RE .PP \fBReturns\fP .RS 4 The url-encoded string\&. .RE .PP \fBRemarks\fP .RS 4 Use this function insead of apreq_encode if its caller might otherwise overflow dest\&. .RE .PP .SS "apr_status_t apreq_file_mktemp (apr_file_t ** fp, apr_pool_t * pool, const char * path)" Makes a temporary file\&. .PP \fBParameters\fP .RS 4 \fIfp\fP Points to the temporary apr_file_t on success\&. .br \fIpool\fP Pool to associate with the temp file\&. When the pool is destroyed, the temp file will be closed and deleted\&. .br \fIpath\fP The base directory which will contain the temp file\&. If param == NULL, the directory will be selected via tempnam()\&. See the tempnam manpage for details\&. .RE .PP \fBReturns\fP .RS 4 APR_SUCCESS\&. .PP Error status code from unsuccessful apr_filepath_merge(), or a failed apr_file_mktemp()\&. .RE .PP .SS "apr_status_t apreq_header_attribute (const char * hdr, const char * name, const apr_size_t nlen, const char ** val, apr_size_t * vlen)" Search a header string for the value of a particular named attribute\&. .PP \fBParameters\fP .RS 4 \fIhdr\fP Header string to scan\&. .br \fIname\fP Name of attribute to search for\&. .br \fInlen\fP Length of name\&. .br \fIval\fP Location of (first) matching value\&. .br \fIvlen\fP Length of matching value\&. .RE .PP \fBReturns\fP .RS 4 APR_SUCCESS\&. .PP \fBAPREQ_ERROR_NOATTR\fP if the attribute is not found\&. .PP \fBAPREQ_ERROR_BADSEQ\fP if an unpaired quote mark was detected\&. .RE .PP .SS "apr_ssize_t apreq_index (const char * hay, apr_size_t hlen, const char * ndl, apr_size_t nlen, const \fBapreq_match_t\fP type)" Returns offset of match string's location, or -1 if no match is found\&. .PP \fBParameters\fP .RS 4 \fIhay\fP Location of bytes to scan\&. .br \fIhlen\fP Number of bytes available for scanning\&. .br \fIndl\fP Search string .br \fInlen\fP Length of search string\&. .br \fItype\fP Match type\&. .RE .PP \fBReturns\fP .RS 4 Offset of match string, or -1 if no match is found\&. .RE .PP .SS "char* apreq_join (apr_pool_t * p, const char * sep, const apr_array_header_t * arr, \fBapreq_join_t\fP mode)" Join an array of values\&. The result is an empty string if there are no values\&. .PP \fBParameters\fP .RS 4 \fIp\fP Pool to allocate return value\&. .br \fIsep\fP String that is inserted between the joined values\&. .br \fIarr\fP Array of \fBapreq_value_t\fP entries\&. .br \fImode\fP Join type- see apreq_join_t\&. .RE .PP \fBReturns\fP .RS 4 Joined string, or NULL on error .RE .PP .SS "apr_size_t apreq_quote (char * dest, const char * src, const apr_size_t slen)" Places a quoted copy of src into dest\&. Embedded quotes are escaped with a backslash ('\\')\&. .PP \fBParameters\fP .RS 4 \fIdest\fP Location of quoted copy\&. Must be large enough to hold the copy and trailing null byte\&. .br \fIsrc\fP Original string\&. .br \fIslen\fP Length of original string\&. .br \fIdest\fP Destination string\&. .RE .PP \fBReturns\fP .RS 4 length of quoted copy in dest\&. .RE .PP .SS "apr_size_t apreq_quote_once (char * dest, const char * src, const apr_size_t slen)" Same as \fBapreq_quote()\fP except when src begins and ends in quote marks\&. In that case it assumes src is quoted correctly, and just copies src to dest\&. .PP \fBParameters\fP .RS 4 \fIdest\fP Location of quoted copy\&. Must be large enough to hold the copy and trailing null byte\&. .br \fIsrc\fP Original string\&. .br \fIslen\fP Length of original string\&. .br \fIdest\fP Destination string\&. .RE .PP \fBReturns\fP .RS 4 length of quoted copy in dest\&. .RE .PP .SS "static APR_INLINE apr_ssize_t apreq_unescape (char * str)\fC [static]\fP" An \fIin-situ\fP url-decoder\&. .PP \fBParameters\fP .RS 4 \fIstr\fP The string to decode .RE .PP \fBReturns\fP .RS 4 Length of decoded string, or < 0 on error\&. .RE .PP .SH "Author" .PP Generated automatically by Doxygen for libapreq2 from the source code\&. libapreq2-2.17/docs/man/man3/apreq_value_t.30000644000175000017500000000235714277402434020226 0ustar jortonjorton.TH "apreq_value_t" 3 "Thu Aug 18 2022" "Version 2.17" "libapreq2" \" -*- nroff -*- .ad l .nh .SH NAME apreq_value_t \- libapreq's pre-extensible string type .SH SYNOPSIS .br .PP .PP \fC#include \fP .SS "Data Fields" .in +1c .ti -1c .RI "char * \fBname\fP" .br .ti -1c .RI "apr_size_t \fBnlen\fP" .br .ti -1c .RI "apr_size_t \fBdlen\fP" .br .ti -1c .RI "char \fBdata\fP [1]" .br .in -1c .SH "Detailed Description" .PP libapreq's pre-extensible string type .PP \fBExamples\fP .in +1c \fB/home/jorton/src/asf/libapreq\-v2\&.17/include/apreq\&.h\fP\&. .SH "Field Documentation" .PP .SS "char apreq_value_t::data[1]" value data .br .PP \fBExamples\fP .in +1c \fB/home/jorton/src/asf/libapreq\-v2\&.17/include/apreq\&.h\fP\&. .SS "apr_size_t apreq_value_t::dlen" length of data .PP \fBExamples\fP .in +1c \fB/home/jorton/src/asf/libapreq\-v2\&.17/include/apreq\&.h\fP\&. .SS "char* apreq_value_t::name" value name .PP \fBExamples\fP .in +1c \fB/home/jorton/src/asf/libapreq\-v2\&.17/include/apreq\&.h\fP\&. .SS "apr_size_t apreq_value_t::nlen" length of name .PP \fBExamples\fP .in +1c \fB/home/jorton/src/asf/libapreq\-v2\&.17/include/apreq\&.h\fP\&. .SH "Author" .PP Generated automatically by Doxygen for libapreq2 from the source code\&. libapreq2-2.17/docs/man/man3/apreq_version.h.30000644000175000017500000000540514277402434020477 0ustar jortonjorton.TH "include/apreq_version.h" 3 "Thu Aug 18 2022" "Version 2.17" "libapreq2" \" -*- nroff -*- .ad l .nh .SH NAME include/apreq_version.h \- Versioning API for libapreq\&. .SH SYNOPSIS .br .PP \fC#include 'apr_version\&.h'\fP .br \fC#include 'apreq\&.h'\fP .br .SS "Macros" .in +1c .ti -1c .RI "#define \fBAPREQ_MAJOR_VERSION\fP 2" .br .ti -1c .RI "#define \fBAPREQ_MINOR_VERSION\fP 8" .br .ti -1c .RI "#define \fBAPREQ_PATCH_VERSION\fP 1" .br .ti -1c .RI "#define \fBAPREQ_VERSION_STRING\fP" .br .ti -1c .RI "#define \fBAPREQ_IS_DEV_STRING\fP ''" .br .in -1c .SS "Functions" .in +1c .ti -1c .RI "void \fBapreq_version\fP (apr_version_t *pvsn)" .br .ti -1c .RI "const char * \fBapreq_version_string\fP (void)" .br .in -1c .SH "Detailed Description" .PP Versioning API for libapreq\&. There are several different mechanisms for accessing the version\&. There is a string form, and a set of numbers; in addition, there are constants which can be compiled into your application, and you can query the library being used for its actual version\&. .PP Note that it is possible for an application to detect that it has been compiled against a different version of libapreq by use of the compile-time constants and the use of the run-time query function\&. .PP libapreq version numbering follows the guidelines specified in: .PP .nf http://apr.apache.org/versioning.html .fi .PP .SH "Macro Definition Documentation" .PP .SS "#define APREQ_IS_DEV_STRING ''" Internal: string form of the 'is dev' flag .SS "#define APREQ_MAJOR_VERSION 2" major version Major API changes that could cause compatibility problems for older programs such as structure size changes\&. No binary compatibility is possible across a change in the major version\&. .SS "#define APREQ_MINOR_VERSION 8" Minor API changes that do not cause binary compatibility problems\&. Should be reset to 0 when upgrading APREQ_MAJOR_VERSION .SS "#define APREQ_PATCH_VERSION 1" patch level .SS "#define APREQ_VERSION_STRING" \fBValue:\fP .PP .nf APR_STRINGIFY(APREQ_MAJOR_VERSION) "\&." \ APR_STRINGIFY(APREQ_MINOR_VERSION) "\&." \ APR_STRINGIFY(APREQ_PATCH_VERSION) \ APREQ_IS_DEV_STRING .fi This symbol is defined for internal, 'development' copies of libapreq\&. This symbol will be #undef'd for releases\&. The formatted string of libapreq's version .SH "Function Documentation" .PP .SS "void apreq_version (apr_version_t * pvsn)" Return libapreq's version information information in a numeric form\&. .PP \fBParameters\fP .RS 4 \fIpvsn\fP Pointer to a version structure for returning the version information\&. .RE .PP .SS "const char* apreq_version_string (void)" Return libapreq's version information as a string\&. .SH "Author" .PP Generated automatically by Doxygen for libapreq2 from the source code\&. libapreq2-2.17/docs/man/man3/apreq_xs.30000644000175000017500000000130714277402434017213 0ustar jortonjorton.TH "apreq_xs" 3 "Thu Aug 18 2022" "Version 2.17" "libapreq2" \" -*- nroff -*- .ad l .nh .SH NAME apreq_xs \- Perl .PP \- XS Modules\&. .SH SYNOPSIS .br .PP .SS "Modules" .in +1c .ti -1c .RI "\fBApache2::Request\fP" .br .ti -1c .RI "\fBApache2::Upload\fP" .br .ti -1c .RI "\fBApache2::Cookie\fP" .br .ti -1c .RI "\fBAPR::Request\fP" .br .ti -1c .RI "\fBAPR::Request::Cookie\fP" .br .ti -1c .RI "\fBAPR::Request::Param\fP" .br .ti -1c .RI "\fBAPR::Request::Error\fP" .br .ti -1c .RI "\fBAPR::Request::CGI\fP" .br .ti -1c .RI "\fBAPR::Request::Apache2\fP" .br .in -1c .SH "Detailed Description" .PP XS Modules\&. .SH "Author" .PP Generated automatically by Doxygen for libapreq2 from the source code\&. libapreq2-2.17/docs/man/man3/apreq_xs_apr_request.30000644000175000017500000000044514277402434021627 0ustar jortonjorton.TH "apreq_xs_apr_request" 3 "Thu Aug 18 2022" "Version 2.17" "libapreq2" \" -*- nroff -*- .ad l .nh .SH NAME apreq_xs_apr_request \- APR::Request .SH SYNOPSIS .br .PP .SH "Detailed Description" .PP .SH "Author" .PP Generated automatically by Doxygen for libapreq2 from the source code\&. libapreq2-2.17/docs/man/man3/apreq_xs_apr_request_apache2.30000644000175000017500000000047614277402434023216 0ustar jortonjorton.TH "apreq_xs_apr_request_apache2" 3 "Thu Aug 18 2022" "Version 2.17" "libapreq2" \" -*- nroff -*- .ad l .nh .SH NAME apreq_xs_apr_request_apache2 \- APR::Request::Apache2 .SH SYNOPSIS .br .PP .SH "Detailed Description" .PP .SH "Author" .PP Generated automatically by Doxygen for libapreq2 from the source code\&. libapreq2-2.17/docs/man/man3/apreq_xs_apr_request_cgi.30000644000175000017500000000046214277402434022450 0ustar jortonjorton.TH "apreq_xs_apr_request_cgi" 3 "Thu Aug 18 2022" "Version 2.17" "libapreq2" \" -*- nroff -*- .ad l .nh .SH NAME apreq_xs_apr_request_cgi \- APR::Request::CGI .SH SYNOPSIS .br .PP .SH "Detailed Description" .PP .SH "Author" .PP Generated automatically by Doxygen for libapreq2 from the source code\&. libapreq2-2.17/docs/man/man3/apreq_xs_apr_request_cookie.30000644000175000017500000000047314277402434023161 0ustar jortonjorton.TH "apreq_xs_apr_request_cookie" 3 "Thu Aug 18 2022" "Version 2.17" "libapreq2" \" -*- nroff -*- .ad l .nh .SH NAME apreq_xs_apr_request_cookie \- APR::Request::Cookie .SH SYNOPSIS .br .PP .SH "Detailed Description" .PP .SH "Author" .PP Generated automatically by Doxygen for libapreq2 from the source code\&. libapreq2-2.17/docs/man/man3/apreq_xs_apr_request_error.30000644000175000017500000000047014277402434023036 0ustar jortonjorton.TH "apreq_xs_apr_request_error" 3 "Thu Aug 18 2022" "Version 2.17" "libapreq2" \" -*- nroff -*- .ad l .nh .SH NAME apreq_xs_apr_request_error \- APR::Request::Error .SH SYNOPSIS .br .PP .SH "Detailed Description" .PP .SH "Author" .PP Generated automatically by Doxygen for libapreq2 from the source code\&. libapreq2-2.17/docs/man/man3/apreq_xs_apr_request_param.30000644000175000017500000000047014277402434023005 0ustar jortonjorton.TH "apreq_xs_apr_request_param" 3 "Thu Aug 18 2022" "Version 2.17" "libapreq2" \" -*- nroff -*- .ad l .nh .SH NAME apreq_xs_apr_request_param \- APR::Request::Param .SH SYNOPSIS .br .PP .SH "Detailed Description" .PP .SH "Author" .PP Generated automatically by Doxygen for libapreq2 from the source code\&. libapreq2-2.17/docs/man/man3/apreq_xs_cookie.30000644000175000017500000000043614277402434020546 0ustar jortonjorton.TH "apreq_xs_cookie" 3 "Thu Aug 18 2022" "Version 2.17" "libapreq2" \" -*- nroff -*- .ad l .nh .SH NAME apreq_xs_cookie \- Apache2::Cookie .SH SYNOPSIS .br .PP .SH "Detailed Description" .PP .SH "Author" .PP Generated automatically by Doxygen for libapreq2 from the source code\&. libapreq2-2.17/docs/man/man3/apreq_xs_request.30000644000175000017500000000044114277402434020761 0ustar jortonjorton.TH "apreq_xs_request" 3 "Thu Aug 18 2022" "Version 2.17" "libapreq2" \" -*- nroff -*- .ad l .nh .SH NAME apreq_xs_request \- Apache2::Request .SH SYNOPSIS .br .PP .SH "Detailed Description" .PP .SH "Author" .PP Generated automatically by Doxygen for libapreq2 from the source code\&. libapreq2-2.17/docs/man/man3/apreq_xs_upload.30000644000175000017500000000043614277402434020561 0ustar jortonjorton.TH "apreq_xs_upload" 3 "Thu Aug 18 2022" "Version 2.17" "libapreq2" \" -*- nroff -*- .ad l .nh .SH NAME apreq_xs_upload \- Apache2::Upload .SH SYNOPSIS .br .PP .SH "Detailed Description" .PP .SH "Author" .PP Generated automatically by Doxygen for libapreq2 from the source code\&. libapreq2-2.17/docs/man/man3/libapreq2.30000644000175000017500000000256514277402434017261 0ustar jortonjorton.TH "libapreq2" 3 "Thu Aug 18 2022" "Version 2.17" "libapreq2" \" -*- nroff -*- .ad l .nh .SH NAME libapreq2 \- Apache Request Library .PP \- libapreq2 Version 2\&.8\&.1 .SH SYNOPSIS .br .PP .SS "Files" .in +1c .ti -1c .RI "file \fBapreq\&.h\fP" .br .RI "Main header file\&.\&.\&. " .ti -1c .RI "file \fBapreq_cookie\&.h\fP" .br .RI "Cookies and Jars\&. " .ti -1c .RI "file \fBapreq_error\&.h\fP" .br .RI "Error status codes\&. " .ti -1c .RI "file \fBapreq_module\&.h\fP" .br .RI "Module API\&. " .ti -1c .RI "file \fBapreq_param\&.h\fP" .br .RI "Request parsing and parameter API\&. " .ti -1c .RI "file \fBapreq_parser\&.h\fP" .br .RI "Request body parser API\&. " .ti -1c .RI "file \fBapreq_util\&.h\fP" .br .RI "Utility functions for apreq\&. " .ti -1c .RI "file \fBapreq_version\&.h\fP" .br .RI "Versioning API for libapreq\&. " .in -1c .SH "Detailed Description" .PP libapreq2 Version 2\&.8\&.1 libapreq2 is a shared library based on the Apache Portable Runtime libraries libapr and libaprutil\&. .PP \fBSee also\fP .RS 4 http://apr.apache.org/ .RE .PP .SH "Configuring libapreq2 Applications" .PP This package includes \fCapreq2-config\fP, a configuration script for building applications with libapreq2\&. Run \fCapreq2-config --help\fP to display its options\&. XXX add examples here XXX .SH "Author" .PP Generated automatically by Doxygen for libapreq2 from the source code\&. libapreq2-2.17/docs/man/man3/mod_apreq2.30000644000175000017500000001105214277402434017420 0ustar jortonjorton.TH "mod_apreq2" 3 "Thu Aug 18 2022" "Version 2.17" "libapreq2" \" -*- nroff -*- .ad l .nh .SH NAME mod_apreq2 \- Apache 2\&.X Filter Module .PP \- mod_apreq2 - DSO that ties libapreq2 to Apache HTTPD 2\&.X\&. .SH SYNOPSIS .br .PP .SS "Macros" .in +1c .ti -1c .RI "#define \fBAPREQ_FILTER_NAME\fP 'apreq2'" .br .ti -1c .RI "#define \fBAPREQ_APACHE2_MMN\fP 20101207" .br .in -1c .SS "Functions" .in +1c .ti -1c .RI "\fBapreq_handle_t\fP * \fBapreq_handle_apache2\fP (request_rec *r)" .br .ti -1c .RI "\fBAPR_DECLARE_OPTIONAL_FN\fP (\fBapreq_handle_t\fP *, \fBapreq_handle_apache2\fP,(request_rec *r))" .br .in -1c .SH "Detailed Description" .PP mod_apreq2 - DSO that ties libapreq2 to Apache HTTPD 2\&.X\&. mod_apreq2 provides the 'APREQ2' input filter for using libapreq2 (and allow its parsed data structures to be shared) within the Apache 2\&.X webserver\&. Using it, libapreq2 works properly in every phase of the HTTP request, from translation handlers to output filters, and even for subrequests / internal redirects\&. .PP .PP .PP .SS "Activating mod_apreq2 in Apache 2\&.X" .PP The installation process triggered by \fC% make install\fP \fIwill not modify your webserver's config file\fP\&. Hence, be sure you activate it on startup by adding a LoadModule directive to your webserver config; e\&.g\&. .PP .PP .nf LoadModule apreq_module modules/mod_apreq2\&.so .fi .PP .PP The mod_apreq2 filter is named 'apreq2', and may be used in Apache's input filter directives, e\&.g\&. .PP .nf AddInputFilter apreq2 # or SetInputFilter apreq2 .fi .PP .PP However, this is not required because libapreq2 will add the filter (only) if it's necessary\&. You just need to ensure that your module invokes \fBapreq_handle_apache2()\fP \fIbefore the content handler ultimately reads from the input filter chain\fP\&. It is important to realize that no matter how the input filters are initially arranged, the APREQ2 filter will attempt to reposition itself to be the last input filter to read the data\&. .PP If you want to use other input filters to transform the incoming HTTP request data, is important to register those filters with Apache as having type AP_FTYPE_CONTENT_SET or AP_FTYPE_RESOURCE\&. Due to the limitations of Apache's current input filter design, types higher than AP_FTYPE_CONTENT_SET may not work properly whenever the apreq filter is active\&. .PP This is especially true when a content handler uses libapreq2 to parse some of the post data before doing an internal redirect\&. Any input filter subsequently added to the redirected request will bypass the original apreq filter (and therefore lose access to some of the original post data), unless its type is less than the type of the apreq filter (currently AP_FTYPE_PROTOCOL-1)\&. .PP .SS "Server Configuration Directives" .PP Per-directory commands for mod_apreq2Directive Context DefaultDescription APREQ2_ReadLimit directory \fBAPREQ_DEFAULT_READ_LIMIT\fP Maximum number of bytes mod_apreq2 will send off to libapreq2 for parsing\&. mod_apreq2 will log this event and subsequently remove itself from the filter chain\&. APREQ2_BrigadeLimit directory \fBAPREQ_DEFAULT_BRIGADE_LIMIT\fP Maximum number of bytes mod_apreq2 will let accumulate within the heap-buckets in a brigade\&. Excess data will be spooled to an appended file bucket\&. APREQ2_TempDir directory NULL Sets the location of the temporary directory apreq will use to spool overflow brigade data (based on the APREQ2_BrigadeLimit setting)\&. If left unset, libapreq2 will select a platform-specific location via apr_temp_dir_get()\&. .PP .SS "Implementation Details" .PP .PP .nf XXX apreq as a normal input filter XXX apreq as a 'virtual' content handler\&. XXX apreq as a transparent 'tee'\&. XXX apreq parser registration in post_config .fi .PP .SH "Macro Definition Documentation" .PP .SS "#define APREQ_APACHE2_MMN 20101207" The Apache2 Module Magic Number for use in the Apache 2\&.x module structures This gets bumped if changes in th4e API will break third party applications using this apache2 module .PP \fBSee also\fP .RS 4 \fBAPREQ_MODULE\fP .RE .PP .SS "#define APREQ_FILTER_NAME 'apreq2'" The mod_apreq2 filter is named 'apreq2', and may be used in Apache's input filter directives, e\&.g\&. .PP .nf AddInputFilter apreq2 # or SetInputFilter apreq2 .fi .PP See above .SH "Function Documentation" .PP .SS "\fBapreq_handle_t\fP* apreq_handle_apache2 (request_rec * r)" Create an apreq handle which communicates with an Apache 2\&.X request_rec\&. .SH "Author" .PP Generated automatically by Doxygen for libapreq2 from the source code\&. libapreq2-2.17/docs/man/man3/todo.30000644000175000017500000000117114277402434016335 0ustar jortonjorton.TH "todo" 3 "Thu Aug 18 2022" "Version 2.17" "libapreq2" \" -*- nroff -*- .ad l .nh .SH NAME todo \- Todo List .IP "\fBGlobal \fBapreq_atoi64f\fP (const char *s)\fP" 1c What happens when s is malformed? Should this return an unsigned value instead? .IP "\fBGlobal \fBapreq_atoi64t\fP (const char *s)\fP" 1c What happens when s is malformed? Should this return an unsigned value instead? .IP "\fBGlobal \fBapreq_brigade_concat\fP (apr_pool_t *pool, const char *temp_dir, apr_size_t brigade_limit, apr_bucket_brigade *out, apr_bucket_brigade *in)\fP" 1c Flesh out these error codes, making them as explicit as possible\&. .PP libapreq2-2.17/FAQ.pod0000644000175000017500000000505014277401734014060 0ustar jortonjorton=head1 Issues during installation. [...] =head1 Using libapreq2 with Apache2 and mod_perl2. =head2 I keep getting "undefined symbol" errors whenever I use Apache2::Request or APR::Request::Apache2. You need to load mod_apreq2.so at server startup, which grabs all the required symbols at server startup. Be sure your server config contains a line like LoadModule apreq_module modules/mod_apreq2.so =head2 When I use Apache2::Request in my output filter, it seems to lose the incoming POST variables. The problem is likely that the mod_apreq2 filter has not been added to the input filter chain in time to read the POST data. There are two solutions to this problem: 1) Write a filter init handler for you filter that instantiates an Apache2::Request object. http://perl.apache.org/docs/2.0/api/Apache2/Filter.html#C_FilterInitHandler_ 2) Use .htaccess or your server config to ensure the apreq input filter is active for this request with "AddInputFilter APREQ" or somesuch. We recommend using (1), and falling back to (2) until you get (1) working. =head2 When I try to upload a file, why do I get this error "[error] Can't locate .../Apache2/Request/upload.al in @INC"? I is now a separate module in apreq2, so you need to C to load the C function. This also applies to "Can't locate auto/APR/Request/Param/slurp.al in @INC". This is because I is implement by wrapping the I packages. =head1 Using libapreq2 outside of Apache. [...] =head1 Contributing to apreq development. =head2 How is the subversion repository managed? apreq's repository is broken into three subdirectories: /trunk - the current codebase for active development. /tags - release snapshots. /branches - where older releases and experimental development lines live. apreq follows a Commit-then-Review policy for its entire repository, but being a shared library places certain restrictions on the admissible changes for stable trees. Basically the header files cannot be modified; only new functions and structures may be added to them. Any time that happens, the minor-version needs to be bumped, and the patch-level gets reset to zero. Changes that only modify the library's implementation (.c) files require a bump to the patch-level. On stable trees, this version tracking should happen on each commit, to make auditing easy for other developers without resorting to a draconian Review-then-Commit policy. libapreq2-2.17/glue/Makefile.am0000644000175000017500000000121114277401734015730 0ustar jortonjortonEXTRA_DIST = perl dist-hook: perl_config: cd perl; @PERL@ ../../build/xsbuilder.pl run perl/Makefile: perl/xsbuilder perl/Makefile.PL cd perl; @PERL@ @PERL_OPTS@ Makefile.PL -apxs @APACHE2_APXS@ @MM_OPTS@ perl_glue: perl/Makefile cd perl; $(MAKE) perl_test: perl/Makefile cd perl; $(MAKE) test perl_install: cd perl; INSTALL=1 @PERL@ @PERL_OPTS@ Makefile.PL -apxs @APACHE2_APXS@ @MM_OPTS@ cd perl; $(MAKE) install perl_clean: -cd perl; $(MAKE) clean if BUILD_PERL_GLUE all-local: perl_glue install-exec-local: perl_install clean-local: perl_clean test: perl_test else all-local: install-exec-local: clean-local: test: endif libapreq2-2.17/glue/Makefile.in0000644000175000017500000003260614277402427015755 0ustar jortonjorton# 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@ 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 = glue ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/include/apreq_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 am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) am__DIST_COMMON = $(srcdir)/Makefile.in README DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ APACHE1_APXS = @APACHE1_APXS@ APACHE2_APXS = @APACHE2_APXS@ APACHE2_HTTPD = @APACHE2_HTTPD@ APACHE2_INCLUDES = @APACHE2_INCLUDES@ APACHE2_SRC = @APACHE2_SRC@ APREQ_CONFIG = @APREQ_CONFIG@ APREQ_DOTTED_VERSION = @APREQ_DOTTED_VERSION@ APREQ_LIBNAME = @APREQ_LIBNAME@ APREQ_LIBTOOL_VERSION = @APREQ_LIBTOOL_VERSION@ APREQ_MAJOR_VERSION = @APREQ_MAJOR_VERSION@ APR_CONFIG = @APR_CONFIG@ APR_DOC_VERSION = @APR_DOC_VERSION@ APR_INCLUDES = @APR_INCLUDES@ APR_LA = @APR_LA@ APR_LDFLAGS = @APR_LDFLAGS@ APR_LIBS = @APR_LIBS@ APR_LTFLAGS = @APR_LTFLAGS@ APU_CONFIG = @APU_CONFIG@ APU_DOC_VERSION = @APU_DOC_VERSION@ APU_LA = @APU_LA@ AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPPFLAGS = @CPPFLAGS@ CSCOPE = @CSCOPE@ CTAGS = @CTAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ 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@ GREP = @GREP@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ MM_OPTS = @MM_OPTS@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ 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@ PERL = @PERL@ PERL_OPTS = @PERL_OPTS@ RANLIB = @RANLIB@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ TAR = @TAR@ VERSION = @VERSION@ 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_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@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ 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@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ EXTRA_DIST = perl all: all-am .SUFFIXES: $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(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 glue/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu glue/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: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(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 $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$(top_distdir)" distdir="$(distdir)" \ dist-hook check-am: all-am check: check-am all-am: Makefile all-local 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 clean-local 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-exec-local 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 all-local check check-am clean clean-generic \ clean-libtool clean-local cscopelist-am ctags-am dist-hook \ 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-exec-local 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 dist-hook: perl_config: cd perl; @PERL@ ../../build/xsbuilder.pl run perl/Makefile: perl/xsbuilder perl/Makefile.PL cd perl; @PERL@ @PERL_OPTS@ Makefile.PL -apxs @APACHE2_APXS@ @MM_OPTS@ perl_glue: perl/Makefile cd perl; $(MAKE) perl_test: perl/Makefile cd perl; $(MAKE) test perl_install: cd perl; INSTALL=1 @PERL@ @PERL_OPTS@ Makefile.PL -apxs @APACHE2_APXS@ @MM_OPTS@ cd perl; $(MAKE) install perl_clean: -cd perl; $(MAKE) clean @BUILD_PERL_GLUE_TRUE@all-local: perl_glue @BUILD_PERL_GLUE_TRUE@install-exec-local: perl_install @BUILD_PERL_GLUE_TRUE@clean-local: perl_clean @BUILD_PERL_GLUE_TRUE@test: perl_test @BUILD_PERL_GLUE_FALSE@all-local: @BUILD_PERL_GLUE_FALSE@install-exec-local: @BUILD_PERL_GLUE_FALSE@clean-local: @BUILD_PERL_GLUE_FALSE@test: # 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: libapreq2-2.17/glue/perl/lib/Apache2/Cookie.pm0000644000175000017500000003124214277401734020425 0ustar jortonjortonpackage Apache2::Cookie; use APR::Table; use APR::Pool; use APR::Request::Cookie; use APR::Request::Apache2; use APR::Request qw/encode decode/; use Apache2::RequestRec; use Apache2::RequestUtil; use overload '""' => sub { shift->as_string() }, fallback => 1; push our @ISA, "APR::Request::Cookie"; our $VERSION = "2.17"; sub new { my ($class, $r, %attrs) = @_; my ($name) = grep {defined} delete $attrs{name} , delete $attrs{-name}; my ($value) = grep {defined} delete $attrs{value}, delete $attrs{-value}; return unless defined $name and defined $value; my $cookie = $class->make($r->pool, $name, $class->freeze($value)); while(my ($k, $v) = each %attrs) { $k =~ s/^-//; $cookie->$k($v); } return $cookie; } sub fetch { my $class = shift; my $req = shift; unless (defined $req) { my $usage = 'Usage: Apache2::Cookie->fetch($r): missing argument $r'; $req = eval {Apache2::RequestUtil->request} or die <request failed: $@. EOD } $req = APR::Request::Apache2->handle($req) unless $req->isa("APR::Request"); my $jar = $req->jar or return; $jar->cookie_class(__PACKAGE__); return $jar->get(shift) if @_; return wantarray ? %$jar : $jar; } sub set_attr { my ($cookie, %attrs) = @_; while (my ($k, $v) = each %attrs) { $k =~ s/^-//; $cookie->$k($v); } } sub freeze { my ($class, $value) = @_; die 'Usage: Apache2::Cookie->freeze($value)' unless @_ == 2; if (not ref $value) { return encode($value); } elsif (UNIVERSAL::isa($value, "ARRAY")) { return join '&', map encode($_), @$value; } elsif (UNIVERSAL::isa($value, "HASH")) { return join '&', map encode($_), %$value; } die "Can't freeze reference: $value"; } sub thaw { my $c = shift; my @rv = split /&/, @_ ? shift : $c->SUPER::value; return wantarray ? map decode($_), @rv : decode($rv[0]); } sub value { return shift->thaw; } sub bake { my ($c, $r) = @_; $r->err_headers_out->add("Set-Cookie", $c->as_string); } sub bake2 { my ($c, $r) = @_; die "Can't bake2 a Netscape cookie: $c" unless $c->version > 0; $r->err_headers_out->add("Set-Cookie2", $c->as_string); } package Apache2::Cookie::Jar; use APR::Request::Apache2; push our @ISA, qw/APR::Request::Apache2/; sub cookies { return Apache2::Cookie->fetch(@_) if @_ == 2; my $cookies = Apache2::Cookie->fetch(@_); return wantarray ? keys %$cookies : $cookies; } *Apache2::Cookie::Jar::status = *APR::Request::jar_status; sub new { my $class = shift; my $jar = $class->APR::Request::Apache2::handle(shift); my %attrs = @_; while (my ($k, $v) = each %attrs) { $k =~ s/^-//; my $method = lc $k; $jar->$method($v); } return $jar; } 1; __END__ =head1 NAME Apache2::Cookie, Apache2::Cookie::Jar - HTTP Cookies Class =for testing use Apache2::Cookie; use APR::Pool; # use $r instead of $p here, so doc examples reflect mp2 env, not CGI/test env $r = APR::Pool->new; $j = Apache2::Cookie::Jar->new($r); $j->cookies->{foo} = Apache2::Cookie->new($r, name => "foo", value => "1"); $j->cookies->add( Apache2::Cookie->new($r, name => "bar", value => "2") ); =head1 SYNOPSIS use Apache2::Cookie; $j = Apache2::Cookie::Jar->new($r); $c_in = $j->cookies("foo"); # get cookie from request headers $c_out = Apache2::Cookie->new($r, -name => "mycookie", -value => $c_in->name ); $c_out->path("/bar"); # set path to "/bar" $c_out->bake($r); # send cookie in response headers =head1 DESCRIPTION The Apache2::Cookie module is based on the original 1.X versions, which mimic the CGI::Cookie API. The current version of this module includes several packages and methods which are patterned after Apache2::Request, yet remain largely backwards-compatible with the original 1.X API (see the L section below for known issues). This manpage documents the Apache2::Cookie and Apache2::Cookie::Jar packages. =head1 Apache2::Cookie::Jar This class collects Apache2::Cookie objects into a lookup table. It plays the same role for accessing the incoming cookies as Apache2::Request does for accessing the incoming params and file uploads. =head2 new Apache2::Cookie::Jar->new($env) Class method that retrieves the parsed cookie jar from the current environment. =head2 cookies $jar->cookies() $jar->cookies($key) Retrieve cookies named $key with from the jar object. In scalar context the first such cookie is returned, and in list context the full list of such cookies are returned. If the $key argument is omitted, C<< scalar $jar->cookies() >> will return an APR::Request::Cookie::Table object containing all the cookies in the jar. Modifications to the this object will affect the jar's internal I table in C, so their impact will be noticed by all libapreq2 applications during this request. In list context C<< $jar->cookies() >> returns the list of names for all the cookies in the jar. The order corresponds to the order in which the cookies appeared in the incoming "Cookie" header. This method will throw an C<< APR::Request::Error >> object into $@ if the returned value(s) could be unreliable. In particular, note that C<< scalar $jar->cookies("foo") >> will not croak if it can locate the a "foo" cookie within the jar's parsed cookie table, even if the cookie parser has failed (the cookies are parsed in the same order as they appeared in the "Cookie" header). In all other circumstances C will croak if the parser failed to successfully parse the "Cookie" header. $c = Apache2::Cookie->new($r, name => "foo", value => 3); $j->cookies->add($c); $cookie = $j->cookies("foo"); # first foo cookie @cookies = $j->cookies("foo"); # all foo cookies @names = $j->cookies(); # all cookie names =head2 status $jar->status() Get the I status code of the cookie parser: APR_SUCCESS on success, error otherwise. =head1 Apache2::Cookie =head2 new Apache2::Cookie->new($env, %args) Just like CGI::Cookie::new, but requires an additional environment argument: $cookie = Apache2::Cookie->new($r, -name => 'foo', -value => 'bar', -expires => '+3M', -domain => '.capricorn.com', -path => '/cgi-bin/database', -secure => 1 ); The C<-value> argument may be either an arrayref, a hashref, or a string. C encodes this argument into the cookie's raw value. =head2 freeze Apache2::Cookie->freeze($value) Helper function (for C) that serializes a new cookie's value in a manner compatible with CGI::Cookie (and Apache2::Cookie 1.X). This class method accepts an arrayref, hashref, or normal perl string in $value. $value = Apache2::Cookie->freeze(["2+2", "=4"]); =head2 thaw Apache2::Cookie->thaw($value) $cookie->thaw() This is the helper method (for C) responsible for decoding the raw value of a cookie. An optional argument $value may be used in place of the cookie's raw value. This method can also decode cookie values created using CGI::Cookie or Apache2::Cookie 1.X. print $cookie->thaw; # prints "bar" @values = Apache2::Cookie->thaw($value); # ( "2+2", "=4" ) =head2 as_string $cookie->as_string() Format the cookie object as a string. The quote-operator for Apache2::Cookie is overloaded to run this method whenever a cookie appears in quotes. ok "$cookie" eq $cookie->as_string; =head2 name $cookie->name() Get the name of the cookie. =head2 value $cookie->value() Get the (unswizzled) value of the cookie: my $value = $cookie->value; my @values = $cookie->value; Note: if the cookie's value was created using a C method, one way to reconstitute the object is by subclassing Apache2::Cookie with a package that provides the associated C sub: { package My::COOKIE; @ISA = 'Apache2::Cookie'; sub thaw { my $val = shift->raw_value; $val =~ tr/a-z/A-Z/; $val } } bless $cookie, "My::COOKIE"; ok $cookie->value eq "BAR"; =head2 raw_value $cookie->raw_value() Gets the raw (opaque) value string as it appears in the incoming "Cookie" header. ok $cookie->raw_value eq "bar"; =head2 bake $cookie->bake($r) Adds a I header to the outgoing headers table. =head2 bake2 $cookie->bake2($r) Adds a I header to the outgoing headers table. =head2 domain $cookie->domain() $cookie->domain($set) Get or set the domain for the cookie: $domain = $cookie->domain; $cookie->domain(".cp.net"); =head2 path $cookie->path() $cookie->path($set) Get or set the path for the cookie: $path = $cookie->path; $cookie->path("/"); =head2 version $cookie->version() $cookie->version($set) Get or set the cookie version for this cookie. Netscape spec cookies have version = 0; RFC-compliant cookies have version = 1. ok $cookie->version == 0; $cookie->version(1); ok $cookie->version == 1; =head2 expires $cookie->expires() $cookie->expires($set) Get or set the future expire time for the cookie. When assigning, the new value ($set) should match /^\+?(\d+)([YMDhms]?)$/ $2 qualifies the number in $1 as representing "Y"ears, "M"onths, "D"ays, "h"ours, "m"inutes, or "s"econds (if the qualifier is omitted, the number is interpreted as representing seconds). As a special case, $set = "now" is equivalent to $set = "0". my $expires = $cookie->expires; $cookie->expires("+3h"); # cookie is set to expire in 3 hours =head2 secure $cookie->secure() $cookie->secure($set) Get or set the secure flag for the cookie: $cookie->secure(1); $is_secure = $cookie->secure; $cookie->secure(0); =head2 httponly $cookie->httponly() $cookie->httponly($set) Get or set the HttpOnly flag for the cookie: $cookie->httponly(1); $is_HttpOnly = $cookie->httponly; $cookie->httponly(0); =head2 comment $cookie->comment() $cookie->comment($set) Get or set the comment field of an RFC (Version > 0) cookie. $cookie->comment("Never eat yellow snow"); print $cookie->comment; =head2 commentURL $cookie->commentURL() $cookie->commentURL($set) Get or set the commentURL field of an RFC (Version > 0) cookie. $cookie->commentURL("http://localhost/cookie.policy"); print $cookie->commentURL; =head2 fetch Apache2::Cookie->fetch($r) Fetch and parse the incoming I header: my $cookies = Apache2::Cookie->fetch($r); # APR::Request::Cookie::Table ref It should be noted, that with perl 5.8+ Iterator magic, table is able to handle multiple cookies of the same name. my %cookies = Apache2::Cookie->fetch($r); =head1 PORTING from 1.X Changes to the 1.X API: =over 5 =item * C now expects an C<$r> object as (second) argument, although this isn't necessary in mod_perl 2 if C is loaded and 'PerlOptions +GlobalRequest' is in effect. =item * C is gone. =item * C no longer encodes the supplied cookie name. =item * C returns undef if -value is not specified or -value => undef. =item * C and C no longer accept a "set" argument. In other words, neither a cookie's name, nor its value, may be modified. A new cookie should be made instead. =back =head1 SEE ALSO L, L, L, CGI::Cookie(3) =head1 COPYRIGHT Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to You under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. libapreq2-2.17/glue/perl/lib/Apache2/Request.pm0000644000175000017500000003056014277401734020646 0ustar jortonjortonpackage Apache2::Request; use APR::Request::Param; use APR::Request::Apache2; use Apache2::RequestRec; push our @ISA, qw/Apache2::RequestRec APR::Request::Apache2/; our $VERSION = "2.17"; my %old_limits = ( post_max => "read_limit", max_body => "read_limit", ); sub new { my $class = shift; my $req = $class->APR::Request::Apache2::handle(shift); my %attrs = @_; while (my ($k, $v) = each %attrs) { $k =~ s/^-//; my $method = $old_limits{lc($k)} || lc $k; $req->$method($v); } return $req; } sub hook_data {die "hook_data not implemented"} sub disable_uploads { my ($req, $toggle) = @_; $req->SUPER::disable_uploads if $toggle; } 1; __END__ =head1 NAME Apache2::Request - Methods for dealing with client request data =head1 SYNOPSIS use Apache2::Request; $req = Apache2::Request->new($r); @foo = $req->param("foo"); $bar = $req->args("bar"); =head1 DESCRIPTION The Apache2::Request module provides methods for parsing GET and POST parameters encoded with either I or I. Although Apache2::Request provides a few new APIs for accessing the parsed data, it remains largely backwards-compatible with the original 1.X API. See the L section below for a list of known issues. This manpage documents the Apache2::Request package. =head1 Apache2::Request The interface is designed to mimic the CGI.pm routines for parsing query parameters. The main differences are =over 4 =item * C takes an environment-specific object C<$r> as (second) argument. Newer versions of CGI.pm also accept this syntax within modperl. =item * The query parameters are stored in APR::Table derived objects, and are therefore retrieved from the table by using case-insensitive keys. =item * The query string is always parsed immediately, even for POST requests. =back =head2 new Apache2::Request->new($r, %args) Creates a new Apache2::Request object. my $req = Apache2::Request->new($r, POST_MAX => "1M"); With mod_perl2, the environment object $r must be an Apache2::RequestRec object. In that case, all methods from Apache2::RequestRec are inherited. In the (default) CGI environment, $r must be an APR::Pool object. The following args are optional: =over 4 =item * C, C Limit the size of POST data (in bytes). =item * C Disable file uploads. =item * C Sets the directory where upload files are spooled. On a *nix-like that supports I, the TEMP_DIR should be located on the same file system as the final destination file: use Apache2::Upload; my $req = Apache2::Request->new($r, TEMP_DIR => "/home/httpd/tmp"); my $upload = $req->upload('file'); $upload->link("/home/user/myfile"); For more details on C, see L. =item * C Extra configuration info passed as the fourth argument to an upload hook. See the description for the next item, C. =item * C Sets up a callback to run whenever file upload data is read. This can be used to provide an upload progress meter during file uploads. Apache will automatically continue writing the original data to $upload->fh after the hook exits. my $transparent_hook = sub { my ($upload, $data, $data_len, $hook_data) = @_; warn "$hook_data: got $data_len bytes for " . $upload->name; }; my $req = Apache2::Request->new($r, HOOK_DATA => "Note", UPLOAD_HOOK => $transparent_hook, ); =back =head2 instance Apache2::Request->instance($r) The default (and only) behavior of I is to intelligently cache B data for the duration of the request. Thus there is no longer the need for a separate C method as existed in I for Apache 1.3 - all B data is always available from each and every I object created during the request's lifetime. However an C method is aliased to C in this release to ease the pain of porting from 1.X to 2.X. =head2 param $req->param() $req->param($name) Get the request parameters (using case-insensitive keys) by mimicing the OO interface of C. # similar to CGI.pm my $foo_value = $req->param('foo'); my @foo_values = $req->param('foo'); my @param_names = $req->param; # the following differ slightly from CGI.pm # returns ref to APR::Request::Param::Table object representing # all (args + body) params my $table = $req->param; @table_keys = keys %$table; In list context, or when invoked with no arguments as C<< $req->param() >>, C induces libapreq2 to read and parse all remaining data in the request body. However, C<< scalar $req->param("foo") >> is lazy: libapreq2 will only read and parse more data if 1) no "foo" param appears in the query string arguments, AND 2) no "foo" param appears in the previously parsed POST data. In this circumstance libapreq2 will read and parse additional blocks of the incoming request body until either 1) it has found the the "foo" param, or 2) parsing is completed. Observe that C<< scalar $req->param("foo") >> will not raise an exception if it can locate "foo" in the existing body or args tables, even if the query-string parser or the body parser has failed. In all other circumstances C will throw an Apache2::Request::Error object into $@ should either parser fail. $req->args_status(1); # set error state for query-string parser ok $req->param_status == 1; $foo = $req->param("foo"); ok $foo == 1; eval { @foo = $req->param("foo") }; ok $@->isa("Apache2::Request::Error"); undef $@; eval { my $not_found = $req->param("non-existent-param") }; ok $@->isa("Apache2::Request::Error"); $req->args_status(0); # reset query-string parser state to "success" Note: modifications to the C<< scalar $req->param() >> table only affect the returned table object (the underlying C apr_table_t is I from the parse data by apreq_params()). Modifications do not affect the actual request data, and will not be seen by other libapreq2 applications. =head2 parms, params The functionality of these functions is assumed by C, so they are no longer necessary. Aliases to C are provided in this release for backwards compatibility, however they are deprecated and may be removed from a future release. =head2 body $req->body() $req->body($name) Returns an I object containing the POST data parameters of the I object. my $body = $req->body; An optional name parameter can be passed to return the POST data parameter associated with the given name: my $foo_body = $req->body("foo"); More generally, C follows the same pattern as C with respect to its return values and argument list. The main difference is that modifications to the C<< scalar $req->body() >> table affect the underlying apr_table_t attribute in apreq_request_t, so their impact will be noticed by all libapreq2 applications during this request. =head2 upload $req->upload() $req->upload($name) Requires C. With no arguments, this method returns an I object in scalar context, or the names of all I objects in list context. An optional name parameter can be passed to return the I object associated with the given name: my $upload = $req->upload($name); More generally, C follows the same pattern as C with respect to its return values and argument list. The main difference is that its returned values are Apache2::Upload object refs, not simple scalars. Note: modifications to the C<< scalar $req->upload() >> table only affect the returned table object (the underlying C apr_table_t is I by apreq_uploads()). They do not affect the actual request data, and will not be seen by other libapreq2 applications. =head2 args_status $req->args_status() Get the I status code of the query-string parser. APR_SUCCESS on success, error otherwise. =head2 body_status $req->body_status() Get the current I status code of the parsed POST data. APR_SUCCESS when parser has completed, APR_INCOMPLETE if parser has more data to parse, APR_EINIT if no post data has been parsed, error otherwise. =head2 param_status $req->param_status() In scalar context, this returns C if there was an error during the query-string parse, otherwise this returns C, ie $req->args_status || $req->body_status In list context C returns the list C<(args_status, body_status)>. =head2 parse $req->parse() Forces the request to be parsed immediately. In void context, this will throw an APR::Request::Error should the either the query-string or body parser fail. In all other contexts it will return the two parsers' combined I status code $req->body_status || $req->args_status However C should be avoided in most normal situations. For example, in a mod_perl content handler it is more efficient to write sub handler { my $r = shift; my $req = Apache2::Request->new($r); $r->discard_request_body; # efficiently parses the request body my $parser_status = $req->body_status; #... } Calling C<< $r->discard_request_body >> outside the content handler is generally a mistake, so use C<< $req->parse >> there, but B. The Apache2::Request API is B around a lazy-parsing scheme, so calling C should not affect the behavior of any other methods. =head1 SUBCLASSING Apache2::Request If the instances of your subclass are hash references then you can actually inherit from Apache2::Request as long as the Apache2::Request object is stored in an attribute called "r" or "_r". (The Apache2::Request class effectively does the delegation for you automagically, as long as it knows where to find the Apache2::Request object to delegate to.) For example: package MySubClass; use Apache2::Request; our @ISA = qw(Apache2::Request); sub new { my($class, @args) = @_; return bless { r => Apache2::Request->new(@args) }, $class; } =head1 PORTING from 1.X This is the complete list of changes to existing methods from Apache2::Request 1.X. These issues need to be addressed when porting 1.X apps to the new 2.X API. =over 4 =item * Apache2::Upload is now a separate module. Applications requiring the upload API must C in 2.X. This is easily addressed by preloading the modules during server startup. =item * You can no longer add (or set or delete) parameters in the C<< scalar $req->param >>, C<< scalar $req->args >> or C<< scalar $req->body >> tables. Nor can you add (or set or delete) cookies in the C<< scalar $req->jar >> table. =item * C is now identical to C, and is now deprecated. It may be removed from a future 2.X release. =item * C includes the functionality of C and C, so they are now deprecated and may be removed from a future 2.X release. =item * C called in a list context no longer returns a unique list of paramaters. The returned list contains multiple instances of the parameter name for multivalued fields. =back =head1 SEE ALSO L, L, L, L, APR::Table(3). =head1 COPYRIGHT Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to You under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. libapreq2-2.17/glue/perl/lib/Apache2/Upload.pm0000644000175000017500000001606614277401734020447 0ustar jortonjortonpackage Apache2::Upload; use Apache2::Request; push our @ISA, qw/APR::Request::Param/; our $VERSION = "2.17"; no strict 'refs'; for (qw/slurp type size link tempname fh io filename/) { *{$_} = *{"APR::Request::Param::upload_$_"}{CODE}; } sub Apache2::Request::upload { my $req = shift; my $body = $req->body or return; $body->param_class(__PACKAGE__); if (@_) { my @uploads = grep $_->upload, $body->get(@_); return wantarray ? @uploads : $uploads[0]; } return map { $_->upload ? $_->name : () } values %$body if wantarray; return $body->uploads($req->pool); } *bb = *APR::Request::Param::upload; 1; __END__ =head1 NAME Apache2::Upload - Methods for dealing with file uploads. =head1 SYNOPSIS use Apache2::Upload; $req = Apache2::Request->new($r); $upload = $req->upload("foo"); $size = $upload->size; # three methods to get at the upload's contents ... slurp, fh, io $upload->slurp($slurp_data); read $upload->fh, $fh_data, $size; ok $slurp_data eq $fh_data; my $io = $upload->io; print while <$io>; =head1 DESCRIPTION Apache2::Upload is a new module based on the original package included in Apache2::Request 1.X. Users requiring the upload API must now C, which adds the C method to Apache2::Request. Apache2::Upload is largely backwards-compatible with the original 1.X API. See the L section below for a list of known issues. This manpage documents the Apache2::Upload package. =head1 Apache2::Upload =head2 name $upload->name() The name of the HTML form element which generated the upload. =head2 filename $upload->filename() The (client-side) filename as submitted in the HTML form. Note: some agents will submit the file's full pathname, while others may submit just the basename. =head2 fh $upload->fh() Creates filehandle reference to the upload's spooled tempfile, which contains the full contents of the upload. =head2 io $upload->io() Creates a tied IO handle. This method is a more efficient version of C, but with C the handle ref returned is not seekable. It is tied to an APR::Request::Brigade object, so you may use the brigade API on the tied object if you want to manipulate the IO stream (beyond simply reading from it). The returned reference is actually an object which has C and C methods available. However these methods are just syntactic sugar for the underlying C and C methods from APR::Request::Brigade. $io = $upload->io; print while $io->read($_); # equivalent to: tied(*$io)->READ($_) See L and L below for additional notes on their usage. =head2 bb $upload->bb() $upload->bb($set) Get/set the APR::Brigade which represents the upload's contents. =head2 size $upload->size() Returns the size of the upload in bytes. =head2 info $upload->info() $upload->info($set) Get/set the additional header information table for the uploaded file. Returns a hash reference tied to the I class. An optional C<$table> argument can be passed to reassign the upload's internal (apr_table_t) info table to the one C<$table> represents. my $info = $upload->info; while (my($hdr_name, $hdr_value) = each %$info) { # ... } # fetch upload's Content-Type header my $type = $upload->info->{"Content-type"}; =head2 type $upload->type() Returns the MIME type of the given I object. my $type = $upload->type; #same as my $content_type = $upload->info->{"Content-Type"}; $content_type =~ s/;.*$//ms; =head2 link $upload->link() To avoid recopying the upload's internal tempfile brigade on a *nix-like system, I will create a hard link to it: my $upload = $req->upload('foo'); $upload->link("/path/to/newfile") or die sprintf "link from '%s' failed: $!", $upload->tempname; Typically the new name must lie on the same device and partition as the brigade's tempfile. If this or any other reason prevents the OS from linking the files, C will instead copy the temporary file to the specified location. =head2 slurp $upload->slurp($contents) Reads the full contents of a file upload into the scalar argument. The return value is the length of the file. my $size = $upload->slurp($contents); =head2 tempname $upload->tempname() Provides the name of the spool file. my $tempname = $upload->tempname; =head1 APR::Request::Brigade This class is derived from APR::Brigade, providing additional methods for TIEHANDLE, READ and READLINE. To be memory efficient, these methods delete buckets from the brigade as soon as their data is actually read, so you cannot C on handles tied to this class. Such handles have semantics similar to that of a read-only socket. =head2 TIEHANDLE APR::Request::Brigade->TIEHANDLE($bb) Creates a copy of the bucket brigade represented by $bb, and blesses that copy into the APR::Request::Brigade class. This provides syntactic sugar for using perl's builtin C, C, and C<< <> >> operations on handles tied to this package: use Symbol; $fh = gensym; tie *$fh, "APR::Request:Brigade", $bb; print while <$fh>; =head2 READ $bb->READ($contents) $bb->READ($contents, $length) $bb->READ($contents, $length, $offset) Reads data from the brigade $bb into $contents. When omitted $length defaults to C<-1>, which reads the first bucket into $contents. A positive $length will read in $length bytes, or the remainder of the brigade, whichever is greater. $offset represents the index in $context to read the new data. =head2 READLINE $bb->READLINE() Returns the first line of data from the bride. Lines are terminated by linefeeds (the '\012' character), but we may eventually use C<$/> instead. =head1 PORTING from 1.X =over 4 =item * C<< $upload->next() >> is no longer available; please use the C<< APR::Request::Param::Table >> API when iterating over upload entries. =item * C is replaced by C. =item * C returns only the MIME-type portion of the Content-Type header. =back =head1 SEE ALSO L, L, L, APR::Table(3) =head1 COPYRIGHT Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to You under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. libapreq2-2.17/glue/perl/lib/APR/Request/Magic.pm0000644000175000017500000000422714277401734021046 0ustar jortonjortonpackage APR::Request::Magic; require base; our $VERSION = "2.17"; my $ctx; eval { local $ENV{PERL_DL_NONLAZY} = 1; require APR::Request::Apache2; }; if ($@) { require APR::Pool; base->import("APR::Request::CGI"); *handle = sub { $ctx ||= bless APR::Pool->new; APR::Request::CGI->handle($ctx, @_) }; our $MODE = "CGI"; } else { require Apache2::RequestUtil; base->import("APR::Request::Apache2"); *handle = sub { APR::Request::Apache2->handle(Apache2::RequestUtil->request, @_) }; our $MODE = "Apache2"; } 1; __END__ =head1 NAME APR::Request::Magic - Portable API for working with CGI and modperl scripting =head1 SYNOPSIS # Be sure PerlOptions +GlobalRequest is set for mp2. use APR::Request::Magic; $apreq = APR::Request::Magic->handle; @foo = $apreq->body("foo"); $bar = $apreq->args("bar"); $c = $apreq->jar("cookiename"); =head1 DESCRIPTION The APR::Request::Magic module provides a cgi/mod_perl portable interface to libapreq2. It is a subclass of APR::Request so all of its methods are available. =head1 APR::Request::Magic =head2 handle APR::Request::Magic->handle() Creates a new APR::Request::Magic object. =head2 $MODE Global variable set to the operation mode of this module: either "CGI" or "Apache2". =head1 SEE ALSO L, L, L. =head1 COPYRIGHT Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to You under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. libapreq2-2.17/glue/perl/Makefile.PL0000644000175000017500000004114514277401734016622 0ustar jortonjortonuse strict; use ModPerl::MM; use 5.005; use Apache::Test5005compat; use Apache::TestMM qw(test clean); use Apache::TestReport (); use Apache::TestSmoke (); use Apache::TestRun (); use Apache::TestConfigPerl (); use Apache::TestSmokePerl (); use Apache::TestReportPerl (); use Config; use File::Find qw(finddepth); use File::Basename; use Apache2::Build; use constant WIN32 => Apache2::Build::WIN32; use Cwd; use ExtUtils::XSBuilder::ParseSource; my $version = "2.XX-dev"; # DUMMY VALUE my $cwd = WIN32 ? Win32::GetLongPathName(cwd) : cwd; $cwd =~ m{^(.+)/glue/perl$} or die "Can't find base directory"; my $base_dir = $1; my $inc_dir = "$base_dir/include"; my $lib_dir = "$base_dir/library"; my $xs_dir = "$base_dir/glue/perl/xsbuilder"; sub slurp($$) { open my $file, $_[1] or die "Can't open $_[1]: $!"; read $file, $_[0], -s $file; } sub cmp_tuples { my ($num_a, $num_b) = @_; while (@$num_a && @$num_b) { my $cmp = shift @$num_a <=> shift @$num_b; return $cmp if $cmp; } return @$num_a <=> @$num_b; } sub autoconf_foo { my ($config, $re_start, $re_end, $re_match) = @_; $$config =~ /^${re_start}APACHE2_INCLUDES${re_end}($re_match)/m or die "Can't find apache include directory"; my $apache_includes = $1; $$config =~ /^${re_start}APR_INCLUDES${re_end}($re_match)/m or die "Can't find apache include directory"; $apache_includes .= " $1"; my $apr_libs =""; $$config =~ m/^${re_start}APREQ_LIBNAME${re_end}($re_match)/m or die "Can't find apreq libname"; ## XXX: 2.60 bug/hack my $apreq_libname = $1; $$config =~ m/^${re_start}PACKAGE_VERSION${re_end}($re_match)/m or die "Can't find package version"; my $version = $1; ## Code around an autoconf 2.60 bug ## http://lists.gnu.org/archive/html/bug-autoconf/2006-06/msg00127.html ## $ grep @PACKAGE_VERSION config.status-2.59 config.status-2.60 ## config.status-2.59:s,@PACKAGE_VERSION@,2.09,;t t ## config.status-2.60:s,@PACKAGE_VERSION@,|#_!!_#|2.09,g foreach ($apache_includes, $apreq_libname, $version) { s/\|#_!!_#\|//g; } return ($apache_includes, $apr_libs, $apreq_libname, $version); } my ($apache_includes, $apache_dir, $apr_libs, $apreq_libname, $perl_lib); if (WIN32) { # XXX May need fixing, Randy! slurp my $config => "$base_dir/configure.ac"; $config =~ /^AC_INIT[^,]+,\s*([^,\s]+)/m or die "Can't find version string"; $version = $1; slurp my $make => "$base_dir/Makefile"; $make =~ /^APACHE=(\S+)/m or die "Cannot find top-level Apache directory"; ($apache_dir = $1) =~ s!\\!/!g; ($apache_includes = "-I$apache_dir" . '/include') =~ s!\\!/!g; ($apr_libs = "-L$apache_dir" . '/lib') =~ s!\\!/!g; $make =~ /^APR_LIB=(\S+)/m or die "Cannot find apr lib"; $apr_libs .= ' -l' . basename($1, '.lib'); $make =~ /^APU_LIB=(\S+)/m or die "Cannot find aprutil lib"; $apr_libs .= ' -l' . basename($1, '.lib'); $apreq_libname = 'apreq2'; $perl_lib = $Config{installsitelib} . '\auto\libaprext'; $perl_lib =~ s{\\}{\\\\}g; } else { slurp my $config => "$base_dir/config.status"; $config =~ /GNU Autoconf (\d+\.\d+)/; my $autoconf_ver = $1; ### XXX: Lord have mercy on us..... if (cmp_tuples([split /\./, $autoconf_ver], [qw(2 61)]) > 0) { ### Autoconf >=2.62 changed the format of the file ### I.E.: S["APACHE2_INCLUDES"]="-I/usr/local/include/apache2" ($apache_includes, $apr_libs, $apreq_libname, $version) = autoconf_foo(\$config, qr/S\[\"/, qr/\"\]=\"/, qr/[^\"]+/); } else { ### I.E.: s,@APACHE2_INCLUDES@,-I/usr/local/include/apache22,;t t ($apache_includes, $apr_libs, $apreq_libname, $version) = autoconf_foo(\$config, qr/s,\@/, qr/\@,/, qr/[^,]+/); } } my $apreq_libs; if (WIN32) { $apreq_libs = qq{-L$base_dir/win32/libs -llib$apreq_libname -lmod_apreq2 -L$perl_lib -llibaprext -L$apache_dir/lib -lmod_perl}; } else { my $apreq2_config = "$base_dir/apreq2-config"; my $bindir = qx{$apreq2_config --bindir}; chomp $bindir; $apreq2_config = "$bindir/apreq2-config" if $ENV{INSTALL}; $apreq_libs = qx{$apreq2_config --link-ld --ldflags --libs}; chomp $apreq_libs; } my $mp2_typemaps = Apache2::Build->new->typemaps; package My::ParseSource; use base qw/ExtUtils::XSBuilder::ParseSource/; use constant WIN32 => ($^O =~ /Win32/i); my @dirs = ("$base_dir/include", "$base_dir/module/apache2"); sub package {'APR::Request'} sub unwanted_includes {[qw/apreq_config.h apreq_private_apache2.h/]} # ParseSource.pm v 0.23 bug: line 214 should read # my @dirs = @{$self->include_dirs}; # for now, we override it here just to work around the bug sub find_includes { my $self = shift; return $self->{includes} if $self->{includes}; require File::Find; my(@dirs) = @{$self->include_dirs}; unless (-d $dirs[0]) { die "could not find include directory"; } # print "Will search @dirs for include files...\n" if ($verbose) ; my @includes; my $unwanted = join '|', @{$self -> unwanted_includes} ; for my $dir (@dirs) { File::Find::finddepth({ wanted => sub { return unless /\.h$/; return if ($unwanted && (/^($unwanted)/o)); my $dir = $File::Find::dir; push @includes, "$dir/$_"; }, follow => not WIN32, }, $dir); } return $self->{includes} = $self -> sort_includes (\@includes) ; } sub include_dirs {\@dirs} package My::WrapXS; use base qw/ExtUtils::XSBuilder::WrapXS/; our $VERSION = $version; use constant WIN32 => ($^O =~ /Win32/i); ################################################## # Finally, we get to the actual script... __PACKAGE__ -> run; my @scripts = (); use File::Spec::Functions qw(catfile); File::Find::finddepth(sub { return unless /(.*?\.pl)\.PL$/; push @scripts, "$File::Find::dir/$1"; }, '.'); Apache::TestMM::filter_args(); Apache::TestMM::generate_script("t/TEST"); Apache::TestSmokePerl->generate_script; Apache::TestReportPerl->generate_script; my %opts = ( NAME => 'libapreq2', DIR => [qw(xs)], clean => { FILES => "xs t/logs t/TEST @scripts" }, realclean => { FILES => "xsbuilder/tables" }, ); ModPerl::MM::WriteMakefile(%opts); # That's the whole script - below is just a bunch of local overrides ################################################## sub get_functions { my $self = shift; $self->{XS}->{"APR::Request::Error"} ||= []; $self->SUPER::get_functions; } sub test_docs { my ($pods, $tests) = @_; require Config; my $bin = $Config::Config{bin}; my $pod2test = catfile $bin, "pod2test"; $pod2test = Apache::TestConfig::which('pod2test') unless -e $pod2test; return "" unless $pod2test and -e $pod2test; return join "", map <, ); my @tests = @docs; s/pod$/t/ for @tests; s/^xsbuilder/xs/ for @tests; my $string = ""; my $test_docs = test_docs(\@docs, \@tests); if ($test_docs) { $string .= $test_docs; $string .= <new]} sub new_typemap {My::TypeMap->new(shift)} sub h_filename_prefix {'apreq_xs_'} sub my_xs_prefix {'apreq_xs_'} sub xs_include_dir { $xs_dir } sub mod_xs { my($self, $module, $complete) = @_; my $dirname = $self->class_dirname($module); my @parts = split '::', $module; my $mod_xs = "$dirname/$parts[-1].xs"; for ($self -> xs_include_dir, @{ $self->{glue_dirs} }) { my $file = "$_/$mod_xs"; $mod_xs = $file if $complete; return $mod_xs if -e $file; } undef; } sub mod_pm { my($self, $module, $complete) = @_; my $dirname = $self->class_dirname($module); my @parts = split '::', $module; my $mod_pm = "$dirname/$parts[-1].pm"; for ($self -> xs_include_dir, @{ $self->{glue_dirs} }) { my $file = "$_/$mod_pm"; $mod_pm = $file if $complete; return $mod_pm if -e $file; } undef; } #inline mod_xs directly, so we can put XS directives there sub write_xs { my($self, $module, $functions) = @_; my $fh = $self->open_class_file($module, '.xs'); print $fh "$self->{noedit_warning_c}\n"; my @includes = @{ $self->includes }; if (my $mod_h = $self->mod_h($module)) { push @includes, $mod_h; } for (@includes) { print $fh qq{\#include "$_"\n\n}; } if (my $mod_xs = $self->mod_xs($module, 1)) { open my $file, $mod_xs or die "can't open $mod_xs: $!"; print $fh $_ while <$file>; print $fh "\n\n"; } my $last_prefix = ""; my $fmap = $self -> typemap -> {function_map} ; my $myprefix = $self -> my_xs_prefix ; for my $func (@$functions) { my $class = $func->{class}; if ($class) { my $prefix = $func->{prefix}; $last_prefix = $prefix if $prefix; if ($func->{name} =~ /^$myprefix/o) { #e.g. mpxs_Apache__RequestRec_ my $class_prefix = $fmap -> class_c_prefix($class); if ($func->{name} =~ /$class_prefix/) { $prefix = $fmap -> class_xs_prefix($class); } } $prefix = $prefix ? " PREFIX = $prefix" : ""; print $fh "MODULE = $module PACKAGE = $class $prefix\n\n"; } print $fh $func->{code}; } if (my $destructor = $self->typemap->destructor($last_prefix)) { my $arg = $destructor->{argspec}[0]; print $fh <{name}($arg) $destructor->{class} $arg EOF } print $fh "PROTOTYPES: disabled\n\n"; print $fh "BOOT:\n"; print $fh $self->boot($module); print $fh " items = items; /* -Wall */\n\n"; if (my $newxs = $self->{newXS}->{$module}) { for my $xs (@$newxs) { print $fh qq{ cv = newXS("$xs->[0]", $xs->[1], __FILE__);\n}; print $fh qq{ GvSHARED_on(CvGV(cv));\n} if ExtUtils::XSBuilder::WrapXS::GvSHARED(); } } close $fh; } sub mod_pod { my($self, $module, $complete) = @_; my $dirname = $self->class_dirname($module); my @parts = split '::', $module; my $mod_pod = "$dirname/$parts[-1].pod"; for ($self -> xs_incsrc_dir, @{ $self->{glue_dirs} }) { my $file = "$_/$mod_pod"; $mod_pod = $file if $complete; print "mod_pod $mod_pod $file $complete\n" ; return $mod_pod if -e $file; } undef; } sub write_docs { my ($self, $module, $functions) = @_; my $podfile = $self->mod_pod($module, 1) or return; my $fh = $self->open_class_file($module, '.pod'); open my $pod, "<", $podfile or die $!; while (<$pod>) { print $fh $_; } } sub pm_text { my($self, $module, $isa, $code) = @_; my $text = <<"EOF"; $self->{noedit_warning_hash} package $module; require DynaLoader ; use strict; use warnings FATAL => 'all'; use vars qw{\$VERSION \@ISA} ; $isa push \@ISA, 'DynaLoader' ; \$VERSION = '$version'; bootstrap $module \$VERSION ; $code 1; __END__ EOF return $text; } sub makefilepl_text { my($self, $class, $deps,$typemap) = @_; my @parts = split (/::/, $class) ; my $mmargspath = '../' x @parts ; $mmargspath .= 'mmargs.pl' ; my $txt = qq{ $self->{noedit_warning_hash} use ModPerl::MM; local \$MMARGS ; if (-f '$mmargspath') { do '$mmargspath' ; die \$\@ if (\$\@) ; } \$MMARGS ||= {} ; ModPerl::MM::WriteMakefile( 'NAME' => '$class', 'VERSION' => '$version', 'TYPEMAPS' => [qw(@$mp2_typemaps $typemap)], 'INC' => "-I$base_dir/glue/perl/xs -I$inc_dir -I$xs_dir $apache_includes", 'LIBS' => "$apreq_libs $apr_libs", } ; $txt .= "'depend' => $deps,\n" if ($deps) ; $txt .= qq{ \%\$MMARGS, ); } ; } # For now, just copy the typemap file in xsbuilder til we # can remove ExtUtils::XSBuilder. sub write_typemap { my $self = shift; my $typemap = $self->typemap; my $map = $typemap->get; my %seen; my $fh = $self->open_class_file('', 'typemap'); print $fh "$self->{noedit_warning_hash}\n"; open my $tfh, "$xs_dir/typemap" or die $!; print $fh $_ while <$tfh>; } package My::TypeMap; use base 'ExtUtils::XSBuilder::TypeMap'; sub null_type { my($self, $type) = @_; my $t = $self->get->{$type}; my $class = $t -> {class} ; if ($class =~ /APREQ_COOKIE_VERSION/) { return 'APREQ_COOKIE_VERSION_DEFAULT'; } else { return $self->SUPER::null_type($type); } } # XXX this needs serious work sub typemap_code { { T_SUBCLASS => { INPUT => <<'EOT', if (SvROK($arg) || !sv_derived_from($arg, \"$Package\")) Perl_croak(aTHX_ \"Usage: argument is not a subclass of $Package\"); $var = SvPV_nolen($arg) EOT }, T_APREQ_COOKIE => { INPUT => '$var = apreq_xs_sv2cookie(aTHX_ $arg)', perl2c => 'apreq_xs_sv2cookie(aTHX_ sv)', OUTPUT => '$arg = apreq_xs_cookie2sv(aTHX_ $var, class, parent);', c2perl => 'apreq_xs_cookie2sv(aTHX_ ptr, class, parent)', }, T_APREQ_PARAM => { INPUT => '$var = apreq_xs_sv2param(aTHX_ $arg)', perl2c => 'apreq_xs_sv2param(aTHX_ sv)', OUTPUT => '$arg = apreq_xs_param2sv(aTHX_ $var, class, parent);', c2perl => 'apreq_xs_param2sv(aTHX_ ptr, class, parent)', }, T_APREQ_HANDLE => { INPUT => '$var = apreq_xs_sv2handle(aTHX_ $arg)', perl2c => 'apreq_xs_sv2handle(aTHX_ sv)', c2perl => 'apreq_xs_handle2sv(aTHX_ ptr, class, parent)', OUTPUT => '$arg = apreq_xs_handle2sv(aTHX_ $var, class, parent);', }, T_APREQ_HANDLE_CGI => { INPUT => '$var = apreq_xs_sv2handle(aTHX_ $arg)', OUTPUT => '$arg = apreq_xs_handle2sv(aTHX_ $var, class, SvRV(ST(1)));' }, T_APREQ_HANDLE_APACHE2 => { INPUT => '$var = apreq_xs_sv2handle(aTHX_ $arg)', OUTPUT => <<'EOT', $arg = apreq_xs_handle2sv(aTHX_ $var, class, SvRV(ST(1))); SvMAGIC(SvRV($arg))->mg_ptr = (void *)r; EOT }, T_APREQ_ERROR => { INPUT => '$var = (HV *)SvRV($arg)', OUTPUT => '$arg = sv_bless(newRV_noinc((SV*)$var), gv_stashpvn(\"${ntype}\", sizeof(\"${ntype}\") - 1, FALSE);' }, T_HASHOBJ => { INPUT => <<'EOT', # '$var = modperl_hash_tied_object(aTHX_ \"${ntype}\", $arg)' if (sv_derived_from($arg, \"${ntype}\")) { if (SVt_PVHV == SvTYPE(SvRV($arg))) { SV *hv = SvRV($arg); MAGIC *mg; if (SvMAGICAL(hv)) { if ((mg = mg_find(hv, PERL_MAGIC_tied))) { $var = (void *)MgObjIV(mg); } else { Perl_warn(aTHX_ \"Not a tied hash: (magic=%c)\", mg); $var = NULL; } } else { Perl_warn(aTHX_ \"SV is not tied\"); $var = NULL; } } else { $var = (void *)SvObjIV($arg); } } else { Perl_croak(aTHX_ \"argument is not a blessed reference \" \"(expecting an %s derived object)\", \"${ntype}\"); } EOT OUTPUT => <<'EOT', # '$arg = modperl_hash_tie(aTHX_ \"${ntype}\", $arg, $var);' { SV *hv = (SV*)newHV(); SV *rsv = $arg; sv_setref_pv(rsv, \"${ntype}\", $var); sv_magic(hv, rsv, PERL_MAGIC_tied, Nullch, 0); $arg = SvREFCNT_inc(sv_bless(sv_2mortal(newRV_noinc(hv)), gv_stashpv(\"${ntype}\", TRUE))); } EOT }, } } libapreq2-2.17/glue/perl/README0000644000175000017500000000765214277401734015535 0ustar jortonjortonTo parse the libapreq headers into xsbuilder/tables: % perl ../../build/xsbuilder.pl run To build the xs/ directory and configure the tests: % perl Makefile.PL -apxs /path/to/apache2/bin/apxs To run the test suite: % make test DEVELOPER NOTES APR::Request::* should be a simple translation of the apreq C API: apreq_handle_t -> APR::Request-derived instance. apreq_module_t -> APR::Request-derived class. apreq_param_t -> APR::Request::Param apreq_cookie_t -> APR::Request::Cookie apreq_parser_t -> APR::Request::Parser (todo) apreq_hook_t -> APR::Request::Hook (todo) -------------------------------------------------- Current APR:: module breakdown -------------------------------------------------- APR::Request subs: encode decode methods: parse read_limit brigade_limit temp_dir header_in header_out jar_status args_status body_status param_status disable_uploads missing: add_hook (requires APR::Request::Hook) parser (requires APR::Request::Parser) ================================================== APR::Request::CGI @ISA=(APR::Request) method: param ctor: new ================================================== APR::Request::Apache2 @ISA=(APR::Request) method: param ctor: new ================================================== APR::Request::Error @ISA=(APR::Error, APR::Request) subs: strerror ================================================== APR::Request::Cookie provides: APR::Request::jar() APR::Request::Cookie::Table methods: get, FETCH FIRSTKEY, NEXTKEY cookie_class missing: rest of const apr_table_t * API (do, etc) methods: name value secure version is_tainted as_string bake bake2 expires path domain port comment commentURL freeze thaw bind_handle ctor: new ================================================== APR::Request::Param provides: APR::Request::args() APR::Request::body() APR::Request::param() APR::Request::params() APR::Request::Param::Table methods: get, FETCH FIRSTKEY, NEXTKEY param_class uploads do missing: rest of const apr_table_t * API APR::Request::Brigade methods: TIEHANDLE, new READ READLINE APR::Request::Brigade::IO read readline methods: name value info upload upload_link upload_slurp upload_size upload_type upload_tempname upload_io upload_fh -------------------------------------------------- Current (pure-perl) Apache2:: module breakdown -------------------------------------------------- Apache2::Request @ISA=(Apache2::RequestRec, APR::Request::Apache2) ctor: new methods: instance (deprecated, ok to remove this) disable_uploads missing: hook_data upload_hook 2.04-deltas: env() removed params() method inherited from APR::Request; not deprecated anymore. parms() removed status() removed. args() needs to become Apache2::RequestRec::args!!! The args() change probably deserves a runtime warning in 2.05-dev. ================================================== Apache2::Cookie @ISA=(APR::Request::Cookie) provides: Apache2::Cookie::Jar @ISA=(APR::Request::Apache2) methods: cookies status subs: encode decode methods: new fetch set_attr freeze thaw value 2.04-deltas: env() removed ================================================== Apache2::Upload @ISA=(APR::Request::Param) provides: Apache2::Request::upload methods: slurp type size link tempname fh io filename bb (need to deprecate this) 2.04-deltas: Apache::Upload::Brigade is now APR::Request::Brigade. libapreq2-2.17/glue/perl/t/apreq/big_input.t0000644000175000017500000000350514277401734020366 0ustar jortonjortonuse strict; use warnings FATAL => 'all'; # test the processing of variations of the key lengths and the keys # numbers use Apache::Test; use Apache::TestUtil; use Apache::TestRequest qw(GET_BODY POST_BODY); my $module = 'TestApReq::big_input'; my $location = Apache::TestRequest::module2url($module); my @key_len = (5, 100, 305); my @key_num = (5, 15, 26); my @keys = ('a'..'z'); my @big_key_len = (100, 500, 5000, 10000); my @big_key_num = (5, 15, 25); my @big_keys = ('a'..'z'); plan tests => @key_len * @key_num + @big_key_len * @big_key_num, need_lwp; # GET my $len = 0; for my $key_len (@key_len) { for my $key_num (@key_num) { my @query = (); for my $key (@keys[0..($key_num-1)]) { my $pair = "$key=" . 'd' x $key_len; $len += length $pair; push @query, $pair; } my $query = join "&", @query; $len += @query - 1; # the stick with two ends one '&' char off my $body = GET_BODY "$location?$query"; t_debug "# of keys : $key_num, key_len $key_len"; ok t_cmp($body, ( ($key_len + 3) * $key_num - 1), "GET long query"); } } # POST $len = 0; for my $big_key_len (@big_key_len) { for my $big_key_num (@big_key_num) { my @query = (); for my $big_key (@big_keys[0..($big_key_num-1)]) { my $pair = "$big_key=" . 'd' x $big_key_len; $len += length $pair; push @query, $pair; } my $query = join "&", @query; $len += @query - 1; # the stick with two ends one '&' char off my $body = POST_BODY $location, content => $query; t_debug "# of keys : $big_key_num, key_len $big_key_len"; ok t_cmp($body, ( ($big_key_len + 3) * $big_key_num - 1), "POST big data"); } } libapreq2-2.17/glue/perl/t/apreq/cgi.t0000644000175000017500000002406214277401734017151 0ustar jortonjortonuse strict; use warnings FATAL => 'all'; use Apache::Test; use Apache::TestUtil qw(t_cmp t_debug t_write_perl_script); use Apache::TestConfig; use Apache::TestRequest qw(GET_BODY UPLOAD_BODY GET_BODY_ASSERT POST_BODY GET_RC GET_HEAD); use constant WIN32 => Apache::TestConfig::WIN32; use Cwd; require File::Basename; my @key_len = (5, 100, 305); my @key_num = (5, 15, 26); my @keys = ('a'..'z'); my $cwd = getcwd(); my %types = (perl => 'application/octet-stream'); my $vars = Apache::Test::vars; my $perlpod = $vars->{perlpod}; if (-d $perlpod) { opendir(my $dh, $perlpod); my @files = grep { /\.(pod|pm)$/ } readdir $dh; closedir $dh; if (scalar @files > 0) { my $file = $files[0]; $types{$file} = 'text/*'; } } my @names = sort keys %types; my @methods = sort qw/slurp fh tempname link io/; my $cgi = File::Spec->catfile(Apache::Test::vars('serverroot'), qw(cgi-bin test_cgi.pl)); t_write_perl_script($cgi, ); ######################################################### # uncomment the following to test larger keys my @big_key_len = (100, 500, 5000, 10000); # if the above is uncommented, comment out the following #my @big_key_len = (100, 500, 1000, 2500); ######################################################### my @big_key_num = (5, 15, 25); my @big_keys = ('a'..'z'); plan tests => 10 + @key_len * @key_num + @big_key_len * @big_key_num + 4 * @names * @methods, need_lwp && need_cgi; require HTTP::Cookies; my $location = '/cgi-bin'; my $script = $location . '/test_cgi.pl'; my $line_end = WIN32 ? "\r\n" : "\n"; my $filler = "0123456789" x 6400; # < 64K # GET for my $key_len (@key_len) { for my $key_num (@key_num) { my @query = (); my $len = 0; for my $key (@keys[0..($key_num-1)]) { my $pair = "$key=" . 'd' x $key_len; $len += length($pair) - 1; push @query, $pair; } my $query = join ";", @query; t_debug "# of keys : $key_num, key_len $key_len"; my $body = GET_BODY "$script?$query"; ok t_cmp($body, $len, "GET long query"); } } # POST for my $big_key_len (@big_key_len) { for my $big_key_num (@big_key_num) { my @query = (); my $len = 0; for my $big_key (@big_keys[0..($big_key_num-1)]) { my $pair = "$big_key=" . 'd' x $big_key_len; $len += length($pair) - 1; push @query, $pair; } my $query = join ";", @query; t_debug "# of keys : $big_key_num, big_key_len $big_key_len"; my $body = POST_BODY($script, content => $query); ok t_cmp($body, $len, "POST big data"); } } ok t_cmp(POST_BODY("$script?foo=1", Content => $filler), "\tfoo => 1$line_end", "simple post"); ok t_cmp(GET_BODY("$script?foo=%3F&bar=hello+world"), "\tfoo => ?$line_end\tbar => hello world$line_end", "simple get"); my $body = POST_BODY($script, content => "aaa=$filler;foo=1;bar=2;filler=$filler"); ok t_cmp($body, "\tfoo => 1$line_end\tbar => 2$line_end", "simple post"); $body = POST_BODY("$script?foo=1", content => "intro=$filler&bar=2&conclusion=$filler"); ok t_cmp($body, "\tfoo => 1$line_end\tbar => 2$line_end", "simple post"); $body = UPLOAD_BODY("$script?foo=1", content => $filler); ok t_cmp($body, "\tfoo => 1$line_end", "simple upload"); { my $test = 'netscape'; my $key = 'apache'; my $value = 'ok'; my $cookie = qq{$key=$value}; ok t_cmp(GET_BODY("$script?test=$test&key=$key", Cookie => $cookie), $value, $test); } { my $test = 'rfc'; my $key = 'apache'; my $value = 'ok'; my $cookie = qq{\$Version="1"; $key="$value"; \$Path="$location"}; ok t_cmp(GET_BODY("$script?test=$test&key=$key", Cookie => $cookie), qq{"$value"}, $test); } { my $test = 'encoded value with space'; my $key = 'apache'; my $value = 'okie dokie'; my $cookie = "$key=" . join '', map {/ / ? '+' : sprintf '%%%.2X', ord} split //, $value; ok t_cmp(GET_BODY("$script?test=$test&key=$key", Cookie => $cookie), $value, $test); } { my $test = 'bake'; my $key = 'apache'; my $value = 'ok'; my $cookie = "$key=$value"; my ($header) = GET_HEAD("$script?test=$test&key=$key", Cookie => $cookie) =~ /^#Set-Cookie:\s+(.+)/m; ok t_cmp($header, $cookie, $test); } { my $test = 'bake2'; my $key = 'apache'; my $value = 'ok'; my $cookie = qq{\$Version="1"; $key="$value"; \$Path="$location"}; my ($header) = GET_HEAD("$script?test=$test&key=$key", Cookie => $cookie) =~ /^#Set-Cookie2:\s+(.+)/m; ok t_cmp($header, qq{$key="$value"; Version=1; path="$location"}, $test); } # file upload tests foreach my $name (@names) { my $url = ( ($name =~ /\.(pod|pm)$/) ? "getfiles-perl-pod/" : "/getfiles-binary-" ) . $name; my $content = GET_BODY_ASSERT($url); my $path = File::Spec->catfile($cwd, 't', $name); open my $fh, ">", $path or die "Cannot open $path: $!"; binmode $fh; print $fh $content; close $fh; } eval {require Digest::MD5;}; my $has_md5 = $@ ? 0 : 1; foreach my $file( map {File::Spec->catfile($cwd, 't', $_)} @names) { my $size = -s $file; my $cs = $has_md5 ? cs($file) : 0; my $basename = File::Basename::basename($file); for my $method ( @methods) { my $result = UPLOAD_BODY("$script?method=$method;has_md5=$has_md5", filename => $file); $result =~ s{\r}{}g; my %h = map {$_;} split /[=&;]/, $result, -1; $h{type}=~s{^text/.+}{text/*}; ok t_cmp($h{type}, $types{$basename}, "'type' test for $method on $basename"); ok t_cmp($h{filename}, $basename, "'filename' test for $method on $basename"); ok t_cmp($h{size}, $size, "'size' test for $method on $basename"); ok t_cmp($h{md5}, $cs, "'checksum' test for $method on $basename"); } unlink $file if -f $file; } sub cs { my $file = shift; open my $fh, '<', $file or die qq{Cannot open "$file": $!}; binmode $fh; my $md5 = Digest::MD5->new->addfile($fh)->hexdigest; close $fh; return $md5; } __DATA__ use strict; use File::Basename; use warnings FATAL => 'all'; use blib; use APR; use APR::Pool; use APR::Request::Param; use APR::Request::Cookie; use APR::Request::CGI; use File::Spec; require File::Basename; my $p = APR::Pool->new(); apreq_log("Creating APR::Request::CGI object"); my $req = APR::Request::CGI->handle($p); my $foo = $req->param("foo"); my $bar = $req->param("bar"); my $test = $req->param("test"); my $key = $req->param("key"); my $method = $req->param("method"); if ($foo || $bar) { print "Content-Type: text/plain\n\n"; if ($foo) { apreq_log("foo => $foo"); print "\tfoo => $foo\n"; } if ($bar) { apreq_log("bar => $bar"); print "\tbar => $bar\n"; } } elsif ($test && $key) { my $jar = $req->jar; $jar->cookie_class("APR::Request::Cookie"); my %cookies = %$jar; apreq_log("Fetching cookie $key"); if ($cookies{$key}) { if ($test eq "bake") { printf "Set-Cookie: %s\n", $cookies{$key}->as_string; } elsif ($test eq "bake2") { printf "Set-Cookie2: %s\n", $cookies{$key}->as_string; } print "Content-Type: text/plain\n\n"; print APR::Request::decode($cookies{$key}->value); } } elsif ($method) { my $temp_dir = File::Spec->tmpdir; my $has_md5 = $req->args('has_md5'); require Digest::MD5 if $has_md5; my $body = $req->body; $body->param_class("APR::Request::Param"); my ($param) = values %{$body->uploads($p)}; my $type = $param->upload_type; my $basename = File::Basename::basename($param->upload_filename); my ($data, $fh); if ($method eq 'slurp') { $param->upload_slurp($data); } elsif ($method eq 'fh') { read $param->upload_fh, $data, $param->upload_size; } elsif ($method eq 'tempname') { my $name = $param->upload_tempname; open $fh, "<", $name or die "Can't open $name: $!"; binmode $fh; read $fh, $data, $param->upload_size; close $fh; } elsif ($method eq 'link') { my $link_file = File::Spec->catfile($temp_dir, "linkfile"); unlink $link_file if -f $link_file; $param->upload_link($link_file) or die "Can't link to $link_file: $!"; open $fh, "<", $link_file or die "Can't open $link_file: $!"; binmode $fh; read $fh, $data, $param->upload_size; close $fh; unlink $link_file if -f $link_file; } elsif ($method eq 'io') { read $param->upload_io, $data, $param->upload_size; } else { die "unknown method: $method"; } my $temp_file = File::Spec->catfile($temp_dir, $basename); unlink $temp_file if -f $temp_file; open my $wfh, ">", $temp_file or die "Can't open $temp_file: $!"; binmode $wfh; print $wfh $data; close $wfh; my $cs = $has_md5 ? cs($temp_file) : 0; my $size = -s $temp_file; my $result = qq{type=$type;size=$size;filename=$basename;md5=$cs}; print "Content-Type: text/plain\n\n$result"; unlink $temp_file if -f $temp_file; } else { my $len = 0; print "Content-Type: text/plain\n\n"; apreq_log("Fetching all parameters"); for ($req->param) { my $param = $req->param($_); next unless $param; my $length = length($param); apreq_log("$_ has a value of length $length"); $len += length($_) + $length; } print $len; } sub apreq_log { my $msg = shift; my ($pkg, $file, $line) = caller; $file = basename($file); print STDERR "$file($line): $msg\n"; } sub cs { my $file = shift; open my $fh, '<', $file or die qq{Cannot open "$file": $!}; binmode $fh; my $md5 = Digest::MD5->new->addfile($fh)->hexdigest; close $fh; return $md5; } libapreq2-2.17/glue/perl/t/apreq/cookie.t0000644000175000017500000001231014277401734017651 0ustar jortonjortonuse strict; use warnings FATAL => 'all'; use Apache::Test; use Apache::TestUtil; use Apache::TestRequest qw(GET_BODY GET_HEAD); plan tests => 15, need_min_module_version('Apache::Test' => 1.29) || need_lwp; my $module = "TestApReq::cookie"; my $location = Apache::TestRequest::module2url($module); { my $test = 'new'; my $value = 'new'; ok t_cmp(GET_BODY("$location?test=new"), $value, $test); } { my $test = ''; my $value = 'foo=; path=/quux; domain=example.com'; my ($header) = (GET_HEAD("$location?test=$test") =~ /^#Set-Cookie:\s+(.+)/m) ; ok t_cmp($header, $value, $test); } { my $test = 'bake'; my $value = 'foo=bake; path=/quux; domain=example.com'; my ($header) = (GET_HEAD("$location?test=bake") =~ /^#Set-Cookie:\s+(.+)/m) ; ok t_cmp($header, $value, $test); } { my $test = 'new'; my $value = 'new'; ok t_cmp(GET_BODY("$location?test=new;expires=%2B3M"), $value, $test); } { my $test = 'netscape'; my $key = 'apache'; my $value = 'ok'; my $cookie = qq{$key=$value}; ok t_cmp(GET_BODY("$location?test=$test&key=$key", Cookie => $cookie), $value, $test); } { my $test = 'rfc'; my $key = 'apache'; my $value = 'ok'; my $cookie = qq{\$Version="1"; $key="$value"; \$Path="$location"}; ok t_cmp(GET_BODY("$location?test=$test&key=$key", Cookie => $cookie), qq{"$value"}, $test); } { my $test = 'encoded value with space'; my $key = 'apache'; my $value = 'okie dokie'; my $cookie = "$key=" . join '', map {/ / ? '+' : sprintf '%%%.2X', ord} split //, $value; ok t_cmp(GET_BODY("$location?test=$test&key=$key", Cookie => $cookie), $value, $test); } { my $test = 'bake'; my $key = 'apache'; my $value = 'ok'; my $cookie = "$key=$value"; my ($header) = GET_HEAD("$location?test=$test&key=$key", Cookie => $cookie) =~ /^#Set-Cookie:\s+(.+)/m; ok t_cmp($header, $cookie, $test); } { my $test = 'bake2'; my $key = 'apache'; my $value = 'ok'; my $cookie = qq{\$Version="1"; $key="$value"; \$Path="$location"}; my ($header) = GET_HEAD("$location?test=$test&key=$key", Cookie => $cookie) =~ /^#Set-Cookie2:\s+(.+)/m; ok t_cmp($header, qq{$key="$value"; Version=1; path="$location"}, $test); } { my $test = 'cookies'; my $key = 'first'; my $cookie1 = qq{\$Version="1"; one="1"}; my $cookie2 = qq{\$Version="1"; two="2"}; my $cookie3 = qq{\$Version="1"; three="3"}; my $cookie4 = qq{\$Version="1"; two="22"}; my $value = qq{one="1"; Version=1}; my $str = GET_BODY("$location?test=$test&key=$key", Cookie => $cookie1, Cookie => $cookie2, Cookie => $cookie3, Cookie => $cookie4, ); ok t_cmp($str, $value, $test); } { my $test = 'cookies'; my $key = 'all'; my $cookie1 = qq{\$Version="1"; one="1"}; my $cookie2 = qq{\$Version="1"; two="2"}; my $cookie3 = qq{\$Version="1"; three="3"}; my $cookie4 = qq{\$Version="1"; two="22"}; my $value = qq{two="2"; Version=1 two="22"; Version=1}; my $str = GET_BODY("$location?test=$test&key=$key", Cookie => $cookie1, Cookie => $cookie2, Cookie => $cookie3, Cookie => $cookie4, ); ok t_cmp($str, $value, $test); } { my $test = 'cookies'; my $key = 'name'; my $cookie1 = qq{\$Version="1"; one="1"}; my $cookie2 = qq{\$Version="1"; two="2"}; my $cookie3 = qq{\$Version="1"; three="3"}; my $cookie4 = qq{\$Version="1"; two="22"}; my $value = qq{one two three two}; my $str = GET_BODY("$location?test=$test&key=$key", Cookie => $cookie1, Cookie => $cookie2, Cookie => $cookie3, Cookie => $cookie4, ); ok t_cmp($str, $value, $test); } { my $test = 'overload'; my $cookie = qq{\$Version="1"; one="1"}; my $value = qq{one="1"; Version=1}; my $str = GET_BODY("$location?test=$test", Cookie => $cookie); ok t_cmp($str, $value, $test); } { my $test = 'wordpress'; my $cookie = qq{wordpressuser_c580712eb86cad2660b3601ac04202b2=admin;} . qq{wordpresspass_c580712eb86cad2660b3601ac04202b2=7ebeeed42ef50} . qq{720940f5b8db2f9db49; rs_session=59ae9b8b503e3af7d17b97e7} . qq{f77f7ea5; dbx-postmeta=grabit=0-,1-,2-,3-,4-,5-,6-&a} .qq {dvancedstuff=0-,1+,2-}; my $value = qq{ok}; my $str = GET_BODY("$location?test=$test", Cookie => $cookie); ok t_cmp($str, $value, $test); } { my $test = 'httponly'; my $key = 'apache'; my $value = 'ok'; my $cookie = "foo=$test; path=/quux; domain=example.com; HttpOnly"; my ($header) = GET_HEAD("$location?test=$test&key=$key") =~ /^#Set-Cookie:\s+(.+)/m; ok t_cmp($header, $cookie, $test); } libapreq2-2.17/glue/perl/t/apreq/cookie2.t0000644000175000017500000000040114277401734017731 0ustar jortonjortonuse strict; use warnings FATAL => 'all'; use Apache::Test; use Apache::TestUtil; use Apache::TestRequest; my $module = 'TestApReq::cookie2'; my $url = Apache::TestRequest::module2url($module); t_debug "connecting to $url"; print GET_BODY_ASSERT $url; libapreq2-2.17/glue/perl/t/apreq/inherit.t0000644000175000017500000000120314277401734020041 0ustar jortonjortonuse strict; use warnings FATAL => 'all'; use Apache::Test; use Apache::TestUtil; use Apache::TestRequest qw(GET_BODY UPLOAD_BODY); plan tests => 4, need_lwp; my $module = 'TestApReq::inherit'; my $location = Apache::TestRequest::module2url($module); my @response = split/\r?\n/, GET_BODY($location, Cookie=>"apache=2"); ok t_cmp($response[0], "method => GET", "inherit method"); ok t_cmp($response[1], "cookie => apache=2", "inherit cookie"); ok t_cmp($response[2], "DESTROYING TestApReq::inherit object", "first object cleanup"); ok t_cmp($response[3], "DESTROYING TestApReq::inherit object", "second object cleanup"); libapreq2-2.17/glue/perl/t/apreq/request.t0000644000175000017500000000264014277401734020075 0ustar jortonjortonuse strict; use warnings FATAL => 'all'; use Apache::Test; use Apache::TestUtil; use Apache::TestRequest qw(GET_BODY UPLOAD_BODY); plan tests => 18, need_lwp; my $module = 'TestApReq::request'; my $location = Apache::TestRequest::module2url($module); #print GET_BODY $location; { # basic param() test my $test = 'param'; my $value = '42.5'; ok t_cmp(GET_BODY("$location?test=$test&value=$value"), $value, "basic param"); } for my $test (qw/slurp bb tempname link fh io bad;query=string%%/) { # upload a string as a file my $value = ('DataUpload' x 10 . "\n") x 1_000; my $result = UPLOAD_BODY("$location?test=$test", content => $value); ok t_cmp($result, $value, "basic upload"); my $i; for ($i = 0; $i < length $value; ++$i) { last if substr($value,$i,1) ne substr($result,$i,1); } ok t_cmp($i, length($value), "basic upload length"); } { my $value = 'DataUpload' x 100; my $result = UPLOAD_BODY("$location?test=type", content => $value); ok t_cmp($result, "text/plain", "type"); } { my $value = 'DataUpload' x 100; my $result = UPLOAD_BODY("$location?test=hook", content => $value); ok t_cmp($result, $value, "hook"); } { my $value = 'DataUpload' x 100; my $result = UPLOAD_BODY("$location?test=disable_uploads;foo=bar1;foo=bar2", content => $value); ok t_cmp($result, "ok", "disabled uploads"); } libapreq2-2.17/glue/perl/t/apreq/upload.t0000644000175000017500000000471314277401734017674 0ustar jortonjortonuse strict; use warnings FATAL => 'all'; use Apache::Test; use Apache::TestUtil; use Apache::TestRequest qw(UPLOAD_BODY GET_BODY_ASSERT); use Cwd; require File::Basename; use Apache::TestConfig; use constant WIN32 => Apache::TestConfig::WIN32; my $cwd = getcwd(); my $module = 'TestApReq::upload'; my $location = Apache::TestRequest::module2url($module); my %types = (httpd => 'application/octet-stream'); # for some reason, using the perl binary for uploads # on Win32 appears to cause seemingly random stray # temp files to be left. unless (WIN32) { $types{perl} = 'application/octet-stream'; } my $vars = Apache::Test::vars; my $perlpod = $vars->{perlpod}; if (-d $perlpod) { opendir(my $dh, $perlpod); my @files = grep { /\.(pod|pm)$/ } readdir $dh; closedir $dh; if (scalar @files > 1) { for my $i (0 .. 1) { my $file = $files[$i]; $types{$file} = 'text/*'; } } } my @names = sort keys %types; my @methods = sort qw/slurp fh tempname link io/; plan tests => 4 * @names * @methods, need_lwp; foreach my $name (@names) { my $url = ( ($name =~ /\.(pod|pm)$/) ? "getfiles-perl-pod/" : "/getfiles-binary-" ) . $name; my $content = GET_BODY_ASSERT($url); my $path = File::Spec->catfile($cwd, 't', $name); open my $fh, ">", $path or die "Cannot open $path: $!"; binmode $fh; print $fh $content; close $fh; } eval {require Digest::MD5;}; my $has_md5 = $@ ? 0 : 1; foreach my $file( map {File::Spec->catfile($cwd, 't', $_)} @names) { my $size = -s $file; my $cs = $has_md5 ? cs($file) : 0; my $basename = File::Basename::basename($file); for my $method ( @methods) { my $result = UPLOAD_BODY("$location?method=$method;has_md5=$has_md5", filename => $file); my %h = map {$_;} split /[=&;]/, $result, -1; $h{type}=~s{^text/.+}{text/*}; ok t_cmp($h{type}, $types{$basename}, "'type' test for $method on $basename"); ok t_cmp($h{filename}, $basename, "'filename' test for $method on $basename"); ok t_cmp($h{size}, $size, "'size' test for $method on $basename"); ok t_cmp($h{md5}, $cs, "'checksum' test for $method on $basename"); } unlink $file if -f $file; } sub cs { my $file = shift; open my $fh, '<', $file or die qq{Cannot open "$file": $!}; binmode $fh; my $md5 = Digest::MD5->new->addfile($fh)->hexdigest; close $fh; return $md5; } libapreq2-2.17/glue/perl/t/conf/extra.conf.in0000644000175000017500000000054514277401733020435 0ustar jortonjorton PassEnv PERL5LIB LD_LIBRARY_PATH ScriptAlias /cgi-bin/ "@ServerRoot@/cgi-bin/" LockFile @ServerRoot@/logs/accept.lock AllowOverride None Options None libapreq2-2.17/glue/perl/t/response/TestAPI/cookie.pm0000644000175000017500000000356714277401734022037 0ustar jortonjortonpackage TestAPI::cookie; push our @ISA, "APR::Request::Cookie"; use strict; use warnings FATAL => 'all'; use Apache::Test; use Apache::TestUtil; use APR::Request::Cookie; use APR::Request::Apache2; use APR::Table; sub handler { my $r = shift; plan $r, tests => 31; $r->headers_in->{Cookie} = "foo=1;bar=2;foo=3;quux=4"; my $req = APR::Request::Apache2->handle($r); ok defined $req->jar; ok t_cmp $req->jar("foo"), 1, "scalar jar(foo)"; ok t_cmp $req->jar("bar"), 2, "scalar jar(bar)"; ok t_cmp $req->jar("quux"), 4, "scalar jar(quux)"; my @rv = $req->jar("foo"); ok t_cmp "@rv", "1 3", "list jar(foo)"; @rv = $req->jar("bar"); ok t_cmp "@rv", "2", "list jar(bar)"; @rv = $req->jar("quux"); ok t_cmp "@rv", "4", "list jar(quux)"; my $jar = $req->jar(); ok $jar->isa("APR::Request::Cookie::Table"); ok t_cmp $jar->{foo}, 1, '$jar->{foo} == 1'; ok t_cmp $jar->{bar}, 2, '$jar->{bar} == 2'; ok t_cmp $jar->{quux}, 4, '$jar->{quux} == 4'; my @k = qw/foo bar foo quux/; my @v = 1..4; ok t_cmp join(" ", keys %$jar), "foo bar foo quux", 'keys %$jar'; ok t_cmp join(" ", values %$jar), "1 2 3 4", 'values %$jar'; ok t_cmp join (" ", each %$jar), "$k[$_] $v[$_]", 'each %$jar: ' . $_ for 0..3; ok t_cmp join(" ", $jar->get("foo")), "1 3", '$jar->get("foo")'; ok $jar == $jar->cookie_class("APR::Request::Cookie"); ok t_cmp $_->is_tainted, 1, "is tainted: $_" for values %$jar; $_->is_tainted(0) for values %$jar; ok t_cmp $_->is_tainted, 0, "not tainted: $_" for values %$jar; eval { $jar->cookie_class("APR::Request::Param") }; ok t_cmp $@, qr/^Usage/, "Bad class name"; ok t_cmp $jar->cookie_class(), "APR::Request::Cookie", "old class"; ok t_cmp $jar->cookie_class(__PACKAGE__), $jar, "class upgrade"; ok $jar->{foo}->isa(__PACKAGE__); return 0; } 1; libapreq2-2.17/glue/perl/t/response/TestAPI/error.pm0000644000175000017500000000073114277401734021705 0ustar jortonjortonpackage TestAPI::error; use strict; use warnings FATAL => 'all'; use Apache::Test; use Apache::TestUtil; use APR::Request::Apache2; use APR::Request::Error qw/GENERAL TAINTED/; sub handler { my $r = shift; plan $r, tests => 3; my $req = APR::Request::Apache2->handle($r); ok $req->isa("APR::Request"); # XXX export some constants, and test apreq_xs_strerror ok TAINTED > GENERAL; ok GENERAL eq "Internal apreq error"; return 0; } 1; libapreq2-2.17/glue/perl/t/response/TestAPI/module.pm0000644000175000017500000000141314277401734022037 0ustar jortonjortonpackage TestAPI::module; use strict; use warnings FATAL => 'all'; use Apache::Test; use Apache::TestUtil; use APR::Request::Apache2; sub handler { my $r = shift; plan $r, tests => 9; my $req = APR::Request::Apache2->handle($r); ok $req->isa("APR::Request::Apache2"); ok t_cmp $req->brigade_limit, 256 * 1024, "default brigade limit is 256K"; ok $req->brigade_limit(1024); ok t_cmp $req->brigade_limit, 1024, "brigade_limit reset to 1K"; ok $req->read_limit(1024 * 1024); ok t_cmp $req->read_limit, 1024 * 1024, "read_limit reset to 1M"; ok not defined $req->temp_dir; ok $req->temp_dir("/tmp"); ok t_cmp $req->temp_dir, "/tmp", "temp dir reset to /tmp"; # XXX parse, header_in & header_out tests return 0; } 1; libapreq2-2.17/glue/perl/t/response/TestAPI/param.pm0000644000175000017500000000356614277401734021665 0ustar jortonjortonpackage TestAPI::param; push our @ISA, "APR::Request::Param"; use strict; use warnings FATAL => 'all'; use Apache::Test; use Apache::TestUtil; use APR::Request::Param; use APR::Request::Apache2; sub handler { my $r = shift; plan $r, tests => 31; $r->args("foo=1;bar=2;foo=3;quux=4"); my $req = APR::Request::Apache2->handle($r); ok defined $req->args; ok t_cmp $req->args("foo"), 1, "scalar args(foo)"; ok t_cmp $req->args("bar"), 2, "scalar args(bar)"; ok t_cmp $req->args("quux"), 4, "scalar args(quux)"; my @rv = $req->args("foo"); ok t_cmp "@rv", "1 3", "list args(foo)"; @rv = $req->args("bar"); ok t_cmp "@rv", "2", "list args(bar)"; @rv = $req->args("quux"); ok t_cmp "@rv", "4", "list args(quux)"; my $args = $req->args(); ok $args->isa("APR::Request::Param::Table"); ok t_cmp $args->{foo}, 1, '$args->{foo} == 1'; ok t_cmp $args->{bar}, 2, '$args->{bar} == 2'; ok t_cmp $args->{quux}, 4, '$args->{quux} == 4'; my @k = qw/foo bar foo quux/; my @v = 1..4; ok t_cmp join(" ", keys %$args), "foo bar foo quux", 'keys %$args'; ok t_cmp join(" ", values %$args), "1 2 3 4", 'values %$args'; ok t_cmp join (" ", each %$args), "$k[$_] $v[$_]", 'each %$args: ' . $_ for 0..3; ok t_cmp join(" ", $args->get("foo")), "1 3", '$args->get("foo")'; ok $args == $args->param_class("APR::Request::Param"); ok t_cmp $_->is_tainted, 1, "is tainted: $_" for values %$args; $_->is_tainted(0) for values %$args; ok t_cmp $_->is_tainted, 0, "not tainted: $_" for values %$args; eval { $args->param_class("APR::Request::Cookie") }; ok t_cmp $@, qr/^Usage/, "Bad class name"; ok t_cmp $args->param_class(), "APR::Request::Param", "old class"; ok t_cmp $args->param_class(__PACKAGE__), $args, "class upgrade"; ok $args->{foo}->isa(__PACKAGE__); return 0; } 1; libapreq2-2.17/glue/perl/t/response/TestApReq/big_input.pm0000644000175000017500000000110414277401734023126 0ustar jortonjortonpackage TestApReq::big_input; use strict; use warnings FATAL => 'all'; use Apache2::Request (); use Apache2::RequestIO; use Apache2::RequestRec; use Apache2::Const -compile => qw(OK); sub handler { my $r = shift; my $req = Apache2::Request->new($r); my $len = 0; for ($req->param) { my $val = $req->param($_) || ''; $len += length($_) + length($val) + 2; # +2 ('=' and '&') } $len--; # the stick with two ends one '&' char off $req->content_type('text/plain'); $req->print($len); return Apache2::Const::OK; } 1; __END__ libapreq2-2.17/glue/perl/t/response/TestApReq/cookie.pm0000644000175000017500000000427114277401734022427 0ustar jortonjortonpackage TestApReq::cookie; use strict; use warnings FATAL => 'all'; use Apache2::RequestIO (); use Apache2::RequestRec (); use Apache2::Const -compile => qw(OK); use Apache2::Cookie (); use Apache2::Request (); sub handler { my $r = shift; my $req = Apache2::Request->new($r); my %cookies = eval { Apache2::Cookie->fetch($r) }; $r->content_type('text/plain'); my $test = $req->APR::Request::args('test'); my $key = $req->APR::Request::args('key'); if ($test eq 'cookies') { my $jar = Apache2::Cookie::Jar->new($r); if ($key eq 'first') { my $cookie = $jar->cookies('one'); $r->print($cookie->as_string()); } elsif ($key eq 'all') { my @cookies = $jar->cookies('two'); $r->print(join ' ', map { $_->as_string() } @cookies); } else { my @names = $jar->cookies(); $r->print(join ' ', map { $_ } @names); } } elsif ($test eq 'overload') { $r->print($cookies{one}); } elsif ($test eq 'wordpress') { $r->print("ok") if $@; } elsif ($key and $cookies{$key}) { if ($test eq "bake") { $cookies{$key}->bake($r); } elsif ($test eq "bake2") { $cookies{$key}->bake2($r); } $r->print($cookies{$key}->value); } else { my @expires; @expires = ("expires", $req->APR::Request::args('expires')) if $req->APR::Request::args('expires'); my $cookie = Apache2::Cookie->new($r, name => "foo", value => $test, domain => "example.com", path => "/quux", @expires); if ($test eq "bake" or $test eq "") { $cookie->bake($req); } elsif ($test eq "bake2") { $cookie->version(1); $cookie->bake2($req); } elsif ($test eq 'httponly'){ $cookie->httponly(1); $cookie->bake($req); } $r->print($cookie->value); } return Apache2::Const::OK; } 1; __END__ libapreq2-2.17/glue/perl/t/response/TestApReq/cookie2.pm0000644000175000017500000000255314277401734022512 0ustar jortonjortonpackage TestApReq::cookie2; use strict; use warnings FATAL => 'all'; use Apache::Test; use Apache::TestUtil; use Apache2::RequestRec (); use Apache2::Const -compile => qw(OK); use Apache2::Cookie (); sub handler { my $r = shift; plan $r, tests => 5; { my $cookie = Apache2::Cookie->new($r, name => 'n', value => undef); ok t_cmp( $cookie, undef, "value => undef return undef not a cookie" ); } { my $cookie = Apache2::Cookie->new($r, name => 'n'); ok t_cmp( $cookie, undef, "no value attribute specified" ); } { my $cookie = Apache2::Cookie->new($r, name => 'n', value => ''); ok t_cmp( $cookie, "n=", "'' returns a valid cookie object" ); } { my $cookie = Apache2::Cookie->new($r, name => 'n', value => []); ok t_cmp( $cookie, "n=", "value => [] returns a valid cookie object" ); } { my $cookie = Apache2::Cookie->new($r, name => 'n', value => {}); ok t_cmp( $cookie, "n=", "value => {} returns a valid cookie object" ); } return Apache2::Const::OK; } 1; __END__ libapreq2-2.17/glue/perl/t/response/TestApReq/inherit.pm0000644000175000017500000000140014277401734022607 0ustar jortonjortonpackage TestApReq::inherit; use Apache2::Cookie; use base qw/Apache2::Request Apache2::Cookie::Jar/; use strict; use warnings FATAL => 'all'; use APR; use Apache2::RequestRec; use Apache2::RequestIO; use Apache2::Const -compile => qw(OK); sub handler { my $r = shift; $r = __PACKAGE__->new($r); # tickles refcnt bug in apreq-1 die "Wrong package: ", ref $r unless $r->isa('TestApReq::inherit'); $r->content_type('text/plain'); # look for segfault when $r->isa("Apache2::Request") my $req = bless { r => $r }; $req->printf("method => %s\n", $req->method); $req->printf("cookie => %s\n", $req->cookies->{"apache"}->as_string); return Apache2::Const::OK; } sub DESTROY { $_[0]->print("DESTROYING ", __PACKAGE__, " object\n") } 1; libapreq2-2.17/glue/perl/t/response/TestApReq/request.pm0000644000175000017500000001341614277401734022647 0ustar jortonjortonpackage TestApReq::request; use strict; use warnings FATAL => 'all'; use Apache2::RequestRec; use Apache2::RequestIO; use Apache2::Request (); use Apache2::Connection; use Apache2::Upload; use APR::Pool; use APR::Bucket; use APR::PerlIO; use Apache2::ServerUtil; use File::Spec; use Apache2::Const -compile => qw(OK); my $data; sub hook { my ($upload, $buffer) = @_; warn "$upload saw EOS" and return unless defined $buffer; $data .= $buffer; } sub handler { my $r = shift; my $temp_dir = File::Spec->catfile(Apache2::ServerUtil::server_root, 'logs'); my $req = Apache2::Request->new($r, POST_MAX => 1_000_000, TEMP_DIR => $temp_dir); # $req->temp_dir($temp_dir); # $req->read_limit(1_000_000); $req->content_type('text/plain'); my $test = $req->APR::Request::args('test'); my $method = $r->method; if ($test eq 'param') { my $table = $req->APR::Request::args(); my $value = $req->param('value'); $req->print($value); } elsif ($test eq 'slurp') { my ($upload) = values %{$req->upload}; $upload->slurp(my $data); if ($upload->size != length $data) { $req->print("Size mismatch: size() reports ", $upload->size, " but slurp() length is ", length $data, "\n"); } $req->print($data); } elsif ($test eq 'bb') { my ($upload) = $req->upload("HTTPUPLOAD"); my $bb = $upload->bb; my $e = $bb->first; while ($e) { $e->read(my $buf); $req->print($buf); $e = $bb->next($e); } } elsif ($test eq 'tempname') { my $upload = $req->upload("HTTPUPLOAD"); my $name = $upload->tempname; my ($dir) = $name =~ /^(.+)apreq\w{6}$/; chop $dir; die "Tempfile in wrong temp_dir (expected $temp_dir, saw $dir)" unless $dir eq $temp_dir; open my $fh, "<", $name or die "Can't open $name: $!"; $r->print(<$fh>); } elsif ($test eq 'link') { my $upload = $req->upload("HTTPUPLOAD"); my $link_file = File::Spec->catfile("$temp_dir", "linktest"); unlink $link_file if -f $link_file; $upload->link($link_file) or die "Can't link to $link_file: $!"; open my $fh, "<", $link_file or die "Can't open $link_file: $!"; $r->print(<$fh>); } elsif ($test eq 'fh') { my $upload = $req->upload(($req->upload)[0]); my $fh = $upload->fh; read $upload->fh, my $fh_contents, $upload->size; $upload->slurp(my $slurp_data); die 'fh contents != slurp data' unless $fh_contents eq $slurp_data; read $fh, $fh_contents, $upload->size; die '$fh contents != slurp data' unless $fh_contents eq $slurp_data; seek $fh, 0, 0; $r->print(<$fh>); } elsif ($test eq 'io') { my $upload = $req->upload(($req->upload)[0]); my $io = $upload->io; read $upload->io, my $io_contents, $upload->size; $upload->slurp(my $slurp_data); die "io contents != slurp data" unless $io_contents eq $slurp_data; undef $io_contents; $upload->io->read($io_contents, $upload->size); die "io contents != slurp data" unless $io_contents eq $slurp_data; my $bb = $upload->bb; my $e = $bb->first; my $bb_contents = ""; while ($e) { $e->read(my $buf); $bb_contents .= $buf; $e = $bb->next($e); } die "io contents != brigade contents" unless $io_contents eq $bb_contents; $r->print(<$io>); } elsif ($test eq 'bad') { eval {my $q = $req->APR::Request::args('query')}; if (ref $@ && $@->isa("APR::Request::Error")) { $req->upload("HTTPUPLOAD")->slurp(my $data); $req->print($data); } } elsif ($test eq 'hook') { $data = ""; $req->upload_hook(\&hook); $req->parse; $r->print($data); } elsif ($test eq 'type') { my $upload = $req->upload("HTTPUPLOAD"); die "content-type mismatch" unless $upload->info->{"Content-Type"} eq $upload->type; $r->print($upload->type); } elsif ($test eq 'disable_uploads') { $req->disable_uploads(1); eval {my $upload = $req->upload('HTTPUPLOAD')}; if (ref $@ eq "APR::Request::Error") { my $args = $@->{_r}->APR::Request::args('test'); # checks _r is an object ref my $upload = $@->body('HTTPUPLOAD'); # no exception this time! die "args test failed" unless $args eq $test; $args = $@->APR::Request::args; my $test_string = ""; # MAGIC ITERATOR TESTS if ($^V ge v5.8.0) { warn "Running MAGIC ITERATOR tests"; $test_string .= "$a=$b;" while ($a, $b) = each %$args; die "each test failed: '$test_string'" unless $test_string eq "test=disable_uploads;foo=bar1;foo=bar2;"; $test_string = join ":", values %$args; die "values test failed: '$test_string'" unless $test_string eq "disable_uploads:bar1:bar2"; $test_string = join ":", %$args; die "list deref test failed: '$test_string'" unless $test_string eq "test:disable_uploads:foo:bar1:foo:bar2"; } # TABLE DO TESTS { my $do_data = ""; $args->do( sub { $do_data .= "@_"; 1 } ); die "do() test failed: '$do_data'" unless $do_data eq "test disable_uploadsfoo bar1foo bar2"; } $req->print("ok"); } } return Apache2::Const::OK; } 1; __END__ libapreq2-2.17/glue/perl/t/response/TestApReq/upload.pm0000644000175000017500000000443014277401734022437 0ustar jortonjortonpackage TestApReq::upload; use strict; use warnings FATAL => 'all'; use Apache2::RequestRec; use Apache2::RequestIO; use Apache2::Request (); use Apache2::Upload; use Apache2::Const -compile => qw(OK); use File::Spec; require File::Basename; sub handler { my $r = shift; my $req = Apache2::Request->new($r); my $temp_dir = File::Spec->tmpdir; my $method = $req->APR::Request::args('method'); my $has_md5 = $req->APR::Request::args('has_md5'); require Digest::MD5 if $has_md5; my $upload = $req->upload(($req->upload)[0]); my $type = $upload->type; my $basename = File::Basename::basename($upload->filename); my ($data, $fh); if ($method eq 'slurp') { $upload->slurp($data); } elsif ($method eq 'fh') { read $upload->fh, $data, $upload->size; } elsif ($method eq 'tempname') { my $name = $upload->tempname; open $fh, "<", $name or die "Can't open $name: $!"; binmode $fh; read $fh, $data, $upload->size; close $fh; } elsif ($method eq 'link') { my $link_file = File::Spec->catfile($temp_dir, "linkfile"); unlink $link_file if -f $link_file; $upload->link($link_file) or die "Can't link to $link_file: $!"; open $fh, "<", $link_file or die "Can't open $link_file: $!"; binmode $fh; read $fh, $data, $upload->size; close $fh; unlink $link_file if -f $link_file; } elsif ($method eq 'io') { read $upload->io, $data, $upload->size; } else { die "unknown method: $method"; } my $temp_file = File::Spec->catfile($temp_dir, $basename); unlink $temp_file if -f $temp_file; open my $wfh, ">", $temp_file or die "Can't open $temp_file: $!"; binmode $wfh; print $wfh $data; close $wfh; my $cs = $has_md5 ? cs($temp_file) : 0; $req->content_type('text/plain'); my $size = -s $temp_file; my $result = qq{type=$type;size=$size;filename=$basename;md5=$cs}; $r->print($result); unlink $temp_file if -f $temp_file; return Apache2::Const::OK; } sub cs { my $file = shift; open my $fh, '<', $file or die qq{Cannot open "$file": $!}; binmode $fh; my $md5 = Digest::MD5->new->addfile($fh)->hexdigest; close $fh; return $md5; } 1; __END__ libapreq2-2.17/glue/perl/t/TEST.PL0000644000175000017500000000221514277401734016122 0ustar jortonjorton#!perl use strict; use warnings FATAL => 'all'; use Apache2::Build; use constant WIN32 => Apache2::Build::WIN32; use Cwd; my $cwd = WIN32 ? Win32::GetLongPathName(cwd) : cwd; $cwd =~ m{^(.+)/glue/perl$} or die "Can't find base cvs directory"; my $base_dir = $1; my $module_dir = "$base_dir/module"; my $mod_apreq2_dir = Apache2::Build::WIN32 ? "$base_dir/win32/libs" : "$module_dir/apache2/.libs"; use base 'Apache::TestRunPerl'; main::->new->run(@ARGV); sub pre_configure { my $self = shift; # Don't load an installed mod_apreq Apache::TestConfig::autoconfig_skip_module_add('mod_apreq.c'); Apache::TestConfig::autoconfig_skip_module_add('mod_apreq2.c'); $self->SUPER::pre_configure(); } sub configure_modperl { my $self = shift; my $cfg = $self->{test_config}; # make sure Win32 uses the just-built libapreq2.dll if (WIN32) { my $library_dir = $mod_apreq2_dir; $cfg->preamble(qq{LoadFile "$library_dir/libapreq2.dll"\n}); } $cfg->preamble(IfModule => '!mod_apreq2.c', qq(LoadModule apreq_module "$mod_apreq2_dir/mod_apreq2.so"\n)); $self->SUPER::configure_modperl(); } libapreq2-2.17/glue/perl/xsbuilder/APR/Request/Apache2/Apache2.pm0000644000175000017500000000005514277401734023762 0ustar jortonjortonuse APR::Request; push @ISA, "APR::Request"; libapreq2-2.17/glue/perl/xsbuilder/APR/Request/Apache2/Apache2.pod0000644000175000017500000000276114277401734024136 0ustar jortonjorton=for testing ok(1); =head1 NAME APR::Request::Apache2 - wrapper for a mod_apreq2 handle. =head1 SYNOPSIS use APR::Request::Apache2; my $req = APR::Request::Apache2->handle($r); =head1 DESCRIPTION The APR::Request::Apache2 module provides a constructor for interfacing with the mod_apreq2 Apache module. This manpage documents version 2.17 of the APR::Request::Apache2 package. =head1 METHODS APR::Request::Apache2 - derived from C<< APR::Request >>. =head2 handle APR::Request::Apache2->handle($r) Creates an APR::Request::Apache2 object. The argument C<< $r >> is an Apache2::RequestRec object (from mod_perl2). =head1 SEE ALSO L<< APR::Request >>, L<< Apache2::RequestRec >>. =head1 COPYRIGHT Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to You under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. libapreq2-2.17/glue/perl/xsbuilder/APR/Request/Apache2/Apache2.xs0000644000175000017500000000067714277401734024012 0ustar jortonjortonMODULE = APR::Request::Apache2 PACKAGE = APR::Request::Apache2 BOOT: { apr_version_t version; apr_version(&version); if (version.major != APR_MAJOR_VERSION) Perl_croak(aTHX_ "Can't load module APR::Request::Apache2 : " "wrong libapr major version " "(expected %d, saw %d)", APR_MAJOR_VERSION, version.major); } libapreq2-2.17/glue/perl/xsbuilder/APR/Request/Apache2/APR__Request__Apache2.h0000644000175000017500000000002614277401734026303 0ustar jortonjorton#include "mod_perl.h" libapreq2-2.17/glue/perl/xsbuilder/APR/Request/APR__Request.h0000644000175000017500000004575314277401734023376 0ustar jortonjorton#include "apreq_xs_tables.h" MP_STATIC XS(apreq_xs_jar) { dXSARGS; apreq_handle_t *req; SV *obj; IV iv; if (items == 0 || items > 2 || !SvROK(ST(0)) || !sv_derived_from(ST(0), "APR::Request")) Perl_croak(aTHX_ "Usage: APR::Request::jar($req [,$name])"); obj = apreq_xs_sv2object(aTHX_ ST(0), HANDLE_CLASS, 'r'); iv = SvIVX(obj); req = INT2PTR(apreq_handle_t *, iv); if (items == 2 && GIMME_V == G_SCALAR) { apreq_cookie_t *c = apreq_jar_get(req, SvPV_nolen(ST(1))); if (c != NULL) { ST(0) = apreq_xs_cookie2sv(aTHX_ c, NULL, obj); sv_2mortal(ST(0)); XSRETURN(1); } else { const apr_table_t *t; apr_status_t s; s = apreq_jar(req, &t); if (apreq_module_status_is_error(s) && !sv_derived_from(ST(0), ERROR_CLASS)) apreq_xs_croak(aTHX_ newHV(), obj, s, "APR::Request::jar", ERROR_CLASS); XSRETURN_UNDEF; } } else { struct apreq_xs_do_arg d = {NULL, NULL, NULL, aTHX}; const apr_table_t *t; apr_status_t s; s = apreq_jar(req, &t); if (apreq_module_status_is_error(s) && !sv_derived_from(ST(0), ERROR_CLASS)) apreq_xs_croak(aTHX_ newHV(), obj, s, "APR::Request::jar", ERROR_CLASS); if (t == NULL) XSRETURN_EMPTY; d.pkg = NULL; d.parent = obj; switch (GIMME_V) { case G_ARRAY: XSprePUSH; PUTBACK; if (items == 1) apr_table_do(apreq_xs_cookie_table_keys, &d, t, NULL); else apr_table_do(apreq_xs_cookie_table_values, &d, t, SvPV_nolen(ST(1)), NULL); return; case G_SCALAR: ST(0) = apreq_xs_cookie_table2sv(aTHX_ t, COOKIE_TABLE_CLASS, obj, NULL, 0); sv_2mortal(ST(0)); XSRETURN(1); default: XSRETURN(0); } } } MP_STATIC XS(apreq_xs_args) { dXSARGS; apreq_handle_t *req; SV *obj; IV iv; if (items == 0 || items > 2 || !SvROK(ST(0)) || !sv_derived_from(ST(0), HANDLE_CLASS)) Perl_croak(aTHX_ "Usage: APR::Request::args($req [,$name])"); obj = apreq_xs_sv2object(aTHX_ ST(0), HANDLE_CLASS, 'r'); iv = SvIVX(obj); req = INT2PTR(apreq_handle_t *, iv); if (items == 2 && GIMME_V == G_SCALAR) { apreq_param_t *p = apreq_args_get(req, SvPV_nolen(ST(1))); if (p != NULL) { ST(0) = apreq_xs_param2sv(aTHX_ p, NULL, obj); sv_2mortal(ST(0)); XSRETURN(1); } else { const apr_table_t *t; apr_status_t s; s = apreq_args(req, &t); if (apreq_module_status_is_error(s) && !sv_derived_from(ST(0), ERROR_CLASS)) apreq_xs_croak(aTHX_ newHV(), obj, s, "APR::Request::args", ERROR_CLASS); XSRETURN_UNDEF; } } else { struct apreq_xs_do_arg d = {NULL, NULL, NULL, aTHX}; const apr_table_t *t; apr_status_t s; s = apreq_args(req, &t); if (apreq_module_status_is_error(s) && !sv_derived_from(ST(0), ERROR_CLASS)) apreq_xs_croak(aTHX_ newHV(), obj, s, "APR::Request::args", ERROR_CLASS); if (t == NULL) XSRETURN_EMPTY; d.pkg = NULL; d.parent = obj; switch (GIMME_V) { case G_ARRAY: XSprePUSH; PUTBACK; if (items == 1) apr_table_do(apreq_xs_param_table_keys, &d, t, NULL); else apr_table_do(apreq_xs_param_table_values, &d, t, SvPV_nolen(ST(1)), NULL); return; case G_SCALAR: ST(0) = apreq_xs_param_table2sv(aTHX_ t, PARAM_TABLE_CLASS, obj, NULL, 0); sv_2mortal(ST(0)); XSRETURN(1); default: XSRETURN(0); } } } MP_STATIC XS(apreq_xs_body) { dXSARGS; apreq_handle_t *req; SV *obj; IV iv; if (items == 0 || items > 2 || !SvROK(ST(0)) || !sv_derived_from(ST(0),HANDLE_CLASS)) Perl_croak(aTHX_ "Usage: APR::Request::body($req [,$name])"); obj = apreq_xs_sv2object(aTHX_ ST(0), HANDLE_CLASS, 'r'); iv = SvIVX(obj); req = INT2PTR(apreq_handle_t *, iv); if (items == 2 && GIMME_V == G_SCALAR) { apreq_param_t *p = apreq_body_get(req, SvPV_nolen(ST(1))); if (p != NULL) { ST(0) = apreq_xs_param2sv(aTHX_ p, NULL, obj); sv_2mortal(ST(0)); XSRETURN(1); } else { const apr_table_t *t; apr_status_t s; s = apreq_body(req, &t); if (apreq_module_status_is_error(s) && !sv_derived_from(ST(0), ERROR_CLASS)) apreq_xs_croak(aTHX_ newHV(), obj, s, "APR::Request::body", ERROR_CLASS); XSRETURN_UNDEF; } } else { struct apreq_xs_do_arg d = {NULL, NULL, NULL, aTHX}; const apr_table_t *t; apr_status_t s; s = apreq_body(req, &t); if (apreq_module_status_is_error(s) && !sv_derived_from(ST(0), ERROR_CLASS)) apreq_xs_croak(aTHX_ newHV(), obj, s, "APR::Request::body", ERROR_CLASS); if (t == NULL) XSRETURN_EMPTY; d.pkg = NULL; d.parent = obj; switch (GIMME_V) { case G_ARRAY: XSprePUSH; PUTBACK; if (items == 1) apr_table_do(apreq_xs_param_table_keys, &d, t, NULL); else apr_table_do(apreq_xs_param_table_values, &d, t, SvPV_nolen(ST(1)), NULL); return; case G_SCALAR: ST(0) = apreq_xs_param_table2sv(aTHX_ t, PARAM_TABLE_CLASS, obj, NULL, 0); sv_2mortal(ST(0)); XSRETURN(1); default: XSRETURN(0); } } } MP_STATIC XS(apreq_xs_param) { dXSARGS; apreq_handle_t *req; SV *obj; IV iv; if (items == 0 || items > 2 || !SvROK(ST(0)) || !sv_derived_from(ST(0), "APR::Request")) Perl_croak(aTHX_ "Usage: APR::Request::param($req [,$name])"); obj = apreq_xs_sv2object(aTHX_ ST(0), HANDLE_CLASS, 'r'); iv = SvIVX(obj); req = INT2PTR(apreq_handle_t *, iv); if (items == 2 && GIMME_V == G_SCALAR) { apreq_param_t *p = apreq_param(req, SvPV_nolen(ST(1))); if (p != NULL) { ST(0) = apreq_xs_param2sv(aTHX_ p, NULL, obj); sv_2mortal(ST(0)); XSRETURN(1); } else { XSRETURN_UNDEF; } } else { struct apreq_xs_do_arg d = {NULL, NULL, NULL, aTHX}; const apr_table_t *t; d.pkg = NULL; d.parent = obj; switch (GIMME_V) { case G_ARRAY: XSprePUSH; PUTBACK; if (items == 1) { apreq_args(req, &t); if (t != NULL) apr_table_do(apreq_xs_param_table_keys, &d, t, NULL); apreq_body(req, &t); if (t != NULL) apr_table_do(apreq_xs_param_table_keys, &d, t, NULL); } else { char *val = SvPV_nolen(ST(1)); apreq_args(req, &t); if (t != NULL) apr_table_do(apreq_xs_param_table_values, &d, t, val, NULL); apreq_body(req, &t); if (t != NULL) apr_table_do(apreq_xs_param_table_values, &d, t, val, NULL); } return; case G_SCALAR: t = apreq_params(req, req->pool); if (t == NULL) XSRETURN_UNDEF; ST(0) = apreq_xs_param_table2sv(aTHX_ t, PARAM_TABLE_CLASS, obj, NULL, 0); sv_2mortal(ST(0)); XSRETURN(1); default: XSRETURN(0); } } } MP_STATIC XS(apreq_xs_parse) { dXSARGS; apreq_handle_t *req; apr_status_t s; const apr_table_t *t; if (items != 1 || !SvROK(ST(0))) Perl_croak(aTHX_ "Usage: APR::Request::parse($req)"); req = apreq_xs_sv2handle(aTHX_ ST(0)); XSprePUSH; EXTEND(SP, 3); s = apreq_jar(req, &t); PUSHs(sv_2mortal(apreq_xs_error2sv(aTHX_ s))); s = apreq_args(req, &t); PUSHs(sv_2mortal(apreq_xs_error2sv(aTHX_ s))); s = apreq_body(req, &t); PUSHs(sv_2mortal(apreq_xs_error2sv(aTHX_ s))); PUTBACK; } struct hook_ctx { SV *hook; SV *bucket_data; SV *parent; PerlInterpreter *perl; }; #define DEREF(slot) if (ctx->slot) SvREFCNT_dec(ctx->slot) static apr_status_t upload_hook_cleanup(void *ctx_) { struct hook_ctx *ctx = ctx_; #ifdef USE_ITHREADS dTHXa(ctx->perl); #endif DEREF(hook); DEREF(bucket_data); DEREF(parent); return APR_SUCCESS; } APR_INLINE static apr_status_t eval_upload_hook(pTHX_ apreq_param_t *upload, struct hook_ctx *ctx) { dSP; SV *sv = ctx->bucket_data; PUSHMARK(SP); EXTEND(SP, 2); ENTER; SAVETMPS; sv = apreq_xs_param2sv(aTHX_ upload, PARAM_CLASS, ctx->parent); PUSHs(sv_2mortal(sv)); PUSHs(ctx->bucket_data); PUTBACK; perl_call_sv(ctx->hook, G_EVAL|G_DISCARD); FREETMPS; LEAVE; if (SvTRUE(ERRSV)) { Perl_warn(aTHX_ "Upload hook failed: %s", SvPV_nolen(ERRSV)); return APREQ_ERROR_GENERAL; } return APR_SUCCESS; } static apr_status_t apreq_xs_upload_hook(APREQ_HOOK_ARGS) { struct hook_ctx *ctx = hook->ctx; /* ctx set during $req->config */ apr_bucket *e; apr_status_t s = APR_SUCCESS; #ifdef USE_ITHREADS dTHXa(ctx->perl); #endif if (bb == NULL) { if (hook->next) return apreq_hook_run(hook->next, param, bb); return APR_SUCCESS; } for (e = APR_BRIGADE_FIRST(bb); e!= APR_BRIGADE_SENTINEL(bb); e = APR_BUCKET_NEXT(e)) { apr_size_t len; const char *data; if (APR_BUCKET_IS_EOS(e)) { /*last call on this upload */ SV *sv = ctx->bucket_data; ctx->bucket_data = &PL_sv_undef; s = eval_upload_hook(aTHX_ param, ctx); ctx->bucket_data = sv; if (s != APR_SUCCESS) return s; break; } s = apr_bucket_read(e, &data, &len, APR_BLOCK_READ); if (s != APR_SUCCESS) { s = APR_SUCCESS; continue; } sv_setpvn(ctx->bucket_data, data, (STRLEN)len); s = eval_upload_hook(aTHX_ param, ctx); if (s != APR_SUCCESS) return s; } if (hook->next) s = apreq_hook_run(hook->next, param, bb); return s; } static int apreq_xs_cookie_table_do_sub(void *data, const char *key, const char *val) { struct apreq_xs_do_arg *d = data; apreq_cookie_t *c = apreq_value_to_cookie(val); dTHXa(d->perl); dSP; SV *sv = apreq_xs_cookie2sv(aTHX_ c, d->pkg, d->parent); int rv; ENTER; SAVETMPS; PUSHMARK(SP); EXTEND(SP,2); PUSHs(sv_2mortal(newSVpvn(c->v.name, c->v.nlen))); PUSHs(sv_2mortal(sv)); PUTBACK; rv = call_sv(d->sub, G_SCALAR); SPAGAIN; rv = (1 == rv) ? POPi : 1; PUTBACK; FREETMPS; LEAVE; return rv; } MP_STATIC XS(apreq_xs_cookie_table_do) { dXSARGS; struct apreq_xs_do_arg d = { NULL, NULL, NULL, aTHX }; const apr_table_t *t; int i, rv = 1; SV *sv, *t_obj; IV iv; MAGIC *mg; if (items < 2 || !SvROK(ST(0)) || !SvROK(ST(1))) Perl_croak(aTHX_ "Usage: $object->do(\\&callback, @keys)"); sv = ST(0); t_obj = apreq_xs_sv2object(aTHX_ sv, COOKIE_TABLE_CLASS, 't'); iv = SvIVX(t_obj); t = INT2PTR(const apr_table_t *, iv); mg = mg_find(t_obj, PERL_MAGIC_ext); d.parent = mg->mg_obj; d.pkg = mg->mg_ptr; d.sub = ST(1); if (items == 2) { rv = apr_table_do(apreq_xs_cookie_table_do_sub, &d, t, NULL); XSRETURN_IV(rv); } for (i = 2; i < items; ++i) { const char *key = SvPV_nolen(ST(i)); rv = apr_table_do(apreq_xs_cookie_table_do_sub, &d, t, key, NULL); if (rv == 0) break; } XSRETURN_IV(rv); } MP_STATIC XS(apreq_xs_cookie_table_FETCH) { dXSARGS; const apr_table_t *t; const char *cookie_class; SV *sv, *obj, *parent; IV iv; MAGIC *mg; if (items != 2 || !SvROK(ST(0)) || !sv_derived_from(ST(0), COOKIE_TABLE_CLASS)) Perl_croak(aTHX_ "Usage: " COOKIE_TABLE_CLASS "::FETCH($table, $key)"); sv = ST(0); obj = apreq_xs_sv2object(aTHX_ sv, COOKIE_TABLE_CLASS, 't'); iv = SvIVX(obj); t = INT2PTR(const apr_table_t *, iv); mg = mg_find(obj, PERL_MAGIC_ext); cookie_class = mg->mg_ptr; parent = mg->mg_obj; if (GIMME_V == G_SCALAR) { IV idx; const char *key, *val; const apr_array_header_t *arr; apr_table_entry_t *te; key = SvPV_nolen(ST(1)); idx = SvCUR(obj); arr = apr_table_elts(t); te = (apr_table_entry_t *)arr->elts; if (idx > 0 && idx <= arr->nelts && !strcasecmp(key, te[idx-1].key)) val = te[idx-1].val; else val = apr_table_get(t, key); if (val != NULL) { apreq_cookie_t *c = apreq_value_to_cookie(val); ST(0) = apreq_xs_cookie2sv(aTHX_ c, cookie_class, parent); sv_2mortal(ST(0)); XSRETURN(1); } else { XSRETURN_UNDEF; } } else if (GIMME_V == G_ARRAY) { struct apreq_xs_do_arg d = {NULL, NULL, NULL, aTHX}; d.pkg = cookie_class; d.parent = parent; XSprePUSH; PUTBACK; apr_table_do(apreq_xs_cookie_table_values, &d, t, SvPV_nolen(ST(1)), NULL); } else XSRETURN(0); } MP_STATIC XS(apreq_xs_cookie_table_NEXTKEY) { dXSARGS; SV *sv, *obj; IV iv, idx; const apr_table_t *t; const apr_array_header_t *arr; apr_table_entry_t *te; if (!SvROK(ST(0))) Perl_croak(aTHX_ "Usage: $table->NEXTKEY($prev)"); sv = ST(0); obj = apreq_xs_sv2object(aTHX_ sv, COOKIE_TABLE_CLASS, 't'); iv = SvIVX(obj); t = INT2PTR(const apr_table_t *, iv); arr = apr_table_elts(t); te = (apr_table_entry_t *)arr->elts; if (items == 1) SvCUR(obj) = 0; if (SvCUR(obj) >= arr->nelts) { SvCUR(obj) = 0; XSRETURN_UNDEF; } idx = SvCUR(obj)++; sv = newSVpv(te[idx].key, 0); ST(0) = sv_2mortal(sv); XSRETURN(1); } static int apreq_xs_param_table_do_sub(void *data, const char *key, const char *val) { struct apreq_xs_do_arg *d = data; apreq_param_t *p = apreq_value_to_param(val); dTHXa(d->perl); dSP; SV *sv = apreq_xs_param2sv(aTHX_ p, d->pkg, d->parent); int rv; ENTER; SAVETMPS; PUSHMARK(SP); EXTEND(SP,2); PUSHs(sv_2mortal(newSVpvn(p->v.name, p->v.nlen))); PUSHs(sv_2mortal(sv)); PUTBACK; rv = call_sv(d->sub, G_SCALAR); SPAGAIN; rv = (1 == rv) ? POPi : 1; PUTBACK; FREETMPS; LEAVE; return rv; } MP_STATIC XS(apreq_xs_param_table_do) { dXSARGS; struct apreq_xs_do_arg d = { NULL, NULL, NULL, aTHX }; const apr_table_t *t; int i, rv = 1; SV *sv, *t_obj; IV iv; MAGIC *mg; if (items < 2 || !SvROK(ST(0)) || !SvROK(ST(1))) Perl_croak(aTHX_ "Usage: $object->do(\\&callback, @keys)"); sv = ST(0); t_obj = apreq_xs_sv2object(aTHX_ sv, PARAM_TABLE_CLASS, 't'); iv = SvIVX(t_obj); t = INT2PTR(const apr_table_t *, iv); mg = mg_find(t_obj, PERL_MAGIC_ext); d.parent = mg->mg_obj; d.pkg = mg->mg_ptr; d.sub = ST(1); if (items == 2) { rv = apr_table_do(apreq_xs_param_table_do_sub, &d, t, NULL); XSRETURN_IV(rv); } for (i = 2; i < items; ++i) { const char *key = SvPV_nolen(ST(i)); rv = apr_table_do(apreq_xs_param_table_do_sub, &d, t, key, NULL); if (rv == 0) break; } XSRETURN_IV(rv); } MP_STATIC XS(apreq_xs_param_table_FETCH) { dXSARGS; const apr_table_t *t; const char *param_class; SV *sv, *t_obj, *parent; IV iv; MAGIC *mg; if (items != 2 || !SvROK(ST(0)) || !sv_derived_from(ST(0), PARAM_TABLE_CLASS)) Perl_croak(aTHX_ "Usage: " PARAM_TABLE_CLASS "::FETCH($table, $key)"); sv = ST(0); t_obj = apreq_xs_sv2object(aTHX_ sv, PARAM_TABLE_CLASS, 't'); iv = SvIVX(t_obj); t = INT2PTR(const apr_table_t *, iv); mg = mg_find(t_obj, PERL_MAGIC_ext); param_class = mg->mg_ptr; parent = mg->mg_obj; if (GIMME_V == G_SCALAR) { IV idx; const char *key, *val; const apr_array_header_t *arr; apr_table_entry_t *te; key = SvPV_nolen(ST(1)); idx = SvCUR(t_obj); arr = apr_table_elts(t); te = (apr_table_entry_t *)arr->elts; if (idx > 0 && idx <= arr->nelts && !strcasecmp(key, te[idx-1].key)) val = te[idx-1].val; else val = apr_table_get(t, key); if (val != NULL) { apreq_param_t *p = apreq_value_to_param(val); ST(0) = apreq_xs_param2sv(aTHX_ p, param_class, parent); sv_2mortal(ST(0)); XSRETURN(1); } else { XSRETURN_UNDEF; } } else if (GIMME_V == G_ARRAY) { struct apreq_xs_do_arg d = {NULL, NULL, NULL, aTHX}; d.pkg = param_class; d.parent = parent; XSprePUSH; PUTBACK; apr_table_do(apreq_xs_param_table_values, &d, t, SvPV_nolen(ST(1)), NULL); } else XSRETURN(0); } MP_STATIC XS(apreq_xs_param_table_NEXTKEY) { dXSARGS; SV *sv, *obj; IV iv, idx; const apr_table_t *t; const apr_array_header_t *arr; apr_table_entry_t *te; if (!SvROK(ST(0)) || !sv_derived_from(ST(0), PARAM_TABLE_CLASS)) Perl_croak(aTHX_ "Usage: " PARAM_TABLE_CLASS "::NEXTKEY($table, $key)"); sv = ST(0); obj = apreq_xs_sv2object(aTHX_ sv, PARAM_TABLE_CLASS,'t'); iv = SvIVX(obj); t = INT2PTR(const apr_table_t *, iv); arr = apr_table_elts(t); te = (apr_table_entry_t *)arr->elts; if (items == 1) SvCUR(obj) = 0; if (SvCUR(obj) >= arr->nelts) { SvCUR(obj) = 0; XSRETURN_UNDEF; } idx = SvCUR(obj)++; sv = newSVpv(te[idx].key, 0); ST(0) = sv_2mortal(sv); XSRETURN(1); } libapreq2-2.17/glue/perl/xsbuilder/APR/Request/CGI/CGI.pm0000644000175000017500000000007414277401733022260 0ustar jortonjortonuse APR::Request; use APR::Pool; push @ISA, "APR::Request"; libapreq2-2.17/glue/perl/xsbuilder/APR/Request/CGI/CGI.pod0000644000175000017500000000274414277401734022435 0ustar jortonjorton=for testing require APR::Request::CGI; ok(1); =head1 NAME APR::Request::CGI - wrapper for libapreq2's CGI handle. =head1 SYNOPSIS use APR::Request::CGI; my $req = APR::Request::CGI->handle($pool); =head1 DESCRIPTION The APR::Request::CGI module provides a constructor for accessing CGI request data associated to a pool via libapreq2. This manpage documents version 2.17 of the APR::Request::CGI package. =head1 METHODS APR::Request::CGI - derived from C<< APR::Request >>. =head2 handle APR::Request::CGI->handle($pool) Creates an APR::Request::CGI object. The argument C<< $pool >> is an APR::Pool object. =head1 SEE ALSO L<< APR::Request >>, L<< APR::Pool >>. =head1 COPYRIGHT Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to You under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. libapreq2-2.17/glue/perl/xsbuilder/APR/Request/CGI/CGI.xs0000644000175000017500000000110614277401734022274 0ustar jortonjortonstatic apr_pool_t *apreq_xs_cgi_global_pool; MODULE = APR::Request::CGI PACKAGE = APR::Request::CGI BOOT: { apr_version_t version; apr_version(&version); if (version.major != APR_MAJOR_VERSION) Perl_croak(aTHX_ "Can't load module APR::Request::CGI : " "wrong libapr major version " "(expected %d, saw %d)", APR_MAJOR_VERSION, version.major); } apr_pool_create(&apreq_xs_cgi_global_pool, NULL); apreq_initialize(apreq_xs_cgi_global_pool); libapreq2-2.17/glue/perl/xsbuilder/APR/Request/Cookie/APR__Request__Cookie.h0000644000175000017500000000174114277401733026223 0ustar jortonjortonMP_STATIC XS(XS_APR__Request__Cookie_nil) { dXSARGS; (void)items; XSRETURN_EMPTY; } static char *apreq_xs_cookie_pool_copy(pTHX_ SV *obj, SV *value) { IV iv; STRLEN vlen; char *v; MAGIC *mg; apr_pool_t *p; SV *parent; if (!SvOK(value)) return NULL; v = SvPV(value, vlen); mg = mg_find(obj, PERL_MAGIC_ext); iv = SvIVX(mg->mg_obj); /* The parent of a cookie can be a either handle or a pool. * Pool-type parents arise from make(), and are expected to * reflect the typical usage for apreq_xs_cookie_pool_copy. */ parent = sv_2mortal(newRV_inc(mg->mg_obj)); if (sv_derived_from(parent, "APR::Pool")) p = INT2PTR(apr_pool_t *, iv); else if (sv_derived_from(parent, "APR::Request")) p = (INT2PTR(apreq_handle_t *, iv))->pool; else croak("Pool not found: unrecognized parent class %s", HvNAME(SvSTASH(mg->mg_obj))); return apr_pstrmemdup(p, v, vlen); } libapreq2-2.17/glue/perl/xsbuilder/APR/Request/Cookie/Cookie.pm0000644000175000017500000000111614277401734023675 0ustar jortonjortonpackage APR::Request::Cookie; use APR::Request; sub new { my ($class, $pool, %attrs) = @_; my $name = delete $attrs{name}; my $value = delete $attrs{value}; $name = delete $attrs{-name} unless defined $name; $value = delete $attrs{-value} unless defined $value; return unless defined $name and defined $value; my $cookie = $class->make($pool, $name, $class->freeze($value)); while(my ($k, $v) = each %attrs) { $k =~ s/^-//; $cookie->$k($v); } return $cookie; } sub freeze { return $_[1] } sub thaw { return shift->value } libapreq2-2.17/glue/perl/xsbuilder/APR/Request/Cookie/Cookie.pod0000644000175000017500000002060014277401733024041 0ustar jortonjorton=head1 NAME APR::Request::Cookie - wrapper for libapreq2's cookie API. =for testing use APR::Pool; use APR::Brigade; use APR::Bucket; use APR::BucketAlloc; use APR::Request; use APR::Request::Parser; $pool = APR::Pool->new; $ba = APR::BucketAlloc->new($pool); $bb = APR::Brigade->new($pool, $ba); $bb->insert_tail(APR::Bucket->new($ba, "alpha=body1&beta=body2;foo=body3")); $parser = APR::Request::Parser->urlencoded($pool, $ba, "application/x-www-form-urlencoded"); $req = APR::Request::Custom->handle($pool, "foo=bar", "cookie1=apache1;cookie2=apache2", $parser, 1e6, $bb); =head1 SYNOPSIS =for example begin use APR::Request::Cookie; # fetch inbound cookie $jar = $req->jar; $cookie1 = $jar->get("cookie1"); # generate new cookie $cookie = APR::Request::Cookie->new($req->pool, name => "foo", value => "bar", domain => "capricorn.com"); print "$cookie"; # prints "bar" $cookie->domain("example.com"); # change domains $cookie->version(1); # upgrade it to conform with RFC 2109/2965. # send a response header print sprintf "Set-Cookie: %s\n", $cookie->as_string; =for example end =for example_testing ok "$cookie1" eq "apache1"; ok $jar->isa("APR::Request::Cookie::Table"); is $_STDOUT_ , qq[barSet-Cookie: foo=bar; Version=1; domain="example.com"\n]; =head1 DESCRIPTION The APR::Request::Cookie module provides base methods for interfacing with libapreq2's cookie API. It also provides a few utility functions and constants. This manpage documents version 2.17 of the APR::Request::Cookie package. =head1 OVERLOADS APR::Request::Cookie =head2 "" "$cookie" The double-quote interpolation operator maps to C<< APR::Request::Cookie::value() >>. =for example begin ok "$cookie" eq $cookie->value; =for example end =for example_testing 1; =head1 METHODS APR::Request::Cookie =head2 new APR::Request::Cookie->new($pool, name => $name, value => $value, %args) Creates a new cookie. Here C<< $pool >> is an APR::Pool object, and C<< $name >> is the cookie's name. The C<< $value >> is transformed into the cookie's raw value through the class' C<< freeze() >> method. The remaining arguments are optional: =over 4 =item -secure =item -httponly =item -version =item -path =item -domain =item -port =item -expires =item -comment =item -commentURL =back For details on these arguments, please consult the corresponding method's documentation. =head2 freeze APR::Request::Cookie->freeze($value) Class method representing the default serializer; here it returns $value unmodified. =for example begin ok "foo" eq APR::Request::Cookie->freeze("foo"); =for example end =for example_testing 1; =head2 thaw $cookie->thaw() Reverses C<< freeze() >>; here it simply returns $cookie->value since freeze() is a noop. =for example begin ok $cookie->thaw eq $cookie->value; =for example end =for example_testing 1; =head2 name $cookie->name() Fetch the cookie's name. This attribute cannot be modified and is never serialized; ie freeze() and thaw() do not act on the cookie's name. =for example begin =for example end =for example_testing is $cookie->name, "foo", "name"; =head2 value $cookie->value() Fetch the cookie's raw (frozen) value. This attribute cannot be modified. =for example begin =for example end =for example_testing is $cookie->value, "bar", "value"; =head2 secure $cookie->secure() $cookie->secure($set) Get/set the cookie's secure flag. =for example begin $cookie->secure(1); ok $cookie->secure == 1; =for example end =for example_testing $cookie->secure(0); is $cookie->secure, 0, "secure"; =head2 httponly $cookie->httponly() $cookie->httponly($set) Get/set the cookie's HttpOnly flag. =for example begin $cookie->httponly(1); ok $cookie->httponly == 1; =for example end =for example_testing $cookie->httponly(0); is $cookie->httponly, 0, "HttpOnly"; =head2 version $cookie->version() $cookie->version($set) Get/set the cookie's version number. Version 0 cookies conform to the Netscape spec; Version 1 cookies conform to either RFC 2109 or RFC 2965. =for example begin $version = $cookie->version; $cookie->version(1); ok $cookie->version == 1; =for example end =for example_testing $cookie->version($version); is $cookie->version, $version, "version"; =head2 path $cookie->path() $cookie->path($set) Get/set the cookie's path string. =for example begin $path = $cookie->path; $cookie->path("/1/2/3/4"); ok $cookie->path eq "/1/2/3/4"; =for example end =for example_testing $cookie->path($path); is $cookie->path, $path, "path"; =head2 domain $cookie->domain() $cookie->domain($set) Get/set the cookie's domain string. =for example begin $domain = $cookie->domain; $cookie->domain("apache.org"); ok $cookie->domain eq "apache.org"; =for example end =for example_testing $cookie->domain($domain); is $cookie->domain, $domain, "domain"; =head2 port $cookie->port() $cookie->port($set) Get/set the cookie's port string. Only valid for Version 1 cookies. =for example begin $port = $cookie->port; $cookie->port(8888); ok $cookie->port == 8888; =for example end =for example_testing $cookie->port($port); is $cookie->port, $port, "port"; =head2 comment $cookie->comment() $cookie->comment($set) Get/set the cookie's comment string. Only valid for Version 1 cookies. =for example begin $comment = $cookie->comment; $cookie->comment("quux"); ok $cookie->comment eq "quux"; =for example end =for example_testing $cookie->comment($comment); is $cookie->comment, $comment, "comment"; =head2 commentURL $cookie->commentURL() $cookie->commentURL($set) Get/set the cookie's commentURL string. Only valid for Version 1 cookies. =for example begin $commentURL = $cookie->commentURL; $cookie->commentURL("/foo/bar"); ok $cookie->commentURL eq "/foo/bar"; =for example end =for example_testing $cookie->commentURL($commentURL); is $cookie->commentURL, $commentURL, "commentURL"; =head2 is_tainted $cookie->is_tainted() $cookie->is_tainted($set) Get/set the cookie's internal tainted flag. =for example begin $tainted = $cookie->is_tainted; $cookie->is_tainted(1); ok $cookie->is_tainted == 1; =for example end =for example_testing $cookie->is_tainted($tainted); is $cookie->is_tainted, $tainted, "tainted"; =head2 make APR::Request::Cookie->make($pool, $name, $value) Fast XS cookie constructor invoked by C<< new() >>. The cookie's raw name & value are taken directly from the passed in arguments; no freezing/encoding is done on the $value. =head2 as_string $cookie->as_string() String representation of the cookie, suitable for inclusion in a "Set-Cookie" header. =for example begin print "Set-Cookie: ", $cookie->as_string, "\n"; =for example end =for example_testing is $_STDOUT_, qq/Set-Cookie: foo=bar; Version=1; domain="example.com"\n/, "as_string"; =head1 SUBROUTINES APR::Request::Cookie =head2 expires expires($date_string) =head1 SEE ALSO L<< Apache2::Cookie >>, L<< APR::Request >>. =head1 COPYRIGHT Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to You under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. libapreq2-2.17/glue/perl/xsbuilder/APR/Request/Cookie/Cookie.xs0000644000175000017500000001262414277401734023721 0ustar jortonjortonMODULE = APR::Request::Cookie PACKAGE = APR::Request::Cookie SV * value(obj, p1=NULL, p2=NULL) APR::Request::Cookie obj SV *p1 SV *p2 PREINIT: /*nada*/ CODE: RETVAL = newSVpvn(obj->v.data, obj->v.dlen); if (apreq_cookie_is_tainted(obj)) SvTAINTED_on(RETVAL); OUTPUT: RETVAL BOOT: { apr_version_t version; apr_version(&version); if (version.major != APR_MAJOR_VERSION) Perl_croak(aTHX_ "Can't load module APR::Request::Cookie : " "wrong libapr major version " "(expected %d, saw %d)", APR_MAJOR_VERSION, version.major); } /* register the overloading (type 'A') magic */ PL_amagic_generation++; /* The magic for overload gets a GV* via gv_fetchmeth as */ /* mentioned above, and looks in the SV* slot of it for */ /* the "fallback" status. */ sv_setsv( get_sv( "APR::Request::Cookie::()", TRUE ), &PL_sv_yes ); newXS("APR::Request::Cookie::()", XS_APR__Request__Cookie_nil, file); newXS("APR::Request::Cookie::(\"\"", XS_APR__Request__Cookie_value, file); MODULE = APR::Request::Cookie PACKAGE = APR::Request::Cookie SV * name(obj) APR::Request::Cookie obj CODE: RETVAL = newSVpvn(obj->v.name, obj->v.nlen); if (apreq_cookie_is_tainted(obj)) SvTAINTED_on(RETVAL); OUTPUT: RETVAL UV secure(obj, val=NULL) APR::Request::Cookie obj SV *val CODE: RETVAL = apreq_cookie_is_secure(obj); if (items == 2) { if (SvTRUE(val)) apreq_cookie_secure_on(obj); else apreq_cookie_secure_off(obj); } OUTPUT: RETVAL UV httponly(obj, val=NULL) APR::Request::Cookie obj SV *val CODE: RETVAL = apreq_cookie_is_httponly(obj); if (items == 2) { if (SvTRUE(val)) apreq_cookie_httponly_on(obj); else apreq_cookie_httponly_off(obj); } OUTPUT: RETVAL UV version(obj, val=0) APR::Request::Cookie obj UV val CODE: RETVAL = apreq_cookie_version(obj); if (items == 2) apreq_cookie_version_set(obj, val); OUTPUT: RETVAL IV is_tainted(obj, val=NULL) APR::Request::Cookie obj SV *val PREINIT: /*nada*/ CODE: RETVAL = apreq_cookie_is_tainted(obj); if (items == 2) { if (SvTRUE(val)) apreq_cookie_tainted_on(obj); else apreq_cookie_tainted_off(obj); } OUTPUT: RETVAL char * path(cookie, path=NULL) SV *cookie SV *path PREINIT: apreq_cookie_t *c; SV *obj; IV iv; CODE: obj = apreq_xs_sv2object(aTHX_ cookie, COOKIE_CLASS, 'c'); iv = SvIVX(obj); c = INT2PTR(apreq_cookie_t *, iv); RETVAL = c->path; if (items == 2) c->path = apreq_xs_cookie_pool_copy(aTHX_ obj, path); if (RETVAL == NULL) XSRETURN_UNDEF; OUTPUT: RETVAL char * domain(cookie, domain=NULL) SV *cookie SV *domain PREINIT: apreq_cookie_t *c; SV *obj; IV iv; CODE: obj = apreq_xs_sv2object(aTHX_ cookie, COOKIE_CLASS, 'c'); iv = SvIVX(obj); c = INT2PTR(apreq_cookie_t *, iv); RETVAL = c->domain; if (items == 2) c->domain = apreq_xs_cookie_pool_copy(aTHX_ obj, domain); if (RETVAL == NULL) XSRETURN_UNDEF; OUTPUT: RETVAL char * port(cookie, port=NULL) SV *cookie SV *port PREINIT: apreq_cookie_t *c; SV *obj; IV iv; CODE: obj = apreq_xs_sv2object(aTHX_ cookie, COOKIE_CLASS, 'c'); iv = SvIVX(obj); c = INT2PTR(apreq_cookie_t *, iv); RETVAL = c->port; if (items == 2) c->port = apreq_xs_cookie_pool_copy(aTHX_ obj, port); if (RETVAL == NULL) XSRETURN_UNDEF; OUTPUT: RETVAL char * comment(cookie, comment=NULL) SV *cookie SV *comment PREINIT: apreq_cookie_t *c; SV *obj; IV iv; CODE: obj = apreq_xs_sv2object(aTHX_ cookie, COOKIE_CLASS, 'c'); iv = SvIVX(obj); c = INT2PTR(apreq_cookie_t *, iv); RETVAL = c->comment; if (items == 2) c->comment = apreq_xs_cookie_pool_copy(aTHX_ obj, comment); if (RETVAL == NULL) XSRETURN_UNDEF; OUTPUT: RETVAL char * commentURL(cookie, commentURL=NULL) SV *cookie SV *commentURL PREINIT: apreq_cookie_t *c; SV *obj; IV iv; CODE: obj = apreq_xs_sv2object(aTHX_ cookie, COOKIE_CLASS, 'c'); iv = SvIVX(obj); c = INT2PTR(apreq_cookie_t *, iv); RETVAL = c->commentURL; if (items == 2) c->commentURL = apreq_xs_cookie_pool_copy(aTHX_ obj, commentURL); if (RETVAL == NULL) XSRETURN_UNDEF; OUTPUT: RETVAL APR::Request::Cookie make(class, pool, name, val) apreq_xs_subclass_t class APR::Pool pool SV *name SV *val PREINIT: STRLEN nlen, vlen; const char *n, *v; SV *parent = SvRV(ST(1)); CODE: n = SvPV(name, nlen); v = SvPV(val, vlen); RETVAL = apreq_cookie_make(pool, n, nlen, v, vlen); if (SvTAINTED(name) || SvTAINTED(val)) apreq_cookie_tainted_on(RETVAL); OUTPUT: RETVAL SV * as_string(c) APR::Request::Cookie c PREINIT: STRLEN len; CODE: len = apreq_cookie_serialize(c, NULL, 0); RETVAL = newSV(len); SvCUR_set(RETVAL, apreq_cookie_serialize(c, SvPVX(RETVAL), len + 1)); SvPOK_on(RETVAL); if (apreq_cookie_is_tainted(c)) SvTAINTED_on(RETVAL); OUTPUT: RETVAL libapreq2-2.17/glue/perl/xsbuilder/APR/Request/Error/APR__Request__Error.h0000644000175000017500000000013714277401733025761 0ustar jortonjortonMP_STATIC XS(XS_APR__Request__Error_nil) { dXSARGS; (void)items; XSRETURN_EMPTY; } libapreq2-2.17/glue/perl/xsbuilder/APR/Request/Error/Error.pm0000644000175000017500000000011314277401734023431 0ustar jortonjortonuse APR::Request; use APR::Error; our @ISA = qw/APR::Error APR::Request/; libapreq2-2.17/glue/perl/xsbuilder/APR/Request/Error/Error.pod0000644000175000017500000000371714277401733023613 0ustar jortonjorton=for testing ok(1); =head1 NAME APR::Request::Error - wrapper for libapreq2's error API. =head1 SYNOPSIS use APR::Request::Error; =head1 DESCRIPTION This manpage documents version 2.17 of the APR::Request::Error package. =head1 SUBROUTINES APR::Request::Error - derived from C<< APR::Request >> and C<< APR::Error >>. =head2 strerror strerror($status) Returns the apreq error string associated with a numeric C<$status> code. =head1 ERROR CONSTANTS =head2 GENERAL Internal apreq error =head2 TAINTED Attempt to perform unsafe action with tainted data =head2 BADDATA Malformed input data =head2 BADCHAR Invalid character =head2 BADSEQ Invalid byte sequence =head2 BADATTR Unrecognized attribute =head2 BADHEADER Malformed header string =head2 NODATA Missing input data =head2 NOTOKEN Expected token not present =head2 NOATTR Missing attribute =head2 NOHEADER Missing header =head2 NOPARSER Missing parser =head2 MISMATCH Conflicting information =head2 OVERLIMIT Exceeds configured maximum limit =head2 NOTEMPTY Setting already configured =head1 SEE ALSO L, L =head1 COPYRIGHT Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to You under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. libapreq2-2.17/glue/perl/xsbuilder/APR/Request/Error/Error.xs0000644000175000017500000000660614277401734023464 0ustar jortonjortonMODULE = APR::Request::Error PACKAGE = APR::Request::Error SV *strerror(s) apr_status_t s CODE: RETVAL = apreq_xs_error2sv(aTHX_ s); OUTPUT: RETVAL SV *as_string(hv, p1=NULL, p2=NULL) APR::Request::Error hv SV *p1 SV *p2 PREINIT: SV **svp; CODE: svp = hv_fetch(hv, "rc", 2, FALSE); if (svp == NULL) RETVAL = &PL_sv_undef; else RETVAL = apreq_xs_error2sv(aTHX_ SvIVX(*svp)); OUTPUT: RETVAL BOOT: { apr_version_t version; apr_version(&version); if (version.major != APR_MAJOR_VERSION) Perl_croak(aTHX_ "Can't load module APR::Request::Error : " "wrong libapr major version " "(expected %d, saw %d)", APR_MAJOR_VERSION, version.major); } /* register the overloading (type 'A') magic */ PL_amagic_generation++; /* The magic for overload gets a GV* via gv_fetchmeth as */ /* mentioned above, and looks in the SV* slot of it for */ /* the "fallback" status. */ sv_setsv( get_sv( "APR::Request::Error::()", TRUE ), &PL_sv_undef ); newXS("APR::Request::Error::()", XS_APR__Request__Error_nil, file); newXS("APR::Request::Error::(\"\"", XS_APR__Request__Error_as_string, file); newCONSTSUB(PL_defstash, "APR::Request::Error::GENERAL", apreq_xs_error2sv(aTHX_ APREQ_ERROR_GENERAL)); newCONSTSUB(PL_defstash, "APR::Request::Error::TAINTED", apreq_xs_error2sv(aTHX_ APREQ_ERROR_TAINTED)); newCONSTSUB(PL_defstash, "APR::Request::Error::BADDATA", apreq_xs_error2sv(aTHX_ APREQ_ERROR_BADDATA)); newCONSTSUB(PL_defstash, "APR::Request::Error::BADCHAR", apreq_xs_error2sv(aTHX_ APREQ_ERROR_BADCHAR)); newCONSTSUB(PL_defstash, "APR::Request::Error::BADSEQ", apreq_xs_error2sv(aTHX_ APREQ_ERROR_BADSEQ)); newCONSTSUB(PL_defstash, "APR::Request::Error::BADATTR", apreq_xs_error2sv(aTHX_ APREQ_ERROR_BADATTR)); newCONSTSUB(PL_defstash, "APR::Request::Error::BADHEADER", apreq_xs_error2sv(aTHX_ APREQ_ERROR_BADHEADER)); newCONSTSUB(PL_defstash, "APR::Request::Error::BADUTF8", apreq_xs_error2sv(aTHX_ APREQ_ERROR_BADUTF8)); newCONSTSUB(PL_defstash, "APR::Request::Error::NODATA", apreq_xs_error2sv(aTHX_ APREQ_ERROR_NODATA)); newCONSTSUB(PL_defstash, "APR::Request::Error::NOTOKEN", apreq_xs_error2sv(aTHX_ APREQ_ERROR_NOTOKEN)); newCONSTSUB(PL_defstash, "APR::Request::Error::NOATTR", apreq_xs_error2sv(aTHX_ APREQ_ERROR_NOATTR)); newCONSTSUB(PL_defstash, "APR::Request::Error::NOHEADER", apreq_xs_error2sv(aTHX_ APREQ_ERROR_NOHEADER)); newCONSTSUB(PL_defstash, "APR::Request::Error::NOPARSER", apreq_xs_error2sv(aTHX_ APREQ_ERROR_NOPARSER)); newCONSTSUB(PL_defstash, "APR::Request::Error::MISMATCH", apreq_xs_error2sv(aTHX_ APREQ_ERROR_MISMATCH)); newCONSTSUB(PL_defstash, "APR::Request::Error::OVERLIMIT", apreq_xs_error2sv(aTHX_ APREQ_ERROR_OVERLIMIT)); newCONSTSUB(PL_defstash, "APR::Request::Error::UNDERLIMIT", apreq_xs_error2sv(aTHX_ APREQ_ERROR_UNDERLIMIT)); newCONSTSUB(PL_defstash, "APR::Request::Error::NOTEMPTY", apreq_xs_error2sv(aTHX_ APREQ_ERROR_NOTEMPTY)); libapreq2-2.17/glue/perl/xsbuilder/APR/Request/Hook/Hook.pod0000644000175000017500000000366114277401734023230 0ustar jortonjorton=for testing ok(1); =head1 NAME APR::Request::Hook - wrapper for libapreq2's hook API. =head1 SYNOPSIS use APR::Request::Hook; =head1 DESCRIPTION This manpage documents version 2.17 of the APR::Request::Hook package. =head1 METHODS APR::Request::Hook =head2 disable_uploads APR::Request::Hook->disable_uploads($pool) APR::Request::Hook->disable_uploads($pool, $next) Hook which returns APREQ_ERROR_GENERAL if a file upload field is detected. $pool is an APR::Pool object; $next (if present) is the next APR::Request::Hook in the chain. =head2 apr_xml_parser APR::Request::Hook->apr_xml_parser($pool) APR::Request::Hook->apr_xml_parser($pool, $next) Xml parser hook. $pool is an APR::Pool object; $next (if present) is the next APR::Request::Hook in the chain. =head2 discard_brigade APR::Request::Hook->discard_brigade($pool) APR::Request::Hook->discard_brigade($pool, $next) Hook which discards the brigade it receives from the parser. $pool is an APR::Pool object; $next (if present) is the next APR::Request::Hook in the chain. =head1 SEE ALSO L<< APR::Request >>, L<< APR::Request::Parser >> =head1 COPYRIGHT Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to You under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. libapreq2-2.17/glue/perl/xsbuilder/APR/Request/Hook/Hook.xs0000644000175000017500000000257214277401734023100 0ustar jortonjortonMODULE = APR::Request::Hook PACKAGE = APR::Request::Hook APR::Request::Hook make(class, pool, hook, next=NULL) apreq_xs_subclass_t class APR::Pool pool apreq_hook_function_t hook APR::Request::Hook next CODE: RETVAL = apreq_hook_make(pool, hook, next, NULL); OUTPUT: RETVAL APR::Request::Hook disable_uploads(class, pool, next=NULL) apreq_xs_subclass_t class APR::Pool pool APR::Request::Hook next CODE: RETVAL = apreq_hook_make(pool, apreq_hook_disable_uploads, next, NULL); OUTPUT: RETVAL APR::Request::Hook apr_xml_parser(class, pool, next=NULL) apreq_xs_subclass_t class APR::Pool pool APR::Request::Hook next CODE: RETVAL = apreq_hook_make(pool, apreq_hook_apr_xml_parser, next, NULL); OUTPUT: RETVAL APR::Request::Hook find_param(class, pool, name, next=NULL) apreq_xs_subclass_t class APR::Pool pool APR::Request::Hook next char *name CODE: RETVAL = apreq_hook_make(pool, apreq_hook_find_param, next, name); OUTPUT: RETVAL APR::Request::Hook discard_brigade(class, pool, next=NULL) apreq_xs_subclass_t class APR::Pool pool APR::Request::Hook next CODE: RETVAL = apreq_hook_make(pool, apreq_hook_discard_brigade, next, NULL); OUTPUT: RETVAL libapreq2-2.17/glue/perl/xsbuilder/APR/Request/Param/APR__Request__Param.h0000644000175000017500000001301314277401734025675 0ustar jortonjortonMP_STATIC XS(XS_APR__Request__Param_nil) { dXSARGS; (void)items; XSRETURN_EMPTY; } APR_INLINE static SV *apreq_xs_find_bb_obj(pTHX_ SV *in) { while (in && SvROK(in)) { SV *sv = SvRV(in); switch (SvTYPE(sv)) { MAGIC *mg; case SVt_PVIO: if (SvMAGICAL(sv) && (mg = mg_find(sv, PERL_MAGIC_tiedscalar))) { in = mg->mg_obj; break; } Perl_croak(aTHX_ "panic: cannot find tied scalar in pvio magic"); case SVt_PVMG: if (SvOBJECT(sv) && SvIOKp(sv)) return sv; default: Perl_croak(aTHX_ "panic: unsupported SV type: %d", SvTYPE(sv)); } } return in; } /* XXX these Apache::Upload::Brigade funcs need a makeover as vanilla XS. */ MP_STATIC XS(apreq_xs_brigade_copy) { dXSARGS; apr_bucket_brigade *bb, *bb_copy; char *class; SV *sv, *obj; IV iv; if (items != 2 || !SvPOK(ST(0)) || !SvROK(ST(1))) Perl_croak(aTHX_ "Usage: APR::Request::Brigade->new($bb)"); class = SvPV_nolen(ST(0)); obj = apreq_xs_find_bb_obj(aTHX_ ST(1)); iv = SvIVX(obj); bb = INT2PTR(apr_bucket_brigade *, iv); bb_copy = apr_brigade_create(bb->p, bb->bucket_alloc); apreq_brigade_copy(bb_copy, bb); sv = sv_setref_pv(newSV(0), class, bb_copy); if (SvTAINTED(obj)) SvTAINTED_on(SvRV(sv)); ST(0) = sv_2mortal(sv); XSRETURN(1); } MP_STATIC XS(apreq_xs_brigade_read) { dXSARGS; apr_bucket_brigade *bb; apr_bucket *e, *end; IV want = -1, offset = 0; SV *sv, *obj; apr_status_t s; char *buf; switch (items) { case 4: offset = SvIV(ST(3)); case 3: want = SvIV(ST(2)); case 2: sv = ST(1); (void)SvUPGRADE(sv, SVt_PV); if (SvROK(ST(0))) { IV iv; obj = apreq_xs_find_bb_obj(aTHX_ ST(0)); iv = SvIVX(obj); bb = INT2PTR(apr_bucket_brigade *, iv); break; } default: Perl_croak(aTHX_ "Usage: $bb->READ($buf,$len,$off)"); } if (want == 0) { SvCUR_set(sv, offset); XSRETURN_IV(0); } if (APR_BRIGADE_EMPTY(bb)) { SvCUR_set(sv, offset); XSRETURN_UNDEF; } if (want == -1) { const char *data; apr_size_t dlen; e = APR_BRIGADE_FIRST(bb); s = apr_bucket_read(e, &data, &dlen, APR_BLOCK_READ); if (s != APR_SUCCESS) apreq_xs_croak(aTHX_ newHV(), Nullsv, s, "APR::Request::Brigade::READ", "APR::Error"); want = dlen; end = APR_BUCKET_NEXT(e); } else { switch (s = apr_brigade_partition(bb, (apr_off_t)want, &end)) { apr_off_t len; case APR_INCOMPLETE: s = apr_brigade_length(bb, 1, &len); if (s != APR_SUCCESS) apreq_xs_croak(aTHX_ newHV(), Nullsv, s, "APR::Request::Brigade::READ", "APR::Error"); want = len; case APR_SUCCESS: break; default: apreq_xs_croak(aTHX_ newHV(), Nullsv, s, "APR::Request::Brigade::READ", "APR::Error"); } } SvGROW(sv, want + offset + 1); buf = SvPVX(sv) + offset; SvCUR_set(sv, want + offset); if (SvTAINTED(obj)) SvTAINTED_on(sv); while ((e = APR_BRIGADE_FIRST(bb)) != end) { const char *data; apr_size_t dlen; s = apr_bucket_read(e, &data, &dlen, APR_BLOCK_READ); if (s != APR_SUCCESS) apreq_xs_croak(aTHX_ newHV(), Nullsv, s, "APR::Request::Brigade::READ", "APR::Error"); memcpy(buf, data, dlen); buf += dlen; apr_bucket_delete(e); } *buf = 0; SvPOK_only(sv); SvSETMAGIC(sv); XSRETURN_IV(want); } MP_STATIC XS(apreq_xs_brigade_readline) { dXSARGS; apr_bucket_brigade *bb; apr_bucket *e; SV *sv, *obj; IV iv; apr_status_t s; unsigned tainted; if (items != 1 || !SvROK(ST(0))) Perl_croak(aTHX_ "Usage: $bb->READLINE"); obj = apreq_xs_find_bb_obj(aTHX_ ST(0)); iv = SvIVX(obj); bb = INT2PTR(apr_bucket_brigade *, iv); if (APR_BRIGADE_EMPTY(bb)) XSRETURN(0); tainted = SvTAINTED(obj); XSprePUSH; sv = sv_2mortal(newSVpvn("",0)); if (tainted) SvTAINTED_on(sv); XPUSHs(sv); while (!APR_BRIGADE_EMPTY(bb)) { const char *data; apr_size_t dlen; const char *eol; e = APR_BRIGADE_FIRST(bb); s = apr_bucket_read(e, &data, &dlen, APR_BLOCK_READ); if (s != APR_SUCCESS) apreq_xs_croak(aTHX_ newHV(), Nullsv, s, "APR::Request::Brigade::READLINE", "APR::Error"); eol = memchr(data, '\012', dlen); /* look for LF (linefeed) */ if (eol != NULL) { if (eol < data + dlen - 1) { dlen = eol - data + 1; apr_bucket_split(e, dlen); } sv_catpvn(sv, data, dlen); apr_bucket_delete(e); if (GIMME_V != G_ARRAY || APR_BRIGADE_EMPTY(bb)) break; sv = sv_2mortal(newSVpvn("",0)); if (tainted) SvTAINTED_on(sv); XPUSHs(sv); } else { sv_catpvn(sv, data, dlen); apr_bucket_delete(e); } } PUTBACK; } libapreq2-2.17/glue/perl/xsbuilder/APR/Request/Param/Param.pm0000644000175000017500000000077514277401733023364 0ustar jortonjortonpackage APR::Request::Param; use APR::Request; use APR::Table; use APR::Brigade; sub upload_io { tie local (*FH), "APR::Request::Brigade", shift->upload; return bless *FH{IO}, "APR::Request::Brigade::IO"; } sub upload_fh { my $fname = shift->upload_tempname(@_); open my $fh, "<", $fname or die "Can't open ", $fname, ": ", $!; binmode $fh; return $fh; } package APR::Request::Brigade; push our(@ISA), "APR::Brigade"; package APR::Request::Brigade::IO; push our(@ISA), (); libapreq2-2.17/glue/perl/xsbuilder/APR/Request/Param/Param.pod0000644000175000017500000001716314277401733023531 0ustar jortonjorton=head1 NAME APR::Request::Param - wrapper for libapreq2's param API. =begin testing use APR::Pool; use APR::Brigade; use APR::Bucket; use APR::BucketAlloc; use APR::Request; use APR::Request::Parser; $pool = APR::Pool->new; $ba = APR::BucketAlloc->new($pool); $bb = APR::Brigade->new($pool, $ba); $content = <insert_tail(APR::Bucket->new($ba, $content)); $parser = APR::Request::Parser->multipart($pool, $ba, "multipart/form-data; boundary=-XYZ-"); $req = APR::Request::Custom->handle($pool, "alpha=arg1&beta=arg2", "foo=bar", $parser, 1e6, $bb); =end testing =head1 SYNOPSIS =for example begin use APR::Request::Param; $arg1 = $req->args('alpha'); $body = $req->body; $body->param_class("APR::Request::Param"); ok $_->isa("APR::Request::Param") for values %$body; @uploads = grep {$_->upload} values %$body; $param = $body->get('beta'); $param->upload_slurp(my $content); =for example end =for example_testing is $arg1, "arg1", 'alpha arg is "arg1"'; ok @uploads == 1; is $content, "second", 'contents of upload_slurp'; =head1 DESCRIPTION The C<< APR::Request::Param >> module provides base methods for interfacing with libapreq2's param API. It also provides a few utility functions and constants. This manpage documents version 2.17 of the APR::Request::Param, APR::Request::Brigade, and APR::Request::Brigade::IO packages. =head1 OVERLOADS APR::Request::Param =head2 "" "$param" The double-quote interpolation operator maps to C<< APR::Request::Param::value() >>. =for example begin =for example end =for example_testing is "$param", $param->value, "quotes"; =head1 METHODS APR::Request::Param =head2 name $param->name() Returns the param's name. This attribute cannot be modified. =for example begin =for example end =for example_testing is $param->name, "beta", "name"; =head2 value $param->value() Returns the param's value. This attribute cannot be modified. =for example begin =for example end =for example_testing is $param->value, "foo.txt", "value"; =head2 is_tainted $param->is_tainted() $param->is_tainted($set) Get/set the param's internal tainted flag. Note: if the param's charset is APREQ_CHARSET_UTF8 (8), this also activates the SvUTF8_on flag during calls to name() and/or value(). =for example begin $tainted = $param->is_tainted; $param->is_tainted(0); ok $param->is_tainted == 0; =for example end =for example_testing $param->is_tainted($tainted); is $param->is_tainted, $tainted, "tainted"; =head2 charset $param->charset() $param->charset($set) Get/set the param's internal charset. The charset is a number between 0 and 255; the current recognized values are =over 4 =item 0 APREQ_CHARSET_ASCII (7-bit us-ascii) =item 1 APREQ_CHARSET_LATIN1 (8-bit iso-8859-1) =item 2 APREQ_CHARSET_CP1252 (8-bit Windows-1252) =item 8 APREQ_CHARSET_UTF8 (utf8 encoded Unicode) =back See L above for info about how APREQ_CHARSET_UTF8 relates to perl's UTF-8 flag. =for example begin $charset = $param->charset; $param->charset(2); ok $param->charset == 2; =for example end =for example_testing $param->charset($charset); is $param->charset, $charset, "charset"; =head2 make APR::Request::Param->make($pool, $name, $value) Fast XS param constructor. =head2 info $param->info() $param->info($set) Get/set the APR::Table headers for this param. =head2 upload $param->upload() $param->upload($set) Get/set the APR::Brigade file-upload content for this param. =head2 upload_filename $param->upload_filename() Returns the client-side filename associated with this param. =head2 upload_link $param->upload_link($path) Links the file-upload content with the local file named C<< $path >>. Creates a hard-link if the spoolfile's (see L) temporary directory is on the same device as C<< $path >>; otherwise this writes a copy. =head2 upload_slurp $param->upload_slurp($data) Reads the entire file-upload content into C<< $data >>. =head2 upload_size $param->upload_size() Returns the size of the param's file-upload content. =head2 upload_type $param->upload_type() Returns the MIME-type of the param's file-upload content. =head2 upload_tempname $param->upload_tempname() Returns the name of the local spoolfile for this param. =head2 upload_io $param->upload_io() Returns an L object, which can be treated as a non-seekable IO stream. =head2 upload_fh $param->upload_fh() Returns a seekable filehandle representing the file-upload content. =head1 METHODS APR::Request::Brigade This class is derived from APR::Brigade, providing additional methods for TIEHANDLE, READ and READLINE. To be memory efficient, these methods delete buckets from the brigade as soon as their data is actually read, so you cannot C on handles tied to this class. Such handles have semantics similar to that of a read-only socket. =head2 new, TIEHANDLE APR::Request::Brigade->TIEHANDLE($bb) Creates a copy of the bucket brigade represented by $bb, and blesses that copy into the APR::Request::Brigade class. This provides syntactic sugar for using perl's builtin C, C, and C<< <> >> operations on handles tied to this package: =for example begin use Symbol; $fh = gensym; tie *$fh, "APR::Request::Brigade", $bb; print while <$fh>; =for example end =head2 READ $bb->READ($contents) $bb->READ($contents, $length) $bb->READ($contents, $length, $offset) Reads data from the brigade $bb into $contents. When omitted $length defaults to C<-1>, which reads the first bucket into $contents. A positive $length will read in $length bytes, or the remainder of the brigade, whichever is greater. $offset represents the index in $context to read the new data. =head2 READLINE $bb->READLINE() Returns the first line of data from the bride. Lines are terminated by linefeeds (the '\012' character), but we may eventually use C<$/> instead. =head1 METHODS APR::Request::Brigade::IO =head2 read OO interface to APR::Request::Brigade::READ. =head2 readline OO interface to APR::Request::Brigade::READLINE. =head1 SEE ALSO L, L, L. =head1 COPYRIGHT Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to You under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. libapreq2-2.17/glue/perl/xsbuilder/APR/Request/Param/Param.xs0000644000175000017500000001627514277401734023405 0ustar jortonjorton/* On Win32 without PERL_IMPLICIT_SYS, PerlLIO_link is #defined as * link, which in turn is #defined as win32_link, but mp2's * modperl_perl_unembed.h #undefs link, leaving link as an unresolved * symbol when linking Param.dll. */ #ifdef WIN32 #ifndef PERL_IMPLICIT_SYS #undef PerlLIO_link #define PerlLIO_link(oldname, newname) win32_link(oldname, newname) #endif #endif MODULE = APR::Request::Param PACKAGE = APR::Request::Param SV * value(obj, p1=NULL, p2=NULL) APR::Request::Param obj SV *p1 SV *p2 PREINIT: /*nada*/ CODE: RETVAL = apreq_xs_param2sv(aTHX_ obj, NULL, NULL); OUTPUT: RETVAL SV * upload_filename(obj) APR::Request::Param obj PREINIT: CODE: if (obj->upload != NULL) RETVAL = apreq_xs_param2sv(aTHX_ obj, NULL, NULL); else RETVAL = &PL_sv_undef; OUTPUT: RETVAL BOOT: { apr_version_t version; apr_version(&version); if (version.major != APR_MAJOR_VERSION) Perl_croak(aTHX_ "Can't load module APR::Request::Param : " "wrong libapr major version " "(expected %d, saw %d)", APR_MAJOR_VERSION, version.major); } /* register the overloading (type 'A') magic */ PL_amagic_generation++; /* The magic for overload gets a GV* via gv_fetchmeth as */ /* mentioned above, and looks in the SV* slot of it for */ /* the "fallback" status. */ sv_setsv( get_sv( "APR::Request::Param::()", TRUE ), &PL_sv_yes ); newXS("APR::Request::Param::()", XS_APR__Request__Param_nil, file); newXS("APR::Request::Param::(\"\"", XS_APR__Request__Param_value, file); MODULE = APR::Request::Param PACKAGE = APR::Request::Param SV * name(obj) APR::Request::Param obj CODE: RETVAL = newSVpvn(obj->v.name, obj->v.nlen); if (apreq_param_is_tainted(obj)) SvTAINTED_on(RETVAL); OUTPUT: RETVAL IV is_tainted(obj, val=NULL) APR::Request::Param obj SV *val PREINIT: /*nada*/ CODE: RETVAL = apreq_param_is_tainted(obj); if (items == 2) { if (SvTRUE(val)) apreq_param_tainted_on(obj); else apreq_param_tainted_off(obj); } OUTPUT: RETVAL IV charset(obj, val=NULL) APR::Request::Param obj SV *val PREINIT: /*nada*/ CODE: if (items == 2) RETVAL = apreq_param_charset_set(obj, SvIV(val)); else RETVAL = apreq_param_charset_get(obj); OUTPUT: RETVAL APR::Request::Param make(class, pool, name, val) apreq_xs_subclass_t class APR::Pool pool SV *name SV *val PREINIT: STRLEN nlen, vlen; const char *n, *v; SV *parent = SvRV(ST(1)); CODE: n = SvPV(name, nlen); v = SvPV(val, vlen); RETVAL = apreq_param_make(pool, n, nlen, v, vlen); if (SvTAINTED(name) || SvTAINTED(val)) apreq_param_tainted_on(RETVAL); OUTPUT: RETVAL MODULE = APR::Request::Param PACKAGE = APR::Request::Param SV * upload_link(param, path) APR::Request::Param param const char *path PREINIT: apr_file_t *f; const char *fname; apr_status_t s; CODE: if (param->upload == NULL) Perl_croak(aTHX_ "$param->upload_link($file): param has no upload brigade"); f = apreq_brigade_spoolfile(param->upload); if (f == NULL) { apr_off_t len; s = apr_file_open(&f, path, APR_CREATE | APR_EXCL | APR_WRITE | APR_READ | APR_BINARY, APR_OS_DEFAULT, param->upload->p); if (s == APR_SUCCESS) { s = apreq_brigade_fwrite(f, &len, param->upload); if (s == APR_SUCCESS) XSRETURN_YES; } } else { s = apr_file_name_get(&fname, f); if (s != APR_SUCCESS) Perl_croak(aTHX_ "$param->upload_link($file): can't get spoolfile name"); if (PerlLIO_link(fname, path) >= 0) XSRETURN_YES; else { s = apr_file_copy(fname, path, APR_OS_DEFAULT, param->upload->p); if (s == APR_SUCCESS) XSRETURN_YES; } } RETVAL = &PL_sv_undef; OUTPUT: RETVAL apr_size_t upload_slurp(param, buffer) APR::Request::Param param SV *buffer PREINIT: apr_off_t len; apr_status_t s; char *data; CODE: if (param->upload == NULL) Perl_croak(aTHX_ "$param->upload_slurp($data): param has no upload brigade"); s = apr_brigade_length(param->upload, 0, &len); if (s != APR_SUCCESS) Perl_croak(aTHX_ "$param->upload_slurp($data): can't get upload length"); RETVAL = len; (void)SvUPGRADE(buffer, SVt_PV); data = SvGROW(buffer, RETVAL + 1); data[RETVAL] = 0; SvCUR_set(buffer, RETVAL); SvPOK_only(buffer); s = apr_brigade_flatten(param->upload, data, &RETVAL); if (s != APR_SUCCESS) Perl_croak(aTHX_ "$param->upload_slurp($data): can't flatten upload"); if (apreq_param_is_tainted(param)) SvTAINTED_on(buffer); SvSETMAGIC(buffer); OUTPUT: RETVAL UV upload_size(param) APR::Request::Param param PREINIT: apr_off_t len; apr_status_t s; CODE: if (param->upload == NULL) Perl_croak(aTHX_ "$param->upload_size(): param has no upload brigade"); s = apr_brigade_length(param->upload, 0, &len); if (s != APR_SUCCESS) Perl_croak(aTHX_ "$param->upload_size(): can't get upload length"); RETVAL = len; OUTPUT: RETVAL SV * upload_type(param) APR::Request::Param param PREINIT: const char *ct, *sc; STRLEN len; CODE: if (param->info == NULL) Perl_croak(aTHX_ "$param->upload_type(): param has no info table"); ct = apr_table_get(param->info, "Content-Type"); if (ct == NULL) Perl_croak(aTHX_ "$param->upload_type: can't find Content-Type header"); if ((sc = strchr(ct, ';'))) len = sc - ct; else len = strlen(ct); RETVAL = newSVpvn(ct, len); if (apreq_param_is_tainted(param)) SvTAINTED_on(RETVAL); OUTPUT: RETVAL const char * upload_tempname(param, req=apreq_xs_sv2handle(aTHX_ ST(0))) APR::Request::Param param APR::Request req PREINIT: apr_file_t *f; apr_status_t s; CODE: if (param->upload == NULL) Perl_croak(aTHX_ "$param->upload_tempname($req): param has no upload brigade" ); f = apreq_brigade_spoolfile(param->upload); if (f == NULL) { const char *path; s = apreq_temp_dir_get(req, &path); if (s != APR_SUCCESS) Perl_croak(aTHX_ "$param->upload_tempname($req): can't get temp_dir" ); s = apreq_brigade_concat(param->upload->p, path, 0, param->upload, param->upload); if (s != APR_SUCCESS) Perl_croak(aTHX_ "$param->upload_tempname($req): can't make spool bucket" ); f = apreq_brigade_spoolfile(param->upload); } s = apr_file_name_get(&RETVAL, f); if (s != APR_SUCCESS) Perl_croak(aTHX_ "$param->upload_link($file): can't get spool file name" ); OUTPUT: RETVAL libapreq2-2.17/glue/perl/xsbuilder/APR/Request/Parser/Parser.pod0000644000175000017500000000761514277401734024123 0ustar jortonjorton=for testing ok(1); =head1 NAME APR::Request::Parser - wrapper for libapreq2's parser API. =head1 SYNOPSIS use APR::Request::Parser; =head1 DESCRIPTION This manpage documents version 2.17 of the APR::Request::Parser package. =head1 METHODS APR::Request::Parser =head2 generic APR::Request::Parser->generic($pool, $ba, $ct) APR::Request::Parser->generic($pool, $ba, $ct, $blim) APR::Request::Parser->generic($pool, $ba, $ct, $blim, $tdir) APR::Request::Parser->generic($pool, $ba, $ct, $blim, $tdir, $hook) Noop-parser that collects everything into a single, internal parameter. Here $pool is an APR::Pool object, $ba is an APR::BucketAlloc object, and $ct is the Content-Type header of the request. Optionally $blim is the brigade in-memory limit, $tdir is the path to the temporary directory, and $hook is an APR::Request::Hook object. =head2 headers APR::Request::Parser->headers($pool, $ba, $ct) APR::Request::Parser->headers($pool, $ba, $ct, $blim) APR::Request::Parser->headers($pool, $ba, $ct, $blim, $tdir) APR::Request::Parser->headers($pool, $ba, $ct, $blim, $tdir, $hook) RFC 822 header parser. Here $pool is an APR::Pool object, $ba is an APR::BucketAlloc object, and $ct is the Content-Type header of the request. Optionally $blim is the brigade in-memory limit, $tdir is the path to the temporary directory, and $hook is an APR::Request::Hook object. =head2 urlencoded APR::Request::Parser->urlencoded($pool, $ba, $ct) APR::Request::Parser->urlencoded($pool, $ba, $ct, $blim) APR::Request::Parser->urlencoded($pool, $ba, $ct, $blim, $tdir) APR::Request::Parser->urlencoded($pool, $ba, $ct, $blim, $tdir, $hook) x-www-form-urlencoded parser. Here $pool is an APR::Pool object, $ba is an APR::BucketAlloc object, and $ct is the Content-Type header of the request. Optionally $blim is the brigade in-memory limit, $tdir is the path to the temporary directory, and $hook is an APR::Request::Hook object. =head2 multipart APR::Request::Parser->multipart($pool, $ba, $ct) APR::Request::Parser->multipart($pool, $ba, $ct, $blim) APR::Request::Parser->multipart($pool, $ba, $ct, $blim, $tdir) APR::Request::Parser->multipart($pool, $ba, $ct, $blim, $tdir, $hook) Multipart parser. Here $pool is an APR::Pool object, $ba is an APR::BucketAlloc object, and $ct is the Content-Type header of the request. Optionally $blim is the brigade in-memory limit, $tdir is the path to the temporary directory, and $hook is an APR::Request::Hook object. =head2 default APR::Request::Parser->default($pool, $ba, $ct) APR::Request::Parser->default($pool, $ba, $ct, $blim) APR::Request::Parser->default($pool, $ba, $ct, $blim, $tdir) APR::Request::Parser->default($pool, $ba, $ct, $blim, $tdir, $hook) Default parser. Here $pool is an APR::Pool object, $ba is an APR::BucketAlloc object, and $ct is the Content-Type header of the request. Optionally $blim is the brigade in-memory limit, $tdir is the path to the temporary directory, and $hook is an APR::Request::Hook object. =head1 SEE ALSO L<< APR::Request >>, L<< APR::Request::Hook >> =head1 COPYRIGHT Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to You under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. libapreq2-2.17/glue/perl/xsbuilder/APR/Request/Parser/Parser.xs0000644000175000017500000000512014277401734023760 0ustar jortonjortonMODULE = APR::Request::Parser PACKAGE = APR::Request::Parser APR::Request::Parser make(class, pool, ba, ct, parser, blim=APREQ_DEFAULT_BRIGADE_LIMIT, tdir=NULL, hook=NULL) apreq_xs_subclass_t class APR::Pool pool APR::BucketAlloc ba char *ct apreq_parser_function_t parser apr_size_t blim char *tdir APR::Request::Hook hook CODE: RETVAL = apreq_parser_make(pool, ba, ct, parser, blim, tdir, hook, NULL); OUTPUT: RETVAL APR::Request::Parser generic(class, pool, ba, ct, blim=APREQ_DEFAULT_BRIGADE_LIMIT, tdir=NULL, hook=NULL) apreq_xs_subclass_t class APR::Pool pool APR::BucketAlloc ba char *ct apr_size_t blim char *tdir APR::Request::Hook hook CODE: RETVAL = apreq_parser_make(pool, ba, ct, apreq_parse_generic, blim, tdir, hook, NULL); OUTPUT: RETVAL APR::Request::Parser headers(class, pool, ba, ct, blim=APREQ_DEFAULT_BRIGADE_LIMIT, tdir=NULL, hook=NULL) apreq_xs_subclass_t class APR::Pool pool APR::BucketAlloc ba char *ct apr_size_t blim char *tdir APR::Request::Hook hook CODE: RETVAL = apreq_parser_make(pool, ba, ct, apreq_parse_headers, blim, tdir, hook, NULL); OUTPUT: RETVAL APR::Request::Parser urlencoded(class, pool, ba, ct, blim=APREQ_DEFAULT_BRIGADE_LIMIT, tdir=NULL, hook=NULL) apreq_xs_subclass_t class APR::Pool pool APR::BucketAlloc ba char *ct apr_size_t blim char *tdir APR::Request::Hook hook CODE: RETVAL = apreq_parser_make(pool, ba, ct, apreq_parse_urlencoded, blim, tdir, hook, NULL); OUTPUT: RETVAL APR::Request::Parser multipart(class, pool, ba, ct, blim=APREQ_DEFAULT_BRIGADE_LIMIT, tdir=NULL, hook=NULL) apreq_xs_subclass_t class APR::Pool pool APR::BucketAlloc ba char *ct apr_size_t blim char *tdir APR::Request::Hook hook CODE: RETVAL = apreq_parser_make(pool, ba, ct, apreq_parse_multipart, blim, tdir, hook, NULL); OUTPUT: RETVAL APR::Request::Parser default(class, pool, ba, ct, blim=APREQ_DEFAULT_BRIGADE_LIMIT, tdir=NULL, hook=NULL) apreq_xs_subclass_t class APR::Pool pool APR::BucketAlloc ba char *ct apr_size_t blim char *tdir APR::Request::Hook hook PREINIT: apreq_parser_function_t parser; CODE: parser = apreq_parser(ct); if (parser == NULL) XSRETURN_UNDEF; RETVAL = apreq_parser_make(pool, ba, ct, parser, blim, tdir, hook, NULL); OUTPUT: RETVAL libapreq2-2.17/glue/perl/xsbuilder/APR/Request/Request.pm0000644000175000017500000000176214277401734022712 0ustar jortonjortonuse APR::Pool; use APR::BucketAlloc; sub import { my $class = shift; return unless @_; my $pkg = caller; no strict 'refs'; for (@_) { *{"$pkg\::$_"} = $class->can($_) or die "Can't find method $_ in class $class"; } } sub param_status { my $req = shift; return $req->args_status || $req->body_status if wantarray; return ($req->args_status, $req->body_status); } sub upload { require APR::Request::Param; my $req = shift; my $body = $req->body or return; my $uploads = $body->uploads($req->pool); $uploads->param_class("APR::Request::Param"); return $uploads->get(@_) if @_; return keys %$uploads if wantarray; return $uploads; } package APR::Request::Custom; our @ISA = qw/APR::Request/; package APR::Request::Cookie::Table; sub EXISTS { my ($t, $key) = @_; return defined $t->FETCH($key); } package APR::Request::Param::Table; sub EXISTS { my ($t, $key) = @_; return defined $t->FETCH($key); } libapreq2-2.17/glue/perl/xsbuilder/APR/Request/Request.pod0000644000175000017500000003754514277401734023070 0ustar jortonjorton=head1 NAME APR::Request - wrapper for libapreq2's module/handle API. =begin testing use APR::Pool; use APR::Brigade; use APR::Bucket; use APR::BucketAlloc; use APR::Request; use APR::Request::Parser; $pool = APR::Pool->new; $ba = APR::BucketAlloc->new($pool); $bb = APR::Brigade->new($pool, $ba); $content = <insert_tail(APR::Bucket->new($ba, $content)); $parser = APR::Request::Parser->multipart($pool, $ba, "multipart/form-data; boundary=-XYZ-"); =end testing =head1 SYNOPSIS =for example begin use APR::Request; $req = APR::Request::Custom->handle($pool, "foo=arg1&bar=arg2", "apache=quux", $parser, 1e6, $bb); $param = $req->param("foo"); $cookie = $req->jar("apache"); =for example end =for example_testing ok $req->isa("APR::Request"); is $param, "arg1", "param"; is $cookie, "quux", "cookie"; =head1 DESCRIPTION The C<< APR::Request >> module provides the base methods for interfacing with libapreq2's module API. It also provides a few utility functions and constants. This manpage documents version 2.17 of the APR::Request, APR::Request::Custom, APR::Request::Cookie::Table, and APR::Request::Param::Table packages. =head1 METHODS APR::Request::Custom - derived from APR::Request. =head2 handle APR::Request::Custom->handle($pool, $query_string, $cookie_header, $parser, $read_limit, $brigade) Creates a new APR::Request::Custom object. The $query_string and $cookie_headers are immediately parsed into the C and C tables. The $parser is an APR::Request::Parser object which is invoked when fetching C entries from the $brigade. The $read_limit represents the maximum number of bytes this handle may feed into the parser. =head1 METHODS APR::Request =head2 pool $req->pool() Returns the APR::Pool object associated to this handle. =for example begin =for example end =for example_testing is ${$req->pool()}, $$pool, "pool"; =head2 bucket_alloc $req->bucket_alloc() Returns the APR::BucketAlloc object associated to this handle. =for example begin =for example end =for example_testing is ${$req->bucket_alloc()}, $$ba, "bucket alloc"; =head2 jar_status $req->jar_status() Returns the final status code of the handle's cookie header parser. =for example begin =for example end =for example_testing is $req->jar_status == 0, 1, "jar status"; =head2 args_status $req->args_status() Returns the final status code of the handle's query-string parser. =for example begin =for example end =for example_testing is $req->args_status == 0, 1, "args status"; =head2 body_status $req->body_status() Returns the final status code of the handle's body parser. =for example begin =for example end =for example_testing is $req->body_status == 0, 1, "body status"; =head2 param_status $req->param_status() Returns C<< ($req->args_status, $req->body_status) >> in list context; otherwise returns C<< $req->args_status || $req->body_status >>. =for example begin =for example end =for example_testing is $req->param_status == 0, 1, "param status"; =head2 parse $req->parse() Parses the jar, args, and body tables. Returns C<< $req->jar_status, $req->args_status, $req->body_status >>. =for example begin @status = $req->parse; ok @status == 3; ok $status[0] == $req->jar_status; ok $status[1] == $req->args_status; ok $status[2] == $req->body_status; =for example end =for example_testing $_ += 0 for @status; # convert to proper IVs is "@status", "0 0 0", "parse"; =head2 jar $req->jar() $req->jar($key) With no arguments, this method returns a tied APR::Request::Cookie::Table object (or undef if the "Cookie" header is absent) in scalar context, or the names (in order, with repetitions) of all the parsed cookies. With the C<$key> argument, in scalar context this method fetches the first matching cookie. In list context it returns all matching cookies. The returned cookies are the values as they appeared in the incoming Cookie header. jar() will throw an APR::Request::Error object whenever jar_status() is non-zero and the return value is potentially invalid (eg C<< scalar $req->jar($key) >> will not die if the desired cookie was successfully parsed). =for example begin $jar = $req->jar; @cookie_names = $req->jar; ok $jar->isa("APR::Request::Cookie::Table"); ok shift @cookie_names eq $_ for keys %$jar; $cookie = $req->jar("apache"); @cookies = $req->jar("apache"); =for example end =for example_testing is $cookie, "quux", "cookie"; is "@cookies", "quux", "cookies"; =head2 args $req->args() $req->args($key) With no arguments, this method returns a tied APR::Request::Param::Table object (or undef if the query string is absent) in scalar context, or the names (in order, with repetitions) of all the parsed query-string arguments. With the C<$key> argument, in scalar context this method fetches the first matching query-string arg. In list context it returns all matching args. args() will throw an APR::Request::Error object whenever args_status() is non-zero and the return value is potentially invalid (eg C<< scalar $req->args($key) >> will not die if the desired query argument was successfully parsed). =for example begin $args = $req->args; @arg_names = $req->args; ok $args->isa("APR::Request::Param::Table"); ok shift @arg_names eq $_ for keys %$args; $foo = $req->args("foo"); @bar = $req->args("bar"); =for example end =for example_testing is $foo, "arg1", "arg"; is "@bar", "arg2", "args"; =head2 body $req->body() $req->body($key) With no arguments, this method returns a tied APR::Request::Param::Table object (or undef if the request body is absent) in scalar context, or the names (in order, with repetitions) of all the parsed cookies. With the C<$key> argument, in scalar context this method fetches the first matching body param. In list context it returns all matching body params. body() will throw an APR::Request::Error object whenever body_status() is non-zero and the return value is potentially invalid (eg C<< scalar $req->body($key) >> will not die if the desired body param was successfully parsed). =for example begin $body = $req->body; @body_names = $req->body; ok $body->isa("APR::Request::Param::Table"); ok shift @body_names eq $_ for keys %$body; $alpha = $req->body("alpha"); @beta = $req->body("beta"); =for example end =for example_testing is $alpha, "body1", "alpha body"; is "@beta", "foo.txt", "beta body"; =head2 param $req->param() $req->param($key) With no arguments, this method returns a tied APR::Request::Param::Table object (or undef, if the query string and request body are absent) in scalar context, or the names (in order, with repetitions) of all the incoming (args + body) params. With the C<$key> argument, in scalar context this method fetches the first matching param. In list context it returns all matching params. param() will throw an APR::Request::Error object whenever param_status() is non-zero and the return value is potentially invalid (eg C<< scalar $req->param($key) >> will not die if the desired param was successfully parsed). =for example begin $param = $req->param; @param_names = $req->param; ok $param->isa("APR::Request::Param::Table"); ok shift @param_names eq $_ for keys %$param; $foo = $req->param("foo"); @foo = $req->param("foo"); =for example end =for example_testing is $foo, "arg1", "scalar param"; is "@foo", "arg1 body3", "list param"; =head2 upload $req->upload() $req->upload($key) With no arguments, this method returns a tied APR::Request::Param::Table object (or undef if the request body is absent) in scalar context (whose entries are APR::Request::Param objects), or the names (in order, with repetitions) of all the incoming uploads. With the C<$key> argument, in scalar context this method fetches the first matching upload. In list context it returns all matching uploads. The return values are APR::Request::Param objects. upload() will throw an APR::Request::Error object whenever body_status() is non-zero. =for example begin $uploads = $req->upload; @upload_names = $req->upload; ok $uploads->isa("APR::Request::Param::Table"); ok shift @upload_names eq $_ for keys %$uploads; ok $_->upload for values %$uploads; $up = $req->upload("beta"); @ups = $req->upload("beta"); ok $_->isa("APR::Request::Param") for $up, @ups; ok $_->upload for $up, @ups; =for example end =for example_testing is $up, "foo.txt", "scalar upload"; is "@ups", "foo.txt", "list upload"; =head2 read_limit $req->read_limit() $req->read_limit($set) Get/set the read limit, which controls the total amount of bytes that can be fed to the current parser. =head2 brigade_limit $req->brigade_limit() $req->brigade_limit($set) Get/set the brigade_limit for the current parser. This limit determines how many bytes of a file upload that the parser may spool into main memory. Uploads exceeding this limit are written directly to disk. =head2 temp_dir $req->temp_dir() $req->temp_dir($set) Get/set the spool directory for uploads which exceed the configured brigade_limit. =head2 disable_uploads $req->disable_uploads() Engage the disable_uploads hook for this request. =head2 upload_hook $req->upload_hook($callback) Add an upload hook callback for this request. The arguments to the $callback sub are ($upload, $new_data). =head2 import Exports a list of subs into the caller's package. =head1 SUBROUTINES APR::Request =head2 encode encode($string) Exportable sub which returns the url-encoded form of C<$string>. =head2 decode decode($string) Exportable sub which returns the url-decoded form of C<$string>. =head1 SUBCLASSING APR::Request If the instances of your subclass are hash references then you can actually inherit from APR::Request as long as the APR::Request object is stored in an attribute called "r" or "_r". (The APR::Request class effectively does the delegation for you automagically, as long as it knows where to find the APR::Request object to delegate to.) For example: package MySubClass; use APR::Request::Custom; our @ISA = qw(APR::Request); sub new { my($class, @args) = @_; return bless { r => APR::Request::Custom->handle(@args) }, $class; } =head1 METHODS APR::Request::Cookie::Table - read-only version of APR::Table. Tables in this class normally arise from calls to C<< APR::Request::jar() >>. =head2 cookie_class $table->cookie_class() $table->cookie_class($set) Get/set the class each table element is blessed into during a L or L call. If defined, the class must be derived from APR::Request::Cookie. When called with $set, it returns the $table. Otherwise it returns the name of the current class, or undef if no cookie class is defined. =for example begin $jar = $req->jar; { package FOO; use base 'APR::Request::Cookie'; } $jar->cookie_class("FOO"); ok $_->isa("FOO") for values %$jar; =for example end =for example_testing $jar->do(sub { ok $_[1]->isa("FOO"); }); =head2 get $table->get($key) Same as FETCH. =head2 FETCH $table->FETCH($key) In scalar context, this returns the first value matching $key (note: see NEXTKEY for additional notes). The match is always case-insensitive. In list context, this returns all matching values. Note: the type of the return values depends on the table's current cookie_class. =head2 EXISTS Synonym for C<< defined >>; these tables are not allowed to contain undefined values. Since these are constant tables, they don't autovivify either. =head2 FIRSTKEY $table->FIRSTKEY() Returns the first key in the table. =head2 NEXTKEY $table->NEXTKEY() Returns the next key in the table. For perl 5.8+, if the key is multivalued, a subsequent FETCH on this key will return the corresponding value, until either NEXTKEY or FIRSTKEY is invoked again. For perl 5.6, FETCH always returns the first value. =head2 do $table->do($callback, @keys) Same as APR::Table::do; iterates over the table calling $callback->($key, $value) for each matching @keys. If @keys is empty, this iterates over the entire table. Note: The type of $value inserted into the callback depends on the table's current cookie_class. =head1 METHODS APR::Request::Param::Table =head2 param_class $table->param_class() $table->param_class($set) Get/set the class each table element is blessed into during a C or C call. If defined, the class must be derived from APR::Request::Param. When called with $set, it returns the $table. Otherwise it returns the name of the current class, or undef if no param class is defined. =for example begin $body = $req->body; { package BAR; use base 'APR::Request::Param'; } $body->param_class("BAR"); ok $_->isa("BAR") for values %$body; =for example end =for example_testing $body->do(sub { ok $_[1]->isa("BAR"); }); =head2 get $table->get($key) Same as FETCH. =head2 FETCH $table->FETCH($key) In scalar context, this returns the first value matching $key (see NEXTKEY for additional notes on this). The match is always case-insensitive. In list context, this returns all matching values. Note: the type of the return values depends on the table's current param_class. =head2 EXISTS Synonym for C<< defined >>; these tables are not allowed to contain undefined values. Since these are constant tables, they don't autovivify either. =head2 NEXTKEY $table->NEXTKEY() Returns the next key in the table. For perl 5.8+, if the key is multivalued, a subsequent FETCH on this key will return the corresponding value, until either NEXTKEY or FIRSTKEY is invoked again. For perl 5.6, FETCH always returns the first value. =head2 FIRSTKEY $table->FIRSTKEY() Returns the first key in the table. =head2 do $table->do($callback, @keys) Same as APR::Table::do; iterates over the table calling $callback->($key, $value) for each matching @keys. If @keys is empty, this iterates over the entire table. Note: The type of $value inserted into the callback depends on the table's current value_class. =head1 SEE ALSO L, L, L, L =head1 COPYRIGHT Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to You under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. libapreq2-2.17/glue/perl/xsbuilder/APR/Request/Request.xs0000644000175000017500000002251714277401734022731 0ustar jortonjortonMODULE = APR::Request PACKAGE = APR::Request SV* encode(in) SV *in PREINIT: STRLEN len; char *src; CODE: src = SvPV(in, len); RETVAL = newSV(3 * len + 1); SvCUR_set(RETVAL, apreq_encode(SvPVX(RETVAL), src, len)); SvPOK_on(RETVAL); OUTPUT: RETVAL SV* decode(in) SV *in PREINIT: STRLEN len; apr_size_t dlen; char *src; CODE: src = SvPV(in, len); RETVAL = newSV(len + 1); apreq_decode(SvPVX(RETVAL), &dlen, src, len); /*XXX needs error-handling */ SvCUR_set(RETVAL, dlen); SvPOK_on(RETVAL); OUTPUT: RETVAL SV* read_limit(req, val=NULL) APR::Request req SV *val PREINIT: /* nada */ CODE: if (items == 1) { apr_status_t s; apr_uint64_t bytes; s = apreq_read_limit_get(req, &bytes); if (s != APR_SUCCESS) { if (!sv_derived_from(ST(0), ERROR_CLASS)) { SV *obj = apreq_xs_sv2object(aTHX_ ST(0), HANDLE_CLASS, 'r'); apreq_xs_croak(aTHX_ newHV(), obj, s, "APR::Request::read_limit", ERROR_CLASS); } else RETVAL = &PL_sv_undef; } else { RETVAL = newSVuv(bytes); } } else { apr_status_t s = apreq_read_limit_set(req, SvUV(val)); if (s != APR_SUCCESS) { if (GIMME_V == G_VOID && !sv_derived_from(ST(0), ERROR_CLASS)) { SV *obj = apreq_xs_sv2object(aTHX_ ST(0), HANDLE_CLASS, 'r'); apreq_xs_croak(aTHX_ newHV(), obj, s, "APR::Request::read_limit", ERROR_CLASS); } else RETVAL = &PL_sv_no; } else { RETVAL = &PL_sv_yes; } } OUTPUT: RETVAL SV* brigade_limit(req, val=NULL) APR::Request req SV *val PREINIT: /* nada */ CODE: if (items == 1) { apr_status_t s; apr_size_t bytes; s = apreq_brigade_limit_get(req, &bytes); if (s != APR_SUCCESS) { if (!sv_derived_from(ST(0), ERROR_CLASS)) { SV *obj = apreq_xs_sv2object(aTHX_ ST(0), HANDLE_CLASS, 'r'); apreq_xs_croak(aTHX_ newHV(), obj, s, "APR::Request::brigade_limit", ERROR_CLASS); } else RETVAL = &PL_sv_undef; } else { RETVAL = newSVuv(bytes); } } else { apr_status_t s = apreq_brigade_limit_set(req, SvUV(val)); if (s != APR_SUCCESS) { if (GIMME_V == G_VOID && !sv_derived_from(ST(0), ERROR_CLASS)) { SV *obj = apreq_xs_sv2object(aTHX_ ST(0), HANDLE_CLASS, 'r'); apreq_xs_croak(aTHX_ newHV(), obj, s, "APR::Request::brigade_limit", ERROR_CLASS); } else RETVAL = &PL_sv_no; } else { RETVAL = &PL_sv_yes; } } OUTPUT: RETVAL SV* temp_dir(req, val=NULL) APR::Request req SV *val PREINIT: /* nada */ CODE: if (items == 1) { apr_status_t s; const char *path; s = apreq_temp_dir_get(req, &path); if (s != APR_SUCCESS) { if (!sv_derived_from(ST(0), ERROR_CLASS)) { SV *obj = apreq_xs_sv2object(aTHX_ ST(0), HANDLE_CLASS, 'r'); apreq_xs_croak(aTHX_ newHV(), obj, s, "APR::Request::temp_dir", ERROR_CLASS); } else RETVAL = &PL_sv_undef; } else { RETVAL = (path == NULL) ? &PL_sv_undef : newSVpv(path, 0); } } else { apr_status_t s = apreq_temp_dir_set(req, SvPV_nolen(val)); if (s != APR_SUCCESS) { if (GIMME_V == G_VOID && !sv_derived_from(ST(0), ERROR_CLASS)) { SV *obj = apreq_xs_sv2object(aTHX_ ST(0), HANDLE_CLASS, 'r'); apreq_xs_croak(aTHX_ newHV(), obj, s, "APR::Request::temp_dir", ERROR_CLASS); } else RETVAL = &PL_sv_no; } else { RETVAL = &PL_sv_yes; } } OUTPUT: RETVAL SV* jar_status(req) APR::Request req PREINIT: const apr_table_t *t; CODE: RETVAL = apreq_xs_error2sv(aTHX_ apreq_jar(req, &t)); OUTPUT: RETVAL SV* args_status(req) APR::Request req PREINIT: const apr_table_t *t; CODE: RETVAL = apreq_xs_error2sv(aTHX_ apreq_args(req, &t)); OUTPUT: RETVAL SV* body_status(req) APR::Request req PREINIT: const apr_table_t *t; CODE: RETVAL = apreq_xs_error2sv(aTHX_ apreq_body(req, &t)); OUTPUT: RETVAL SV* disable_uploads(req) APR::Request req PREINIT: apreq_hook_t *h; apr_status_t s; CODE: h = apreq_hook_make(req->pool, apreq_hook_disable_uploads, NULL, NULL); s = apreq_hook_add(req, h); RETVAL = apreq_xs_error2sv(aTHX_ s); OUTPUT: RETVAL void upload_hook(obj, sub) SV *obj SV *sub PREINIT: struct hook_ctx *ctx; IV iv; apreq_handle_t *req; CODE: obj = apreq_xs_sv2object(aTHX_ obj, "APR::Request", 'r'); iv = SvIVX(obj); req = INT2PTR(apreq_handle_t *, iv); ctx = apr_palloc(req->pool, sizeof *ctx); ctx->hook = newSVsv(sub); ctx->bucket_data = newSV(8000); ctx->parent = SvREFCNT_inc(obj); SvTAINTED_on(ctx->bucket_data); #ifdef USE_ITHREADS ctx->perl = aTHX; #endif apreq_hook_add(req, apreq_hook_make(req->pool, apreq_xs_upload_hook, NULL, ctx)); apr_pool_cleanup_register(req->pool, ctx, upload_hook_cleanup, upload_hook_cleanup); APR::Pool pool(req) APR::Request req CODE: RETVAL = req->pool; OUTPUT: RETVAL APR::BucketAlloc bucket_alloc(req) APR::Request req CODE: RETVAL = req->bucket_alloc; OUTPUT: RETVAL MODULE = APR::Request::Param PACKAGE = APR::Request::Param::Table SV * uploads(t, pool) APR::Request::Param::Table t APR::Pool pool PREINIT: SV *obj = apreq_xs_sv2object(aTHX_ ST(0), PARAM_TABLE_CLASS, 't'); SV *parent = apreq_xs_sv2object(aTHX_ ST(0), HANDLE_CLASS, 'r'); MAGIC *mg = mg_find(obj, PERL_MAGIC_ext); CODE: RETVAL = apreq_xs_param_table2sv(aTHX_ apreq_uploads(t, pool), HvNAME(SvSTASH(obj)), parent, mg->mg_ptr, mg->mg_len); OUTPUT: RETVAL MODULE = APR::Request::Param PACKAGE = APR::Request::Param::Table SV * param_class(t, subclass=&PL_sv_undef) APR::Request::Param::Table t SV *subclass PREINIT: SV *obj = apreq_xs_sv2object(aTHX_ ST(0), PARAM_TABLE_CLASS, 't'); MAGIC *mg = mg_find(obj, PERL_MAGIC_ext); char *curclass = mg->mg_ptr; CODE: if (items == 2) { if (!SvOK(subclass)) { mg->mg_ptr = NULL; mg->mg_len = 0; } else if (!sv_derived_from(subclass, PARAM_CLASS)) { Perl_croak(aTHX_ "Usage: " PARAM_TABLE_CLASS "::param_class($table, $class): " "class %s is not derived from " PARAM_CLASS, SvPV_nolen(subclass)); } else { STRLEN len; mg->mg_ptr = savepv(SvPV(subclass, len)); mg->mg_len = len; } if (curclass != NULL) Safefree(curclass); XSRETURN(1); } RETVAL = (curclass == NULL) ? &PL_sv_undef : newSVpv(curclass, 0); OUTPUT: RETVAL MODULE = APR::Request::Cookie PACKAGE = APR::Request::Cookie::Table SV * cookie_class(t, subclass=&PL_sv_undef) APR::Request::Cookie::Table t SV *subclass PREINIT: SV *obj = apreq_xs_sv2object(aTHX_ ST(0), COOKIE_TABLE_CLASS, 't'); MAGIC *mg = mg_find(obj, PERL_MAGIC_ext); char *curclass = mg->mg_ptr; CODE: if (items == 2) { if (!SvOK(subclass)) { mg->mg_ptr = NULL; mg->mg_len = 0; } else if (!sv_derived_from(subclass, COOKIE_CLASS)) { Perl_croak(aTHX_ "Usage: " COOKIE_TABLE_CLASS "::cookie_class($table, $class): " "class %s is not derived from " COOKIE_CLASS, SvPV_nolen(subclass)); } else { STRLEN len; mg->mg_ptr = savepv(SvPV(subclass, len)); mg->mg_len = len; } if (curclass != NULL) Safefree(curclass); XSRETURN(1); } RETVAL = (curclass == NULL) ? &PL_sv_undef : newSVpv(curclass, 0); OUTPUT: RETVAL MODULE = APR::Request PACKAGE = APR::Request::Custom APR::Request handle(class, pool, query_string, cookie, parser, read_limit, in) apreq_xs_subclass_t class APR::Pool pool char *query_string char *cookie APR::Request::Parser parser UV read_limit APR::Brigade in PREINIT: SV *parent = SvRV(ST(1)); CODE: RETVAL = apreq_handle_custom(pool, query_string, cookie, parser, read_limit, in); OUTPUT: RETVAL BOOT: { apr_version_t version; apr_version(&version); if (version.major != APR_MAJOR_VERSION) Perl_croak(aTHX_ "Can't load module APR::Request : " "wrong libapr major version " "(expected %d, saw %d)", APR_MAJOR_VERSION, version.major); } libapreq2-2.17/glue/perl/xsbuilder/apreq_xs_postperl.h0000644000175000017500000001747114277401734022601 0ustar jortonjorton/* ** Licensed to the Apache Software Foundation (ASF) under one or more ** contributor license agreements. See the NOTICE file distributed with ** this work for additional information regarding copyright ownership. ** The ASF licenses this file to You under the Apache License, Version 2.0 ** (the "License"); you may not use this file except in compliance with ** the License. You may obtain a copy of the License at ** ** http://www.apache.org/licenses/LICENSE-2.0 ** ** Unless required by applicable law or agreed to in writing, software ** distributed under the License is distributed on an "AS IS" BASIS, ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. ** See the License for the specific language governing permissions and ** limitations under the License. */ #ifndef APREQ_XS_POSTPERL_H #define APREQ_XS_POSTPERL_H /* avoid namespace collisions from perl's XSUB.h */ #include "modperl_perl_unembed.h" /* required for modperl's T_HASHOBJ (typemap) */ #include "modperl_common_util.h" /* backward compatibility macros support */ #include "ppport.h" /* apr version info for modules */ #include "apr_version.h" /* ExtUtils::XSBuilder::ParseSoure trickery... */ typedef apreq_handle_t apreq_xs_handle_cgi_t; typedef apreq_handle_t apreq_xs_handle_apache2_t; typedef apr_table_t apreq_xs_param_table_t; typedef apr_table_t apreq_xs_cookie_table_t; typedef HV apreq_xs_error_t; typedef char* apreq_xs_subclass_t; #define APR__Request__Param__Table const apr_table_t * #define APR__BucketAlloc apr_bucket_alloc_t * #define HANDLE_CLASS "APR::Request" #define COOKIE_CLASS "APR::Request::Cookie" #define PARAM_CLASS "APR::Request::Param" #define ERROR_CLASS "APR::Request::Error" #define COOKIE_TABLE_CLASS "APR::Request::Cookie::Table" #define PARAM_TABLE_CLASS "APR::Request::Param::Table" struct apreq_xs_do_arg { const char *pkg; SV *parent, *sub; PerlInterpreter *perl; }; /** * @file apreq_xs_postperl.h * @brief XS include file for making Cookie.so and Request.so * */ /** * @defgroup XS Perl * @ingroup GLUE * @{ */ /** * Trace through magic objects & hashrefs looking for original object. * @param in The starting SV *. * @param key The first letter of key is used to search a hashref for * the desired object. * @return Reference to the object. */ APR_INLINE static SV *apreq_xs_find_obj(pTHX_ SV *in, const char key) { const char altkey[] = { '_', key }; while (in && SvROK(in)) { SV *sv = SvRV(in); switch (SvTYPE(sv)) { MAGIC *mg; SV **svp; case SVt_PVHV: if (SvMAGICAL(sv) && (mg = mg_find(sv,PERL_MAGIC_tied))) { in = mg->mg_obj; break; } else if ((svp = hv_fetch((HV *)sv, altkey+1, 1, FALSE)) || (svp = hv_fetch((HV *)sv, altkey, 2, FALSE))) { in = *svp; break; } Perl_croak(aTHX_ "attribute hash has no '%c' key!", key); case SVt_PVMG: if (SvOBJECT(sv) && SvIOKp(sv)) return in; default: Perl_croak(aTHX_ "panic: unsupported SV type: %d", SvTYPE(sv)); } } Perl_croak(aTHX_ "apreq_xs_find_obj: object attr `%c' not found", key); return NULL; } /* conversion function templates based on modperl-2's sv2request_rec */ static APR_INLINE SV *apreq_xs_object2sv(pTHX_ void *ptr, const char *class, SV *parent, const char *base) { SV *rv = sv_setref_pv(newSV(0), class, (void *)ptr); sv_magic(SvRV(rv), parent, PERL_MAGIC_ext, Nullch, 0); if (!sv_derived_from(rv, base)) Perl_croak(aTHX_ "apreq_xs_object2sv failed: " "target class %s isn't derived from %s", class, base); return rv; } APR_INLINE static SV *apreq_xs_handle2sv(pTHX_ apreq_handle_t *req, const char *class, SV *parent) { return apreq_xs_object2sv(aTHX_ req, class, parent, HANDLE_CLASS); } APR_INLINE static SV *apreq_xs_param2sv(pTHX_ apreq_param_t *p, const char *class, SV *parent) { if (class == NULL) { SV *rv = newSVpvn(p->v.data, p->v.dlen); if (apreq_param_is_tainted(p)) SvTAINTED_on(rv); else if (apreq_param_charset_get(p) == APREQ_CHARSET_UTF8) /* Setting the UTF8 flag on non-utf8 data is a security hole. * Let's see if coupling that decision with taintedness helps * resolve this issue. */ SvUTF8_on(rv); return rv; } return apreq_xs_object2sv(aTHX_ p, class, parent, PARAM_CLASS); } APR_INLINE static SV *apreq_xs_cookie2sv(pTHX_ apreq_cookie_t *c, const char *class, SV *parent) { if (class == NULL) { SV *rv = newSVpvn(c->v.data, c->v.dlen); if (apreq_cookie_is_tainted(c)) SvTAINTED_on(rv); /*XXX add charset fixups? */ return rv; } return apreq_xs_object2sv(aTHX_ c, class, parent, COOKIE_CLASS); } APR_INLINE static SV* apreq_xs_error2sv(pTHX_ apr_status_t s) { char buf[256]; SV *sv = newSV(0); sv_upgrade(sv, SVt_PVIV); apreq_strerror(s, buf, sizeof buf); sv_setpvn(sv, buf, strlen(buf)); SvPOK_on(sv); SvIVX(sv) = s; SvIOK_on(sv); SvREADONLY_on(sv); return sv; } APR_INLINE static SV *apreq_xs_sv2object(pTHX_ SV *sv, const char *class, const char attr) { SV *obj; MAGIC *mg; sv = apreq_xs_find_obj(aTHX_ sv, attr); /* XXX sv_derived_from is expensive; how to optimize it? */ if (sv_derived_from(sv, class)) { return SvRV(sv); } /* else check if parent (mg->mg_obj) is the right object type */ if ((mg = mg_find(SvRV(sv), PERL_MAGIC_ext)) != NULL && (obj = mg->mg_obj) != NULL && SvOBJECT(obj)) { sv = sv_2mortal(newRV_inc(obj)); if (sv_derived_from(sv, class)) return obj; } Perl_croak(aTHX_ "apreq_xs_sv2object: %s object not found", class); return NULL; } APR_INLINE static apreq_handle_t *apreq_xs_sv2handle(pTHX_ SV *sv) { SV *obj = apreq_xs_sv2object(aTHX_ sv, HANDLE_CLASS, 'r'); IV iv = SvIVX(obj); return INT2PTR(apreq_handle_t *, iv); } static APR_INLINE apreq_param_t *apreq_xs_sv2param(pTHX_ SV *sv) { SV *obj = apreq_xs_sv2object(aTHX_ sv, PARAM_CLASS, 'p'); IV iv = SvIVX(obj); return INT2PTR(apreq_param_t *, iv); } static APR_INLINE apreq_cookie_t *apreq_xs_sv2cookie(pTHX_ SV *sv) { SV *obj = apreq_xs_sv2object(aTHX_ sv, COOKIE_CLASS, 'c'); IV iv = SvIVX(obj); return INT2PTR(apreq_cookie_t *, iv); } static APR_INLINE void apreq_xs_croak(pTHX_ HV *data, SV *obj, apr_status_t rc, const char *func, const char *class) { HV *stash; stash = gv_stashpv(class, FALSE); if (stash == NULL) { ENTER; Perl_load_module(aTHX_ PERL_LOADMOD_NOIMPORT, newSVpv(class, 0), Nullsv); LEAVE; stash = gv_stashpv(class, TRUE); } if (obj != Nullsv) sv_setsv(*hv_fetch(data, "_r", 2, 1), sv_2mortal(newRV_inc(obj))); sv_setiv(*hv_fetch(data, "rc", 2, 1), rc); sv_setpv(*hv_fetch(data, "file", 4, 1), CopFILE(PL_curcop)); sv_setiv(*hv_fetch(data, "line", 4, 1), CopLINE(PL_curcop)); sv_setpv(*hv_fetch(data, "func", 4, 1), func); sv_setsv(ERRSV, sv_2mortal(sv_bless(newRV_noinc((SV*)data), stash))); Perl_croak(aTHX_ Nullch); } static APR_INLINE const char *apreq_xs_helper_class(pTHX_ SV **SP, SV *sv, const char *method) { PUSHMARK(SP); XPUSHs(sv); PUTBACK; call_method(method, G_SCALAR); SPAGAIN; sv = POPs; PUTBACK; return SvPV_nolen(sv); } /** @} */ #endif /* APREQ_XS_POSTPERL_H */ libapreq2-2.17/glue/perl/xsbuilder/apreq_xs_preperl.h0000644000175000017500000000271114277401734022371 0ustar jortonjorton/* ** Licensed to the Apache Software Foundation (ASF) under one or more ** contributor license agreements. See the NOTICE file distributed with ** this work for additional information regarding copyright ownership. ** The ASF licenses this file to You under the Apache License, Version 2.0 ** (the "License"); you may not use this file except in compliance with ** the License. You may obtain a copy of the License at ** ** http://www.apache.org/licenses/LICENSE-2.0 ** ** Unless required by applicable law or agreed to in writing, software ** distributed under the License is distributed on an "AS IS" BASIS, ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. ** See the License for the specific language governing permissions and ** limitations under the License. */ #ifndef APREQ_XS_PREPERL_H #define APREQ_XS_PREPERL_H #define PERL_NO_GET_CONTEXT /* we want efficiency under ithreads */ /* some redefines needed for Win32 */ #ifdef WIN32 # define uid_t perl_uid_t # define gid_t perl_gid_t # ifdef exit # define perl_exit exit # undef exit # endif #endif /* Undo httpd.h's strchr override. */ #ifdef AP_DEBUG # undef strchr #endif /** * @file apreq_xs_preperl.h * @brief XS include file for making Cookie.so and Request.so, for things * that has to be included before EXTERN.h/perl.h/XSUB.h headers * */ /** * @defgroup XS Perl * @ingroup GLUE * @{ */ /** @} */ #endif /* APREQ_XS_PREPERL_H */ libapreq2-2.17/glue/perl/xsbuilder/apreq_xs_tables.h0000644000175000017500000001732414277401734022200 0ustar jortonjorton/* ** Licensed to the Apache Software Foundation (ASF) under one or more ** contributor license agreements. See the NOTICE file distributed with ** this work for additional information regarding copyright ownership. ** The ASF licenses this file to You under the Apache License, Version 2.0 ** (the "License"); you may not use this file except in compliance with ** the License. You may obtain a copy of the License at ** ** http://www.apache.org/licenses/LICENSE-2.0 ** ** Unless required by applicable law or agreed to in writing, software ** distributed under the License is distributed on an "AS IS" BASIS, ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. ** See the License for the specific language governing permissions and ** limitations under the License. */ #ifndef APREQ_XS_TABLES_H #define APREQ_XS_TABLES_H /* backward compatibility macros support */ #include "ppport.h" /**************************************************/ #if (PERL_VERSION >= 8) /* MAGIC ITERATOR REQUIRES 5.8 */ /* Requires perl 5.8 or better. * A custom MGVTBL with its "copy" slot filled allows * us to FETCH a table entry immediately during iteration. * For multivalued keys this is essential in order to get * the value corresponding to the current key, otherwise * values() will always report the first value repeatedly. * With this MGVTBL the keys() list always matches up with * the values() list, even in the multivalued case. * We only prefetch the value during iteration, because the * prefetch adds overhead to EXISTS and STORE operations. * They are only "penalized" when the perl program is iterating * via each(), which seems to be a reasonable tradeoff. */ static int apreq_xs_cookie_table_magic_copy(pTHX_ SV *sv, MAGIC *mg, SV *nsv, const char *name, int namelen) { /* Prefetch the value whenever the table iterator is > 0 */ MAGIC *tie_magic = mg_find(nsv, PERL_MAGIC_tiedelem); SV *obj = SvRV(tie_magic->mg_obj); IV idx = SvIVX(obj); const apr_table_t *t = INT2PTR(apr_table_t *, idx); const apr_array_header_t *arr = apr_table_elts(t); idx = SvCUR(obj); if (idx > 0 && idx <= arr->nelts) { const apr_table_entry_t *te = (const apr_table_entry_t *)arr->elts; apreq_cookie_t *c = apreq_value_to_cookie(te[idx-1].val); MAGIC *my_magic = mg_find(obj, PERL_MAGIC_ext); SvMAGICAL_off(nsv); sv_setsv(nsv, sv_2mortal(apreq_xs_cookie2sv(aTHX_ c, my_magic->mg_ptr, my_magic->mg_obj))); } return 0; } static const MGVTBL apreq_xs_cookie_table_magic = {0, 0, 0, 0, 0, apreq_xs_cookie_table_magic_copy}; #endif static APR_INLINE SV *apreq_xs_cookie_table2sv(pTHX_ const apr_table_t *t, const char *class, SV *parent, const char *value_class, I32 vclen) { SV *sv = (SV *)newHV(); SV *rv = sv_setref_pv(newSV(0), class, (void *)t); sv_magic(SvRV(rv), parent, PERL_MAGIC_ext, value_class, vclen); #if (PERL_VERSION >= 8) /* MAGIC ITERATOR requires 5.8 */ sv_magic(sv, NULL, PERL_MAGIC_ext, Nullch, -1); SvMAGIC(sv)->mg_virtual = (MGVTBL *)&apreq_xs_cookie_table_magic; SvMAGIC(sv)->mg_flags |= MGf_COPY; #endif sv_magic(sv, rv, PERL_MAGIC_tied, Nullch, 0); SvREFCNT_dec(rv); /* corrects SvREFCNT_inc(rv) implicit in sv_magic */ return sv_bless(newRV_noinc(sv), SvSTASH(SvRV(rv))); } static int apreq_xs_cookie_table_keys(void *data, const char *key, const char *val) { #ifdef USE_ITHREADS struct apreq_xs_do_arg *d = (struct apreq_xs_do_arg *)data; dTHXa(d->perl); #endif dSP; apreq_cookie_t *c = apreq_value_to_cookie(val); SV *sv = newSVpvn(key, c->v.nlen); if (apreq_cookie_is_tainted(c)) SvTAINTED_on(sv); #ifndef USE_ITHREADS (void)data; #endif XPUSHs(sv_2mortal(sv)); PUTBACK; return 1; } static int apreq_xs_cookie_table_values(void *data, const char *key, const char *val) { struct apreq_xs_do_arg *d = (struct apreq_xs_do_arg *)data; dTHXa(d->perl); dSP; apreq_cookie_t *c = apreq_value_to_cookie(val); SV *sv = apreq_xs_cookie2sv(aTHX_ c, d->pkg, d->parent); XPUSHs(sv_2mortal(sv)); PUTBACK; return 1; } /**************************************************/ #if (PERL_VERSION >= 8) /* MAGIC ITERATOR REQUIRES 5.8 */ /* Requires perl 5.8 or better. * A custom MGVTBL with its "copy" slot filled allows * us to FETCH a table entry immediately during iteration. * For multivalued keys this is essential in order to get * the value corresponding to the current key, otherwise * values() will always report the first value repeatedly. * With this MGVTBL the keys() list always matches up with * the values() list, even in the multivalued case. * We only prefetch the value during iteration, because the * prefetch adds overhead to EXISTS and STORE operations. * They are only "penalized" when the perl program is iterating * via each(), which seems to be a reasonable tradeoff. */ static int apreq_xs_param_table_magic_copy(pTHX_ SV *sv, MAGIC *mg, SV *nsv, const char *name, int namelen) { /* Prefetch the value whenever the table iterator is > 0 */ MAGIC *tie_magic = mg_find(nsv, PERL_MAGIC_tiedelem); SV *obj = SvRV(tie_magic->mg_obj); IV idx = SvIVX(obj); const apr_table_t *t = INT2PTR(apr_table_t *, idx); const apr_array_header_t *arr = apr_table_elts(t); idx = SvCUR(obj); if (idx > 0 && idx <= arr->nelts) { const apr_table_entry_t *te = (const apr_table_entry_t *)arr->elts; apreq_param_t *p = apreq_value_to_param(te[idx-1].val); MAGIC *my_magic = mg_find(obj, PERL_MAGIC_ext); SvMAGICAL_off(nsv); sv_setsv(nsv, sv_2mortal(apreq_xs_param2sv(aTHX_ p, my_magic->mg_ptr, my_magic->mg_obj))); } return 0; } static const MGVTBL apreq_xs_param_table_magic = {0, 0, 0, 0, 0, apreq_xs_param_table_magic_copy}; #endif static APR_INLINE SV *apreq_xs_param_table2sv(pTHX_ const apr_table_t *t, const char *class, SV *parent, const char *value_class, I32 vclen) { SV *sv = (SV *)newHV(); SV *rv = sv_setref_pv(newSV(0), class, (void *)t); sv_magic(SvRV(rv), parent, PERL_MAGIC_ext, value_class, vclen); #if (PERL_VERSION >= 8) /* MAGIC ITERATOR requires 5.8 */ sv_magic(sv, NULL, PERL_MAGIC_ext, Nullch, -1); SvMAGIC(sv)->mg_virtual = (MGVTBL *)&apreq_xs_param_table_magic; SvMAGIC(sv)->mg_flags |= MGf_COPY; #endif sv_magic(sv, rv, PERL_MAGIC_tied, Nullch, 0); SvREFCNT_dec(rv); /* corrects SvREFCNT_inc(rv) implicit in sv_magic */ return sv_bless(newRV_noinc(sv), SvSTASH(SvRV(rv))); } static int apreq_xs_param_table_keys(void *data, const char *key, const char *val) { #ifdef USE_ITHREADS struct apreq_xs_do_arg *d = (struct apreq_xs_do_arg *)data; dTHXa(d->perl); #endif dSP; apreq_param_t *p = apreq_value_to_param(val); SV *sv = newSVpvn(key, p->v.nlen); #ifndef USE_ITHREADS (void)data; #endif if (apreq_param_is_tainted(p)) SvTAINTED_on(sv); XPUSHs(sv_2mortal(sv)); PUTBACK; return 1; } static int apreq_xs_param_table_values(void *data, const char *key, const char *val) { struct apreq_xs_do_arg *d = (struct apreq_xs_do_arg *)data; dTHXa(d->perl); dSP; apreq_param_t *p = apreq_value_to_param(val); SV *sv = apreq_xs_param2sv(aTHX_ p, d->pkg, d->parent); XPUSHs(sv_2mortal(sv)); PUTBACK; return 1; } #endif /* APREQ_XS_TABLES_H */ libapreq2-2.17/glue/perl/xsbuilder/maps/apreq_functions.map0000644000175000017500000000445214277401734023510 0ustar jortonjorton########## Apache::Request:: Functions ########## #################### APR::Request stuff #################### MODULE=APR::Request PACKAGE=APR::Request PREFIX=apreq_ apreq_cp1252_to_utf8 #apreq_hook_add MODULE=APR::Request::Apache2 PACKAGE=APR::Request::Apache2 PREFIX=APR__Request__Apache2_ apreq_xs_handle_apache2_t *:DEFINE_handle | apreq_handle_apache2 (r) | const char *:class, request_rec *:r MODULE=APR::Request::CGI PACKAGE=APR::Request::CGI PREFIX=APR__Request__CGI_ apreq_xs_handle_cgi_t *:DEFINE_handle | apreq_handle_cgi (p) | const char *:class, apr_pool_t *:p #################### APR::Request::Cookie stuff #################### MODULE=APR::Request::Cookie PACKAGE=APR::Request::Cookie PREFIX=apreq_cookie_ apreq_cookie_expires MODULE=APR::Request PACKAGE=APR::Request::Cookie::Table PREFIX=APR__Request__Cookie__Table_ DEFINE_get | apreq_xs_cookie_table_FETCH | DEFINE_FETCH | apreq_xs_cookie_table_FETCH | DEFINE_NEXTKEY | apreq_xs_cookie_table_NEXTKEY | DEFINE_FIRSTKEY | apreq_xs_cookie_table_NEXTKEY | DEFINE_do | apreq_xs_cookie_table_do | #################### APR::Request::Param stuff #################### MODULE=APR::Request PACKAGE=APR::Request PREFIX=APR__Request_ DEFINE_parse | apreq_xs_parse | DEFINE_jar | apreq_xs_jar | DEFINE_args | apreq_xs_args | DEFINE_body | apreq_xs_body | DEFINE_param | apreq_xs_param | MODULE=APR::Request PACKAGE=APR::Request::Param::Table PREFIX=APR__Request__Param__Table_ DEFINE_get | apreq_xs_param_table_FETCH | DEFINE_FETCH | apreq_xs_param_table_FETCH | DEFINE_NEXTKEY | apreq_xs_param_table_NEXTKEY | DEFINE_FIRSTKEY | apreq_xs_param_table_NEXTKEY | DEFINE_do | apreq_xs_param_table_do | MODULE=APR::Request::Param PACKAGE=APR::Request::Brigade PREFIX=APR__Request__Brigade_ DEFINE_new | apreq_xs_brigade_copy | DEFINE_TIEHANDLE | apreq_xs_brigade_copy | DEFINE_READ | apreq_xs_brigade_read | DEFINE_READLINE | apreq_xs_brigade_readline | MODULE=APR::Request::Param PACKAGE=APR::Request::Brigade::IO PREFIX=APR__Request__Brigade__IO_ DEFINE_read | apreq_xs_brigade_read | DEFINE_readline | apreq_xs_brigade_readline | MODULE=APR::Request::Hook PACKAGE=APR::Request::Hook PREFIX=apreq_hook_ apreq_hook_run MODULE=APR::Request::Parser PACKAGE=APR::Request::Parser PREFIX=apreq_parser_ apreq_parser_run apreq_parser_add_hook libapreq2-2.17/glue/perl/xsbuilder/maps/apreq_structures.map0000644000175000017500000000124214277401734023715 0ustar jortonjorton########## APREQ structures ########## # # name # status # size # data[1] # info upload ! v ! module ! path ! domain ! port ! comment ! commentURL ! max_age ! flags ! v ! hook ! next ! ctx ! parser ! content_type ! hook > ctx libapreq2-2.17/glue/perl/xsbuilder/maps/apreq_types.map0000644000175000017500000000224014277401734022635 0ustar jortonjorton########## APREQ types ########## const apr_size_t | UV apr_size_t | UV struct SV | SV apr_status_t | IV const char * | PV char * | PV void | VOID void * | PTR const void * | PTR unsigned | UV unsigned char | UV #data structure stuff struct request_rec | Apache2::RequestRec | T_APACHEOBJ | r struct apr_pool_t | APR::Pool | T_POOLOBJ struct apr_array_header_t | APR::ArrayHeader struct apr_table_t | APR::Table | T_HASHOBJ struct apr_bucket_brigade | APR::Brigade struct apreq_param_t | APR::Request::Param | T_APREQ_PARAM | param struct apreq_cookie_t | APR::Request::Cookie | T_APREQ_COOKIE | cookie struct apreq_handle_t | APR::Request | T_APREQ_HANDLE | req struct apreq_xs_handle_apache2_t | APR::Request::Apache2 | T_APREQ_HANDLE_APACHE2 struct apreq_xs_handle_cgi_t | APR::Request::CGI | T_APREQ_HANDLE_CGI struct apreq_xs_error_t | APR::Request::Error | T_APREQ_ERROR struct apreq_xs_cookie_table_t | APR::Request::Cookie::Table | T_HASHOBJ const apreq_xs_param_table_t * | APR::Request::Param::Table | T_HASHOBJ struct apreq_parser_t | APR::Request::Parser struct apreq_hook_t | APR::Request::Hook libapreq2-2.17/glue/perl/xsbuilder/ppport.h0000644000175000017500000034666014277401734020360 0ustar jortonjorton#if 0 <<'SKIP'; #endif /* ---------------------------------------------------------------------- ppport.h -- Perl/Pollution/Portability Version 3.06_01 Automatically created by Devel::PPPort running under perl 5.008008 on Fri Apr 21 19:13:50 2006. Do NOT edit this file directly! -- Edit PPPort_pm.PL and the includes in parts/inc/ instead. Use 'perldoc ppport.h' to view the documentation below. ---------------------------------------------------------------------- SKIP =pod =head1 NAME ppport.h - Perl/Pollution/Portability version 3.06_01 =head1 SYNOPSIS perl ppport.h [options] [source files] Searches current directory for files if no [source files] are given --help show short help --patch=file write one patch file with changes --copy=suffix write changed copies with suffix --diff=program use diff program and options --compat-version=version provide compatibility with Perl version --cplusplus accept C++ comments --quiet don't output anything except fatal errors --nodiag don't show diagnostics --nohints don't show hints --nochanges don't suggest changes --nofilter don't filter input files --list-provided list provided API --list-unsupported list unsupported API --api-info=name show Perl API portability information =head1 COMPATIBILITY This version of F is designed to support operation with Perl installations back to 5.003, and has been tested up to 5.9.3. =head1 OPTIONS =head2 --help Display a brief usage summary. =head2 --patch=I If this option is given, a single patch file will be created if any changes are suggested. This requires a working diff program to be installed on your system. =head2 --copy=I If this option is given, a copy of each file will be saved with the given suffix that contains the suggested changes. This does not require any external programs. If neither C<--patch> or C<--copy> are given, the default is to simply print the diffs for each file. This requires either C or a C program to be installed. =head2 --diff=I Manually set the diff program and options to use. The default is to use C, when installed, and output unified context diffs. =head2 --compat-version=I Tell F to check for compatibility with the given Perl version. The default is to check for compatibility with Perl version 5.003. You can use this option to reduce the output of F if you intend to be backward compatible only up to a certain Perl version. =head2 --cplusplus Usually, F will detect C++ style comments and replace them with C style comments for portability reasons. Using this option instructs F to leave C++ comments untouched. =head2 --quiet Be quiet. Don't print anything except fatal errors. =head2 --nodiag Don't output any diagnostic messages. Only portability alerts will be printed. =head2 --nohints Don't output any hints. Hints often contain useful portability notes. =head2 --nochanges Don't suggest any changes. Only give diagnostic output and hints unless these are also deactivated. =head2 --nofilter Don't filter the list of input files. By default, files not looking like source code (i.e. not *.xs, *.c, *.cc, *.cpp or *.h) are skipped. =head2 --list-provided Lists the API elements for which compatibility is provided by F. Also lists if it must be explicitly requested, if it has dependencies, and if there are hints for it. =head2 --list-unsupported Lists the API elements that are known not to be supported by F and below which version of Perl they probably won't be available or work. =head2 --api-info=I Show portability information for API elements matching I. If I is surrounded by slashes, it is interpreted as a regular expression. =head1 DESCRIPTION In order for a Perl extension (XS) module to be as portable as possible across differing versions of Perl itself, certain steps need to be taken. =over 4 =item * Including this header is the first major one. This alone will give you access to a large part of the Perl API that hasn't been available in earlier Perl releases. Use perl ppport.h --list-provided to see which API elements are provided by ppport.h. =item * You should avoid using deprecated parts of the API. For example, using global Perl variables without the C prefix is deprecated. Also, some API functions used to have a C prefix. Using this form is also deprecated. You can safely use the supported API, as F will provide wrappers for older Perl versions. =item * If you use one of a few functions that were not present in earlier versions of Perl, and that can't be provided using a macro, you have to explicitly request support for these functions by adding one or more C<#define>s in your source code before the inclusion of F. These functions will be marked C in the list shown by C<--list-provided>. Depending on whether you module has a single or multiple files that use such functions, you want either C or global variants. For a C function, use: #define NEED_function For a global function, use: #define NEED_function_GLOBAL Note that you mustn't have more than one global request for one function in your project. Function Static Request Global Request ----------------------------------------------------------------------------------------- eval_pv() NEED_eval_pv NEED_eval_pv_GLOBAL grok_bin() NEED_grok_bin NEED_grok_bin_GLOBAL grok_hex() NEED_grok_hex NEED_grok_hex_GLOBAL grok_number() NEED_grok_number NEED_grok_number_GLOBAL grok_numeric_radix() NEED_grok_numeric_radix NEED_grok_numeric_radix_GLOBAL grok_oct() NEED_grok_oct NEED_grok_oct_GLOBAL newCONSTSUB() NEED_newCONSTSUB NEED_newCONSTSUB_GLOBAL newRV_noinc() NEED_newRV_noinc NEED_newRV_noinc_GLOBAL sv_2pv_nolen() NEED_sv_2pv_nolen NEED_sv_2pv_nolen_GLOBAL sv_2pvbyte() NEED_sv_2pvbyte NEED_sv_2pvbyte_GLOBAL sv_catpvf_mg() NEED_sv_catpvf_mg NEED_sv_catpvf_mg_GLOBAL sv_catpvf_mg_nocontext() NEED_sv_catpvf_mg_nocontext NEED_sv_catpvf_mg_nocontext_GLOBAL sv_setpvf_mg() NEED_sv_setpvf_mg NEED_sv_setpvf_mg_GLOBAL sv_setpvf_mg_nocontext() NEED_sv_setpvf_mg_nocontext NEED_sv_setpvf_mg_nocontext_GLOBAL vnewSVpvf() NEED_vnewSVpvf NEED_vnewSVpvf_GLOBAL To avoid namespace conflicts, you can change the namespace of the explicitly exported functions using the C macro. Just C<#define> the macro before including C: #define DPPP_NAMESPACE MyOwnNamespace_ #include "ppport.h" The default namespace is C. =back The good thing is that most of the above can be checked by running F on your source code. See the next section for details. =head1 EXAMPLES To verify whether F is needed for your module, whether you should make any changes to your code, and whether any special defines should be used, F can be run as a Perl script to check your source code. Simply say: perl ppport.h The result will usually be a list of patches suggesting changes that should at least be acceptable, if not necessarily the most efficient solution, or a fix for all possible problems. If you know that your XS module uses features only available in newer Perl releases, if you're aware that it uses C++ comments, and if you want all suggestions as a single patch file, you could use something like this: perl ppport.h --compat-version=5.6.0 --cplusplus --patch=test.diff If you only want your code to be scanned without any suggestions for changes, use: perl ppport.h --nochanges You can specify a different C program or options, using the C<--diff> option: perl ppport.h --diff='diff -C 10' This would output context diffs with 10 lines of context. To display portability information for the C function, use: perl ppport.h --api-info=newSVpvn Since the argument to C<--api-info> can be a regular expression, you can use perl ppport.h --api-info=/_nomg$/ to display portability information for all C<_nomg> functions or perl ppport.h --api-info=/./ to display information for all known API elements. =head1 BUGS If this version of F is causing failure during the compilation of this module, please check if newer versions of either this module or C are available on CPAN before sending a bug report. If F was generated using the latest version of C and is causing failure of this module, please file a bug report using the CPAN Request Tracker at L. Please include the following information: =over 4 =item 1. The complete output from running "perl -V" =item 2. This file. =item 3. The name and version of the module you were trying to build. =item 4. A full log of the build that failed. =item 5. Any other information that you think could be relevant. =back For the latest version of this code, please get the C module from CPAN. =head1 COPYRIGHT Version 3.x, Copyright (c) 2004-2005, Marcus Holland-Moritz. Version 2.x, Copyright (C) 2001, Paul Marquess. Version 1.x, Copyright (C) 1999, Kenneth Albanowski. This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself. =head1 SEE ALSO See L. =cut use strict; my %opt = ( quiet => 0, diag => 1, hints => 1, changes => 1, cplusplus => 0, filter => 1, ); my($ppport) = $0 =~ /([\w.]+)$/; my $LF = '(?:\r\n|[\r\n])'; # line feed my $HS = "[ \t]"; # horizontal whitespace eval { require Getopt::Long; Getopt::Long::GetOptions(\%opt, qw( help quiet diag! filter! hints! changes! cplusplus patch=s copy=s diff=s compat-version=s list-provided list-unsupported api-info=s )) or usage(); }; if ($@ and grep /^-/, @ARGV) { usage() if "@ARGV" =~ /^--?h(?:elp)?$/; die "Getopt::Long not found. Please don't use any options.\n"; } usage() if $opt{help}; if (exists $opt{'compat-version'}) { my($r,$v,$s) = eval { parse_version($opt{'compat-version'}) }; if ($@) { die "Invalid version number format: '$opt{'compat-version'}'\n"; } die "Only Perl 5 is supported\n" if $r != 5; die "Invalid version number: $opt{'compat-version'}\n" if $v >= 1000 || $s >= 1000; $opt{'compat-version'} = sprintf "%d.%03d%03d", $r, $v, $s; } else { $opt{'compat-version'} = 5; } # Never use C comments in this file!!!!! my $ccs = '/'.'*'; my $cce = '*'.'/'; my $rccs = quotemeta $ccs; my $rcce = quotemeta $cce; my %API = map { /^(\w+)\|([^|]*)\|([^|]*)\|(\w*)$/ ? ( $1 => { ($2 ? ( base => $2 ) : ()), ($3 ? ( todo => $3 ) : ()), (index($4, 'v') >= 0 ? ( varargs => 1 ) : ()), (index($4, 'p') >= 0 ? ( provided => 1 ) : ()), (index($4, 'n') >= 0 ? ( nothxarg => 1 ) : ()), } ) : die "invalid spec: $_" } qw( AvFILLp|5.004050||p AvFILL||| CLASS|||n CX_CURPAD_SAVE||| CX_CURPAD_SV||| CopFILEAV|5.006000||p CopFILEGV_set|5.006000||p CopFILEGV|5.006000||p CopFILESV|5.006000||p CopFILE_set|5.006000||p CopFILE|5.006000||p CopSTASHPV_set|5.006000||p CopSTASHPV|5.006000||p CopSTASH_eq|5.006000||p CopSTASH_set|5.006000||p CopSTASH|5.006000||p CopyD|5.009002||p Copy||| CvPADLIST||| CvSTASH||| CvWEAKOUTSIDE||| DEFSV|5.004050||p END_EXTERN_C|5.005000||p ENTER||| ERRSV|5.004050||p EXTEND||| EXTERN_C|5.005000||p FREETMPS||| GIMME_V||5.004000|n GIMME|||n GROK_NUMERIC_RADIX|5.007002||p G_ARRAY||| G_DISCARD||| G_EVAL||| G_NOARGS||| G_SCALAR||| G_VOID||5.004000| GetVars||| GvSV||| Gv_AMupdate||| HEf_SVKEY||5.004000| HeHASH||5.004000| HeKEY||5.004000| HeKLEN||5.004000| HePV||5.004000| HeSVKEY_force||5.004000| HeSVKEY_set||5.004000| HeSVKEY||5.004000| HeVAL||5.004000| HvNAME||| INT2PTR|5.006000||p IN_LOCALE_COMPILETIME|5.007002||p IN_LOCALE_RUNTIME|5.007002||p IN_LOCALE|5.007002||p IN_PERL_COMPILETIME|5.008001||p IS_NUMBER_GREATER_THAN_UV_MAX|5.007002||p IS_NUMBER_INFINITY|5.007002||p IS_NUMBER_IN_UV|5.007002||p IS_NUMBER_NAN|5.007003||p IS_NUMBER_NEG|5.007002||p IS_NUMBER_NOT_INT|5.007002||p IVSIZE|5.006000||p IVTYPE|5.006000||p IVdf|5.006000||p LEAVE||| LVRET||| MARK||| MY_CXT_CLONE|5.009002||p MY_CXT_INIT|5.007003||p MY_CXT|5.007003||p MoveD|5.009002||p Move||| NEWSV||| NOOP|5.005000||p NUM2PTR|5.006000||p NVTYPE|5.006000||p NVef|5.006001||p NVff|5.006001||p NVgf|5.006001||p Newc||| Newz||| New||| Nullav||| Nullch||| Nullcv||| Nullhv||| Nullsv||| ORIGMARK||| PAD_BASE_SV||| PAD_CLONE_VARS||| PAD_COMPNAME_FLAGS||| PAD_COMPNAME_GEN_set||| PAD_COMPNAME_GEN||| PAD_COMPNAME_OURSTASH||| PAD_COMPNAME_PV||| PAD_COMPNAME_TYPE||| PAD_RESTORE_LOCAL||| PAD_SAVE_LOCAL||| PAD_SAVE_SETNULLPAD||| PAD_SETSV||| PAD_SET_CUR_NOSAVE||| PAD_SET_CUR||| PAD_SVl||| PAD_SV||| PERL_BCDVERSION|5.009003||p PERL_GCC_BRACE_GROUPS_FORBIDDEN|5.008001||p PERL_INT_MAX|5.004000||p PERL_INT_MIN|5.004000||p PERL_LONG_MAX|5.004000||p PERL_LONG_MIN|5.004000||p PERL_MAGIC_arylen|5.007002||p PERL_MAGIC_backref|5.007002||p PERL_MAGIC_bm|5.007002||p PERL_MAGIC_collxfrm|5.007002||p PERL_MAGIC_dbfile|5.007002||p PERL_MAGIC_dbline|5.007002||p PERL_MAGIC_defelem|5.007002||p PERL_MAGIC_envelem|5.007002||p PERL_MAGIC_env|5.007002||p PERL_MAGIC_ext|5.007002||p PERL_MAGIC_fm|5.007002||p PERL_MAGIC_glob|5.007002||p PERL_MAGIC_isaelem|5.007002||p PERL_MAGIC_isa|5.007002||p PERL_MAGIC_mutex|5.007002||p PERL_MAGIC_nkeys|5.007002||p PERL_MAGIC_overload_elem|5.007002||p PERL_MAGIC_overload_table|5.007002||p PERL_MAGIC_overload|5.007002||p PERL_MAGIC_pos|5.007002||p PERL_MAGIC_qr|5.007002||p PERL_MAGIC_regdata|5.007002||p PERL_MAGIC_regdatum|5.007002||p PERL_MAGIC_regex_global|5.007002||p PERL_MAGIC_shared_scalar|5.007003||p PERL_MAGIC_shared|5.007003||p PERL_MAGIC_sigelem|5.007002||p PERL_MAGIC_sig|5.007002||p PERL_MAGIC_substr|5.007002||p PERL_MAGIC_sv|5.007002||p PERL_MAGIC_taint|5.007002||p PERL_MAGIC_tiedelem|5.007002||p PERL_MAGIC_tiedscalar|5.007002||p PERL_MAGIC_tied|5.007002||p PERL_MAGIC_utf8|5.008001||p PERL_MAGIC_uvar_elem|5.007003||p PERL_MAGIC_uvar|5.007002||p PERL_MAGIC_vec|5.007002||p PERL_MAGIC_vstring|5.008001||p PERL_QUAD_MAX|5.004000||p PERL_QUAD_MIN|5.004000||p PERL_REVISION|5.006000||p PERL_SCAN_ALLOW_UNDERSCORES|5.007003||p PERL_SCAN_DISALLOW_PREFIX|5.007003||p PERL_SCAN_GREATER_THAN_UV_MAX|5.007003||p PERL_SCAN_SILENT_ILLDIGIT|5.008001||p PERL_SHORT_MAX|5.004000||p PERL_SHORT_MIN|5.004000||p PERL_SUBVERSION|5.006000||p PERL_UCHAR_MAX|5.004000||p PERL_UCHAR_MIN|5.004000||p PERL_UINT_MAX|5.004000||p PERL_UINT_MIN|5.004000||p PERL_ULONG_MAX|5.004000||p PERL_ULONG_MIN|5.004000||p PERL_UNUSED_DECL|5.007002||p PERL_UQUAD_MAX|5.004000||p PERL_UQUAD_MIN|5.004000||p PERL_USHORT_MAX|5.004000||p PERL_USHORT_MIN|5.004000||p PERL_VERSION|5.006000||p PL_DBsingle|||pn PL_DBsub|||pn PL_DBtrace|||n PL_Sv|5.005000||p PL_compiling|5.004050||p PL_copline|5.005000||p PL_curcop|5.004050||p PL_curstash|5.004050||p PL_debstash|5.004050||p PL_defgv|5.004050||p PL_diehook|5.004050||p PL_dirty|5.004050||p PL_dowarn|||pn PL_errgv|5.004050||p PL_hexdigit|5.005000||p PL_hints|5.005000||p PL_last_in_gv|||n PL_modglobal||5.005000|n PL_na|5.004050||pn PL_no_modify|5.006000||p PL_ofs_sv|||n PL_perl_destruct_level|5.004050||p PL_perldb|5.004050||p PL_ppaddr|5.006000||p PL_rsfp_filters|5.004050||p PL_rsfp|5.004050||p PL_rs|||n PL_stack_base|5.004050||p PL_stack_sp|5.004050||p PL_stdingv|5.004050||p PL_sv_arenaroot|5.004050||p PL_sv_no|5.004050||pn PL_sv_undef|5.004050||pn PL_sv_yes|5.004050||pn PL_tainted|5.004050||p PL_tainting|5.004050||p POPi|||n POPl|||n POPn|||n POPpbytex||5.007001|n POPpx||5.005030|n POPp|||n POPs|||n PTR2IV|5.006000||p PTR2NV|5.006000||p PTR2UV|5.006000||p PTR2ul|5.007001||p PTRV|5.006000||p PUSHMARK||| PUSHi||| PUSHmortal|5.009002||p PUSHn||| PUSHp||| PUSHs||| PUSHu|5.004000||p PUTBACK||| PerlIO_clearerr||5.007003| PerlIO_close||5.007003| PerlIO_eof||5.007003| PerlIO_error||5.007003| PerlIO_fileno||5.007003| PerlIO_fill||5.007003| PerlIO_flush||5.007003| PerlIO_get_base||5.007003| PerlIO_get_bufsiz||5.007003| PerlIO_get_cnt||5.007003| PerlIO_get_ptr||5.007003| PerlIO_read||5.007003| PerlIO_seek||5.007003| PerlIO_set_cnt||5.007003| PerlIO_set_ptrcnt||5.007003| PerlIO_setlinebuf||5.007003| PerlIO_stderr||5.007003| PerlIO_stdin||5.007003| PerlIO_stdout||5.007003| PerlIO_tell||5.007003| PerlIO_unread||5.007003| PerlIO_write||5.007003| Poison|5.008000||p RETVAL|||n Renewc||| Renew||| SAVECLEARSV||| SAVECOMPPAD||| SAVEPADSV||| SAVETMPS||| SAVE_DEFSV|5.004050||p SPAGAIN||| SP||| START_EXTERN_C|5.005000||p START_MY_CXT|5.007003||p STMT_END|||p STMT_START|||p ST||| SVt_IV||| SVt_NV||| SVt_PVAV||| SVt_PVCV||| SVt_PVHV||| SVt_PVMG||| SVt_PV||| Safefree||| Slab_Alloc||| Slab_Free||| StructCopy||| SvCUR_set||| SvCUR||| SvEND||| SvGETMAGIC|5.004050||p SvGROW||| SvIOK_UV||5.006000| SvIOK_notUV||5.006000| SvIOK_off||| SvIOK_only_UV||5.006000| SvIOK_only||| SvIOK_on||| SvIOKp||| SvIOK||| SvIVX||| SvIV_nomg|5.009001||p SvIV_set||| SvIVx||| SvIV||| SvIsCOW_shared_hash||5.008003| SvIsCOW||5.008003| SvLEN_set||| SvLEN||| SvLOCK||5.007003| SvMAGIC_set||5.009003| SvNIOK_off||| SvNIOKp||| SvNIOK||| SvNOK_off||| SvNOK_only||| SvNOK_on||| SvNOKp||| SvNOK||| SvNVX||| SvNV_set||| SvNVx||| SvNV||| SvOK||| SvOOK||| SvPOK_off||| SvPOK_only_UTF8||5.006000| SvPOK_only||| SvPOK_on||| SvPOKp||| SvPOK||| SvPVX||| SvPV_force_nomg|5.007002||p SvPV_force||| SvPV_nolen|5.006000||p SvPV_nomg|5.007002||p SvPV_set||| SvPVbyte_force||5.009002| SvPVbyte_nolen||5.006000| SvPVbytex_force||5.006000| SvPVbytex||5.006000| SvPVbyte|5.006000||p SvPVutf8_force||5.006000| SvPVutf8_nolen||5.006000| SvPVutf8x_force||5.006000| SvPVutf8x||5.006000| SvPVutf8||5.006000| SvPVx||| SvPV||| SvREFCNT_dec||| SvREFCNT_inc||| SvREFCNT||| SvROK_off||| SvROK_on||| SvROK||| SvRV_set||5.009003| SvRV||| SvSETMAGIC||| SvSHARE||5.007003| SvSTASH_set||5.009003| SvSTASH||| SvSetMagicSV_nosteal||5.004000| SvSetMagicSV||5.004000| SvSetSV_nosteal||5.004000| SvSetSV||| SvTAINTED_off||5.004000| SvTAINTED_on||5.004000| SvTAINTED||5.004000| SvTAINT||| SvTRUE||| SvTYPE||| SvUNLOCK||5.007003| SvUOK||5.007001| SvUPGRADE||| SvUTF8_off||5.006000| SvUTF8_on||5.006000| SvUTF8||5.006000| SvUVXx|5.004000||p SvUVX|5.004000||p SvUV_nomg|5.009001||p SvUV_set||5.009003| SvUVx|5.004000||p SvUV|5.004000||p SvVOK||5.008001| THIS|||n UNDERBAR|5.009002||p UVSIZE|5.006000||p UVTYPE|5.006000||p UVXf|5.007001||p UVof|5.006000||p UVuf|5.006000||p UVxf|5.006000||p XCPT_CATCH|5.009002||p XCPT_RETHROW|5.009002||p XCPT_TRY_END|5.009002||p XCPT_TRY_START|5.009002||p XPUSHi||| XPUSHmortal|5.009002||p XPUSHn||| XPUSHp||| XPUSHs||| XPUSHu|5.004000||p XSRETURN_EMPTY||| XSRETURN_IV||| XSRETURN_NO||| XSRETURN_NV||| XSRETURN_PV||| XSRETURN_UNDEF||| XSRETURN_UV|5.008001||p XSRETURN_YES||| XSRETURN||| XST_mIV||| XST_mNO||| XST_mNV||| XST_mPV||| XST_mUNDEF||| XST_mUV|5.008001||p XST_mYES||| XS_VERSION_BOOTCHECK||| XS_VERSION||| XS||| ZeroD|5.009002||p Zero||| _aMY_CXT|5.007003||p _pMY_CXT|5.007003||p aMY_CXT_|5.007003||p aMY_CXT|5.007003||p aTHX_|5.006000||p aTHX|5.006000||p add_data||| allocmy||| amagic_call||| any_dup||| ao||| append_elem||| append_list||| apply_attrs_my||| apply_attrs_string||5.006001| apply_attrs||| apply||| asIV||| asUV||| atfork_lock||5.007003|n atfork_unlock||5.007003|n av_arylen_p||5.009003| av_clear||| av_delete||5.006000| av_exists||5.006000| av_extend||| av_fake||| av_fetch||| av_fill||| av_len||| av_make||| av_pop||| av_push||| av_reify||| av_shift||| av_store||| av_undef||| av_unshift||| ax|||n bad_type||| bind_match||| block_end||| block_gimme||5.004000| block_start||| boolSV|5.004000||p boot_core_PerlIO||| boot_core_UNIVERSAL||| boot_core_xsutils||| bytes_from_utf8||5.007001| bytes_to_utf8||5.006001| cache_re||| call_argv|5.006000||p call_atexit||5.006000| call_body||| call_list_body||| call_list||5.004000| call_method|5.006000||p call_pv|5.006000||p call_sv|5.006000||p calloc||5.007002|n cando||| cast_i32||5.006000| cast_iv||5.006000| cast_ulong||5.006000| cast_uv||5.006000| check_uni||| checkcomma||| checkposixcc||| ck_anoncode||| ck_bitop||| ck_concat||| ck_defined||| ck_delete||| ck_die||| ck_eof||| ck_eval||| ck_exec||| ck_exists||| ck_exit||| ck_ftst||| ck_fun||| ck_glob||| ck_grep||| ck_index||| ck_join||| ck_lengthconst||| ck_lfun||| ck_listiob||| ck_match||| ck_method||| ck_null||| ck_open||| ck_repeat||| ck_require||| ck_retarget||| ck_return||| ck_rfun||| ck_rvconst||| ck_sassign||| ck_select||| ck_shift||| ck_sort||| ck_spair||| ck_split||| ck_subr||| ck_substr||| ck_svconst||| ck_trunc||| ck_unpack||| cl_and||| cl_anything||| cl_init_zero||| cl_init||| cl_is_anything||| cl_or||| closest_cop||| convert||| cop_free||| cr_textfilter||| croak_nocontext|||vn croak|||v csighandler||5.007001|n custom_op_desc||5.007003| custom_op_name||5.007003| cv_ckproto||| cv_clone||| cv_const_sv||5.004000| cv_dump||| cv_undef||| cx_dump||5.005000| cx_dup||| cxinc||| dAXMARK||5.009003| dAX|5.007002||p dITEMS|5.007002||p dMARK||| dMY_CXT_SV|5.007003||p dMY_CXT|5.007003||p dNOOP|5.006000||p dORIGMARK||| dSP||| dTHR|5.004050||p dTHXa|5.006000||p dTHXoa|5.006000||p dTHX|5.006000||p dUNDERBAR|5.009002||p dXCPT|5.009002||p dXSARGS||| dXSI32||| dXSTARG|5.006000||p deb_curcv||| deb_nocontext|||vn deb_stack_all||| deb_stack_n||| debop||5.005000| debprofdump||5.005000| debprof||| debstackptrs||5.007003| debstack||5.007003| deb||5.007003|v del_he||| del_sv||| delimcpy||5.004000| depcom||| deprecate_old||| deprecate||| despatch_signals||5.007001| die_nocontext|||vn die_where||| die|||v dirp_dup||| div128||| djSP||| do_aexec5||| do_aexec||| do_aspawn||| do_binmode||5.004050| do_chomp||| do_chop||| do_close||| do_dump_pad||| do_eof||| do_exec3||| do_execfree||| do_exec||| do_gv_dump||5.006000| do_gvgv_dump||5.006000| do_hv_dump||5.006000| do_ipcctl||| do_ipcget||| do_join||| do_kv||| do_magic_dump||5.006000| do_msgrcv||| do_msgsnd||| do_oddball||| do_op_dump||5.006000| do_open9||5.006000| do_openn||5.007001| do_open||5.004000| do_pipe||| do_pmop_dump||5.006000| do_print||| do_readline||| do_seek||| do_semop||| do_shmio||| do_spawn_nowait||| do_spawn||| do_sprintf||| do_sv_dump||5.006000| do_sysseek||| do_tell||| do_trans_complex_utf8||| do_trans_complex||| do_trans_count_utf8||| do_trans_count||| do_trans_simple_utf8||| do_trans_simple||| do_trans||| do_vecget||| do_vecset||| do_vop||| docatch_body||| docatch||| doeval||| dofile||| dofindlabel||| doform||| doing_taint||5.008001|n dooneliner||| doopen_pm||| doparseform||| dopoptoeval||| dopoptolabel||| dopoptoloop||| dopoptosub_at||| dopoptosub||| dounwind||| dowantarray||| dump_all||5.006000| dump_eval||5.006000| dump_fds||| dump_form||5.006000| dump_indent||5.006000|v dump_mstats||| dump_packsubs||5.006000| dump_sub||5.006000| dump_vindent||5.006000| dumpuntil||| dup_attrlist||| emulate_eaccess||| eval_pv|5.006000||p eval_sv|5.006000||p expect_number||| fbm_compile||5.005000| fbm_instr||5.005000| fd_on_nosuid_fs||| filter_add||| filter_del||| filter_gets||| filter_read||| find_beginning||| find_byclass||| find_in_my_stash||| find_runcv||| find_rundefsvoffset||5.009002| find_script||| find_uninit_var||| fold_constants||| forbid_setid||| force_ident||| force_list||| force_next||| force_version||| force_word||| form_nocontext|||vn form||5.004000|v fp_dup||| fprintf_nocontext|||vn free_global_struct||| free_tied_hv_pool||| free_tmps||| gen_constant_list||| get_av|5.006000||p get_context||5.006000|n get_cv|5.006000||p get_db_sub||| get_debug_opts||| get_hash_seed||| get_hv|5.006000||p get_mstats||| get_no_modify||| get_num||| get_op_descs||5.005000| get_op_names||5.005000| get_opargs||| get_ppaddr||5.006000| get_sv|5.006000||p get_vtbl||5.005030| getcwd_sv||5.007002| getenv_len||| gp_dup||| gp_free||| gp_ref||| grok_bin|5.007003||p grok_hex|5.007003||p grok_number|5.007002||p grok_numeric_radix|5.007002||p grok_oct|5.007003||p group_end||| gv_AVadd||| gv_HVadd||| gv_IOadd||| gv_autoload4||5.004000| gv_check||| gv_dump||5.006000| gv_efullname3||5.004000| gv_efullname4||5.006001| gv_efullname||| gv_ename||| gv_fetchfile||| gv_fetchmeth_autoload||5.007003| gv_fetchmethod_autoload||5.004000| gv_fetchmethod||| gv_fetchmeth||| gv_fetchpvn_flags||5.009002| gv_fetchpv||| gv_fetchsv||5.009002| gv_fullname3||5.004000| gv_fullname4||5.006001| gv_fullname||| gv_handler||5.007001| gv_init_sv||| gv_init||| gv_share||| gv_stashpvn|5.006000||p gv_stashpv||| gv_stashsv||| he_dup||| hek_dup||| hfreeentries||| hsplit||| hv_assert||5.009001| hv_auxinit||| hv_clear_placeholders||5.009001| hv_clear||| hv_delayfree_ent||5.004000| hv_delete_common||| hv_delete_ent||5.004000| hv_delete||| hv_eiter_p||5.009003| hv_eiter_set||5.009003| hv_exists_ent||5.004000| hv_exists||| hv_fetch_common||| hv_fetch_ent||5.004000| hv_fetch||| hv_free_ent||5.004000| hv_iterinit||| hv_iterkeysv||5.004000| hv_iterkey||| hv_iternext_flags||5.008000| hv_iternextsv||| hv_iternext||| hv_iterval||| hv_ksplit||5.004000| hv_magic_check||| hv_magic||| hv_name_set||5.009003| hv_notallowed||| hv_placeholders_get||5.009003| hv_placeholders_p||5.009003| hv_placeholders_set||5.009003| hv_riter_p||5.009003| hv_riter_set||5.009003| hv_scalar||5.009001| hv_store_ent||5.004000| hv_store_flags||5.008000| hv_store||| hv_undef||| ibcmp_locale||5.004000| ibcmp_utf8||5.007003| ibcmp||| incl_perldb||| incline||| incpush||| ingroup||| init_argv_symbols||| init_debugger||| init_global_struct||| init_i18nl10n||5.006000| init_i18nl14n||5.006000| init_ids||| init_interp||| init_lexer||| init_main_stash||| init_perllib||| init_postdump_symbols||| init_predump_symbols||| init_stacks||5.005000| init_tm||5.007002| instr||| intro_my||| intuit_method||| intuit_more||| invert||| io_close||| isALNUM||| isALPHA||| isDIGIT||| isLOWER||| isSPACE||| isUPPER||| is_an_int||| is_gv_magical_sv||| is_gv_magical||| is_handle_constructor||| is_list_assignment||| is_lvalue_sub||5.007001| is_uni_alnum_lc||5.006000| is_uni_alnumc_lc||5.006000| is_uni_alnumc||5.006000| is_uni_alnum||5.006000| is_uni_alpha_lc||5.006000| is_uni_alpha||5.006000| is_uni_ascii_lc||5.006000| is_uni_ascii||5.006000| is_uni_cntrl_lc||5.006000| is_uni_cntrl||5.006000| is_uni_digit_lc||5.006000| is_uni_digit||5.006000| is_uni_graph_lc||5.006000| is_uni_graph||5.006000| is_uni_idfirst_lc||5.006000| is_uni_idfirst||5.006000| is_uni_lower_lc||5.006000| is_uni_lower||5.006000| is_uni_print_lc||5.006000| is_uni_print||5.006000| is_uni_punct_lc||5.006000| is_uni_punct||5.006000| is_uni_space_lc||5.006000| is_uni_space||5.006000| is_uni_upper_lc||5.006000| is_uni_upper||5.006000| is_uni_xdigit_lc||5.006000| is_uni_xdigit||5.006000| is_utf8_alnumc||5.006000| is_utf8_alnum||5.006000| is_utf8_alpha||5.006000| is_utf8_ascii||5.006000| is_utf8_char_slow||| is_utf8_char||5.006000| is_utf8_cntrl||5.006000| is_utf8_digit||5.006000| is_utf8_graph||5.006000| is_utf8_idcont||5.008000| is_utf8_idfirst||5.006000| is_utf8_lower||5.006000| is_utf8_mark||5.006000| is_utf8_print||5.006000| is_utf8_punct||5.006000| is_utf8_space||5.006000| is_utf8_string_loclen||5.009003| is_utf8_string_loc||5.008001| is_utf8_string||5.006001| is_utf8_upper||5.006000| is_utf8_xdigit||5.006000| isa_lookup||| items|||n ix|||n jmaybe||| keyword||| leave_scope||| lex_end||| lex_start||| linklist||| listkids||| list||| load_module_nocontext|||vn load_module||5.006000|v localize||| looks_like_number||| lop||| mPUSHi|5.009002||p mPUSHn|5.009002||p mPUSHp|5.009002||p mPUSHu|5.009002||p mXPUSHi|5.009002||p mXPUSHn|5.009002||p mXPUSHp|5.009002||p mXPUSHu|5.009002||p magic_clear_all_env||| magic_clearenv||| magic_clearpack||| magic_clearsig||| magic_dump||5.006000| magic_existspack||| magic_freearylen_p||| magic_freeovrld||| magic_freeregexp||| magic_getarylen||| magic_getdefelem||| magic_getglob||| magic_getnkeys||| magic_getpack||| magic_getpos||| magic_getsig||| magic_getsubstr||| magic_gettaint||| magic_getuvar||| magic_getvec||| magic_get||| magic_killbackrefs||| magic_len||| magic_methcall||| magic_methpack||| magic_nextpack||| magic_regdata_cnt||| magic_regdatum_get||| magic_regdatum_set||| magic_scalarpack||| magic_set_all_env||| magic_setamagic||| magic_setarylen||| magic_setbm||| magic_setcollxfrm||| magic_setdbline||| magic_setdefelem||| magic_setenv||| magic_setfm||| magic_setglob||| magic_setisa||| magic_setmglob||| magic_setnkeys||| magic_setpack||| magic_setpos||| magic_setregexp||| magic_setsig||| magic_setsubstr||| magic_settaint||| magic_setutf8||| magic_setuvar||| magic_setvec||| magic_set||| magic_sizepack||| magic_wipepack||| magicname||| make_trie||| malloced_size|||n malloc||5.007002|n markstack_grow||| measure_struct||| memEQ|5.004000||p memNE|5.004000||p mem_collxfrm||| mess_alloc||| mess_nocontext|||vn mess||5.006000|v method_common||| mfree||5.007002|n mg_clear||| mg_copy||| mg_dup||| mg_find||| mg_free||| mg_get||| mg_length||5.005000| mg_localize||| mg_magical||| mg_set||| mg_size||5.005000| mini_mktime||5.007002| missingterm||| mode_from_discipline||| modkids||| mod||| moreswitches||| mul128||| mulexp10|||n my_atof2||5.007002| my_atof||5.006000| my_attrs||| my_bcopy|||n my_betoh16|||n my_betoh32|||n my_betoh64|||n my_betohi|||n my_betohl|||n my_betohs|||n my_bzero|||n my_chsize||| my_exit_jump||| my_exit||| my_failure_exit||5.004000| my_fflush_all||5.006000| my_fork||5.007003|n my_htobe16|||n my_htobe32|||n my_htobe64|||n my_htobei|||n my_htobel|||n my_htobes|||n my_htole16|||n my_htole32|||n my_htole64|||n my_htolei|||n my_htolel|||n my_htoles|||n my_htonl||| my_kid||| my_letoh16|||n my_letoh32|||n my_letoh64|||n my_letohi|||n my_letohl|||n my_letohs|||n my_lstat||| my_memcmp||5.004000|n my_memset|||n my_ntohl||| my_pclose||5.004000| my_popen_list||5.007001| my_popen||5.004000| my_setenv||| my_socketpair||5.007003|n my_stat||| my_strftime||5.007002| my_swabn|||n my_swap||| my_unexec||| my||| newANONATTRSUB||5.006000| newANONHASH||| newANONLIST||| newANONSUB||| newASSIGNOP||| newATTRSUB||5.006000| newAVREF||| newAV||| newBINOP||| newCONDOP||| newCONSTSUB|5.006000||p newCVREF||| newDEFSVOP||| newFORM||| newFOROP||| newGVOP||| newGVREF||| newGVgen||| newHVREF||| newHVhv||5.005000| newHV||| newIO||| newLISTOP||| newLOGOP||| newLOOPEX||| newLOOPOP||| newMYSUB||5.006000| newNULLLIST||| newOP||| newPADOP||5.006000| newPMOP||| newPROG||| newPVOP||| newRANGE||| newRV_inc|5.004000||p newRV_noinc|5.006000||p newRV||| newSLICEOP||| newSTATEOP||| newSUB||| newSVOP||| newSVREF||| newSVhek||5.009003| newSViv||| newSVnv||| newSVpvf_nocontext|||vn newSVpvf||5.004000|v newSVpvn_share||5.007001| newSVpvn|5.006000||p newSVpv||| newSVrv||| newSVsv||| newSVuv|5.006000||p newSV||| newUNOP||| newWHILEOP||5.009003| newXSproto||5.006000| newXS||5.006000| new_collate||5.006000| new_constant||| new_ctype||5.006000| new_he||| new_logop||| new_numeric||5.006000| new_stackinfo||5.005000| new_version||5.009000| next_symbol||| nextargv||| nextchar||| ninstr||| no_bareword_allowed||| no_fh_allowed||| no_op||| not_a_number||| nothreadhook||5.008000| nuke_stacks||| num_overflow|||n oopsAV||| oopsCV||| oopsHV||| op_clear||| op_const_sv||| op_dump||5.006000| op_free||| op_null||5.007002| op_refcnt_lock||5.009002| op_refcnt_unlock||5.009002| open_script||| pMY_CXT_|5.007003||p pMY_CXT|5.007003||p pTHX_|5.006000||p pTHX|5.006000||p pack_cat||5.007003| pack_rec||| package||| packlist||5.008001| pad_add_anon||| pad_add_name||| pad_alloc||| pad_block_start||| pad_check_dup||| pad_compname_type||| pad_findlex||| pad_findmy||| pad_fixup_inner_anons||| pad_free||| pad_leavemy||| pad_new||| pad_push||| pad_reset||| pad_setsv||| pad_sv||| pad_swipe||| pad_tidy||| pad_undef||| parse_body||| parse_unicode_opts||| path_is_absolute||| peep||| pending_ident||| perl_alloc_using|||n perl_alloc|||n perl_clone_using|||n perl_clone|||n perl_construct|||n perl_destruct||5.007003|n perl_free|||n perl_parse||5.006000|n perl_run|||n pidgone||| pmflag||| pmop_dump||5.006000| pmruntime||| pmtrans||| pop_scope||| pregcomp||| pregexec||| pregfree||| prepend_elem||| printf_nocontext|||vn ptr_table_clear||| ptr_table_fetch||| ptr_table_free||| ptr_table_new||| ptr_table_split||| ptr_table_store||| push_scope||| put_byte||| pv_display||5.006000| pv_uni_display||5.007003| qerror||| re_croak2||| re_dup||| re_intuit_start||5.006000| re_intuit_string||5.006000| realloc||5.007002|n reentrant_free||| reentrant_init||| reentrant_retry|||vn reentrant_size||| refkids||| refto||| ref||| reg_node||| reganode||| regatom||| regbranch||| regclass_swash||5.007003| regclass||| regcp_set_to||| regcppop||| regcppush||| regcurly||| regdump||5.005000| regexec_flags||5.005000| reghop3||| reghopmaybe3||| reghopmaybe||| reghop||| reginclass||| reginitcolors||5.006000| reginsert||| regmatch||| regnext||5.005000| regoptail||| regpiece||| regpposixcc||| regprop||| regrepeat_hard||| regrepeat||| regtail||| regtry||| reguni||| regwhite||| reg||| repeatcpy||| report_evil_fh||| report_uninit||| require_errno||| require_pv||5.006000| rninstr||| rsignal_restore||| rsignal_save||| rsignal_state||5.004000| rsignal||5.004000| run_body||| runops_debug||5.005000| runops_standard||5.005000| rvpv_dup||| rxres_free||| rxres_restore||| rxres_save||| safesyscalloc||5.006000|n safesysfree||5.006000|n safesysmalloc||5.006000|n safesysrealloc||5.006000|n same_dirent||| save_I16||5.004000| save_I32||| save_I8||5.006000| save_aelem||5.004050| save_alloc||5.006000| save_aptr||| save_ary||| save_bool||5.008001| save_clearsv||| save_delete||| save_destructor_x||5.006000| save_destructor||5.006000| save_freeop||| save_freepv||| save_freesv||| save_generic_pvref||5.006001| save_generic_svref||5.005030| save_gp||5.004000| save_hash||| save_hek_flags||| save_helem||5.004050| save_hints||5.005000| save_hptr||| save_int||| save_item||| save_iv||5.005000| save_lines||| save_list||| save_long||| save_magic||| save_mortalizesv||5.007001| save_nogv||| save_op||| save_padsv||5.007001| save_pptr||| save_re_context||5.006000| save_scalar_at||| save_scalar||| save_set_svflags||5.009000| save_shared_pvref||5.007003| save_sptr||| save_svref||| save_threadsv||5.005000| save_vptr||5.006000| savepvn||| savepv||| savesharedpv||5.007003| savestack_grow_cnt||5.008001| savestack_grow||| savesvpv||5.009002| sawparens||| scalar_mod_type||| scalarboolean||| scalarkids||| scalarseq||| scalarvoid||| scalar||| scan_bin||5.006000| scan_commit||| scan_const||| scan_formline||| scan_heredoc||| scan_hex||| scan_ident||| scan_inputsymbol||| scan_num||5.007001| scan_oct||| scan_pat||| scan_str||| scan_subst||| scan_trans||| scan_version||5.009001| scan_vstring||5.008001| scan_word||| scope||| screaminstr||5.005000| seed||| set_context||5.006000|n set_csh||| set_numeric_local||5.006000| set_numeric_radix||5.006000| set_numeric_standard||5.006000| setdefout||| setenv_getix||| share_hek_flags||| share_hek||| si_dup||| sighandler|||n simplify_sort||| skipspace||| sortsv||5.007003| ss_dup||| stack_grow||| start_glob||| start_subparse||5.004000| stashpv_hvname_match||5.009003| stdize_locale||| strEQ||| strGE||| strGT||| strLE||| strLT||| strNE||| str_to_version||5.006000| strnEQ||| strnNE||| study_chunk||| sub_crush_depth||| sublex_done||| sublex_push||| sublex_start||| sv_2bool||| sv_2cv||| sv_2io||| sv_2iuv_non_preserve||| sv_2iv_flags||5.009001| sv_2iv||| sv_2mortal||| sv_2nv||| sv_2pv_flags||5.007002| sv_2pv_nolen|5.006000||p sv_2pvbyte_nolen||| sv_2pvbyte|5.006000||p sv_2pvutf8_nolen||5.006000| sv_2pvutf8||5.006000| sv_2pv||| sv_2uv_flags||5.009001| sv_2uv|5.004000||p sv_add_arena||| sv_add_backref||| sv_backoff||| sv_bless||| sv_cat_decode||5.008001| sv_catpv_mg|5.006000||p sv_catpvf_mg_nocontext|||pvn sv_catpvf_mg|5.006000|5.004000|pv sv_catpvf_nocontext|||vn sv_catpvf||5.004000|v sv_catpvn_flags||5.007002| sv_catpvn_mg|5.006000||p sv_catpvn_nomg|5.007002||p sv_catpvn||| sv_catpv||| sv_catsv_flags||5.007002| sv_catsv_mg|5.006000||p sv_catsv_nomg|5.007002||p sv_catsv||| sv_chop||| sv_clean_all||| sv_clean_objs||| sv_clear||| sv_cmp_locale||5.004000| sv_cmp||| sv_collxfrm||| sv_compile_2op||5.008001| sv_copypv||5.007003| sv_dec||| sv_del_backref||| sv_derived_from||5.004000| sv_dump||| sv_dup||| sv_eq||| sv_force_normal_flags||5.007001| sv_force_normal||5.006000| sv_free2||| sv_free_arenas||| sv_free||| sv_gets||5.004000| sv_grow||| sv_inc||| sv_insert||| sv_isa||| sv_isobject||| sv_iv||5.005000| sv_len_utf8||5.006000| sv_len||| sv_magicext||5.007003| sv_magic||| sv_mortalcopy||| sv_newmortal||| sv_newref||| sv_nolocking||5.007003| sv_nosharing||5.007003| sv_nounlocking||5.007003| sv_nv||5.005000| sv_peek||5.005000| sv_pos_b2u||5.006000| sv_pos_u2b||5.006000| sv_pvbyten_force||5.006000| sv_pvbyten||5.006000| sv_pvbyte||5.006000| sv_pvn_force_flags||5.007002| sv_pvn_force|||p sv_pvn_nomg|5.007003||p sv_pvn|5.006000||p sv_pvutf8n_force||5.006000| sv_pvutf8n||5.006000| sv_pvutf8||5.006000| sv_pv||5.006000| sv_recode_to_utf8||5.007003| sv_reftype||| sv_release_COW||| sv_release_IVX||| sv_replace||| sv_report_used||| sv_reset||| sv_rvweaken||5.006000| sv_setiv_mg|5.006000||p sv_setiv||| sv_setnv_mg|5.006000||p sv_setnv||| sv_setpv_mg|5.006000||p sv_setpvf_mg_nocontext|||pvn sv_setpvf_mg|5.006000|5.004000|pv sv_setpvf_nocontext|||vn sv_setpvf||5.004000|v sv_setpviv_mg||5.008001| sv_setpviv||5.008001| sv_setpvn_mg|5.006000||p sv_setpvn||| sv_setpv||| sv_setref_iv||| sv_setref_nv||| sv_setref_pvn||| sv_setref_pv||| sv_setref_uv||5.007001| sv_setsv_cow||| sv_setsv_flags||5.007002| sv_setsv_mg|5.006000||p sv_setsv_nomg|5.007002||p sv_setsv||| sv_setuv_mg|5.006000||p sv_setuv|5.006000||p sv_tainted||5.004000| sv_taint||5.004000| sv_true||5.005000| sv_unglob||| sv_uni_display||5.007003| sv_unmagic||| sv_unref_flags||5.007001| sv_unref||| sv_untaint||5.004000| sv_upgrade||| sv_usepvn_mg|5.006000||p sv_usepvn||| sv_utf8_decode||5.006000| sv_utf8_downgrade||5.006000| sv_utf8_encode||5.006000| sv_utf8_upgrade_flags||5.007002| sv_utf8_upgrade||5.007001| sv_uv|5.006000||p sv_vcatpvf_mg|5.006000|5.004000|p sv_vcatpvfn||5.004000| sv_vcatpvf|5.006000|5.004000|p sv_vsetpvf_mg|5.006000|5.004000|p sv_vsetpvfn||5.004000| sv_vsetpvf|5.006000|5.004000|p svtype||| swallow_bom||| swash_fetch||5.007002| swash_init||5.006000| sys_intern_clear||| sys_intern_dup||| sys_intern_init||| taint_env||| taint_proper||| tmps_grow||5.006000| toLOWER||| toUPPER||| to_byte_substr||| to_uni_fold||5.007003| to_uni_lower_lc||5.006000| to_uni_lower||5.007003| to_uni_title_lc||5.006000| to_uni_title||5.007003| to_uni_upper_lc||5.006000| to_uni_upper||5.007003| to_utf8_case||5.007003| to_utf8_fold||5.007003| to_utf8_lower||5.007003| to_utf8_substr||| to_utf8_title||5.007003| to_utf8_upper||5.007003| tokeq||| tokereport||| too_few_arguments||| too_many_arguments||| unlnk||| unpack_rec||| unpack_str||5.007003| unpackstring||5.008001| unshare_hek_or_pvn||| unshare_hek||| unsharepvn||5.004000| upg_version||5.009000| usage||| utf16_textfilter||| utf16_to_utf8_reversed||5.006001| utf16_to_utf8||5.006001| utf16rev_textfilter||| utf8_distance||5.006000| utf8_hop||5.006000| utf8_length||5.007001| utf8_mg_pos_init||| utf8_mg_pos||| utf8_to_bytes||5.006001| utf8_to_uvchr||5.007001| utf8_to_uvuni||5.007001| utf8n_to_uvchr||5.007001| utf8n_to_uvuni||5.007001| utilize||| uvchr_to_utf8_flags||5.007003| uvchr_to_utf8||5.007001| uvuni_to_utf8_flags||5.007003| uvuni_to_utf8||5.007001| validate_suid||| varname||| vcmp||5.009000| vcroak||5.006000| vdeb||5.007003| vdie||| vform||5.006000| visit||| vivify_defelem||| vivify_ref||| vload_module||5.006000| vmess||5.006000| vnewSVpvf|5.006000|5.004000|p vnormal||5.009002| vnumify||5.009000| vstringify||5.009000| vwarner||5.006000| vwarn||5.006000| wait4pid||| warn_nocontext|||vn warner_nocontext|||vn warner||5.006000|v warn|||v watch||| whichsig||| write_to_stderr||| yyerror||| yylex||| yyparse||| yywarn||| ); if (exists $opt{'list-unsupported'}) { my $f; for $f (sort { lc $a cmp lc $b } keys %API) { next unless $API{$f}{todo}; print "$f ", '.'x(40-length($f)), " ", format_version($API{$f}{todo}), "\n"; } exit 0; } # Scan for possible replacement candidates my(%replace, %need, %hints, %depends); my $replace = 0; my $hint = ''; while () { if ($hint) { if (m{^\s*\*\s(.*?)\s*$}) { $hints{$hint} ||= ''; # suppress warning with older perls $hints{$hint} .= "$1\n"; } else { $hint = ''; } } $hint = $1 if m{^\s*$rccs\sHint:\s+(\w+)\s*$}; $replace = $1 if m{^\s*$rccs\s+Replace:\s+(\d+)\s+$rcce\s*$}; $replace{$2} = $1 if $replace and m{^\s*#\s*define\s+(\w+)(?:\([^)]*\))?\s+(\w+)}; $replace{$2} = $1 if m{^\s*#\s*define\s+(\w+)(?:\([^)]*\))?\s+(\w+).*$rccs\s+Replace\s+$rcce}; $replace{$1} = $2 if m{^\s*$rccs\s+Replace (\w+) with (\w+)\s+$rcce\s*$}; if (m{^\s*$rccs\s+(\w+)\s+depends\s+on\s+(\w+(\s*,\s*\w+)*)\s+$rcce\s*$}) { push @{$depends{$1}}, map { s/\s+//g; $_ } split /,/, $2; } $need{$1} = 1 if m{^#if\s+defined\(NEED_(\w+)(?:_GLOBAL)?\)}; } if (exists $opt{'api-info'}) { my $f; my $count = 0; my $match = $opt{'api-info'} =~ m!^/(.*)/$! ? $1 : "^\Q$opt{'api-info'}\E\$"; for $f (sort { lc $a cmp lc $b } keys %API) { next unless $f =~ /$match/; print "\n=== $f ===\n\n"; my $info = 0; if ($API{$f}{base} || $API{$f}{todo}) { my $base = format_version($API{$f}{base} || $API{$f}{todo}); print "Supported at least starting from perl-$base.\n"; $info++; } if ($API{$f}{provided}) { my $todo = $API{$f}{todo} ? format_version($API{$f}{todo}) : "5.003"; print "Support by $ppport provided back to perl-$todo.\n"; print "Support needs to be explicitly requested by NEED_$f.\n" if exists $need{$f}; print "Depends on: ", join(', ', @{$depends{$f}}), ".\n" if exists $depends{$f}; print "$hints{$f}" if exists $hints{$f}; $info++; } unless ($info) { print "No portability information available.\n"; } $count++; } if ($count > 0) { print "\n"; } else { print "Found no API matching '$opt{'api-info'}'.\n"; } exit 0; } if (exists $opt{'list-provided'}) { my $f; for $f (sort { lc $a cmp lc $b } keys %API) { next unless $API{$f}{provided}; my @flags; push @flags, 'explicit' if exists $need{$f}; push @flags, 'depend' if exists $depends{$f}; push @flags, 'hint' if exists $hints{$f}; my $flags = @flags ? ' ['.join(', ', @flags).']' : ''; print "$f$flags\n"; } exit 0; } my @files; my @srcext = qw( xs c h cc cpp ); my $srcext = join '|', @srcext; if (@ARGV) { my %seen; @files = grep { -f && !exists $seen{$_} } map { glob $_ } @ARGV; } else { eval { require File::Find; File::Find::find(sub { $File::Find::name =~ /\.($srcext)$/i and push @files, $File::Find::name; }, '.'); }; if ($@) { @files = map { glob "*.$_" } @srcext; } } if (!@ARGV || $opt{filter}) { my(@in, @out); my %xsc = map { /(.*)\.xs$/ ? ("$1.c" => 1, "$1.cc" => 1) : () } @files; for (@files) { my $out = exists $xsc{$_} || /\b\Q$ppport\E$/i || !/\.($srcext)$/i; push @{ $out ? \@out : \@in }, $_; } if (@ARGV && @out) { warning("Skipping the following files (use --nofilter to avoid this):\n| ", join "\n| ", @out); } @files = @in; } unless (@files) { die "No input files given!\n"; } my(%files, %global, %revreplace); %revreplace = reverse %replace; my $filename; my $patch_opened = 0; for $filename (@files) { unless (open IN, "<$filename") { warn "Unable to read from $filename: $!\n"; next; } info("Scanning $filename ..."); my $c = do { local $/; }; close IN; my %file = (orig => $c, changes => 0); # temporarily remove C comments from the code my @ccom; $c =~ s{ ( [^"'/]+ | (?:"[^"\\]*(?:\\.[^"\\]*)*" [^"'/]*)+ | (?:'[^'\\]*(?:\\.[^'\\]*)*' [^"'/]*)+ ) | (/ (?: \*[^*]*\*+(?:[^$ccs][^*]*\*+)* / | /[^\r\n]* )) }{ defined $2 and push @ccom, $2; defined $1 ? $1 : "$ccs$#ccom$cce"; }egsx; $file{ccom} = \@ccom; $file{code} = $c; $file{has_inc_ppport} = ($c =~ /#.*include.*\Q$ppport\E/); my $func; for $func (keys %API) { my $match = $func; $match .= "|$revreplace{$func}" if exists $revreplace{$func}; if ($c =~ /\b(?:Perl_)?($match)\b/) { $file{uses_replace}{$1}++ if exists $revreplace{$func} && $1 eq $revreplace{$func}; $file{uses_Perl}{$func}++ if $c =~ /\bPerl_$func\b/; if (exists $API{$func}{provided}) { if (!exists $API{$func}{base} || $API{$func}{base} > $opt{'compat-version'}) { $file{uses}{$func}++; my @deps = rec_depend($func); if (@deps) { $file{uses_deps}{$func} = \@deps; for (@deps) { $file{uses}{$_} = 0 unless exists $file{uses}{$_}; } } for ($func, @deps) { if (exists $need{$_}) { $file{needs}{$_} = 'static'; } } } } if (exists $API{$func}{todo} && $API{$func}{todo} > $opt{'compat-version'}) { if ($c =~ /\b$func\b/) { $file{uses_todo}{$func}++; } } } } while ($c =~ /^$HS*#$HS*define$HS+(NEED_(\w+?)(_GLOBAL)?)\b/mg) { if (exists $need{$2}) { $file{defined $3 ? 'needed_global' : 'needed_static'}{$2}++; } else { warning("Possibly wrong #define $1 in $filename"); } } for (qw(uses needs uses_todo needed_global needed_static)) { for $func (keys %{$file{$_}}) { push @{$global{$_}{$func}}, $filename; } } $files{$filename} = \%file; } # Globally resolve NEED_'s my $need; for $need (keys %{$global{needs}}) { if (@{$global{needs}{$need}} > 1) { my @targets = @{$global{needs}{$need}}; my @t = grep $files{$_}{needed_global}{$need}, @targets; @targets = @t if @t; @t = grep /\.xs$/i, @targets; @targets = @t if @t; my $target = shift @targets; $files{$target}{needs}{$need} = 'global'; for (@{$global{needs}{$need}}) { $files{$_}{needs}{$need} = 'extern' if $_ ne $target; } } } for $filename (@files) { exists $files{$filename} or next; info("=== Analyzing $filename ==="); my %file = %{$files{$filename}}; my $func; my $c = $file{code}; for $func (sort keys %{$file{uses_Perl}}) { if ($API{$func}{varargs}) { my $changes = ($c =~ s{\b(Perl_$func\s*\(\s*)(?!aTHX_?)(\)|[^\s)]*\))} { $1 . ($2 eq ')' ? 'aTHX' : 'aTHX_ ') . $2 }ge); if ($changes) { warning("Doesn't pass interpreter argument aTHX to Perl_$func"); $file{changes} += $changes; } } else { warning("Uses Perl_$func instead of $func"); $file{changes} += ($c =~ s{\bPerl_$func(\s*)\((\s*aTHX_?)?\s*} {$func$1(}g); } } for $func (sort keys %{$file{uses_replace}}) { warning("Uses $func instead of $replace{$func}"); $file{changes} += ($c =~ s/\b$func\b/$replace{$func}/g); } for $func (sort keys %{$file{uses}}) { next unless $file{uses}{$func}; # if it's only a dependency if (exists $file{uses_deps}{$func}) { diag("Uses $func, which depends on ", join(', ', @{$file{uses_deps}{$func}})); } elsif (exists $replace{$func}) { warning("Uses $func instead of $replace{$func}"); $file{changes} += ($c =~ s/\b$func\b/$replace{$func}/g); } else { diag("Uses $func"); } hint($func); } for $func (sort keys %{$file{uses_todo}}) { warning("Uses $func, which may not be portable below perl ", format_version($API{$func}{todo})); } for $func (sort keys %{$file{needed_static}}) { my $message = ''; if (not exists $file{uses}{$func}) { $message = "No need to define NEED_$func if $func is never used"; } elsif (exists $file{needs}{$func} && $file{needs}{$func} ne 'static') { $message = "No need to define NEED_$func when already needed globally"; } if ($message) { diag($message); $file{changes} += ($c =~ s/^$HS*#$HS*define$HS+NEED_$func\b.*$LF//mg); } } for $func (sort keys %{$file{needed_global}}) { my $message = ''; if (not exists $global{uses}{$func}) { $message = "No need to define NEED_${func}_GLOBAL if $func is never used"; } elsif (exists $file{needs}{$func}) { if ($file{needs}{$func} eq 'extern') { $message = "No need to define NEED_${func}_GLOBAL when already needed globally"; } elsif ($file{needs}{$func} eq 'static') { $message = "No need to define NEED_${func}_GLOBAL when only used in this file"; } } if ($message) { diag($message); $file{changes} += ($c =~ s/^$HS*#$HS*define$HS+NEED_${func}_GLOBAL\b.*$LF//mg); } } $file{needs_inc_ppport} = keys %{$file{uses}}; if ($file{needs_inc_ppport}) { my $pp = ''; for $func (sort keys %{$file{needs}}) { my $type = $file{needs}{$func}; next if $type eq 'extern'; my $suffix = $type eq 'global' ? '_GLOBAL' : ''; unless (exists $file{"needed_$type"}{$func}) { if ($type eq 'global') { diag("Files [@{$global{needs}{$func}}] need $func, adding global request"); } else { diag("File needs $func, adding static request"); } $pp .= "#define NEED_$func$suffix\n"; } } if ($pp && ($c =~ s/^(?=$HS*#$HS*define$HS+NEED_\w+)/$pp/m)) { $pp = ''; $file{changes}++; } unless ($file{has_inc_ppport}) { diag("Needs to include '$ppport'"); $pp .= qq(#include "$ppport"\n) } if ($pp) { $file{changes} += ($c =~ s/^($HS*#$HS*define$HS+NEED_\w+.*?)^/$1$pp/ms) || ($c =~ s/^(?=$HS*#$HS*include.*\Q$ppport\E)/$pp/m) || ($c =~ s/^($HS*#$HS*include.*XSUB.*\s*?)^/$1$pp/m) || ($c =~ s/^/$pp/); } } else { if ($file{has_inc_ppport}) { diag("No need to include '$ppport'"); $file{changes} += ($c =~ s/^$HS*?#$HS*include.*\Q$ppport\E.*?$LF//m); } } # put back in our C comments my $ix; my $cppc = 0; my @ccom = @{$file{ccom}}; for $ix (0 .. $#ccom) { if (!$opt{cplusplus} && $ccom[$ix] =~ s!^//!!) { $cppc++; $file{changes} += $c =~ s/$rccs$ix$rcce/$ccs$ccom[$ix] $cce/; } else { $c =~ s/$rccs$ix$rcce/$ccom[$ix]/; } } if ($cppc) { my $s = $cppc != 1 ? 's' : ''; warning("Uses $cppc C++ style comment$s, which is not portable"); } if ($file{changes}) { if (exists $opt{copy}) { my $newfile = "$filename$opt{copy}"; if (-e $newfile) { error("'$newfile' already exists, refusing to write copy of '$filename'"); } else { local *F; if (open F, ">$newfile") { info("Writing copy of '$filename' with changes to '$newfile'"); print F $c; close F; } else { error("Cannot open '$newfile' for writing: $!"); } } } elsif (exists $opt{patch} || $opt{changes}) { if (exists $opt{patch}) { unless ($patch_opened) { if (open PATCH, ">$opt{patch}") { $patch_opened = 1; } else { error("Cannot open '$opt{patch}' for writing: $!"); delete $opt{patch}; $opt{changes} = 1; goto fallback; } } mydiff(\*PATCH, $filename, $c); } else { fallback: info("Suggested changes:"); mydiff(\*STDOUT, $filename, $c); } } else { my $s = $file{changes} == 1 ? '' : 's'; info("$file{changes} potentially required change$s detected"); } } else { info("Looks good"); } } close PATCH if $patch_opened; exit 0; sub mydiff { local *F = shift; my($file, $str) = @_; my $diff; if (exists $opt{diff}) { $diff = run_diff($opt{diff}, $file, $str); } if (!defined $diff and can_use('Text::Diff')) { $diff = Text::Diff::diff($file, \$str, { STYLE => 'Unified' }); $diff = <
    $tmp") { print F $str; close F; if (open F, "$prog $file $tmp |") { while () { s/\Q$tmp\E/$file.patched/; $diff .= $_; } close F; unlink $tmp; return $diff; } unlink $tmp; } else { error("Cannot open '$tmp' for writing: $!"); } return undef; } sub can_use { eval "use @_;"; return $@ eq ''; } sub rec_depend { my $func = shift; my %seen; return () unless exists $depends{$func}; grep !$seen{$_}++, map { ($_, rec_depend($_)) } @{$depends{$func}}; } sub parse_version { my $ver = shift; if ($ver =~ /^(\d+)\.(\d+)\.(\d+)$/) { return ($1, $2, $3); } elsif ($ver !~ /^\d+\.[\d_]+$/) { die "cannot parse version '$ver'\n"; } $ver =~ s/_//g; $ver =~ s/$/000000/; my($r,$v,$s) = $ver =~ /(\d+)\.(\d{3})(\d{3})/; $v = int $v; $s = int $s; if ($r < 5 || ($r == 5 && $v < 6)) { if ($s % 10) { die "cannot parse version '$ver'\n"; } } return ($r, $v, $s); } sub format_version { my $ver = shift; $ver =~ s/$/000000/; my($r,$v,$s) = $ver =~ /(\d+)\.(\d{3})(\d{3})/; $v = int $v; $s = int $s; if ($r < 5 || ($r == 5 && $v < 6)) { if ($s % 10) { die "invalid version '$ver'\n"; } $s /= 10; $ver = sprintf "%d.%03d", $r, $v; $s > 0 and $ver .= sprintf "_%02d", $s; return $ver; } return sprintf "%d.%d.%d", $r, $v, $s; } sub info { $opt{quiet} and return; print @_, "\n"; } sub diag { $opt{quiet} and return; $opt{diag} and print @_, "\n"; } sub warning { $opt{quiet} and return; print "*** ", @_, "\n"; } sub error { print "*** ERROR: ", @_, "\n"; } my %given_hints; sub hint { $opt{quiet} and return; $opt{hints} or return; my $func = shift; exists $hints{$func} or return; $given_hints{$func}++ and return; my $hint = $hints{$func}; $hint =~ s/^/ /mg; print " --- hint for $func ---\n", $hint; } sub usage { my($usage) = do { local(@ARGV,$/)=($0); <> } =~ /^=head\d$HS+SYNOPSIS\s*^(.*?)\s*^=/ms; my %M = ( 'I' => '*' ); $usage =~ s/^\s*perl\s+\S+/$^X $0/; $usage =~ s/([A-Z])<([^>]+)>/$M{$1}$2$M{$1}/g; print < # endif # if !(defined(PERL_VERSION) || (defined(SUBVERSION) && defined(PATCHLEVEL))) # include # endif # ifndef PERL_REVISION # define PERL_REVISION (5) /* Replace: 1 */ # define PERL_VERSION PATCHLEVEL # define PERL_SUBVERSION SUBVERSION /* Replace PERL_PATCHLEVEL with PERL_VERSION */ /* Replace: 0 */ # endif #endif #define PERL_BCDVERSION ((PERL_REVISION * 0x1000000L) + (PERL_VERSION * 0x1000L) + PERL_SUBVERSION) /* It is very unlikely that anyone will try to use this with Perl 6 (or greater), but who knows. */ #if PERL_REVISION != 5 # error ppport.h only works with Perl version 5 #endif /* PERL_REVISION != 5 */ #ifdef I_LIMITS # include #endif #ifndef PERL_UCHAR_MIN # define PERL_UCHAR_MIN ((unsigned char)0) #endif #ifndef PERL_UCHAR_MAX # ifdef UCHAR_MAX # define PERL_UCHAR_MAX ((unsigned char)UCHAR_MAX) # else # ifdef MAXUCHAR # define PERL_UCHAR_MAX ((unsigned char)MAXUCHAR) # else # define PERL_UCHAR_MAX ((unsigned char)~(unsigned)0) # endif # endif #endif #ifndef PERL_USHORT_MIN # define PERL_USHORT_MIN ((unsigned short)0) #endif #ifndef PERL_USHORT_MAX # ifdef USHORT_MAX # define PERL_USHORT_MAX ((unsigned short)USHORT_MAX) # else # ifdef MAXUSHORT # define PERL_USHORT_MAX ((unsigned short)MAXUSHORT) # else # ifdef USHRT_MAX # define PERL_USHORT_MAX ((unsigned short)USHRT_MAX) # else # define PERL_USHORT_MAX ((unsigned short)~(unsigned)0) # endif # endif # endif #endif #ifndef PERL_SHORT_MAX # ifdef SHORT_MAX # define PERL_SHORT_MAX ((short)SHORT_MAX) # else # ifdef MAXSHORT /* Often used in */ # define PERL_SHORT_MAX ((short)MAXSHORT) # else # ifdef SHRT_MAX # define PERL_SHORT_MAX ((short)SHRT_MAX) # else # define PERL_SHORT_MAX ((short) (PERL_USHORT_MAX >> 1)) # endif # endif # endif #endif #ifndef PERL_SHORT_MIN # ifdef SHORT_MIN # define PERL_SHORT_MIN ((short)SHORT_MIN) # else # ifdef MINSHORT # define PERL_SHORT_MIN ((short)MINSHORT) # else # ifdef SHRT_MIN # define PERL_SHORT_MIN ((short)SHRT_MIN) # else # define PERL_SHORT_MIN (-PERL_SHORT_MAX - ((3 & -1) == 3)) # endif # endif # endif #endif #ifndef PERL_UINT_MAX # ifdef UINT_MAX # define PERL_UINT_MAX ((unsigned int)UINT_MAX) # else # ifdef MAXUINT # define PERL_UINT_MAX ((unsigned int)MAXUINT) # else # define PERL_UINT_MAX (~(unsigned int)0) # endif # endif #endif #ifndef PERL_UINT_MIN # define PERL_UINT_MIN ((unsigned int)0) #endif #ifndef PERL_INT_MAX # ifdef INT_MAX # define PERL_INT_MAX ((int)INT_MAX) # else # ifdef MAXINT /* Often used in */ # define PERL_INT_MAX ((int)MAXINT) # else # define PERL_INT_MAX ((int)(PERL_UINT_MAX >> 1)) # endif # endif #endif #ifndef PERL_INT_MIN # ifdef INT_MIN # define PERL_INT_MIN ((int)INT_MIN) # else # ifdef MININT # define PERL_INT_MIN ((int)MININT) # else # define PERL_INT_MIN (-PERL_INT_MAX - ((3 & -1) == 3)) # endif # endif #endif #ifndef PERL_ULONG_MAX # ifdef ULONG_MAX # define PERL_ULONG_MAX ((unsigned long)ULONG_MAX) # else # ifdef MAXULONG # define PERL_ULONG_MAX ((unsigned long)MAXULONG) # else # define PERL_ULONG_MAX (~(unsigned long)0) # endif # endif #endif #ifndef PERL_ULONG_MIN # define PERL_ULONG_MIN ((unsigned long)0L) #endif #ifndef PERL_LONG_MAX # ifdef LONG_MAX # define PERL_LONG_MAX ((long)LONG_MAX) # else # ifdef MAXLONG # define PERL_LONG_MAX ((long)MAXLONG) # else # define PERL_LONG_MAX ((long) (PERL_ULONG_MAX >> 1)) # endif # endif #endif #ifndef PERL_LONG_MIN # ifdef LONG_MIN # define PERL_LONG_MIN ((long)LONG_MIN) # else # ifdef MINLONG # define PERL_LONG_MIN ((long)MINLONG) # else # define PERL_LONG_MIN (-PERL_LONG_MAX - ((3 & -1) == 3)) # endif # endif #endif #if defined(HAS_QUAD) && (defined(convex) || defined(uts)) # ifndef PERL_UQUAD_MAX # ifdef ULONGLONG_MAX # define PERL_UQUAD_MAX ((unsigned long long)ULONGLONG_MAX) # else # ifdef MAXULONGLONG # define PERL_UQUAD_MAX ((unsigned long long)MAXULONGLONG) # else # define PERL_UQUAD_MAX (~(unsigned long long)0) # endif # endif # endif # ifndef PERL_UQUAD_MIN # define PERL_UQUAD_MIN ((unsigned long long)0L) # endif # ifndef PERL_QUAD_MAX # ifdef LONGLONG_MAX # define PERL_QUAD_MAX ((long long)LONGLONG_MAX) # else # ifdef MAXLONGLONG # define PERL_QUAD_MAX ((long long)MAXLONGLONG) # else # define PERL_QUAD_MAX ((long long) (PERL_UQUAD_MAX >> 1)) # endif # endif # endif # ifndef PERL_QUAD_MIN # ifdef LONGLONG_MIN # define PERL_QUAD_MIN ((long long)LONGLONG_MIN) # else # ifdef MINLONGLONG # define PERL_QUAD_MIN ((long long)MINLONGLONG) # else # define PERL_QUAD_MIN (-PERL_QUAD_MAX - ((3 & -1) == 3)) # endif # endif # endif #endif /* This is based on code from 5.003 perl.h */ #ifdef HAS_QUAD # ifdef cray #ifndef IVTYPE # define IVTYPE int #endif #ifndef IV_MIN # define IV_MIN PERL_INT_MIN #endif #ifndef IV_MAX # define IV_MAX PERL_INT_MAX #endif #ifndef UV_MIN # define UV_MIN PERL_UINT_MIN #endif #ifndef UV_MAX # define UV_MAX PERL_UINT_MAX #endif # ifdef INTSIZE #ifndef IVSIZE # define IVSIZE INTSIZE #endif # endif # else # if defined(convex) || defined(uts) #ifndef IVTYPE # define IVTYPE long long #endif #ifndef IV_MIN # define IV_MIN PERL_QUAD_MIN #endif #ifndef IV_MAX # define IV_MAX PERL_QUAD_MAX #endif #ifndef UV_MIN # define UV_MIN PERL_UQUAD_MIN #endif #ifndef UV_MAX # define UV_MAX PERL_UQUAD_MAX #endif # ifdef LONGLONGSIZE #ifndef IVSIZE # define IVSIZE LONGLONGSIZE #endif # endif # else #ifndef IVTYPE # define IVTYPE long #endif #ifndef IV_MIN # define IV_MIN PERL_LONG_MIN #endif #ifndef IV_MAX # define IV_MAX PERL_LONG_MAX #endif #ifndef UV_MIN # define UV_MIN PERL_ULONG_MIN #endif #ifndef UV_MAX # define UV_MAX PERL_ULONG_MAX #endif # ifdef LONGSIZE #ifndef IVSIZE # define IVSIZE LONGSIZE #endif # endif # endif # endif #ifndef IVSIZE # define IVSIZE 8 #endif #ifndef PERL_QUAD_MIN # define PERL_QUAD_MIN IV_MIN #endif #ifndef PERL_QUAD_MAX # define PERL_QUAD_MAX IV_MAX #endif #ifndef PERL_UQUAD_MIN # define PERL_UQUAD_MIN UV_MIN #endif #ifndef PERL_UQUAD_MAX # define PERL_UQUAD_MAX UV_MAX #endif #else #ifndef IVTYPE # define IVTYPE long #endif #ifndef IV_MIN # define IV_MIN PERL_LONG_MIN #endif #ifndef IV_MAX # define IV_MAX PERL_LONG_MAX #endif #ifndef UV_MIN # define UV_MIN PERL_ULONG_MIN #endif #ifndef UV_MAX # define UV_MAX PERL_ULONG_MAX #endif #endif #ifndef IVSIZE # ifdef LONGSIZE # define IVSIZE LONGSIZE # else # define IVSIZE 4 /* A bold guess, but the best we can make. */ # endif #endif #ifndef UVTYPE # define UVTYPE unsigned IVTYPE #endif #ifndef UVSIZE # define UVSIZE IVSIZE #endif #ifndef sv_setuv # define sv_setuv(sv, uv) \ STMT_START { \ UV TeMpUv = uv; \ if (TeMpUv <= IV_MAX) \ sv_setiv(sv, TeMpUv); \ else \ sv_setnv(sv, (double)TeMpUv); \ } STMT_END #endif #ifndef newSVuv # define newSVuv(uv) ((uv) <= IV_MAX ? newSViv((IV)uv) : newSVnv((NV)uv)) #endif #ifndef sv_2uv # define sv_2uv(sv) ((PL_Sv = (sv)), (UV) (SvNOK(PL_Sv) ? SvNV(PL_Sv) : sv_2nv(PL_Sv))) #endif #ifndef SvUVX # define SvUVX(sv) ((UV)SvIVX(sv)) #endif #ifndef SvUVXx # define SvUVXx(sv) SvUVX(sv) #endif #ifndef SvUV # define SvUV(sv) (SvIOK(sv) ? SvUVX(sv) : sv_2uv(sv)) #endif #ifndef SvUVx # define SvUVx(sv) ((PL_Sv = (sv)), SvUV(PL_Sv)) #endif /* Hint: sv_uv * Always use the SvUVx() macro instead of sv_uv(). */ #ifndef sv_uv # define sv_uv(sv) SvUVx(sv) #endif #ifndef XST_mUV # define XST_mUV(i,v) (ST(i) = sv_2mortal(newSVuv(v)) ) #endif #ifndef XSRETURN_UV # define XSRETURN_UV(v) STMT_START { XST_mUV(0,v); XSRETURN(1); } STMT_END #endif #ifndef PUSHu # define PUSHu(u) STMT_START { sv_setuv(TARG, (UV)(u)); PUSHTARG; } STMT_END #endif #ifndef XPUSHu # define XPUSHu(u) STMT_START { sv_setuv(TARG, (UV)(u)); XPUSHTARG; } STMT_END #endif #if (PERL_VERSION < 4) || ((PERL_VERSION == 4) && (PERL_SUBVERSION <= 5)) /* Replace: 1 */ # define PL_DBsingle DBsingle # define PL_DBsub DBsub # define PL_Sv Sv # define PL_compiling compiling # define PL_copline copline # define PL_curcop curcop # define PL_curstash curstash # define PL_debstash debstash # define PL_defgv defgv # define PL_diehook diehook # define PL_dirty dirty # define PL_dowarn dowarn # define PL_errgv errgv # define PL_hexdigit hexdigit # define PL_hints hints # define PL_na na # define PL_no_modify no_modify # define PL_perl_destruct_level perl_destruct_level # define PL_perldb perldb # define PL_ppaddr ppaddr # define PL_rsfp_filters rsfp_filters # define PL_rsfp rsfp # define PL_stack_base stack_base # define PL_stack_sp stack_sp # define PL_stdingv stdingv # define PL_sv_arenaroot sv_arenaroot # define PL_sv_no sv_no # define PL_sv_undef sv_undef # define PL_sv_yes sv_yes # define PL_tainted tainted # define PL_tainting tainting /* Replace: 0 */ #endif #ifndef PERL_UNUSED_DECL # ifdef HASATTRIBUTE # if (defined(__GNUC__) && defined(__cplusplus)) || defined(__INTEL_COMPILER) # define PERL_UNUSED_DECL # else # define PERL_UNUSED_DECL __attribute__((unused)) # endif # else # define PERL_UNUSED_DECL # endif #endif #ifndef NOOP # define NOOP (void)0 #endif #ifndef dNOOP # define dNOOP extern int Perl___notused PERL_UNUSED_DECL #endif #ifndef NVTYPE # if defined(USE_LONG_DOUBLE) && defined(HAS_LONG_DOUBLE) # define NVTYPE long double # else # define NVTYPE double # endif typedef NVTYPE NV; #endif #ifndef INT2PTR # if (IVSIZE == PTRSIZE) && (UVSIZE == PTRSIZE) # define PTRV UV # define INT2PTR(any,d) (any)(d) # else # if PTRSIZE == LONGSIZE # define PTRV unsigned long # else # define PTRV unsigned # endif # define INT2PTR(any,d) (any)(PTRV)(d) # endif # define NUM2PTR(any,d) (any)(PTRV)(d) # define PTR2IV(p) INT2PTR(IV,p) # define PTR2UV(p) INT2PTR(UV,p) # define PTR2NV(p) NUM2PTR(NV,p) # if PTRSIZE == LONGSIZE # define PTR2ul(p) (unsigned long)(p) # else # define PTR2ul(p) INT2PTR(unsigned long,p) # endif #endif /* !INT2PTR */ #undef START_EXTERN_C #undef END_EXTERN_C #undef EXTERN_C #ifdef __cplusplus # define START_EXTERN_C extern "C" { # define END_EXTERN_C } # define EXTERN_C extern "C" #else # define START_EXTERN_C # define END_EXTERN_C # define EXTERN_C extern #endif #ifndef PERL_GCC_BRACE_GROUPS_FORBIDDEN # if defined(__STRICT_ANSI__) && defined(PERL_GCC_PEDANTIC) # define PERL_GCC_BRACE_GROUPS_FORBIDDEN # endif #endif #undef STMT_START #undef STMT_END #if defined(__GNUC__) && !defined(PERL_GCC_BRACE_GROUPS_FORBIDDEN) && !defined(__cplusplus) # define STMT_START (void)( /* gcc supports ``({ STATEMENTS; })'' */ # define STMT_END ) #else # if defined(VOIDFLAGS) && (VOIDFLAGS) && (defined(sun) || defined(__sun__)) && !defined(__GNUC__) # define STMT_START if (1) # define STMT_END else (void)0 # else # define STMT_START do # define STMT_END while (0) # endif #endif #ifndef boolSV # define boolSV(b) ((b) ? &PL_sv_yes : &PL_sv_no) #endif /* DEFSV appears first in 5.004_56 */ #ifndef DEFSV # define DEFSV GvSV(PL_defgv) #endif #ifndef SAVE_DEFSV # define SAVE_DEFSV SAVESPTR(GvSV(PL_defgv)) #endif /* Older perls (<=5.003) lack AvFILLp */ #ifndef AvFILLp # define AvFILLp AvFILL #endif #ifndef ERRSV # define ERRSV get_sv("@",FALSE) #endif #ifndef newSVpvn # define newSVpvn(data,len) ((data) \ ? ((len) ? newSVpv((data), (len)) : newSVpv("", 0)) \ : newSV(0)) #endif /* Hint: gv_stashpvn * This function's backport doesn't support the length parameter, but * rather ignores it. Portability can only be ensured if the length * parameter is used for speed reasons, but the length can always be * correctly computed from the string argument. */ #ifndef gv_stashpvn # define gv_stashpvn(str,len,create) gv_stashpv(str,create) #endif /* Replace: 1 */ #ifndef get_cv # define get_cv perl_get_cv #endif #ifndef get_sv # define get_sv perl_get_sv #endif #ifndef get_av # define get_av perl_get_av #endif #ifndef get_hv # define get_hv perl_get_hv #endif /* Replace: 0 */ #ifdef HAS_MEMCMP #ifndef memNE # define memNE(s1,s2,l) (memcmp(s1,s2,l)) #endif #ifndef memEQ # define memEQ(s1,s2,l) (!memcmp(s1,s2,l)) #endif #else #ifndef memNE # define memNE(s1,s2,l) (bcmp(s1,s2,l)) #endif #ifndef memEQ # define memEQ(s1,s2,l) (!bcmp(s1,s2,l)) #endif #endif #ifndef MoveD # define MoveD(s,d,n,t) memmove((char*)(d),(char*)(s), (n) * sizeof(t)) #endif #ifndef CopyD # define CopyD(s,d,n,t) memcpy((char*)(d),(char*)(s), (n) * sizeof(t)) #endif #ifdef HAS_MEMSET #ifndef ZeroD # define ZeroD(d,n,t) memzero((char*)(d), (n) * sizeof(t)) #endif #else #ifndef ZeroD # define ZeroD(d,n,t) ((void)memzero((char*)(d), (n) * sizeof(t)),d) #endif #endif #ifndef Poison # define Poison(d,n,t) (void)memset((char*)(d), 0xAB, (n) * sizeof(t)) #endif #ifndef dUNDERBAR # define dUNDERBAR dNOOP #endif #ifndef UNDERBAR # define UNDERBAR DEFSV #endif #ifndef dAX # define dAX I32 ax = MARK - PL_stack_base + 1 #endif #ifndef dITEMS # define dITEMS I32 items = SP - MARK #endif #ifndef dXSTARG # define dXSTARG SV * targ = sv_newmortal() #endif #ifndef dTHR # define dTHR dNOOP #endif #ifndef dTHX # define dTHX dNOOP #endif #ifndef dTHXa # define dTHXa(x) dNOOP #endif #ifndef pTHX # define pTHX void #endif #ifndef pTHX_ # define pTHX_ #endif #ifndef aTHX # define aTHX #endif #ifndef aTHX_ # define aTHX_ #endif #ifndef dTHXoa # define dTHXoa(x) dTHXa(x) #endif #ifndef PUSHmortal # define PUSHmortal PUSHs(sv_newmortal()) #endif #ifndef mPUSHp # define mPUSHp(p,l) sv_setpvn_mg(PUSHmortal, (p), (l)) #endif #ifndef mPUSHn # define mPUSHn(n) sv_setnv_mg(PUSHmortal, (NV)(n)) #endif #ifndef mPUSHi # define mPUSHi(i) sv_setiv_mg(PUSHmortal, (IV)(i)) #endif #ifndef mPUSHu # define mPUSHu(u) sv_setuv_mg(PUSHmortal, (UV)(u)) #endif #ifndef XPUSHmortal # define XPUSHmortal XPUSHs(sv_newmortal()) #endif #ifndef mXPUSHp # define mXPUSHp(p,l) STMT_START { EXTEND(sp,1); sv_setpvn_mg(PUSHmortal, (p), (l)); } STMT_END #endif #ifndef mXPUSHn # define mXPUSHn(n) STMT_START { EXTEND(sp,1); sv_setnv_mg(PUSHmortal, (NV)(n)); } STMT_END #endif #ifndef mXPUSHi # define mXPUSHi(i) STMT_START { EXTEND(sp,1); sv_setiv_mg(PUSHmortal, (IV)(i)); } STMT_END #endif #ifndef mXPUSHu # define mXPUSHu(u) STMT_START { EXTEND(sp,1); sv_setuv_mg(PUSHmortal, (UV)(u)); } STMT_END #endif /* Replace: 1 */ #ifndef call_sv # define call_sv perl_call_sv #endif #ifndef call_pv # define call_pv perl_call_pv #endif #ifndef call_argv # define call_argv perl_call_argv #endif #ifndef call_method # define call_method perl_call_method #endif #ifndef eval_sv # define eval_sv perl_eval_sv #endif /* Replace: 0 */ /* Replace perl_eval_pv with eval_pv */ /* eval_pv depends on eval_sv */ #ifndef eval_pv #if defined(NEED_eval_pv) static SV* DPPP_(my_eval_pv)(char *p, I32 croak_on_error); static #else extern SV* DPPP_(my_eval_pv)(char *p, I32 croak_on_error); #endif #ifdef eval_pv # undef eval_pv #endif #define eval_pv(a,b) DPPP_(my_eval_pv)(aTHX_ a,b) #define Perl_eval_pv DPPP_(my_eval_pv) #if defined(NEED_eval_pv) || defined(NEED_eval_pv_GLOBAL) SV* DPPP_(my_eval_pv)(char *p, I32 croak_on_error) { dSP; SV* sv = newSVpv(p, 0); PUSHMARK(sp); eval_sv(sv, G_SCALAR); SvREFCNT_dec(sv); SPAGAIN; sv = POPs; PUTBACK; if (croak_on_error && SvTRUE(GvSV(errgv))) croak(SvPVx(GvSV(errgv), na)); return sv; } #endif #endif #ifndef newRV_inc # define newRV_inc(sv) newRV(sv) /* Replace */ #endif #ifndef newRV_noinc #if defined(NEED_newRV_noinc) static SV * DPPP_(my_newRV_noinc)(SV *sv); static #else extern SV * DPPP_(my_newRV_noinc)(SV *sv); #endif #ifdef newRV_noinc # undef newRV_noinc #endif #define newRV_noinc(a) DPPP_(my_newRV_noinc)(aTHX_ a) #define Perl_newRV_noinc DPPP_(my_newRV_noinc) #if defined(NEED_newRV_noinc) || defined(NEED_newRV_noinc_GLOBAL) SV * DPPP_(my_newRV_noinc)(SV *sv) { SV *rv = (SV *)newRV(sv); SvREFCNT_dec(sv); return rv; } #endif #endif /* Hint: newCONSTSUB * Returns a CV* as of perl-5.7.1. This return value is not supported * by Devel::PPPort. */ /* newCONSTSUB from IO.xs is in the core starting with 5.004_63 */ #if ((PERL_VERSION < 4) || ((PERL_VERSION == 4) && (PERL_SUBVERSION < 63))) && ((PERL_VERSION != 4) || (PERL_SUBVERSION != 5)) #if defined(NEED_newCONSTSUB) static void DPPP_(my_newCONSTSUB)(HV *stash, char *name, SV *sv); static #else extern void DPPP_(my_newCONSTSUB)(HV *stash, char *name, SV *sv); #endif #ifdef newCONSTSUB # undef newCONSTSUB #endif #define newCONSTSUB(a,b,c) DPPP_(my_newCONSTSUB)(aTHX_ a,b,c) #define Perl_newCONSTSUB DPPP_(my_newCONSTSUB) #if defined(NEED_newCONSTSUB) || defined(NEED_newCONSTSUB_GLOBAL) void DPPP_(my_newCONSTSUB)(HV *stash, char *name, SV *sv) { U32 oldhints = PL_hints; HV *old_cop_stash = PL_curcop->cop_stash; HV *old_curstash = PL_curstash; line_t oldline = PL_curcop->cop_line; PL_curcop->cop_line = PL_copline; PL_hints &= ~HINT_BLOCK_SCOPE; if (stash) PL_curstash = PL_curcop->cop_stash = stash; newSUB( #if ((PERL_VERSION < 3) || ((PERL_VERSION == 3) && (PERL_SUBVERSION < 22))) start_subparse(), #elif ((PERL_VERSION == 3) && (PERL_SUBVERSION == 22)) start_subparse(0), #else /* 5.003_23 onwards */ start_subparse(FALSE, 0), #endif newSVOP(OP_CONST, 0, newSVpv(name,0)), newSVOP(OP_CONST, 0, &PL_sv_no), /* SvPV(&PL_sv_no) == "" -- GMB */ newSTATEOP(0, Nullch, newSVOP(OP_CONST, 0, sv)) ); PL_hints = oldhints; PL_curcop->cop_stash = old_cop_stash; PL_curstash = old_curstash; PL_curcop->cop_line = oldline; } #endif #endif /* * Boilerplate macros for initializing and accessing interpreter-local * data from C. All statics in extensions should be reworked to use * this, if you want to make the extension thread-safe. See ext/re/re.xs * for an example of the use of these macros. * * Code that uses these macros is responsible for the following: * 1. #define MY_CXT_KEY to a unique string, e.g. "DynaLoader_guts" * 2. Declare a typedef named my_cxt_t that is a structure that contains * all the data that needs to be interpreter-local. * 3. Use the START_MY_CXT macro after the declaration of my_cxt_t. * 4. Use the MY_CXT_INIT macro such that it is called exactly once * (typically put in the BOOT: section). * 5. Use the members of the my_cxt_t structure everywhere as * MY_CXT.member. * 6. Use the dMY_CXT macro (a declaration) in all the functions that * access MY_CXT. */ #if defined(MULTIPLICITY) || defined(PERL_OBJECT) || \ defined(PERL_CAPI) || defined(PERL_IMPLICIT_CONTEXT) #ifndef START_MY_CXT /* This must appear in all extensions that define a my_cxt_t structure, * right after the definition (i.e. at file scope). The non-threads * case below uses it to declare the data as static. */ #define START_MY_CXT #if (PERL_VERSION < 4 || (PERL_VERSION == 4 && PERL_SUBVERSION < 68 )) /* Fetches the SV that keeps the per-interpreter data. */ #define dMY_CXT_SV \ SV *my_cxt_sv = get_sv(MY_CXT_KEY, FALSE) #else /* >= perl5.004_68 */ #define dMY_CXT_SV \ SV *my_cxt_sv = *hv_fetch(PL_modglobal, MY_CXT_KEY, \ sizeof(MY_CXT_KEY)-1, TRUE) #endif /* < perl5.004_68 */ /* This declaration should be used within all functions that use the * interpreter-local data. */ #define dMY_CXT \ dMY_CXT_SV; \ my_cxt_t *my_cxtp = INT2PTR(my_cxt_t*,SvUV(my_cxt_sv)) /* Creates and zeroes the per-interpreter data. * (We allocate my_cxtp in a Perl SV so that it will be released when * the interpreter goes away.) */ #define MY_CXT_INIT \ dMY_CXT_SV; \ /* newSV() allocates one more than needed */ \ my_cxt_t *my_cxtp = (my_cxt_t*)SvPVX(newSV(sizeof(my_cxt_t)-1));\ Zero(my_cxtp, 1, my_cxt_t); \ sv_setuv(my_cxt_sv, PTR2UV(my_cxtp)) /* This macro must be used to access members of the my_cxt_t structure. * e.g. MYCXT.some_data */ #define MY_CXT (*my_cxtp) /* Judicious use of these macros can reduce the number of times dMY_CXT * is used. Use is similar to pTHX, aTHX etc. */ #define pMY_CXT my_cxt_t *my_cxtp #define pMY_CXT_ pMY_CXT, #define _pMY_CXT ,pMY_CXT #define aMY_CXT my_cxtp #define aMY_CXT_ aMY_CXT, #define _aMY_CXT ,aMY_CXT #endif /* START_MY_CXT */ #ifndef MY_CXT_CLONE /* Clones the per-interpreter data. */ #define MY_CXT_CLONE \ dMY_CXT_SV; \ my_cxt_t *my_cxtp = (my_cxt_t*)SvPVX(newSV(sizeof(my_cxt_t)-1));\ Copy(INT2PTR(my_cxt_t*, SvUV(my_cxt_sv)), my_cxtp, 1, my_cxt_t);\ sv_setuv(my_cxt_sv, PTR2UV(my_cxtp)) #endif #else /* single interpreter */ #ifndef START_MY_CXT #define START_MY_CXT static my_cxt_t my_cxt; #define dMY_CXT_SV dNOOP #define dMY_CXT dNOOP #define MY_CXT_INIT NOOP #define MY_CXT my_cxt #define pMY_CXT void #define pMY_CXT_ #define _pMY_CXT #define aMY_CXT #define aMY_CXT_ #define _aMY_CXT #endif /* START_MY_CXT */ #ifndef MY_CXT_CLONE #define MY_CXT_CLONE NOOP #endif #endif #ifndef IVdf # if IVSIZE == LONGSIZE # define IVdf "ld" # define UVuf "lu" # define UVof "lo" # define UVxf "lx" # define UVXf "lX" # else # if IVSIZE == INTSIZE # define IVdf "d" # define UVuf "u" # define UVof "o" # define UVxf "x" # define UVXf "X" # endif # endif #endif #ifndef NVef # if defined(USE_LONG_DOUBLE) && defined(HAS_LONG_DOUBLE) && \ defined(PERL_PRIfldbl) /* Not very likely, but let's try anyway. */ # define NVef PERL_PRIeldbl # define NVff PERL_PRIfldbl # define NVgf PERL_PRIgldbl # else # define NVef "e" # define NVff "f" # define NVgf "g" # endif #endif #ifndef SvPV_nolen #if defined(NEED_sv_2pv_nolen) static char * DPPP_(my_sv_2pv_nolen)(pTHX_ register SV *sv); static #else extern char * DPPP_(my_sv_2pv_nolen)(pTHX_ register SV *sv); #endif #ifdef sv_2pv_nolen # undef sv_2pv_nolen #endif #define sv_2pv_nolen(a) DPPP_(my_sv_2pv_nolen)(aTHX_ a) #define Perl_sv_2pv_nolen DPPP_(my_sv_2pv_nolen) #if defined(NEED_sv_2pv_nolen) || defined(NEED_sv_2pv_nolen_GLOBAL) char * DPPP_(my_sv_2pv_nolen)(pTHX_ register SV *sv) { STRLEN n_a; return sv_2pv(sv, &n_a); } #endif /* Hint: sv_2pv_nolen * Use the SvPV_nolen() macro instead of sv_2pv_nolen(). */ /* SvPV_nolen depends on sv_2pv_nolen */ #define SvPV_nolen(sv) \ ((SvFLAGS(sv) & (SVf_POK)) == SVf_POK \ ? SvPVX(sv) : sv_2pv_nolen(sv)) #endif #ifdef SvPVbyte /* Hint: SvPVbyte * Does not work in perl-5.6.1, ppport.h implements a version * borrowed from perl-5.7.3. */ #if ((PERL_VERSION < 7) || ((PERL_VERSION == 7) && (PERL_SUBVERSION < 0))) #if defined(NEED_sv_2pvbyte) static char * DPPP_(my_sv_2pvbyte)(pTHX_ register SV *sv, STRLEN *lp); static #else extern char * DPPP_(my_sv_2pvbyte)(pTHX_ register SV *sv, STRLEN *lp); #endif #ifdef sv_2pvbyte # undef sv_2pvbyte #endif #define sv_2pvbyte(a,b) DPPP_(my_sv_2pvbyte)(aTHX_ a,b) #define Perl_sv_2pvbyte DPPP_(my_sv_2pvbyte) #if defined(NEED_sv_2pvbyte) || defined(NEED_sv_2pvbyte_GLOBAL) char * DPPP_(my_sv_2pvbyte)(pTHX_ register SV *sv, STRLEN *lp) { sv_utf8_downgrade(sv,0); return SvPV(sv,*lp); } #endif /* Hint: sv_2pvbyte * Use the SvPVbyte() macro instead of sv_2pvbyte(). */ #undef SvPVbyte /* SvPVbyte depends on sv_2pvbyte */ #define SvPVbyte(sv, lp) \ ((SvFLAGS(sv) & (SVf_POK|SVf_UTF8)) == (SVf_POK) \ ? ((lp = SvCUR(sv)), SvPVX(sv)) : sv_2pvbyte(sv, &lp)) #endif #else # define SvPVbyte SvPV # define sv_2pvbyte sv_2pv #endif /* sv_2pvbyte_nolen depends on sv_2pv_nolen */ #ifndef sv_2pvbyte_nolen # define sv_2pvbyte_nolen sv_2pv_nolen #endif /* Hint: sv_pvn * Always use the SvPV() macro instead of sv_pvn(). */ #ifndef sv_pvn # define sv_pvn(sv, len) SvPV(sv, len) #endif /* Hint: sv_pvn_force * Always use the SvPV_force() macro instead of sv_pvn_force(). */ #ifndef sv_pvn_force # define sv_pvn_force(sv, len) SvPV_force(sv, len) #endif #if ((PERL_VERSION > 4) || ((PERL_VERSION == 4) && (PERL_SUBVERSION >= 0))) && !defined(vnewSVpvf) #if defined(NEED_vnewSVpvf) static SV * DPPP_(my_vnewSVpvf)(pTHX_ const char * pat, va_list * args); static #else extern SV * DPPP_(my_vnewSVpvf)(pTHX_ const char * pat, va_list * args); #endif #ifdef vnewSVpvf # undef vnewSVpvf #endif #define vnewSVpvf(a,b) DPPP_(my_vnewSVpvf)(aTHX_ a,b) #define Perl_vnewSVpvf DPPP_(my_vnewSVpvf) #if defined(NEED_vnewSVpvf) || defined(NEED_vnewSVpvf_GLOBAL) SV * DPPP_(my_vnewSVpvf)(pTHX_ const char *pat, va_list *args) { register SV *sv = newSV(0); sv_vsetpvfn(sv, pat, strlen(pat), args, Null(SV**), 0, Null(bool*)); return sv; } #endif #endif /* sv_vcatpvf depends on sv_vcatpvfn */ #if ((PERL_VERSION > 4) || ((PERL_VERSION == 4) && (PERL_SUBVERSION >= 0))) && !defined(sv_vcatpvf) # define sv_vcatpvf(sv, pat, args) sv_vcatpvfn(sv, pat, strlen(pat), args, Null(SV**), 0, Null(bool*)) #endif /* sv_vsetpvf depends on sv_vsetpvfn */ #if ((PERL_VERSION > 4) || ((PERL_VERSION == 4) && (PERL_SUBVERSION >= 0))) && !defined(sv_vsetpvf) # define sv_vsetpvf(sv, pat, args) sv_vsetpvfn(sv, pat, strlen(pat), args, Null(SV**), 0, Null(bool*)) #endif /* sv_catpvf_mg depends on sv_vcatpvfn, sv_catpvf_mg_nocontext */ #if ((PERL_VERSION > 4) || ((PERL_VERSION == 4) && (PERL_SUBVERSION >= 0))) && !defined(sv_catpvf_mg) #if defined(NEED_sv_catpvf_mg) static void DPPP_(my_sv_catpvf_mg)(pTHX_ SV * sv, const char * pat, ...); static #else extern void DPPP_(my_sv_catpvf_mg)(pTHX_ SV * sv, const char * pat, ...); #endif #define Perl_sv_catpvf_mg DPPP_(my_sv_catpvf_mg) #if defined(NEED_sv_catpvf_mg) || defined(NEED_sv_catpvf_mg_GLOBAL) void DPPP_(my_sv_catpvf_mg)(pTHX_ SV *sv, const char *pat, ...) { va_list args; va_start(args, pat); sv_vcatpvfn(sv, pat, strlen(pat), &args, Null(SV**), 0, Null(bool*)); SvSETMAGIC(sv); va_end(args); } #endif #endif /* sv_catpvf_mg_nocontext depends on sv_vcatpvfn */ #ifdef PERL_IMPLICIT_CONTEXT #if ((PERL_VERSION > 4) || ((PERL_VERSION == 4) && (PERL_SUBVERSION >= 0))) && !defined(sv_catpvf_mg_nocontext) #if defined(NEED_sv_catpvf_mg_nocontext) static void DPPP_(my_sv_catpvf_mg_nocontext)(SV * sv, const char * pat, ...); static #else extern void DPPP_(my_sv_catpvf_mg_nocontext)(SV * sv, const char * pat, ...); #endif #define sv_catpvf_mg_nocontext DPPP_(my_sv_catpvf_mg_nocontext) #define Perl_sv_catpvf_mg_nocontext DPPP_(my_sv_catpvf_mg_nocontext) #if defined(NEED_sv_catpvf_mg_nocontext) || defined(NEED_sv_catpvf_mg_nocontext_GLOBAL) void DPPP_(my_sv_catpvf_mg_nocontext)(SV *sv, const char *pat, ...) { dTHX; va_list args; va_start(args, pat); sv_vcatpvfn(sv, pat, strlen(pat), &args, Null(SV**), 0, Null(bool*)); SvSETMAGIC(sv); va_end(args); } #endif #endif #endif #ifndef sv_catpvf_mg # ifdef PERL_IMPLICIT_CONTEXT # define sv_catpvf_mg Perl_sv_catpvf_mg_nocontext # else # define sv_catpvf_mg Perl_sv_catpvf_mg # endif #endif /* sv_vcatpvf_mg depends on sv_vcatpvfn */ #if ((PERL_VERSION > 4) || ((PERL_VERSION == 4) && (PERL_SUBVERSION >= 0))) && !defined(sv_vcatpvf_mg) # define sv_vcatpvf_mg(sv, pat, args) \ STMT_START { \ sv_vcatpvfn(sv, pat, strlen(pat), args, Null(SV**), 0, Null(bool*)); \ SvSETMAGIC(sv); \ } STMT_END #endif /* sv_setpvf_mg depends on sv_vsetpvfn, sv_setpvf_mg_nocontext */ #if ((PERL_VERSION > 4) || ((PERL_VERSION == 4) && (PERL_SUBVERSION >= 0))) && !defined(sv_setpvf_mg) #if defined(NEED_sv_setpvf_mg) static void DPPP_(my_sv_setpvf_mg)(pTHX_ SV * sv, const char * pat, ...); static #else extern void DPPP_(my_sv_setpvf_mg)(pTHX_ SV * sv, const char * pat, ...); #endif #define Perl_sv_setpvf_mg DPPP_(my_sv_setpvf_mg) #if defined(NEED_sv_setpvf_mg) || defined(NEED_sv_setpvf_mg_GLOBAL) void DPPP_(my_sv_setpvf_mg)(pTHX_ SV *sv, const char *pat, ...) { va_list args; va_start(args, pat); sv_vsetpvfn(sv, pat, strlen(pat), &args, Null(SV**), 0, Null(bool*)); SvSETMAGIC(sv); va_end(args); } #endif #endif /* sv_setpvf_mg_nocontext depends on sv_vsetpvfn */ #ifdef PERL_IMPLICIT_CONTEXT #if ((PERL_VERSION > 4) || ((PERL_VERSION == 4) && (PERL_SUBVERSION >= 0))) && !defined(sv_setpvf_mg_nocontext) #if defined(NEED_sv_setpvf_mg_nocontext) static void DPPP_(my_sv_setpvf_mg_nocontext)(SV * sv, const char * pat, ...); static #else extern void DPPP_(my_sv_setpvf_mg_nocontext)(SV * sv, const char * pat, ...); #endif #define sv_setpvf_mg_nocontext DPPP_(my_sv_setpvf_mg_nocontext) #define Perl_sv_setpvf_mg_nocontext DPPP_(my_sv_setpvf_mg_nocontext) #if defined(NEED_sv_setpvf_mg_nocontext) || defined(NEED_sv_setpvf_mg_nocontext_GLOBAL) void DPPP_(my_sv_setpvf_mg_nocontext)(SV *sv, const char *pat, ...) { dTHX; va_list args; va_start(args, pat); sv_vsetpvfn(sv, pat, strlen(pat), &args, Null(SV**), 0, Null(bool*)); SvSETMAGIC(sv); va_end(args); } #endif #endif #endif #ifndef sv_setpvf_mg # ifdef PERL_IMPLICIT_CONTEXT # define sv_setpvf_mg Perl_sv_setpvf_mg_nocontext # else # define sv_setpvf_mg Perl_sv_setpvf_mg # endif #endif /* sv_vsetpvf_mg depends on sv_vsetpvfn */ #if ((PERL_VERSION > 4) || ((PERL_VERSION == 4) && (PERL_SUBVERSION >= 0))) && !defined(sv_vsetpvf_mg) # define sv_vsetpvf_mg(sv, pat, args) \ STMT_START { \ sv_vsetpvfn(sv, pat, strlen(pat), args, Null(SV**), 0, Null(bool*)); \ SvSETMAGIC(sv); \ } STMT_END #endif #ifndef SvGETMAGIC # define SvGETMAGIC(x) STMT_START { if (SvGMAGICAL(x)) mg_get(x); } STMT_END #endif #ifndef PERL_MAGIC_sv # define PERL_MAGIC_sv '\0' #endif #ifndef PERL_MAGIC_overload # define PERL_MAGIC_overload 'A' #endif #ifndef PERL_MAGIC_overload_elem # define PERL_MAGIC_overload_elem 'a' #endif #ifndef PERL_MAGIC_overload_table # define PERL_MAGIC_overload_table 'c' #endif #ifndef PERL_MAGIC_bm # define PERL_MAGIC_bm 'B' #endif #ifndef PERL_MAGIC_regdata # define PERL_MAGIC_regdata 'D' #endif #ifndef PERL_MAGIC_regdatum # define PERL_MAGIC_regdatum 'd' #endif #ifndef PERL_MAGIC_env # define PERL_MAGIC_env 'E' #endif #ifndef PERL_MAGIC_envelem # define PERL_MAGIC_envelem 'e' #endif #ifndef PERL_MAGIC_fm # define PERL_MAGIC_fm 'f' #endif #ifndef PERL_MAGIC_regex_global # define PERL_MAGIC_regex_global 'g' #endif #ifndef PERL_MAGIC_isa # define PERL_MAGIC_isa 'I' #endif #ifndef PERL_MAGIC_isaelem # define PERL_MAGIC_isaelem 'i' #endif #ifndef PERL_MAGIC_nkeys # define PERL_MAGIC_nkeys 'k' #endif #ifndef PERL_MAGIC_dbfile # define PERL_MAGIC_dbfile 'L' #endif #ifndef PERL_MAGIC_dbline # define PERL_MAGIC_dbline 'l' #endif #ifndef PERL_MAGIC_mutex # define PERL_MAGIC_mutex 'm' #endif #ifndef PERL_MAGIC_shared # define PERL_MAGIC_shared 'N' #endif #ifndef PERL_MAGIC_shared_scalar # define PERL_MAGIC_shared_scalar 'n' #endif #ifndef PERL_MAGIC_collxfrm # define PERL_MAGIC_collxfrm 'o' #endif #ifndef PERL_MAGIC_tied # define PERL_MAGIC_tied 'P' #endif #ifndef PERL_MAGIC_tiedelem # define PERL_MAGIC_tiedelem 'p' #endif #ifndef PERL_MAGIC_tiedscalar # define PERL_MAGIC_tiedscalar 'q' #endif #ifndef PERL_MAGIC_qr # define PERL_MAGIC_qr 'r' #endif #ifndef PERL_MAGIC_sig # define PERL_MAGIC_sig 'S' #endif #ifndef PERL_MAGIC_sigelem # define PERL_MAGIC_sigelem 's' #endif #ifndef PERL_MAGIC_taint # define PERL_MAGIC_taint 't' #endif #ifndef PERL_MAGIC_uvar # define PERL_MAGIC_uvar 'U' #endif #ifndef PERL_MAGIC_uvar_elem # define PERL_MAGIC_uvar_elem 'u' #endif #ifndef PERL_MAGIC_vstring # define PERL_MAGIC_vstring 'V' #endif #ifndef PERL_MAGIC_vec # define PERL_MAGIC_vec 'v' #endif #ifndef PERL_MAGIC_utf8 # define PERL_MAGIC_utf8 'w' #endif #ifndef PERL_MAGIC_substr # define PERL_MAGIC_substr 'x' #endif #ifndef PERL_MAGIC_defelem # define PERL_MAGIC_defelem 'y' #endif #ifndef PERL_MAGIC_glob # define PERL_MAGIC_glob '*' #endif #ifndef PERL_MAGIC_arylen # define PERL_MAGIC_arylen '#' #endif #ifndef PERL_MAGIC_pos # define PERL_MAGIC_pos '.' #endif #ifndef PERL_MAGIC_backref # define PERL_MAGIC_backref '<' #endif #ifndef PERL_MAGIC_ext # define PERL_MAGIC_ext '~' #endif /* That's the best we can do... */ #ifndef SvPV_force_nomg # define SvPV_force_nomg SvPV_force #endif #ifndef SvPV_nomg # define SvPV_nomg SvPV #endif #ifndef sv_catpvn_nomg # define sv_catpvn_nomg sv_catpvn #endif #ifndef sv_catsv_nomg # define sv_catsv_nomg sv_catsv #endif #ifndef sv_setsv_nomg # define sv_setsv_nomg sv_setsv #endif #ifndef sv_pvn_nomg # define sv_pvn_nomg sv_pvn #endif #ifndef SvIV_nomg # define SvIV_nomg SvIV #endif #ifndef SvUV_nomg # define SvUV_nomg SvUV #endif #ifndef sv_catpv_mg # define sv_catpv_mg(sv, ptr) \ STMT_START { \ SV *TeMpSv = sv; \ sv_catpv(TeMpSv,ptr); \ SvSETMAGIC(TeMpSv); \ } STMT_END #endif #ifndef sv_catpvn_mg # define sv_catpvn_mg(sv, ptr, len) \ STMT_START { \ SV *TeMpSv = sv; \ sv_catpvn(TeMpSv,ptr,len); \ SvSETMAGIC(TeMpSv); \ } STMT_END #endif #ifndef sv_catsv_mg # define sv_catsv_mg(dsv, ssv) \ STMT_START { \ SV *TeMpSv = dsv; \ sv_catsv(TeMpSv,ssv); \ SvSETMAGIC(TeMpSv); \ } STMT_END #endif #ifndef sv_setiv_mg # define sv_setiv_mg(sv, i) \ STMT_START { \ SV *TeMpSv = sv; \ sv_setiv(TeMpSv,i); \ SvSETMAGIC(TeMpSv); \ } STMT_END #endif #ifndef sv_setnv_mg # define sv_setnv_mg(sv, num) \ STMT_START { \ SV *TeMpSv = sv; \ sv_setnv(TeMpSv,num); \ SvSETMAGIC(TeMpSv); \ } STMT_END #endif #ifndef sv_setpv_mg # define sv_setpv_mg(sv, ptr) \ STMT_START { \ SV *TeMpSv = sv; \ sv_setpv(TeMpSv,ptr); \ SvSETMAGIC(TeMpSv); \ } STMT_END #endif #ifndef sv_setpvn_mg # define sv_setpvn_mg(sv, ptr, len) \ STMT_START { \ SV *TeMpSv = sv; \ sv_setpvn(TeMpSv,ptr,len); \ SvSETMAGIC(TeMpSv); \ } STMT_END #endif #ifndef sv_setsv_mg # define sv_setsv_mg(dsv, ssv) \ STMT_START { \ SV *TeMpSv = dsv; \ sv_setsv(TeMpSv,ssv); \ SvSETMAGIC(TeMpSv); \ } STMT_END #endif #ifndef sv_setuv_mg # define sv_setuv_mg(sv, i) \ STMT_START { \ SV *TeMpSv = sv; \ sv_setuv(TeMpSv,i); \ SvSETMAGIC(TeMpSv); \ } STMT_END #endif #ifndef sv_usepvn_mg # define sv_usepvn_mg(sv, ptr, len) \ STMT_START { \ SV *TeMpSv = sv; \ sv_usepvn(TeMpSv,ptr,len); \ SvSETMAGIC(TeMpSv); \ } STMT_END #endif #ifdef USE_ITHREADS #ifndef CopFILE # define CopFILE(c) ((c)->cop_file) #endif #ifndef CopFILEGV # define CopFILEGV(c) (CopFILE(c) ? gv_fetchfile(CopFILE(c)) : Nullgv) #endif #ifndef CopFILE_set # define CopFILE_set(c,pv) ((c)->cop_file = savepv(pv)) #endif #ifndef CopFILESV # define CopFILESV(c) (CopFILE(c) ? GvSV(gv_fetchfile(CopFILE(c))) : Nullsv) #endif #ifndef CopFILEAV # define CopFILEAV(c) (CopFILE(c) ? GvAV(gv_fetchfile(CopFILE(c))) : Nullav) #endif #ifndef CopSTASHPV # define CopSTASHPV(c) ((c)->cop_stashpv) #endif #ifndef CopSTASHPV_set # define CopSTASHPV_set(c,pv) ((c)->cop_stashpv = ((pv) ? savepv(pv) : Nullch)) #endif #ifndef CopSTASH # define CopSTASH(c) (CopSTASHPV(c) ? gv_stashpv(CopSTASHPV(c),GV_ADD) : Nullhv) #endif #ifndef CopSTASH_set # define CopSTASH_set(c,hv) CopSTASHPV_set(c, (hv) ? HvNAME(hv) : Nullch) #endif #ifndef CopSTASH_eq # define CopSTASH_eq(c,hv) ((hv) && (CopSTASHPV(c) == HvNAME(hv) \ || (CopSTASHPV(c) && HvNAME(hv) \ && strEQ(CopSTASHPV(c), HvNAME(hv))))) #endif #else #ifndef CopFILEGV # define CopFILEGV(c) ((c)->cop_filegv) #endif #ifndef CopFILEGV_set # define CopFILEGV_set(c,gv) ((c)->cop_filegv = (GV*)SvREFCNT_inc(gv)) #endif #ifndef CopFILE_set # define CopFILE_set(c,pv) CopFILEGV_set((c), gv_fetchfile(pv)) #endif #ifndef CopFILESV # define CopFILESV(c) (CopFILEGV(c) ? GvSV(CopFILEGV(c)) : Nullsv) #endif #ifndef CopFILEAV # define CopFILEAV(c) (CopFILEGV(c) ? GvAV(CopFILEGV(c)) : Nullav) #endif #ifndef CopFILE # define CopFILE(c) (CopFILESV(c) ? SvPVX(CopFILESV(c)) : Nullch) #endif #ifndef CopSTASH # define CopSTASH(c) ((c)->cop_stash) #endif #ifndef CopSTASH_set # define CopSTASH_set(c,hv) ((c)->cop_stash = (hv)) #endif #ifndef CopSTASHPV # define CopSTASHPV(c) (CopSTASH(c) ? HvNAME(CopSTASH(c)) : Nullch) #endif #ifndef CopSTASHPV_set # define CopSTASHPV_set(c,pv) CopSTASH_set((c), gv_stashpv(pv,GV_ADD)) #endif #ifndef CopSTASH_eq # define CopSTASH_eq(c,hv) (CopSTASH(c) == (hv)) #endif #endif /* USE_ITHREADS */ #ifndef IN_PERL_COMPILETIME # define IN_PERL_COMPILETIME (PL_curcop == &PL_compiling) #endif #ifndef IN_LOCALE_RUNTIME # define IN_LOCALE_RUNTIME (PL_curcop->op_private & HINT_LOCALE) #endif #ifndef IN_LOCALE_COMPILETIME # define IN_LOCALE_COMPILETIME (PL_hints & HINT_LOCALE) #endif #ifndef IN_LOCALE # define IN_LOCALE (IN_PERL_COMPILETIME ? IN_LOCALE_COMPILETIME : IN_LOCALE_RUNTIME) #endif #ifndef IS_NUMBER_IN_UV # define IS_NUMBER_IN_UV 0x01 #endif #ifndef IS_NUMBER_GREATER_THAN_UV_MAX # define IS_NUMBER_GREATER_THAN_UV_MAX 0x02 #endif #ifndef IS_NUMBER_NOT_INT # define IS_NUMBER_NOT_INT 0x04 #endif #ifndef IS_NUMBER_NEG # define IS_NUMBER_NEG 0x08 #endif #ifndef IS_NUMBER_INFINITY # define IS_NUMBER_INFINITY 0x10 #endif #ifndef IS_NUMBER_NAN # define IS_NUMBER_NAN 0x20 #endif /* GROK_NUMERIC_RADIX depends on grok_numeric_radix */ #ifndef GROK_NUMERIC_RADIX # define GROK_NUMERIC_RADIX(sp, send) grok_numeric_radix(sp, send) #endif #ifndef PERL_SCAN_GREATER_THAN_UV_MAX # define PERL_SCAN_GREATER_THAN_UV_MAX 0x02 #endif #ifndef PERL_SCAN_SILENT_ILLDIGIT # define PERL_SCAN_SILENT_ILLDIGIT 0x04 #endif #ifndef PERL_SCAN_ALLOW_UNDERSCORES # define PERL_SCAN_ALLOW_UNDERSCORES 0x01 #endif #ifndef PERL_SCAN_DISALLOW_PREFIX # define PERL_SCAN_DISALLOW_PREFIX 0x02 #endif #ifndef grok_numeric_radix #if defined(NEED_grok_numeric_radix) static bool DPPP_(my_grok_numeric_radix)(pTHX_ const char ** sp, const char * send); static #else extern bool DPPP_(my_grok_numeric_radix)(pTHX_ const char ** sp, const char * send); #endif #ifdef grok_numeric_radix # undef grok_numeric_radix #endif #define grok_numeric_radix(a,b) DPPP_(my_grok_numeric_radix)(aTHX_ a,b) #define Perl_grok_numeric_radix DPPP_(my_grok_numeric_radix) #if defined(NEED_grok_numeric_radix) || defined(NEED_grok_numeric_radix_GLOBAL) bool DPPP_(my_grok_numeric_radix)(pTHX_ const char **sp, const char *send) { #ifdef USE_LOCALE_NUMERIC #ifdef PL_numeric_radix_sv if (PL_numeric_radix_sv && IN_LOCALE) { STRLEN len; char* radix = SvPV(PL_numeric_radix_sv, len); if (*sp + len <= send && memEQ(*sp, radix, len)) { *sp += len; return TRUE; } } #else /* older perls don't have PL_numeric_radix_sv so the radix * must manually be requested from locale.h */ #include dTHR; /* needed for older threaded perls */ struct lconv *lc = localeconv(); char *radix = lc->decimal_point; if (radix && IN_LOCALE) { STRLEN len = strlen(radix); if (*sp + len <= send && memEQ(*sp, radix, len)) { *sp += len; return TRUE; } } #endif /* PERL_VERSION */ #endif /* USE_LOCALE_NUMERIC */ /* always try "." if numeric radix didn't match because * we may have data from different locales mixed */ if (*sp < send && **sp == '.') { ++*sp; return TRUE; } return FALSE; } #endif #endif /* grok_number depends on grok_numeric_radix */ #ifndef grok_number #if defined(NEED_grok_number) static int DPPP_(my_grok_number)(pTHX_ const char * pv, STRLEN len, UV * valuep); static #else extern int DPPP_(my_grok_number)(pTHX_ const char * pv, STRLEN len, UV * valuep); #endif #ifdef grok_number # undef grok_number #endif #define grok_number(a,b,c) DPPP_(my_grok_number)(aTHX_ a,b,c) #define Perl_grok_number DPPP_(my_grok_number) #if defined(NEED_grok_number) || defined(NEED_grok_number_GLOBAL) int DPPP_(my_grok_number)(pTHX_ const char *pv, STRLEN len, UV *valuep) { const char *s = pv; const char *send = pv + len; const UV max_div_10 = UV_MAX / 10; const char max_mod_10 = UV_MAX % 10; int numtype = 0; int sawinf = 0; int sawnan = 0; while (s < send && isSPACE(*s)) s++; if (s == send) { return 0; } else if (*s == '-') { s++; numtype = IS_NUMBER_NEG; } else if (*s == '+') s++; if (s == send) return 0; /* next must be digit or the radix separator or beginning of infinity */ if (isDIGIT(*s)) { /* UVs are at least 32 bits, so the first 9 decimal digits cannot overflow. */ UV value = *s - '0'; /* This construction seems to be more optimiser friendly. (without it gcc does the isDIGIT test and the *s - '0' separately) With it gcc on arm is managing 6 instructions (6 cycles) per digit. In theory the optimiser could deduce how far to unroll the loop before checking for overflow. */ if (++s < send) { int digit = *s - '0'; if (digit >= 0 && digit <= 9) { value = value * 10 + digit; if (++s < send) { digit = *s - '0'; if (digit >= 0 && digit <= 9) { value = value * 10 + digit; if (++s < send) { digit = *s - '0'; if (digit >= 0 && digit <= 9) { value = value * 10 + digit; if (++s < send) { digit = *s - '0'; if (digit >= 0 && digit <= 9) { value = value * 10 + digit; if (++s < send) { digit = *s - '0'; if (digit >= 0 && digit <= 9) { value = value * 10 + digit; if (++s < send) { digit = *s - '0'; if (digit >= 0 && digit <= 9) { value = value * 10 + digit; if (++s < send) { digit = *s - '0'; if (digit >= 0 && digit <= 9) { value = value * 10 + digit; if (++s < send) { digit = *s - '0'; if (digit >= 0 && digit <= 9) { value = value * 10 + digit; if (++s < send) { /* Now got 9 digits, so need to check each time for overflow. */ digit = *s - '0'; while (digit >= 0 && digit <= 9 && (value < max_div_10 || (value == max_div_10 && digit <= max_mod_10))) { value = value * 10 + digit; if (++s < send) digit = *s - '0'; else break; } if (digit >= 0 && digit <= 9 && (s < send)) { /* value overflowed. skip the remaining digits, don't worry about setting *valuep. */ do { s++; } while (s < send && isDIGIT(*s)); numtype |= IS_NUMBER_GREATER_THAN_UV_MAX; goto skip_value; } } } } } } } } } } } } } } } } } } numtype |= IS_NUMBER_IN_UV; if (valuep) *valuep = value; skip_value: if (GROK_NUMERIC_RADIX(&s, send)) { numtype |= IS_NUMBER_NOT_INT; while (s < send && isDIGIT(*s)) /* optional digits after the radix */ s++; } } else if (GROK_NUMERIC_RADIX(&s, send)) { numtype |= IS_NUMBER_NOT_INT | IS_NUMBER_IN_UV; /* valuep assigned below */ /* no digits before the radix means we need digits after it */ if (s < send && isDIGIT(*s)) { do { s++; } while (s < send && isDIGIT(*s)); if (valuep) { /* integer approximation is valid - it's 0. */ *valuep = 0; } } else return 0; } else if (*s == 'I' || *s == 'i') { s++; if (s == send || (*s != 'N' && *s != 'n')) return 0; s++; if (s == send || (*s != 'F' && *s != 'f')) return 0; s++; if (s < send && (*s == 'I' || *s == 'i')) { s++; if (s == send || (*s != 'N' && *s != 'n')) return 0; s++; if (s == send || (*s != 'I' && *s != 'i')) return 0; s++; if (s == send || (*s != 'T' && *s != 't')) return 0; s++; if (s == send || (*s != 'Y' && *s != 'y')) return 0; s++; } sawinf = 1; } else if (*s == 'N' || *s == 'n') { /* XXX TODO: There are signaling NaNs and quiet NaNs. */ s++; if (s == send || (*s != 'A' && *s != 'a')) return 0; s++; if (s == send || (*s != 'N' && *s != 'n')) return 0; s++; sawnan = 1; } else return 0; if (sawinf) { numtype &= IS_NUMBER_NEG; /* Keep track of sign */ numtype |= IS_NUMBER_INFINITY | IS_NUMBER_NOT_INT; } else if (sawnan) { numtype &= IS_NUMBER_NEG; /* Keep track of sign */ numtype |= IS_NUMBER_NAN | IS_NUMBER_NOT_INT; } else if (s < send) { /* we can have an optional exponent part */ if (*s == 'e' || *s == 'E') { /* The only flag we keep is sign. Blow away any "it's UV" */ numtype &= IS_NUMBER_NEG; numtype |= IS_NUMBER_NOT_INT; s++; if (s < send && (*s == '-' || *s == '+')) s++; if (s < send && isDIGIT(*s)) { do { s++; } while (s < send && isDIGIT(*s)); } else return 0; } } while (s < send && isSPACE(*s)) s++; if (s >= send) return numtype; if (len == 10 && memEQ(pv, "0 but true", 10)) { if (valuep) *valuep = 0; return IS_NUMBER_IN_UV; } return 0; } #endif #endif /* * The grok_* routines have been modified to use warn() instead of * Perl_warner(). Also, 'hexdigit' was the former name of PL_hexdigit, * which is why the stack variable has been renamed to 'xdigit'. */ #ifndef grok_bin #if defined(NEED_grok_bin) static UV DPPP_(my_grok_bin)(pTHX_ char *start, STRLEN *len_p, I32 *flags, NV *result); static #else extern UV DPPP_(my_grok_bin)(pTHX_ char *start, STRLEN *len_p, I32 *flags, NV *result); #endif #ifdef grok_bin # undef grok_bin #endif #define grok_bin(a,b,c,d) DPPP_(my_grok_bin)(aTHX_ a,b,c,d) #define Perl_grok_bin DPPP_(my_grok_bin) #if defined(NEED_grok_bin) || defined(NEED_grok_bin_GLOBAL) UV DPPP_(my_grok_bin)(pTHX_ char *start, STRLEN *len_p, I32 *flags, NV *result) { const char *s = start; STRLEN len = *len_p; UV value = 0; NV value_nv = 0; const UV max_div_2 = UV_MAX / 2; bool allow_underscores = *flags & PERL_SCAN_ALLOW_UNDERSCORES; bool overflowed = FALSE; if (!(*flags & PERL_SCAN_DISALLOW_PREFIX)) { /* strip off leading b or 0b. for compatibility silently suffer "b" and "0b" as valid binary numbers. */ if (len >= 1) { if (s[0] == 'b') { s++; len--; } else if (len >= 2 && s[0] == '0' && s[1] == 'b') { s+=2; len-=2; } } } for (; len-- && *s; s++) { char bit = *s; if (bit == '0' || bit == '1') { /* Write it in this wonky order with a goto to attempt to get the compiler to make the common case integer-only loop pretty tight. With gcc seems to be much straighter code than old scan_bin. */ redo: if (!overflowed) { if (value <= max_div_2) { value = (value << 1) | (bit - '0'); continue; } /* Bah. We're just overflowed. */ warn("Integer overflow in binary number"); overflowed = TRUE; value_nv = (NV) value; } value_nv *= 2.0; /* If an NV has not enough bits in its mantissa to * represent a UV this summing of small low-order numbers * is a waste of time (because the NV cannot preserve * the low-order bits anyway): we could just remember when * did we overflow and in the end just multiply value_nv by the * right amount. */ value_nv += (NV)(bit - '0'); continue; } if (bit == '_' && len && allow_underscores && (bit = s[1]) && (bit == '0' || bit == '1')) { --len; ++s; goto redo; } if (!(*flags & PERL_SCAN_SILENT_ILLDIGIT)) warn("Illegal binary digit '%c' ignored", *s); break; } if ( ( overflowed && value_nv > 4294967295.0) #if UVSIZE > 4 || (!overflowed && value > 0xffffffff ) #endif ) { warn("Binary number > 0b11111111111111111111111111111111 non-portable"); } *len_p = s - start; if (!overflowed) { *flags = 0; return value; } *flags = PERL_SCAN_GREATER_THAN_UV_MAX; if (result) *result = value_nv; return UV_MAX; } #endif #endif #ifndef grok_hex #if defined(NEED_grok_hex) static UV DPPP_(my_grok_hex)(pTHX_ char *start, STRLEN *len_p, I32 *flags, NV *result); static #else extern UV DPPP_(my_grok_hex)(pTHX_ char *start, STRLEN *len_p, I32 *flags, NV *result); #endif #ifdef grok_hex # undef grok_hex #endif #define grok_hex(a,b,c,d) DPPP_(my_grok_hex)(aTHX_ a,b,c,d) #define Perl_grok_hex DPPP_(my_grok_hex) #if defined(NEED_grok_hex) || defined(NEED_grok_hex_GLOBAL) UV DPPP_(my_grok_hex)(pTHX_ char *start, STRLEN *len_p, I32 *flags, NV *result) { const char *s = start; STRLEN len = *len_p; UV value = 0; NV value_nv = 0; const UV max_div_16 = UV_MAX / 16; bool allow_underscores = *flags & PERL_SCAN_ALLOW_UNDERSCORES; bool overflowed = FALSE; const char *xdigit; if (!(*flags & PERL_SCAN_DISALLOW_PREFIX)) { /* strip off leading x or 0x. for compatibility silently suffer "x" and "0x" as valid hex numbers. */ if (len >= 1) { if (s[0] == 'x') { s++; len--; } else if (len >= 2 && s[0] == '0' && s[1] == 'x') { s+=2; len-=2; } } } for (; len-- && *s; s++) { xdigit = strchr((char *) PL_hexdigit, *s); if (xdigit) { /* Write it in this wonky order with a goto to attempt to get the compiler to make the common case integer-only loop pretty tight. With gcc seems to be much straighter code than old scan_hex. */ redo: if (!overflowed) { if (value <= max_div_16) { value = (value << 4) | ((xdigit - PL_hexdigit) & 15); continue; } warn("Integer overflow in hexadecimal number"); overflowed = TRUE; value_nv = (NV) value; } value_nv *= 16.0; /* If an NV has not enough bits in its mantissa to * represent a UV this summing of small low-order numbers * is a waste of time (because the NV cannot preserve * the low-order bits anyway): we could just remember when * did we overflow and in the end just multiply value_nv by the * right amount of 16-tuples. */ value_nv += (NV)((xdigit - PL_hexdigit) & 15); continue; } if (*s == '_' && len && allow_underscores && s[1] && (xdigit = strchr((char *) PL_hexdigit, s[1]))) { --len; ++s; goto redo; } if (!(*flags & PERL_SCAN_SILENT_ILLDIGIT)) warn("Illegal hexadecimal digit '%c' ignored", *s); break; } if ( ( overflowed && value_nv > 4294967295.0) #if UVSIZE > 4 || (!overflowed && value > 0xffffffff ) #endif ) { warn("Hexadecimal number > 0xffffffff non-portable"); } *len_p = s - start; if (!overflowed) { *flags = 0; return value; } *flags = PERL_SCAN_GREATER_THAN_UV_MAX; if (result) *result = value_nv; return UV_MAX; } #endif #endif #ifndef grok_oct #if defined(NEED_grok_oct) static UV DPPP_(my_grok_oct)(pTHX_ char *start, STRLEN *len_p, I32 *flags, NV *result); static #else extern UV DPPP_(my_grok_oct)(pTHX_ char *start, STRLEN *len_p, I32 *flags, NV *result); #endif #ifdef grok_oct # undef grok_oct #endif #define grok_oct(a,b,c,d) DPPP_(my_grok_oct)(aTHX_ a,b,c,d) #define Perl_grok_oct DPPP_(my_grok_oct) #if defined(NEED_grok_oct) || defined(NEED_grok_oct_GLOBAL) UV DPPP_(my_grok_oct)(pTHX_ char *start, STRLEN *len_p, I32 *flags, NV *result) { const char *s = start; STRLEN len = *len_p; UV value = 0; NV value_nv = 0; const UV max_div_8 = UV_MAX / 8; bool allow_underscores = *flags & PERL_SCAN_ALLOW_UNDERSCORES; bool overflowed = FALSE; for (; len-- && *s; s++) { /* gcc 2.95 optimiser not smart enough to figure that this subtraction out front allows slicker code. */ int digit = *s - '0'; if (digit >= 0 && digit <= 7) { /* Write it in this wonky order with a goto to attempt to get the compiler to make the common case integer-only loop pretty tight. */ redo: if (!overflowed) { if (value <= max_div_8) { value = (value << 3) | digit; continue; } /* Bah. We're just overflowed. */ warn("Integer overflow in octal number"); overflowed = TRUE; value_nv = (NV) value; } value_nv *= 8.0; /* If an NV has not enough bits in its mantissa to * represent a UV this summing of small low-order numbers * is a waste of time (because the NV cannot preserve * the low-order bits anyway): we could just remember when * did we overflow and in the end just multiply value_nv by the * right amount of 8-tuples. */ value_nv += (NV)digit; continue; } if (digit == ('_' - '0') && len && allow_underscores && (digit = s[1] - '0') && (digit >= 0 && digit <= 7)) { --len; ++s; goto redo; } /* Allow \octal to work the DWIM way (that is, stop scanning * as soon as non-octal characters are seen, complain only iff * someone seems to want to use the digits eight and nine). */ if (digit == 8 || digit == 9) { if (!(*flags & PERL_SCAN_SILENT_ILLDIGIT)) warn("Illegal octal digit '%c' ignored", *s); } break; } if ( ( overflowed && value_nv > 4294967295.0) #if UVSIZE > 4 || (!overflowed && value > 0xffffffff ) #endif ) { warn("Octal number > 037777777777 non-portable"); } *len_p = s - start; if (!overflowed) { *flags = 0; return value; } *flags = PERL_SCAN_GREATER_THAN_UV_MAX; if (result) *result = value_nv; return UV_MAX; } #endif #endif #ifdef NO_XSLOCKS # ifdef dJMPENV # define dXCPT dJMPENV; int rEtV = 0 # define XCPT_TRY_START JMPENV_PUSH(rEtV); if (rEtV == 0) # define XCPT_TRY_END JMPENV_POP; # define XCPT_CATCH if (rEtV != 0) # define XCPT_RETHROW JMPENV_JUMP(rEtV) # else # define dXCPT Sigjmp_buf oldTOP; int rEtV = 0 # define XCPT_TRY_START Copy(top_env, oldTOP, 1, Sigjmp_buf); rEtV = Sigsetjmp(top_env, 1); if (rEtV == 0) # define XCPT_TRY_END Copy(oldTOP, top_env, 1, Sigjmp_buf); # define XCPT_CATCH if (rEtV != 0) # define XCPT_RETHROW Siglongjmp(top_env, rEtV) # endif #endif #endif /* _P_P_PORTABILITY_H_ */ /* End of File ppport.h */ libapreq2-2.17/glue/perl/xsbuilder/tables/APR/Request/CallbackTable.pm0000644000175000017500000000047714277402430025174 0ustar jortonjortonpackage APR::Request::CallbackTable; # !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! # ! WARNING: generated by My::ParseSource/ # ! Thu Aug 18 10:23:36 2022 # ! do NOT edit, any changes will be lost ! # !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! $APR::Request::CallbackTable = []; 1; libapreq2-2.17/glue/perl/xsbuilder/tables/APR/Request/ConstantsTable.pm0000644000175000017500000001631014277402430025445 0ustar jortonjortonpackage APR::Request::ConstantsTable; # !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! # ! WARNING: generated by My::ParseSource/ # ! Thu Aug 18 10:23:36 2022 # ! do NOT edit, any changes will be lost ! # !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! $APR::Request::ConstantsTable = [ { 'name' => 'APREQ_APACHE2_H' }, { 'name' => 'APREQ_APACHE2_MMN' }, { 'name' => 'APREQ_CHARSET_BIT' }, { 'name' => 'APREQ_CHARSET_MASK' }, { 'name' => 'APREQ_COOKIE_H' }, { 'name' => 'APREQ_COOKIE_HTTPONLY_BIT' }, { 'name' => 'APREQ_COOKIE_HTTPONLY_MASK' }, { 'name' => 'APREQ_COOKIE_MAX_LENGTH' }, { 'name' => 'APREQ_COOKIE_SECURE_BIT' }, { 'name' => 'APREQ_COOKIE_SECURE_MASK' }, { 'name' => 'APREQ_COOKIE_VERSION_BIT' }, { 'name' => 'APREQ_COOKIE_VERSION_MASK' }, { 'name' => 'APREQ_DECLARE_DATA' }, { 'name' => 'APREQ_DECLARE_DATA' }, { 'name' => 'APREQ_DECLARE_DATA' }, { 'name' => 'APREQ_DECLARE_DATA' }, { 'name' => 'APREQ_DECLARE_NONSTD' }, { 'name' => 'APREQ_DECLARE_NONSTD' }, { 'name' => 'APREQ_DECLARE_NONSTD' }, { 'name' => 'APREQ_DECLARE_NONSTD' }, { 'name' => 'APREQ_DECLARE_NONSTD' }, { 'name' => 'APREQ_DECLARE_NONSTD' }, { 'name' => 'APREQ_DEFAULT_BRIGADE_LIMIT' }, { 'name' => 'APREQ_DEFAULT_NELTS' }, { 'name' => 'APREQ_DEFAULT_READ_BLOCK_SIZE' }, { 'name' => 'APREQ_DEFAULT_READ_LIMIT' }, { 'name' => 'APREQ_ERROR_BADATTR' }, { 'name' => 'APREQ_ERROR_BADCHAR' }, { 'name' => 'APREQ_ERROR_BADDATA' }, { 'name' => 'APREQ_ERROR_BADHEADER' }, { 'name' => 'APREQ_ERROR_BADSEQ' }, { 'name' => 'APREQ_ERROR_BADUTF8' }, { 'name' => 'APREQ_ERROR_GENERAL' }, { 'name' => 'APREQ_ERROR_H' }, { 'name' => 'APREQ_ERROR_INTERRUPT' }, { 'name' => 'APREQ_ERROR_MISMATCH' }, { 'name' => 'APREQ_ERROR_NOATTR' }, { 'name' => 'APREQ_ERROR_NODATA' }, { 'name' => 'APREQ_ERROR_NOHEADER' }, { 'name' => 'APREQ_ERROR_NOPARSER' }, { 'name' => 'APREQ_ERROR_NOTEMPTY' }, { 'name' => 'APREQ_ERROR_NOTOKEN' }, { 'name' => 'APREQ_ERROR_OVERLIMIT' }, { 'name' => 'APREQ_ERROR_TAINTED' }, { 'name' => 'APREQ_ERROR_UNDERLIMIT' }, { 'name' => 'APREQ_EXPIRES_HTTP', 'comment' => '*< Use date formatting consistent with RFC 2616' }, { 'name' => 'APREQ_EXPIRES_NSCOOKIE', 'comment' => '*< Use format consistent with Netscape\'s Cookie Spec' }, { 'name' => 'APREQ_FILTER_NAME' }, { 'name' => 'APREQ_FLAGS_GET' }, { 'name' => 'APREQ_FLAGS_OFF' }, { 'name' => 'APREQ_FLAGS_ON' }, { 'name' => 'APREQ_FLAGS_SET' }, { 'name' => 'APREQ_H' }, { 'name' => 'APREQ_HOOK_ARGS' }, { 'name' => 'APREQ_IS_DEV_STRING' }, { 'name' => 'APREQ_IS_DEV_STRING' }, { 'name' => 'APREQ_JOIN_AS_IS', 'comment' => '*< Join the strings without modification' }, { 'name' => 'APREQ_JOIN_DECODE', 'comment' => '*< Url-decode the strings before joining them' }, { 'name' => 'APREQ_JOIN_ENCODE', 'comment' => '*< Url-encode the strings before joining them' }, { 'name' => 'APREQ_JOIN_QUOTE', 'comment' => '*< Quote the strings, backslashing existing quote marks.' }, { 'name' => 'APREQ_MAJOR_VERSION' }, { 'name' => 'APREQ_MATCH_FULL', 'comment' => '*< Full match only.' }, { 'name' => 'APREQ_MATCH_PARTIAL', 'comment' => '*< Partial matches are ok.' }, { 'name' => 'APREQ_MINOR_VERSION' }, { 'name' => 'APREQ_MODULE' }, { 'name' => 'APREQ_MODULE_H' }, { 'name' => 'APREQ_PARAM_H' }, { 'name' => 'APREQ_PARSERS_H', 'comment' => 'These structs are defined below' }, { 'name' => 'APREQ_PARSER_ARGS' }, { 'name' => 'APREQ_PATCH_VERSION' }, { 'name' => 'APREQ_TAINTED_BIT' }, { 'name' => 'APREQ_TAINTED_MASK' }, { 'name' => 'APREQ_UTIL_H' }, { 'name' => 'APREQ_VERSION_H' }, { 'name' => 'APREQ_VERSION_STRING' }, { 'name' => 'APREQ_XS_POSTPERL_H', 'comment' => 'avoid namespace collisions from perl\'s XSUB.h' }, { 'name' => 'APREQ_XS_PREPERL_H', 'comment' => 'we want efficiency under ithreads' }, { 'name' => 'APREQ_XS_TABLES_H', 'comment' => 'backward compatibility macros support' }, { 'name' => 'APR_EBADARG', 'comment' => 'XXX: don\'t use APR_BADARG' }, { 'name' => 'APR__BucketAlloc' }, { 'name' => 'APR__Request__Param__Table' }, { 'name' => 'COOKIE_CLASS' }, { 'name' => 'COOKIE_TABLE_CLASS' }, { 'name' => 'DEREF' }, { 'name' => 'DPPP_' }, { 'name' => 'DPPP_CAT2' }, { 'name' => 'ERROR_CLASS' }, { 'name' => 'HANDLE_CLASS' }, { 'name' => 'MY_CXT' }, { 'name' => 'MY_CXT' }, { 'name' => 'MY_CXT_CLONE' }, { 'name' => 'MY_CXT_CLONE' }, { 'name' => 'MY_CXT_INIT' }, { 'name' => 'MY_CXT_INIT' }, { 'name' => 'PARAM_CLASS' }, { 'name' => 'PARAM_TABLE_CLASS' }, { 'name' => 'PERL_BCDVERSION' }, { 'name' => 'Perl_eval_pv' }, { 'name' => 'Perl_grok_bin' }, { 'name' => 'Perl_grok_hex' }, { 'name' => 'Perl_grok_number' }, { 'name' => 'Perl_grok_numeric_radix' }, { 'name' => 'Perl_grok_oct' }, { 'name' => 'Perl_newCONSTSUB' }, { 'name' => 'Perl_newRV_noinc' }, { 'name' => 'Perl_sv_2pv_nolen' }, { 'name' => 'Perl_sv_2pvbyte' }, { 'name' => 'Perl_sv_catpvf_mg' }, { 'name' => 'Perl_sv_catpvf_mg_nocontext' }, { 'name' => 'Perl_sv_setpvf_mg' }, { 'name' => 'Perl_sv_setpvf_mg_nocontext' }, { 'name' => 'Perl_vnewSVpvf' }, { 'name' => 'START_MY_CXT' }, { 'name' => 'START_MY_CXT' }, { 'name' => 'SvPV_nolen' }, { 'name' => 'SvPVbyte' }, { 'name' => '_P_P_PORTABILITY_H_' }, { 'name' => '_aMY_CXT' }, { 'name' => '_aMY_CXT', 'comment' => 'START_MY_CXT' }, { 'name' => '_pMY_CXT' }, { 'name' => 'aMY_CXT' }, { 'name' => 'aMY_CXT' }, { 'name' => 'aMY_CXT_' }, { 'name' => 'apreq_attr_to_type' }, { 'name' => 'apreq_cookie' }, { 'name' => 'd' }, { 'name' => 'dMY_CXT' }, { 'name' => 'dMY_CXT' }, { 'name' => 'dMY_CXT_SV' }, { 'name' => 'dMY_CXT_SV' }, { 'name' => 'dMY_CXT_SV' }, { 'name' => 'eval_pv' }, { 'name' => 'grok_bin' }, { 'name' => 'grok_hex' }, { 'name' => 'grok_number' }, { 'name' => 'grok_numeric_radix' }, { 'name' => 'grok_oct' }, { 'name' => 'newCONSTSUB' }, { 'name' => 'newRV_noinc' }, { 'name' => 'pMY_CXT' }, { 'name' => 'pMY_CXT' }, { 'name' => 'pMY_CXT_' }, { 'name' => 'pMY_CXT_' }, { 'name' => 'sv_2pv_nolen' }, { 'name' => 'sv_2pvbyte' }, { 'name' => 'sv_catpvf_mg_nocontext' }, { 'name' => 'sv_setpvf_mg_nocontext' }, { 'name' => 'type' }, { 'name' => 'type' }, { 'name' => 'type' }, { 'name' => 'vnewSVpvf' } ]; 1; libapreq2-2.17/glue/perl/xsbuilder/tables/APR/Request/FunctionTable.pm0000644000175000017500000020603114277402430025257 0ustar jortonjortonpackage APR::Request::FunctionTable; # !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! # ! WARNING: generated by My::ParseSource/ # ! Thu Aug 18 10:23:36 2022 # ! do NOT edit, any changes will be lost ! # !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! $APR::Request::FunctionTable = [ { 'return_type' => 'return', 'name' => 'INT2PTR', 'args' => [ { 'type' => 'apreq_handle_t *', 'name' => 'arg0' }, { 'type' => 'iv', 'name' => 'arg1' } ] }, { 'return_type' => 'return', 'name' => 'SvPV_nolen', 'args' => [ { 'type' => 'sv', 'name' => 'arg0' } ] }, { 'return_type' => 'return', 'name' => 'SvRV', 'args' => [ { 'type' => 'sv', 'name' => 'arg0' } ] }, { 'return_type' => 'else', 'name' => 'XSRETURN', 'args' => [ { 'type' => '0', 'name' => 'arg0' } ] }, { 'return_type' => 'MP_STATIC void', 'name' => 'XS_APR__Request__Cookie_nil', 'args' => [] }, { 'return_type' => 'MP_STATIC void', 'name' => 'XS_APR__Request__Error_nil', 'args' => [] }, { 'return_type' => 'MP_STATIC void', 'name' => 'XS_APR__Request__Param_nil', 'args' => [] }, { 'return_type' => 'return', 'name' => 'apr_pstrmemdup', 'args' => [ { 'type' => 'p', 'name' => 'arg0' }, { 'type' => 'v', 'name' => 'arg1' }, { 'type' => 'vlen', 'name' => 'arg2' } ] }, { 'return_type' => 'apr_status_t', 'name' => 'apreq_args', 'comment' => '* * Expose the parsed "query string" associated to this handle. * * @param req The request handle * @param t The resulting table, which will either be NULL or a * valid table object on return. * * @return APR_SUCCESS or a module-specific error status code.', 'args' => [ { 'type' => 'apreq_handle_t *', 'name' => 'req' }, { 'type' => 'const apr_table_t * *', 'name' => 't' } ] }, { 'return_type' => 'apreq_param_t *', 'name' => 'apreq_args_get', 'comment' => '* * Fetch the first query string param with the given name. * * @param req The request handle * @param name Case-insensitive param name. * * @return First matching param, or NULL if none match.', 'args' => [ { 'type' => 'apreq_handle_t *', 'name' => 'req' }, { 'type' => 'const char *', 'name' => 'name' } ] }, { 'return_type' => 'apr_int64_t', 'name' => 'apreq_atoi64f', 'comment' => '* * Converts file sizes (KMG) to bytes * * @param s file size matching m/^\\\\d+[KMG]b?$/i * * @return 64-bit integer representation of s. * * @todo What happens when s is malformed? Should this return * an unsigned value instead?', 'args' => [ { 'type' => 'const char *', 'name' => 's' } ] }, { 'return_type' => 'apr_int64_t', 'name' => 'apreq_atoi64t', 'comment' => '* * Converts time strings (YMDhms) to seconds * * @param s time string matching m/^\\\\+?\\\\d+[YMDhms]$/ * * @return 64-bit integer representation of s as seconds. * * @todo What happens when s is malformed? Should this return * an unsigned value instead?', 'args' => [ { 'type' => 'const char *', 'name' => 's' } ] }, { 'return_type' => 'apr_status_t', 'name' => 'apreq_body', 'comment' => '* * Expose the parsed "request body" associated to this handle. * * @param req The request handle * @param t The resulting table, which will either be NULL or a * valid table object on return. * * @return APR_SUCCESS or a module-specific error status code.', 'args' => [ { 'type' => 'apreq_handle_t *', 'name' => 'req' }, { 'type' => 'const apr_table_t * *', 'name' => 't' } ] }, { 'return_type' => 'apreq_param_t *', 'name' => 'apreq_body_get', 'comment' => '* * Fetch the first body param with the given name. * * @param req The request handle * @param name Case-insensitive cookie name. * * @return First matching param, or NULL if none match.', 'args' => [ { 'type' => 'apreq_handle_t *', 'name' => 'req' }, { 'type' => 'const char *', 'name' => 'name' } ] }, { 'return_type' => 'apr_status_t', 'name' => 'apreq_brigade_concat', 'comment' => '* * Concatenates the brigades, spooling large brigades into * a tempfile (APREQ_SPOOL) bucket. * * @param pool Pool for creating a tempfile bucket. * @param temp_dir Directory for tempfile creation. * @param brigade_limit If out\'s length would exceed this value, * the appended buckets get written to a tempfile. * @param out Resulting brigade. * @param in Brigade to append. * * @return APR_SUCCESS. * @return Error status code resulting from either apr_brigade_length(), * apreq_file_mktemp(), apreq_brigade_fwrite(), or apr_file_seek(). * * @todo Flesh out these error codes, making them as explicit as possible.', 'args' => [ { 'type' => 'apr_pool_t *', 'name' => 'pool' }, { 'type' => 'const char *', 'name' => 'temp_dir' }, { 'type' => 'apr_size_t', 'name' => 'brigade_limit' }, { 'type' => 'apr_bucket_brigade *', 'name' => 'out' }, { 'type' => 'apr_bucket_brigade *', 'name' => 'in' } ] }, { 'return_type' => 'apr_status_t', 'name' => 'apreq_brigade_copy', 'comment' => '* * Copy a brigade. * * @param d (destination) Copied buckets are appended to this brigade. * @param s (source) Brigade to copy from. * * @return APR_SUCCESS. * @return Error status code from an unsuccessful apr_bucket_copy(). * * @remarks s == d produces Undefined Behavior.', 'args' => [ { 'type' => 'apr_bucket_brigade *', 'name' => 'd' }, { 'type' => 'apr_bucket_brigade *', 'name' => 's' } ] }, { 'return_type' => 'apr_status_t', 'name' => 'apreq_brigade_fwrite', 'comment' => '* * Writes brigade to a file. * * @param f File that gets the brigade. * @param wlen On a successful return, wlen holds the length of * the brigade, which is the amount of data written to * the file. * @param bb Bucket brigade. * * @return APR_SUCCESS. * @return Error status code from either an unsuccessful apr_bucket_read(), * or a failed apr_file_writev(). * * @remarks This function leaks a bucket brigade into bb->p whenever * the final bucket in bb is a spool bucket.', 'args' => [ { 'type' => 'apr_file_t *', 'name' => 'f' }, { 'type' => 'apr_off_t *', 'name' => 'wlen' }, { 'type' => 'apr_bucket_brigade *', 'name' => 'bb' } ] }, { 'return_type' => 'apr_status_t', 'name' => 'apreq_brigade_limit_get', 'comment' => '* * Get the active brigade limit. * * @param req The handle. * @param bytes Pointer to resulting (current) limit. * * @return APR_SUCCESS or a module-specific error, * which may leave bytes undefined.', 'args' => [ { 'type' => 'apreq_handle_t *', 'name' => 'req' }, { 'type' => 'apr_size_t *', 'name' => 'bytes' } ] }, { 'return_type' => 'apr_status_t', 'name' => 'apreq_brigade_limit_set', 'comment' => '* * Set the active brigade limit. * * @param req The handle. * @param bytes New limit to use. * * @return APR_SUCCESS or module-specific error. *', 'args' => [ { 'type' => 'apreq_handle_t *', 'name' => 'req' }, { 'type' => 'apr_size_t', 'name' => 'bytes' } ] }, { 'return_type' => 'void', 'name' => 'apreq_brigade_move', 'comment' => '* * Move the front of a brigade. * * @param d (destination) Append buckets to this brigade. * @param s (source) Brigade to take buckets from. * @param e First bucket of s after the move. All buckets * before e are appended to d. * * @remarks This moves all buckets when e == APR_BRIGADE_SENTINEL(s).', 'args' => [ { 'type' => 'apr_bucket_brigade *', 'name' => 'd' }, { 'type' => 'apr_bucket_brigade *', 'name' => 's' }, { 'type' => 'apr_bucket *', 'name' => 'e' } ] }, { 'return_type' => 'apr_status_t', 'name' => 'apreq_brigade_setaside', 'comment' => '* * Set aside all buckets in the brigade. * * @param bb Brigade. * @param p Setaside buckets into this pool. * @return APR_SUCCESS. * @return Error status code from an unsuccessful apr_bucket_setaside().', 'args' => [ { 'type' => 'apr_bucket_brigade *', 'name' => 'bb' }, { 'type' => 'apr_pool_t *', 'name' => 'p' } ] }, { 'return_type' => 'apr_file_t *', 'name' => 'apreq_brigade_spoolfile', 'comment' => '* * Determines the spool file used by the brigade. Returns NULL if the * brigade is not spooled in a file (does not use an APREQ_SPOOL * bucket). * * @param bb the bucket brigade * @return the spool file, or NULL.', 'args' => [ { 'type' => 'apr_bucket_brigade *', 'name' => 'bb' } ] }, { 'return_type' => 'apreq_charset_t', 'name' => 'apreq_charset_divine', 'comment' => '* * Heuristically determine the charset of a string. * * @param src String to scan. * @param slen Length of string. * * @return APREQ_CHARSET_ASCII if the string contains only 7-bit chars; * @return APREQ_CHARSET_UTF8 if the string is a valid utf8 byte sequence; * @return APREQ_CHARSET_LATIN1 if the string has no control chars; * @return APREQ_CHARSET_CP1252 if the string has control chars.', 'args' => [ { 'type' => 'const char *', 'name' => 'src' }, { 'type' => 'apr_size_t', 'name' => 'slen' } ] }, { 'return_type' => 'char *', 'name' => 'apreq_cookie_as_string', 'comment' => '* * Returns a string that represents the cookie as it would appear * in a valid "Set-Cookie*" header. * * @param c cookie. * @param p pool which allocates the returned string. * * @return header string.', 'args' => [ { 'type' => 'const apreq_cookie_t *', 'name' => 'c' }, { 'type' => 'apr_pool_t *', 'name' => 'p' } ] }, { 'return_type' => 'void', 'name' => 'apreq_cookie_expires', 'comment' => '* * Set the Cookie\'s expiration date. * * @param c The cookie. * @param time_str If NULL, the Cookie\'s expiration date is unset, * making it a session cookie. This means no "expires" or "max-age" * attribute will appear in the cookie\'s serialized form. If time_str * is not NULL, the expiration date will be reset to the offset (from now) * represented by time_str. The time_str should be in a format that * apreq_atoi64t() can understand, namely /[+-]?\\\\d+\\\\s*[YMDhms]/. * * @remarks Now time_str may also be a fixed date; see apr_date_parse_rfc() * for admissible formats.', 'args' => [ { 'type' => 'apreq_cookie_t *', 'name' => 'c' }, { 'type' => 'const char *', 'name' => 'time_str' } ] }, { 'return_type' => 'void', 'name' => 'apreq_cookie_httponly_off', 'comment' => '* Turns off the cookie\'s HttpOnly flag.', 'args' => [ { 'type' => 'apreq_cookie_t *', 'name' => 'c' } ] }, { 'return_type' => 'void', 'name' => 'apreq_cookie_httponly_on', 'comment' => '* Sets the cookie\'s HttpOnly flag, meaning it is not * accessible through client-side script in supported * browsers.', 'args' => [ { 'type' => 'apreq_cookie_t *', 'name' => 'c' } ] }, { 'return_type' => 'unsigned', 'name' => 'apreq_cookie_is_httponly', 'comment' => '* @return 1 if the HttpOnly flag is set, 0 otherwise.', 'args' => [ { 'type' => 'const apreq_cookie_t *', 'name' => 'c' } ] }, { 'return_type' => 'unsigned', 'name' => 'apreq_cookie_is_secure', 'comment' => '* @return 1 if the secure flag is set, 0 otherwise.', 'args' => [ { 'type' => 'const apreq_cookie_t *', 'name' => 'c' } ] }, { 'return_type' => 'unsigned', 'name' => 'apreq_cookie_is_tainted', 'comment' => '* @return 1 if the taint flag is set, 0 otherwise.', 'args' => [ { 'type' => 'const apreq_cookie_t *', 'name' => 'c' } ] }, { 'return_type' => 'apreq_cookie_t *', 'name' => 'apreq_cookie_make', 'comment' => '* * Returns a new cookie, made from the argument list. * * @param pool Pool which allocates the cookie. * @param name The cookie\'s name. * @param nlen Length of name. * @param value The cookie\'s value. * @param vlen Length of value. * * @return the new cookie', 'args' => [ { 'type' => 'apr_pool_t *', 'name' => 'pool' }, { 'type' => 'const char *', 'name' => 'name' }, { 'type' => 'const apr_size_t', 'name' => 'nlen' }, { 'type' => 'const char *', 'name' => 'value' }, { 'type' => 'const apr_size_t', 'name' => 'vlen' } ] }, { 'return_type' => 'void', 'name' => 'apreq_cookie_secure_off', 'comment' => '* Turns off the cookie\'s secure flag.', 'args' => [ { 'type' => 'apreq_cookie_t *', 'name' => 'c' } ] }, { 'return_type' => 'void', 'name' => 'apreq_cookie_secure_on', 'comment' => '* Sets the cookie\'s secure flag, meaning it only * comes back over an SSL-encrypted connction.', 'args' => [ { 'type' => 'apreq_cookie_t *', 'name' => 'c' } ] }, { 'return_type' => 'int', 'name' => 'apreq_cookie_serialize', 'comment' => '* * Same functionality as apreq_cookie_as_string. Stores the string * representation in buf, using up to len bytes in buf as storage. * The return value has the same semantics as that of apr_snprintf, * including the special behavior for a "len = 0" argument. * * @param c cookie. * @param buf storage location for the result. * @param len size of buf\'s storage area. * * @return size of resulting header string.', 'args' => [ { 'type' => 'const apreq_cookie_t *', 'name' => 'c' }, { 'type' => 'char *', 'name' => 'buf' }, { 'type' => 'apr_size_t', 'name' => 'len' } ] }, { 'return_type' => 'void', 'name' => 'apreq_cookie_tainted_off', 'comment' => '* Turns off the cookie\'s tainted flag.', 'args' => [ { 'type' => 'apreq_cookie_t *', 'name' => 'c' } ] }, { 'return_type' => 'void', 'name' => 'apreq_cookie_tainted_on', 'comment' => '* Sets the cookie\'s tainted flag.', 'args' => [ { 'type' => 'apreq_cookie_t *', 'name' => 'c' } ] }, { 'return_type' => 'unsigned', 'name' => 'apreq_cookie_version', 'comment' => '*@return 1 if this is an RFC cookie, 0 if its a Netscape cookie.', 'args' => [ { 'type' => 'const apreq_cookie_t *', 'name' => 'c' } ] }, { 'return_type' => 'void', 'name' => 'apreq_cookie_version_set', 'comment' => '* Sets the cookie\'s protocol version.', 'args' => [ { 'type' => 'apreq_cookie_t *', 'name' => 'c' }, { 'type' => 'unsigned', 'name' => 'v' } ] }, { 'return_type' => 'apr_table_t *', 'name' => 'apreq_cookies', 'comment' => '* * Returns a table containing all request cookies. * * @param req the apreq request handle * @param p Allocates the returned table.', 'args' => [ { 'type' => 'apreq_handle_t *', 'name' => 'req' }, { 'type' => 'apr_pool_t *', 'name' => 'p' } ] }, { 'return_type' => 'apr_size_t', 'name' => 'apreq_cp1252_to_utf8', 'comment' => '* * Convert a string from cp1252 to utf8. Caller must ensure it is large enough * to hold the encoded string and trailing \'\\\\0\'. * * @param dest Location of utf8-encoded result string. Caller must ensure it * is large enough to hold the encoded string and trailing \'\\\\0\'. * @param src Original string. * @param slen Length of original string. * * @return length of utf8-encoded string in dest; does not exceed 3 * slen.', 'args' => [ { 'type' => 'char *', 'name' => 'dest' }, { 'type' => 'const char *', 'name' => 'src' }, { 'type' => 'apr_size_t', 'name' => 'slen' } ] }, { 'return_type' => 'apr_status_t', 'name' => 'apreq_decode', 'comment' => '* * Url-decodes a string. * * @param dest Location of url-encoded result string. Caller must ensure dest is * large enough to hold the encoded string and trailing null character. * @param dlen points to resultant length of url-decoded string in dest * @param src Original string. * @param slen Length of original string. * * @return APR_SUCCESS. * @return APR_INCOMPLETE if the string * ends in the middle of an escape sequence. * @return ::APREQ_ERROR_BADSEQ or ::APREQ_ERROR_BADCHAR on malformed input. * * @remarks In the non-success case, dlen will be set to include * the last successfully decoded value. This function decodes * \\%uXXXX into a utf8 (wide) character, following ECMA-262 * (the Javascript spec) Section B.2.1.', 'args' => [ { 'type' => 'char *', 'name' => 'dest' }, { 'type' => 'apr_size_t *', 'name' => 'dlen' }, { 'type' => 'const char *', 'name' => 'src' }, { 'type' => 'apr_size_t', 'name' => 'slen' } ] }, { 'return_type' => 'apr_status_t', 'name' => 'apreq_decodev', 'comment' => '* * Url-decodes an iovec array. * * @param dest Location of url-encoded result string. Caller must ensure dest is * large enough to hold the encoded string and trailing null character. * @param dlen Resultant length of dest. * @param v Array of iovecs that represent the source string * @param nelts Number of iovecs in the array. * * @return APR_SUCCESS. * @return APR_INCOMPLETE if the iovec * ends in the middle of an escape sequence. * @return ::APREQ_ERROR_BADSEQ or ::APREQ_ERROR_BADCHAR on malformed input. * * @remarks In the non-APR_SUCCESS case, dlen will be set to include * the last successfully decoded value. This function decodes * \\%uXXXX into a utf8 (wide) character, following ECMA-262 * (the Javascript spec) Section B.2.1.', 'args' => [ { 'type' => 'char *', 'name' => 'dest' }, { 'type' => 'apr_size_t *', 'name' => 'dlen' }, { 'type' => 'struct iovec *', 'name' => 'v' }, { 'type' => 'int', 'name' => 'nelts' } ] }, { 'return_type' => 'apr_size_t', 'name' => 'apreq_encode', 'comment' => '* * Url-encodes a string. * * @param dest Location of url-encoded result string. Caller must ensure it * is large enough to hold the encoded string and trailing \'\\\\0\'. * @param src Original string. * @param slen Length of original string. * * @return length of url-encoded string in dest; does not exceed 3 * slen.', 'args' => [ { 'type' => 'char *', 'name' => 'dest' }, { 'type' => 'const char *', 'name' => 'src' }, { 'type' => 'const apr_size_t', 'name' => 'slen' } ] }, { 'return_type' => 'char *', 'name' => 'apreq_escape', 'comment' => '* * Returns an url-encoded copy of a string. * * @param p Pool used to allocate the return value. * @param src Original string. * @param slen Length of original string. * * @return The url-encoded string. * * @remarks Use this function insead of apreq_encode if its * caller might otherwise overflow dest.', 'args' => [ { 'type' => 'apr_pool_t *', 'name' => 'p' }, { 'type' => 'const char *', 'name' => 'src' }, { 'type' => 'const apr_size_t', 'name' => 'slen' } ] }, { 'return_type' => 'apr_status_t', 'name' => 'apreq_file_mktemp', 'comment' => '* * Makes a temporary file. * * @param fp Points to the temporary apr_file_t on success. * @param pool Pool to associate with the temp file. When the * pool is destroyed, the temp file will be closed * and deleted. * @param path The base directory which will contain the temp file. * If param == NULL, the directory will be selected via * tempnam(). See the tempnam manpage for details. * * @return APR_SUCCESS. * @return Error status code from unsuccessful apr_filepath_merge(), * or a failed apr_file_mktemp().', 'args' => [ { 'type' => 'apr_file_t * *', 'name' => 'fp' }, { 'type' => 'apr_pool_t *', 'name' => 'pool' }, { 'type' => 'const char *', 'name' => 'path' } ] }, { 'return_type' => 'apreq_handle_t *', 'name' => 'apreq_handle_apache2', 'comment' => '* * @defgroup mod_apreq2 Apache 2.X Filter Module * @ingroup apreq_module * @brief mod_apreq2 - DSO that ties libapreq2 to Apache HTTPD 2.X. * * mod_apreq2 provides the "APREQ2" input filter for using libapreq2 * (and allow its parsed data structures to be shared) within * the Apache 2.X webserver. Using it, libapreq2 works properly * in every phase of the HTTP request, from translation handlers * to output filters, and even for subrequests / internal redirects. * *
    * *

    Activating mod_apreq2 in Apache 2.X

    * * The installation process triggered by * % make install * will not modify your webserver\'s config file. Hence, * be sure you activate it on startup by adding a LoadModule directive * to your webserver config; e.g. * * @code * * LoadModule apreq_module modules/mod_apreq2.so * * @endcode * * The mod_apreq2 filter is named "apreq2", and may be used in Apache\'s * input filter directives, e.g. * @code * * AddInputFilter apreq2 # or * SetInputFilter apreq2 * * @endcode * * However, this is not required because libapreq2 will add the filter (only) * if it\'s necessary. You just need to ensure that your module invokes * apreq_handle_apache2() before the content handler ultimately reads * from the input filter chain. It is important to realize that no * matter how the input filters are initially arranged, the APREQ2 filter * will attempt to reposition itself to be the last input filter to read the * data. * * If you want to use other input filters to transform the incoming HTTP * request data, is important to register those filters with Apache * as having type AP_FTYPE_CONTENT_SET or AP_FTYPE_RESOURCE. Due to the * limitations of Apache\'s current input filter design, types higher than * AP_FTYPE_CONTENT_SET may not work properly whenever the apreq filter is * active. * * This is especially true when a content handler uses libapreq2 to parse * some of the post data before doing an internal redirect. Any input * filter subsequently added to the redirected request will bypass the * original apreq filter (and therefore lose access to some of the original * post data), unless its type is less than the type of the apreq filter * (currently AP_FTYPE_PROTOCOL-1). * * *

    Server Configuration Directives

    * * * * * * * * * * * * * * * * * * * * * * * * * * *
    Per-directory commands for mod_apreq2
    DirectiveContextDefaultDescription
    APREQ2_ReadLimitdirectory #APREQ_DEFAULT_READ_LIMIT Maximum number of bytes mod_apreq2 will send off to libapreq2 * for parsing. mod_apreq2 will log this event and subsequently * remove itself from the filter chain. *
    APREQ2_BrigadeLimitdirectory#APREQ_DEFAULT_BRIGADE_LIMIT Maximum number of bytes mod_apreq2 will let accumulate * within the heap-buckets in a brigade. Excess data will be * spooled to an appended file bucket. *
    APREQ2_TempDirdirectoryNULL Sets the location of the temporary directory apreq will use to spool * overflow brigade data (based on the APREQ2_BrigadeLimit setting). * If left unset, libapreq2 will select a platform-specific location * via apr_temp_dir_get(). *
    * *

    Implementation Details

    *
     *   XXX apreq as a normal input filter
     *   XXX apreq as a "virtual" content handler.
     *   XXX apreq as a transparent "tee".
     *   XXX apreq parser registration in post_config
     * 
    * * @{ * * Create an apreq handle which communicates with an Apache 2.X * request_rec.', 'args' => [ { 'type' => 'request_rec *', 'name' => 'r' } ] }, { 'return_type' => 'apreq_handle_t *', 'name' => 'apreq_handle_cgi', 'comment' => '* * Create an apreq handle which is suitable for a CGI program. It * reads input from stdin and writes output to stdout. * * @param pool Pool associated to this handle. * * @return New handle; can only be NULL if the pool allocation failed. * * @remarks The handle gets cached in the pool\'s userdata, so subsequent * calls will retrieve the original cached handle.', 'args' => [ { 'type' => 'apr_pool_t *', 'name' => 'pool' } ] }, { 'return_type' => 'apreq_handle_t *', 'name' => 'apreq_handle_custom', 'comment' => '* * Create a custom apreq handle which knows only some * values. Useful if you want to test the parser code or if you have * got data from a custom source (neither Apache 2 nor CGI). * * @param pool allocates the parse data, * @param query_string parsed into args table * @param cookie value of the request "Cookie" header * @param parser parses the request body * @param read_limit maximum bytes to read from the body * @param in brigade containing the request body * * @return new handle; can only be NULL if the pool allocation failed.', 'args' => [ { 'type' => 'apr_pool_t *', 'name' => 'pool' }, { 'type' => 'const char *', 'name' => 'query_string' }, { 'type' => 'const char *', 'name' => 'cookie' }, { 'type' => 'apreq_parser_t *', 'name' => 'parser' }, { 'type' => 'apr_uint64_t', 'name' => 'read_limit' }, { 'type' => 'apr_bucket_brigade *', 'name' => 'in' } ] }, { 'return_type' => 'apr_status_t', 'name' => 'apreq_header_attribute', 'comment' => '* * Search a header string for the value of a particular named attribute. * * @param hdr Header string to scan. * @param name Name of attribute to search for. * @param nlen Length of name. * @param val Location of (first) matching value. * @param vlen Length of matching value. * * @return APR_SUCCESS. * @return ::APREQ_ERROR_NOATTR if the attribute is not found. * @return ::APREQ_ERROR_BADSEQ if an unpaired quote mark was detected.', 'args' => [ { 'type' => 'const char *', 'name' => 'hdr' }, { 'type' => 'const char *', 'name' => 'name' }, { 'type' => 'const apr_size_t', 'name' => 'nlen' }, { 'type' => 'const char * *', 'name' => 'val' }, { 'type' => 'apr_size_t *', 'name' => 'vlen' } ] }, { 'return_type' => 'apr_status_t', 'name' => 'apreq_hook_add', 'comment' => '* * Add a parser hook for this request. * * @param req The request handle * @param hook Hook to add. * * @return APR_SUCCESS or module-specific error.', 'args' => [ { 'type' => 'apreq_handle_t *', 'name' => 'req' }, { 'type' => 'apreq_hook_t *', 'name' => 'hook' } ] }, { 'return_type' => 'apreq_hook_t *', 'name' => 'apreq_hook_make', 'comment' => '* * Construct a hook. * * @param pool used to allocate the hook. * @param hook The hook function. * @param next List of other hooks for this hook to call on. * @param ctx Hook\'s internal scratch pad. * @return New hook.', 'args' => [ { 'type' => 'apr_pool_t *', 'name' => 'pool' }, { 'type' => 'apreq_hook_function_t', 'name' => 'hook' }, { 'type' => 'apreq_hook_t *', 'name' => 'next' }, { 'type' => 'void *', 'name' => 'ctx' } ] }, { 'return_type' => 'apr_status_t', 'name' => 'apreq_hook_run', 'comment' => '* * Run the hook with the current parameter and the incoming * bucket brigade. The hook may modify the brigade if necessary. * Once all hooks have completed, the contents of the brigade will * be added to the parameter\'s bb attribute. * @return APR_SUCCESS on success. All other values represent errors.', 'args' => [ { 'type' => 'struct apreq_hook_t *', 'name' => 'h' }, { 'type' => 'apreq_param_t *', 'name' => 'param' }, { 'type' => 'apr_bucket_brigade *', 'name' => 'bb' } ] }, { 'return_type' => 'apr_ssize_t', 'name' => 'apreq_index', 'comment' => '* * Returns offset of match string\'s location, or -1 if no match is found. * * @param hay Location of bytes to scan. * @param hlen Number of bytes available for scanning. * @param ndl Search string * @param nlen Length of search string. * @param type Match type. * * @return Offset of match string, or -1 if no match is found. *', 'args' => [ { 'type' => 'const char *', 'name' => 'hay' }, { 'type' => 'apr_size_t', 'name' => 'hlen' }, { 'type' => 'const char *', 'name' => 'ndl' }, { 'type' => 'apr_size_t', 'name' => 'nlen' }, { 'type' => 'const apreq_match_t', 'name' => 'type' } ] }, { 'return_type' => 'apr_status_t', 'name' => 'apreq_initialize', 'comment' => '* * Initialize libapreq2. Applications (except apache modules using * mod_apreq) should call this exactly once before they use any * libapreq2 modules. If you want to modify the list of default parsers * with apreq_register_parser(), please use apreq_pre_initialize() * and apreq_post_initialize() instead. * * @param pool a base pool persisting while libapreq2 is used * @remarks after you destroy the pool, you have to call this function again * with a new pool if you still plan to use libapreq2', 'args' => [ { 'type' => 'apr_pool_t *', 'name' => 'pool' } ] }, { 'return_type' => 'apr_status_t', 'name' => 'apreq_jar', 'comment' => '* * Expose the parsed "cookie" header associated to this handle. * * @param req The request handle * @param t The resulting table, which will either be NULL or a * valid table object on return. * * @return APR_SUCCESS or a module-specific error status code.', 'args' => [ { 'type' => 'apreq_handle_t *', 'name' => 'req' }, { 'type' => 'const apr_table_t * *', 'name' => 't' } ] }, { 'return_type' => 'apreq_cookie_t *', 'name' => 'apreq_jar_get', 'comment' => '* * Fetch the first cookie with the given name. * * @param req The request handle * @param name Case-insensitive cookie name. * * @return First matching cookie, or NULL if none match.', 'args' => [ { 'type' => 'apreq_handle_t *', 'name' => 'req' }, { 'type' => 'const char *', 'name' => 'name' } ] }, { 'return_type' => 'char *', 'name' => 'apreq_join', 'comment' => '* * This header contains useful functions for creating new * parsers, hooks or modules. It includes * * - string <-> array converters * - substring search functions * - simple encoders & decoders for urlencoded strings * - simple time, date, & file-size converters * @file apreq_util.h * @brief Utility functions for apreq. * @ingroup libapreq2 * * Join an array of values. The result is an empty string if there are * no values. * * @param p Pool to allocate return value. * @param sep String that is inserted between the joined values. * @param arr Array of apreq_value_t entries. * @param mode Join type- see apreq_join_t. * * @return Joined string, or NULL on error', 'args' => [ { 'type' => 'apr_pool_t *', 'name' => 'p' }, { 'type' => 'const char *', 'name' => 'sep' }, { 'type' => 'const apr_array_header_t *', 'name' => 'arr' }, { 'type' => 'apreq_join_t', 'name' => 'mode' } ] }, { 'return_type' => 'unsigned', 'name' => 'apreq_module_status_is_error', 'comment' => '* * Defines the module-specific status codes which * are commonly considered to be non-fatal. * * @param s status code returned by an apreq_module_t method. * * @return 1 if s is fatal, 0 otherwise.', 'args' => [ { 'type' => 'apr_status_t', 'name' => 's' } ] }, { 'return_type' => 'apreq_param_t *', 'name' => 'apreq_param', 'comment' => '* * Find the first query string parameter or body parameter with the * specified name. The match is case-insensitive. * * @param req request handle. * @param key desired parameter name * * @return The first matching parameter (with args searched first) or NULL.', 'args' => [ { 'type' => 'apreq_handle_t *', 'name' => 'req' }, { 'type' => 'const char *', 'name' => 'key' } ] }, { 'return_type' => 'apreq_charset_t', 'name' => 'apreq_param_charset_get', 'comment' => '* Gets the character encoding for this parameter.', 'args' => [ { 'type' => 'apreq_param_t *', 'name' => 'p' } ] }, { 'return_type' => 'apreq_charset_t', 'name' => 'apreq_param_charset_set', 'comment' => '* Sets the character encoding for this parameter.', 'args' => [ { 'type' => 'apreq_param_t *', 'name' => 'p' }, { 'type' => 'apreq_charset_t', 'name' => 'c' } ] }, { 'return_type' => 'apr_status_t', 'name' => 'apreq_param_decode', 'comment' => '* * Url-decodes a name=value pair into a param. * * @param param points to the decoded parameter on success * @param pool Pool from which the param is allocated. * @param word Start of the name=value pair. * @param nlen Length of urlencoded name. * @param vlen Length of urlencoded value. * * @return APR_SUCCESS on success. * @return ::APREQ_ERROR_BADSEQ or ::APREQ_ERROR_BADCHAR on malformed input. * * @remarks Unless vlen == 0, this function assumes there is * exactly one character (\'=\') which separates the pair. *', 'args' => [ { 'type' => 'apreq_param_t * *', 'name' => 'param' }, { 'type' => 'apr_pool_t *', 'name' => 'pool' }, { 'type' => 'const char *', 'name' => 'word' }, { 'type' => 'apr_size_t', 'name' => 'nlen' }, { 'type' => 'apr_size_t', 'name' => 'vlen' } ] }, { 'return_type' => 'char *', 'name' => 'apreq_param_encode', 'comment' => '* * Url-encodes the param into a name-value pair. * @param pool Pool which allocates the returned string. * @param param Param to encode. * @return name-value pair representing the param.', 'args' => [ { 'type' => 'apr_pool_t *', 'name' => 'pool' }, { 'type' => 'const apreq_param_t *', 'name' => 'param' } ] }, { 'return_type' => 'unsigned', 'name' => 'apreq_param_is_tainted', 'comment' => '* @return 1 if the taint flag is set, 0 otherwise.', 'args' => [ { 'type' => 'const apreq_param_t *', 'name' => 'p' } ] }, { 'return_type' => 'apreq_param_t *', 'name' => 'apreq_param_make', 'comment' => '* creates a param from name/value information', 'args' => [ { 'type' => 'apr_pool_t *', 'name' => 'p' }, { 'type' => 'const char *', 'name' => 'name' }, { 'type' => 'const apr_size_t', 'name' => 'nlen' }, { 'type' => 'const char *', 'name' => 'val' }, { 'type' => 'const apr_size_t', 'name' => 'vlen' } ] }, { 'return_type' => 'void', 'name' => 'apreq_param_tainted_off', 'comment' => '* Turns off the taint flag.', 'args' => [ { 'type' => 'apreq_param_t *', 'name' => 'p' } ] }, { 'return_type' => 'void', 'name' => 'apreq_param_tainted_on', 'comment' => '* Sets the tainted flag.', 'args' => [ { 'type' => 'apreq_param_t *', 'name' => 'p' } ] }, { 'return_type' => 'apr_table_t *', 'name' => 'apreq_params', 'comment' => '* * Returns a table containing key-value pairs for the full request * (args + body). * * @param req request handle * @param p allocates the returned table. * * @return table representing all available params; is never NULL.', 'args' => [ { 'type' => 'apreq_handle_t *', 'name' => 'req' }, { 'type' => 'apr_pool_t *', 'name' => 'p' } ] }, { 'return_type' => 'apr_array_header_t *', 'name' => 'apreq_params_as_array', 'comment' => '* * Returns an array of parameters (apreq_param_t *) matching the given key. * The key is case-insensitive. * @param p Allocates the returned array. * @param t the parameter table returned by apreq_args(), apreq_body() * or apreq_params() * @param key Null-terminated search key, case insensitive. * key==NULL fetches all parameters. * @return an array of apreq_param_t* (pointers) * @remark Also parses the request if necessary.', 'args' => [ { 'type' => 'apr_pool_t *', 'name' => 'p' }, { 'type' => 'const apr_table_t *', 'name' => 't' }, { 'type' => 'const char *', 'name' => 'key' } ] }, { 'return_type' => 'const char *', 'name' => 'apreq_params_as_string', 'comment' => '* * Returns a ", " -joined string containing all parameters * for the requested key, an empty string if none are found. * The key is case-insensitive. * * @param p Allocates the return string. * @param t the parameter table returned by apreq_args(), apreq_body() * or apreq_params() * @param key Null-terminated parameter name, case insensitive. * key==NULL fetches all values. * @param mode Join type- see apreq_join(). * @return the joined string or NULL on error * @remark Also parses the request if necessary.', 'args' => [ { 'type' => 'apr_pool_t *', 'name' => 'p' }, { 'type' => 'const apr_table_t *', 'name' => 't' }, { 'type' => 'const char *', 'name' => 'key' }, { 'type' => 'apreq_join_t', 'name' => 'mode' } ] }, { 'return_type' => 'apr_status_t', 'name' => 'apreq_parse_cookie_header', 'comment' => '* * Parse a cookie header and store the cookies in an apr_table_t. * * @param pool pool which allocates the cookies * @param jar table where parsed cookies are stored * @param header the header value * * @return APR_SUCCESS. * @return ::APREQ_ERROR_BADSEQ if an unparsable character sequence appears. * @return ::APREQ_ERROR_MISMATCH if an rfc-cookie attribute appears in a * netscape cookie header. * @return ::APR_ENOTIMPL if an unrecognized rfc-cookie attribute appears. * @return ::APREQ_ERROR_NOTOKEN if a required token was not present. * @return ::APREQ_ERROR_BADCHAR if an unexpected token was present.', 'args' => [ { 'type' => 'apr_pool_t *', 'name' => 'pool' }, { 'type' => 'apr_table_t *', 'name' => 'jar' }, { 'type' => 'const char *', 'name' => 'header' } ] }, { 'return_type' => 'apr_status_t', 'name' => 'apreq_parse_query_string', 'comment' => '* * Parse a url-encoded string into a param table. * @param pool pool used to allocate the param data. * @param t table to which the params are added. * @param qs Query string to url-decode. * @return APR_SUCCESS if successful, error otherwise. * @remark This function uses [&;] as the set of tokens * to delineate words, and will treat a word w/o \'=\' * as a name-value pair with value-length = 0. *', 'args' => [ { 'type' => 'apr_pool_t *', 'name' => 'pool' }, { 'type' => 'apr_table_t *', 'name' => 't' }, { 'type' => 'const char *', 'name' => 'qs' } ] }, { 'return_type' => 'apreq_parser_function_t', 'name' => 'apreq_parser', 'comment' => '* * Fetch the default parser function associated with the given MIME type. * @param enctype The desired enctype (can also be a full "Content-Type" * header). * @return The parser function, or NULL if the enctype is unrecognized.', 'args' => [ { 'type' => 'const char *', 'name' => 'enctype' } ] }, { 'return_type' => 'apr_status_t', 'name' => 'apreq_parser_add_hook', 'comment' => '* * Add a new hook to the end of the parser\'s hook list. * * @param p Parser. * @param h Hook to append.', 'args' => [ { 'type' => 'apreq_parser_t *', 'name' => 'p' }, { 'type' => 'apreq_hook_t *', 'name' => 'h' } ] }, { 'return_type' => 'apr_status_t', 'name' => 'apreq_parser_get', 'comment' => '* * Fetch the active body parser. * * @param req The request handle * @param parser Points to the active parser on return. * * @return APR_SUCCESS or module-specific error. *', 'args' => [ { 'type' => 'apreq_handle_t *', 'name' => 'req' }, { 'type' => 'const apreq_parser_t * *', 'name' => 'parser' } ] }, { 'return_type' => 'apreq_parser_t *', 'name' => 'apreq_parser_make', 'comment' => '* * Construct a parser. * * @param pool Pool used to allocate the parser. * @param ba bucket allocator used to create bucket brigades * @param content_type Content-type that this parser can deal with. * @param pfn The parser function. * @param brigade_limit the maximum in-memory bytes a brigade may use * @param temp_dir the directory used by the parser for temporary files * @param hook Hooks to associate this parser with. * @param ctx Parser\'s internal scratch pad. * @return New parser.', 'args' => [ { 'type' => 'apr_pool_t *', 'name' => 'pool' }, { 'type' => 'apr_bucket_alloc_t *', 'name' => 'ba' }, { 'type' => 'const char *', 'name' => 'content_type' }, { 'type' => 'apreq_parser_function_t', 'name' => 'pfn' }, { 'type' => 'apr_size_t', 'name' => 'brigade_limit' }, { 'type' => 'const char *', 'name' => 'temp_dir' }, { 'type' => 'apreq_hook_t *', 'name' => 'hook' }, { 'type' => 'void *', 'name' => 'ctx' } ] }, { 'return_type' => 'apr_status_t', 'name' => 'apreq_parser_run', 'comment' => '* * Parse the incoming brigade into a table. Parsers normally * consume all the buckets of the brigade during parsing. However * parsers may leave "rejected" data in the brigade, even during a * successful parse, so callers may need to clean up the brigade * themselves (in particular, rejected buckets should not be * passed back to the parser again). * @remark bb == NULL is valid: the parser should return its * public status: APR_INCOMPLETE, APR_SUCCESS, or an error code.', 'args' => [ { 'type' => 'struct apreq_parser_t *', 'name' => 'psr' }, { 'type' => 'apr_table_t *', 'name' => 't' }, { 'type' => 'apr_bucket_brigade *', 'name' => 'bb' } ] }, { 'return_type' => 'apr_status_t', 'name' => 'apreq_parser_set', 'comment' => '* * Set the body parser for this request. * * @param req The request handle * @param parser New parser to use. * * @return APR_SUCCESS or module-specific error.', 'args' => [ { 'type' => 'apreq_handle_t *', 'name' => 'req' }, { 'type' => 'apreq_parser_t *', 'name' => 'parser' } ] }, { 'return_type' => 'apr_status_t', 'name' => 'apreq_post_initialize', 'comment' => '* * Post-initialize libapreq2. Applications (except apache modules using * mod_apreq2) should this exactly once before they use any * libapreq2 modules for parsing. * * @param pool the same pool that was used in apreq_pre_initialize().', 'args' => [ { 'type' => 'apr_pool_t *', 'name' => 'pool' } ] }, { 'return_type' => 'apr_status_t', 'name' => 'apreq_pre_initialize', 'comment' => '* * Pre-initialize libapreq2. Applications (except apache modules using * mod_apreq2) should call this exactly once before they register custom * parsers with libapreq2. mod_apreq2 does this automatically during the * post-config phase, so modules that need call apreq_register_parser should * create a post-config hook using APR_HOOK_MIDDLE. * * @param pool a base pool persisting while libapreq2 is used * @remarks after you destroyed the pool, you have to call this function again * with a new pool if you still plan to use libapreq2', 'args' => [ { 'type' => 'apr_pool_t *', 'name' => 'pool' } ] }, { 'return_type' => 'apr_size_t', 'name' => 'apreq_quote', 'comment' => '* * Places a quoted copy of src into dest. Embedded quotes are escaped with a * backslash (\'\\\'). * * @param dest Location of quoted copy. Must be large enough to hold the copy * and trailing null byte. * @param src Original string. * @param slen Length of original string. * @param dest Destination string. * * @return length of quoted copy in dest.', 'args' => [ { 'type' => 'char *', 'name' => 'dest' }, { 'type' => 'const char *', 'name' => 'src' }, { 'type' => 'const apr_size_t', 'name' => 'slen' } ] }, { 'return_type' => 'apr_size_t', 'name' => 'apreq_quote_once', 'comment' => '* * * Same as apreq_quote() except when src begins and ends in quote marks. In * that case it assumes src is quoted correctly, and just copies src to dest. * * @param dest Location of quoted copy. Must be large enough to hold the copy * and trailing null byte. * @param src Original string. * @param slen Length of original string. * @param dest Destination string. * * @return length of quoted copy in dest.', 'args' => [ { 'type' => 'char *', 'name' => 'dest' }, { 'type' => 'const char *', 'name' => 'src' }, { 'type' => 'const apr_size_t', 'name' => 'slen' } ] }, { 'return_type' => 'apr_status_t', 'name' => 'apreq_read_limit_get', 'comment' => '* * Get the active read limit. * * @param req The request handle. * @param bytes Pointer to resulting (current) limit. * * @return APR_SUCCESS or a module-specific error, * which may leave bytes undefined.', 'args' => [ { 'type' => 'apreq_handle_t *', 'name' => 'req' }, { 'type' => 'apr_uint64_t *', 'name' => 'bytes' } ] }, { 'return_type' => 'apr_status_t', 'name' => 'apreq_read_limit_set', 'comment' => '* * Set the active read limit. * * @param req The handle. * @param bytes New limit to use. * * @return APR_SUCCESS or a module-specific error. *', 'args' => [ { 'type' => 'apreq_handle_t *', 'name' => 'req' }, { 'type' => 'apr_uint64_t', 'name' => 'bytes' } ] }, { 'return_type' => 'apr_status_t', 'name' => 'apreq_register_parser', 'comment' => '* * Register a new parsing function with a MIME enctype. * Registered parsers are added to apreq_parser()\'s * internal lookup table. * * @param enctype The MIME type. * @param pfn The function to use during parsing. Setting * parser == NULL will remove an existing parser. * * @return APR_SUCCESS or error.', 'args' => [ { 'type' => 'const char *', 'name' => 'enctype' }, { 'type' => 'apreq_parser_function_t', 'name' => 'pfn' } ] }, { 'return_type' => 'char *', 'name' => 'apreq_strerror', 'comment' => '* * apreq\'s wrapper around apr_strerror(); * recognizes APREQ_ERROR_* status codes.', 'args' => [ { 'type' => 'apr_status_t', 'name' => 's' }, { 'type' => 'char *', 'name' => 'buf' }, { 'type' => 'apr_size_t', 'name' => 'bufsize' } ] }, { 'return_type' => 'apr_status_t', 'name' => 'apreq_temp_dir_get', 'comment' => '* * Get the active temp directory. * * @param req The handle. * @param path Resulting path to temp dir. * * @return APR_SUCCESS implies path is valid, but may also be NULL. * Any other return value is module-specific, and may leave * path undefined.', 'args' => [ { 'type' => 'apreq_handle_t *', 'name' => 'req' }, { 'type' => 'const char * *', 'name' => 'path' } ] }, { 'return_type' => 'apr_status_t', 'name' => 'apreq_temp_dir_set', 'comment' => '* * Set the active temp directory. * * @param req The handle. * @param path New path to use; may be NULL. * * @return APR_SUCCESS or a module-specific error .', 'args' => [ { 'type' => 'apreq_handle_t *', 'name' => 'req' }, { 'type' => 'const char *', 'name' => 'path' } ] }, { 'return_type' => 'apr_ssize_t', 'name' => 'apreq_unescape', 'comment' => '* * An \\e in-situ url-decoder. * * @param str The string to decode * * @return Length of decoded string, or < 0 on error.', 'args' => [ { 'type' => 'char *', 'name' => 'str' } ] }, { 'return_type' => 'const apreq_param_t *', 'name' => 'apreq_upload', 'comment' => '* * Returns the first param in req->body which has both param->v.name * matching key (case insensitive) and param->upload != NULL. * @param body parameter table returned by apreq_body() or apreq_params() * @param name Parameter name. key == NULL returns first upload. * @return Corresponding upload, NULL if none found. * @remark Will parse the request as necessary.', 'args' => [ { 'type' => 'const apr_table_t *', 'name' => 'body' }, { 'type' => 'const char *', 'name' => 'name' } ] }, { 'return_type' => 'const apr_table_t *', 'name' => 'apreq_uploads', 'comment' => '* * Returns a table of all params in req->body with non-NULL upload brigades. * @param body parameter table returned by apreq_body() or apreq_params() * @param pool Pool which allocates the table struct. * @return Upload table. * @remark Will parse the request if necessary.', 'args' => [ { 'type' => 'const apr_table_t *', 'name' => 'body' }, { 'type' => 'apr_pool_t *', 'name' => 'pool' } ] }, { 'return_type' => 'void', 'name' => 'apreq_value_table_add', 'comment' => '* * Adds the specified apreq_value_t to the apr_table_t. * * @param v value to add * @param t add v to this table * * @return void * * @ see apr_table_t @see apr_value_t', 'args' => [ { 'type' => 'const apreq_value_t *', 'name' => 'v' }, { 'type' => 'apr_table_t *', 'name' => 't' } ] }, { 'return_type' => 'apreq_cookie_t *', 'name' => 'apreq_value_to_cookie', 'comment' => '* Upgrades a jar\'s table values to apreq_cookie_t structs.', 'args' => [ { 'type' => 'const char *', 'name' => 'val' } ] }, { 'return_type' => 'apreq_param_t *', 'name' => 'apreq_value_to_param', 'comment' => '* Upgrades args and body table values to apreq_param_t structs.', 'args' => [ { 'type' => 'const char *', 'name' => 'val' } ] }, { 'return_type' => 'void', 'name' => 'apreq_version', 'comment' => '* * Return libapreq\'s version information information in a numeric form. * * @param pvsn Pointer to a version structure for returning the version * information.', 'args' => [ { 'type' => 'apr_version_t *', 'name' => 'pvsn' } ] }, { 'return_type' => 'const char *', 'name' => 'apreq_version_string', 'comment' => '* Return libapreq\'s version information as a string.', 'args' => [] }, { 'return_type' => 'MP_STATIC void', 'name' => 'apreq_xs_args', 'args' => [] }, { 'return_type' => 'MP_STATIC void', 'name' => 'apreq_xs_body', 'args' => [] }, { 'return_type' => 'MP_STATIC void', 'name' => 'apreq_xs_brigade_copy', 'comment' => ' XXX these Apache::Upload::Brigade funcs need a makeover as vanilla XS.', 'args' => [] }, { 'return_type' => 'MP_STATIC void', 'name' => 'apreq_xs_brigade_read', 'args' => [] }, { 'return_type' => 'MP_STATIC void', 'name' => 'apreq_xs_brigade_readline', 'args' => [] }, { 'return_type' => 'SV *', 'name' => 'apreq_xs_cookie2sv', 'args' => [ { 'type' => 'pTHX', 'name' => 'aTHX' }, { 'type' => 'apreq_cookie_t *', 'name' => 'c' }, { 'type' => 'const char *', 'name' => 'class' }, { 'type' => 'SV *', 'name' => 'parent' } ] }, { 'return_type' => 'char *', 'name' => 'apreq_xs_cookie_pool_copy', 'args' => [ { 'type' => 'pTHX', 'name' => 'aTHX' }, { 'type' => 'SV *', 'name' => 'obj' }, { 'type' => 'SV *', 'name' => 'value' } ] }, { 'return_type' => 'SV *', 'name' => 'apreq_xs_cookie_table2sv', 'args' => [ { 'type' => 'pTHX', 'name' => 'aTHX' }, { 'type' => 'const apr_table_t *', 'name' => 't' }, { 'type' => 'const char *', 'name' => 'class' }, { 'type' => 'SV *', 'name' => 'parent' }, { 'type' => 'const char *', 'name' => 'value_class' }, { 'type' => 'I32', 'name' => 'vclen' } ] }, { 'return_type' => 'MP_STATIC void', 'name' => 'apreq_xs_cookie_table_FETCH', 'args' => [] }, { 'return_type' => 'MP_STATIC void', 'name' => 'apreq_xs_cookie_table_NEXTKEY', 'args' => [] }, { 'return_type' => 'MP_STATIC void', 'name' => 'apreq_xs_cookie_table_do', 'args' => [] }, { 'return_type' => 'int', 'name' => 'apreq_xs_cookie_table_do_sub', 'args' => [ { 'type' => 'void *', 'name' => 'data' }, { 'type' => 'const char *', 'name' => 'key' }, { 'type' => 'const char *', 'name' => 'val' } ] }, { 'return_type' => 'int', 'name' => 'apreq_xs_cookie_table_keys', 'args' => [ { 'type' => 'void *', 'name' => 'data' }, { 'type' => 'const char *', 'name' => 'key' }, { 'type' => 'const char *', 'name' => 'val' } ] }, { 'return_type' => 'int', 'name' => 'apreq_xs_cookie_table_magic_copy', 'comment' => ' Requires perl 5.8 or better. * A custom MGVTBL with its "copy" slot filled allows * us to FETCH a table entry immediately during iteration. * For multivalued keys this is essential in order to get * the value corresponding to the current key, otherwise * values() will always report the first value repeatedly. * With this MGVTBL the keys() list always matches up with * the values() list, even in the multivalued case. * We only prefetch the value during iteration, because the * prefetch adds overhead to EXISTS and STORE operations. * They are only "penalized" when the perl program is iterating * via each(), which seems to be a reasonable tradeoff.', 'args' => [ { 'type' => 'pTHX', 'name' => 'aTHX' }, { 'type' => 'SV *', 'name' => 'sv' }, { 'type' => 'MAGIC *', 'name' => 'mg' }, { 'type' => 'SV *', 'name' => 'nsv' }, { 'type' => 'const char *', 'name' => 'name' }, { 'type' => 'int', 'name' => 'namelen' } ] }, { 'return_type' => 'int', 'name' => 'apreq_xs_cookie_table_values', 'args' => [ { 'type' => 'void *', 'name' => 'data' }, { 'type' => 'const char *', 'name' => 'key' }, { 'type' => 'const char *', 'name' => 'val' } ] }, { 'return_type' => 'void', 'name' => 'apreq_xs_croak', 'args' => [ { 'type' => 'pTHX', 'name' => 'aTHX' }, { 'type' => 'HV *', 'name' => 'data' }, { 'type' => 'SV *', 'name' => 'obj' }, { 'type' => 'apr_status_t', 'name' => 'rc' }, { 'type' => 'const char *', 'name' => 'func' }, { 'type' => 'const char *', 'name' => 'class' } ] }, { 'return_type' => 'SV *', 'name' => 'apreq_xs_error2sv', 'args' => [ { 'type' => 'pTHX', 'name' => 'aTHX' }, { 'type' => 'apr_status_t', 'name' => 's' } ] }, { 'return_type' => 'SV *', 'name' => 'apreq_xs_find_bb_obj', 'args' => [ { 'type' => 'pTHX', 'name' => 'aTHX' }, { 'type' => 'SV *', 'name' => 'in' } ] }, { 'return_type' => 'SV *', 'name' => 'apreq_xs_find_obj', 'comment' => '* * @file apreq_xs_postperl.h * @brief XS include file for making Cookie.so and Request.so * * * @defgroup XS Perl * @ingroup GLUE * @{ * * Trace through magic objects & hashrefs looking for original object. * @param in The starting SV *. * @param key The first letter of key is used to search a hashref for * the desired object. * @return Reference to the object.', 'args' => [ { 'type' => 'pTHX', 'name' => 'aTHX' }, { 'type' => 'SV *', 'name' => 'in' }, { 'type' => 'const char', 'name' => 'key' } ] }, { 'return_type' => 'SV *', 'name' => 'apreq_xs_handle2sv', 'args' => [ { 'type' => 'pTHX', 'name' => 'aTHX' }, { 'type' => 'apreq_handle_t *', 'name' => 'req' }, { 'type' => 'const char *', 'name' => 'class' }, { 'type' => 'SV *', 'name' => 'parent' } ] }, { 'return_type' => 'const char *', 'name' => 'apreq_xs_helper_class', 'args' => [ { 'type' => 'pTHX', 'name' => 'aTHX' }, { 'type' => 'SV * *', 'name' => 'SP' }, { 'type' => 'SV *', 'name' => 'sv' }, { 'type' => 'const char *', 'name' => 'method' } ] }, { 'return_type' => 'MP_STATIC void', 'name' => 'apreq_xs_jar', 'args' => [] }, { 'return_type' => 'SV *', 'name' => 'apreq_xs_object2sv', 'comment' => ' conversion function templates based on modperl-2\'s sv2request_rec', 'args' => [ { 'type' => 'pTHX', 'name' => 'aTHX' }, { 'type' => 'void *', 'name' => 'ptr' }, { 'type' => 'const char *', 'name' => 'class' }, { 'type' => 'SV *', 'name' => 'parent' }, { 'type' => 'const char *', 'name' => 'base' } ] }, { 'return_type' => 'MP_STATIC void', 'name' => 'apreq_xs_param', 'args' => [] }, { 'return_type' => 'SV *', 'name' => 'apreq_xs_param2sv', 'args' => [ { 'type' => 'pTHX', 'name' => 'aTHX' }, { 'type' => 'apreq_param_t *', 'name' => 'p' }, { 'type' => 'const char *', 'name' => 'class' }, { 'type' => 'SV *', 'name' => 'parent' } ] }, { 'return_type' => 'SV *', 'name' => 'apreq_xs_param_table2sv', 'args' => [ { 'type' => 'pTHX', 'name' => 'aTHX' }, { 'type' => 'const apr_table_t *', 'name' => 't' }, { 'type' => 'const char *', 'name' => 'class' }, { 'type' => 'SV *', 'name' => 'parent' }, { 'type' => 'const char *', 'name' => 'value_class' }, { 'type' => 'I32', 'name' => 'vclen' } ] }, { 'return_type' => 'MP_STATIC void', 'name' => 'apreq_xs_param_table_FETCH', 'args' => [] }, { 'return_type' => 'MP_STATIC void', 'name' => 'apreq_xs_param_table_NEXTKEY', 'args' => [] }, { 'return_type' => 'MP_STATIC void', 'name' => 'apreq_xs_param_table_do', 'args' => [] }, { 'return_type' => 'int', 'name' => 'apreq_xs_param_table_do_sub', 'args' => [ { 'type' => 'void *', 'name' => 'data' }, { 'type' => 'const char *', 'name' => 'key' }, { 'type' => 'const char *', 'name' => 'val' } ] }, { 'return_type' => 'int', 'name' => 'apreq_xs_param_table_keys', 'args' => [ { 'type' => 'void *', 'name' => 'data' }, { 'type' => 'const char *', 'name' => 'key' }, { 'type' => 'const char *', 'name' => 'val' } ] }, { 'return_type' => 'int', 'name' => 'apreq_xs_param_table_magic_copy', 'comment' => ' Requires perl 5.8 or better. * A custom MGVTBL with its "copy" slot filled allows * us to FETCH a table entry immediately during iteration. * For multivalued keys this is essential in order to get * the value corresponding to the current key, otherwise * values() will always report the first value repeatedly. * With this MGVTBL the keys() list always matches up with * the values() list, even in the multivalued case. * We only prefetch the value during iteration, because the * prefetch adds overhead to EXISTS and STORE operations. * They are only "penalized" when the perl program is iterating * via each(), which seems to be a reasonable tradeoff.', 'args' => [ { 'type' => 'pTHX', 'name' => 'aTHX' }, { 'type' => 'SV *', 'name' => 'sv' }, { 'type' => 'MAGIC *', 'name' => 'mg' }, { 'type' => 'SV *', 'name' => 'nsv' }, { 'type' => 'const char *', 'name' => 'name' }, { 'type' => 'int', 'name' => 'namelen' } ] }, { 'return_type' => 'int', 'name' => 'apreq_xs_param_table_values', 'args' => [ { 'type' => 'void *', 'name' => 'data' }, { 'type' => 'const char *', 'name' => 'key' }, { 'type' => 'const char *', 'name' => 'val' } ] }, { 'return_type' => 'MP_STATIC void', 'name' => 'apreq_xs_parse', 'args' => [] }, { 'return_type' => 'apreq_cookie_t *', 'name' => 'apreq_xs_sv2cookie', 'args' => [ { 'type' => 'pTHX', 'name' => 'aTHX' }, { 'type' => 'SV *', 'name' => 'sv' } ] }, { 'return_type' => 'apreq_handle_t *', 'name' => 'apreq_xs_sv2handle', 'args' => [ { 'type' => 'pTHX', 'name' => 'aTHX' }, { 'type' => 'SV *', 'name' => 'sv' } ] }, { 'return_type' => 'SV *', 'name' => 'apreq_xs_sv2object', 'args' => [ { 'type' => 'pTHX', 'name' => 'aTHX' }, { 'type' => 'SV *', 'name' => 'sv' }, { 'type' => 'const char *', 'name' => 'class' }, { 'type' => 'const char', 'name' => 'attr' } ] }, { 'return_type' => 'apreq_param_t *', 'name' => 'apreq_xs_sv2param', 'args' => [ { 'type' => 'pTHX', 'name' => 'aTHX' }, { 'type' => 'SV *', 'name' => 'sv' } ] }, { 'return_type' => 'apr_status_t', 'name' => 'apreq_xs_upload_hook', 'args' => [ { 'type' => 'APREQ_HOOK_ARGS', 'name' => 'arg0' } ] }, { 'return_type' => 'apr_status_t', 'name' => 'eval_upload_hook', 'args' => [ { 'type' => 'pTHX', 'name' => 'aTHX' }, { 'type' => 'apreq_param_t *', 'name' => 'upload' }, { 'type' => 'struct hook_ctx *', 'name' => 'ctx' } ] }, { 'return_type' => 'apr_status_t', 'name' => 'upload_hook_cleanup', 'args' => [ { 'type' => 'void *', 'name' => 'ctx_' } ] } ]; 1; libapreq2-2.17/glue/perl/xsbuilder/tables/APR/Request/StructureTable.pm0000644000175000017500000001535714277402430025503 0ustar jortonjortonpackage APR::Request::StructureTable; # !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! # ! WARNING: generated by My::ParseSource/ # ! Thu Aug 18 10:23:36 2022 # ! do NOT edit, any changes will be lost ! # !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! $APR::Request::StructureTable = [ { 'type' => 'apreq_cookie_t', 'stype' => 'struct apreq_cookie_t', 'elts' => [ { 'type' => 'char *', 'name' => 'path', 'comment' => '*< Restricts url path' }, { 'type' => 'char *', 'name' => 'domain', 'comment' => '*< Restricts server domain' }, { 'type' => 'char *', 'name' => 'port', 'comment' => '*< Restricts server port' }, { 'type' => 'char *', 'name' => 'comment', 'comment' => '*< RFC cookies may send a comment' }, { 'type' => 'char *', 'name' => 'commentURL', 'comment' => '*< RFC cookies may place an URL here' }, { 'type' => 'apr_time_t', 'name' => 'max_age', 'comment' => '*< total duration of cookie: -1 == session' }, { 'type' => 'unsigned', 'name' => 'flags', 'comment' => '*< charsets, taint marks, app-specific bits' }, { 'type' => 'const apreq_value_t', 'name' => 'v', 'comment' => '*< "raw" cookie value' } ], 'comment' => '* @brief Cookie type, supporting both Netscape and RFC cookie specifications.' }, { 'type' => 'apreq_handle_t', 'stype' => 'struct apreq_handle_t', 'elts' => [ { 'type' => 'const struct apreq_module_t *', 'name' => 'module', 'comment' => '* the apreq module which implements this handle' }, { 'type' => 'apr_pool_t *', 'name' => 'pool', 'comment' => '* the pool which defines the lifetime of the parsed data' }, { 'type' => 'apr_bucket_alloc_t *', 'name' => 'bucket_alloc', 'comment' => '* the allocator, which persists at least as long as the pool' } ], 'comment' => '* * @file apreq_module.h * @brief Module API * @ingroup libapreq2 * * An apreq handle associated with a module. The structure * may have variable size, because the module may append its own data * structures after it.' }, { 'type' => 'apreq_hook_find_param_ctx_t', 'stype' => 'struct apreq_hook_find_param_ctx_t', 'elts' => [ { 'type' => 'const char *', 'name' => 'name' }, { 'type' => 'apreq_param_t *', 'name' => 'param' }, { 'type' => 'apreq_hook_t *', 'name' => 'prev' } ], 'comment' => '* * Context struct for the apreq_hook_find_param hook.' }, { 'type' => 'apreq_hook_t', 'stype' => 'struct apreq_hook_t', 'elts' => [ { 'type' => 'apreq_hook_function_t', 'name' => 'hook', 'comment' => '*< the hook function' }, { 'type' => 'apreq_hook_t *', 'name' => 'next', 'comment' => '*< next item in the linked list' }, { 'type' => 'apr_pool_t *', 'name' => 'pool', 'comment' => '*< pool which allocated this hook' }, { 'type' => 'void *', 'name' => 'ctx', 'comment' => '*< a user defined pointer passed to the hook function' } ], 'comment' => '* * A hook is called by the parser whenever data arrives in a file * upload parameter of the request body. You may associate any number * of hooks with a parser instance with apreq_parser_add_hook().' }, { 'type' => 'apreq_param_t', 'stype' => 'struct apreq_param_t', 'elts' => [ { 'type' => 'apr_table_t *', 'name' => 'info', 'comment' => '*< header table associated with the param' }, { 'type' => 'apr_bucket_brigade *', 'name' => 'upload', 'comment' => '*< brigade used to spool upload files' }, { 'type' => 'unsigned', 'name' => 'flags', 'comment' => '*< charsets, taint marks, app-specific bits' }, { 'type' => 'const apreq_value_t', 'name' => 'v', 'comment' => '*< underlying name/value info' } ], 'comment' => '* * @file apreq_param.h * @brief Request parsing and parameter API * @ingroup libapreq2 * Common data structure for params and file uploads' }, { 'type' => 'apreq_parser_t', 'stype' => 'struct apreq_parser_t', 'elts' => [ { 'type' => 'apreq_parser_function_t', 'name' => 'parser', 'comment' => '* the function which parses chunks of body data' }, { 'type' => 'const char *', 'name' => 'content_type', 'comment' => '* the Content-Type request header' }, { 'type' => 'apr_pool_t *', 'name' => 'pool', 'comment' => '* a pool which outlasts the bucket_alloc.' }, { 'type' => 'apr_bucket_alloc_t *', 'name' => 'bucket_alloc', 'comment' => '* bucket allocator used to create bucket brigades' }, { 'type' => 'apr_size_t', 'name' => 'brigade_limit', 'comment' => '* the maximum in-memory bytes a brigade may use' }, { 'type' => 'const char *', 'name' => 'temp_dir', 'comment' => '* the directory for generating temporary files' }, { 'type' => 'apreq_hook_t *', 'name' => 'hook', 'comment' => '* linked list of hooks' }, { 'type' => 'void *', 'name' => 'ctx', 'comment' => '* internal context pointer used by the parser function' } ], 'comment' => '* * A request body parser instance.' }, { 'type' => 'apreq_value_t', 'stype' => 'struct apreq_value_t', 'elts' => [ { 'type' => 'char *', 'name' => 'name', 'comment' => '*< value name' }, { 'type' => 'apr_size_t', 'name' => 'nlen', 'comment' => '*< length of name' }, { 'type' => 'apr_size_t', 'name' => 'dlen', 'comment' => '*< length of data' }, { 'type' => 'char', 'name' => 'data[1]', 'comment' => '*< value data' } ], 'comment' => '* @brief libapreq\'s pre-extensible string type' }, { 'type' => 'struct hook_ctx', 'stype' => 'struct hook_ctx', 'elts' => [ { 'type' => 'SV *', 'name' => 'hook' }, { 'type' => 'SV *', 'name' => 'bucket_data' }, { 'type' => 'SV *', 'name' => 'parent' }, { 'type' => 'PerlInterpreter *', 'name' => 'perl' } ] } ]; 1; libapreq2-2.17/glue/perl/xsbuilder/typemap0000644000175000017500000001015114277401734020244 0ustar jortonjortonAPR::Pool T_POOLOBJ APR::BucketAlloc T_PTROBJ APR::Request::Apache2 T_APREQ_HANDLE_APACHE2 APR::Request::Cookie T_APREQ_COOKIE APR::Request::Param::Table T_APREQ_TABLE APR::Brigade T_PTROBJ APR::Table T_HASHOBJ APR::Request::CGI T_APREQ_HANDLE_CGI APR::Request::Param T_APREQ_PARAM APR::Request::Error T_APREQ_ERROR Apache2::RequestRec T_APACHEOBJ APR::Request::Cookie::Table T_HASHOBJ APR::Request T_APREQ_HANDLE APR::Request::Parser T_PTROBJ APR::Request::Hook T_PTROBJ apr_status_t T_IV const void * T_PTR const char * T_PV apreq_xs_subclass_t T_SUBCLASS const apr_size_t T_UV apr_size_t T_UV unsigned char T_UV apreq_parser_function_t T_APREQ_PARSER_FUNCTION apreq_hook_function_t T_APREQ_HOOK_FUNCTION INPUT T_APREQ_HANDLE $var = apreq_xs_sv2handle(aTHX_ $arg) T_HASHOBJ if (sv_derived_from($arg, \"${ntype}\")) { if (SVt_PVHV == SvTYPE(SvRV($arg))) { SV *hv = SvRV($arg); MAGIC *mg; if (SvMAGICAL(hv)) { if ((mg = mg_find(hv, PERL_MAGIC_tied))) { $var = INT2PTR(void *, MgObjIV(mg)); } else { Perl_warn(aTHX_ \"Not a tied hash: (magic=%c)\", mg); $var = NULL; } } else { Perl_warn(aTHX_ \"SV is not tied\"); $var = NULL; } } else { $var = INT2PTR(void *, SvObjIV($arg)); } } else { Perl_croak(aTHX_ \"argument is not a blessed reference \" \"(expecting an %s derived object)\", \"${ntype}\"); } T_APREQ_ERROR $var = (HV *)SvRV($arg) T_APREQ_HANDLE_APACHE2 $var = apreq_xs_sv2handle(aTHX_ $arg) T_APREQ_COOKIE $var = apreq_xs_sv2cookie(aTHX_ $arg) T_SUBCLASS if (SvROK($arg) || !sv_derived_from($arg, \"$Package\")) Perl_croak(aTHX_ \"Usage: argument is not a subclass of $Package\"); $var = SvPV_nolen($arg) T_APREQ_HANDLE_CGI $var = apreq_xs_sv2handle(aTHX_ $arg) T_APREQ_PARAM $var = apreq_xs_sv2param(aTHX_ $arg) T_APREQ_TABLE if (sv_derived_from($arg, \"${ntype}\")) { if (SVt_PVHV == SvTYPE(SvRV($arg))) { SV *hv = SvRV($arg); MAGIC *mg; if (SvMAGICAL(hv)) { if ((mg = mg_find(hv, PERL_MAGIC_tied))) { $var = INT2PTR(void *,MgObjIV(mg)); } else { Perl_warn(aTHX_ \"Not a tied hash: (magic=%c)\", mg); $var = NULL; } } else { Perl_warn(aTHX_ \"SV is not tied\"); $var = NULL; } } else { $var = INT2PTR(void *, SvObjIV($arg)); } } else { Perl_croak(aTHX_ \"argument is not a blessed reference \" \"(expecting an %s derived object)\", \"${ntype}\"); } T_APREQ_PARSER_FUNCTION $var = INT2PTR(apreq_parser_function_t, SvObjIV($arg)) T_APREQ_HOOK_FUNCTION $var = INT2PTR(apreq_hook_function_t, SvObjIV($arg)) OUTPUT T_APREQ_HANDLE $arg = apreq_xs_handle2sv(aTHX_ $var, class, parent); T_APREQ_TABLE $arg = apreq_xs_table2sv(aTHX_ $var, \"${ntype}\", parent, PARAM_CLASS, sizeof(PARAM_CLASS)-1); T_HASHOBJ { SV *hv = (SV*)newHV(); SV *rsv = $arg; sv_setref_pv(rsv, \"${ntype}\", $var); sv_magic(hv, rsv, PERL_MAGIC_tied, Nullch, 0); $arg = SvREFCNT_inc(sv_bless(sv_2mortal(newRV_noinc(hv)), gv_stashpv(\"${ntype}\", TRUE))); } T_APREQ_ERROR $arg = sv_bless(newRV_noinc((SV*)$var), gv_stashpvn(\"${ntype}\", sizeof(\"${ntype}\") - 1, FALSE); T_APREQ_HANDLE_APACHE2 $arg = apreq_xs_handle2sv(aTHX_ $var, class, SvRV(ST(1))); SvMAGIC(SvRV($arg))->mg_ptr = (void *)r; T_APREQ_COOKIE $arg = apreq_xs_cookie2sv(aTHX_ $var, class, parent); T_APREQ_HANDLE_CGI $arg = apreq_xs_handle2sv(aTHX_ $var, class, SvRV(ST(1))); T_APREQ_PARAM $arg = apreq_xs_param2sv(aTHX_ $var, class, parent); T_APREQ_PARSER_FUNCTION $arg = sv_setref_pv(newSV(0), class, $var); T_APREQ_HOOK_FUNCTION $arg = sv_setref_pv(newSV(0), class, $var); libapreq2-2.17/glue/README0000644000175000017500000000004614277401734014561 0ustar jortonjortonLanguage bindings go in glue//. libapreq2-2.17/include/apreq.h0000644000175000017500000002245014277401734015654 0ustar jortonjorton/* ** Licensed to the Apache Software Foundation (ASF) under one or more ** contributor license agreements. See the NOTICE file distributed with ** this work for additional information regarding copyright ownership. ** The ASF licenses this file to You under the Apache License, Version 2.0 ** (the "License"); you may not use this file except in compliance with ** the License. You may obtain a copy of the License at ** ** http://www.apache.org/licenses/LICENSE-2.0 ** ** Unless required by applicable law or agreed to in writing, software ** distributed under the License is distributed on an "AS IS" BASIS, ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. ** See the License for the specific language governing permissions and ** limitations under the License. */ #ifndef APREQ_H #define APREQ_H #ifdef APREQ_DEBUG #include #endif #include "apr_tables.h" #include #ifdef __cplusplus extern "C" { #endif /** * @file apreq.h * @brief Main header file... * @ingroup libapreq2 * * Define the generic APREQ_ macros and common data structures. */ #ifndef WIN32 /** * The public APREQ functions are declared with APREQ_DECLARE(), so they may * use the most appropriate calling convention. Public APR functions with * variable arguments must use APR_DECLARE_NONSTD(). * * @remark Both the declaration and implementations must use the same macro. */ /** APREQ_DECLARE(rettype) apeq_func(args) */ #define APREQ_DECLARE(d) APR_DECLARE(d) /** * The public APEQ functions using variable arguments are declared with * APEQ_DECLARE_NONSTD(), as they must follow the C language calling convention. * @see APEQ_DECLARE @see APEQ_DECLARE_DATA * @remark Both the declaration and implementations must use the same macro. * @example */ /** APEQ_DECLARE_NONSTD(rettype) apr_func(args, ...); */ #define APREQ_DECLARE_NONSTD(d) APR_DECLARE_NONSTD(d) /** * The public APREQ variables are declared with APREQ_DECLARE_DATA. * This assures the appropriate indirection is invoked at compile time. * @see APREQ_DECLARE @see APREQ_DECLARE_NONSTD * @remark Note that the declaration and implementations use different forms, * but both must include the macro. */ /** extern APREQ_DECLARE_DATA type apr_variable;\n * APREQ_DECLARE_DATA type apr_variable = value; */ #define APREQ_DECLARE_DATA #elif defined (APREQ_DECLARE_STATIC) #define APREQ_DECLARE(type) type __stdcall #define APREQ_DECLARE_NONSTD(type) type #define APREQ_DECLARE_DATA #elif defined (APREQ_DECLARE_EXPORT) #define APREQ_DECLARE(type) __declspec(dllexport) type __stdcall #define APREQ_DECLARE_NONSTD(type) __declspec(dllexport) type #define APREQ_DECLARE_DATA __declspec(dllexport) #else #define APREQ_DECLARE(type) __declspec(dllimport) type __stdcall #define APREQ_DECLARE_NONSTD(type) __declspec(dllimport) type #define APREQ_DECLARE_DATA __declspec(dllimport) #endif /** * Read chucks of data in 64k blocks from the request */ #define APREQ_DEFAULT_READ_BLOCK_SIZE (64 * 1024) /** * Maximum number of bytes mod_apreq2 will send off to libapreq2 for parsing. * mod_apreq2 will log this event and subsequently remove itself * from the filter chain. * @see ap_set_read_limit */ #define APREQ_DEFAULT_READ_LIMIT (64 * 1024 * 1024) /** * Maximum number of bytes mod_apreq2 will let accumulate within the * heap-buckets in a brigade. Excess data will be spooled to an * appended file bucket * @see ap_set_brigade_read_limit */ #define APREQ_DEFAULT_BRIGADE_LIMIT (256 * 1024) /** * Number of elements in the initial apr_table * @see apr_table_make */ #define APREQ_DEFAULT_NELTS 8 /** * Check to see if specified bit f is off in bitfield name */ #define APREQ_FLAGS_OFF(f, name) ((f) &= ~(name##_MASK << name##_BIT)) /** * Check to see if specified bit f is on in bitfield name */ #define APREQ_FLAGS_ON(f, name) ((f) |= (name##_MASK << name##_BIT)) /** * Get specified bit f in bitfield name */ #define APREQ_FLAGS_GET(f, name) (((f) >> name##_BIT) & name##_MASK) /** * Set specified bit f in bitfield name to value * Note the below BIT/Mask defines are used sans the * _BIT, _MASK because of the this define's \#\#_MASK, \#\#_BIT usage. * Each come in a pair */ #define APREQ_FLAGS_SET(f, name, value) \ ((f) = (((f) & ~(name##_MASK << name##_BIT)) \ | ((name##_MASK & (value)) << name##_BIT))) /** * Charset Bit * @see APREQ_FLAGS_OFF @see APREQ_FLAGS_ON * @see APREQ_FLAGS_GET @see APREQ_FLAGS_SET */ #define APREQ_CHARSET_BIT 0 /** * Charset Mask * @see APREQ_FLAGS_OFF @see APREQ_FLAGS_ON * @see APREQ_FLAGS_GET @see APREQ_FLAGS_SET */ #define APREQ_CHARSET_MASK 255 /** * Tainted Bit * @see APREQ_FLAGS_OFF @see APREQ_FLAGS_ON * @see APREQ_FLAGS_GET @see APREQ_FLAGS_SET */ #define APREQ_TAINTED_BIT 8 /** * Tainted Mask * @see APREQ_FLAGS_OFF @see APREQ_FLAGS_ON * @see APREQ_FLAGS_GET @see APREQ_FLAGS_SET */ #define APREQ_TAINTED_MASK 1 /** * Cookier Version Bit * @see APREQ_FLAGS_OFF @see APREQ_FLAGS_ON * @see APREQ_FLAGS_GET @see APREQ_FLAGS_SET */ #define APREQ_COOKIE_VERSION_BIT 11 /** * Cookie Version Mask * @see APREQ_FLAGS_OFF @see APREQ_FLAGS_ON * @see APREQ_FLAGS_GET @see APREQ_FLAGS_SET */ #define APREQ_COOKIE_VERSION_MASK 3 /** * Cookie's Secure Bit * @see APREQ_FLAGS_OFF @see APREQ_FLAGS_ON * @see APREQ_FLAGS_GET @see APREQ_FLAGS_SET */ #define APREQ_COOKIE_SECURE_BIT 13 /** * Cookie's Secure Mask * @see APREQ_FLAGS_OFF @see APREQ_FLAGS_ON * @see APREQ_FLAGS_GET @see APREQ_FLAGS_SET */ #define APREQ_COOKIE_SECURE_MASK 1 /** * Cookie's HttpOnly Bit * @see APREQ_FLAGS_OFF @see APREQ_FLAGS_ON * @see APREQ_FLAGS_GET @see APREQ_FLAGS_SET */ #define APREQ_COOKIE_HTTPONLY_BIT 14 /** * Cookie's HttpOnly Mask * @see APREQ_FLAGS_OFF @see APREQ_FLAGS_ON * @see APREQ_FLAGS_GET @see APREQ_FLAGS_SET */ #define APREQ_COOKIE_HTTPONLY_MASK 1 /** Character encodings. */ typedef enum { APREQ_CHARSET_ASCII =0, APREQ_CHARSET_LATIN1 =1, /* ISO-8859-1 */ APREQ_CHARSET_CP1252 =2, /* Windows-1252 */ APREQ_CHARSET_UTF8 =8 } apreq_charset_t; /** @enum apreq_join_t Join type */ typedef enum { APREQ_JOIN_AS_IS, /**< Join the strings without modification */ APREQ_JOIN_ENCODE, /**< Url-encode the strings before joining them */ APREQ_JOIN_DECODE, /**< Url-decode the strings before joining them */ APREQ_JOIN_QUOTE /**< Quote the strings, backslashing existing quote marks. */ } apreq_join_t; /** @enum apreq_match_t Match type */ typedef enum { APREQ_MATCH_FULL, /**< Full match only. */ APREQ_MATCH_PARTIAL /**< Partial matches are ok. */ } apreq_match_t; /** @enum apreq_expires_t Expiration date format */ typedef enum { APREQ_EXPIRES_HTTP, /**< Use date formatting consistent with RFC 2616 */ APREQ_EXPIRES_NSCOOKIE /**< Use format consistent with Netscape's Cookie Spec */ } apreq_expires_t; /** @brief libapreq's pre-extensible string type */ typedef struct apreq_value_t { char *name; /**< value name */ apr_size_t nlen; /**< length of name */ apr_size_t dlen; /**< length of data */ char data[1]; /**< value data */ } apreq_value_t; /** * Adds the specified apreq_value_t to the apr_table_t. * * @param v value to add * @param t add v to this table * * @return void * * @ see apr_table_t @see apr_value_t */ static APR_INLINE void apreq_value_table_add(const apreq_value_t *v, apr_table_t *t) { apr_table_addn(t, v->name, v->data); } /** * @param T type * @param A attribute * @param P * * XXX */ #define apreq_attr_to_type(T,A,P) ( (T*) ((char*)(P)-offsetof(T,A)) ) /** * Initialize libapreq2. Applications (except apache modules using * mod_apreq) should call this exactly once before they use any * libapreq2 modules. If you want to modify the list of default parsers * with apreq_register_parser(), please use apreq_pre_initialize() * and apreq_post_initialize() instead. * * @param pool a base pool persisting while libapreq2 is used * @remarks after you destroy the pool, you have to call this function again * with a new pool if you still plan to use libapreq2 */ APREQ_DECLARE(apr_status_t) apreq_initialize(apr_pool_t *pool); /** * Pre-initialize libapreq2. Applications (except apache modules using * mod_apreq2) should call this exactly once before they register custom * parsers with libapreq2. mod_apreq2 does this automatically during the * post-config phase, so modules that need call apreq_register_parser should * create a post-config hook using APR_HOOK_MIDDLE. * * @param pool a base pool persisting while libapreq2 is used * @remarks after you destroyed the pool, you have to call this function again * with a new pool if you still plan to use libapreq2 */ APREQ_DECLARE(apr_status_t) apreq_pre_initialize(apr_pool_t *pool); /** * Post-initialize libapreq2. Applications (except apache modules using * mod_apreq2) should this exactly once before they use any * libapreq2 modules for parsing. * * @param pool the same pool that was used in apreq_pre_initialize(). */ APREQ_DECLARE(apr_status_t) apreq_post_initialize(apr_pool_t *pool); #ifdef __cplusplus } #endif #endif /* APREQ_H */ libapreq2-2.17/include/apreq_config.h.in0000644000175000017500000000335214277402421017600 0ustar jortonjorton/* include/apreq_config.h.in. Generated from configure.ac by autoheader. */ /* Define to 1 if you have the header file. */ #undef HAVE_DLFCN_H /* Define to 1 if you have the header file. */ #undef HAVE_INTTYPES_H /* Define to 1 if you have the header file. */ #undef HAVE_STDINT_H /* Define to 1 if you have the header file. */ #undef HAVE_STDIO_H /* Define to 1 if you have the header file. */ #undef HAVE_STDLIB_H /* Define to 1 if you have the header file. */ #undef HAVE_STRINGS_H /* Define to 1 if you have the header file. */ #undef HAVE_STRING_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_STAT_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_TYPES_H /* Define to 1 if you have the header file. */ #undef HAVE_UNISTD_H /* Define to the sub-directory where libtool stores uninstalled libraries. */ #undef LT_OBJDIR /* 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 /* 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 libapreq2-2.17/include/apreq_cookie.h0000644000175000017500000001731314277401734017207 0ustar jortonjorton/* ** Licensed to the Apache Software Foundation (ASF) under one or more ** contributor license agreements. See the NOTICE file distributed with ** this work for additional information regarding copyright ownership. ** The ASF licenses this file to You under the Apache License, Version 2.0 ** (the "License"); you may not use this file except in compliance with ** the License. You may obtain a copy of the License at ** ** http://www.apache.org/licenses/LICENSE-2.0 ** ** Unless required by applicable law or agreed to in writing, software ** distributed under the License is distributed on an "AS IS" BASIS, ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. ** See the License for the specific language governing permissions and ** limitations under the License. */ #ifndef APREQ_COOKIE_H #define APREQ_COOKIE_H #include "apreq.h" #include "apr_time.h" #ifdef __cplusplus extern "C" { #endif /** * @file apreq_cookie.h * @brief Cookies and Jars. * @ingroup libapreq2 * * apreq_cookie.h describes a common server-side API for request (incoming) * and response (outgoing) cookies. It aims towards compliance with the * standard cookie specifications listed below. * * @see http://wp.netscape.com/newsref/std/cookie_spec.html * @see http://www.ietf.org/rfc/rfc2109.txt * @see http://www.ietf.org/rfc/rfc2964.txt * @see http://www.ietf.org/rfc/rfc2965.txt * */ /** This macro is deprecated. * * Maximum length of a single Set-Cookie(2) header. */ #define APREQ_COOKIE_MAX_LENGTH 4096 /** @brief Cookie type, supporting both Netscape and RFC cookie specifications. */ typedef struct apreq_cookie_t { char *path; /**< Restricts url path */ char *domain; /**< Restricts server domain */ char *port; /**< Restricts server port */ char *comment; /**< RFC cookies may send a comment */ char *commentURL; /**< RFC cookies may place an URL here */ apr_time_t max_age; /**< total duration of cookie: -1 == session */ unsigned flags; /**< charsets, taint marks, app-specific bits */ const apreq_value_t v; /**< "raw" cookie value */ } apreq_cookie_t; /** Upgrades a jar's table values to apreq_cookie_t structs. */ static APR_INLINE apreq_cookie_t *apreq_value_to_cookie(const char *val) { union { const char *in; char *out; } deconst; deconst.in = val; return apreq_attr_to_type(apreq_cookie_t, v, apreq_attr_to_type(apreq_value_t, data, deconst.out)); } /**@return 1 if this is an RFC cookie, 0 if its a Netscape cookie. */ static APR_INLINE unsigned apreq_cookie_version(const apreq_cookie_t *c) { return APREQ_FLAGS_GET(c->flags, APREQ_COOKIE_VERSION); } /** Sets the cookie's protocol version. */ static APR_INLINE void apreq_cookie_version_set(apreq_cookie_t *c, unsigned v) { APREQ_FLAGS_SET(c->flags, APREQ_COOKIE_VERSION, v); } /** @return 1 if the secure flag is set, 0 otherwise. */ static APR_INLINE unsigned apreq_cookie_is_secure(const apreq_cookie_t *c) { return APREQ_FLAGS_GET(c->flags, APREQ_COOKIE_SECURE); } /** Sets the cookie's secure flag, meaning it only * comes back over an SSL-encrypted connction. */ static APR_INLINE void apreq_cookie_secure_on(apreq_cookie_t *c) { APREQ_FLAGS_ON(c->flags, APREQ_COOKIE_SECURE); } /** Turns off the cookie's secure flag. */ static APR_INLINE void apreq_cookie_secure_off(apreq_cookie_t *c) { APREQ_FLAGS_OFF(c->flags, APREQ_COOKIE_SECURE); } /** @return 1 if the HttpOnly flag is set, 0 otherwise. */ static APR_INLINE unsigned apreq_cookie_is_httponly(const apreq_cookie_t *c) { return APREQ_FLAGS_GET(c->flags, APREQ_COOKIE_HTTPONLY); } /** Sets the cookie's HttpOnly flag, meaning it is not * accessible through client-side script in supported * browsers. */ static APR_INLINE void apreq_cookie_httponly_on(apreq_cookie_t *c) { APREQ_FLAGS_ON(c->flags, APREQ_COOKIE_HTTPONLY); } /** Turns off the cookie's HttpOnly flag. */ static APR_INLINE void apreq_cookie_httponly_off(apreq_cookie_t *c) { APREQ_FLAGS_OFF(c->flags, APREQ_COOKIE_HTTPONLY); } /** @return 1 if the taint flag is set, 0 otherwise. */ static APR_INLINE unsigned apreq_cookie_is_tainted(const apreq_cookie_t *c) { return APREQ_FLAGS_GET(c->flags, APREQ_TAINTED); } /** Sets the cookie's tainted flag. */ static APR_INLINE void apreq_cookie_tainted_on(apreq_cookie_t *c) { APREQ_FLAGS_ON(c->flags, APREQ_TAINTED); } /** Turns off the cookie's tainted flag. */ static APR_INLINE void apreq_cookie_tainted_off(apreq_cookie_t *c) { APREQ_FLAGS_OFF(c->flags, APREQ_TAINTED); } /** * Parse a cookie header and store the cookies in an apr_table_t. * * @param pool pool which allocates the cookies * @param jar table where parsed cookies are stored * @param header the header value * * @return APR_SUCCESS. * @return ::APREQ_ERROR_BADSEQ if an unparsable character sequence appears. * @return ::APREQ_ERROR_MISMATCH if an rfc-cookie attribute appears in a * netscape cookie header. * @return ::APR_ENOTIMPL if an unrecognized rfc-cookie attribute appears. * @return ::APREQ_ERROR_NOTOKEN if a required token was not present. * @return ::APREQ_ERROR_BADCHAR if an unexpected token was present. */ APREQ_DECLARE(apr_status_t) apreq_parse_cookie_header(apr_pool_t *pool, apr_table_t *jar, const char *header); /** * Returns a new cookie, made from the argument list. * * @param pool Pool which allocates the cookie. * @param name The cookie's name. * @param nlen Length of name. * @param value The cookie's value. * @param vlen Length of value. * * @return the new cookie */ APREQ_DECLARE(apreq_cookie_t *) apreq_cookie_make(apr_pool_t *pool, const char *name, const apr_size_t nlen, const char *value, const apr_size_t vlen); /** * Returns a string that represents the cookie as it would appear * in a valid "Set-Cookie*" header. * * @param c cookie. * @param p pool which allocates the returned string. * * @return header string. */ APREQ_DECLARE(char*) apreq_cookie_as_string(const apreq_cookie_t *c, apr_pool_t *p); /** * Same functionality as apreq_cookie_as_string. Stores the string * representation in buf, using up to len bytes in buf as storage. * The return value has the same semantics as that of apr_snprintf, * including the special behavior for a "len = 0" argument. * * @param c cookie. * @param buf storage location for the result. * @param len size of buf's storage area. * * @return size of resulting header string. */ APREQ_DECLARE(int) apreq_cookie_serialize(const apreq_cookie_t *c, char *buf, apr_size_t len); /** * Set the Cookie's expiration date. * * @param c The cookie. * @param time_str If NULL, the Cookie's expiration date is unset, * making it a session cookie. This means no "expires" or "max-age" * attribute will appear in the cookie's serialized form. If time_str * is not NULL, the expiration date will be reset to the offset (from now) * represented by time_str. The time_str should be in a format that * apreq_atoi64t() can understand, namely /[+-]?\\d+\\s*[YMDhms]/. * * @remarks Now time_str may also be a fixed date; see apr_date_parse_rfc() * for admissible formats. */ APREQ_DECLARE(void) apreq_cookie_expires(apreq_cookie_t *c, const char *time_str); #ifdef __cplusplus } #endif #endif /*APREQ_COOKIE_H*/ libapreq2-2.17/include/apreq_error.h0000644000175000017500000000611214277401734017062 0ustar jortonjorton/* ** Licensed to the Apache Software Foundation (ASF) under one or more ** contributor license agreements. See the NOTICE file distributed with ** this work for additional information regarding copyright ownership. ** The ASF licenses this file to You under the Apache License, Version 2.0 ** (the "License"); you may not use this file except in compliance with ** the License. You may obtain a copy of the License at ** ** http://www.apache.org/licenses/LICENSE-2.0 ** ** Unless required by applicable law or agreed to in writing, software ** distributed under the License is distributed on an "AS IS" BASIS, ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. ** See the License for the specific language governing permissions and ** limitations under the License. */ #ifndef APREQ_ERROR_H #define APREQ_ERROR_H #include "apr_errno.h" #include "apreq.h" #ifdef __cplusplus extern "C" { #endif /** * apreq's wrapper around apr_strerror(); * recognizes APREQ_ERROR_* status codes. */ APREQ_DECLARE(char *) apreq_strerror(apr_status_t s, char *buf, apr_size_t bufsize); /** * @file apreq_error.h * @brief Error status codes. * @ingroup libapreq2 * * Define the APREQ_ error codes. */ #ifndef APR_EBADARG /** * Bad Arguments return value * @see APR_BADARG */ #define APR_EBADARG APR_BADARG /* XXX: don't use APR_BADARG */ #endif /** Internal apreq error. */ #define APREQ_ERROR_GENERAL APR_OS_START_USERERR /** Attempted to perform unsafe action with tainted data. */ #define APREQ_ERROR_TAINTED (APREQ_ERROR_GENERAL + 1) /** Parsing interrupted. */ #define APREQ_ERROR_INTERRUPT (APREQ_ERROR_GENERAL + 2) /** Invalid input data. */ #define APREQ_ERROR_BADDATA (APREQ_ERROR_GENERAL + 10) /** Invalid character. */ #define APREQ_ERROR_BADCHAR (APREQ_ERROR_BADDATA + 1) /** Invalid byte sequence. */ #define APREQ_ERROR_BADSEQ (APREQ_ERROR_BADDATA + 2) /** Invalid attribute. */ #define APREQ_ERROR_BADATTR (APREQ_ERROR_BADDATA + 3) /** Invalid header. */ #define APREQ_ERROR_BADHEADER (APREQ_ERROR_BADDATA + 4) /** Invalid utf8 encoding. */ #define APREQ_ERROR_BADUTF8 (APREQ_ERROR_BADDATA + 5) /** Missing input data. */ #define APREQ_ERROR_NODATA (APREQ_ERROR_GENERAL + 20) /** Missing required token. */ #define APREQ_ERROR_NOTOKEN (APREQ_ERROR_NODATA + 1) /** Missing attribute. */ #define APREQ_ERROR_NOATTR (APREQ_ERROR_NODATA + 2) /** Missing header. */ #define APREQ_ERROR_NOHEADER (APREQ_ERROR_NODATA + 3) /** Missing parser. */ #define APREQ_ERROR_NOPARSER (APREQ_ERROR_NODATA + 4) /** Conflicting information. */ #define APREQ_ERROR_MISMATCH (APREQ_ERROR_GENERAL + 30) /** Exceeds configured maximum limit. */ #define APREQ_ERROR_OVERLIMIT (APREQ_ERROR_MISMATCH + 1) /** Below configured minimum limit. */ #define APREQ_ERROR_UNDERLIMIT (APREQ_ERROR_MISMATCH + 2) /** Setting already configured. */ #define APREQ_ERROR_NOTEMPTY (APREQ_ERROR_MISMATCH + 3) #ifdef __cplusplus } #endif #endif /* APREQ_ERROR_H */ libapreq2-2.17/include/apreq_module.h0000644000175000017500000003215214277401734017221 0ustar jortonjorton/* ** Licensed to the Apache Software Foundation (ASF) under one or more ** contributor license agreements. See the NOTICE file distributed with ** this work for additional information regarding copyright ownership. ** The ASF licenses this file to You under the Apache License, Version 2.0 ** (the "License"); you may not use this file except in compliance with ** the License. You may obtain a copy of the License at ** ** http://www.apache.org/licenses/LICENSE-2.0 ** ** Unless required by applicable law or agreed to in writing, software ** distributed under the License is distributed on an "AS IS" BASIS, ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. ** See the License for the specific language governing permissions and ** limitations under the License. */ #ifndef APREQ_MODULE_H #define APREQ_MODULE_H #include "apreq_cookie.h" #include "apreq_parser.h" #include "apreq_error.h" #ifdef __cplusplus extern "C" { #endif /** * @file apreq_module.h * @brief Module API * @ingroup libapreq2 */ /** * An apreq handle associated with a module. The structure * may have variable size, because the module may append its own data * structures after it. */ typedef struct apreq_handle_t { /** the apreq module which implements this handle */ const struct apreq_module_t *module; /** the pool which defines the lifetime of the parsed data */ apr_pool_t *pool; /** the allocator, which persists at least as long as the pool */ apr_bucket_alloc_t *bucket_alloc; } apreq_handle_t; /** * @brief Vtable describing the necessary module functions. */ typedef struct apreq_module_t { /** name of this apreq module */ const char *name; /** magic number identifying the module and version */ apr_uint32_t magic_number; /** get a table with all cookies */ apr_status_t (*jar)(apreq_handle_t *, const apr_table_t **); /** get a table with all query string parameters */ apr_status_t (*args)(apreq_handle_t *, const apr_table_t **); /** get a table with all body parameters */ apr_status_t (*body)(apreq_handle_t *, const apr_table_t **); /** get a cookie by its name */ apreq_cookie_t *(*jar_get)(apreq_handle_t *, const char *); /** get a query string parameter by its name */ apreq_param_t *(*args_get)(apreq_handle_t *, const char *); /** get a body parameter by its name */ apreq_param_t *(*body_get)(apreq_handle_t *, const char *); /** gets the parser associated with the request body */ apr_status_t (*parser_get)(apreq_handle_t *, const apreq_parser_t **); /** manually set a parser for the request body */ apr_status_t (*parser_set)(apreq_handle_t *, apreq_parser_t *); /** add a hook function */ apr_status_t (*hook_add)(apreq_handle_t *, apreq_hook_t *); /** determine the maximum in-memory bytes a brigade may use */ apr_status_t (*brigade_limit_get)(apreq_handle_t *, apr_size_t *); /** set the maximum in-memory bytes a brigade may use */ apr_status_t (*brigade_limit_set)(apreq_handle_t *, apr_size_t); /** determine the maximum amount of data that will be fed into a parser */ apr_status_t (*read_limit_get)(apreq_handle_t *, apr_uint64_t *); /** set the maximum amount of data that will be fed into a parser */ apr_status_t (*read_limit_set)(apreq_handle_t *, apr_uint64_t); /** determine the directory used by the parser for temporary files */ apr_status_t (*temp_dir_get)(apreq_handle_t *, const char **); /** set the directory used by the parser for temporary files */ apr_status_t (*temp_dir_set)(apreq_handle_t *, const char *); } apreq_module_t; /** * Defines the module-specific status codes which * are commonly considered to be non-fatal. * * @param s status code returned by an apreq_module_t method. * * @return 1 if s is fatal, 0 otherwise. */ static APR_INLINE unsigned apreq_module_status_is_error(apr_status_t s) { switch (s) { case APR_SUCCESS: case APR_INCOMPLETE: case APR_EINIT: case APREQ_ERROR_NODATA: case APREQ_ERROR_NOPARSER: case APREQ_ERROR_NOHEADER: return 0; default: return 1; } } /** * Expose the parsed "cookie" header associated to this handle. * * @param req The request handle * @param t The resulting table, which will either be NULL or a * valid table object on return. * * @return APR_SUCCESS or a module-specific error status code. */ static APR_INLINE apr_status_t apreq_jar(apreq_handle_t *req, const apr_table_t **t) { return req->module->jar(req,t); } /** * Expose the parsed "query string" associated to this handle. * * @param req The request handle * @param t The resulting table, which will either be NULL or a * valid table object on return. * * @return APR_SUCCESS or a module-specific error status code. */ static APR_INLINE apr_status_t apreq_args(apreq_handle_t *req, const apr_table_t **t) { return req->module->args(req,t); } /** * Expose the parsed "request body" associated to this handle. * * @param req The request handle * @param t The resulting table, which will either be NULL or a * valid table object on return. * * @return APR_SUCCESS or a module-specific error status code. */ static APR_INLINE apr_status_t apreq_body(apreq_handle_t *req, const apr_table_t **t) { return req->module->body(req, t); } /** * Fetch the first cookie with the given name. * * @param req The request handle * @param name Case-insensitive cookie name. * * @return First matching cookie, or NULL if none match. */ static APR_INLINE apreq_cookie_t *apreq_jar_get(apreq_handle_t *req, const char *name) { return req->module->jar_get(req, name); } /** * Fetch the first query string param with the given name. * * @param req The request handle * @param name Case-insensitive param name. * * @return First matching param, or NULL if none match. */ static APR_INLINE apreq_param_t *apreq_args_get(apreq_handle_t *req, const char *name) { return req->module->args_get(req, name); } /** * Fetch the first body param with the given name. * * @param req The request handle * @param name Case-insensitive cookie name. * * @return First matching param, or NULL if none match. */ static APR_INLINE apreq_param_t *apreq_body_get(apreq_handle_t *req, const char *name) { return req->module->body_get(req, name); } /** * Fetch the active body parser. * * @param req The request handle * @param parser Points to the active parser on return. * * @return APR_SUCCESS or module-specific error. * */ static APR_INLINE apr_status_t apreq_parser_get(apreq_handle_t *req, const apreq_parser_t **parser) { return req->module->parser_get(req, parser); } /** * Set the body parser for this request. * * @param req The request handle * @param parser New parser to use. * * @return APR_SUCCESS or module-specific error. */ static APR_INLINE apr_status_t apreq_parser_set(apreq_handle_t *req, apreq_parser_t *parser) { return req->module->parser_set(req, parser); } /** * Add a parser hook for this request. * * @param req The request handle * @param hook Hook to add. * * @return APR_SUCCESS or module-specific error. */ static APR_INLINE apr_status_t apreq_hook_add(apreq_handle_t *req, apreq_hook_t *hook) { return req->module->hook_add(req, hook); } /** * Set the active brigade limit. * * @param req The handle. * @param bytes New limit to use. * * @return APR_SUCCESS or module-specific error. * */ static APR_INLINE apr_status_t apreq_brigade_limit_set(apreq_handle_t *req, apr_size_t bytes) { return req->module->brigade_limit_set(req, bytes); } /** * Get the active brigade limit. * * @param req The handle. * @param bytes Pointer to resulting (current) limit. * * @return APR_SUCCESS or a module-specific error, * which may leave bytes undefined. */ static APR_INLINE apr_status_t apreq_brigade_limit_get(apreq_handle_t *req, apr_size_t *bytes) { return req->module->brigade_limit_get(req, bytes); } /** * Set the active read limit. * * @param req The handle. * @param bytes New limit to use. * * @return APR_SUCCESS or a module-specific error. * */ static APR_INLINE apr_status_t apreq_read_limit_set(apreq_handle_t *req, apr_uint64_t bytes) { return req->module->read_limit_set(req, bytes); } /** * Get the active read limit. * * @param req The request handle. * @param bytes Pointer to resulting (current) limit. * * @return APR_SUCCESS or a module-specific error, * which may leave bytes undefined. */ static APR_INLINE apr_status_t apreq_read_limit_get(apreq_handle_t *req, apr_uint64_t *bytes) { return req->module->read_limit_get(req, bytes); } /** * Set the active temp directory. * * @param req The handle. * @param path New path to use; may be NULL. * * @return APR_SUCCESS or a module-specific error . */ static APR_INLINE apr_status_t apreq_temp_dir_set(apreq_handle_t *req, const char *path) { return req->module->temp_dir_set(req, path); } /** * Get the active temp directory. * * @param req The handle. * @param path Resulting path to temp dir. * * @return APR_SUCCESS implies path is valid, but may also be NULL. * Any other return value is module-specific, and may leave * path undefined. */ static APR_INLINE apr_status_t apreq_temp_dir_get(apreq_handle_t *req, const char **path) { return req->module->temp_dir_get(req, path); } /** * Convenience macro for defining a module by mapping * a function prefix to an associated apreq_module_t structure. * * @param pre Prefix to define new module. All attributes of * the apreq_module_t struct are defined with this as their * prefix. The generated struct is named by appending "_module" to * the prefix. * @param mmn Magic number (i.e. version number) of this module. */ #define APREQ_MODULE(pre, mmn) const apreq_module_t \ pre##_module = { #pre, mmn, \ pre##_jar, pre##_args, pre##_body, \ pre##_jar_get, pre##_args_get, pre##_body_get, \ pre##_parser_get, pre##_parser_set, pre##_hook_add, \ pre##_brigade_limit_get, pre##_brigade_limit_set, \ pre##_read_limit_get, pre##_read_limit_set, \ pre##_temp_dir_get, pre##_temp_dir_set, \ } /** * Create an apreq handle which is suitable for a CGI program. It * reads input from stdin and writes output to stdout. * * @param pool Pool associated to this handle. * * @return New handle; can only be NULL if the pool allocation failed. * * @remarks The handle gets cached in the pool's userdata, so subsequent * calls will retrieve the original cached handle. */ APREQ_DECLARE(apreq_handle_t*) apreq_handle_cgi(apr_pool_t *pool); /** * Create a custom apreq handle which knows only some static * values. Useful if you want to test the parser code or if you have * got data from a custom source (neither Apache 2 nor CGI). * * @param pool allocates the parse data, * @param query_string parsed into args table * @param cookie value of the request "Cookie" header * @param parser parses the request body * @param read_limit maximum bytes to read from the body * @param in brigade containing the request body * * @return new handle; can only be NULL if the pool allocation failed. */ APREQ_DECLARE(apreq_handle_t*) apreq_handle_custom(apr_pool_t *pool, const char *query_string, const char *cookie, apreq_parser_t *parser, apr_uint64_t read_limit, apr_bucket_brigade *in); /** * Find the first query string parameter or body parameter with the * specified name. The match is case-insensitive. * * @param req request handle. * @param key desired parameter name * * @return The first matching parameter (with args searched first) or NULL. */ APREQ_DECLARE(apreq_param_t *)apreq_param(apreq_handle_t *req, const char *key); /** * Find the first cookie with the specified name. * The match is case-insensitive. * * @param req request handle. * @param name desired cookie name * * @return The first matching cookie or NULL. */ #define apreq_cookie(req, name) apreq_jar_get(req, name) /** * Returns a table containing key-value pairs for the full request * (args + body). * * @param req request handle * @param p allocates the returned table. * * @return table representing all available params; is never NULL. */ APREQ_DECLARE(apr_table_t *) apreq_params(apreq_handle_t *req, apr_pool_t *p); /** * Returns a table containing all request cookies. * * @param req the apreq request handle * @param p Allocates the returned table. */ APREQ_DECLARE(apr_table_t *)apreq_cookies(apreq_handle_t *req, apr_pool_t *p); #ifdef __cplusplus } #endif #endif /* APREQ_MODULE_H */ libapreq2-2.17/include/apreq_param.h0000644000175000017500000001665114277401734017042 0ustar jortonjorton/* ** Licensed to the Apache Software Foundation (ASF) under one or more ** contributor license agreements. See the NOTICE file distributed with ** this work for additional information regarding copyright ownership. ** The ASF licenses this file to You under the Apache License, Version 2.0 ** (the "License"); you may not use this file except in compliance with ** the License. You may obtain a copy of the License at ** ** http://www.apache.org/licenses/LICENSE-2.0 ** ** Unless required by applicable law or agreed to in writing, software ** distributed under the License is distributed on an "AS IS" BASIS, ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. ** See the License for the specific language governing permissions and ** limitations under the License. */ #ifndef APREQ_PARAM_H #define APREQ_PARAM_H #include "apreq.h" #include "apr_buckets.h" #ifdef __cplusplus extern "C" { #endif /** * @file apreq_param.h * @brief Request parsing and parameter API * @ingroup libapreq2 */ /** Common data structure for params and file uploads */ typedef struct apreq_param_t { apr_table_t *info; /**< header table associated with the param */ apr_bucket_brigade *upload; /**< brigade used to spool upload files */ unsigned flags; /**< charsets, taint marks, app-specific bits */ const apreq_value_t v; /**< underlying name/value info */ } apreq_param_t; /** @return 1 if the taint flag is set, 0 otherwise. */ static APR_INLINE unsigned apreq_param_is_tainted(const apreq_param_t *p) { return APREQ_FLAGS_GET(p->flags, APREQ_TAINTED); } /** Sets the tainted flag. */ static APR_INLINE void apreq_param_tainted_on(apreq_param_t *p) { APREQ_FLAGS_ON(p->flags, APREQ_TAINTED); } /** Turns off the taint flag. */ static APR_INLINE void apreq_param_tainted_off(apreq_param_t *p) { APREQ_FLAGS_OFF(p->flags, APREQ_TAINTED); } /** Sets the character encoding for this parameter. */ static APR_INLINE apreq_charset_t apreq_param_charset_set(apreq_param_t *p, apreq_charset_t c) { apreq_charset_t old = (apreq_charset_t) APREQ_FLAGS_GET(p->flags, APREQ_CHARSET); APREQ_FLAGS_SET(p->flags, APREQ_CHARSET, c); return old; } /** Gets the character encoding for this parameter. */ static APR_INLINE apreq_charset_t apreq_param_charset_get(apreq_param_t *p) { return (apreq_charset_t)APREQ_FLAGS_GET(p->flags, APREQ_CHARSET); } /** Upgrades args and body table values to apreq_param_t structs. */ static APR_INLINE apreq_param_t *apreq_value_to_param(const char *val) { union { const char *in; char *out; } deconst; deconst.in = val; return apreq_attr_to_type(apreq_param_t, v, apreq_attr_to_type(apreq_value_t, data, deconst.out)); } /** creates a param from name/value information */ APREQ_DECLARE(apreq_param_t *) apreq_param_make(apr_pool_t *p, const char *name, const apr_size_t nlen, const char *val, const apr_size_t vlen); /** * Url-decodes a name=value pair into a param. * * @param param points to the decoded parameter on success * @param pool Pool from which the param is allocated. * @param word Start of the name=value pair. * @param nlen Length of urlencoded name. * @param vlen Length of urlencoded value. * * @return APR_SUCCESS on success. * @return ::APREQ_ERROR_BADSEQ or ::APREQ_ERROR_BADCHAR on malformed input. * * @remarks Unless vlen == 0, this function assumes there is * exactly one character ('=') which separates the pair. * */ APREQ_DECLARE(apr_status_t) apreq_param_decode(apreq_param_t **param, apr_pool_t *pool, const char *word, apr_size_t nlen, apr_size_t vlen); /** * Url-encodes the param into a name-value pair. * @param pool Pool which allocates the returned string. * @param param Param to encode. * @return name-value pair representing the param. */ APREQ_DECLARE(char *) apreq_param_encode(apr_pool_t *pool, const apreq_param_t *param); /** * Parse a url-encoded string into a param table. * @param pool pool used to allocate the param data. * @param t table to which the params are added. * @param qs Query string to url-decode. * @return APR_SUCCESS if successful, error otherwise. * @remark This function uses [&;] as the set of tokens * to delineate words, and will treat a word w/o '=' * as a name-value pair with value-length = 0. * */ APREQ_DECLARE(apr_status_t) apreq_parse_query_string(apr_pool_t *pool, apr_table_t *t, const char *qs); /** * Returns an array of parameters (apreq_param_t *) matching the given key. * The key is case-insensitive. * @param p Allocates the returned array. * @param t the parameter table returned by apreq_args(), apreq_body() * or apreq_params() * @param key Null-terminated search key, case insensitive. * key==NULL fetches all parameters. * @return an array of apreq_param_t* (pointers) * @remark Also parses the request if necessary. */ APREQ_DECLARE(apr_array_header_t *) apreq_params_as_array(apr_pool_t *p, const apr_table_t *t, const char *key); /** * Returns a ", " -joined string containing all parameters * for the requested key, an empty string if none are found. * The key is case-insensitive. * * @param p Allocates the return string. * @param t the parameter table returned by apreq_args(), apreq_body() * or apreq_params() * @param key Null-terminated parameter name, case insensitive. * key==NULL fetches all values. * @param mode Join type- see apreq_join(). * @return the joined string or NULL on error * @remark Also parses the request if necessary. */ APREQ_DECLARE(const char *) apreq_params_as_string(apr_pool_t *p, const apr_table_t *t, const char *key, apreq_join_t mode); /** * Returns a table of all params in req->body with non-NULL upload brigades. * @param body parameter table returned by apreq_body() or apreq_params() * @param pool Pool which allocates the table struct. * @return Upload table. * @remark Will parse the request if necessary. */ APREQ_DECLARE(const apr_table_t *) apreq_uploads(const apr_table_t *body, apr_pool_t *pool); /** * Returns the first param in req->body which has both param->v.name * matching key (case insensitive) and param->upload != NULL. * @param body parameter table returned by apreq_body() or apreq_params() * @param name Parameter name. key == NULL returns first upload. * @return Corresponding upload, NULL if none found. * @remark Will parse the request as necessary. */ APREQ_DECLARE(const apreq_param_t *) apreq_upload(const apr_table_t *body, const char *name); #ifdef __cplusplus } #endif #endif /* APREQ_PARAM_H */ libapreq2-2.17/include/apreq_parser.h0000644000175000017500000002360214277401734017230 0ustar jortonjorton/* ** Licensed to the Apache Software Foundation (ASF) under one or more ** contributor license agreements. See the NOTICE file distributed with ** this work for additional information regarding copyright ownership. ** The ASF licenses this file to You under the Apache License, Version 2.0 ** (the "License"); you may not use this file except in compliance with ** the License. You may obtain a copy of the License at ** ** http://www.apache.org/licenses/LICENSE-2.0 ** ** Unless required by applicable law or agreed to in writing, software ** distributed under the License is distributed on an "AS IS" BASIS, ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. ** See the License for the specific language governing permissions and ** limitations under the License. */ #ifndef APREQ_PARSERS_H #define APREQ_PARSERS_H /* These structs are defined below */ #include "apreq_param.h" #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ /** * @file apreq_parser.h * @brief Request body parser API * @ingroup libapreq2 */ /** * A hook is called by the parser whenever data arrives in a file * upload parameter of the request body. You may associate any number * of hooks with a parser instance with apreq_parser_add_hook(). */ typedef struct apreq_hook_t apreq_hook_t; /** * A request body parser instance. */ typedef struct apreq_parser_t apreq_parser_t; /** Parser arguments. */ #define APREQ_PARSER_ARGS apreq_parser_t *parser, \ apr_table_t *t, \ apr_bucket_brigade *bb /** Hook arguments */ #define APREQ_HOOK_ARGS apreq_hook_t *hook, \ apreq_param_t *param, \ apr_bucket_brigade *bb /** * The callback function implementing a request body parser. */ typedef apr_status_t (*apreq_parser_function_t)(APREQ_PARSER_ARGS); /** * The callback function of a hook. See apreq_hook_t. */ typedef apr_status_t (*apreq_hook_function_t)(APREQ_HOOK_ARGS); /** * Declares a API parser. */ #define APREQ_DECLARE_PARSER(f) APREQ_DECLARE_NONSTD(apr_status_t) \ f (APREQ_PARSER_ARGS) /** * Declares an API hook. */ #define APREQ_DECLARE_HOOK(f) APREQ_DECLARE_NONSTD(apr_status_t) \ f (APREQ_HOOK_ARGS) /** * A hook is called by the parser whenever data arrives in a file * upload parameter of the request body. You may associate any number * of hooks with a parser instance with apreq_parser_add_hook(). */ struct apreq_hook_t { apreq_hook_function_t hook; /**< the hook function */ apreq_hook_t *next; /**< next item in the linked list */ apr_pool_t *pool; /**< pool which allocated this hook */ void *ctx; /**< a user defined pointer passed to the hook function */ }; /** * A request body parser instance. */ struct apreq_parser_t { /** the function which parses chunks of body data */ apreq_parser_function_t parser; /** the Content-Type request header */ const char *content_type; /** a pool which outlasts the bucket_alloc. */ apr_pool_t *pool; /** bucket allocator used to create bucket brigades */ apr_bucket_alloc_t *bucket_alloc; /** the maximum in-memory bytes a brigade may use */ apr_size_t brigade_limit; /** the directory for generating temporary files */ const char *temp_dir; /** linked list of hooks */ apreq_hook_t *hook; /** internal context pointer used by the parser function */ void *ctx; }; /** * Parse the incoming brigade into a table. Parsers normally * consume all the buckets of the brigade during parsing. However * parsers may leave "rejected" data in the brigade, even during a * successful parse, so callers may need to clean up the brigade * themselves (in particular, rejected buckets should not be * passed back to the parser again). * @remark bb == NULL is valid: the parser should return its * public status: APR_INCOMPLETE, APR_SUCCESS, or an error code. */ static APR_INLINE apr_status_t apreq_parser_run(struct apreq_parser_t *psr, apr_table_t *t, apr_bucket_brigade *bb) { return psr->parser(psr, t, bb); } /** * Run the hook with the current parameter and the incoming * bucket brigade. The hook may modify the brigade if necessary. * Once all hooks have completed, the contents of the brigade will * be added to the parameter's bb attribute. * @return APR_SUCCESS on success. All other values represent errors. */ static APR_INLINE apr_status_t apreq_hook_run(struct apreq_hook_t *h, apreq_param_t *param, apr_bucket_brigade *bb) { return h->hook(h, param, bb); } /** * RFC 822 Header parser. It will reject all data * after the first CRLF CRLF sequence (an empty line). * See apreq_parser_run() for more info on rejected data. */ APREQ_DECLARE_PARSER(apreq_parse_headers); /** * RFC 2396 application/x-www-form-urlencoded parser. */ APREQ_DECLARE_PARSER(apreq_parse_urlencoded); /** * RFC 2388 multipart/form-data (and XForms 1.0 multipart/related) * parser. It will reject any buckets representing preamble and * postamble text (this is normal behavior, not an error condition). * See apreq_parser_run() for more info on rejected data. */ APREQ_DECLARE_PARSER(apreq_parse_multipart); /** * Generic parser. No table entries will be added to * the req->body table by this parser. The parser creates * a dummy apreq_param_t to pass to any configured hooks. If * no hooks are configured, the dummy param's bb slot will * contain a copy of the request body. It can be retrieved * by casting the parser's ctx pointer to (apreq_param_t **). */ APREQ_DECLARE_PARSER(apreq_parse_generic); /** * apr_xml_parser hook. It will parse until EOS appears. * The parsed document isn't available until parsing has * completed successfully. The hook's ctx pointer may * be cast as (apr_xml_doc **) to retrieve the * parsed document. */ APREQ_DECLARE_HOOK(apreq_hook_apr_xml_parser); /** * Construct a parser. * * @param pool Pool used to allocate the parser. * @param ba bucket allocator used to create bucket brigades * @param content_type Content-type that this parser can deal with. * @param pfn The parser function. * @param brigade_limit the maximum in-memory bytes a brigade may use * @param temp_dir the directory used by the parser for temporary files * @param hook Hooks to associate this parser with. * @param ctx Parser's internal scratch pad. * @return New parser. */ APREQ_DECLARE(apreq_parser_t *) apreq_parser_make(apr_pool_t *pool, apr_bucket_alloc_t *ba, const char *content_type, apreq_parser_function_t pfn, apr_size_t brigade_limit, const char *temp_dir, apreq_hook_t *hook, void *ctx); /** * Construct a hook. * * @param pool used to allocate the hook. * @param hook The hook function. * @param next List of other hooks for this hook to call on. * @param ctx Hook's internal scratch pad. * @return New hook. */ APREQ_DECLARE(apreq_hook_t *) apreq_hook_make(apr_pool_t *pool, apreq_hook_function_t hook, apreq_hook_t *next, void *ctx); /** * Add a new hook to the end of the parser's hook list. * * @param p Parser. * @param h Hook to append. */ APREQ_DECLARE(apr_status_t) apreq_parser_add_hook(apreq_parser_t *p, apreq_hook_t *h); /** * Fetch the default parser function associated with the given MIME type. * @param enctype The desired enctype (can also be a full "Content-Type" * header). * @return The parser function, or NULL if the enctype is unrecognized. */ APREQ_DECLARE(apreq_parser_function_t)apreq_parser(const char *enctype); /** * Register a new parsing function with a MIME enctype. * Registered parsers are added to apreq_parser()'s * internal lookup table. * * @param enctype The MIME type. * @param pfn The function to use during parsing. Setting * parser == NULL will remove an existing parser. * * @return APR_SUCCESS or error. */ APREQ_DECLARE(apr_status_t) apreq_register_parser(const char *enctype, apreq_parser_function_t pfn); /** * Returns APREQ_ERROR_GENERAL. Effectively disables mfd parser * if a file-upload field is present. * */ APREQ_DECLARE_HOOK(apreq_hook_disable_uploads); /** * Calls apr_brigade_cleanup on the incoming brigade * after passing the brigade to any subsequent hooks. */ APREQ_DECLARE_HOOK(apreq_hook_discard_brigade); /** * Context struct for the apreq_hook_find_param hook. */ typedef struct apreq_hook_find_param_ctx_t { const char *name; apreq_param_t *param; apreq_hook_t *prev; } apreq_hook_find_param_ctx_t; /** * Special purpose utility for locating a parameter * during parsing. The hook's ctx should be initialized * to an apreq_hook_find_param_ctx_t *, with the name * attribute set to the sought parameter name, the param * attribute set to NULL, and the prev attribute set to * the address of the previous hook. The param attribute * will be reassigned to the first param found, and once * that happens this hook is immediately removed from the chain. * * @remarks When used, this should always be the first hook * invoked, so add it manually with ctx->prev = &parser->hook * instead of using apreq_parser_add_hook. */ APREQ_DECLARE_HOOK(apreq_hook_find_param); #ifdef __cplusplus } #endif #endif /* APREQ_PARSERS_H */ libapreq2-2.17/include/apreq_util.h0000644000175000017500000003452614277401734016720 0ustar jortonjorton/* ** Licensed to the Apache Software Foundation (ASF) under one or more ** contributor license agreements. See the NOTICE file distributed with ** this work for additional information regarding copyright ownership. ** The ASF licenses this file to You under the Apache License, Version 2.0 ** (the "License"); you may not use this file except in compliance with ** the License. You may obtain a copy of the License at ** ** http://www.apache.org/licenses/LICENSE-2.0 ** ** Unless required by applicable law or agreed to in writing, software ** distributed under the License is distributed on an "AS IS" BASIS, ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. ** See the License for the specific language governing permissions and ** limitations under the License. */ #ifndef APREQ_UTIL_H #define APREQ_UTIL_H #include "apr_file_io.h" #include "apr_buckets.h" #include "apreq.h" #ifdef __cplusplus extern "C" { #endif /** * This header contains useful functions for creating new * parsers, hooks or modules. It includes * * - string <-> array converters * - substring search functions * - simple encoders & decoders for urlencoded strings * - simple time, date, & file-size converters * @file apreq_util.h * @brief Utility functions for apreq. * @ingroup libapreq2 */ /** * Join an array of values. The result is an empty string if there are * no values. * * @param p Pool to allocate return value. * @param sep String that is inserted between the joined values. * @param arr Array of apreq_value_t entries. * @param mode Join type- see apreq_join_t. * * @return Joined string, or NULL on error */ APREQ_DECLARE(char *) apreq_join(apr_pool_t *p, const char *sep, const apr_array_header_t *arr, apreq_join_t mode); /** * Returns offset of match string's location, or -1 if no match is found. * * @param hay Location of bytes to scan. * @param hlen Number of bytes available for scanning. * @param ndl Search string * @param nlen Length of search string. * @param type Match type. * * @return Offset of match string, or -1 if no match is found. * */ APREQ_DECLARE(apr_ssize_t) apreq_index(const char* hay, apr_size_t hlen, const char* ndl, apr_size_t nlen, const apreq_match_t type); /** * Places a quoted copy of src into dest. Embedded quotes are escaped with a * backslash ('\'). * * @param dest Location of quoted copy. Must be large enough to hold the copy * and trailing null byte. * @param src Original string. * @param slen Length of original string. * @param dest Destination string. * * @return length of quoted copy in dest. */ APREQ_DECLARE(apr_size_t) apreq_quote(char *dest, const char *src, const apr_size_t slen); /** * * Same as apreq_quote() except when src begins and ends in quote marks. In * that case it assumes src is quoted correctly, and just copies src to dest. * * @param dest Location of quoted copy. Must be large enough to hold the copy * and trailing null byte. * @param src Original string. * @param slen Length of original string. * @param dest Destination string. * * @return length of quoted copy in dest. */ APREQ_DECLARE(apr_size_t) apreq_quote_once(char *dest, const char *src, const apr_size_t slen); /** * Url-encodes a string. * * @param dest Location of url-encoded result string. Caller must ensure it * is large enough to hold the encoded string and trailing '\\0'. * @param src Original string. * @param slen Length of original string. * * @return length of url-encoded string in dest; does not exceed 3 * slen. */ APREQ_DECLARE(apr_size_t) apreq_encode(char *dest, const char *src, const apr_size_t slen); /** * Convert a string from cp1252 to utf8. Caller must ensure it is large enough * to hold the encoded string and trailing '\\0'. * * @param dest Location of utf8-encoded result string. Caller must ensure it * is large enough to hold the encoded string and trailing '\\0'. * @param src Original string. * @param slen Length of original string. * * @return length of utf8-encoded string in dest; does not exceed 3 * slen. */ APREQ_DECLARE(apr_size_t) apreq_cp1252_to_utf8(char *dest, const char *src, apr_size_t slen); /** * Heuristically determine the charset of a string. * * @param src String to scan. * @param slen Length of string. * * @return APREQ_CHARSET_ASCII if the string contains only 7-bit chars; * @return APREQ_CHARSET_UTF8 if the string is a valid utf8 byte sequence; * @return APREQ_CHARSET_LATIN1 if the string has no control chars; * @return APREQ_CHARSET_CP1252 if the string has control chars. */ APREQ_DECLARE(apreq_charset_t) apreq_charset_divine(const char *src, apr_size_t slen); /** * Url-decodes a string. * * @param dest Location of url-encoded result string. Caller must ensure dest is * large enough to hold the encoded string and trailing null character. * @param dlen points to resultant length of url-decoded string in dest * @param src Original string. * @param slen Length of original string. * * @return APR_SUCCESS. * @return APR_INCOMPLETE if the string * ends in the middle of an escape sequence. * @return ::APREQ_ERROR_BADSEQ or ::APREQ_ERROR_BADCHAR on malformed input. * * @remarks In the non-success case, dlen will be set to include * the last successfully decoded value. This function decodes * \%uXXXX into a utf8 (wide) character, following ECMA-262 * (the Javascript spec) Section B.2.1. */ APREQ_DECLARE(apr_status_t) apreq_decode(char *dest, apr_size_t *dlen, const char *src, apr_size_t slen); /** * Url-decodes an iovec array. * * @param dest Location of url-encoded result string. Caller must ensure dest is * large enough to hold the encoded string and trailing null character. * @param dlen Resultant length of dest. * @param v Array of iovecs that represent the source string * @param nelts Number of iovecs in the array. * * @return APR_SUCCESS. * @return APR_INCOMPLETE if the iovec * ends in the middle of an escape sequence. * @return ::APREQ_ERROR_BADSEQ or ::APREQ_ERROR_BADCHAR on malformed input. * * @remarks In the non-APR_SUCCESS case, dlen will be set to include * the last successfully decoded value. This function decodes * \%uXXXX into a utf8 (wide) character, following ECMA-262 * (the Javascript spec) Section B.2.1. */ APREQ_DECLARE(apr_status_t) apreq_decodev(char *dest, apr_size_t *dlen, struct iovec *v, int nelts); /** * Returns an url-encoded copy of a string. * * @param p Pool used to allocate the return value. * @param src Original string. * @param slen Length of original string. * * @return The url-encoded string. * * @remarks Use this function insead of apreq_encode if its * caller might otherwise overflow dest. */ static APR_INLINE char *apreq_escape(apr_pool_t *p, const char *src, const apr_size_t slen) { char *rv; if (src == NULL) return NULL; rv = (char *)apr_palloc(p, 3 * slen + 1); apreq_encode(rv, src, slen); return rv; } /** * An \e in-situ url-decoder. * * @param str The string to decode * * @return Length of decoded string, or < 0 on error. */ static APR_INLINE apr_ssize_t apreq_unescape(char *str) { apr_size_t len; apr_status_t rv = apreq_decode(str, &len, str, strlen(str)); if (rv == APR_SUCCESS) return (apr_ssize_t)len; else return -1; } /** * Converts file sizes (KMG) to bytes * * @param s file size matching m/^\\d+[KMG]b?$/i * * @return 64-bit integer representation of s. * * @todo What happens when s is malformed? Should this return * an unsigned value instead? */ APREQ_DECLARE(apr_int64_t) apreq_atoi64f(const char *s); /** * Converts time strings (YMDhms) to seconds * * @param s time string matching m/^\\+?\\d+[YMDhms]$/ * * @return 64-bit integer representation of s as seconds. * * @todo What happens when s is malformed? Should this return * an unsigned value instead? */ APREQ_DECLARE(apr_int64_t) apreq_atoi64t(const char *s); /** * Writes brigade to a file. * * @param f File that gets the brigade. * @param wlen On a successful return, wlen holds the length of * the brigade, which is the amount of data written to * the file. * @param bb Bucket brigade. * * @return APR_SUCCESS. * @return Error status code from either an unsuccessful apr_bucket_read(), * or a failed apr_file_writev(). * * @remarks This function leaks a bucket brigade into bb->p whenever * the final bucket in bb is a spool bucket. */ APREQ_DECLARE(apr_status_t) apreq_brigade_fwrite(apr_file_t *f, apr_off_t *wlen, apr_bucket_brigade *bb); /** * Makes a temporary file. * * @param fp Points to the temporary apr_file_t on success. * @param pool Pool to associate with the temp file. When the * pool is destroyed, the temp file will be closed * and deleted. * @param path The base directory which will contain the temp file. * If param == NULL, the directory will be selected via * tempnam(). See the tempnam manpage for details. * * @return APR_SUCCESS. * @return Error status code from unsuccessful apr_filepath_merge(), * or a failed apr_file_mktemp(). */ APREQ_DECLARE(apr_status_t) apreq_file_mktemp(apr_file_t **fp, apr_pool_t *pool, const char *path); /** * Set aside all buckets in the brigade. * * @param bb Brigade. * @param p Setaside buckets into this pool. * @return APR_SUCCESS. * @return Error status code from an unsuccessful apr_bucket_setaside(). */ static APR_INLINE apr_status_t apreq_brigade_setaside(apr_bucket_brigade *bb, apr_pool_t *p) { apr_bucket *e; for (e = APR_BRIGADE_FIRST(bb); e != APR_BRIGADE_SENTINEL(bb); e = APR_BUCKET_NEXT(e)) { apr_status_t rv = apr_bucket_setaside(e, p); if (rv != APR_SUCCESS) return rv; } return APR_SUCCESS; } /** * Copy a brigade. * * @param d (destination) Copied buckets are appended to this brigade. * @param s (source) Brigade to copy from. * * @return APR_SUCCESS. * @return Error status code from an unsuccessful apr_bucket_copy(). * * @remarks s == d produces Undefined Behavior. */ static APR_INLINE apr_status_t apreq_brigade_copy(apr_bucket_brigade *d, apr_bucket_brigade *s) { apr_bucket *e; for (e = APR_BRIGADE_FIRST(s); e != APR_BRIGADE_SENTINEL(s); e = APR_BUCKET_NEXT(e)) { apr_bucket *c; apr_status_t rv = apr_bucket_copy(e, &c); if (rv != APR_SUCCESS) return rv; APR_BRIGADE_INSERT_TAIL(d, c); } return APR_SUCCESS; } /** * Move the front of a brigade. * * @param d (destination) Append buckets to this brigade. * @param s (source) Brigade to take buckets from. * @param e First bucket of s after the move. All buckets * before e are appended to d. * * @remarks This moves all buckets when e == APR_BRIGADE_SENTINEL(s). */ static APR_INLINE void apreq_brigade_move(apr_bucket_brigade *d, apr_bucket_brigade *s, apr_bucket *e) { apr_bucket *f; if (e != APR_BRIGADE_SENTINEL(s)) { f = APR_RING_FIRST(&s->list); if (f == e) /* zero buckets to be moved */ return; /* obtain the last bucket to be moved */ e = APR_RING_PREV(e, link); APR_RING_UNSPLICE(f, e, link); APR_RING_SPLICE_HEAD(&d->list, f, e, apr_bucket, link); } else { APR_BRIGADE_CONCAT(d, s); } } /** * Search a header string for the value of a particular named attribute. * * @param hdr Header string to scan. * @param name Name of attribute to search for. * @param nlen Length of name. * @param val Location of (first) matching value. * @param vlen Length of matching value. * * @return APR_SUCCESS. * @return ::APREQ_ERROR_NOATTR if the attribute is not found. * @return ::APREQ_ERROR_BADSEQ if an unpaired quote mark was detected. */ APREQ_DECLARE(apr_status_t) apreq_header_attribute(const char *hdr, const char *name, const apr_size_t nlen, const char **val, apr_size_t *vlen); /** * Concatenates the brigades, spooling large brigades into * a tempfile (APREQ_SPOOL) bucket. * * @param pool Pool for creating a tempfile bucket. * @param temp_dir Directory for tempfile creation. * @param brigade_limit If out's length would exceed this value, * the appended buckets get written to a tempfile. * @param out Resulting brigade. * @param in Brigade to append. * * @return APR_SUCCESS. * @return Error status code resulting from either apr_brigade_length(), * apreq_file_mktemp(), apreq_brigade_fwrite(), or apr_file_seek(). * * @todo Flesh out these error codes, making them as explicit as possible. */ APREQ_DECLARE(apr_status_t) apreq_brigade_concat(apr_pool_t *pool, const char *temp_dir, apr_size_t brigade_limit, apr_bucket_brigade *out, apr_bucket_brigade *in); /** * Determines the spool file used by the brigade. Returns NULL if the * brigade is not spooled in a file (does not use an APREQ_SPOOL * bucket). * * @param bb the bucket brigade * @return the spool file, or NULL. */ APREQ_DECLARE(apr_file_t *) apreq_brigade_spoolfile(apr_bucket_brigade *bb); #ifdef __cplusplus } #endif #endif /* APREQ_UTIL_H */ libapreq2-2.17/include/apreq_version.h0000644000175000017500000000622414277402060017413 0ustar jortonjorton/* ** Licensed to the Apache Software Foundation (ASF) under one or more ** contributor license agreements. See the NOTICE file distributed with ** this work for additional information regarding copyright ownership. ** The ASF licenses this file to You under the Apache License, Version 2.0 ** (the "License"); you may not use this file except in compliance with ** the License. You may obtain a copy of the License at ** ** http://www.apache.org/licenses/LICENSE-2.0 ** ** Unless required by applicable law or agreed to in writing, software ** distributed under the License is distributed on an "AS IS" BASIS, ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. ** See the License for the specific language governing permissions and ** limitations under the License. */ #ifndef APREQ_VERSION_H #define APREQ_VERSION_H #ifdef __cplusplus extern "C" { #endif #include "apr_version.h" #include "apreq.h" /** * @file apreq_version.h * @brief Versioning API for libapreq * @ingroup libapreq2 * * There are several different mechanisms for accessing the version. There * is a string form, and a set of numbers; in addition, there are constants * which can be compiled into your application, and you can query the library * being used for its actual version. * * Note that it is possible for an application to detect that it has been * compiled against a different version of libapreq by use of the compile-time * constants and the use of the run-time query function. * * libapreq version numbering follows the guidelines specified in: * * http://apr.apache.org/versioning.html */ /* The numeric compile-time version constants. These constants are the * authoritative version numbers for libapreq. */ /** major version * Major API changes that could cause compatibility problems for older * programs such as structure size changes. No binary compatibility is * possible across a change in the major version. */ #define APREQ_MAJOR_VERSION 2 /** * Minor API changes that do not cause binary compatibility problems. * Should be reset to 0 when upgrading APREQ_MAJOR_VERSION */ #define APREQ_MINOR_VERSION 8 /** patch level */ #define APREQ_PATCH_VERSION 1 /** * This symbol is defined for internal, "development" copies of libapreq. * This symbol will be \#undef'd for releases. */ #undef APREQ_IS_DEV_VERSION /** The formatted string of libapreq's version */ #define APREQ_VERSION_STRING \ APR_STRINGIFY(APREQ_MAJOR_VERSION) "." \ APR_STRINGIFY(APREQ_MINOR_VERSION) "." \ APR_STRINGIFY(APREQ_PATCH_VERSION) \ APREQ_IS_DEV_STRING /** * Return libapreq's version information information in a numeric form. * * @param pvsn Pointer to a version structure for returning the version * information. */ APREQ_DECLARE(void) apreq_version(apr_version_t *pvsn); /** Return libapreq's version information as a string. */ APREQ_DECLARE(const char *) apreq_version_string(void); /** Internal: string form of the "is dev" flag */ #ifdef APREQ_IS_DEV_VERSION #define APREQ_IS_DEV_STRING "-dev" #else #define APREQ_IS_DEV_STRING "" #endif #ifdef __cplusplus } #endif #endif /* APREQ_VERSION_H */ libapreq2-2.17/include/groups.dox.in0000644000175000017500000000436714277401734017042 0ustar jortonjorton/** * @mainpage * Project Website: http://httpd.apache.org/apreq/ * * @verbinclude README */ /** * @defgroup libapreq2 Apache Request Library * @brief libapreq2 Version @APREQ_DOTTED_VERSION@ * * libapreq2 is a shared library based on the Apache * Portable Runtime libraries libapr and libaprutil. * @see http://apr.apache.org/ * * @section apreq2_config Configuring libapreq2 Applications * This package includes apreq2-config, * a configuration script for building applications * with libapreq2. Run apreq2-config --help * to display its options. XXX add examples here XXX */ /** * @defgroup apreq_module Modules * @brief apreq2 modules included in @PACKAGE@-@VERSION@. * * XXX */ /** * @defgroup apreq_lang Language Bindings * @brief libapreq2 APIs for programming languages other than C * * XXX */ /** * @page apreq_license LICENSE * @verbinclude LICENSE */ /** * @page apreq_notice NOTICE * @verbinclude NOTICE */ /** * @page apreq_install INSTALL * @verbinclude INSTALL */ /** * @defgroup apreq_xs Perl * @brief XS Modules * @ingroup apreq_lang */ /** * @defgroup apreq_xs_request Apache2::Request * @ingroup apreq_xs * @htmlinclude Apache2__Request.html */ /** * @defgroup apreq_xs_upload Apache2::Upload * @ingroup apreq_xs * @htmlinclude Apache2__Upload.html */ /** * @defgroup apreq_xs_cookie Apache2::Cookie * @ingroup apreq_xs * @htmlinclude Apache2__Cookie.html */ /** * @defgroup apreq_xs_apr_request APR::Request * @ingroup apreq_xs * @htmlinclude APR__Request.html */ /** * @defgroup apreq_xs_apr_request_cookie APR::Request::Cookie * @ingroup apreq_xs * @htmlinclude APR__Request__Cookie.html */ /** * @defgroup apreq_xs_apr_request_param APR::Request::Param * @ingroup apreq_xs * @htmlinclude APR__Request__Param.html */ /** * @defgroup apreq_xs_apr_request_error APR::Request::Error * @ingroup apreq_xs * @htmlinclude APR__Request__Error.html */ /** * @defgroup apreq_xs_apr_request_cgi APR::Request::CGI * @ingroup apreq_xs * @htmlinclude APR__Request__CGI.html */ /** * @defgroup apreq_xs_apr_request_apache2 APR::Request::Apache2 * @ingroup apreq_xs * @htmlinclude APR__Request__Apache2.html */ /** * @page apreq_faq FAQ * @htmlinclude FAQ.html */ libapreq2-2.17/include/Makefile.am0000644000175000017500000000033014277401734016420 0ustar jortonjortonpkgincludedir = $(includedir)/@APREQ_LIBNAME@ pkginclude_HEADERS = apreq.h apreq_cookie.h apreq_error.h \ apreq_module.h apreq_param.h apreq_parser.h \ apreq_util.h apreq_version.h libapreq2-2.17/include/Makefile.in0000644000175000017500000004314114277402427016440 0ustar jortonjorton# 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@ 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@ 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 = include ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(pkginclude_HEADERS) \ $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = apreq_config.h CONFIG_CLEAN_FILES = groups.dox 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 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)$(pkgincludedir)" HEADERS = $(pkginclude_HEADERS) am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) \ apreq_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)` am__DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/apreq_config.h.in \ $(srcdir)/groups.dox.in DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) pkgincludedir = $(includedir)/@APREQ_LIBNAME@ ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ APACHE1_APXS = @APACHE1_APXS@ APACHE2_APXS = @APACHE2_APXS@ APACHE2_HTTPD = @APACHE2_HTTPD@ APACHE2_INCLUDES = @APACHE2_INCLUDES@ APACHE2_SRC = @APACHE2_SRC@ APREQ_CONFIG = @APREQ_CONFIG@ APREQ_DOTTED_VERSION = @APREQ_DOTTED_VERSION@ APREQ_LIBNAME = @APREQ_LIBNAME@ APREQ_LIBTOOL_VERSION = @APREQ_LIBTOOL_VERSION@ APREQ_MAJOR_VERSION = @APREQ_MAJOR_VERSION@ APR_CONFIG = @APR_CONFIG@ APR_DOC_VERSION = @APR_DOC_VERSION@ APR_INCLUDES = @APR_INCLUDES@ APR_LA = @APR_LA@ APR_LDFLAGS = @APR_LDFLAGS@ APR_LIBS = @APR_LIBS@ APR_LTFLAGS = @APR_LTFLAGS@ APU_CONFIG = @APU_CONFIG@ APU_DOC_VERSION = @APU_DOC_VERSION@ APU_LA = @APU_LA@ AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPPFLAGS = @CPPFLAGS@ CSCOPE = @CSCOPE@ CTAGS = @CTAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ 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@ GREP = @GREP@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ MM_OPTS = @MM_OPTS@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ 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@ PERL = @PERL@ PERL_OPTS = @PERL_OPTS@ RANLIB = @RANLIB@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ TAR = @TAR@ VERSION = @VERSION@ 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_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@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ 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@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ pkginclude_HEADERS = apreq.h apreq_cookie.h apreq_error.h \ apreq_module.h apreq_param.h apreq_parser.h \ apreq_util.h apreq_version.h all: apreq_config.h $(MAKE) $(AM_MAKEFLAGS) all-am .SUFFIXES: $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(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 include/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu include/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: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): apreq_config.h: stamp-h1 @test -f $@ || rm -f stamp-h1 @test -f $@ || $(MAKE) $(AM_MAKEFLAGS) stamp-h1 stamp-h1: $(srcdir)/apreq_config.h.in $(top_builddir)/config.status @rm -f stamp-h1 cd $(top_builddir) && $(SHELL) ./config.status include/apreq_config.h $(srcdir)/apreq_config.h.in: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) ($(am__cd) $(top_srcdir) && $(AUTOHEADER)) rm -f stamp-h1 touch $@ distclean-hdr: -rm -f apreq_config.h stamp-h1 groups.dox: $(top_builddir)/config.status $(srcdir)/groups.dox.in cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs install-pkgincludeHEADERS: $(pkginclude_HEADERS) @$(NORMAL_INSTALL) @list='$(pkginclude_HEADERS)'; test -n "$(pkgincludedir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(pkgincludedir)'"; \ $(MKDIR_P) "$(DESTDIR)$(pkgincludedir)" || 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_HEADER) $$files '$(DESTDIR)$(pkgincludedir)'"; \ $(INSTALL_HEADER) $$files "$(DESTDIR)$(pkgincludedir)" || exit $$?; \ done uninstall-pkgincludeHEADERS: @$(NORMAL_UNINSTALL) @list='$(pkginclude_HEADERS)'; test -n "$(pkgincludedir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(pkgincludedir)'; $(am__uninstall_files_from_dir) 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 $(HEADERS) apreq_config.h installdirs: for dir in "$(DESTDIR)$(pkgincludedir)"; 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-generic clean-libtool mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic distclean-hdr distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-pkgincludeHEADERS 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: uninstall-pkgincludeHEADERS .MAKE: all install-am install-strip .PHONY: CTAGS GTAGS TAGS all all-am check check-am clean clean-generic \ clean-libtool cscopelist-am ctags ctags-am distclean \ distclean-generic distclean-hdr distclean-libtool \ distclean-tags 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-pkgincludeHEADERS \ 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 tags-am uninstall \ uninstall-am uninstall-pkgincludeHEADERS .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: libapreq2-2.17/INSTALL0000644000175000017500000000337514277401734014006 0ustar jortonjortonPREREQUISITES: Please see the PREREQUISITES file. If you are building httpd-apreq-2 directly from svn, you can generate the list of prerequisites: % perl build/version_check.pl INSTRUCTIONS: FreeBSD/Solaris users must substitute "gmake" for "make" below. Unix build, where libtool/automake/autoconf works: % ./configure --with-apache2-apxs=/path/to/apache2/bin/apxs % make (optional)% make test % make install (optional)% make docs_install Or using the CPAN/perlish way (which includes the Apache2::Request and Apache2::Cookie modules): % perl Makefile.PL --with-apache2-apxs=/path/to/apache2/bin/apxs % make (optional)% make test % make install (optional)% make docs_install Developers and other folks using httpd-apreq-2 directly from svn need to execute "./buildconf" prior to running "./configure". Win32 build: C:\httpd-apreq-2> perl Makefile.PL C:\httpd-apreq-2> nmake C:\httpd-apreq-2> nmake test C:\httpd-apreq-2> nmake docs C:\httpd-apreq-2> nmake install SVN (Subversion) ACCESS Development of httpd-apreq-2 can be followed through the svn repository: $ svn checkout https://svn.apache.org/repos/asf/httpd/apreq/trunk/ httpd-apreq-2 Developers with commit access must use the https protocol instead; note that, if you are compiling svn from sources, you must supply the configure script with the appropriate switch to enable ssl. Subversion sources, and binaries for some platforms, may be obtained through the home page: https://subversion.apache.org/ Documentation on using svn is available at https://svnbook.red-bean.com/ In particular, https://svnbook.red-bean.com/en/1.0/apa.html contains a guide for users familiar with cvs. libapreq2-2.17/install-sh0000755000175000017500000003577614277402421014765 0ustar jortonjorton#!/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: libapreq2-2.17/libapreq.rc0000644000175000017500000000441214277401734015073 0ustar jortonjorton#include "apreq_version.h" #define APREQ_COPYRIGHT "Copyright 2008 The Apache Software " \ "Foundation or its licensors, as applicable." #define APREQ_LICENSE "Licensed under the Apache License, Version 2.0 " \ "(the ""License""); you may not use this file except " \ "in compliance with the License. You may obtain a " \ "copy of the License at\r\n\r\n" \ "http://www.apache.org/licenses/LICENSE-2.0\r\n\r\n" \ "Unless required by applicable law or agreed to in " \ "writing, software distributed under the License is " \ "distributed on an ""AS IS"" BASIS, WITHOUT " \ "WARRANTIES OR CONDITIONS OF ANY KIND, either " \ "express or implied. See the License for the " \ "specific language governing permissions and " \ "limitations under the License." #define APREQ_DLL_BASENAME "libapreq-" APR_STRINGIFY(APREQ_MAJOR_VERSION) #define APREQ_VERSION_STRING_CSV APREQ_MAJOR_VERSION ##, \ ##APREQ_MINOR_VERSION ##, \ ##APREQ_PATCH_VERSION 1 VERSIONINFO FILEVERSION APREQ_VERSION_STRING_CSV,0 PRODUCTVERSION APREQ_VERSION_STRING_CSV,0 FILEFLAGSMASK 0x3fL #if defined(APREQ_IS_DEV_VERSION) #if defined(_DEBUG) FILEFLAGS 0x03L #else FILEFLAGS 0x02L #endif #else #if defined(_DEBUG) FILEFLAGS 0x01L #else FILEFLAGS 0x00L #endif #endif #if defined(WINNT) || defined(WIN64) FILEOS 0x40004L #else FILEOS 0x4L #endif FILETYPE 0x2L FILESUBTYPE 0x0L BEGIN BLOCK "StringFileInfo" BEGIN BLOCK "040904b0" BEGIN VALUE "Comments", APREQ_LICENSE "\0" VALUE "CompanyName", "Apache Software Foundation\0" VALUE "FileDescription", "Apache HTTP Server Request Library\0" VALUE "FileVersion", APREQ_VERSION_STRING "\0" VALUE "InternalName", APREQ_DLL_BASENAME "\0" VALUE "LegalCopyright", APREQ_COPYRIGHT "\0" VALUE "OriginalFilename", APREQ_DLL_BASENAME ".dll\0" VALUE "ProductName", "Apache HTTP Server Project\0" VALUE "ProductVersion", APREQ_VERSION_STRING "\0" END END BLOCK "VarFileInfo" BEGIN VALUE "Translation", 0x409, 1200 END END libapreq2-2.17/library/cookie.c0000644000175000017500000003272314277401734016035 0ustar jortonjorton/* ** Licensed to the Apache Software Foundation (ASF) under one or more ** contributor license agreements. See the NOTICE file distributed with ** this work for additional information regarding copyright ownership. ** The ASF licenses this file to You under the Apache License, Version 2.0 ** (the "License"); you may not use this file except in compliance with ** the License. You may obtain a copy of the License at ** ** http://www.apache.org/licenses/LICENSE-2.0 ** ** Unless required by applicable law or agreed to in writing, software ** distributed under the License is distributed on an "AS IS" BASIS, ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. ** See the License for the specific language governing permissions and ** limitations under the License. */ #include "apreq_cookie.h" #include "apreq_error.h" #include "apreq_util.h" #include "apr_strings.h" #include "apr_lib.h" #include "apr_date.h" #define RFC 1 #define NETSCAPE 0 #define ADD_COOKIE(j,c) apreq_value_table_add(&c->v, j) APREQ_DECLARE(void) apreq_cookie_expires(apreq_cookie_t *c, const char *time_str) { if (time_str == NULL) { c->max_age = -1; return; } if (!strcasecmp(time_str, "now")) c->max_age = 0; else { c->max_age = apr_date_parse_rfc(time_str); if (c->max_age == APR_DATE_BAD) c->max_age = apr_time_from_sec(apreq_atoi64t(time_str)); else c->max_age -= apr_time_now(); } } static apr_status_t apreq_cookie_attr(apr_pool_t *p, apreq_cookie_t *c, const char *attr, apr_size_t alen, const char *val, apr_size_t vlen) { if (alen < 2) return APR_EBADARG; if ( attr[0] == '-' || attr[0] == '$' ) { ++attr; --alen; } switch (apr_tolower(*attr)) { case 'n': /* name is not an attr */ return APR_ENOTIMPL; case 'v': /* version; value is not an attr */ if (alen == 5 && strncasecmp(attr,"value", 5) == 0) return APR_ENOTIMPL; while (!apr_isdigit(*val)) { if (vlen == 0) return APREQ_ERROR_BADSEQ; ++val; --vlen; } apreq_cookie_version_set(c, *val - '0'); return APR_SUCCESS; case 'e': case 'm': /* expires, max-age */ apreq_cookie_expires(c, val); return APR_SUCCESS; case 'd': c->domain = apr_pstrmemdup(p,val,vlen); return APR_SUCCESS; case 'p': if (alen != 4) break; if (!strncasecmp("port", attr, 4)) { c->port = apr_pstrmemdup(p,val,vlen); return APR_SUCCESS; } else if (!strncasecmp("path", attr, 4)) { c->path = apr_pstrmemdup(p,val,vlen); return APR_SUCCESS; } break; case 'c': if (!strncasecmp("commentURL", attr, 10)) { c->commentURL = apr_pstrmemdup(p,val,vlen); return APR_SUCCESS; } else if (!strncasecmp("comment", attr, 7)) { c->comment = apr_pstrmemdup(p,val,vlen); return APR_SUCCESS; } break; case 's': if (vlen > 0 && *val != '0' && strncasecmp("off",val,vlen)) apreq_cookie_secure_on(c); else apreq_cookie_secure_off(c); return APR_SUCCESS; case 'h': /* httponly */ if (vlen > 0 && *val != '0' && strncasecmp("off",val,vlen)) apreq_cookie_httponly_on(c); else apreq_cookie_httponly_off(c); return APR_SUCCESS; }; return APR_ENOTIMPL; } APREQ_DECLARE(apreq_cookie_t *) apreq_cookie_make(apr_pool_t *p, const char *name, const apr_size_t nlen, const char *value, const apr_size_t vlen) { apreq_cookie_t *c; apreq_value_t *v; c = apr_palloc(p, nlen + vlen + 1 + sizeof *c); if (c == NULL) return NULL; *(const apreq_value_t **)&v = &c->v; if (vlen > 0 && value != NULL) memcpy(v->data, value, vlen); v->data[vlen] = 0; v->dlen = vlen; v->name = v->data + vlen + 1; if (nlen && name != NULL) memcpy(v->name, name, nlen); v->name[nlen] = 0; v->nlen = nlen; c->path = NULL; c->domain = NULL; c->port = NULL; c->comment = NULL; c->commentURL = NULL; c->max_age = -1; /* session cookie is the default */ c->flags = 0; return c; } static APR_INLINE apr_status_t get_pair(apr_pool_t *p, const char **data, const char **n, apr_size_t *nlen, const char **v, apr_size_t *vlen, unsigned unquote) { const char *hdr, *key, *val; int nlen_set = 0; hdr = *data; while (apr_isspace(*hdr) || *hdr == '=') ++hdr; key = hdr; *n = hdr; scan_name: switch (*hdr) { case 0: case ';': case ',': if (!nlen_set) *nlen = hdr - key; *v = hdr; *vlen = 0; *data = hdr; return *nlen ? APREQ_ERROR_NOTOKEN : APREQ_ERROR_BADCHAR; case '=': if (!nlen_set) { *nlen = hdr - key; nlen_set = 1; } break; case ' ': case '\t': case '\r': case '\n': if (!nlen_set) { *nlen = hdr - key; nlen_set = 1; } /* fall thru */ default: ++hdr; goto scan_name; } val = hdr + 1; while (apr_isspace(*val)) ++val; if (*val == '"') { unsigned saw_backslash = 0; for (*v = (unquote) ? ++val : val++; *val; ++val) { switch (*val) { case '"': *data = val + 1; if (!unquote) { *vlen = (val - *v) + 1; } else if (!saw_backslash) { *vlen = val - *v; } else { char *dest = apr_palloc(p, val - *v), *d = dest; const char *s = *v; while (s < val) { if (*s == '\\') ++s; *d++ = *s++; } *vlen = d - dest; *v = dest; } return APR_SUCCESS; case '\\': saw_backslash = 1; if (val[1] != 0) ++val; default: break; } } /* bad sequence: no terminating quote found */ *data = val; return APREQ_ERROR_BADSEQ; } else { /* value is not wrapped in quotes */ for (*v = val; *val; ++val) { switch (*val) { case ';': case ',': case ' ': case '\t': case '\r': case '\n': *data = val; *vlen = val - *v; return APR_SUCCESS; default: break; } } } *data = val; *vlen = val - *v; return APR_SUCCESS; } APREQ_DECLARE(apr_status_t)apreq_parse_cookie_header(apr_pool_t *p, apr_table_t *j, const char *hdr) { apreq_cookie_t *c; unsigned version; apr_status_t rv = APR_SUCCESS; parse_cookie_header: c = NULL; version = NETSCAPE; while (apr_isspace(*hdr)) ++hdr; if (*hdr == '$' && strncasecmp(hdr, "$Version", 8) == 0) { /* XXX cheat: assume "$Version" => RFC Cookie header */ version = RFC; skip_version_string: switch (*hdr++) { case 0: return rv; case ',': goto parse_cookie_header; case ';': break; default: goto skip_version_string; } } for (;;) { apr_status_t status; const char *name, *value; apr_size_t nlen = 0, vlen; while (*hdr == ';' || apr_isspace(*hdr)) ++hdr; switch (*hdr) { case 0: /* this is the normal exit point */ if (c != NULL) { ADD_COOKIE(j, c); } return rv; case ',': ++hdr; if (c != NULL) { ADD_COOKIE(j, c); } goto parse_cookie_header; case '$': ++hdr; if (c == NULL) { rv = APREQ_ERROR_BADCHAR; goto parse_cookie_error; } else if (version == NETSCAPE) { rv = APREQ_ERROR_MISMATCH; } status = get_pair(p, &hdr, &name, &nlen, &value, &vlen, 1); if (status != APR_SUCCESS) { rv = status; goto parse_cookie_error; } status = apreq_cookie_attr(p, c, name, nlen, value, vlen); switch (status) { case APR_ENOTIMPL: rv = APREQ_ERROR_BADATTR; /* fall thru */ case APR_SUCCESS: break; default: rv = status; goto parse_cookie_error; } break; default: if (c != NULL) { ADD_COOKIE(j, c); } status = get_pair(p, &hdr, &name, &nlen, &value, &vlen, 0); if (status != APR_SUCCESS) { c = NULL; rv = status; goto parse_cookie_error; } c = apreq_cookie_make(p, name, nlen, value, vlen); apreq_cookie_tainted_on(c); if (version != NETSCAPE) apreq_cookie_version_set(c, version); } } parse_cookie_error: switch (*hdr) { case 0: return rv; case ',': case ';': if (c != NULL) ADD_COOKIE(j, c); ++hdr; goto parse_cookie_header; default: ++hdr; goto parse_cookie_error; } /* not reached */ return rv; } APREQ_DECLARE(int) apreq_cookie_serialize(const apreq_cookie_t *c, char *buf, apr_size_t len) { /* The format string must be large enough to accommodate all * of the cookie attributes. The current attributes sum to * ~90 characters (w/ 6-8 padding chars per attr), so anything * over 100 should be fine. */ unsigned version = apreq_cookie_version(c); char format[128] = "%s=%s"; char *f = format + strlen(format); /* XXX protocol enforcement (for debugging, anyway) ??? */ if (c->v.name == NULL) return -1; #define NULL2EMPTY(attr) (attr ? attr : "") if (version == NETSCAPE) { char expires[APR_RFC822_DATE_LEN] = {0}; #define ADD_NS_ATTR(name) do { \ if (c->name != NULL) \ strcpy(f, "; " #name "=%s"); \ else \ strcpy(f, "%0.s"); \ f += strlen(f); \ } while (0) ADD_NS_ATTR(path); ADD_NS_ATTR(domain); if (c->max_age != -1) { strcpy(f, "; expires=%s"); apr_rfc822_date(expires, c->max_age + apr_time_now()); expires[7] = '-'; expires[11] = '-'; } else strcpy(f, ""); f += strlen(f); if (apreq_cookie_is_secure(c)) strcpy(f, "; secure"); f += strlen(f); if (apreq_cookie_is_httponly(c)) strcpy(f, "; HttpOnly"); return apr_snprintf(buf, len, format, c->v.name, c->v.data, NULL2EMPTY(c->path), NULL2EMPTY(c->domain), expires); } /* c->version == RFC */ strcpy(f,"; Version=%u"); f += strlen(f); /* ensure RFC attributes are always quoted */ #define ADD_RFC_ATTR(name) do { \ if (c->name != NULL) \ if (*c->name == '"') \ strcpy(f, "; " #name "=%s"); \ else \ strcpy(f, "; " #name "=\"%s\""); \ else \ strcpy(f, "%0.s"); \ f += strlen (f); \ } while (0) ADD_RFC_ATTR(path); ADD_RFC_ATTR(domain); ADD_RFC_ATTR(port); ADD_RFC_ATTR(comment); ADD_RFC_ATTR(commentURL); strcpy(f, c->max_age != -1 ? "; max-age=%" APR_TIME_T_FMT : ""); f += strlen(f); if (apreq_cookie_is_secure(c)) strcpy(f, "; secure"); f += strlen(f); if (apreq_cookie_is_httponly(c)) strcpy(f, "; HttpOnly"); return apr_snprintf(buf, len, format, c->v.name, c->v.data, version, NULL2EMPTY(c->path), NULL2EMPTY(c->domain), NULL2EMPTY(c->port), NULL2EMPTY(c->comment), NULL2EMPTY(c->commentURL), apr_time_sec(c->max_age)); } APREQ_DECLARE(char*) apreq_cookie_as_string(const apreq_cookie_t *c, apr_pool_t *p) { int n = apreq_cookie_serialize(c, NULL, 0); char *s = apr_palloc(p, n + 1); apreq_cookie_serialize(c, s, n + 1); return s; } libapreq2-2.17/library/error.c0000644000175000017500000000543114277401734015711 0ustar jortonjorton/* Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #include "apreq_error.h" #include "apr_strings.h" /* * stuffbuffer - like apr_cpystrn() but returns the address of the * dest buffer instead of the address of the terminating '\0' */ static char *stuffbuffer(char *buf, apr_size_t bufsize, const char *s) { apr_cpystrn(buf,s,bufsize); return buf; } static const char *apreq_error_string(apr_status_t statcode) { switch (statcode) { /* 0's: generic error status codes */ case APREQ_ERROR_GENERAL: return "Internal apreq error"; case APREQ_ERROR_TAINTED: return "Attempt to perform unsafe action with tainted data"; /* 10's: malformed input */ case APREQ_ERROR_BADDATA: return "Malformed input data"; case APREQ_ERROR_BADCHAR: return "Invalid character"; case APREQ_ERROR_BADSEQ: return "Invalid byte sequence"; case APREQ_ERROR_BADATTR: return "Unrecognized attribute"; case APREQ_ERROR_BADHEADER: return "Malformed header string"; /* 20's: missing input */ case APREQ_ERROR_NODATA: return "Missing input data"; case APREQ_ERROR_NOTOKEN: return "Expected token not present"; case APREQ_ERROR_NOATTR: return "Missing attribute"; case APREQ_ERROR_NOHEADER: return "Missing header"; case APREQ_ERROR_NOPARSER: return "Missing parser"; /* 30's: configuration conflicts */ case APREQ_ERROR_MISMATCH: return "Conflicting information"; case APREQ_ERROR_OVERLIMIT: return "Exceeds configured maximum limit"; case APREQ_ERROR_NOTEMPTY: return "Setting already configured"; default: return "Error string not yet specified by apreq"; } } APREQ_DECLARE(char *) apreq_strerror(apr_status_t statcode, char *buf, apr_size_t bufsize) { if (statcode < APR_OS_START_USERERR || statcode >= APR_OS_START_EAIERR) return apr_strerror(statcode, buf, bufsize); return stuffbuffer(buf, bufsize, apreq_error_string(statcode)); } libapreq2-2.17/library/Makefile.am0000644000175000017500000000154114277401734016446 0ustar jortonjortonEXTRA_DIST = t AM_CPPFLAGS = @APR_INCLUDES@ BUILT_SOURCES = @APR_LA@ @APU_LA@ lib_LTLIBRARIES = libapreq2.la libapreq2_la_SOURCES = util.c version.c cookie.c param.c parser.c \ parser_urlencoded.c parser_header.c parser_multipart.c \ module.c module_custom.c module_cgi.c error.c libapreq2_la_LDFLAGS = -version-info @APREQ_LIBTOOL_VERSION@ @APR_LTFLAGS@ @APR_LIBS@ test: all cd t; $(MAKE) test if ENABLE_PROFILE AM_CFLAGS= -pg -fprofile-arcs -ftest-coverage clean-local: -rm *.bb *.bbg *.da *.gcov cd t; $(MAKE) clean else clean-local: cd t; $(MAKE) clean endif distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags cd t; $(MAKE) distclean if BUILD_APR @APR_LA@: cd `@APR_CONFIG@ --srcdir` && $(MAKE) endif if BUILD_APU @APU_LA@: @APR_LA@ cd `@APU_CONFIG@ --srcdir` && $(MAKE) endif libapreq2-2.17/library/Makefile.in0000644000175000017500000005754414277402427016475 0ustar jortonjorton# 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@ 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 = library ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/include/apreq_config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = 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)$(libdir)" LTLIBRARIES = $(lib_LTLIBRARIES) libapreq2_la_LIBADD = am_libapreq2_la_OBJECTS = util.lo version.lo cookie.lo param.lo \ parser.lo parser_urlencoded.lo parser_header.lo \ parser_multipart.lo module.lo module_custom.lo module_cgi.lo \ error.lo libapreq2_la_OBJECTS = $(am_libapreq2_la_OBJECTS) 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 = libapreq2_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(libapreq2_la_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)/include depcomp = $(SHELL) $(top_srcdir)/depcomp am__maybe_remake_depfiles = depfiles am__depfiles_remade = ./$(DEPDIR)/cookie.Plo ./$(DEPDIR)/error.Plo \ ./$(DEPDIR)/module.Plo ./$(DEPDIR)/module_cgi.Plo \ ./$(DEPDIR)/module_custom.Plo ./$(DEPDIR)/param.Plo \ ./$(DEPDIR)/parser.Plo ./$(DEPDIR)/parser_header.Plo \ ./$(DEPDIR)/parser_multipart.Plo \ ./$(DEPDIR)/parser_urlencoded.Plo ./$(DEPDIR)/util.Plo \ ./$(DEPDIR)/version.Plo am__mv = mv -f 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 = $(libapreq2_la_SOURCES) DIST_SOURCES = $(libapreq2_la_SOURCES) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac 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@ APACHE1_APXS = @APACHE1_APXS@ APACHE2_APXS = @APACHE2_APXS@ APACHE2_HTTPD = @APACHE2_HTTPD@ APACHE2_INCLUDES = @APACHE2_INCLUDES@ APACHE2_SRC = @APACHE2_SRC@ APREQ_CONFIG = @APREQ_CONFIG@ APREQ_DOTTED_VERSION = @APREQ_DOTTED_VERSION@ APREQ_LIBNAME = @APREQ_LIBNAME@ APREQ_LIBTOOL_VERSION = @APREQ_LIBTOOL_VERSION@ APREQ_MAJOR_VERSION = @APREQ_MAJOR_VERSION@ APR_CONFIG = @APR_CONFIG@ APR_DOC_VERSION = @APR_DOC_VERSION@ APR_INCLUDES = @APR_INCLUDES@ APR_LA = @APR_LA@ APR_LDFLAGS = @APR_LDFLAGS@ APR_LIBS = @APR_LIBS@ APR_LTFLAGS = @APR_LTFLAGS@ APU_CONFIG = @APU_CONFIG@ APU_DOC_VERSION = @APU_DOC_VERSION@ APU_LA = @APU_LA@ AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPPFLAGS = @CPPFLAGS@ CSCOPE = @CSCOPE@ CTAGS = @CTAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ 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@ GREP = @GREP@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ MM_OPTS = @MM_OPTS@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ 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@ PERL = @PERL@ PERL_OPTS = @PERL_OPTS@ RANLIB = @RANLIB@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ TAR = @TAR@ VERSION = @VERSION@ 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_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@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ 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@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ EXTRA_DIST = t AM_CPPFLAGS = @APR_INCLUDES@ BUILT_SOURCES = @APR_LA@ @APU_LA@ lib_LTLIBRARIES = libapreq2.la libapreq2_la_SOURCES = util.c version.c cookie.c param.c parser.c \ parser_urlencoded.c parser_header.c parser_multipart.c \ module.c module_custom.c module_cgi.c error.c libapreq2_la_LDFLAGS = -version-info @APREQ_LIBTOOL_VERSION@ @APR_LTFLAGS@ @APR_LIBS@ @ENABLE_PROFILE_TRUE@AM_CFLAGS = -pg -fprofile-arcs -ftest-coverage all: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) all-am .SUFFIXES: .SUFFIXES: .c .lo .o .obj $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(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 library/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu library/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: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): install-libLTLIBRARIES: $(lib_LTLIBRARIES) @$(NORMAL_INSTALL) @list='$(lib_LTLIBRARIES)'; test -n "$(libdir)" || list=; \ list2=; for p in $$list; do \ if test -f $$p; then \ list2="$$list2 $$p"; \ else :; fi; \ done; \ test -z "$$list2" || { \ echo " $(MKDIR_P) '$(DESTDIR)$(libdir)'"; \ $(MKDIR_P) "$(DESTDIR)$(libdir)" || exit 1; \ echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(libdir)'"; \ $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(libdir)"; \ } uninstall-libLTLIBRARIES: @$(NORMAL_UNINSTALL) @list='$(lib_LTLIBRARIES)'; test -n "$(libdir)" || list=; \ for p in $$list; do \ $(am__strip_dir) \ echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(libdir)/$$f'"; \ $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(libdir)/$$f"; \ done clean-libLTLIBRARIES: -test -z "$(lib_LTLIBRARIES)" || rm -f $(lib_LTLIBRARIES) @list='$(lib_LTLIBRARIES)'; \ locs=`for p in $$list; do echo $$p; done | \ sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \ sort -u`; \ test -z "$$locs" || { \ echo rm -f $${locs}; \ rm -f $${locs}; \ } libapreq2.la: $(libapreq2_la_OBJECTS) $(libapreq2_la_DEPENDENCIES) $(EXTRA_libapreq2_la_DEPENDENCIES) $(AM_V_CCLD)$(libapreq2_la_LINK) -rpath $(libdir) $(libapreq2_la_OBJECTS) $(libapreq2_la_LIBADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cookie.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/error.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/module.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/module_cgi.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/module_custom.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/param.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/parser.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/parser_header.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/parser_multipart.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/parser_urlencoded.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/util.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/version.Plo@am__quote@ # am--include-marker $(am__depfiles_remade): @$(MKDIR_P) $(@D) @echo '# dummy' >$@-t && $(am__mv) $@-t $@ am--depfiles: $(am__depfiles_remade) .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $< .c.obj: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .c.lo: @am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $< 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: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) check-am all-am: Makefile $(LTLIBRARIES) installdirs: for dir in "$(DESTDIR)$(libdir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) install-am install-exec: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) 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." -test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES) clean: clean-am clean-am: clean-generic clean-libLTLIBRARIES clean-libtool clean-local \ mostlyclean-am distclean: distclean-am -rm -f ./$(DEPDIR)/cookie.Plo -rm -f ./$(DEPDIR)/error.Plo -rm -f ./$(DEPDIR)/module.Plo -rm -f ./$(DEPDIR)/module_cgi.Plo -rm -f ./$(DEPDIR)/module_custom.Plo -rm -f ./$(DEPDIR)/param.Plo -rm -f ./$(DEPDIR)/parser.Plo -rm -f ./$(DEPDIR)/parser_header.Plo -rm -f ./$(DEPDIR)/parser_multipart.Plo -rm -f ./$(DEPDIR)/parser_urlencoded.Plo -rm -f ./$(DEPDIR)/util.Plo -rm -f ./$(DEPDIR)/version.Plo -rm -f Makefile 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-libLTLIBRARIES 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)/cookie.Plo -rm -f ./$(DEPDIR)/error.Plo -rm -f ./$(DEPDIR)/module.Plo -rm -f ./$(DEPDIR)/module_cgi.Plo -rm -f ./$(DEPDIR)/module_custom.Plo -rm -f ./$(DEPDIR)/param.Plo -rm -f ./$(DEPDIR)/parser.Plo -rm -f ./$(DEPDIR)/parser_header.Plo -rm -f ./$(DEPDIR)/parser_multipart.Plo -rm -f ./$(DEPDIR)/parser_urlencoded.Plo -rm -f ./$(DEPDIR)/util.Plo -rm -f ./$(DEPDIR)/version.Plo -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-libLTLIBRARIES .MAKE: all check install install-am install-exec install-strip .PHONY: CTAGS GTAGS TAGS all all-am am--depfiles check check-am clean \ clean-generic clean-libLTLIBRARIES clean-libtool clean-local \ 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-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-libLTLIBRARIES \ 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-libLTLIBRARIES .PRECIOUS: Makefile test: all cd t; $(MAKE) test @ENABLE_PROFILE_TRUE@clean-local: @ENABLE_PROFILE_TRUE@ -rm *.bb *.bbg *.da *.gcov @ENABLE_PROFILE_TRUE@ cd t; $(MAKE) clean @ENABLE_PROFILE_FALSE@clean-local: @ENABLE_PROFILE_FALSE@ cd t; $(MAKE) clean distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags cd t; $(MAKE) distclean @BUILD_APR_TRUE@@APR_LA@: @BUILD_APR_TRUE@ cd `@APR_CONFIG@ --srcdir` && $(MAKE) @BUILD_APU_TRUE@@APU_LA@: @APR_LA@ @BUILD_APU_TRUE@ cd `@APU_CONFIG@ --srcdir` && $(MAKE) # 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: libapreq2-2.17/library/module.c0000644000175000017500000000350014277401734016040 0ustar jortonjorton/* ** Licensed to the Apache Software Foundation (ASF) under one or more ** contributor license agreements. See the NOTICE file distributed with ** this work for additional information regarding copyright ownership. ** The ASF licenses this file to You under the Apache License, Version 2.0 ** (the "License"); you may not use this file except in compliance with ** the License. You may obtain a copy of the License at ** ** http://www.apache.org/licenses/LICENSE-2.0 ** ** Unless required by applicable law or agreed to in writing, software ** distributed under the License is distributed on an "AS IS" BASIS, ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. ** See the License for the specific language governing permissions and ** limitations under the License. */ #include "apreq_module.h" #include "apreq_error.h" #include "apr_strings.h" #include "apr_lib.h" #include "apr_file_io.h" APREQ_DECLARE(apreq_param_t *)apreq_param(apreq_handle_t *req, const char *key) { apreq_param_t *param = apreq_args_get(req, key); if (param == NULL) return apreq_body_get(req, key); else return param; } APREQ_DECLARE(apr_table_t *)apreq_params(apreq_handle_t *req, apr_pool_t *p) { const apr_table_t *args, *body; apreq_args(req, &args); apreq_body(req, &body); if (args != NULL) if (body != NULL) return apr_table_overlay(p, args, body); else return apr_table_copy(p, args); else if (body != NULL) return apr_table_copy(p, body); else return NULL; } APREQ_DECLARE(apr_table_t *)apreq_cookies(apreq_handle_t *req, apr_pool_t *p) { const apr_table_t *jar; apreq_jar(req, &jar); if (jar != NULL) return apr_table_copy(p, jar); else return NULL; } /** @} */ libapreq2-2.17/library/module_cgi.c0000644000175000017500000007307514277401734016700 0ustar jortonjorton/* ** Licensed to the Apache Software Foundation (ASF) under one or more ** contributor license agreements. See the NOTICE file distributed with ** this work for additional information regarding copyright ownership. ** The ASF licenses this file to You under the Apache License, Version 2.0 ** (the "License"); you may not use this file except in compliance with ** the License. You may obtain a copy of the License at ** ** http://www.apache.org/licenses/LICENSE-2.0 ** ** Unless required by applicable law or agreed to in writing, software ** distributed under the License is distributed on an "AS IS" BASIS, ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. ** See the License for the specific language governing permissions and ** limitations under the License. */ #include #define APR_WANT_STRFUNC #include "apr_want.h" #include "apreq_module.h" #include "apreq_error.h" #include "apr_strings.h" #include "apr_lib.h" #include "apr_env.h" #include "apreq_util.h" #define USER_DATA_KEY "apreq" /* Parroting APLOG_* ... */ #define CGILOG_EMERG 0 /* system is unusable */ #define CGILOG_ALERT 1 /* action must be taken immediately */ #define CGILOG_CRIT 2 /* critical conditions */ #define CGILOG_ERR 3 /* error conditions */ #define CGILOG_WARNING 4 /* warning conditions */ #define CGILOG_NOTICE 5 /* normal but significant condition */ #define CGILOG_INFO 6 /* informational */ #define CGILOG_DEBUG 7 /* debug-level messages */ #define CGILOG_LEVELMASK 7 #define CGILOG_MARK __FILE__, __LINE__ /** Interactive patch: * TODO Don't use 65K buffer * TODO Handle empty/non-existent parameters * TODO Allow body elements to be files * TODO When running body/get/cookies all at once, include previous cached * values (and don't start at 0 in count) * TODO What happens if user does apreq_param, but needs POST value - we'll * never catch it now, as args param will match... */ struct cgi_handle { struct apreq_handle_t handle; apr_table_t *jar, *args, *body; apr_status_t jar_status, args_status, body_status; apreq_parser_t *parser; apreq_hook_t *hook_queue; apreq_hook_t *find_param; const char *temp_dir; apr_size_t brigade_limit; apr_uint64_t read_limit; apr_uint64_t bytes_read; apr_bucket_brigade *in; apr_bucket_brigade *tmpbb; int interactive_mode; const char *promptstr; apr_file_t *sout, *sin; }; #define CRLF "\015\012" static const char *nullstr = 0; #define DEFAULT_PROMPT "([$t] )$n(\\($l\\))([$d]): " #define MAX_PROMPT_NESTING_LEVELS 8 #define MAX_BUFFER_SIZE 65536 typedef struct { const char *t_name; int t_val; } TRANS; static const TRANS priorities[] = { {"emerg", CGILOG_EMERG}, {"alert", CGILOG_ALERT}, {"crit", CGILOG_CRIT}, {"error", CGILOG_ERR}, {"warn", CGILOG_WARNING}, {"notice", CGILOG_NOTICE}, {"info", CGILOG_INFO}, {"debug", CGILOG_DEBUG}, {NULL, -1}, }; static char* chomp(char* str) { long p = (long)strlen(str); while (--p >= 0) { switch ((char)(str[p])) { case '\015': case '\012':str[p]='\000'; break; default:return str; } } return str; } /** TODO: Support wide-characters */ /* prompt takes a apreq_handle and 2 strings - name and type - and prompts a user for input via stdin/stdout. used in interactive mode. name must be defined. type can be null. we take the promptstring defined in the handle and interpolate variables as follows: $n - name of the variable we're asking for (param 2 to prompt()) $t - type of the variable we're asking for - like cookie, get, post, etc (param 3 to prompt()) parentheses - if a variable is surrounded by parentheses, and interpolates as null, then nothing else in the parentheses will be displayed Useful if you want a string to only show up if a given variable is available These are planned for forward-compatibility, but the underlying features need some love... I left these in here just as feature reminders, rather than completely removing them from the code - at least they provide sanity testing of the default prompt & parentheses - issac $l - label for the param - the end-user-developer can provide a textual description of the param (name) being requested (currently unused in lib) $d - default value for the param (currently unused in lib) */ static char *prompt(apreq_handle_t *handle, const char *name, const char *type) { struct cgi_handle *req = (struct cgi_handle *)handle; const char *defval = nullstr; const char *label = NULL; const char *cprompt; char buf[MAX_PROMPT_NESTING_LEVELS][MAX_BUFFER_SIZE]; /* Array of current arg for given p-level */ char *start, curarg[MAX_PROMPT_NESTING_LEVELS] = ""; /* Parenthesis level (for argument/text grouping) */ int plevel; cprompt = req->promptstr - 1; *buf[0] = plevel = 0; start = buf[0]; while (*(++cprompt) != 0) { switch (*cprompt) { case '$': /* interpolate argument; curarg[plevel] => 1 */ cprompt++; switch (*cprompt) { case 't': if (type != NULL) { strcpy(start, type); start += strlen(type); curarg[plevel] = 1; } else { curarg[plevel] = curarg[plevel] | 0; } break; case 'n': /* Name can't be null :-) [If it can, we should * immediately return NULL] */ strcpy(start, name); start += strlen(name); curarg[plevel] = 1; break; case 'l': if (label != NULL) { strcpy(start, label); start += strlen(label); curarg[plevel] = 1; } else { curarg[plevel] = curarg[plevel] | 0; } break; case 'd': /* TODO: Once null defaults are available, * remove if and use nullstr if defval == NULL */ if (defval != NULL) { strcpy(start, defval); start += strlen(defval); curarg[plevel] = 1; } else { curarg[plevel] = curarg[plevel] | 0; } break; default: /* Handle this? */ break; } break; case '(': if (plevel <= MAX_PROMPT_NESTING_LEVELS) { plevel++; curarg[plevel] = *buf[plevel] = 0; start = buf[plevel]; } /* else? */ break; case ')': if (plevel > 0) { *start = 0; /* Null terminate current string */ /* Move pointer to end of string */ plevel--; start = buf[plevel] + strlen(buf[plevel]); /* If old curarg was set, concat buffer with level down */ if (curarg[plevel + 1]) { strcpy(start, buf[plevel + 1]); start += strlen(buf[plevel + 1]); } break; } case '\\': /* Check next character for escape sequence * (just ignore it for now) */ (void)*cprompt++; /* Fallthrough */ default: *start++ = *cprompt; } } *start = 0; /* Null terminate the string */ apr_file_printf(req->sout, "%s", buf[0]); apr_file_gets(buf[0], MAX_BUFFER_SIZE, req->sin); chomp(buf[0]); if (strcmp(buf[0], "")) { /* if (strcmp(buf[0], nullstr)) */ return apr_pstrdup(handle->pool, buf[0]); /* return NULL; */ } if (defval != nullstr) return apr_pstrdup(handle->pool, defval); return NULL; } static const char *cgi_header_in(apreq_handle_t *handle, const char *name) { apr_pool_t *p = handle->pool; char *key = apr_pstrcat(p, "HTTP_", name, NULL); char *k, *value = NULL; for (k = key+5; *k; ++k) { if (*k == '-') *k = '_'; else *k = apr_toupper(*k); } if (!strcmp(key, "HTTP_CONTENT_TYPE") || !strcmp(key, "HTTP_CONTENT_LENGTH")) { key += 5; /* strlen("HTTP_") */ } apr_env_get(&value, key, p); return value; } static void cgi_log_error(const char *file, int line, int level, apr_status_t status, apreq_handle_t *handle, const char *fmt, ...) { apr_pool_t *p = handle->pool; char buf[256]; char *log_level_string, *ra; const char *remote_addr; unsigned log_level = CGILOG_WARNING; char date[APR_CTIME_LEN]; va_list vp; #ifndef WIN32 apr_file_t *err; #endif va_start(vp, fmt); if (apr_env_get(&log_level_string, "LOG_LEVEL", p) == APR_SUCCESS) log_level = (log_level_string[0] - '0'); level &= CGILOG_LEVELMASK; if (level < (int)log_level) { if (apr_env_get(&ra, "REMOTE_ADDR", p) == APR_SUCCESS) remote_addr = ra; else remote_addr = "address unavailable"; apr_ctime(date, apr_time_now()); #ifndef WIN32 apr_file_open_stderr(&err, p); apr_file_printf(err, "[%s] [%s] [%s] %s(%d): %s: %s\n", date, priorities[level].t_name, remote_addr, file, line, apr_strerror(status,buf,255),apr_pvsprintf(p,fmt,vp)); apr_file_flush(err); #else fprintf(stderr, "[%s] [%s] [%s] %s(%d): %s: %s\n", date, priorities[level].t_name, remote_addr, file, line, apr_strerror(status,buf,255),apr_pvsprintf(p,fmt,vp)); #endif } va_end(vp); } APR_INLINE static const char *cgi_query_string(apreq_handle_t *handle) { char *value = NULL, qs[] = "QUERY_STRING"; apr_env_get(&value, qs, handle->pool); return value; } static void init_body(apreq_handle_t *handle) { struct cgi_handle *req = (struct cgi_handle *)handle; const char *cl_header = cgi_header_in(handle, "Content-Length"); apr_bucket_alloc_t *ba = handle->bucket_alloc; apr_pool_t *pool = handle->pool; apr_file_t *file; apr_bucket *eos, *pipe; if (cl_header != NULL) { char *dummy; apr_int64_t content_length = apr_strtoi64(cl_header, &dummy, 0); if (dummy == cl_header || *dummy != 0) { req->body_status = APREQ_ERROR_BADHEADER; cgi_log_error(CGILOG_MARK, CGILOG_ERR, req->body_status, handle, "Invalid Content-Length header (%s)", cl_header); return; } else if ((apr_uint64_t)content_length > req->read_limit) { req->body_status = APREQ_ERROR_OVERLIMIT; cgi_log_error(CGILOG_MARK, CGILOG_ERR, req->body_status, handle, "Content-Length header (%s) exceeds configured " "max_body limit (%" APR_UINT64_T_FMT ")", cl_header, req->read_limit); return; } } if (req->parser == NULL) { const char *ct_header = cgi_header_in(handle, "Content-Type"); if (ct_header != NULL) { apreq_parser_function_t pf = apreq_parser(ct_header); if (pf != NULL) { req->parser = apreq_parser_make(pool, ba, ct_header, pf, req->brigade_limit, req->temp_dir, req->hook_queue, NULL); } else { req->body_status = APREQ_ERROR_NOPARSER; return; } } else { req->body_status = APREQ_ERROR_NOHEADER; return; } } else { if (req->parser->brigade_limit > req->brigade_limit) req->parser->brigade_limit = req->brigade_limit; if (req->temp_dir != NULL) req->parser->temp_dir = req->temp_dir; if (req->hook_queue != NULL) apreq_parser_add_hook(req->parser, req->hook_queue); } req->hook_queue = NULL; req->in = apr_brigade_create(pool, ba); req->tmpbb = apr_brigade_create(pool, ba); apr_file_open_stdin(&file, pool); // error status? pipe = apr_bucket_pipe_create(file, ba); eos = apr_bucket_eos_create(ba); APR_BRIGADE_INSERT_HEAD(req->in, pipe); APR_BRIGADE_INSERT_TAIL(req->in, eos); req->body_status = APR_INCOMPLETE; } static apr_status_t cgi_read(apreq_handle_t *handle, apr_off_t bytes) { struct cgi_handle *req = (struct cgi_handle *)handle; apr_bucket *e; apr_status_t s; if (req->body_status == APR_EINIT) init_body(handle); if (req->body_status != APR_INCOMPLETE) return req->body_status; switch (s = apr_brigade_partition(req->in, bytes, &e)) { apr_off_t len; case APR_SUCCESS: apreq_brigade_move(req->tmpbb, req->in, e); req->bytes_read += bytes; if (req->bytes_read > req->read_limit) { req->body_status = APREQ_ERROR_OVERLIMIT; cgi_log_error(CGILOG_MARK, CGILOG_ERR, req->body_status, handle, "Bytes read (%" APR_UINT64_T_FMT ") exceeds configured limit (%" APR_UINT64_T_FMT ")", req->bytes_read, req->read_limit); break; } req->body_status = apreq_parser_run(req->parser, req->body, req->tmpbb); apr_brigade_cleanup(req->tmpbb); break; case APR_INCOMPLETE: apreq_brigade_move(req->tmpbb, req->in, e); s = apr_brigade_length(req->tmpbb, 1, &len); if (s != APR_SUCCESS) { req->body_status = s; break; } req->bytes_read += len; if (req->bytes_read > req->read_limit) { req->body_status = APREQ_ERROR_OVERLIMIT; cgi_log_error(CGILOG_MARK, CGILOG_ERR, req->body_status, handle, "Bytes read (%" APR_UINT64_T_FMT ") exceeds configured limit (%" APR_UINT64_T_FMT ")", req->bytes_read, req->read_limit); break; } req->body_status = apreq_parser_run(req->parser, req->body, req->tmpbb); apr_brigade_cleanup(req->tmpbb); break; default: req->body_status = s; } return req->body_status; } static apr_status_t cgi_jar(apreq_handle_t *handle, const apr_table_t **t) { struct cgi_handle *req = (struct cgi_handle *)handle; if (req->interactive_mode && req->jar_status != APR_SUCCESS) { char buf[65536]; const char *name, *val; apreq_cookie_t *p; int i = 1; apr_file_printf(req->sout, "[CGI] Requested all cookies\n"); while (1) { apr_file_printf(req->sout, "[CGI] Please enter a name for cookie %d (or just hit ENTER to end): ", i++); apr_file_gets(buf, 65536, req->sin); chomp(buf); if (!strcmp(buf, "")) { break; } name = apr_pstrdup(handle->pool, buf); val = prompt(handle, name, "cookie"); if (val == NULL) val = ""; p = apreq_cookie_make(handle->pool, name, strlen(name), val, strlen(val)); apreq_cookie_tainted_on(p); apreq_value_table_add(&p->v, req->jar); } req->jar_status = APR_SUCCESS; } /** Fallthrough */ if (req->jar_status == APR_EINIT) { const char *cookies = cgi_header_in(handle, "Cookie"); if (cookies != NULL) { req->jar_status = apreq_parse_cookie_header(handle->pool, req->jar, cookies); } else req->jar_status = APREQ_ERROR_NODATA; } *t = req->jar; return req->jar_status; } static apr_status_t cgi_args(apreq_handle_t *handle, const apr_table_t **t) { struct cgi_handle *req = (struct cgi_handle *)handle; if (req->interactive_mode && req->args_status != APR_SUCCESS) { char buf[65536]; const char *name, *val; apreq_param_t *p; int i = 1; apr_file_printf(req->sout, "[CGI] Requested all argument parameters\n"); while (1) { apr_file_printf(req->sout, "[CGI] Please enter a name for parameter %d (or just hit ENTER to end): ", i++); apr_file_gets(buf, 65536, req->sin); chomp(buf); if (!strcmp(buf, "")) { break; } name = apr_pstrdup(handle->pool, buf); val = prompt(handle, name, "parameter"); if (val == NULL) val = ""; p = apreq_param_make(handle->pool, name, strlen(name), val, strlen(val)); apreq_param_tainted_on(p); apreq_value_table_add(&p->v, req->args); val = p->v.data; } req->args_status = APR_SUCCESS; } /** Fallthrough */ if (req->args_status == APR_EINIT) { const char *qs = cgi_query_string(handle); if (qs != NULL) { req->args_status = apreq_parse_query_string(handle->pool, req->args, qs); } else req->args_status = APREQ_ERROR_NODATA; } *t = req->args; return req->args_status; } static apreq_cookie_t *cgi_jar_get(apreq_handle_t *handle, const char *name) { struct cgi_handle *req = (struct cgi_handle *)handle; const apr_table_t *t; const char *val = NULL; if (req->jar_status == APR_EINIT && !req->interactive_mode) cgi_jar(handle, &t); else t = req->jar; val = apr_table_get(t, name); if (val == NULL) { if (!req->interactive_mode) { return NULL; } else { apreq_cookie_t *p; val = prompt(handle, name, "cookie"); if (val == NULL) return NULL; p = apreq_cookie_make(handle->pool, name, strlen(name), val, strlen(val)); apreq_cookie_tainted_on(p); apreq_value_table_add(&p->v, req->jar); val = p->v.data; } } return apreq_value_to_cookie(val); } static apreq_param_t *cgi_args_get(apreq_handle_t *handle, const char *name) { struct cgi_handle *req = (struct cgi_handle *)handle; const apr_table_t *t; const char *val = NULL; if (req->args_status == APR_EINIT && !req->interactive_mode) cgi_args(handle, &t); else t = req->args; val = apr_table_get(t, name); if (val == NULL) { if (!req->interactive_mode) { return NULL; } else { apreq_param_t *p; val = prompt(handle, name, "parameter"); if (val == NULL) return NULL; p = apreq_param_make(handle->pool, name, strlen(name), val, strlen(val)); apreq_param_tainted_on(p); apreq_value_table_add(&p->v, req->args); val = p->v.data; } } return apreq_value_to_param(val); } static apr_status_t cgi_body(apreq_handle_t *handle, const apr_table_t **t) { struct cgi_handle *req = (struct cgi_handle *)handle; if (req->interactive_mode && req->body_status != APR_SUCCESS) { const char *name, *val; apreq_param_t *p; int i = 1; apr_file_printf(req->sout, "[CGI] Requested all body parameters\n"); while (1) { char buf[65536]; apr_file_printf(req->sout, "[CGI] Please enter a name for parameter %d (or just hit ENTER to end): ", i++); apr_file_gets(buf, 65536, req->sin); chomp(buf); if (!strcmp(buf, "")) { break; } name = apr_pstrdup(handle->pool, buf); val = prompt(handle, name, "parameter"); if (val == NULL) val = ""; p = apreq_param_make(handle->pool, name, strlen(name), val, strlen(val)); apreq_param_tainted_on(p); apreq_value_table_add(&p->v, req->body); val = p->v.data; } req->body_status = APR_SUCCESS; } /** Fallthrough */ switch (req->body_status) { case APR_EINIT: init_body(handle); if (req->body_status != APR_INCOMPLETE) break; case APR_INCOMPLETE: while (cgi_read(handle, APREQ_DEFAULT_READ_BLOCK_SIZE) == APR_INCOMPLETE) ; /*loop*/ } *t = req->body; return req->body_status; } static apreq_param_t *cgi_body_get(apreq_handle_t *handle, const char *name) { struct cgi_handle *req = (struct cgi_handle *)handle; const char *val = NULL; apreq_hook_t *h; apreq_hook_find_param_ctx_t *hook_ctx; if (req->interactive_mode) { val = apr_table_get(req->body, name); if (val == NULL) { return NULL; } else { apreq_param_t *p; val = prompt(handle, name, "parameter"); if (val == NULL) return NULL; p = apreq_param_make(handle->pool, name, strlen(name), val, strlen(val)); apreq_param_tainted_on(p); apreq_value_table_add(&p->v, req->body); val = p->v.data; return apreq_value_to_param(val); } } switch (req->body_status) { case APR_SUCCESS: val = apr_table_get(req->body, name); if (val != NULL) return apreq_value_to_param(val); return NULL; case APR_EINIT: init_body(handle); if (req->body_status != APR_INCOMPLETE) return NULL; cgi_read(handle, APREQ_DEFAULT_READ_BLOCK_SIZE); case APR_INCOMPLETE: val = apr_table_get(req->body, name); if (val != NULL) return apreq_value_to_param(val); /* Not seen yet, so we need to scan for param while prefetching the body */ hook_ctx = apr_palloc(handle->pool, sizeof *hook_ctx); if (req->find_param == NULL) req->find_param = apreq_hook_make(handle->pool, apreq_hook_find_param, NULL, NULL); h = req->find_param; h->next = req->parser->hook; req->parser->hook = h; h->ctx = hook_ctx; hook_ctx->name = name; hook_ctx->param = NULL; hook_ctx->prev = req->parser->hook; do { cgi_read(handle, APREQ_DEFAULT_READ_BLOCK_SIZE); if (hook_ctx->param != NULL) return hook_ctx->param; } while (req->body_status == APR_INCOMPLETE); req->parser->hook = h->next; return NULL; default: if (req->body == NULL) return NULL; val = apr_table_get(req->body, name); if (val != NULL) return apreq_value_to_param(val); return NULL; } /* not reached */ return NULL; } static apr_status_t cgi_parser_get(apreq_handle_t *handle, const apreq_parser_t **parser) { struct cgi_handle *req = (struct cgi_handle *)handle; *parser = req->parser; return APR_SUCCESS; } static apr_status_t cgi_parser_set(apreq_handle_t *handle, apreq_parser_t *parser) { struct cgi_handle *req = (struct cgi_handle *)handle; if (req->parser == NULL) { if (req->hook_queue != NULL) { apr_status_t s = apreq_parser_add_hook(parser, req->hook_queue); if (s != APR_SUCCESS) return s; } if (req->temp_dir != NULL) { parser->temp_dir = req->temp_dir; } if (req->brigade_limit < parser->brigade_limit) { parser->brigade_limit = req->brigade_limit; } req->hook_queue = NULL; req->parser = parser; return APR_SUCCESS; } else return APREQ_ERROR_MISMATCH; } static apr_status_t cgi_hook_add(apreq_handle_t *handle, apreq_hook_t *hook) { struct cgi_handle *req = (struct cgi_handle *)handle; if (req->parser != NULL) { return apreq_parser_add_hook(req->parser, hook); } else if (req->hook_queue != NULL) { apreq_hook_t *h = req->hook_queue; while (h->next != NULL) h = h->next; h->next = hook; } else { req->hook_queue = hook; } return APR_SUCCESS; } static apr_status_t cgi_brigade_limit_set(apreq_handle_t *handle, apr_size_t bytes) { struct cgi_handle *req = (struct cgi_handle *)handle; apr_size_t *limit = (req->parser == NULL) ? &req->brigade_limit : &req->parser->brigade_limit; if (*limit > bytes) { *limit = bytes; return APR_SUCCESS; } return APREQ_ERROR_MISMATCH; } static apr_status_t cgi_brigade_limit_get(apreq_handle_t *handle, apr_size_t *bytes) { struct cgi_handle *req = (struct cgi_handle *)handle; *bytes = (req->parser == NULL) ? req->brigade_limit : req->parser->brigade_limit; return APR_SUCCESS; } static apr_status_t cgi_read_limit_set(apreq_handle_t *handle, apr_uint64_t bytes) { struct cgi_handle *req = (struct cgi_handle *)handle; if (req->read_limit > bytes && req->bytes_read < bytes) { req->read_limit = bytes; return APR_SUCCESS; } return APREQ_ERROR_MISMATCH; } static apr_status_t cgi_read_limit_get(apreq_handle_t *handle, apr_uint64_t *bytes) { struct cgi_handle *req = (struct cgi_handle *)handle; *bytes = req->read_limit; return APR_SUCCESS; } static apr_status_t cgi_temp_dir_set(apreq_handle_t *handle, const char *path) { struct cgi_handle *req = (struct cgi_handle *)handle; const char **temp_dir = (req->parser == NULL) ? &req->temp_dir : &req->parser->temp_dir; if (*temp_dir == NULL && req->bytes_read == 0) { if (path != NULL) *temp_dir = apr_pstrdup(handle->pool, path); return APR_SUCCESS; } return APREQ_ERROR_MISMATCH; } static apr_status_t cgi_temp_dir_get(apreq_handle_t *handle, const char **path) { struct cgi_handle *req = (struct cgi_handle *)handle; *path = (req->parser == NULL) ? req->temp_dir : req->parser->temp_dir; return APR_SUCCESS; } #ifdef APR_POOL_DEBUG static apr_status_t ba_cleanup(void *data) { apr_bucket_alloc_t *ba = data; apr_bucket_alloc_destroy(ba); return APR_SUCCESS; } #endif /** Determine if we're interactive mode or not. Order is QUERY_STRING ? NO : Interactive I think we should just rely on GATEWAY_INTERFACE to set non-interactive mode, and be interactive if it's not there Behaviour change should really be: Always check query_string before prompting user, but rewrite body/cookies to get if interactive Definitely more work needed here... */ static int is_interactive_mode(apr_pool_t *pool) { char *value = NULL, qs[] = "GATEWAY_INTERFACE"; apr_status_t rv; rv = apr_env_get(&value, qs, pool); if (rv != APR_SUCCESS) if (rv == APR_ENOENT) return 1; /** handle else? (!SUCCESS && !ENOENT) */ return 0; } static APREQ_MODULE(cgi, 20090110); APREQ_DECLARE(apreq_handle_t *)apreq_handle_cgi(apr_pool_t *pool) { apr_bucket_alloc_t *ba; struct cgi_handle *req; void *data; apr_pool_userdata_get(&data, USER_DATA_KEY, pool); if (data != NULL) return data; req = apr_pcalloc(pool, sizeof *req); ba = apr_bucket_alloc_create(pool); /* check pool's userdata first. */ req->handle.module = &cgi_module; req->handle.pool = pool; req->handle.bucket_alloc = ba; req->read_limit = (apr_uint64_t) -1; req->brigade_limit = APREQ_DEFAULT_BRIGADE_LIMIT; req->args = apr_table_make(pool, APREQ_DEFAULT_NELTS); req->body = apr_table_make(pool, APREQ_DEFAULT_NELTS); req->jar = apr_table_make(pool, APREQ_DEFAULT_NELTS); req->args_status = req->jar_status = req->body_status = APR_EINIT; if (is_interactive_mode(pool)) { req->interactive_mode = 1; apr_file_open_stdout(&(req->sout), pool); apr_file_open_stdin(&(req->sin), pool); req->promptstr=apr_pstrdup(pool, DEFAULT_PROMPT); } apr_pool_userdata_setn(&req->handle, USER_DATA_KEY, NULL, pool); #ifdef APR_POOL_DEBUG apr_pool_cleanup_register(pool, ba, ba_cleanup, ba_cleanup); #endif return &req->handle; } libapreq2-2.17/library/module_custom.c0000644000175000017500000002055314277401734017441 0ustar jortonjorton/* ** Licensed to the Apache Software Foundation (ASF) under one or more ** contributor license agreements. See the NOTICE file distributed with ** this work for additional information regarding copyright ownership. ** The ASF licenses this file to You under the Apache License, Version 2.0 ** (the "License"); you may not use this file except in compliance with ** the License. You may obtain a copy of the License at ** ** http://www.apache.org/licenses/LICENSE-2.0 ** ** Unless required by applicable law or agreed to in writing, software ** distributed under the License is distributed on an "AS IS" BASIS, ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. ** See the License for the specific language governing permissions and ** limitations under the License. */ #include "apr_strings.h" #include "apreq_module.h" #include "apreq_error.h" #include "apreq_util.h" #define READ_BYTES (64 * 1024) struct custom_handle { struct apreq_handle_t handle; apr_table_t *jar, *args, *body; apr_status_t jar_status, args_status, body_status; apreq_parser_t *parser; apr_uint64_t read_limit; apr_uint64_t bytes_read; apr_bucket_brigade *in; apr_bucket_brigade *tmpbb; }; static apr_status_t custom_parse_brigade(apreq_handle_t *handle, apr_uint64_t bytes) { struct custom_handle *req = (struct custom_handle *)handle; apr_status_t s; apr_bucket *e; if (req->body_status != APR_INCOMPLETE) return req->body_status; switch (s = apr_brigade_partition(req->in, bytes, &e)) { apr_off_t len; case APR_SUCCESS: apreq_brigade_move(req->tmpbb, req->in, e); req->bytes_read += bytes; if (req->bytes_read > req->read_limit) { req->body_status = APREQ_ERROR_OVERLIMIT; break; } req->body_status = apreq_parser_run(req->parser, req->body, req->tmpbb); apr_brigade_cleanup(req->tmpbb); break; case APR_INCOMPLETE: apreq_brigade_move(req->tmpbb, req->in, e); s = apr_brigade_length(req->tmpbb, 1, &len); if (s != APR_SUCCESS) { req->body_status = s; break; } req->bytes_read += len; if (req->bytes_read > req->read_limit) { req->body_status = APREQ_ERROR_OVERLIMIT; break; } req->body_status = apreq_parser_run(req->parser, req->body, req->tmpbb); apr_brigade_cleanup(req->tmpbb); break; default: req->body_status = s; } return req->body_status; } static apr_status_t custom_jar(apreq_handle_t *handle, const apr_table_t **t) { struct custom_handle *req = (struct custom_handle *)handle; *t = req->jar; return req->jar_status; } static apr_status_t custom_args(apreq_handle_t *handle, const apr_table_t **t) { struct custom_handle *req = (struct custom_handle*)handle; *t = req->args; return req->args_status; } static apr_status_t custom_body(apreq_handle_t *handle, const apr_table_t **t) { struct custom_handle *req = (struct custom_handle*)handle; while (req->body_status == APR_INCOMPLETE) custom_parse_brigade(handle, READ_BYTES); *t = req->body; return req->body_status; } static apreq_cookie_t *custom_jar_get(apreq_handle_t *handle, const char *name) { struct custom_handle *req = (struct custom_handle*)handle; const char *val; if (req->jar == NULL || name == NULL) return NULL; val = apr_table_get(req->jar, name); if (val == NULL) return NULL; return apreq_value_to_cookie(val); } static apreq_param_t *custom_args_get(apreq_handle_t *handle, const char *name) { struct custom_handle *req = (struct custom_handle*)handle; const char *val; if (req->args == NULL || name == NULL) return NULL; val = apr_table_get(req->args, name); if (val == NULL) return NULL; return apreq_value_to_param(val); } static apreq_param_t *custom_body_get(apreq_handle_t *handle, const char *name) { struct custom_handle *req = (struct custom_handle*)handle; const char *val; if (req->body == NULL || name == NULL) return NULL; while (1) { *(const char **)&val = apr_table_get(req->body, name); if (val != NULL) break; if (req->body_status == APR_INCOMPLETE) custom_parse_brigade(handle, READ_BYTES); else return NULL; } return apreq_value_to_param(val); } static apr_status_t custom_parser_get(apreq_handle_t *handle, const apreq_parser_t **parser) { struct custom_handle *req = (struct custom_handle*)handle; *parser = req->parser; return APR_SUCCESS; } static apr_status_t custom_parser_set(apreq_handle_t *handle, apreq_parser_t *parser) { (void)handle; (void)parser; return APR_ENOTIMPL; } static apr_status_t custom_hook_add(apreq_handle_t *handle, apreq_hook_t *hook) { struct custom_handle *req = (struct custom_handle*)handle; apreq_parser_add_hook(req->parser, hook); return APR_SUCCESS; } static apr_status_t custom_brigade_limit_get(apreq_handle_t *handle, apr_size_t *bytes) { struct custom_handle *req = (struct custom_handle*)handle; *bytes = req->parser->brigade_limit; return APR_SUCCESS; } static apr_status_t custom_brigade_limit_set(apreq_handle_t *handle, apr_size_t bytes) { (void)handle; (void)bytes; return APR_ENOTIMPL; } static apr_status_t custom_read_limit_get(apreq_handle_t *handle, apr_uint64_t *bytes) { struct custom_handle *req = (struct custom_handle*)handle; *bytes = req->read_limit; return APR_SUCCESS; } static apr_status_t custom_read_limit_set(apreq_handle_t *handle, apr_uint64_t bytes) { (void)handle; (void)bytes; return APR_ENOTIMPL; } static apr_status_t custom_temp_dir_get(apreq_handle_t *handle, const char **path) { struct custom_handle *req = (struct custom_handle*)handle; *path = req->parser->temp_dir; return APR_SUCCESS; } static apr_status_t custom_temp_dir_set(apreq_handle_t *handle, const char *path) { (void)handle; (void)path; return APR_ENOTIMPL; } static APREQ_MODULE(custom, 20070428); APREQ_DECLARE(apreq_handle_t *)apreq_handle_custom(apr_pool_t *pool, const char *query_string, const char *cookie, apreq_parser_t *parser, apr_uint64_t read_limit, apr_bucket_brigade *in) { struct custom_handle *req; req = apr_palloc(pool, sizeof(*req)); req->handle.module = &custom_module; req->handle.pool = pool; req->handle.bucket_alloc = in->bucket_alloc; req->read_limit = read_limit; req->bytes_read = 0; req->parser = parser; req->in = apr_brigade_create(pool, in->bucket_alloc); req->tmpbb = apr_brigade_create(pool, in->bucket_alloc); req->body = apr_table_make(pool, APREQ_DEFAULT_NELTS); req->body_status = APR_INCOMPLETE; APR_BRIGADE_CONCAT(req->in, in); if (cookie != NULL) { req->jar = apr_table_make(pool, APREQ_DEFAULT_NELTS); req->jar_status = apreq_parse_cookie_header(pool, req->jar, cookie); } else { req->jar = NULL; req->jar_status = APREQ_ERROR_NODATA; } if (query_string != NULL) { req->args = apr_table_make(pool, APREQ_DEFAULT_NELTS); req->args_status = apreq_parse_query_string(pool, req->args, query_string); } else { req->args = NULL; req->args_status = APREQ_ERROR_NODATA; } if (!APR_BUCKET_IS_EOS(APR_BRIGADE_LAST(req->in))) { apr_bucket *eos = apr_bucket_eos_create(in->bucket_alloc); APR_BRIGADE_INSERT_TAIL(req->in, eos); } return &req->handle; } libapreq2-2.17/library/param.c0000644000175000017500000001673614277401734015672 0ustar jortonjorton/* ** Licensed to the Apache Software Foundation (ASF) under one or more ** contributor license agreements. See the NOTICE file distributed with ** this work for additional information regarding copyright ownership. ** The ASF licenses this file to You under the Apache License, Version 2.0 ** (the "License"); you may not use this file except in compliance with ** the License. You may obtain a copy of the License at ** ** http://www.apache.org/licenses/LICENSE-2.0 ** ** Unless required by applicable law or agreed to in writing, software ** distributed under the License is distributed on an "AS IS" BASIS, ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. ** See the License for the specific language governing permissions and ** limitations under the License. */ #include "apreq_param.h" #include "apreq_error.h" #include "apreq_util.h" #include "apr_strings.h" #include "apr_lib.h" #define MAX_LEN (1024 * 1024) #define MAX_BRIGADE_LEN (1024 * 256) #define MAX_READ_AHEAD (1024 * 64) APREQ_DECLARE(apreq_param_t *) apreq_param_make(apr_pool_t *p, const char *name, const apr_size_t nlen, const char *val, const apr_size_t vlen) { apreq_param_t *param; apreq_value_t *v; param = apr_palloc(p, nlen + vlen + 1 + sizeof *param); if (param == NULL) return NULL; param->info = NULL; param->upload = NULL; param->flags = 0; *(const apreq_value_t **)&v = ¶m->v; if (vlen && val != NULL) memcpy(v->data, val, vlen); v->data[vlen] = 0; v->dlen = vlen; v->name = v->data + vlen + 1; if (nlen && name != NULL) memcpy(v->name, name, nlen); v->name[nlen] = 0; v->nlen = nlen; return param; } APREQ_DECLARE(apr_status_t) apreq_param_decode(apreq_param_t **param, apr_pool_t *pool, const char *word, apr_size_t nlen, apr_size_t vlen) { apr_status_t status; apreq_value_t *v; apreq_param_t *p; apreq_charset_t charset; if (nlen == 0) { *param = NULL; return APR_EBADARG; } p = apr_palloc(pool, nlen + vlen + 1 + sizeof *p); p->info = NULL; p->upload = NULL; p->flags = 0; *(const apreq_value_t **)&v = &p->v; if (vlen > 0) { status = apreq_decode(v->data, &v->dlen, word + nlen + 1, vlen); if (status != APR_SUCCESS) { *param = NULL; return status; } charset = apreq_charset_divine(v->data, v->dlen); } else { v->data[0] = 0; v->dlen = 0; charset = APREQ_CHARSET_ASCII; } v->name = v->data + vlen + 1; status = apreq_decode(v->name, &v->nlen, word, nlen); if (status != APR_SUCCESS) { *param = NULL; return status; } switch (apreq_charset_divine(v->name, v->nlen)) { case APREQ_CHARSET_UTF8: if (charset == APREQ_CHARSET_ASCII) charset = APREQ_CHARSET_UTF8; case APREQ_CHARSET_ASCII: break; case APREQ_CHARSET_LATIN1: if (charset != APREQ_CHARSET_CP1252) charset = APREQ_CHARSET_LATIN1; break; case APREQ_CHARSET_CP1252: charset = APREQ_CHARSET_CP1252; } apreq_param_charset_set(p, charset); *param = p; return APR_SUCCESS; } APREQ_DECLARE(char *) apreq_param_encode(apr_pool_t *pool, const apreq_param_t *param) { apr_size_t dlen; char *data; data = apr_palloc(pool, 3 * (param->v.nlen + param->v.dlen) + 2); dlen = apreq_encode(data, param->v.name, param->v.nlen); data[dlen++] = '='; dlen += apreq_encode(data + dlen, param->v.data, param->v.dlen); return data; } APREQ_DECLARE(apr_status_t) apreq_parse_query_string(apr_pool_t *pool, apr_table_t *t, const char *qs) { const char *start = qs; apr_size_t nlen = 0; for (;;++qs) { switch (*qs) { case '=': if (nlen == 0) { nlen = qs - start; } break; case '&': case ';': case 0: if (qs > start) { apr_size_t vlen = 0; apreq_param_t *param; apr_status_t s; if (nlen == 0) nlen = qs - start; else vlen = qs - start - nlen - 1; s = apreq_param_decode(¶m, pool, start, nlen, vlen); if (s != APR_SUCCESS) return s; apreq_param_tainted_on(param); apreq_value_table_add(¶m->v, t); } if (*qs == 0) return APR_SUCCESS; nlen = 0; start = qs + 1; } } /* not reached */ return APR_INCOMPLETE; } static int param_push(void *data, const char *key, const char *val) { apr_array_header_t *arr = data; *(apreq_param_t **)apr_array_push(arr) = apreq_value_to_param(val); return 1; /* keep going */ } APREQ_DECLARE(apr_array_header_t *) apreq_params_as_array(apr_pool_t *p, const apr_table_t *t, const char *key) { apr_array_header_t *arr; arr = apr_array_make(p, apr_table_elts(t)->nelts, sizeof(apreq_param_t *)); apr_table_do(param_push, arr, t, key, NULL); return arr; } APREQ_DECLARE(const char *) apreq_params_as_string(apr_pool_t *p, const apr_table_t *t, const char *key, apreq_join_t mode) { apr_array_header_t *arr = apreq_params_as_array(p, t, key); apreq_param_t **elt = (apreq_param_t **)arr->elts; apreq_param_t **const end = elt + arr->nelts; if (arr->nelts == 0) return apr_pstrdup(p, ""); while (elt < end) { *(const apreq_value_t **)elt = &(**elt).v; ++elt; } return apreq_join(p, ", ", arr, mode); } static int upload_push(void *data, const char *key, const char *val) { apr_table_t *t = data; apreq_param_t *p = apreq_value_to_param(val); if (p->upload != NULL) apreq_value_table_add(&p->v, t); return 1; /* keep going */ } APREQ_DECLARE(const apr_table_t *) apreq_uploads(const apr_table_t *body, apr_pool_t *pool) { apr_table_t *t = apr_table_make(pool, APREQ_DEFAULT_NELTS); apr_table_do(upload_push, t, body, NULL); return t; } static int upload_set(void *data, const char *key, const char *val) { const apreq_param_t **q = data; apreq_param_t *p = apreq_value_to_param(val); if (p->upload != NULL) { *q = p; return 0; /* upload found, stop */ } else return 1; /* keep searching */ } APREQ_DECLARE(const apreq_param_t *) apreq_upload(const apr_table_t *body, const char *name) { apreq_param_t *param = NULL; apr_table_do(upload_set, ¶m, body, name, NULL); return param; } libapreq2-2.17/library/parser.c0000644000175000017500000002304114277401734016051 0ustar jortonjorton/* ** Licensed to the Apache Software Foundation (ASF) under one or more ** contributor license agreements. See the NOTICE file distributed with ** this work for additional information regarding copyright ownership. ** The ASF licenses this file to You under the Apache License, Version 2.0 ** (the "License"); you may not use this file except in compliance with ** the License. You may obtain a copy of the License at ** ** http://www.apache.org/licenses/LICENSE-2.0 ** ** Unless required by applicable law or agreed to in writing, software ** distributed under the License is distributed on an "AS IS" BASIS, ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. ** See the License for the specific language governing permissions and ** limitations under the License. */ #include "apreq_error.h" #include "apreq_parser.h" #include "apreq_util.h" #include "apr_strings.h" #include "apr_xml.h" #include "apr_hash.h" #define PARSER_STATUS_CHECK(PREFIX) do { \ if (ctx->status == PREFIX##_ERROR) \ return APREQ_ERROR_GENERAL; \ else if (ctx->status == PREFIX##_COMPLETE) \ return APR_SUCCESS; \ else if (bb == NULL) \ return APR_INCOMPLETE; \ } while (0); APREQ_DECLARE(apreq_parser_t *) apreq_parser_make(apr_pool_t *pool, apr_bucket_alloc_t *ba, const char *content_type, apreq_parser_function_t pfn, apr_size_t brigade_limit, const char *temp_dir, apreq_hook_t *hook, void *ctx) { apreq_parser_t *p = apr_palloc(pool, sizeof *p); p->content_type = content_type; p->parser = pfn; p->hook = hook; p->pool = pool; p->bucket_alloc = ba; p->brigade_limit = brigade_limit; p->temp_dir = temp_dir; p->ctx = ctx; return p; } APREQ_DECLARE(apreq_hook_t *) apreq_hook_make(apr_pool_t *pool, apreq_hook_function_t hook, apreq_hook_t *next, void *ctx) { apreq_hook_t *h = apr_palloc(pool, sizeof *h); h->hook = hook; h->next = next; h->pool = pool; h->ctx = ctx; return h; } /*XXX this may need to check the parser's state before modifying the hook list */ APREQ_DECLARE(apr_status_t) apreq_parser_add_hook(apreq_parser_t *p, apreq_hook_t *h) { apreq_hook_t *last = h; while (last->next) last = last->next; last->next = p->hook; p->hook = h; return APR_SUCCESS; } static int default_parsers_lock = 0; static apr_hash_t *default_parsers = NULL; static apr_pool_t *default_parser_pool = NULL; static apr_status_t apreq_parsers_cleanup(void *data) { default_parsers_lock = 0; default_parsers = NULL; default_parser_pool = NULL; return APR_SUCCESS; } APREQ_DECLARE(apr_status_t) apreq_pre_initialize(apr_pool_t *pool) { apr_status_t status; if (default_parser_pool != NULL) return APR_SUCCESS; if (default_parsers_lock) return APREQ_ERROR_GENERAL; status = apr_pool_create(&default_parser_pool, pool); if (status != APR_SUCCESS) return status; apr_pool_tag(default_parser_pool, "apreq_default_parser"); apr_pool_cleanup_register(default_parser_pool, NULL, apreq_parsers_cleanup, apr_pool_cleanup_null); default_parsers = apr_hash_make(default_parser_pool); apreq_register_parser("application/x-www-form-urlencoded", apreq_parse_urlencoded); apreq_register_parser("multipart/form-data", apreq_parse_multipart); apreq_register_parser("multipart/related", apreq_parse_multipart); return APR_SUCCESS; } APREQ_DECLARE(apr_status_t) apreq_post_initialize(apr_pool_t *pool) { (void)pool; if (default_parser_pool == NULL) return APREQ_ERROR_GENERAL; default_parsers_lock = 1; return APR_SUCCESS; } APREQ_DECLARE(apr_status_t) apreq_initialize(apr_pool_t *pool) { apr_status_t s = apreq_pre_initialize(pool); if (s != APR_SUCCESS) return s; return apreq_post_initialize(pool); } APREQ_DECLARE(apr_status_t) apreq_register_parser(const char *enctype, apreq_parser_function_t pfn) { apreq_parser_function_t *f = NULL; if (default_parsers == NULL) return APR_EINIT; if (enctype == NULL) return APR_EINVAL; if (default_parsers_lock) return APREQ_ERROR_GENERAL; if (pfn != NULL) { f = apr_palloc(default_parser_pool, sizeof *f); *f = pfn; } apr_hash_set(default_parsers, apr_pstrdup(default_parser_pool, enctype), APR_HASH_KEY_STRING, f); return APR_SUCCESS; } APREQ_DECLARE(apreq_parser_function_t)apreq_parser(const char *enctype) { apreq_parser_function_t *f; apr_size_t tlen = 0; if (enctype == NULL || default_parsers_lock == 0) return NULL; while(enctype[tlen] && enctype[tlen] != ';') ++tlen; f = apr_hash_get(default_parsers, enctype, tlen); if (f != NULL) return *f; else return NULL; } APREQ_DECLARE_HOOK(apreq_hook_disable_uploads) { return (bb == NULL) ? APR_SUCCESS : APREQ_ERROR_GENERAL; } APREQ_DECLARE_HOOK(apreq_hook_discard_brigade) { apr_status_t s = APR_SUCCESS; if (hook->next) s = apreq_hook_run(hook->next, param, bb); if (bb != NULL) apr_brigade_cleanup(bb); return s; } /* generic parser */ struct gen_ctx { apreq_param_t *param; enum { GEN_INCOMPLETE, GEN_COMPLETE, GEN_ERROR } status; }; APREQ_DECLARE_PARSER(apreq_parse_generic) { struct gen_ctx *ctx = parser->ctx; apr_pool_t *pool = parser->pool; apr_status_t s = APR_SUCCESS; apr_bucket *e = APR_BRIGADE_LAST(bb); unsigned saw_eos = 0; if (ctx == NULL) { parser->ctx = ctx = apr_palloc(pool, sizeof *ctx); ctx->status = GEN_INCOMPLETE; ctx->param = apreq_param_make(pool, "_dummy_", strlen("_dummy_"), "", 0); ctx->param->upload = apr_brigade_create(pool, parser->bucket_alloc); ctx->param->info = apr_table_make(pool, APREQ_DEFAULT_NELTS); } PARSER_STATUS_CHECK(GEN); while (e != APR_BRIGADE_SENTINEL(bb)) { if (APR_BUCKET_IS_EOS(e)) { saw_eos = 1; break; } e = APR_BUCKET_PREV(e); } if (parser->hook != NULL) { s = apreq_hook_run(parser->hook, ctx->param, bb); if (s != APR_SUCCESS) { ctx->status = GEN_ERROR; return s; } } apreq_brigade_setaside(bb, pool); s = apreq_brigade_concat(pool, parser->temp_dir, parser->brigade_limit, ctx->param->upload, bb); if (s != APR_SUCCESS) { ctx->status = GEN_ERROR; return s; } if (saw_eos) { ctx->status = GEN_COMPLETE; return APR_SUCCESS; } else return APR_INCOMPLETE; } struct xml_ctx { apr_xml_doc *doc; apr_xml_parser *xml_parser; enum { XML_INCOMPLETE, XML_COMPLETE, XML_ERROR } status; }; APREQ_DECLARE_HOOK(apreq_hook_apr_xml_parser) { apr_pool_t *pool = hook->pool; struct xml_ctx *ctx = hook->ctx; apr_status_t s = APR_SUCCESS; apr_bucket *e; if (ctx == NULL) { hook->ctx = ctx = apr_palloc(pool, sizeof *ctx); ctx->doc = NULL; ctx->xml_parser = apr_xml_parser_create(pool); ctx->status = XML_INCOMPLETE; } PARSER_STATUS_CHECK(XML); for (e = APR_BRIGADE_FIRST(bb); e != APR_BRIGADE_SENTINEL(bb); e = APR_BUCKET_NEXT(e)) { const char *data; apr_size_t dlen; if (APR_BUCKET_IS_EOS(e)) { s = apr_xml_parser_done(ctx->xml_parser, &ctx->doc); if (s == APR_SUCCESS) { ctx->status = XML_COMPLETE; if (hook->next) s = apreq_hook_run(hook->next, param, bb); } else { ctx->status = XML_ERROR; } return s; } else if (APR_BUCKET_IS_METADATA(e)) { continue; } s = apr_bucket_read(e, &data, &dlen, APR_BLOCK_READ); if (s != APR_SUCCESS) { ctx->status = XML_ERROR; return s; } s = apr_xml_parser_feed(ctx->xml_parser, data, dlen); if (s != APR_SUCCESS) { ctx->status = XML_ERROR; return s; } } if (hook->next) return apreq_hook_run(hook->next, param, bb); return APR_SUCCESS; } APREQ_DECLARE_HOOK(apreq_hook_find_param) { apreq_hook_find_param_ctx_t *ctx = hook->ctx; int is_final = (bb == NULL) || APR_BUCKET_IS_EOS(APR_BRIGADE_LAST(bb)); apr_status_t s = (hook->next == NULL) ? APR_SUCCESS : apreq_hook_run(hook->next, param, bb); if (is_final && s == APR_SUCCESS && ctx->param == NULL && strcasecmp(ctx->name, param->v.name) == 0) { ctx->param = param; ctx->prev->next = hook->next; } return s; } libapreq2-2.17/library/parser_header.c0000644000175000017500000003031314277401734017361 0ustar jortonjorton/* ** Licensed to the Apache Software Foundation (ASF) under one or more ** contributor license agreements. See the NOTICE file distributed with ** this work for additional information regarding copyright ownership. ** The ASF licenses this file to You under the Apache License, Version 2.0 ** (the "License"); you may not use this file except in compliance with ** the License. You may obtain a copy of the License at ** ** http://www.apache.org/licenses/LICENSE-2.0 ** ** Unless required by applicable law or agreed to in writing, software ** distributed under the License is distributed on an "AS IS" BASIS, ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. ** See the License for the specific language governing permissions and ** limitations under the License. */ #include #include "apreq_parser.h" #include "apreq_error.h" #include "apreq_util.h" #include "apr_lib.h" /* for apr_iscntrl() & co */ #define PARSER_STATUS_CHECK(PREFIX) do { \ if (ctx->status == PREFIX##_ERROR) \ return APREQ_ERROR_GENERAL; \ else if (ctx->status == PREFIX##_COMPLETE) \ return APR_SUCCESS; \ else if (bb == NULL) \ return APR_INCOMPLETE; \ } while (0); struct hdr_ctx { apr_bucket_brigade *bb; apr_size_t nlen; apr_size_t glen; apr_size_t vlen; enum { HDR_NAME, HDR_GAP, HDR_VALUE, HDR_NEWLINE, HDR_ENDLINE, HDR_FOLDLINE, HDR_LASTLINE, HDR_COMPLETE, HDR_ERROR } status; }; /********************* header parsing utils ********************/ static apr_bucket *split_header_line(apr_bucket *e, apr_size_t *off, const char **data, apr_size_t *dlen) { if (*off > 1) { apr_bucket_split(e, *off - 1); e = APR_BUCKET_NEXT(e); *dlen -= *off - 1; *data += *off - 1; *off = 1; } return e; } static apr_status_t consume_header_line(apreq_param_t **p, apr_pool_t *pool, apr_bucket_brigade *bb, apr_size_t nlen, apr_size_t glen, apr_size_t vlen) { apreq_param_t *param; apreq_value_t *v; apr_bucket *e, *f; apr_status_t s; struct iovec vec[APREQ_DEFAULT_NELTS], *iov; apr_array_header_t arr; char *dest; const char *data; apr_size_t dlen; int i, eol = 0; param = apreq_param_make(pool, NULL, nlen, NULL, vlen); *(const apreq_value_t **)&v = ¶m->v; arr.pool = pool; arr.elt_size = sizeof(struct iovec); arr.nelts = 0; arr.nalloc = APREQ_DEFAULT_NELTS; arr.elts = (char *)vec; e = APR_BRIGADE_FIRST(bb); /* store name in a temporary iovec array */ do { apr_size_t len; assert(e != APR_BRIGADE_SENTINEL(bb)); iov = (struct iovec *)apr_array_push(&arr); s = apr_bucket_read(e, (const char **)&iov->iov_base, &len, APR_BLOCK_READ); if (s != APR_SUCCESS) return s; iov->iov_len = len; assert(nlen >= len); nlen -= len; e = APR_BUCKET_NEXT(e); } while (nlen > 0); /* skip gap */ do { assert(e != APR_BRIGADE_SENTINEL(bb)); s = apr_bucket_read(e, &data, &dlen, APR_BLOCK_READ); if (s != APR_SUCCESS) return s; assert(glen >= dlen); glen -= dlen; e = APR_BUCKET_NEXT(e); } while (glen > 0); /* copy value */ dest = v->data; do { apr_size_t off; assert(e != APR_BRIGADE_SENTINEL(bb)); s = apr_bucket_read(e, &data, &dlen, APR_BLOCK_READ); if (s != APR_SUCCESS) return s; for (off = 0; off < dlen; ++off) { const char ch = data[off]; if (ch == '\r' || ch == '\n') { /* Eat [CR]LF of continuation or end of line */ if (!vlen && ch == '\n') eol = 1; /* done */ continue; } assert(vlen > 0); *dest = ch; ++dest; --vlen; } e = APR_BUCKET_NEXT(e); } while (!eol); v->dlen = dest - v->data; *dest++ = 0; /* write name */ v->name = dest; for (i = 0; i < arr.nelts; ++i) { iov = &((struct iovec *)arr.elts)[i]; memcpy(dest, iov->iov_base, iov->iov_len); dest += iov->iov_len; ++iov; } v->nlen = dest - v->name; *dest = 0; while ((f = APR_BRIGADE_FIRST(bb)) != e) apr_bucket_delete(f); apreq_param_tainted_on(param); *p = param; return APR_SUCCESS; } #define IS_TOKEN_CHAR(c) (apr_isalnum(c) \ || ((c) && strchr("!#$%&'*+-.^_`|~", (c)))) APREQ_DECLARE_PARSER(apreq_parse_headers) { apr_pool_t *pool = parser->pool; apr_bucket *e; struct hdr_ctx *ctx; char ch; if (parser->ctx == NULL) { ctx = apr_pcalloc(pool, sizeof *ctx); ctx->bb = apr_brigade_create(pool, parser->bucket_alloc); parser->ctx = ctx; ctx->status = HDR_NAME; } else ctx = parser->ctx; PARSER_STATUS_CHECK(HDR); e = APR_BRIGADE_LAST(ctx->bb); APR_BRIGADE_CONCAT(ctx->bb, bb); /* parse the brigade for CRLF_CRLF-terminated header block, * each time starting from the front of the brigade. */ for (e = APR_BUCKET_NEXT(e); e != APR_BRIGADE_SENTINEL(ctx->bb); e = APR_BUCKET_NEXT(e)) { apr_size_t off = 0, dlen; const char *data; apr_status_t s; apreq_param_t *param = NULL; /* silences gcc-4.0 warning */ if (APR_BUCKET_IS_EOS(e)) { ctx->status = HDR_COMPLETE; APR_BRIGADE_CONCAT(bb, ctx->bb); return APR_SUCCESS; } s = apr_bucket_read(e, &data, &dlen, APR_BLOCK_READ); if ( s != APR_SUCCESS ) { ctx->status = HDR_ERROR; return s; } if (dlen == 0) continue; parse_hdr_bucket: /* gap nlen = 13 * vvv glen = 3 * Sample-Header: grape vlen = 5 * ^^^^^^^^^^^^^ ^^^^^ * name value */ switch (ctx->status) { case HDR_NAME: while (off < dlen) { ch = data[off++]; switch (ch) { case ':': if (!ctx->nlen) { ctx->status = HDR_ERROR; return APREQ_ERROR_BADHEADER; } e = split_header_line(e, &off, &data, &dlen); ++ctx->glen; ctx->status = HDR_GAP; goto parse_hdr_bucket; default: if (!IS_TOKEN_CHAR(ch)) { ctx->status = HDR_ERROR; return APREQ_ERROR_BADCHAR; } ++ctx->nlen; } } break; case HDR_GAP: while (off < dlen) { ch = data[off++]; switch (ch) { case ' ': case '\t': ++ctx->glen; break; case '\n': e = split_header_line(e, &off, &data, &dlen); ctx->status = HDR_NEWLINE; goto parse_hdr_bucket; case '\r': e = split_header_line(e, &off, &data, &dlen); ctx->status = HDR_ENDLINE; goto parse_hdr_bucket; default: if (apr_iscntrl(ch)) { ctx->status = HDR_ERROR; return APREQ_ERROR_BADCHAR; } e = split_header_line(e, &off, &data, &dlen); ++ctx->vlen; ctx->status = HDR_VALUE; goto parse_hdr_bucket; } } break; case HDR_VALUE: while (off < dlen) { ch = data[off++]; switch (ch) { case '\n': ctx->status = HDR_NEWLINE; goto parse_hdr_bucket; case '\r': ctx->status = HDR_ENDLINE; goto parse_hdr_bucket; default: if (apr_iscntrl(ch)) { ctx->status = HDR_ERROR; return APREQ_ERROR_BADCHAR; } ++ctx->vlen; } } break; case HDR_ENDLINE: case HDR_LASTLINE: if (off == dlen) break; if (data[off++] != '\n') { ctx->status = HDR_ERROR; return APREQ_ERROR_BADHEADER; } if (ctx->status == HDR_LASTLINE) { ctx->status = HDR_COMPLETE; goto parse_hdr_bucket; } /* fall thru */ ctx->status = HDR_NEWLINE; case HDR_NEWLINE: if (off == dlen) break; ch = data[off++]; switch (ch) { case ' ': case '\t': ++ctx->vlen; break; default: e = split_header_line(e, &off, &data, &dlen); /* consume from splitted brigade now */ s = consume_header_line(¶m, pool, ctx->bb, ctx->nlen, ctx->glen, ctx->vlen); if (parser->hook != NULL && s == APR_SUCCESS) s = apreq_hook_run(parser->hook, param, NULL); if (s != APR_SUCCESS) { ctx->status = HDR_ERROR; return s; } apreq_value_table_add(¶m->v, t); ctx->nlen = 0; ctx->vlen = 0; ctx->glen = 0; switch (ch) { case '\n': ctx->status = HDR_COMPLETE; break; case '\r': ctx->status = HDR_LASTLINE; break; default: if (!IS_TOKEN_CHAR(ch)) { ctx->status = HDR_ERROR; return APREQ_ERROR_BADCHAR; } ++ctx->nlen; ctx->status = HDR_NAME; break; } goto parse_hdr_bucket; } /* fall thru */ ctx->status = HDR_FOLDLINE; case HDR_FOLDLINE: while (off < dlen) { ch = data[off++]; switch (ch) { case ' ': case '\t': ++ctx->vlen; break; case '\n': ctx->status = HDR_NEWLINE; goto parse_hdr_bucket; case '\r': ctx->status = HDR_ENDLINE; goto parse_hdr_bucket; default: if (apr_iscntrl(ch)) { ctx->status = HDR_ERROR; return APREQ_ERROR_BADCHAR; } ctx->status = HDR_VALUE; ++ctx->vlen; goto parse_hdr_bucket; } } break; case HDR_COMPLETE: if (off < dlen) apr_bucket_split(e, off); e = APR_BUCKET_NEXT(e); do { apr_bucket *f = APR_BRIGADE_FIRST(ctx->bb); apr_bucket_delete(f); } while (e != APR_BRIGADE_FIRST(ctx->bb)); APR_BRIGADE_CONCAT(bb, ctx->bb); return APR_SUCCESS; default: assert(0); /* not reached */ } } apreq_brigade_setaside(ctx->bb,pool); return APR_INCOMPLETE; } libapreq2-2.17/library/parser_multipart.c0000644000175000017500000005427314277401734020165 0ustar jortonjorton/* ** Licensed to the Apache Software Foundation (ASF) under one or more ** contributor license agreements. See the NOTICE file distributed with ** this work for additional information regarding copyright ownership. ** The ASF licenses this file to You under the Apache License, Version 2.0 ** (the "License"); you may not use this file except in compliance with ** the License. You may obtain a copy of the License at ** ** http://www.apache.org/licenses/LICENSE-2.0 ** ** Unless required by applicable law or agreed to in writing, software ** distributed under the License is distributed on an "AS IS" BASIS, ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. ** See the License for the specific language governing permissions and ** limitations under the License. */ #include "apreq_parser.h" #include "apreq_error.h" #include "apreq_util.h" #include "apr_strings.h" #include "apr_strmatch.h" #ifndef CRLF #define CRLF "\015\012" #endif #define MIN(a, b) (((a) < (b)) ? (a) : (b)) #define PARSER_STATUS_CHECK(PREFIX) do { \ if (ctx->status == PREFIX##_ERROR) \ return APREQ_ERROR_GENERAL; \ else if (ctx->status == PREFIX##_COMPLETE) \ return APR_SUCCESS; \ else if (bb == NULL) \ return APR_INCOMPLETE; \ } while (0); /* maximum recursion level in the mfd parser */ #define MAX_LEVEL 8 struct mfd_ctx { apr_table_t *info; apr_bucket_brigade *in; apr_bucket_brigade *bb; apreq_parser_t *hdr_parser; apreq_parser_t *next_parser; const apr_strmatch_pattern *pattern; char *bdry; enum { MFD_INIT, MFD_NEXTLINE, MFD_HEADER, MFD_POST_HEADER, MFD_PARAM, MFD_UPLOAD, MFD_MIXED, MFD_COMPLETE, MFD_ERROR } status; apr_bucket *eos; const char *param_name; apreq_param_t *upload; unsigned level; }; /********************* multipart/form-data *********************/ APR_INLINE static apr_status_t brigade_start_string(apr_bucket_brigade *bb, const char *start_string) { apr_bucket *e; apr_size_t slen = strlen(start_string); for (e = APR_BRIGADE_FIRST(bb); e != APR_BRIGADE_SENTINEL(bb); e = APR_BUCKET_NEXT(e)) { const char *buf; apr_status_t s, bytes_to_check; apr_size_t blen; if (slen == 0) return APR_SUCCESS; if (APR_BUCKET_IS_EOS(e)) return APR_EOF; s = apr_bucket_read(e, &buf, &blen, APR_BLOCK_READ); if (s != APR_SUCCESS) return s; if (blen == 0) continue; bytes_to_check = MIN(slen,blen); if (strncmp(buf,start_string,bytes_to_check) != 0) return APREQ_ERROR_GENERAL; slen -= bytes_to_check; start_string += bytes_to_check; } /* slen > 0, so brigade isn't large enough yet */ return APR_INCOMPLETE; } static apr_status_t split_on_bdry(apr_bucket_brigade *out, apr_bucket_brigade *in, const apr_strmatch_pattern *pattern, const char *bdry) { apr_bucket *e = APR_BRIGADE_FIRST(in); apr_size_t blen = strlen(bdry), off = 0; while ( e != APR_BRIGADE_SENTINEL(in) ) { apr_ssize_t idx; apr_size_t len; const char *buf; apr_status_t s; if (APR_BUCKET_IS_EOS(e)) return APR_EOF; s = apr_bucket_read(e, &buf, &len, APR_BLOCK_READ); if (s != APR_SUCCESS) return s; if (len == 0) { apr_bucket *f = e; e = APR_BUCKET_NEXT(e); apr_bucket_delete(f); continue; } look_for_boundary_up_front: if (strncmp(bdry + off, buf, MIN(len, blen - off)) == 0) { if ( len >= blen - off ) { /* complete match */ if (len > blen - off) apr_bucket_split(e, blen - off); e = APR_BUCKET_NEXT(e); do { apr_bucket *f = APR_BRIGADE_FIRST(in); apr_bucket_delete(f); } while (APR_BRIGADE_FIRST(in) != e); return APR_SUCCESS; } /* partial match */ off += len; e = APR_BUCKET_NEXT(e); continue; } else if (off > 0) { /* prior (partial) strncmp failed, * so we can move previous buckets across * and retest buf against the full bdry. */ /* give hints to GCC by making the brigade volatile, otherwise the * loop below will end up being endless. See: * https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=193740 */ apr_bucket_brigade * volatile in_v = in; do { apr_bucket *f = APR_BRIGADE_FIRST(in_v); APR_BUCKET_REMOVE(f); APR_BRIGADE_INSERT_TAIL(out, f); } while (e != APR_BRIGADE_FIRST(in_v)); off = 0; goto look_for_boundary_up_front; } if (pattern != NULL && len >= blen) { const char *match = apr_strmatch(pattern, buf, len); if (match != NULL) idx = match - buf; else { idx = apreq_index(buf + len-blen, blen, bdry, blen, APREQ_MATCH_PARTIAL); if (idx >= 0) idx += len-blen; } } else idx = apreq_index(buf, len, bdry, blen, APREQ_MATCH_PARTIAL); /* Theoretically idx should never be 0 here, because we * already tested the front of the brigade for a potential match. * However, it doesn't hurt to allow for the possibility, * since this will just start the whole loop over again. */ if (idx >= 0) apr_bucket_split(e, idx); APR_BUCKET_REMOVE(e); APR_BRIGADE_INSERT_TAIL(out, e); e = APR_BRIGADE_FIRST(in); } return APR_INCOMPLETE; } static struct mfd_ctx * create_multipart_context(const char *content_type, apr_pool_t *pool, apr_bucket_alloc_t *ba, apr_size_t brigade_limit, const char *temp_dir, unsigned level) { apr_status_t s; apr_size_t blen; struct mfd_ctx *ctx; const char *attr; char *buf; attr = (content_type) ? strchr(content_type, ';') : NULL; if (!attr) return NULL; /* missing semicolon */ ctx = apr_palloc(pool, sizeof *ctx); attr++; blen = strlen(attr) + 1; buf = apr_palloc(pool, 4 + blen); buf += 4; memcpy(buf, attr, blen); s = apreq_header_attribute(buf, "boundary", 8, (const char **)&ctx->bdry, &blen); if (s != APR_SUCCESS || !blen) return NULL; /* missing or empty boundary */ ctx->bdry[blen] = 0; *--ctx->bdry = '-'; *--ctx->bdry = '-'; *--ctx->bdry = '\n'; *--ctx->bdry = '\r'; ctx->status = MFD_INIT; ctx->pattern = apr_strmatch_precompile(pool, ctx->bdry, 1); ctx->hdr_parser = apreq_parser_make(pool, ba, "", apreq_parse_headers, brigade_limit, temp_dir, NULL, NULL); ctx->info = NULL; ctx->bb = apr_brigade_create(pool, ba); ctx->in = apr_brigade_create(pool, ba); ctx->eos = apr_bucket_eos_create(ba); ctx->next_parser = NULL; ctx->param_name = NULL; ctx->upload = NULL; ctx->level = level; return ctx; } APREQ_DECLARE_PARSER(apreq_parse_multipart) { apr_pool_t *pool = parser->pool; apr_bucket_alloc_t *ba = parser->bucket_alloc; struct mfd_ctx *ctx = parser->ctx; apr_status_t s; if (ctx == NULL) { ctx = create_multipart_context(parser->content_type, pool, ba, parser->brigade_limit, parser->temp_dir, 1); if (ctx == NULL) return APREQ_ERROR_GENERAL; parser->ctx = ctx; } PARSER_STATUS_CHECK(MFD); APR_BRIGADE_CONCAT(ctx->in, bb); mfd_parse_brigade: switch (ctx->status) { case MFD_INIT: { s = split_on_bdry(ctx->bb, ctx->in, NULL, ctx->bdry + 2); if (s != APR_SUCCESS) { apreq_brigade_setaside(ctx->in, pool); apreq_brigade_setaside(ctx->bb, pool); return s; } ctx->status = MFD_NEXTLINE; /* Be polite and return any preamble text to the caller. */ APR_BRIGADE_CONCAT(bb, ctx->bb); } /* fall through */ case MFD_NEXTLINE: { s = split_on_bdry(ctx->bb, ctx->in, NULL, CRLF); if (s == APR_EOF) { ctx->status = MFD_COMPLETE; return APR_SUCCESS; } if (s != APR_SUCCESS) { apreq_brigade_setaside(ctx->in, pool); apreq_brigade_setaside(ctx->bb, pool); return s; } if (!APR_BRIGADE_EMPTY(ctx->bb)) { char *line; apr_size_t len; apr_brigade_pflatten(ctx->bb, &line, &len, pool); if (len >= 2 && strncmp(line, "--", 2) == 0) { APR_BRIGADE_CONCAT(bb, ctx->in); ctx->status = MFD_COMPLETE; return APR_SUCCESS; } apr_brigade_cleanup(ctx->bb); } ctx->status = MFD_HEADER; ctx->info = NULL; } /* fall through */ case MFD_HEADER: { if (ctx->info == NULL) { ctx->info = apr_table_make(pool, APREQ_DEFAULT_NELTS); /* flush out header parser internal structs for reuse */ ctx->hdr_parser->ctx = NULL; } s = apreq_parser_run(ctx->hdr_parser, ctx->info, ctx->in); switch (s) { case APR_SUCCESS: ctx->status = MFD_POST_HEADER; break; case APR_INCOMPLETE: apreq_brigade_setaside(ctx->in, pool); return APR_INCOMPLETE; default: ctx->status = MFD_ERROR; return s; } } /* fall through */ case MFD_POST_HEADER: { /* Must handle special case of missing CRLF (mainly * coming from empty file uploads). See RFC2065 S5.1.1: * * body-part = MIME-part-header [CRLF *OCTET] * * So the CRLF we already matched in MFD_HEADER may have been * part of the boundary string! Both Konqueror (v??) and * Mozilla-0.97 are known to emit such blocks. * * Here we first check for this condition with * brigade_start_string, and prefix the brigade with * an additional CRLF bucket if necessary. */ const char *cd, *ct, *name, *filename; apr_size_t nlen, flen; apr_bucket *e; switch (brigade_start_string(ctx->in, ctx->bdry + 2)) { case APR_INCOMPLETE: apreq_brigade_setaside(ctx->in, pool); return APR_INCOMPLETE; case APR_SUCCESS: /* part has no body- return CRLF to front */ e = apr_bucket_immortal_create(CRLF, 2, ctx->bb->bucket_alloc); APR_BRIGADE_INSERT_HEAD(ctx->in, e); break; default: ; /* has body, ok */ } cd = apr_table_get(ctx->info, "Content-Disposition"); /* First check to see if must descend into a new multipart * block. If we do, create a new parser and pass control * to it. */ ct = apr_table_get(ctx->info, "Content-Type"); if (ct != NULL && strncmp(ct, "multipart/", 10) == 0) { struct mfd_ctx *next_ctx; if (ctx->level >= MAX_LEVEL) { ctx->status = MFD_ERROR; goto mfd_parse_brigade; } next_ctx = create_multipart_context(ct, pool, ba, parser->brigade_limit, parser->temp_dir, ctx->level + 1); if (next_ctx == NULL) { ctx->status = MFD_ERROR; goto mfd_parse_brigade; } if (cd != NULL) { s = apreq_header_attribute(cd, "name", 4, &name, &nlen); if (s == APR_SUCCESS && nlen) { next_ctx->param_name = apr_pstrmemdup(pool, name, nlen); } else if (s != APREQ_ERROR_NOATTR) { ctx->status = MFD_ERROR; goto mfd_parse_brigade; } } if (!next_ctx->param_name) { const char *cid = apr_table_get(ctx->info, "Content-ID"); if (cid) { next_ctx->param_name = apr_pstrdup(pool, cid); } else { next_ctx->param_name = ""; } } ctx->next_parser = apreq_parser_make(pool, ba, ct, apreq_parse_multipart, parser->brigade_limit, parser->temp_dir, parser->hook, next_ctx); ctx->status = MFD_MIXED; goto mfd_parse_brigade; } /* Look for a normal form-data part. */ if (cd != NULL && strncmp(cd, "form-data", 9) == 0) { s = apreq_header_attribute(cd, "name", 4, &name, &nlen); if (s != APR_SUCCESS || !nlen) { ctx->status = MFD_ERROR; goto mfd_parse_brigade; } s = apreq_header_attribute(cd, "filename", 8, &filename, &flen); if (s == APR_SUCCESS && flen) { apreq_param_t *param; param = apreq_param_make(pool, name, nlen, filename, flen); apreq_param_tainted_on(param); param->info = ctx->info; param->upload = apr_brigade_create(pool, ctx->bb->bucket_alloc); ctx->upload = param; ctx->status = MFD_UPLOAD; goto mfd_parse_brigade; } else if (s != APREQ_ERROR_NOATTR) { ctx->status = MFD_ERROR; goto mfd_parse_brigade; } else { ctx->param_name = apr_pstrmemdup(pool, name, nlen); ctx->status = MFD_PARAM; /* fall thru */ } } /* else check for a file part in a multipart section */ else if (cd != NULL && strncmp(cd, "file", 4) == 0) { apreq_param_t *param; s = apreq_header_attribute(cd, "filename", 8, &filename, &flen); if (s != APR_SUCCESS || !flen || !ctx->param_name) { ctx->status = MFD_ERROR; goto mfd_parse_brigade; } name = ctx->param_name; nlen = strlen(name); param = apreq_param_make(pool, name, nlen, filename, flen); apreq_param_tainted_on(param); param->info = ctx->info; param->upload = apr_brigade_create(pool, ctx->bb->bucket_alloc); ctx->upload = param; ctx->status = MFD_UPLOAD; goto mfd_parse_brigade; } /* otherwise look for Content-ID in multipart/mixed case */ else { const char *cid = apr_table_get(ctx->info, "Content-ID"); apreq_param_t *param; if (cid != NULL) { name = cid; nlen = strlen(name); } else { name = ""; nlen = 0; } filename = ""; flen = 0; param = apreq_param_make(pool, name, nlen, filename, flen); apreq_param_tainted_on(param); param->info = ctx->info; param->upload = apr_brigade_create(pool, ctx->bb->bucket_alloc); ctx->upload = param; ctx->status = MFD_UPLOAD; goto mfd_parse_brigade; } } /* fall through */ case MFD_PARAM: { apreq_param_t *param; apreq_value_t *v; apr_size_t len; apr_off_t off; s = split_on_bdry(ctx->bb, ctx->in, ctx->pattern, ctx->bdry); switch (s) { case APR_INCOMPLETE: apreq_brigade_setaside(ctx->in, pool); apreq_brigade_setaside(ctx->bb, pool); return s; case APR_SUCCESS: s = apr_brigade_length(ctx->bb, 1, &off); if (s != APR_SUCCESS) { ctx->status = MFD_ERROR; return s; } len = off; param = apreq_param_make(pool, ctx->param_name, strlen(ctx->param_name), NULL, len); apreq_param_tainted_on(param); param->info = ctx->info; *(const apreq_value_t **)&v = ¶m->v; apr_brigade_flatten(ctx->bb, v->data, &len); v->data[len] = 0; if (parser->hook != NULL) { s = apreq_hook_run(parser->hook, param, NULL); if (s != APR_SUCCESS) { ctx->status = MFD_ERROR; return s; } } apreq_param_charset_set(param, apreq_charset_divine(v->data, len)); apreq_value_table_add(v, t); ctx->status = MFD_NEXTLINE; ctx->param_name = NULL; apr_brigade_cleanup(ctx->bb); goto mfd_parse_brigade; default: ctx->status = MFD_ERROR; return s; } } break; /* not reached */ case MFD_UPLOAD: { apreq_param_t *param = ctx->upload; s = split_on_bdry(ctx->bb, ctx->in, ctx->pattern, ctx->bdry); switch (s) { case APR_INCOMPLETE: if (parser->hook != NULL) { s = apreq_hook_run(parser->hook, param, ctx->bb); if (s != APR_SUCCESS) { ctx->status = MFD_ERROR; return s; } } apreq_brigade_setaside(ctx->bb, pool); apreq_brigade_setaside(ctx->in, pool); s = apreq_brigade_concat(pool, parser->temp_dir, parser->brigade_limit, param->upload, ctx->bb); return (s == APR_SUCCESS) ? APR_INCOMPLETE : s; case APR_SUCCESS: if (parser->hook != NULL) { APR_BRIGADE_INSERT_TAIL(ctx->bb, ctx->eos); s = apreq_hook_run(parser->hook, param, ctx->bb); APR_BUCKET_REMOVE(ctx->eos); if (s != APR_SUCCESS) { ctx->status = MFD_ERROR; return s; } } apreq_value_table_add(¶m->v, t); apreq_brigade_setaside(ctx->bb, pool); s = apreq_brigade_concat(pool, parser->temp_dir, parser->brigade_limit, param->upload, ctx->bb); if (s != APR_SUCCESS) return s; ctx->status = MFD_NEXTLINE; goto mfd_parse_brigade; default: ctx->status = MFD_ERROR; return s; } } break; /* not reached */ case MFD_MIXED: { s = apreq_parser_run(ctx->next_parser, t, ctx->in); switch (s) { case APR_SUCCESS: ctx->status = MFD_INIT; ctx->param_name = NULL; goto mfd_parse_brigade; case APR_INCOMPLETE: APR_BRIGADE_CONCAT(bb, ctx->in); return APR_INCOMPLETE; default: ctx->status = MFD_ERROR; return s; } } break; /* not reached */ default: return APREQ_ERROR_GENERAL; } return APR_INCOMPLETE; } libapreq2-2.17/library/parser_urlencoded.c0000644000175000017500000001670214277401734020263 0ustar jortonjorton/* ** Licensed to the Apache Software Foundation (ASF) under one or more ** contributor license agreements. See the NOTICE file distributed with ** this work for additional information regarding copyright ownership. ** The ASF licenses this file to You under the Apache License, Version 2.0 ** (the "License"); you may not use this file except in compliance with ** the License. You may obtain a copy of the License at ** ** http://www.apache.org/licenses/LICENSE-2.0 ** ** Unless required by applicable law or agreed to in writing, software ** distributed under the License is distributed on an "AS IS" BASIS, ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. ** See the License for the specific language governing permissions and ** limitations under the License. */ #include "apreq_parser.h" #include "apreq_util.h" #include "apreq_error.h" #define PARSER_STATUS_CHECK(PREFIX) do { \ if (ctx->status == PREFIX##_ERROR) \ return APREQ_ERROR_GENERAL; \ else if (ctx->status == PREFIX##_COMPLETE) \ return APR_SUCCESS; \ else if (bb == NULL) \ return APR_INCOMPLETE; \ } while (0); struct url_ctx { apr_bucket_brigade *bb; apr_size_t nlen; apr_size_t vlen; enum { URL_NAME, URL_VALUE, URL_COMPLETE, URL_ERROR } status; }; /******************** application/x-www-form-urlencoded ********************/ static apr_status_t split_urlword(apreq_param_t **p, apr_pool_t *pool, apr_bucket_brigade *bb, apr_size_t nlen, apr_size_t vlen) { apreq_param_t *param; apreq_value_t *v; apr_bucket *e, *f; apr_status_t s; struct iovec vec[APREQ_DEFAULT_NELTS]; apr_array_header_t arr; apr_size_t mark; apreq_charset_t charset; if (nlen == 0) return APR_EBADARG; param = apreq_param_make(pool, NULL, nlen, NULL, vlen); *(const apreq_value_t **)&v = ¶m->v; arr.pool = pool; arr.elt_size = sizeof(struct iovec); arr.nelts = 0; arr.nalloc = APREQ_DEFAULT_NELTS; arr.elts = (char *)vec; ++nlen, ++vlen; e = APR_BRIGADE_FIRST(bb); while (!APR_BUCKET_IS_EOS(e)) { struct iovec *iov = apr_array_push(&arr); apr_size_t len; s = apr_bucket_read(e, (const char **)&iov->iov_base, &len, APR_BLOCK_READ); if (s != APR_SUCCESS) return s; iov->iov_len = len; nlen -= len; e = APR_BUCKET_NEXT(e); if (nlen == 0) { iov->iov_len--; break; } } mark = arr.nelts; while (!APR_BUCKET_IS_EOS(e)) { struct iovec *iov = apr_array_push(&arr); apr_size_t len; s = apr_bucket_read(e, (const char **)&iov->iov_base, &len, APR_BLOCK_READ); if (s != APR_SUCCESS) return s; iov->iov_len = len; vlen -= len; e = APR_BUCKET_NEXT(e); if (vlen == 0) { iov->iov_len--; break; } } s = apreq_decodev(v->data, &vlen, (struct iovec *)arr.elts + mark, arr.nelts - mark); if (s != APR_SUCCESS) return s; charset = apreq_charset_divine(v->data, vlen); v->name = v->data + vlen + 1; v->dlen = vlen; s = apreq_decodev(v->name, &nlen, (struct iovec *)arr.elts, mark); if (s != APR_SUCCESS) return s; switch (apreq_charset_divine(v->name, nlen)) { case APREQ_CHARSET_UTF8: if (charset == APREQ_CHARSET_ASCII) charset = APREQ_CHARSET_UTF8; case APREQ_CHARSET_ASCII: break; case APREQ_CHARSET_LATIN1: if (charset != APREQ_CHARSET_CP1252) charset = APREQ_CHARSET_LATIN1; break; case APREQ_CHARSET_CP1252: charset = APREQ_CHARSET_CP1252; } v->nlen = nlen; while ((f = APR_BRIGADE_FIRST(bb)) != e) apr_bucket_delete(f); apreq_param_tainted_on(param); apreq_param_charset_set(param, charset); *p = param; return APR_SUCCESS; } APREQ_DECLARE_PARSER(apreq_parse_urlencoded) { apr_pool_t *pool = parser->pool; apr_bucket *e; struct url_ctx *ctx; if (parser->ctx == NULL) { ctx = apr_pcalloc(pool, sizeof *ctx); ctx->bb = apr_brigade_create(pool, parser->bucket_alloc); parser->ctx = ctx; ctx->status = URL_NAME; } else ctx = parser->ctx; PARSER_STATUS_CHECK(URL); e = APR_BRIGADE_LAST(ctx->bb); APR_BRIGADE_CONCAT(ctx->bb, bb); parse_url_brigade: for (e = APR_BUCKET_NEXT(e); e != APR_BRIGADE_SENTINEL(ctx->bb); e = APR_BUCKET_NEXT(e)) { apreq_param_t *param; apr_size_t off = 0, dlen; const char *data; apr_status_t s; if (APR_BUCKET_IS_EOS(e)) { if (ctx->status == URL_NAME) { s = APR_SUCCESS; } else { s = split_urlword(¶m, pool, ctx->bb, ctx->nlen, ctx->vlen); if (parser->hook != NULL && s == APR_SUCCESS) s = apreq_hook_run(parser->hook, param, NULL); if (s == APR_SUCCESS) { apreq_value_table_add(¶m->v, t); ctx->status = URL_COMPLETE; } else { ctx->status = URL_ERROR; } } APR_BRIGADE_CONCAT(bb, ctx->bb); return s; } s = apr_bucket_read(e, &data, &dlen, APR_BLOCK_READ); if ( s != APR_SUCCESS ) { ctx->status = URL_ERROR; return s; } parse_url_bucket: switch (ctx->status) { case URL_NAME: while (off < dlen) { switch (data[off++]) { case '=': apr_bucket_split(e, off); dlen -= off; data += off; off = 0; e = APR_BUCKET_NEXT(e); ctx->status = URL_VALUE; goto parse_url_bucket; default: ++ctx->nlen; } } break; case URL_VALUE: while (off < dlen) { switch (data[off++]) { case '&': case ';': apr_bucket_split(e, off); s = split_urlword(¶m, pool, ctx->bb, ctx->nlen, ctx->vlen); if (parser->hook != NULL && s == APR_SUCCESS) s = apreq_hook_run(parser->hook, param, NULL); if (s != APR_SUCCESS) { ctx->status = URL_ERROR; return s; } apreq_value_table_add(¶m->v, t); ctx->status = URL_NAME; ctx->nlen = 0; ctx->vlen = 0; e = APR_BRIGADE_SENTINEL(ctx->bb); goto parse_url_brigade; default: ++ctx->vlen; } } break; default: ; /* not reached */ } } apreq_brigade_setaside(ctx->bb, pool); return APR_INCOMPLETE; } libapreq2-2.17/library/t/at.c0000644000175000017500000002171514277401734015432 0ustar jortonjorton/* ** Licensed to the Apache Software Foundation (ASF) under one or more ** contributor license agreements. See the NOTICE file distributed with ** this work for additional information regarding copyright ownership. ** The ASF licenses this file to You under the Apache License, Version 2.0 ** (the "License"); you may not use this file except in compliance with ** the License. You may obtain a copy of the License at ** ** http://www.apache.org/licenses/LICENSE-2.0 ** ** Unless required by applicable law or agreed to in writing, software ** distributed under the License is distributed on an "AS IS" BASIS, ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. ** See the License for the specific language governing permissions and ** limitations under the License. */ #include "at.h" #include #include #define AT_SUCCESS 0 #define AT_EGENERAL 14 #define min(a, b) ((a < b) ? a : b) int at_begin(at_t *t, int total) { char buf[32]; at_snprintf(buf, 32, "1..%d", total); return at_report(t, buf); } static int test_cleanup(void *data) { at_t *t = data; if (t->current < t->plan) return at_report(t, "Bail out!"); else return at_report(t, "END"); } void at_end(at_t *t) { test_cleanup(t); free(t); } int at_comment(at_t *t, const char *fmt, va_list vp) { int s; char buf[256], *b = buf + 2; char *end; int rv; rv = at_vsnprintf(b, 250, fmt, vp); if (rv <= 0) return EINVAL; end = b + min(rv, 250); buf[0] = '#'; buf[1] = ' '; if (rv >= 250) { end[-1] = '.'; *end++ = '.'; *end++ = '.'; *end++ = '\n'; *end = 0; } else if (end[-1] != '\n') { *end++ = '\n'; *end = 0; } b = buf; while (1) { char *eol; eol = strchr(b + 2, '\n'); *eol = 0; s = at_report(t, b); if (s != AT_SUCCESS || eol == end - 1) break; b = eol - 1; b[0] = '#'; b[1] = ' '; } return s; } void at_ok(at_t *t, int is_ok, const char *label, const char *file, int line) { char format[] = "not ok %d - %s # %s (%s:%d) test %d in %s"; char *end = format + 10; char *fmt = is_ok ? format + 4 : format; char buf[256]; const char *comment = NULL; int rv, is_fatal = 0, is_skip = 0, is_todo = 0; t->current++; if (*t->fatal == t->current) { t->fatal++; is_fatal = 1; } if (*t->skip == t->current) { t->skip++; is_skip = 1; } if (*t->todo == t->current) { t->todo++; is_todo = 1; } if (AT_FLAG_TODO(t->flags)) is_todo = 1; if (AT_FLAG_CONCISE(t->flags)) format[9] = '\0'; else if (is_ok && ! is_todo && !AT_FLAG_TRACE(t->flags)) format[14] = '\0'; else if (is_fatal && ! is_ok) comment = "fatal"; else comment = is_todo ? "todo" : is_skip ? "skip" : "at"; rv = at_snprintf(buf, 256, fmt, t->current + t->prior, label, comment, file, line, t->current, t->name); if (rv <= 0) exit(-1); end = buf + min(rv, 250); if (rv >= 250) { *end++ = '.'; *end++ = '.'; *end++ = '.'; *end = '\0'; } if (memchr(buf, '\n', rv) != NULL || at_report(t, buf) != AT_SUCCESS) exit(-1); if (!is_ok && is_fatal) { while (t->current++ < t->plan) { at_snprintf(buf, 256, "not ok %d # skipped: aborting test %s", t->prior + t->current, t->name); at_report(t, buf); } longjmp(*t->abort, 0); } } struct at_report_file { at_report_t module; FILE *file; }; static int at_report_file_write(at_report_t *ctx, const char *msg) { struct at_report_file *r = (struct at_report_file *)ctx; FILE *f = r->file; size_t len = strlen(msg); size_t bytes_written; int status; bytes_written = fwrite(msg, sizeof(char), len, f); if (bytes_written != len) return errno; status = putc('\n', f); if (status == EOF) return errno; return fflush(f); } at_report_t *at_report_file_make(FILE *f) { struct at_report_file *r = malloc(sizeof *r); r->module.func = at_report_file_write; r->file = f; return &r->module; } void at_report_file_cleanup(at_report_t *r) { free(r); } struct at_report_local { at_report_t module; at_t *t; at_report_t *saved_report; const int *saved_fatal; const int *saved_skip; const int *saved_todo; int dummy_fatal; char *file; int line; int passed; }; static int report_local_cleanup(void *data) { struct at_report_local *q = data; dAT = q->t; char label[32]; at_snprintf(label, 32, "collected %d passing tests", q->passed); AT->report = q->saved_report; AT->fatal = q->saved_fatal; AT->skip = q->saved_skip; AT->todo = q->saved_todo; at_ok(q->t, 1, label, q->file, q->line); free(q->file); free(q); return AT_SUCCESS; } void at_report_delocalize(at_t *AT) { report_local_cleanup(AT->report); } static int at_report_local_write(at_report_t *ctx, const char *msg) { char buf[256]; struct at_report_local *q = (struct at_report_local *)ctx; dAT = q->t; if (strncmp(msg, "not ok", 6) == 0) { q->saved_report->func(q->saved_report, msg); report_local_cleanup(q); while (AT->current++ < AT->plan) { at_snprintf(buf, 256, "not ok %d # skipped: aborting test %s", AT->prior + AT->current, AT->name); at_report(AT, buf); } longjmp(*AT->abort, 0); } else if (strncmp(msg, "ok", 2) == 0) { AT->current--; q->passed++; } return AT_SUCCESS; } void at_report_local(at_t *AT, const char *file, int line) { struct at_report_local *q = malloc(sizeof *q); size_t len; q->module.func = at_report_local_write; q->t = AT; q->saved_report = AT->report; q->saved_fatal = AT->fatal; q->saved_skip = AT->skip; q->saved_todo = AT->todo; q->dummy_fatal = 0; q->line = line; q->passed = 0; len = strlen(file) + 1; q->file = (char*)malloc(len); memcpy(q->file, file, len); AT->fatal = AT->skip = AT->todo = &q->dummy_fatal; AT->report = &q->module; if (*q->saved_fatal == AT->current + 1) q->saved_fatal++; } at_t *at_create(unsigned char flags, at_report_t *report) { at_t *t = calloc(sizeof *t, 1); t->flags = flags; t->report = report; return t; } static int* at_list(const char *spec) { int prev, current = 0, count = 0, idx = 0, *elts; const char *start = spec; do { while (*spec && !isdigit((unsigned char)*spec)) ++spec; prev = current; current = (int)strtol(spec, (char **)(void *)&spec, 10); ++count; } while (prev <= current); elts = malloc(++count * sizeof *elts); spec = start; current = 0; do { while (*spec && !isdigit((unsigned char)*spec)) ++spec; prev = current; current = (int)strtol(spec, (char **)(void *)&spec, 10); elts[idx++] = current; } while (prev <= current); elts[idx] = 0; /* sentinel */ return elts; } #define at_free_lists do { if (flist) free((void *)flist); \ if (slist) free((void *)slist); \ if (tlist) free((void *)tlist); } while (0) int at_run(at_t *AT, const at_test_t *test) { int dummy = 0; const int *flist = NULL, *slist = NULL, *tlist = NULL; jmp_buf j; AT->current = 0; AT->prior += AT->plan; AT->name = test->name; AT->plan = test->plan; if (test->fatals) flist = AT->fatal = at_list(test->fatals); else AT->fatal = &dummy; if (test->skips) slist = AT->skip = at_list(test->skips); else AT->skip = &dummy; if (test->todos) tlist = AT->todo = at_list(test->todos); else AT->todo = &dummy; AT->abort = &j; if (setjmp(j) == 0) { test->func(AT, test->ctx); at_free_lists; return AT_SUCCESS; } at_free_lists; AT->abort = NULL; return AT_EGENERAL; } int at_snprintf(char *buf, int size, const char *format, ...) { va_list args; int status; va_start(args, format); status = at_vsnprintf(buf, size, format, args); va_end(args); return status; } int at_vsnprintf(char *buf, int size, const char *format, va_list args) { #ifdef _MSC_VER int status = _vsnprintf(buf, size, format, args); /* Make Microsoft's _vsnprintf behave like C99 vsnprintf on overflow: * NULL-terminate, and return the number of chars printed minus one. */ if (status < 0) { if (errno != EINVAL) { status = size - 1; buf[status] = '\0'; } } return status; #else return vsnprintf(buf, size, format, args); #endif /* _MSC_VER */ } libapreq2-2.17/library/t/at.h0000644000175000017500000002556714277401734015450 0ustar jortonjorton/* ** Licensed to the Apache Software Foundation (ASF) under one or more ** contributor license agreements. See the NOTICE file distributed with ** this work for additional information regarding copyright ownership. ** The ASF licenses this file to You under the Apache License, Version 2.0 ** (the "License"); you may not use this file except in compliance with ** the License. You may obtain a copy of the License at ** ** http://www.apache.org/licenses/LICENSE-2.0 ** ** Unless required by applicable law or agreed to in writing, software ** distributed under the License is distributed on an "AS IS" BASIS, ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. ** See the License for the specific language governing permissions and ** limitations under the License. */ /* at.h: TAP-compliant C utilities for the Apache::Test framework. */ #ifndef AT_H #define AT_H #include #include #include #include #include typedef struct at_t at_t; typedef struct at_report_t at_report_t; typedef int (*at_report_function_t)(at_report_t *r, const char *msg); typedef void(*at_test_function_t)(at_t *t, void *ctx); typedef struct at_test_t at_test_t; struct at_test_t { const char *name; at_test_function_t func; int plan; void *ctx; const char *fatals; const char *skips; const char *todos; }; struct at_report_t { at_report_function_t func; }; /* Private, portable snprintf implementation. */ int at_snprintf(char *buf, int size, const char *format, ...); int at_vsnprintf(char *buf, int size, const char *format, va_list args); /* We only need one at_t struct per test suite, so lets call it *AT. * The mnemonic we follow is that (for lowercase foo) "AT_foo(bar)" * should be syntactically equivalent to "at_foo(AT, bar)". * * Terminology: test == an at_test_t, * check == an assertion which produces TAP. */ #define dAT at_t *AT struct at_t { int current; /* current check for this test */ int prior; /* total # of checks prior to this test */ const char *name; /* name of current test */ int plan; /* total # of checks in this test */ const int *fatal; /* list of unrecoverables */ const int *skip; /* list of ignorabe assertions */ const int *todo; /* list of expected failures */ at_report_t *report ;/* handles the results of each check */ unsigned char flags; /* verbosity: concise, trace, debug, etc. */ jmp_buf *abort; /* where fatals go to die */ }; #if defined(WIN32) #define AT_INLINE __inline #elif !defined(__GNUC__) || __GNUC__ < 2 || \ (__GNUC__ == 2 && __GNUC_MINOR__ < 7) ||\ defined(NEXT) || defined(NETWARE) #define AT_INLINE #else #define AT_INLINE __inline__ #endif static AT_INLINE int at_report(at_t *t, const char *msg) { at_report_t *r = t->report; return r->func(r, msg); } #define AT_report(msg) at_report(AT, msg) /* The core assertion checker; the rest just wind up invoking this one. */ void at_ok(at_t *t, int is_ok, const char *label, const char *file, int line); #define AT_ok(is_ok, label) at_ok(AT, is_ok, label, __FILE__, __LINE__) at_t *at_create(unsigned char flags, at_report_t *report); int at_begin(at_t *t, int total); #define AT_begin(total) at_begin(AT, total) int at_run(at_t *AT, const at_test_t *test); #define AT_run(test) at_run(AT, test) void at_end(at_t *t); #define AT_end() at_end(AT) #define AT_FLAG_TODO(f) ((f) & 8) #define AT_FLAG_TODO_ON(f) ((f) |= 8) #define AT_FLAG_TODO_OFF(f) ((f) &= ~8) #define AT_FLAG_DEBUG(f) ((f) & 4) #define AT_FLAG_DEBUG_ON(f) ((f) |= 4) #define AT_FLAG_DEBUG_OFF(f) ((f) &= ~4) #define AT_FLAG_TRACE(f) ((f) & 2) #define AT_FLAG_TRACE_ON(f) ((f) |= 2) #define AT_FLAG_TRACE_OFF(f) ((f) &= ~2) #define AT_FLAG_CONCISE(f) ((f) & 1) #define AT_FLAG_CONCISE_ON(f) ((f) |= 1) #define AT_FLAG_CONCISE_OFF(f) ((f) &= ~1) #define AT_todo_on() AT_FLAG_TODO_ON(AT->flags) #define AT_todo_off() AT_FLAG_TODO_OFF(AT->flags) #define AT_debug_on() AT_FLAG_DEBUG_ON(AT->flags) #define AT_debug_off() AT_FLAG_DEBUG_OFF(AT->flags) #define AT_trace_on() AT_FLAG_TRACE_ON(AT->flags) #define AT_trace_off() AT_FLAG_TRACE_OFF(AT->flags) #define AT_concise_on() AT_FLAG_CONCISE_ON(AT->flags) #define AT_concise_off() AT_FLAG_CONCISE_OFF(AT->flags) /* Additional reporting utils. These emit TAP comments, and are not "checks". */ int at_comment(at_t *t, const char *fmt, va_list vp); static AT_INLINE void at_debug(at_t *t, const char *fmt, ...) { va_list vp; va_start(vp, fmt); if (AT_FLAG_DEBUG(t->flags)) at_comment(t, fmt, vp); va_end(vp); } static AT_INLINE void at_trace(at_t *t, const char *fmt, ...) { va_list vp; va_start(vp, fmt); if (AT_FLAG_TRACE(t->flags)) at_comment(t, fmt, vp); va_end(vp); } /* These are "checks". */ static AT_INLINE void at_check(at_t *t, int is_ok, const char *label, const char *file, int line, const char *fmt, ...) { va_list vp; va_start(vp, fmt); if (AT_FLAG_TRACE(t->flags)) { char format[32] = "testing: %s (%s:%d)"; at_trace(t, format, label, file, line); if (fmt != NULL) { char *f; at_snprintf(format, sizeof format, " format: %s", fmt); at_trace(t, "%s", format); memcpy(format, " left:", 8); f = format + strlen(format); at_snprintf(f, sizeof format - strlen(format), "\n right: %s", fmt); at_comment(t, format, vp); } } else if (AT_FLAG_DEBUG(t->flags) && !is_ok) { char format[32] = "testing: %s (%s:%d)"; at_debug(t, format, label, file, line); if (fmt != NULL) { char *f; at_snprintf(format, sizeof format, " format: %s", fmt); at_debug(t, "%s", format); memcpy(format, " left:", 8); f = format + strlen(format); at_snprintf(f, sizeof format - strlen(format), "\n right: %s", fmt); at_comment(t, format, vp); } } va_end(vp); at_ok(t, is_ok, label, file, line); } #define AT_mem_ne(a, b, n) do { \ unsigned sz = n; \ const void *left = a, *right = b; \ char fmt[] = ", as %u-byte struct pointers"; \ char buf[256] = #a " != " #b; \ const unsigned blen = sizeof(#a " != " #b); \ at_snprintf(buf + blen - 1, 256 - blen, fmt, sz); \ at_snprintf(fmt, sizeof(fmt), "%%.%us", sz); \ at_check(AT, memcmp(left, right, sz), buf, __FILE__, __LINE__, \ fmt, left, right); \ } while (0) \ #define AT_mem_eq(a, b, n) do { \ unsigned sz = n; \ const void *left = a, *right = b; \ char fmt[] = ", as %u-byte struct pointers"; \ char buf[256] = #a " == " #b; \ const unsigned blen = sizeof(#a " == " #b); \ at_snprintf(buf + blen - 1, 256 - blen , fmt, sz); \ at_snprintf(fmt, sizeof(fmt), "%%.%us", sz); \ at_check(AT, !memcmp(left, right, sz), buf, __FILE__, __LINE__, \ fmt, left, right); \ } while (0) #define AT_str_eq(a, b) do { \ const char *left = a, *right = b; \ at_check(AT,!strcmp(left, right), #a " == " #b ", as strings", \ __FILE__, __LINE__, "%s", left, right); \ } while (0) #define AT_str_ne(a, b) do { \ const char *left = a, *right = b; \ at_check(AT, strcmp(left, right), #a " != " #b ", as strings", \ __FILE__, __LINE__, "%s", left, right); \ } while (0) #define AT_ptr_eq(a, b) do { \ const void *left = a, *right = b; \ at_check(AT, left == right, #a " == " #b ", as pointers", \ __FILE__, __LINE__, "%p", left, right); \ } while (0) #define AT_ptr_ne(a, b) do { \ const void *left = a, *right = b; \ at_check(AT, left != right, #a " != " #b ", as pointers", \ __FILE__, __LINE__, "%p", left, right); \ } while (0) #define AT_int_eq(a, b) do { \ const int left = a, right = b; \ at_check(AT, left == right, #a " == " #b ", as integers", \ __FILE__, __LINE__, "%d", left, right); \ } while (0) #define AT_int_ne(a, b) do { \ const int left = a, right = b; \ at_check(AT, left != right, #a " != " #b ", as integers", \ __FILE__, __LINE__, "%d", left, right); \ } while (0) #define AT_is_null(a) AT_ptr_eq(a, NULL) #define AT_not_null(a) AT_ptr_ne(a, NULL) /* XXX these two macro checks evaluate a & b more than once, but the * upshot is that they don't care too much about their types. */ #define AT_EQ(a, b, fmt) at_check(AT, ((a) == (b)), #a " == " #b,\ __FILE__, __LINE__, fmt, a, b) #define AT_NE(a, b, fmt) at_check(AT, ((a) != (b)), #a " != " #b,\ __FILE__, __LINE__, fmt, a, b) static AT_INLINE void at_skip(at_t *t, int n, const char *reason, const char *file, int line) { char buf[256]; while (n-- > 0) { ++t->current; at_snprintf(buf, 256, "ok %d - %s (%d) #skipped: %s (%s:%d)", t->current + t->prior, t->name, t->current, reason, file, line); at_report(t, buf); } } #define AT_skip(n, reason) at_skip(AT, n, reason, __FILE__, __LINE__) /* Report utilities. */ at_report_t *at_report_file_make(FILE *f); AT_INLINE static at_report_t *at_report_stdout_make(void) { return at_report_file_make(stdout); } void at_report_file_cleanup(at_report_t *r); #define at_report_stdout_cleanup(r) at_report_file_cleanup(r) void at_report_local(at_t *AT, const char *file, int line); #define AT_localize() at_report_local(AT, __FILE__, __LINE__) void at_report_delocalize(at_t *AT); #define AT_delocalize() at_report_delocalize(AT) #endif /* AT_H */ libapreq2-2.17/library/t/cookie.c0000644000175000017500000002156014277401734016275 0ustar jortonjorton/* ** Licensed to the Apache Software Foundation (ASF) under one or more ** contributor license agreements. See the NOTICE file distributed with ** this work for additional information regarding copyright ownership. ** The ASF licenses this file to You under the Apache License, Version 2.0 ** (the "License"); you may not use this file except in compliance with ** the License. You may obtain a copy of the License at ** ** http://www.apache.org/licenses/LICENSE-2.0 ** ** Unless required by applicable law or agreed to in writing, software ** distributed under the License is distributed on an "AS IS" BASIS, ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. ** See the License for the specific language governing permissions and ** limitations under the License. */ #include "apr_strings.h" #include "apreq_cookie.h" #include "apreq_error.h" #include "apreq_module.h" #include "apreq_util.h" #include "at.h" static const char nscookies[] = "a=1; foo=bar; fl=left; fr=right;bad; " "ns=foo=1&bar=2,frl=right-left; " "flr=left-right; fll=left-left; " "good_one=1;=;bad"; static const char rfccookies[] = "$Version=1; first=a;$domain=quux;second=be," "$Version=1;third=cie"; static const char wpcookies[] = "wordpressuser_c580712eb86cad2660b3601ac" "04202b2=admin; wordpresspass_c580712eb8" "6cad2660b3601ac04202b2=7ebeeed42ef50720" "940f5b8db2f9db49; rs_session=59ae9b8b50" "3e3af7d17b97e7f77f7ea5; dbx-postmeta=gr" "abit=0-,1-,2-,3-,4-,5-,6-&advancedstuff" "=0-,1+,2-"; static const char cgcookies1[] = "UID=MTj9S8CoAzMAAFEq21YAAAAG|c85a9e59db" "92b261408eb7539ff7f949b92c7d58; $Versio" "n=0;SID=MTj9S8CoAzMAAFEq21YAAAAG|c85a9e" "59db92b261408eb7539ff7f949b92c7d58;$Dom" "ain=www.xxxx.com;$Path=/"; static const char cgcookies2[] = "UID=Gh9VxX8AAAIAAHP7h6AAAAAC|2e809a9cc9" "9c2dca778c385ebdefc5cb86c95dc3; SID=Gh9" "VxX8AAAIAAHP7h6AAAAAC|2e809a9cc99c2dca7" "78c385ebdefc5cb86c95dc3; $Version=1"; static const char cgcookies3[] = "UID=hCijN8CoAzMAAGVDO2QAAAAF|50299f0793" "43fd6146257c105b1370f2da78246a; SID=hCi" "jN8CoAzMAAGVDO2QAAAAF|50299f079343fd614" "6257c105b1370f2da78246a; $Path=\"/\"; $" "Domain=\"www.xxxx.com\""; static const char cgcookies4[] = "SID=66XUEH8AAAIAAFmLLRkAAAAV|2a48c4ae2e" "9fb8355e75192db211f0779bdce244; UID=66X" "UEH8AAAIAAFmLLRkAAAAV|2a48c4ae2e9fb8355" "e75192db211f0779bdce244; __utma=1441491" "62.4479471199095321000.1234471650.12344" "71650.1234471650.1; __utmb=144149162.24" ".10.1234471650; __utmc=144149162; __utm" "z=\"144149162.1234471650.1.1.utmcsr=szu" "kaj.xxxx.pl|utmccn=(referral)|utmcmd=re" "ferral|utmcct=/internet/0,0.html\""; static apr_table_t *jar, *jar2, *jar3, *jar4, *jar5, *jar6, *jar7; static apr_pool_t *p; static void jar_make(dAT, void *ctx) { jar = apr_table_make(p, APREQ_DEFAULT_NELTS); AT_not_null(jar); AT_int_eq(apreq_parse_cookie_header(p, jar, nscookies), APREQ_ERROR_NOTOKEN); jar2 = apr_table_make(p, APREQ_DEFAULT_NELTS); AT_not_null(jar2); AT_int_eq(apreq_parse_cookie_header(p, jar2, rfccookies), APR_SUCCESS); jar3 = apr_table_make(p, APREQ_DEFAULT_NELTS); AT_not_null(jar3); AT_int_eq(apreq_parse_cookie_header(p, jar3, wpcookies), APREQ_ERROR_NOTOKEN); jar4 = apr_table_make(p, APREQ_DEFAULT_NELTS); AT_not_null(jar4); AT_int_eq(apreq_parse_cookie_header(p, jar4, cgcookies1), APREQ_ERROR_MISMATCH); jar5 = apr_table_make(p, APREQ_DEFAULT_NELTS); AT_not_null(jar5); AT_int_eq(apreq_parse_cookie_header(p, jar5, cgcookies2), APREQ_ERROR_MISMATCH); jar6 = apr_table_make(p, APREQ_DEFAULT_NELTS); AT_not_null(jar6); AT_int_eq(apreq_parse_cookie_header(p, jar6, cgcookies3), APREQ_ERROR_MISMATCH); jar7 = apr_table_make(p, APREQ_DEFAULT_NELTS); AT_not_null(jar7); AT_int_eq(apreq_parse_cookie_header(p, jar7, cgcookies4), APR_SUCCESS); } static void jar_get_rfc(dAT, void *ctx) { const char *val; AT_not_null(val = apr_table_get(jar2, "first")); AT_str_eq(val, "a"); AT_not_null(val = apr_table_get(jar2, "second")); AT_str_eq(val, "be"); AT_not_null(val = apr_table_get(jar2, "third")); AT_str_eq(val, "cie"); } static void jar_get_ns(dAT, void *ctx) { AT_str_eq(apr_table_get(jar, "a"), "1"); /* ignore wacky cookies that don't have an '=' sign */ AT_is_null(apr_table_get(jar, "bad")); /* accept wacky cookies that contain multiple '=' */ AT_str_eq(apr_table_get(jar, "ns"), "foo=1&bar=2"); AT_str_eq(apr_table_get(jar,"foo"), "bar"); AT_str_eq(apr_table_get(jar,"fl"), "left"); AT_str_eq(apr_table_get(jar,"fr"), "right"); AT_str_eq(apr_table_get(jar,"frl"), "right-left"); AT_str_eq(apr_table_get(jar,"flr"), "left-right"); AT_str_eq(apr_table_get(jar,"fll"), "left-left"); AT_is_null(apr_table_get(jar,"")); } static void netscape_cookie(dAT, void *ctx) { char expires[APR_RFC822_DATE_LEN]; char *val; apreq_cookie_t *c; *(const char **)&val = apr_table_get(jar, "foo"); AT_not_null(val); c = apreq_value_to_cookie(val); AT_str_eq(c->v.data, "bar"); AT_int_eq(apreq_cookie_version(c), 0); AT_str_eq(apreq_cookie_as_string(c, p), "foo=bar"); c->domain = apr_pstrdup(p, "example.com"); AT_str_eq(apreq_cookie_as_string(c, p), "foo=bar; domain=example.com"); c->path = apr_pstrdup(p, "/quux"); AT_str_eq(apreq_cookie_as_string(c, p), "foo=bar; path=/quux; domain=example.com"); apreq_cookie_expires(c, "+1y"); apr_rfc822_date(expires, apr_time_now() + apr_time_from_sec(apreq_atoi64t("+1y"))); expires[7] = '-'; expires[11] = '-'; val = apr_pstrcat(p, "foo=bar; path=/quux; domain=example.com; expires=", expires, NULL); AT_str_eq(apreq_cookie_as_string(c, p), val); } static void rfc_cookie(dAT, void *ctx) { apreq_cookie_t *c = apreq_cookie_make(p,"rfc",3,"out",3); const char *expected; long expires; AT_str_eq(c->v.data, "out"); apreq_cookie_version_set(c, 1); AT_int_eq(apreq_cookie_version(c), 1); AT_str_eq(apreq_cookie_as_string(c,p),"rfc=out; Version=1"); c->domain = apr_pstrdup(p, "example.com"); #ifndef WIN32 AT_str_eq(apreq_cookie_as_string(c,p), "rfc=out; Version=1; domain=\"example.com\""); c->path = apr_pstrdup(p, "/quux"); AT_str_eq(apreq_cookie_as_string(c,p), "rfc=out; Version=1; path=\"/quux\"; domain=\"example.com\""); apreq_cookie_expires(c, "+3m"); expires = apreq_atoi64t("+3m"); expected = apr_psprintf(p, "rfc=out; Version=1; path=\"/quux\"; " "domain=\"example.com\"; max-age=%ld", expires); AT_str_eq(apreq_cookie_as_string(c,p), expected); #else expected = "rfc=out; Version=1; domain=\"example.com\""; AT_str_eq(apreq_cookie_as_string(c,p), expected); c->path = apr_pstrdup(p, "/quux"); expected = "rfc=out; Version=1; path=\"/quux\"; domain=\"example.com\""; AT_str_eq(apreq_cookie_as_string(c,p), expected); apreq_cookie_expires(c, "+3m"); expires = apreq_atoi64t("+3m"); expected = apr_psprintf(p, "rfc=out; Version=1; path=\"/quux\"; " "domain=\"example.com\"; max-age=%ld", expires); AT_str_eq(apreq_cookie_as_string(c,p), expected); #endif } #define dT(func, plan) #func, func, plan, NULL int main(int argc, char *argv[]) { unsigned i, plan = 0; dAT; at_test_t test_list [] = { { dT(jar_make, 14) }, { dT(jar_get_rfc, 6), "1 3 5" }, { dT(jar_get_ns, 10) }, { dT(netscape_cookie, 7) }, { dT(rfc_cookie, 6) }, }; apr_initialize(); atexit(apr_terminate); apr_pool_create(&p, NULL); AT = at_create(0, at_report_stdout_make()); AT_trace_on(); for (i = 0; i < sizeof(test_list) / sizeof(at_test_t); ++i) plan += test_list[i].plan; AT_begin(plan); for (i = 0; i < sizeof(test_list) / sizeof(at_test_t); ++i) AT_run(&test_list[i]); AT_end(); return 0; } libapreq2-2.17/library/t/error.c0000644000175000017500000000530314277401734016152 0ustar jortonjorton/* ** Licensed to the Apache Software Foundation (ASF) under one or more ** contributor license agreements. See the NOTICE file distributed with ** this work for additional information regarding copyright ownership. ** The ASF licenses this file to You under the Apache License, Version 2.0 ** (the "License"); you may not use this file except in compliance with ** the License. You may obtain a copy of the License at ** ** http://www.apache.org/licenses/LICENSE-2.0 ** ** Unless required by applicable law or agreed to in writing, software ** distributed under the License is distributed on an "AS IS" BASIS, ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. ** See the License for the specific language governing permissions and ** limitations under the License. */ #include "apr_strings.h" #include "apreq_error.h" #include "at.h" static void test_strerror(dAT, void *ctx) { char buf[256], *str; str = apreq_strerror(APREQ_ERROR_GENERAL, buf, sizeof buf); AT_ptr_eq(str, buf); AT_str_eq(str, "Internal apreq error"); str = apreq_strerror(APREQ_ERROR_TAINTED, buf, sizeof buf); AT_str_eq(str, "Attempt to perform unsafe action with tainted data"); str = apreq_strerror(APREQ_ERROR_BADSEQ, buf, sizeof buf); AT_str_eq(str, "Invalid byte sequence"); str = apreq_strerror(APREQ_ERROR_NODATA, buf, sizeof buf); AT_str_eq(str, "Missing input data"); str = apreq_strerror(APREQ_ERROR_GENERAL+99, buf, sizeof buf); AT_str_eq(str, "Error string not yet specified by apreq"); /* Test some common APR status codes also */ str = apreq_strerror(APR_EINIT, buf, sizeof buf); AT_str_eq(str, "There is no error, this value signifies an initialized " "error code"); str = apreq_strerror(APR_INCOMPLETE, buf, sizeof buf); AT_str_eq(str, "Partial results are valid but processing is incomplete"); str = apreq_strerror(APR_EOF, buf, sizeof buf); AT_str_eq(str, "End of file found"); str = apreq_strerror(APR_ENOTIMPL, buf, sizeof buf); AT_str_eq(str, "This function has not been implemented on this platform"); } #define dT(func, plan) #func, func, plan, NULL int main(int argc, char *argv[]) { unsigned i, plan = 0; apr_pool_t *p; dAT; at_test_t test_list [] = { { dT(test_strerror, 10), "1" } }; apr_initialize(); atexit(apr_terminate); apr_pool_create(&p, NULL); AT = at_create(0, at_report_stdout_make()); for (i = 0; i < sizeof(test_list) / sizeof(at_test_t); ++i) plan += test_list[i].plan; AT_begin(plan); for (i = 0; i < sizeof(test_list) / sizeof(at_test_t); ++i) AT_run(&test_list[i]); AT_end(); return 0; } libapreq2-2.17/library/t/Makefile.am0000644000175000017500000000110114277401734016701 0ustar jortonjortonAM_CPPFLAGS = @APR_INCLUDES@ AM_LDFLAGS = `@APREQ_CONFIG@ --link-libtool --libs` @APR_LTFLAGS@ noinst_LIBRARIES = libapache_test.a libapache_test_a_SOURCES = at.h at.c check_PROGRAMS = version cookie params parsers error util LDADD = libapache_test.a check_SCRIPTS = version.t cookie.t params.t parsers.t error.t util.t TESTS = $(check_SCRIPTS) TESTS_ENVIRONMENT = @PERL@ -MTest::Harness -e 'runtests(@ARGV)' CLEANFILES = $(check_PROGRAMS) $(check_SCRIPTS) %.t: % echo "#!perl" > $@ echo "exec './$*'" >> $@ test: $(check_SCRIPTS) $(TESTS_ENVIRONMENT) $(check_SCRIPTS) libapreq2-2.17/library/t/Makefile.in0000644000175000017500000011142714277402427016727 0ustar jortonjorton# 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@ 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@ check_PROGRAMS = version$(EXEEXT) cookie$(EXEEXT) params$(EXEEXT) \ parsers$(EXEEXT) error$(EXEEXT) util$(EXEEXT) subdir = library/t ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/include/apreq_config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = LIBRARIES = $(noinst_LIBRARIES) ARFLAGS = cru AM_V_AR = $(am__v_AR_@AM_V@) am__v_AR_ = $(am__v_AR_@AM_DEFAULT_V@) am__v_AR_0 = @echo " AR " $@; am__v_AR_1 = libapache_test_a_AR = $(AR) $(ARFLAGS) libapache_test_a_LIBADD = am_libapache_test_a_OBJECTS = at.$(OBJEXT) libapache_test_a_OBJECTS = $(am_libapache_test_a_OBJECTS) cookie_SOURCES = cookie.c cookie_OBJECTS = cookie.$(OBJEXT) cookie_LDADD = $(LDADD) cookie_DEPENDENCIES = libapache_test.a 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 = error_SOURCES = error.c error_OBJECTS = error.$(OBJEXT) error_LDADD = $(LDADD) error_DEPENDENCIES = libapache_test.a params_SOURCES = params.c params_OBJECTS = params.$(OBJEXT) params_LDADD = $(LDADD) params_DEPENDENCIES = libapache_test.a parsers_SOURCES = parsers.c parsers_OBJECTS = parsers.$(OBJEXT) parsers_LDADD = $(LDADD) parsers_DEPENDENCIES = libapache_test.a util_SOURCES = util.c util_OBJECTS = util.$(OBJEXT) util_LDADD = $(LDADD) util_DEPENDENCIES = libapache_test.a version_SOURCES = version.c version_OBJECTS = version.$(OBJEXT) version_LDADD = $(LDADD) version_DEPENDENCIES = libapache_test.a 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)/include depcomp = $(SHELL) $(top_srcdir)/depcomp am__maybe_remake_depfiles = depfiles am__depfiles_remade = ./$(DEPDIR)/at.Po ./$(DEPDIR)/cookie.Po \ ./$(DEPDIR)/error.Po ./$(DEPDIR)/params.Po \ ./$(DEPDIR)/parsers.Po ./$(DEPDIR)/util.Po \ ./$(DEPDIR)/version.Po am__mv = mv -f 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 = $(libapache_test_a_SOURCES) cookie.c error.c params.c \ parsers.c util.c version.c DIST_SOURCES = $(libapache_test_a_SOURCES) cookie.c error.c params.c \ parsers.c util.c version.c am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac 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__tty_colors_dummy = \ mgn= red= grn= lgn= blu= brg= std=; \ am__color_tests=no am__tty_colors = { \ $(am__tty_colors_dummy); \ if test "X$(AM_COLOR_TESTS)" = Xno; then \ am__color_tests=no; \ elif test "X$(AM_COLOR_TESTS)" = Xalways; then \ am__color_tests=yes; \ elif test "X$$TERM" != Xdumb && { test -t 1; } 2>/dev/null; then \ am__color_tests=yes; \ fi; \ if test $$am__color_tests = yes; then \ red=''; \ grn=''; \ lgn=''; \ blu=''; \ mgn=''; \ brg=''; \ std=''; \ fi; \ } 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__recheck_rx = ^[ ]*:recheck:[ ]* am__global_test_result_rx = ^[ ]*:global-test-result:[ ]* am__copy_in_global_log_rx = ^[ ]*:copy-in-global-log:[ ]* # A command that, given a newline-separated list of test names on the # standard input, print the name of the tests that are to be re-run # upon "make recheck". am__list_recheck_tests = $(AWK) '{ \ recheck = 1; \ while ((rc = (getline line < ($$0 ".trs"))) != 0) \ { \ if (rc < 0) \ { \ if ((getline line2 < ($$0 ".log")) < 0) \ recheck = 0; \ break; \ } \ else if (line ~ /$(am__recheck_rx)[nN][Oo]/) \ { \ recheck = 0; \ break; \ } \ else if (line ~ /$(am__recheck_rx)[yY][eE][sS]/) \ { \ break; \ } \ }; \ if (recheck) \ print $$0; \ close ($$0 ".trs"); \ close ($$0 ".log"); \ }' # A command that, given a newline-separated list of test names on the # standard input, create the global log from their .trs and .log files. am__create_global_log = $(AWK) ' \ function fatal(msg) \ { \ print "fatal: making $@: " msg | "cat >&2"; \ exit 1; \ } \ function rst_section(header) \ { \ print header; \ len = length(header); \ for (i = 1; i <= len; i = i + 1) \ printf "="; \ printf "\n\n"; \ } \ { \ copy_in_global_log = 1; \ global_test_result = "RUN"; \ while ((rc = (getline line < ($$0 ".trs"))) != 0) \ { \ if (rc < 0) \ fatal("failed to read from " $$0 ".trs"); \ if (line ~ /$(am__global_test_result_rx)/) \ { \ sub("$(am__global_test_result_rx)", "", line); \ sub("[ ]*$$", "", line); \ global_test_result = line; \ } \ else if (line ~ /$(am__copy_in_global_log_rx)[nN][oO]/) \ copy_in_global_log = 0; \ }; \ if (copy_in_global_log) \ { \ rst_section(global_test_result ": " $$0); \ while ((rc = (getline line < ($$0 ".log"))) != 0) \ { \ if (rc < 0) \ fatal("failed to read from " $$0 ".log"); \ print line; \ }; \ printf "\n"; \ }; \ close ($$0 ".trs"); \ close ($$0 ".log"); \ }' # Restructured Text title. am__rst_title = { sed 's/.*/ & /;h;s/./=/g;p;x;s/ *$$//;p;g' && echo; } # Solaris 10 'make', and several other traditional 'make' implementations, # pass "-e" to $(SHELL), and POSIX 2008 even requires this. Work around it # by disabling -e (using the XSI extension "set +e") if it's set. am__sh_e_setup = case $$- in *e*) set +e;; esac # Default flags passed to test drivers. am__common_driver_flags = \ --color-tests "$$am__color_tests" \ --enable-hard-errors "$$am__enable_hard_errors" \ --expect-failure "$$am__expect_failure" # To be inserted before the command running the test. Creates the # directory for the log if needed. Stores in $dir the directory # containing $f, in $tst the test, in $log the log. Executes the # developer- defined test setup AM_TESTS_ENVIRONMENT (if any), and # passes TESTS_ENVIRONMENT. Set up options for the wrapper that # will run the test scripts (or their associated LOG_COMPILER, if # thy have one). am__check_pre = \ $(am__sh_e_setup); \ $(am__vpath_adj_setup) $(am__vpath_adj) \ $(am__tty_colors); \ srcdir=$(srcdir); export srcdir; \ case "$@" in \ */*) am__odir=`echo "./$@" | sed 's|/[^/]*$$||'`;; \ *) am__odir=.;; \ esac; \ test "x$$am__odir" = x"." || test -d "$$am__odir" \ || $(MKDIR_P) "$$am__odir" || exit $$?; \ if test -f "./$$f"; then dir=./; \ elif test -f "$$f"; then dir=; \ else dir="$(srcdir)/"; fi; \ tst=$$dir$$f; log='$@'; \ if test -n '$(DISABLE_HARD_ERRORS)'; then \ am__enable_hard_errors=no; \ else \ am__enable_hard_errors=yes; \ fi; \ case " $(XFAIL_TESTS) " in \ *[\ \ ]$$f[\ \ ]* | *[\ \ ]$$dir$$f[\ \ ]*) \ am__expect_failure=yes;; \ *) \ am__expect_failure=no;; \ esac; \ $(AM_TESTS_ENVIRONMENT) $(TESTS_ENVIRONMENT) # A shell command to get the names of the tests scripts with any registered # extension removed (i.e., equivalently, the names of the test logs, with # the '.log' extension removed). The result is saved in the shell variable # '$bases'. This honors runtime overriding of TESTS and TEST_LOGS. Sadly, # we cannot use something simpler, involving e.g., "$(TEST_LOGS:.log=)", # since that might cause problem with VPATH rewrites for suffix-less tests. # See also 'test-harness-vpath-rewrite.sh' and 'test-trs-basic.sh'. am__set_TESTS_bases = \ bases='$(TEST_LOGS)'; \ bases=`for i in $$bases; do echo $$i; done | sed 's/\.log$$//'`; \ bases=`echo $$bases` AM_TESTSUITE_SUMMARY_HEADER = ' for $(PACKAGE_STRING)' RECHECK_LOGS = $(TEST_LOGS) AM_RECURSIVE_TARGETS = check recheck TEST_SUITE_LOG = test-suite.log TEST_EXTENSIONS = @EXEEXT@ .test LOG_DRIVER = $(SHELL) $(top_srcdir)/test-driver LOG_COMPILE = $(LOG_COMPILER) $(AM_LOG_FLAGS) $(LOG_FLAGS) am__set_b = \ case '$@' in \ */*) \ case '$*' in \ */*) b='$*';; \ *) b=`echo '$@' | sed 's/\.log$$//'`; \ esac;; \ *) \ b='$*';; \ esac am__test_logs1 = $(TESTS:=.log) am__test_logs2 = $(am__test_logs1:@EXEEXT@.log=.log) TEST_LOGS = $(am__test_logs2:.test.log=.log) TEST_LOG_DRIVER = $(SHELL) $(top_srcdir)/test-driver TEST_LOG_COMPILE = $(TEST_LOG_COMPILER) $(AM_TEST_LOG_FLAGS) \ $(TEST_LOG_FLAGS) am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/depcomp \ $(top_srcdir)/test-driver DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ APACHE1_APXS = @APACHE1_APXS@ APACHE2_APXS = @APACHE2_APXS@ APACHE2_HTTPD = @APACHE2_HTTPD@ APACHE2_INCLUDES = @APACHE2_INCLUDES@ APACHE2_SRC = @APACHE2_SRC@ APREQ_CONFIG = @APREQ_CONFIG@ APREQ_DOTTED_VERSION = @APREQ_DOTTED_VERSION@ APREQ_LIBNAME = @APREQ_LIBNAME@ APREQ_LIBTOOL_VERSION = @APREQ_LIBTOOL_VERSION@ APREQ_MAJOR_VERSION = @APREQ_MAJOR_VERSION@ APR_CONFIG = @APR_CONFIG@ APR_DOC_VERSION = @APR_DOC_VERSION@ APR_INCLUDES = @APR_INCLUDES@ APR_LA = @APR_LA@ APR_LDFLAGS = @APR_LDFLAGS@ APR_LIBS = @APR_LIBS@ APR_LTFLAGS = @APR_LTFLAGS@ APU_CONFIG = @APU_CONFIG@ APU_DOC_VERSION = @APU_DOC_VERSION@ APU_LA = @APU_LA@ AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPPFLAGS = @CPPFLAGS@ CSCOPE = @CSCOPE@ CTAGS = @CTAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ 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@ GREP = @GREP@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ MM_OPTS = @MM_OPTS@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ 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@ PERL = @PERL@ PERL_OPTS = @PERL_OPTS@ RANLIB = @RANLIB@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ TAR = @TAR@ VERSION = @VERSION@ 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_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@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ 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@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ AM_CPPFLAGS = @APR_INCLUDES@ AM_LDFLAGS = `@APREQ_CONFIG@ --link-libtool --libs` @APR_LTFLAGS@ noinst_LIBRARIES = libapache_test.a libapache_test_a_SOURCES = at.h at.c LDADD = libapache_test.a check_SCRIPTS = version.t cookie.t params.t parsers.t error.t util.t TESTS = $(check_SCRIPTS) TESTS_ENVIRONMENT = @PERL@ -MTest::Harness -e 'runtests(@ARGV)' CLEANFILES = $(check_PROGRAMS) $(check_SCRIPTS) all: all-am .SUFFIXES: .SUFFIXES: .c .lo .log .o .obj .test .test$(EXEEXT) .trs $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(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 library/t/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu library/t/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: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): clean-checkPROGRAMS: @list='$(check_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-noinstLIBRARIES: -test -z "$(noinst_LIBRARIES)" || rm -f $(noinst_LIBRARIES) libapache_test.a: $(libapache_test_a_OBJECTS) $(libapache_test_a_DEPENDENCIES) $(EXTRA_libapache_test_a_DEPENDENCIES) $(AM_V_at)-rm -f libapache_test.a $(AM_V_AR)$(libapache_test_a_AR) libapache_test.a $(libapache_test_a_OBJECTS) $(libapache_test_a_LIBADD) $(AM_V_at)$(RANLIB) libapache_test.a cookie$(EXEEXT): $(cookie_OBJECTS) $(cookie_DEPENDENCIES) $(EXTRA_cookie_DEPENDENCIES) @rm -f cookie$(EXEEXT) $(AM_V_CCLD)$(LINK) $(cookie_OBJECTS) $(cookie_LDADD) $(LIBS) error$(EXEEXT): $(error_OBJECTS) $(error_DEPENDENCIES) $(EXTRA_error_DEPENDENCIES) @rm -f error$(EXEEXT) $(AM_V_CCLD)$(LINK) $(error_OBJECTS) $(error_LDADD) $(LIBS) params$(EXEEXT): $(params_OBJECTS) $(params_DEPENDENCIES) $(EXTRA_params_DEPENDENCIES) @rm -f params$(EXEEXT) $(AM_V_CCLD)$(LINK) $(params_OBJECTS) $(params_LDADD) $(LIBS) parsers$(EXEEXT): $(parsers_OBJECTS) $(parsers_DEPENDENCIES) $(EXTRA_parsers_DEPENDENCIES) @rm -f parsers$(EXEEXT) $(AM_V_CCLD)$(LINK) $(parsers_OBJECTS) $(parsers_LDADD) $(LIBS) util$(EXEEXT): $(util_OBJECTS) $(util_DEPENDENCIES) $(EXTRA_util_DEPENDENCIES) @rm -f util$(EXEEXT) $(AM_V_CCLD)$(LINK) $(util_OBJECTS) $(util_LDADD) $(LIBS) version$(EXEEXT): $(version_OBJECTS) $(version_DEPENDENCIES) $(EXTRA_version_DEPENDENCIES) @rm -f version$(EXEEXT) $(AM_V_CCLD)$(LINK) $(version_OBJECTS) $(version_LDADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/at.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cookie.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/error.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/params.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/parsers.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/util.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/version.Po@am__quote@ # am--include-marker $(am__depfiles_remade): @$(MKDIR_P) $(@D) @echo '# dummy' >$@-t && $(am__mv) $@-t $@ am--depfiles: $(am__depfiles_remade) .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $< .c.obj: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .c.lo: @am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $< 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 # Recover from deleted '.trs' file; this should ensure that # "rm -f foo.log; make foo.trs" re-run 'foo.test', and re-create # both 'foo.log' and 'foo.trs'. Break the recipe in two subshells # to avoid problems with "make -n". .log.trs: rm -f $< $@ $(MAKE) $(AM_MAKEFLAGS) $< # Leading 'am--fnord' is there to ensure the list of targets does not # expand to empty, as could happen e.g. with make check TESTS=''. am--fnord $(TEST_LOGS) $(TEST_LOGS:.log=.trs): $(am__force_recheck) am--force-recheck: @: $(TEST_SUITE_LOG): $(TEST_LOGS) @$(am__set_TESTS_bases); \ am__f_ok () { test -f "$$1" && test -r "$$1"; }; \ redo_bases=`for i in $$bases; do \ am__f_ok $$i.trs && am__f_ok $$i.log || echo $$i; \ done`; \ if test -n "$$redo_bases"; then \ redo_logs=`for i in $$redo_bases; do echo $$i.log; done`; \ redo_results=`for i in $$redo_bases; do echo $$i.trs; done`; \ if $(am__make_dryrun); then :; else \ rm -f $$redo_logs && rm -f $$redo_results || exit 1; \ fi; \ fi; \ if test -n "$$am__remaking_logs"; then \ echo "fatal: making $(TEST_SUITE_LOG): possible infinite" \ "recursion detected" >&2; \ elif test -n "$$redo_logs"; then \ am__remaking_logs=yes $(MAKE) $(AM_MAKEFLAGS) $$redo_logs; \ fi; \ if $(am__make_dryrun); then :; else \ st=0; \ errmsg="fatal: making $(TEST_SUITE_LOG): failed to create"; \ for i in $$redo_bases; do \ test -f $$i.trs && test -r $$i.trs \ || { echo "$$errmsg $$i.trs" >&2; st=1; }; \ test -f $$i.log && test -r $$i.log \ || { echo "$$errmsg $$i.log" >&2; st=1; }; \ done; \ test $$st -eq 0 || exit 1; \ fi @$(am__sh_e_setup); $(am__tty_colors); $(am__set_TESTS_bases); \ ws='[ ]'; \ results=`for b in $$bases; do echo $$b.trs; done`; \ test -n "$$results" || results=/dev/null; \ all=` grep "^$$ws*:test-result:" $$results | wc -l`; \ pass=` grep "^$$ws*:test-result:$$ws*PASS" $$results | wc -l`; \ fail=` grep "^$$ws*:test-result:$$ws*FAIL" $$results | wc -l`; \ skip=` grep "^$$ws*:test-result:$$ws*SKIP" $$results | wc -l`; \ xfail=`grep "^$$ws*:test-result:$$ws*XFAIL" $$results | wc -l`; \ xpass=`grep "^$$ws*:test-result:$$ws*XPASS" $$results | wc -l`; \ error=`grep "^$$ws*:test-result:$$ws*ERROR" $$results | wc -l`; \ if test `expr $$fail + $$xpass + $$error` -eq 0; then \ success=true; \ else \ success=false; \ fi; \ br='==================='; br=$$br$$br$$br$$br; \ result_count () \ { \ if test x"$$1" = x"--maybe-color"; then \ maybe_colorize=yes; \ elif test x"$$1" = x"--no-color"; then \ maybe_colorize=no; \ else \ echo "$@: invalid 'result_count' usage" >&2; exit 4; \ fi; \ shift; \ desc=$$1 count=$$2; \ if test $$maybe_colorize = yes && test $$count -gt 0; then \ color_start=$$3 color_end=$$std; \ else \ color_start= color_end=; \ fi; \ echo "$${color_start}# $$desc $$count$${color_end}"; \ }; \ create_testsuite_report () \ { \ result_count $$1 "TOTAL:" $$all "$$brg"; \ result_count $$1 "PASS: " $$pass "$$grn"; \ result_count $$1 "SKIP: " $$skip "$$blu"; \ result_count $$1 "XFAIL:" $$xfail "$$lgn"; \ result_count $$1 "FAIL: " $$fail "$$red"; \ result_count $$1 "XPASS:" $$xpass "$$red"; \ result_count $$1 "ERROR:" $$error "$$mgn"; \ }; \ { \ echo "$(PACKAGE_STRING): $(subdir)/$(TEST_SUITE_LOG)" | \ $(am__rst_title); \ create_testsuite_report --no-color; \ echo; \ echo ".. contents:: :depth: 2"; \ echo; \ for b in $$bases; do echo $$b; done \ | $(am__create_global_log); \ } >$(TEST_SUITE_LOG).tmp || exit 1; \ mv $(TEST_SUITE_LOG).tmp $(TEST_SUITE_LOG); \ if $$success; then \ col="$$grn"; \ else \ col="$$red"; \ test x"$$VERBOSE" = x || cat $(TEST_SUITE_LOG); \ fi; \ echo "$${col}$$br$${std}"; \ echo "$${col}Testsuite summary"$(AM_TESTSUITE_SUMMARY_HEADER)"$${std}"; \ echo "$${col}$$br$${std}"; \ create_testsuite_report --maybe-color; \ echo "$$col$$br$$std"; \ if $$success; then :; else \ echo "$${col}See $(subdir)/$(TEST_SUITE_LOG)$${std}"; \ if test -n "$(PACKAGE_BUGREPORT)"; then \ echo "$${col}Please report to $(PACKAGE_BUGREPORT)$${std}"; \ fi; \ echo "$$col$$br$$std"; \ fi; \ $$success || exit 1 check-TESTS: $(check_PROGRAMS) $(check_SCRIPTS) @list='$(RECHECK_LOGS)'; test -z "$$list" || rm -f $$list @list='$(RECHECK_LOGS:.log=.trs)'; test -z "$$list" || rm -f $$list @test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG) @set +e; $(am__set_TESTS_bases); \ log_list=`for i in $$bases; do echo $$i.log; done`; \ trs_list=`for i in $$bases; do echo $$i.trs; done`; \ log_list=`echo $$log_list`; trs_list=`echo $$trs_list`; \ $(MAKE) $(AM_MAKEFLAGS) $(TEST_SUITE_LOG) TEST_LOGS="$$log_list"; \ exit $$?; recheck: all $(check_PROGRAMS) $(check_SCRIPTS) @test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG) @set +e; $(am__set_TESTS_bases); \ bases=`for i in $$bases; do echo $$i; done \ | $(am__list_recheck_tests)` || exit 1; \ log_list=`for i in $$bases; do echo $$i.log; done`; \ log_list=`echo $$log_list`; \ $(MAKE) $(AM_MAKEFLAGS) $(TEST_SUITE_LOG) \ am__force_recheck=am--force-recheck \ TEST_LOGS="$$log_list"; \ exit $$? version.t.log: version.t @p='version.t'; \ b='version.t'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) cookie.t.log: cookie.t @p='cookie.t'; \ b='cookie.t'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) params.t.log: params.t @p='params.t'; \ b='params.t'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) parsers.t.log: parsers.t @p='parsers.t'; \ b='parsers.t'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) error.t.log: error.t @p='error.t'; \ b='error.t'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) util.t.log: util.t @p='util.t'; \ b='util.t'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) .test.log: @p='$<'; \ $(am__set_b); \ $(am__check_pre) $(TEST_LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_TEST_LOG_DRIVER_FLAGS) $(TEST_LOG_DRIVER_FLAGS) -- $(TEST_LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) @am__EXEEXT_TRUE@.test$(EXEEXT).log: @am__EXEEXT_TRUE@ @p='$<'; \ @am__EXEEXT_TRUE@ $(am__set_b); \ @am__EXEEXT_TRUE@ $(am__check_pre) $(TEST_LOG_DRIVER) --test-name "$$f" \ @am__EXEEXT_TRUE@ --log-file $$b.log --trs-file $$b.trs \ @am__EXEEXT_TRUE@ $(am__common_driver_flags) $(AM_TEST_LOG_DRIVER_FLAGS) $(TEST_LOG_DRIVER_FLAGS) -- $(TEST_LOG_COMPILE) \ @am__EXEEXT_TRUE@ "$$tst" $(AM_TESTS_FD_REDIRECT) 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 $(MAKE) $(AM_MAKEFLAGS) $(check_PROGRAMS) $(check_SCRIPTS) $(MAKE) $(AM_MAKEFLAGS) check-TESTS check: check-am all-am: Makefile $(LIBRARIES) 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: -test -z "$(TEST_LOGS)" || rm -f $(TEST_LOGS) -test -z "$(TEST_LOGS:.log=.trs)" || rm -f $(TEST_LOGS:.log=.trs) -test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG) clean-generic: -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES) 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-checkPROGRAMS clean-generic clean-libtool \ clean-noinstLIBRARIES mostlyclean-am distclean: distclean-am -rm -f ./$(DEPDIR)/at.Po -rm -f ./$(DEPDIR)/cookie.Po -rm -f ./$(DEPDIR)/error.Po -rm -f ./$(DEPDIR)/params.Po -rm -f ./$(DEPDIR)/parsers.Po -rm -f ./$(DEPDIR)/util.Po -rm -f ./$(DEPDIR)/version.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-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)/at.Po -rm -f ./$(DEPDIR)/cookie.Po -rm -f ./$(DEPDIR)/error.Po -rm -f ./$(DEPDIR)/params.Po -rm -f ./$(DEPDIR)/parsers.Po -rm -f ./$(DEPDIR)/util.Po -rm -f ./$(DEPDIR)/version.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: .MAKE: check-am install-am install-strip .PHONY: CTAGS GTAGS TAGS all all-am am--depfiles check check-TESTS \ check-am clean clean-checkPROGRAMS clean-generic clean-libtool \ clean-noinstLIBRARIES 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-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-compile mostlyclean-generic mostlyclean-libtool \ pdf pdf-am ps ps-am recheck tags tags-am uninstall \ uninstall-am .PRECIOUS: Makefile %.t: % echo "#!perl" > $@ echo "exec './$*'" >> $@ test: $(check_SCRIPTS) $(TESTS_ENVIRONMENT) $(check_SCRIPTS) # 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: libapreq2-2.17/library/t/params.c0000644000175000017500000001507714277401734016315 0ustar jortonjorton/* ** Licensed to the Apache Software Foundation (ASF) under one or more ** contributor license agreements. See the NOTICE file distributed with ** this work for additional information regarding copyright ownership. ** The ASF licenses this file to You under the Apache License, Version 2.0 ** (the "License"); you may not use this file except in compliance with ** the License. You may obtain a copy of the License at ** ** http://www.apache.org/licenses/LICENSE-2.0 ** ** Unless required by applicable law or agreed to in writing, software ** distributed under the License is distributed on an "AS IS" BASIS, ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. ** See the License for the specific language governing permissions and ** limitations under the License. */ #include "apreq_param.h" #include "apreq_util.h" #include "apreq_error.h" #include "apr_strings.h" #include "at.h" static const char query_string[] = "a=1;quux=foo+bar&a=2&plus=%2B;" "uplus=%U002b;okie=dokie;foo=a%E1;" "novalue1;novalue2="; static apr_table_t *args; static apr_pool_t *p; static void request_make(dAT, void *ctx) { apr_status_t s; args = apr_table_make(p, APREQ_DEFAULT_NELTS); AT_not_null(args); s = apreq_parse_query_string(p, args, query_string); AT_int_eq(s, APR_SUCCESS); AT_int_eq(apr_table_elts(args)->nelts, 9); } static void request_args_get(dAT, void *ctx) { const char *val; const apreq_param_t *param; AT_str_eq(apr_table_get(args,"a"), "1"); val = apr_table_get(args,"quux"); AT_str_eq(val, "foo bar"); param = apreq_value_to_param(val); AT_int_eq(param->v.dlen, 7); AT_str_eq(apr_table_get(args,"plus"), "+"); AT_str_eq(apr_table_get(args,"uplus"), "+"); AT_str_eq(apr_table_get(args,"okie"), "dokie"); AT_str_eq(apr_table_get(args,"novalue1"), ""); AT_str_eq(apr_table_get(args,"novalue2"),""); } static void params_as(dAT, void *ctx) { const char *val; apr_array_header_t *arr; arr = apreq_params_as_array(p,args,"a"); AT_int_eq(arr->nelts, 2); val = apreq_params_as_string(p,args,"a",APREQ_JOIN_AS_IS); AT_str_eq(val, "1, 2"); val = apreq_params_as_string(p,args,"does_not_exist",APREQ_JOIN_AS_IS); AT_str_eq(val, ""); } static void string_decoding_in_place(dAT, void *ctx) { char *s1 = apr_palloc(p,4096); char *s2 = apr_palloc(p,4096); char *s3; strcpy(s1, "bend it like beckham"); strcpy(s2, "dandy %3Edons"); AT_str_eq(s1,"bend it like beckham"); apreq_unescape(s1); AT_str_eq(s1, "bend it like beckham"); s3 = apreq_escape(p, s1, 20); AT_str_eq(s3, "bend+it+like+beckham"); apreq_unescape(s3); AT_str_eq(s3,"bend it like beckham"); AT_str_eq(s2,"dandy %3Edons"); apreq_unescape(s2); AT_str_eq(s2,"dandy >dons"); s3 = apreq_escape(p, s2, 11); AT_str_eq(s3,"dandy+%3Edons"); apreq_unescape(s3); AT_str_eq(s3,"dandy >dons"); } static void header_attributes(dAT, void *ctx) { const char *hdr = "text/plain; boundary=\"-foo-\", charset=ISO-8859-1"; const char *val; apr_size_t vlen; apr_status_t s; s = apreq_header_attribute(hdr, "none", 4, &val, &vlen); AT_int_eq(s, APREQ_ERROR_NOATTR); s = apreq_header_attribute(hdr, "set", 3, &val, &vlen); AT_int_eq(s, APREQ_ERROR_NOATTR); s = apreq_header_attribute(hdr, "boundary", 8, &val, &vlen); AT_int_eq(s, APR_SUCCESS); AT_int_eq(vlen, 5); AT_mem_eq(val, "-foo-", 5); s = apreq_header_attribute(hdr, "charset", 7, &val, &vlen); AT_int_eq(s, APR_SUCCESS); AT_int_eq(vlen, 10); AT_mem_eq(val, "ISO-8859-1", 10); hdr = "max-age=20; no-quote=\"..."; s = apreq_header_attribute(hdr, "max-age", 7, &val, &vlen); AT_int_eq(s, APR_SUCCESS); AT_int_eq(vlen, 2); AT_mem_eq(val, "20", 2); s = apreq_header_attribute(hdr, "age", 3, &val, &vlen); AT_int_eq(s, APREQ_ERROR_BADSEQ); s = apreq_header_attribute(hdr, "no-quote", 8, &val, &vlen); AT_int_eq(s, APREQ_ERROR_BADSEQ); } static void make_param(dAT, void *ctx) { apreq_param_t *param, *decode; apr_status_t s; apr_size_t nlen = 3, vlen = 11; char *name = apr_palloc(p,nlen+1); char *val = apr_palloc(p,vlen+1); char *encode; strcpy(name, "foo"); strcpy(val, "bar > alpha"); param = apreq_param_make(p, name, nlen, val, vlen); AT_str_eq(param->v.name, name); AT_int_eq(param->v.dlen, vlen); AT_str_eq(param->v.data, val); encode = apreq_param_encode(p, param); AT_str_eq(encode, "foo=bar+%3E+alpha"); s = apreq_param_decode(&decode, p, encode, nlen, vlen+2); AT_int_eq(s, APR_SUCCESS); AT_str_eq(decode->v.name, name); AT_int_eq(decode->v.dlen, vlen); AT_str_eq(decode->v.data, val); } static void quote_strings(dAT, void *ctx) { apr_size_t exp_len, res_len, res_quote_len; char *res = apr_palloc(p,24); char *res_quote = apr_palloc(p,24); const char *expr; int i; const char * arr[] = {"cest", "\"cest", "ce\"st", "\"cest\""}; const char * arr_quote[] = {"\"cest\"", "\"\\\"cest\"", "\"ce\\\"st\"", "\"\\\"cest\\\"\""}; apr_size_t arr_len[] = {4, 5, 5, 6}; apr_size_t arr_quote_len[] = {6, 8, 8, 10}; for (i=0; i<4; i++) { res_len = apreq_quote(res, arr[i], arr_len[i]); AT_int_eq(res_len, arr_quote_len[i]); AT_mem_eq(res, arr_quote[i], res_len); res_quote_len = apreq_quote_once(res_quote, res, res_len); AT_int_eq(res_quote_len, res_len); AT_mem_eq(res_quote, res, res_len); res_len = apreq_quote_once(res, arr[i], arr_len[i]); exp_len = (i == 3) ? arr_len[i] : arr_quote_len[i]; expr = (i == 3) ? arr[i] : arr_quote[i]; AT_int_eq(res_len, exp_len); AT_mem_eq(res, expr, exp_len); } } #define dT(func, plan) {#func, func, plan} int main(int argc, char *argv[]) { unsigned i, plan = 0; dAT; at_test_t test_list [] = { dT(request_make, 3), dT(request_args_get, 8), dT(params_as, 3), dT(string_decoding_in_place, 8), dT(header_attributes, 13), dT(make_param, 8), dT(quote_strings, 24), }; apr_initialize(); atexit(apr_terminate); apr_pool_create(&p, NULL); apreq_initialize(p); AT = at_create(0, at_report_stdout_make()); AT_trace_on(); for (i = 0; i < sizeof(test_list) / sizeof(at_test_t); ++i) plan += test_list[i].plan; AT_begin(plan); for (i = 0; i < sizeof(test_list) / sizeof(at_test_t); ++i) AT_run(&test_list[i]); AT_end(); return 0; } libapreq2-2.17/library/t/parsers.c0000644000175000017500000004257714277401734016516 0ustar jortonjorton/* ** Licensed to the Apache Software Foundation (ASF) under one or more ** contributor license agreements. See the NOTICE file distributed with ** this work for additional information regarding copyright ownership. ** The ASF licenses this file to You under the Apache License, Version 2.0 ** (the "License"); you may not use this file except in compliance with ** the License. You may obtain a copy of the License at ** ** http://www.apache.org/licenses/LICENSE-2.0 ** ** Unless required by applicable law or agreed to in writing, software ** distributed under the License is distributed on an "AS IS" BASIS, ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. ** See the License for the specific language governing permissions and ** limitations under the License. */ #include "apreq_parser.h" #include "apreq_util.h" #include "apreq_error.h" #include "apr_strings.h" #include "apr_xml.h" #include "at.h" #define CRLF "\015\012" static apr_pool_t *p; static char url_data[] = "alpha=one&beta=two;omega=last%2"; static char form_data[] = "--AaB03x" CRLF /* 10 chars 012345678901234567890123456789012345678901234567890123456789 */ "content-disposition: form-data; name=\"field1\"" CRLF /* 47 chars */ "content-type: text/plain;charset=windows-1250" CRLF "content-transfer-encoding: quoted-printable" CRLF CRLF "Joe owes =80100." CRLF "--AaB03x" CRLF "content-disposition: form-data; name=\"pics\"; filename=\"file1.txt\"" CRLF "Content-Type: text/plain" CRLF CRLF "... contents of file1.txt ..." CRLF CRLF "--AaB03x--" CRLF; /* This (invalid) case used to segfault the parser before r164254 so should be tested separately to form_data: static char form_data_fail[] = "content-disposition: form-data; name=\"\"" CRLF "content-type: text/plain;" CRLF " charset=windows-1250" CRLF "content-transfer-encoding: quoted-printable" CRLF CRLF "Joe owes =80100." CRLF "--AaB03x--" CRLF; */ static char xml_data[] = "" "" " foo.bar" " " " 1" " " ""; static char rel_data[] = /*offsets: 122, 522, */ "--f93dcbA3" CRLF "Content-Type: application/xml; charset=UTF-8" CRLF "Content-Length: 400" CRLF "Content-ID: <980119.X53GGT@example.com>" CRLF CRLF /*122*/ "" CRLF "" " My Proposal" " E. X. Ample" " A proposal for a new project." " (see handwritten region)" " project proposal funding" " false" " image.png" " cid:980119.X25MNC@example.com" "" /*400*/ CRLF "--f93dcbA3" CRLF /*14*/ "Content-Type: image/png" CRLF "Content-Transfer-Encoding: binary" CRLF "Content-ID: <980119.X25MNC@example.com>" CRLF CRLF /*103*/ "...Binary data here..." /*22*/ CRLF "--f93dcbA3" CRLF /*14*/ "Content-Type: image/png" CRLF "Content-Transfer-Encoding: binary" CRLF "Content-ID: <980119.X17AXM@example.com>" CRLF CRLF "...Binary data here..." CRLF "--f93dcbA3--" CRLF; static char mix_data[] = "--AaB03x" CRLF "Content-Disposition: form-data; name=\"submit-name\"" CRLF CRLF "Larry" CRLF "--AaB03x" CRLF "Content-Disposition: form-data; name=\"files\"" CRLF "Content-Type: multipart/mixed; boundary=BbC04y" CRLF CRLF "--BbC04y" CRLF "Content-Disposition: file; filename=\"file1.txt\"" CRLF "Content-Type: text/plain" CRLF CRLF "... contents of file1.txt ..." CRLF "--BbC04y" CRLF "Content-Disposition: file; filename=\"file2.gif\"" CRLF "Content-Type: image/gif" CRLF "Content-Transfer-Encoding: binary" CRLF CRLF "...contents of file2.gif..." CRLF "--BbC04y--" CRLF "--AaB03x " CRLF "content-disposition: form-data; name=\"field1\"" CRLF "content-type: text/plain;charset=windows-1250" CRLF "content-transfer-encoding: quoted-printable" CRLF CRLF "Joe owes =80100." CRLF "--AaB03x--"; /* omit CRLF, which is ok per rfc 2046 */ #define URL_ENCTYPE "application/x-www-form-urlencoded" #define MFD_ENCTYPE "multipart/form-data" #define MR_ENCTYPE "multipart/related" #define XML_ENCTYPE "application/xml" static void locate_default_parsers(dAT, void *ctx) { #ifdef __ELF__ apreq_parser_function_t f; AT_trace_on(); f = apreq_parser(URL_ENCTYPE); AT_EQ(f, (apreq_parser_function_t)apreq_parse_urlencoded, "%pp"); f = apreq_parser(MFD_ENCTYPE); AT_EQ(f, (apreq_parser_function_t)apreq_parse_multipart, "%pp"); f = apreq_parser(MR_ENCTYPE); AT_EQ(f, (apreq_parser_function_t)apreq_parse_multipart, "%pp"); AT_trace_off(); #else AT_skip(3, "skipping ELF-dependent tests"); #endif } static void parse_urlencoded(dAT, void *ctx) { apr_status_t rv; apr_bucket_alloc_t *ba; apr_bucket_brigade *bb; apreq_parser_t *parser; apr_table_t *body; body = apr_table_make(p, APREQ_DEFAULT_NELTS); ba = apr_bucket_alloc_create(p); bb = apr_brigade_create(p, ba); parser = apreq_parser_make(p, ba, URL_ENCTYPE, apreq_parse_urlencoded, 100, NULL, NULL, NULL); APR_BRIGADE_INSERT_HEAD(bb, apr_bucket_immortal_create(url_data,strlen(url_data), bb->bucket_alloc)); rv = apreq_parser_run(parser, body, bb); AT_int_eq(rv, APR_INCOMPLETE); APR_BRIGADE_INSERT_HEAD(bb, apr_bucket_immortal_create("blast",5, bb->bucket_alloc)); APR_BRIGADE_INSERT_TAIL(bb, apr_bucket_eos_create(bb->bucket_alloc)); rv = apreq_parser_run(parser, body, bb); AT_int_eq(rv, APR_SUCCESS); AT_str_eq(apr_table_get(body,"alpha"), "one"); AT_str_eq(apr_table_get(body,"beta"), "two"); AT_str_eq(apr_table_get(body,"omega"),"last+last"); } static void parse_multipart(dAT, void *ctx) { apr_size_t i, j; apr_bucket_alloc_t *ba; for (j = 0; j <= strlen(form_data); ++j) { ba = apr_bucket_alloc_create(p); /* AT_localize checks the inner loop tests itself * (and interprets any such failures as being fatal), * because doing IO to Test::Harness is just too slow * when this many (~1M) tests are involved. */ AT_localize(); for (i = 0; i <= strlen(form_data); ++i) { const char *val; char *val2; apr_size_t len; apr_table_t *t, *body; apreq_parser_t *parser; apr_bucket_brigade *bb, *vb, *tail; apr_status_t rv; apr_bucket *e, *f; bb = apr_brigade_create(p, ba); body = apr_table_make(p, APREQ_DEFAULT_NELTS); parser = apreq_parser_make(p, ba, MFD_ENCTYPE "; charset=\"iso-8859-1\"" "; boundary=\"AaB03x\"", apreq_parse_multipart, 1000, NULL, NULL, NULL); e = apr_bucket_immortal_create(form_data, strlen(form_data), bb->bucket_alloc); APR_BRIGADE_INSERT_HEAD(bb, e); APR_BRIGADE_INSERT_TAIL(bb, apr_bucket_eos_create(bb->bucket_alloc)); /* Split e into three buckets */ apr_bucket_split(e, j); f = APR_BUCKET_NEXT(e); if (i < j) apr_bucket_split(e, i); else apr_bucket_split(f, i - j); tail = apr_brigade_split(bb, f); rv = apreq_parser_run(parser, body, bb); AT_int_eq(rv, (j < strlen(form_data)) ? APR_INCOMPLETE : APR_SUCCESS); rv = apreq_parser_run(parser, body, tail); AT_int_eq(rv, APR_SUCCESS); AT_int_eq(apr_table_elts(body)->nelts, 2); val = apr_table_get(body,"field1"); AT_str_eq(val, "Joe owes =80100."); t = apreq_value_to_param(val)->info; val = apr_table_get(t, "content-transfer-encoding"); AT_str_eq(val, "quoted-printable"); val = apr_table_get(body, "pics"); AT_str_eq(val, "file1.txt"); t = apreq_value_to_param(val)->info; vb = apreq_value_to_param(val)->upload; apr_brigade_pflatten(vb, &val2, &len, p); AT_int_eq(len, strlen("... contents of file1.txt ..." CRLF)); AT_mem_eq(val2 ,"... contents of file1.txt ..." CRLF, len); val = apr_table_get(t, "content-type"); AT_str_eq(val, "text/plain"); apr_brigade_cleanup(vb); apr_brigade_cleanup(bb); } #ifdef APR_POOL_DEBUG apr_bucket_alloc_destroy(ba); #endif AT_delocalize(); apr_pool_clear(p); } } static void parse_disable_uploads(dAT, void *ctx) { const char *val; apr_table_t *t, *body; apr_status_t rv; apr_bucket_alloc_t *ba; apr_bucket_brigade *bb; apr_bucket *e; apreq_parser_t *parser; apreq_hook_t *hook; ba = apr_bucket_alloc_create(p); bb = apr_brigade_create(p, ba); e = apr_bucket_immortal_create(form_data, strlen(form_data), ba); APR_BRIGADE_INSERT_HEAD(bb, e); APR_BRIGADE_INSERT_TAIL(bb, apr_bucket_eos_create(bb->bucket_alloc)); body = apr_table_make(p, APREQ_DEFAULT_NELTS); hook = apreq_hook_make(p, apreq_hook_disable_uploads, NULL, NULL); parser = apreq_parser_make(p, ba, MFD_ENCTYPE "; charset=\"iso-8859-1\"" "; boundary=\"AaB03x\"", apreq_parse_multipart, 1000, NULL, hook, NULL); rv = apreq_parser_run(parser, body, bb); AT_int_eq(rv, APREQ_ERROR_GENERAL); AT_int_eq(apr_table_elts(body)->nelts, 1); val = apr_table_get(body,"field1"); AT_str_eq(val, "Joe owes =80100."); t = apreq_value_to_param(val)->info; val = apr_table_get(t, "content-transfer-encoding"); AT_str_eq(val, "quoted-printable"); val = apr_table_get(body, "pics"); AT_is_null(val); } static void parse_generic(dAT, void *ctx) { char *val; apr_size_t vlen; apr_status_t rv; apreq_param_t *dummy; apreq_parser_t *parser; apr_table_t *body; apr_bucket_alloc_t *ba = apr_bucket_alloc_create(p); apr_bucket_brigade *bb = apr_brigade_create(p, ba); apr_bucket *e = apr_bucket_immortal_create(xml_data, strlen(xml_data), ba); APR_BRIGADE_INSERT_HEAD(bb, e); APR_BRIGADE_INSERT_TAIL(bb, apr_bucket_eos_create(ba)); body = apr_table_make(p, APREQ_DEFAULT_NELTS); parser = apreq_parser_make(p, ba, "application/xml", apreq_parse_generic, 1000, NULL, NULL, NULL); rv = apreq_parser_run(parser, body, bb); AT_int_eq(rv, APR_SUCCESS); dummy = *(apreq_param_t **)parser->ctx; AT_not_null(dummy); apr_brigade_pflatten(dummy->upload, &val, &vlen, p); AT_int_eq(vlen, strlen(xml_data)); AT_mem_eq(val, xml_data, vlen); } static void hook_discard(dAT, void *ctx) { apr_status_t rv; apreq_param_t *dummy; apreq_parser_t *parser; apreq_hook_t *hook; apr_table_t *body; apr_bucket_alloc_t *ba = apr_bucket_alloc_create(p); apr_bucket_brigade *bb = apr_brigade_create(p, ba); apr_bucket *e = apr_bucket_immortal_create(xml_data, strlen(xml_data), ba); APR_BRIGADE_INSERT_HEAD(bb, e); APR_BRIGADE_INSERT_TAIL(bb, apr_bucket_eos_create(ba)); body = apr_table_make(p, APREQ_DEFAULT_NELTS); hook = apreq_hook_make(p, apreq_hook_discard_brigade, NULL, NULL); parser = apreq_parser_make(p, ba, "application/xml", apreq_parse_generic, 1000, NULL, hook, NULL); rv = apreq_parser_run(parser, body, bb); AT_int_eq(rv, APR_SUCCESS); dummy = *(apreq_param_t **)parser->ctx; AT_not_null(dummy); AT_not_null(dummy->upload); AT_ok(APR_BRIGADE_EMPTY(dummy->upload), "brigade has no contents"); } static void parse_related(dAT, void *ctx) { char ct[] = "multipart/related; boundary=f93dcbA3; " "type=application/xml; start=\"<980119.X53GGT@example.com>\""; char data[] = "...Binary data here..."; int dlen = strlen(data); const char *val; char *val2; apr_size_t vlen; apr_status_t rv; int ns_map = 0; apr_xml_doc *doc; apr_table_t *body; apreq_parser_t *parser; apreq_hook_t *xml_hook; apreq_param_t *param; apr_bucket_alloc_t *ba = apr_bucket_alloc_create(p); apr_bucket_brigade *bb = apr_brigade_create(p, ba); apr_bucket *e = apr_bucket_immortal_create(rel_data, strlen(rel_data), bb->bucket_alloc); APR_BRIGADE_INSERT_HEAD(bb, e); APR_BRIGADE_INSERT_TAIL(bb, apr_bucket_eos_create(bb->bucket_alloc)); xml_hook = apreq_hook_make(p, apreq_hook_apr_xml_parser, NULL, NULL); body = apr_table_make(p, APREQ_DEFAULT_NELTS); parser = apreq_parser_make(p, ba, ct, apreq_parse_multipart, 1000, NULL, xml_hook, NULL); rv = apreq_parser_run(parser, body, bb); AT_int_eq(rv, APR_SUCCESS); val = apr_table_get(body, "<980119.X53GGT@example.com>"); AT_not_null(val); param = apreq_value_to_param(val); AT_not_null(param); AT_not_null(param->info); val = apr_table_get(param->info, "Content-Length"); AT_str_eq(val, "400"); AT_not_null(param->upload); apr_brigade_pflatten(param->upload, &val2, &vlen, p); AT_int_eq(vlen, 400); AT_mem_eq(val2, rel_data + 122, 400); doc = *(apr_xml_doc **)xml_hook->ctx; apr_xml_to_text(p, doc->root, APR_XML_X2T_FULL, doc->namespaces, &ns_map, &val, &vlen); AT_int_eq(vlen, 400 - 22); AT_mem_eq(val, rel_data + 122 + 23, 400 - 23); val = apr_table_get(body, "<980119.X25MNC@example.com>"); AT_not_null(val); param = apreq_value_to_param(val); AT_not_null(param); AT_not_null(param->upload); apr_brigade_pflatten(param->upload, &val2, &vlen, p); AT_int_eq(vlen, dlen); AT_mem_eq(val2, data, vlen); val = apr_table_get(body, "<980119.X17AXM@example.com>"); AT_not_null(val); param = apreq_value_to_param(val); AT_not_null(param); AT_not_null(param->upload); apr_brigade_pflatten(param->upload, &val2, &vlen, p); AT_int_eq(vlen, dlen); AT_mem_eq(val2, data, vlen); } typedef struct { const char *key; const char *val; } array_elt; static void parse_mixed(dAT, void *ctx) { const char *val; char *val2; apr_size_t vlen; apr_status_t rv; apreq_param_t *param; const apr_array_header_t *arr; array_elt *elt; char ct[] = MFD_ENCTYPE "; charset=\"iso-8859-1\"; boundary=\"AaB03x\""; apreq_parser_t *parser; apr_table_t *body = apr_table_make(p, APREQ_DEFAULT_NELTS); apr_bucket_alloc_t *ba = apr_bucket_alloc_create(p); apr_bucket_brigade *bb = apr_brigade_create(p, ba); apr_bucket *e = apr_bucket_immortal_create(mix_data, strlen(mix_data), bb->bucket_alloc); APR_BRIGADE_INSERT_HEAD(bb, e); APR_BRIGADE_INSERT_TAIL(bb, apr_bucket_eos_create(bb->bucket_alloc)); parser = apreq_parser_make(p, ba, ct, apreq_parse_multipart, 1000, NULL, NULL, NULL); rv = apreq_parser_run(parser, body, bb); AT_int_eq(rv, APR_SUCCESS); val = apr_table_get(body, "submit-name"); AT_not_null(val); AT_str_eq(val, "Larry"); val = apr_table_get(body,"field1"); AT_str_eq(val, "Joe owes =80100."); val = apr_table_get(body, "files"); AT_not_null(val); AT_str_eq(val, "file1.txt"); param = apreq_value_to_param(val); AT_not_null(param->upload); apr_brigade_pflatten(param->upload, &val2, &vlen, p); AT_int_eq(vlen, strlen("... contents of file1.txt ...")); AT_mem_eq(val2, "... contents of file1.txt ...", vlen); arr = apr_table_elts(body); AT_int_eq(arr->nelts, 4); elt = (array_elt *)&arr->elts[2 * arr->elt_size]; AT_str_eq(elt->key, "files"); AT_str_eq(elt->val, "file2.gif"); param = apreq_value_to_param(elt->val); AT_not_null(param->upload); apr_brigade_pflatten(param->upload, &val2, &vlen, p); AT_int_eq(vlen, strlen("...contents of file2.gif...")); AT_mem_eq(val2, "...contents of file2.gif...", vlen); } #define dT(func, plan) {#func, func, plan} int main(int argc, char *argv[]) { apr_pool_t *test_pool; unsigned i, plan = 0; dAT; at_test_t test_list [] = { dT(locate_default_parsers, 3), dT(parse_urlencoded, 5), dT(parse_multipart, sizeof form_data), dT(parse_disable_uploads, 5), dT(parse_generic, 4), dT(hook_discard, 4), dT(parse_related, 20), dT(parse_mixed, 15) }; apr_initialize(); atexit(apr_terminate); apr_pool_create(&p, NULL); apr_pool_create(&test_pool, NULL); apreq_initialize(p); AT = at_create(0, at_report_stdout_make()); for (i = 0; i < sizeof(test_list) / sizeof(at_test_t); ++i) plan += test_list[i].plan; AT_begin(plan); for (i = 0; i < sizeof(test_list) / sizeof(at_test_t); ++i) AT_run(&test_list[i]); AT_end(); return 0; } libapreq2-2.17/library/t/util.c0000644000175000017500000002213714277401734016002 0ustar jortonjorton/* ** Licensed to the Apache Software Foundation (ASF) under one or more ** contributor license agreements. See the NOTICE file distributed with ** this work for additional information regarding copyright ownership. ** The ASF licenses this file to You under the Apache License, Version 2.0 ** (the "License"); you may not use this file except in compliance with ** the License. You may obtain a copy of the License at ** ** http://www.apache.org/licenses/LICENSE-2.0 ** ** Unless required by applicable law or agreed to in writing, software ** distributed under the License is distributed on an "AS IS" BASIS, ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. ** See the License for the specific language governing permissions and ** limitations under the License. */ #include "apr_strings.h" #include "apreq_error.h" #include "apreq_util.h" #include "at.h" static void test_atoi64f(dAT, void *ctx) { AT_int_eq(apreq_atoi64f("0"), 0); AT_int_eq(apreq_atoi64f("-1"), -1); AT_int_eq(apreq_atoi64f("-"), 0); AT_int_eq(apreq_atoi64f("5"), 5); AT_int_eq(apreq_atoi64f("3.333"), 3); AT_int_eq(apreq_atoi64f("33k"), 33 * 1024); AT_int_eq(apreq_atoi64f(" +8M "), 8 * 1024 * 1024); AT_ok(apreq_atoi64f("44GB") == (apr_int64_t)44 * 1024 * 1024 * 1024, "44GB test"); AT_ok(apreq_atoi64f("0xaBcDefg") == (apr_int64_t)11259375 * 1024 * 1024 * 1024, "hex test"); } static void test_atoi64t(dAT, void *ctx) { AT_int_eq(apreq_atoi64t("0"), 0); AT_int_eq(apreq_atoi64t("-1"), -1); AT_int_eq(apreq_atoi64t("-g088l3dyg00k"), 0); AT_int_eq(apreq_atoi64t("5s"), 5); AT_int_eq(apreq_atoi64t("3.333"), 3); AT_int_eq(apreq_atoi64t("33d"), 33 * 60 * 60 * 24); AT_int_eq(apreq_atoi64t(" +8M "), 8 * 60 * 60 * 24 * 30); AT_int_eq(apreq_atoi64t("+9m"), 9 * 60); AT_int_eq(apreq_atoi64t("6h"), 6 * 60 * 60); } static void test_index(dAT, void *ctx) { const char haystack[] = "Four score and seven years ago"; apr_size_t hlen = sizeof haystack - 1; AT_int_eq(apreq_index(haystack, hlen, "Four", 4, APREQ_MATCH_FULL), 0); AT_int_eq(apreq_index(haystack, hlen, "Four", 4, APREQ_MATCH_PARTIAL), 0); AT_int_eq(apreq_index(haystack, hlen, "Fourteen", 8, APREQ_MATCH_FULL), -1); AT_int_eq(apreq_index(haystack, hlen, "Fourteen", 8, APREQ_MATCH_PARTIAL), -1); AT_int_eq(apreq_index(haystack, hlen, "agoraphobia", 11, APREQ_MATCH_FULL), -1); AT_int_eq(apreq_index(haystack, hlen, "agoraphobia", 11, APREQ_MATCH_PARTIAL), hlen - 3); } #define A_GRAVE 0xE5 #define KATAKANA_A 0xFF71 static void test_decode(dAT, void *ctx) { apr_size_t elen; char src1[] = "%C3%80%E3%82%a2"; /* A_GRAVE KATAKANA_A as utf8 */ unsigned char expect[6]; AT_int_eq(apreq_decode((char *)expect, &elen, src1, sizeof(src1) -1), APR_SUCCESS); AT_int_eq(elen, 5); AT_int_eq(expect[0], 0xC3); AT_int_eq(expect[1], 0x80); AT_int_eq(expect[2], 0xE3); AT_int_eq(expect[3], 0x82); AT_int_eq(expect[4], 0xA2); } static void test_charset_divine(dAT, void *ctx) { apr_size_t elen; char src1[] = "%C3%80%E3%82%a2"; /* A_GRAVE KATAKANA_A as utf8 */ char src2[] = "pound%A3";/* latin-1 */ char src3[] = "euro%80";/* cp-1252 */ char expect[7]; AT_int_eq(apreq_decode(expect, &elen, src1, sizeof(src1) -1), APR_SUCCESS); AT_int_eq(apreq_charset_divine(expect, elen), APREQ_CHARSET_UTF8); AT_int_eq(apreq_decode(expect, &elen, src2, sizeof(src2) -1), APR_SUCCESS); AT_int_eq(apreq_charset_divine(expect, elen), APREQ_CHARSET_LATIN1); AT_int_eq(apreq_decode(expect, &elen, src3, sizeof(src3) -1), APR_SUCCESS); AT_int_eq(apreq_charset_divine(expect, elen), APREQ_CHARSET_CP1252); } static void test_decodev(dAT, void *ctx) { char src1[] = "%2540%2"; char src2[] = "0%u0"; char src3[] = "041"; struct iovec iovec1[] = { { src1, sizeof(src1) - 1 }, { src2, sizeof(src2) - 1 }, { src3, sizeof(src3) - 1 }, }; struct iovec iovec2[] = { { src1, sizeof(src1) - 1 }, { src2, sizeof(src2) - 1 }, }; const char expect1[] = "%40 A"; const char expect2[] = "%40 "; char dest[sizeof(src1) + sizeof(src2) + sizeof(src3)]; apr_size_t dest_len; apr_status_t status; status = apreq_decodev(dest, &dest_len, iovec1, 3); AT_int_eq(status, APR_SUCCESS); AT_int_eq(dest_len, sizeof(expect1) - 1); AT_mem_eq(dest, expect1, sizeof(expect1) - 1); status = apreq_decodev(dest, &dest_len, iovec2, 2); AT_int_eq(status, APR_INCOMPLETE); AT_int_eq(dest_len, sizeof(expect2) - 1); AT_mem_eq(dest, expect2, sizeof(expect2) - 1); } static void test_encode(dAT, void *ctx) { } static void test_cp1252_to_utf8(dAT, void *ctx) { char src1[] = "%C3%80%E3%82%a2"; /* A_GRAVE KATAKANA_A as utf8 */ char src2[5]; unsigned char expect[16]; apr_size_t slen; AT_int_eq(apreq_decode((char *)src2, &slen, src1, sizeof(src1) -1), APR_SUCCESS); AT_int_eq(apreq_cp1252_to_utf8((char *)expect, src2, 5), 12); /* 0xC3 */ AT_int_eq(expect[0], 0xC0 | (0xC3 >> 6)); AT_int_eq(expect[1], 0xC3 - 0x40); /* 0x20AC */ AT_int_eq(expect[2], 0xE0 | (0x20AC >> 12)); AT_int_eq(expect[3], 0x80 | ((0x20AC >> 6) & 0x3F)); AT_int_eq(expect[4], 0x80 | (0x20AC & 0x3F)); /* 0xE3 */ AT_int_eq(expect[5], 0xC3); AT_int_eq(expect[6], 0xE3 - 0x40); /* 0x201A */ AT_int_eq(expect[7], 0xE0 | (0x201A >> 12)); AT_int_eq(expect[8], 0x80 | ((0x201A >> 6) & 0x3F)); AT_int_eq(expect[9], 0x80 | (0x201A & 0x3F)); /* 0xA2 */ AT_int_eq(expect[10], 0xC0 | (0xA2 >> 6)); AT_int_eq(expect[11], 0xA2); } static void test_quote(dAT, void *ctx) { size_t len; char dst[64]; len = apreq_quote(dst, "foo", 3); AT_int_eq(len, 5); AT_str_eq(dst, "\"foo\""); len = apreq_quote(dst, "\"foo", 4); AT_int_eq(len, 7); AT_str_eq(dst, "\"\\\"foo\""); len = apreq_quote(dst, "foo\\bar", 7); AT_int_eq(len, 10); AT_str_eq(dst, "\"foo\\\\bar\""); len = apreq_quote(dst, "foo\0bar", 7); AT_int_eq(len, 10); AT_str_eq(dst, "\"foo\\0bar\""); } static void test_quote_once(dAT, void *ctx) { size_t len; char dst[64]; len = apreq_quote_once(dst, "foo", 3); AT_int_eq(len, 5); AT_str_eq(dst, "\"foo\""); len = apreq_quote_once(dst, "\"foo", 4); AT_int_eq(len, 7); AT_str_eq(dst, "\"\\\"foo\""); len = apreq_quote_once(dst, "foo\"", 4); AT_int_eq(len, 7); AT_str_eq(dst, "\"foo\\\"\""); len = apreq_quote_once(dst, "foo\0bar", 7); AT_int_eq(len, 10); AT_str_eq(dst, "\"foo\\0bar\""); /* null byte must be escaped, even when there are already double quotes */ len = apreq_quote_once(dst, "\"foo\0bar\"", 9); AT_int_eq(len, 14); AT_str_eq(dst, "\"\\\"foo\\0bar\\\"\""); len = apreq_quote_once(dst, "\"foo\"", 5); AT_int_eq(len, 5); AT_str_eq(dst, "\"foo\""); len = apreq_quote_once(dst, "'foo'", 5); AT_int_eq(len, 7); AT_str_eq(dst, "\"'foo'\""); len = apreq_quote_once(dst, "\"fo\\o\"", 6); AT_int_eq(len, 6); AT_str_eq(dst, "\"fo\\o\""); len = apreq_quote_once(dst, "\"foo\"bar\"", 9); AT_int_eq(len, 14); AT_str_eq(dst, "\"\\\"foo\\\"bar\\\"\""); } static void test_join(dAT, void *ctx) { } static void test_brigade_fwrite(dAT, void *ctx) { } static void test_file_mktemp(dAT, void *ctx) { } static void test_header_attribute(dAT, void *ctx) { const char hdr[] = "name=\"filename=foo\"; filename=\"quux.txt\""; const char *val; apr_size_t vlen; AT_int_eq(apreq_header_attribute(hdr, "name", 4, &val, &vlen), APR_SUCCESS); AT_int_eq(vlen, 12); AT_mem_eq("filename=foo", val, 12); AT_int_eq(apreq_header_attribute(hdr, "filename", 8, &val, &vlen), APR_SUCCESS); AT_int_eq(vlen, 8); AT_mem_eq("quux.txt", val, 8); } static void test_brigade_concat(dAT, void *ctx) { } #define dT(func, plan) #func, func, plan, NULL int main(int argc, char *argv[]) { unsigned i, plan = 0; apr_pool_t *p; dAT; at_test_t test_list [] = { { dT(test_atoi64f, 9) }, { dT(test_atoi64t, 9) }, { dT(test_index, 6) }, { dT(test_decode, 7) }, { dT(test_charset_divine, 6) }, { dT(test_decodev, 6) }, { dT(test_encode, 0) }, { dT(test_cp1252_to_utf8, 14) }, { dT(test_quote, 8) }, { dT(test_quote_once, 18), }, { dT(test_join, 0) }, { dT(test_brigade_fwrite, 0) }, { dT(test_file_mktemp, 0) }, { dT(test_header_attribute, 6) }, { dT(test_brigade_concat, 0) }, }; apr_initialize(); atexit(apr_terminate); apr_pool_create(&p, NULL); AT = at_create(0, at_report_stdout_make()); for (i = 0; i < sizeof(test_list) / sizeof(at_test_t); ++i) plan += test_list[i].plan; AT_begin(plan); for (i = 0; i < sizeof(test_list) / sizeof(at_test_t); ++i) AT_run(&test_list[i]); AT_end(); return 0; } libapreq2-2.17/library/t/version.c0000644000175000017500000000364114277401734016511 0ustar jortonjorton/* ** Licensed to the Apache Software Foundation (ASF) under one or more ** contributor license agreements. See the NOTICE file distributed with ** this work for additional information regarding copyright ownership. ** The ASF licenses this file to You under the Apache License, Version 2.0 ** (the "License"); you may not use this file except in compliance with ** the License. You may obtain a copy of the License at ** ** http://www.apache.org/licenses/LICENSE-2.0 ** ** Unless required by applicable law or agreed to in writing, software ** distributed under the License is distributed on an "AS IS" BASIS, ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. ** See the License for the specific language governing permissions and ** limitations under the License. */ #include "apreq_version.h" #include "at.h" static void version_string(dAT, void *ctx) { const char *vstring = apreq_version_string(); AT_not_null(vstring); AT_str_eq(vstring, APREQ_VERSION_STRING); } static void version_type(dAT, void *ctx) { apr_version_t v; apreq_version(&v); AT_int_eq(v.major, APREQ_MAJOR_VERSION); AT_int_eq(v.minor, APREQ_MINOR_VERSION); AT_int_eq(v.patch, APREQ_PATCH_VERSION); #ifdef APREQ_IS_DEV_VERSION AT_int_eq(v.is_dev, 1); #else AT_int_eq(v.is_dev, 0); #endif } int main(int argc, char *argv[]) { apr_pool_t *p; unsigned i, plan = 0; dAT; at_test_t test_list [] = { {"version_string", version_string, 2, NULL, "1"}, {"version_type", version_type, 4} }; apr_initialize(); atexit(apr_terminate); apr_pool_create(&p, NULL); AT = at_create(0, at_report_stdout_make()); for (i = 0; i < sizeof(test_list) / sizeof(at_test_t); ++i) plan += test_list[i].plan; AT_begin(plan); for (i = 0; i < sizeof(test_list) / sizeof(at_test_t); ++i) AT_run(&test_list[i]); AT_end(); return 0; } libapreq2-2.17/library/util.c0000644000175000017500000010004514277401734015532 0ustar jortonjorton/* ** Licensed to the Apache Software Foundation (ASF) under one or more ** contributor license agreements. See the NOTICE file distributed with ** this work for additional information regarding copyright ownership. ** The ASF licenses this file to You under the Apache License, Version 2.0 ** (the "License"); you may not use this file except in compliance with ** the License. You may obtain a copy of the License at ** ** http://www.apache.org/licenses/LICENSE-2.0 ** ** Unless required by applicable law or agreed to in writing, software ** distributed under the License is distributed on an "AS IS" BASIS, ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. ** See the License for the specific language governing permissions and ** limitations under the License. */ #include "apreq_util.h" #include "apreq_error.h" #include "apr_time.h" #include "apr_strings.h" #include "apr_lib.h" #include #undef MAX #undef MIN #define MIN(a,b) ( (a) < (b) ? (a) : (b) ) #define MAX(a,b) ( (a) > (b) ? (a) : (b) ) /* used for specifying file sizes */ APREQ_DECLARE(apr_int64_t) apreq_atoi64f(const char *s) { apr_int64_t n = 0; char *p; if (s == NULL) return 0; n = apr_strtoi64(s, &p, 0); if (p == NULL) return n; while (apr_isspace(*p)) ++p; switch (*p) { case 'G': /* fall thru */ case 'g': return n * 1024*1024*1024; case 'M': /* fall thru */ case 'm': return n * 1024*1024; case 'K': /* fall thru */ case 'k': return n * 1024; } return n; } /* converts date offsets (e.g. "+3M") to seconds */ APREQ_DECLARE(apr_int64_t) apreq_atoi64t(const char *s) { apr_int64_t n = 0; char *p; if (s == NULL) return 0; n = apr_strtoi64(s, &p, 0); /* XXX: what about overflow? */ if (p == NULL) return n; while (apr_isspace(*p)) ++p; switch (*p) { case 'Y': /* fall thru */ case 'y': return n * 60*60*24*365; case 'M': return n * 60*60*24*30; case 'D': /* fall thru */ case 'd': return n * 60*60*24; case 'H': /* fall thru */ case 'h': return n * 60*60; case 'm': return n * 60; case 's': /* fall thru */ default: return n; } /* should never get here */ return -1; } APREQ_DECLARE(apr_ssize_t ) apreq_index(const char* hay, apr_size_t hlen, const char* ndl, apr_size_t nlen, const apreq_match_t type) { apr_size_t len = hlen; const char *end = hay + hlen; const char *begin = hay; while ( (hay = memchr(hay, ndl[0], len)) ) { len = end - hay; /* done if matches up to capacity of buffer */ if ( memcmp(hay, ndl, MIN(nlen, len)) == 0 ) { if (type == APREQ_MATCH_FULL && len < nlen) hay = NULL; /* insufficient room for match */ break; } --len; ++hay; } return hay ? hay - begin : -1; } static const char c2x_table[] = "0123456789ABCDEF"; static APR_INLINE unsigned char hex2_to_char(const char *what) { register unsigned char digit; #if !APR_CHARSET_EBCDIC digit = (what[0] >= 'A' ? ((what[0] & 0xdf) - 'A') + 10 : (what[0] - '0')); digit *= 16; digit += (what[1] >= 'A' ? ((what[1] & 0xdf) - 'A') + 10 : (what[1] - '0')); #else /*APR_CHARSET_EBCDIC*/ char xstr[5]; xstr[0]='0'; xstr[1]='x'; xstr[2]=what[0]; xstr[3]=what[1]; xstr[4]='\0'; digit = apr_xlate_conv_byte(ap_hdrs_from_ascii, 0xFF & strtol(xstr, NULL, 16)); #endif /*APR_CHARSET_EBCDIC*/ return (digit); } /* Unicode notes: "bmp" refers to the 16-bit * Unicode Basic Multilingual Plane. Here we're * restricting our unicode internals to 16-bit * codepoints, to keep the code as simple as possible. * This should be sufficient for apreq itself, since * we really only need to validate RFC3986-encoded utf8. */ /* Converts Windows cp1252 to Unicode. */ static APR_INLINE apr_uint16_t cp1252_to_bmp(unsigned char c) { /* We only need to deal with iso-8859-1 control chars * in the 0x80 - 0x9F range. */ if ((c & 0xE0) != 0x80) return c; switch (c) { case 0x80: return 0x20AC; case 0x82: return 0x201A; case 0x83: return 0x192; case 0x84: return 0x201E; case 0x85: return 0x2026; case 0x86: return 0x2020; case 0x87: return 0x2021; case 0x88: return 0x2C6; case 0x89: return 0x2030; case 0x8A: return 0x160; case 0x8B: return 0x2039; case 0x8C: return 0x152; case 0x8E: return 0x17D; case 0x91: return 0x2018; case 0x92: return 0x2019; case 0x93: return 0x201C; case 0x94: return 0x201D; case 0x95: return 0x2022; case 0x96: return 0x2013; case 0x97: return 0x2014; case 0x98: return 0x2DC; case 0x99: return 0x2122; case 0x9A: return 0x161; case 0x9B: return 0x203A; case 0x9C: return 0x153; case 0x9E: return 0x17E; case 0x9F: return 0x178; } return c; } /* converts cp1252 to utf8 */ APREQ_DECLARE(apr_size_t) apreq_cp1252_to_utf8(char *dest, const char *src, apr_size_t slen) { const unsigned char *s = (unsigned const char *)src; const unsigned char *end = s + slen; unsigned char *d = (unsigned char *)dest; apr_uint16_t c; while (s < end) { c = cp1252_to_bmp(*s++); if (c < 0x80) { *d++ = c; } else if (c < 0x800) { *d++ = 0xC0 | (c >> 6); *d++ = 0x80 | (c & 0x3F); } else { *d++ = 0xE0 | (c >> 12); *d++ = 0x80 | ((c >> 6) & 0x3F); *d++ = 0x80 | (c & 0x3F); } } *d = 0; return d - (unsigned char *)dest; } /** * Valid utf8 bit patterns: (true utf8 must satisfy a minimality condition) * * 0aaaaaaa * 110bbbba 10aaaaaa minimality mask: 0x1E * 1110cccc 10cbbbba 10aaaaaa 0x0F || 0x20 * 11110ddd 10ddcccc 10cbbbba 10aaaaaa 0x07 || 0x30 * 111110ee 10eeeddd 10ddcccc 10cbbbba 10aaaaaa 0x03 || 0x38 * 1111110f 10ffffee 10eeeddd 10ddcccc 10cbbbba 10aaaaaa 0x01 || 0x3C * * Charset divination heuristics: * 1) presume ascii; if not, then * 2) presume utf8; if not, then * 3) presume latin1; unless there are control chars, in which case * 4) punt to cp1252. * * Note: in downgrading from 2 to 3, we need to be careful * about earlier control characters presumed to be valid utf8. */ APREQ_DECLARE(apreq_charset_t) apreq_charset_divine(const char *src, apr_size_t slen) { apreq_charset_t rv = APREQ_CHARSET_ASCII; register unsigned char trail = 0, saw_cntrl = 0, mask = 0; register const unsigned char *s = (const unsigned char *)src; const unsigned char *end = s + slen; for (; s < end; ++s) { if (trail) { if ((*s & 0xC0) == 0x80 && (mask == 0 || (mask & *s))) { mask = 0; --trail; if ((*s & 0xE0) == 0x80) { saw_cntrl = 1; } } else { trail = 0; if (saw_cntrl) return APREQ_CHARSET_CP1252; rv = APREQ_CHARSET_LATIN1; } } else if (*s < 0x80) { /* do nothing */ } else if (*s < 0xA0) { return APREQ_CHARSET_CP1252; } else if (*s < 0xC0) { if (saw_cntrl) return APREQ_CHARSET_CP1252; rv = APREQ_CHARSET_LATIN1; } else if (rv == APREQ_CHARSET_LATIN1) { /* do nothing */ } /* utf8 cases */ else if (*s < 0xE0) { if (*s & 0x1E) { rv = APREQ_CHARSET_UTF8; trail = 1; mask = 0; } else if (saw_cntrl) return APREQ_CHARSET_CP1252; else rv = APREQ_CHARSET_LATIN1; } else if (*s < 0xF0) { mask = (*s & 0x0F) ? 0 : 0x20; rv = APREQ_CHARSET_UTF8; trail = 2; } else if (*s < 0xF8) { mask = (*s & 0x07) ? 0 : 0x30; rv = APREQ_CHARSET_UTF8; trail = 3; } else if (*s < 0xFC) { mask = (*s & 0x03) ? 0 : 0x38; rv = APREQ_CHARSET_UTF8; trail = 4; } else if (*s < 0xFE) { mask = (*s & 0x01) ? 0 : 0x3C; rv = APREQ_CHARSET_UTF8; trail = 5; } else { rv = APREQ_CHARSET_UTF8; } } return trail ? saw_cntrl ? APREQ_CHARSET_CP1252 : APREQ_CHARSET_LATIN1 : rv; } static APR_INLINE apr_uint16_t hex4_to_bmp(const char *what) { register apr_uint16_t digit = 0; #if !APR_CHARSET_EBCDIC digit = (what[0] >= 'A' ? ((what[0] & 0xDF)-'A') + 10 : (what[0]-'0')); digit *= 16; digit += (what[1] >= 'A' ? ((what[1] & 0xDF)-'A') + 10 : (what[1]-'0')); digit *= 16; digit += (what[2] >= 'A' ? ((what[2] & 0xDF)-'A') + 10 : (what[2]-'0')); digit *= 16; digit += (what[3] >= 'A' ? ((what[3] & 0xDF)-'A') + 10 : (what[3]-'0')); #else /*APR_CHARSET_EBCDIC*/ char xstr[7]; xstr[0]='0'; xstr[1]='x'; xstr[2]=what[0]; xstr[3]=what[1]; xstr[4]=what[2]; xstr[5]=what[3]; xstr[6]='\0'; digit = apr_xlate_conv_byte(ap_hdrs_from_ascii, 0xFFFF & strtol(xstr, NULL, 16)); #endif /*APR_CHARSET_EBCDIC*/ return (digit); } static apr_status_t url_decode(char *dest, apr_size_t *dlen, const char *src, apr_size_t *slen) { register const char *s = src; unsigned char *start = (unsigned char *)dest; register unsigned char *d = (unsigned char *)dest; const char *end = src + *slen; for (; s < end; ++d, ++s) { switch (*s) { case '+': *d = ' '; break; case '%': if (s + 2 < end && apr_isxdigit(s[1]) && apr_isxdigit(s[2])) { *d = hex2_to_char(s + 1); s += 2; } else if (s + 5 < end && (s[1] == 'u' || s[1] == 'U') && apr_isxdigit(s[2]) && apr_isxdigit(s[3]) && apr_isxdigit(s[4]) && apr_isxdigit(s[5])) { apr_uint16_t c = hex4_to_bmp(s+2); if (c < 0x80) { *d = c; } else if (c < 0x800) { *d++ = 0xC0 | (c >> 6); *d = 0x80 | (c & 0x3F); } else { *d++ = 0xE0 | (c >> 12); *d++ = 0x80 | ((c >> 6) & 0x3F); *d = 0x80 | (c & 0x3F); } s += 5; } else { *dlen = d - start; *slen = s - src; if (s + 5 < end || (s + 2 < end && !apr_isxdigit(s[2])) || (s + 1 < end && !apr_isxdigit(s[1]) && s[1] != 'u' && s[1] != 'U')) { *d = 0; return APREQ_ERROR_BADSEQ; } memmove(d, s, end - s); d[end - s] = 0; return APR_INCOMPLETE; } break; default: if (*s > 0) { *d = *s; } else { *d = 0; *dlen = d - start; *slen = s - src; return APREQ_ERROR_BADCHAR; } } } *d = 0; *dlen = d - start; *slen = s - src; return APR_SUCCESS; } APREQ_DECLARE(apr_status_t) apreq_decode(char *d, apr_size_t *dlen, const char *s, apr_size_t slen) { apr_size_t len = 0; const char *end = s + slen; if (s == (const char *)d) { /* optimize for src = dest case */ for ( ; d < end; ++d) { if (*d == '%' || *d == '+') break; else if (*d == 0) { *dlen = (const char *)d - s; return APREQ_ERROR_BADCHAR; } } len = (const char *)d - s; s = (const char *)d; slen -= len; } return url_decode(d, dlen, s, &slen); } APREQ_DECLARE(apr_status_t) apreq_decodev(char *d, apr_size_t *dlen, struct iovec *v, int nelts) { apr_status_t status = APR_SUCCESS; int n = 0; *dlen = 0; while (n < nelts) { apr_size_t slen, len; slen = v[n].iov_len; switch (status = url_decode(d, &len, v[n].iov_base, &slen)) { case APR_SUCCESS: d += len; *dlen += len; ++n; continue; case APR_INCOMPLETE: d += len; *dlen += len; slen = v[n].iov_len - slen; if (++n == nelts) { return status; } memcpy(d + slen, v[n].iov_base, v[n].iov_len); v[n].iov_len += slen; v[n].iov_base = d; continue; default: *dlen += len; return status; } } return status; } APREQ_DECLARE(apr_size_t) apreq_encode(char *dest, const char *src, const apr_size_t slen) { char *d = dest; const unsigned char *s = (const unsigned char *)src; unsigned char c; for ( ; s < (const unsigned char *)src + slen; ++s) { c = *s; if ( c < 0x80 && (apr_isalnum(c) || c == '-' || c == '.' || c == '_' || c == '~') ) *d++ = c; else if ( c == ' ' ) *d++ = '+'; else { #if APR_CHARSET_EBCDIC c = apr_xlate_conv_byte(ap_hdrs_to_ascii, (unsigned char)c); #endif *d++ = '%'; *d++ = c2x_table[c >> 4]; *d++ = c2x_table[c & 0xf]; } } *d = 0; return d - dest; } static int is_quoted(const char *p, const apr_size_t len) { if (len > 1 && p[0] == '"' && p[len-1] == '"') { apr_size_t i; int backslash = 0; for (i = 1; i < len - 1; i++) { if (p[i] == '\\') backslash = !backslash; else if (p[i] == 0 || (p[i] == '"' && !backslash)) return 0; else backslash = 0; } return !backslash; } return 0; } APREQ_DECLARE(apr_size_t) apreq_quote_once(char *dest, const char *src, const apr_size_t slen) { if (is_quoted(src, slen)) { /* looks like src is already quoted */ memcpy(dest, src, slen); dest[slen] = 0; return slen; } else return apreq_quote(dest, src, slen); } APREQ_DECLARE(apr_size_t) apreq_quote(char *dest, const char *src, const apr_size_t slen) { char *d = dest; const char *s = src; const char *const last = src + slen - 1; if (slen == 0) { *d = 0; return 0; } *d++ = '"'; while (s <= last) { switch (*s) { case 0: *d++ = '\\'; *d++ = '0'; s++; break; case '\\': case '"': *d++ = '\\'; default: *d++ = *s++; } } *d++ = '"'; *d = 0; return d - dest; } APREQ_DECLARE(char *) apreq_join(apr_pool_t *p, const char *sep, const apr_array_header_t *arr, apreq_join_t mode) { apr_size_t len, slen; char *rv; const apreq_value_t **a = (const apreq_value_t **)arr->elts; char *d; const int n = arr->nelts; int j; slen = sep ? strlen(sep) : 0; if (n == 0) return apr_pstrdup(p, ""); for (j=0, len=0; j < n; ++j) len += a[j]->dlen + slen + 1; /* Allocated the required space */ switch (mode) { case APREQ_JOIN_ENCODE: len += 2 * len; break; case APREQ_JOIN_QUOTE: len = 2 * (len + n); break; case APREQ_JOIN_AS_IS: case APREQ_JOIN_DECODE: /* nothing special required, just here to keep noisy compilers happy */ break; } rv = apr_palloc(p, len); /* Pass two --- copy the argument strings into the result space */ d = rv; switch (mode) { case APREQ_JOIN_ENCODE: d += apreq_encode(d, a[0]->data, a[0]->dlen); for (j = 1; j < n; ++j) { memcpy(d, sep, slen); d += slen; d += apreq_encode(d, a[j]->data, a[j]->dlen); } break; case APREQ_JOIN_DECODE: if (apreq_decode(d, &len, a[0]->data, a[0]->dlen)) return NULL; else d += len; for (j = 1; j < n; ++j) { memcpy(d, sep, slen); d += slen; if (apreq_decode(d, &len, a[j]->data, a[j]->dlen)) return NULL; else d += len; } break; case APREQ_JOIN_QUOTE: d += apreq_quote_once(d, a[0]->data, a[0]->dlen); for (j = 1; j < n; ++j) { memcpy(d, sep, slen); d += slen; d += apreq_quote_once(d, a[j]->data, a[j]->dlen); } break; case APREQ_JOIN_AS_IS: memcpy(d,a[0]->data, a[0]->dlen); d += a[0]->dlen; for (j = 1; j < n ; ++j) { memcpy(d, sep, slen); d += slen; memcpy(d, a[j]->data, a[j]->dlen); d += a[j]->dlen; } break; } *d = 0; return rv; } /* * This is intentionally not apr_file_writev() * note, this is iterative and not recursive */ APR_INLINE static apr_status_t apreq_fwritev(apr_file_t *f, struct iovec *v, int *nelts, apr_size_t *bytes_written) { apr_size_t len; int n; apr_status_t s; *bytes_written = 0; while (1) { /* try to write */ s = apr_file_writev(f, v, *nelts, &len); *bytes_written += len; if (s != APR_SUCCESS) return s; /* see how far we've come */ n = 0; #ifdef SOLARIS2 # ifdef __GNUC__ /* * iovec.iov_len is a long here * which causes a comparison between * signed(long) and unsigned(apr_size_t) * */ while (n < *nelts && len >= (apr_size_t)v[n].iov_len) # else /* * Sun C however defines this as size_t which is unsigned * */ while (n < *nelts && len >= v[n].iov_len) # endif /* !__GNUC__ */ #else /* * Hopefully everything else does this * (this was the default for years) */ while (n < *nelts && len >= v[n].iov_len) #endif len -= v[n++].iov_len; if (n == *nelts) { /* nothing left to write, report success */ *nelts = 0; return APR_SUCCESS; } /* incomplete write: must shift v */ v[n].iov_len -= len; v[n].iov_base = (char *)(v[n].iov_base) + len; if (n > 0) { /* we're satisfied for now if we can remove one iovec from the "v" array */ (*nelts) -= n; memmove(v, v + n, sizeof(*v) * *nelts); return APR_SUCCESS; } /* we're still in the first iovec - check for endless loop, and then try again */ if (len == 0) return APREQ_ERROR_GENERAL; } } struct cleanup_data { const char *fname; apr_pool_t *pool; }; static apr_status_t apreq_file_cleanup(void *d) { struct cleanup_data *data = d; return apr_file_remove(data->fname, data->pool); } /* * The reason we need the above cleanup is because on Windows, APR_DELONCLOSE * forces applications to open the file with FILE_SHARED_DELETE * set, which is, unfortunately, a property that is preserved * across NTFS "hard" links. This breaks apps that link() the temp * file to a permanent location, and subsequently expect to open it * before the original tempfile is closed+deleted. In fact, even * Apache::Upload does this, so it is a common enough event that the * apreq_file_cleanup workaround is necessary. */ APREQ_DECLARE(apr_status_t) apreq_file_mktemp(apr_file_t **fp, apr_pool_t *pool, const char *path) { apr_status_t rc; char *tmpl; struct cleanup_data *data; apr_int32_t flag; if (path == NULL) { rc = apr_temp_dir_get(&path, pool); if (rc != APR_SUCCESS) return rc; } rc = apr_filepath_merge(&tmpl, path, "apreqXXXXXX", APR_FILEPATH_NOTRELATIVE, pool); if (rc != APR_SUCCESS) return rc; data = apr_palloc(pool, sizeof *data); /* cleanups are LIFO, so this one will run just after the cleanup set by mktemp */ apr_pool_cleanup_register(pool, data, apreq_file_cleanup, apreq_file_cleanup); /* NO APR_DELONCLOSE! see comment above */ flag = APR_CREATE | APR_READ | APR_WRITE | APR_EXCL | APR_BINARY; rc = apr_file_mktemp(fp, tmpl, flag, pool); if (rc == APR_SUCCESS) { apr_file_name_get(&data->fname, *fp); data->pool = pool; } else { apr_pool_cleanup_kill(pool, data, apreq_file_cleanup); } return rc; } #define IS_SPACE_CHAR(c) ((c) == '\t' || (c) == ' ') #define IS_TOKEN_CHAR(c) (apr_isalnum(c) \ || ((c) && strchr("!#$%&'*+-.^_`|~", (c)))) APREQ_DECLARE(apr_status_t) apreq_header_attribute(const char *hdr, const char *name, const apr_size_t nlen, const char **val, apr_size_t *vlen) { int done = 0; if (!nlen) return APREQ_ERROR_NOATTR; do { const char *hde, *v; apr_size_t tail = 0; int name_is_token = 1; /* Parse the name => [hdr:hde[ */ hde = hdr; look_for_end_name: switch (*hde) { case 0: case '\r': case '\n': done = 1; case '=': case ';': case ',': v = hde; hde -= tail; break; case ' ': case '\t': if (hde == hdr) ++hdr; else ++tail; ++hde; goto look_for_end_name; default: /* No control chars */ if (apr_iscntrl(*hde)) return APREQ_ERROR_BADCHAR; /* Nothing after the tail */ if (tail) return APREQ_ERROR_BADATTR; /* Mark non-token for the name=value case */ if (!IS_TOKEN_CHAR(*hde)) name_is_token = 0; ++hde; goto look_for_end_name; } /* Parse the value => (*val, *vlen) */ if (*v == '=') { if (hde == hdr) { /* The name can't be empty */ return APREQ_ERROR_BADATTR; } if (!name_is_token) { /* The name must be a token in a name=value pair */ return APREQ_ERROR_BADCHAR; } ++v; while (IS_SPACE_CHAR(*v)) ++v; /* Quoted string ? */ if (*v == '"') { *val = ++v; /* XXX: the interface does not permit unescaping, * it should have pool to allocate from. * The caller can't know whether a returned '\\' is * a quoted-char or not.. */ look_for_end_quote: switch (*v) { case 0: case '\r': case '\n': return APREQ_ERROR_BADSEQ; case '"': *vlen = v - *val; ++v; break; case '\\': if (v[1] != 0) ++v; ++v; goto look_for_end_quote; default: if (apr_iscntrl(*v)) return APREQ_ERROR_BADCHAR; ++v; goto look_for_end_quote; } look_for_after_quote: switch (*v) { case 0: case '\r': case '\n': done = 1; case ';': case ',': break; case ' ': case '\t': ++v; goto look_for_after_quote; default: if (apr_iscntrl(*v)) return APREQ_ERROR_BADCHAR; return APREQ_ERROR_BADSEQ; } } else { *val = v; tail = 0; look_for_end_value: switch (*v) { case 0: case '\r': case '\n': done = 1; case ';': case ',': *vlen = v - *val - tail; break; case ' ': case '\t': if (*val == v) ++*val; else ++tail; ++v; goto look_for_end_value; default: if (apr_iscntrl(*v)) return APREQ_ERROR_BADCHAR; ++v; tail = 0; goto look_for_end_value; } } } else { *val = NULL; *vlen = 0; } if (hdr + nlen == hde && strncasecmp(hdr, name, nlen) == 0) { return APR_SUCCESS; } hdr = v + 1; } while (!done); return APREQ_ERROR_NOATTR; } #define BUCKET_IS_SPOOL(e) ((e)->type == &spool_bucket_type) #define FILE_BUCKET_LIMIT ((apr_size_t)-1 - 1) static void spool_bucket_destroy(void *data) { apr_bucket_type_file.destroy(data); } static apr_status_t spool_bucket_read(apr_bucket *e, const char **str, apr_size_t *len, apr_read_type_e block) { return apr_bucket_type_file.read(e, str, len, block); } static apr_status_t spool_bucket_setaside(apr_bucket *data, apr_pool_t *reqpool) { return apr_bucket_type_file.setaside(data, reqpool); } static apr_status_t spool_bucket_split(apr_bucket *a, apr_size_t point) { apr_status_t rv = apr_bucket_shared_split(a, point); a->type = &apr_bucket_type_file; return rv; } static apr_status_t spool_bucket_copy(apr_bucket *e, apr_bucket **c) { apr_status_t rv = apr_bucket_shared_copy(e, c); (*c)->type = &apr_bucket_type_file; return rv; } static const apr_bucket_type_t spool_bucket_type = { "APREQ_SPOOL", 5, APR_BUCKET_DATA, spool_bucket_destroy, spool_bucket_read, spool_bucket_setaside, spool_bucket_split, spool_bucket_copy, }; APREQ_DECLARE(apr_file_t *)apreq_brigade_spoolfile(apr_bucket_brigade *bb) { apr_bucket *last; last = APR_BRIGADE_LAST(bb); if (BUCKET_IS_SPOOL(last)) return ((apr_bucket_file *)last->data)->fd; return NULL; } APREQ_DECLARE(apr_status_t) apreq_brigade_concat(apr_pool_t *pool, const char *temp_dir, apr_size_t heap_limit, apr_bucket_brigade *out, apr_bucket_brigade *in) { apr_status_t s; apr_bucket_file *f; apr_off_t wlen; apr_file_t *file; apr_off_t in_len, out_len; apr_bucket *last_in, *last_out; last_out = APR_BRIGADE_LAST(out); if (APR_BUCKET_IS_EOS(last_out)) return APR_EOF; s = apr_brigade_length(out, 0, &out_len); if (s != APR_SUCCESS) return s; /* This cast, when out_len = -1, is intentional */ if ((apr_uint64_t)out_len < heap_limit) { s = apr_brigade_length(in, 0, &in_len); if (s != APR_SUCCESS) return s; /* This cast, when in_len = -1, is intentional */ if ((apr_uint64_t)in_len < heap_limit - (apr_uint64_t)out_len) { APR_BRIGADE_CONCAT(out, in); return APR_SUCCESS; } } if (!BUCKET_IS_SPOOL(last_out)) { s = apreq_file_mktemp(&file, pool, temp_dir); if (s != APR_SUCCESS) return s; s = apreq_brigade_fwrite(file, &wlen, out); if (s != APR_SUCCESS) return s; apr_brigade_cleanup(out); last_out = apr_bucket_file_create(file, 0, wlen, out->p, out->bucket_alloc); last_out->type = &spool_bucket_type; APR_BRIGADE_INSERT_TAIL(out, last_out); f = last_out->data; } else { f = last_out->data; /* Need to seek here, just in case our spool bucket * was read from between apreq_brigade_concat calls. */ wlen = last_out->start + last_out->length; s = apr_file_seek(f->fd, APR_SET, &wlen); if (s != APR_SUCCESS) return s; } if (in == out) return APR_SUCCESS; last_in = APR_BRIGADE_LAST(in); if (APR_BUCKET_IS_EOS(last_in)) APR_BUCKET_REMOVE(last_in); s = apreq_brigade_fwrite(f->fd, &wlen, in); if (s == APR_SUCCESS) { /* We have to deal with the possibility that the new * data may be too large to be represented by a single * temp_file bucket. */ while ((apr_uint64_t)wlen > FILE_BUCKET_LIMIT - last_out->length) { apr_bucket *e; apr_bucket_copy(last_out, &e); e->length = 0; e->start = last_out->start + FILE_BUCKET_LIMIT; wlen -= FILE_BUCKET_LIMIT - last_out->length; last_out->length = FILE_BUCKET_LIMIT; /* Copying makes the bucket types exactly the * opposite of what we need here. */ last_out->type = &apr_bucket_type_file; e->type = &spool_bucket_type; APR_BRIGADE_INSERT_TAIL(out, e); last_out = e; } last_out->length += wlen; if (APR_BUCKET_IS_EOS(last_in)) APR_BRIGADE_INSERT_TAIL(out, last_in); } else if (APR_BUCKET_IS_EOS(last_in)) APR_BRIGADE_INSERT_TAIL(in, last_in); apr_brigade_cleanup(in); return s; } APREQ_DECLARE(apr_status_t) apreq_brigade_fwrite(apr_file_t *f, apr_off_t *wlen, apr_bucket_brigade *bb) { struct iovec v[APREQ_DEFAULT_NELTS]; apr_status_t s; apr_bucket *e, *first; int n = 0; apr_bucket_brigade *tmp = bb; *wlen = 0; if (BUCKET_IS_SPOOL(APR_BRIGADE_LAST(bb))) { tmp = apr_brigade_create(bb->p, bb->bucket_alloc); s = apreq_brigade_copy(tmp, bb); if (s != APR_SUCCESS) return s; } for (e = APR_BRIGADE_FIRST(tmp); e != APR_BRIGADE_SENTINEL(tmp); e = APR_BUCKET_NEXT(e)) { apr_size_t len; if (n == APREQ_DEFAULT_NELTS) { s = apreq_fwritev(f, v, &n, &len); if (s != APR_SUCCESS) return s; if (tmp != bb) { while ((first = APR_BRIGADE_FIRST(tmp)) != e) apr_bucket_delete(first); } *wlen += len; } s = apr_bucket_read(e, (const char **)&(v[n].iov_base), &len, APR_BLOCK_READ); if (s != APR_SUCCESS) return s; v[n++].iov_len = len; } while (n > 0) { apr_size_t len; s = apreq_fwritev(f, v, &n, &len); if (s != APR_SUCCESS) return s; *wlen += len; if (tmp != bb) { while ((first = APR_BRIGADE_FIRST(tmp)) != e) apr_bucket_delete(first); } } return APR_SUCCESS; } libapreq2-2.17/library/version.c0000644000175000017500000000233014277401734016240 0ustar jortonjorton/* ** Licensed to the Apache Software Foundation (ASF) under one or more ** contributor license agreements. See the NOTICE file distributed with ** this work for additional information regarding copyright ownership. ** The ASF licenses this file to You under the Apache License, Version 2.0 ** (the "License"); you may not use this file except in compliance with ** the License. You may obtain a copy of the License at ** ** http://www.apache.org/licenses/LICENSE-2.0 ** ** Unless required by applicable law or agreed to in writing, software ** distributed under the License is distributed on an "AS IS" BASIS, ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. ** See the License for the specific language governing permissions and ** limitations under the License. */ #include "apreq_version.h" #include "apr_general.h" /* for APR_STRINGIFY */ APREQ_DECLARE(void) apreq_version(apr_version_t *pvsn) { pvsn->major = APREQ_MAJOR_VERSION; pvsn->minor = APREQ_MINOR_VERSION; pvsn->patch = APREQ_PATCH_VERSION; #ifdef APREQ_IS_DEV_VERSION pvsn->is_dev = 1; #else pvsn->is_dev = 0; #endif } APREQ_DECLARE(const char *) apreq_version_string(void) { return APREQ_VERSION_STRING; } libapreq2-2.17/LICENSE0000644000175000017500000002613614277401734013762 0ustar jortonjorton Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION 1. Definitions. "License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document. "Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License. "Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. "You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License. "Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files. "Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types. "Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below). "Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof. "Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "submitted" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution." "Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work. 2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form. 3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed. 4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions: (a) You must give any other recipients of the Work or Derivative Works a copy of this License; and (b) You must cause any modified files to carry prominent notices stating that You changed the files; and (c) You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and (d) If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License. 5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions. 6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file. 7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License. 8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages. 9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. END OF TERMS AND CONDITIONS APPENDIX: How to apply the Apache License to your work. To apply the Apache License to your work, attach the following boilerplate notice, with the fields enclosed by brackets "[]" replaced with your own identifying information. (Don't include the brackets!) The text should be enclosed in the appropriate comment syntax for the file format. We also recommend that a file or class name and description of purpose be included on the same "printed page" as the copyright notice for easier identification within third-party archives. Copyright [yyyy] [name of copyright owner] Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. libapreq2-2.17/ltmain.sh0000644000175000017500000121201014277402426014561 0ustar jortonjorton#! /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 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='eval 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. # We should try to minimise forks, especially on Windows where they are # unreasonably slow, so skip the feature probes when bash or zsh are # being used: if test set = "${BASH_VERSION+set}${ZSH_VERSION+set}"; then : ${_G_HAVE_ARITH_OP="yes"} : ${_G_HAVE_XSI_OPS="yes"} # The += operator was introduced in bash 3.1 case $BASH_VERSION in [12].* | 3.0 | 3.0*) ;; *) : ${_G_HAVE_PLUSEQ_OP="yes"} ;; esac fi # _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. test -z "$_G_HAVE_PLUSEQ_OP" \ && (eval 'x=a; x+=" b"; test "a b" = "$x"') 2>/dev/null \ && _G_HAVE_PLUSEQ_OP=yes 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 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 (GNU libtool) 2.4.7 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=: # 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" # Keeping compiler generated duplicates in $postdeps and $predeps is not # harmful, and is necessary in a majority of systems that use it to satisfy # symbol dependencies. opt_duplicate_compiler_generated_deps=: $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 # -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=*|-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% $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" elif test prog != "$linkmode" && test lib != "$linkmode"; then func_fatal_error "'$lib' is not a convenience library" fi 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 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 ;; 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: libapreq2-2.17/Makefile.am0000644000175000017500000001217414277401734015006 0ustar jortonjorton# The following is a trick to get CPAN clients to follow prerequisites: # # PREREQ_PM # # --- MakeMaker post_initialize section: AUTOMAKE_OPTIONS = foreign SUBDIRS = . include library module glue EXTRA_DIST = LICENSE NOTICE README INSTALL CHANGES STATUS FAQ.pod MANIFEST.SKIP Makefile.PL buildconf build win32 docs libapreq.rc APU_SRCDIR=`@APU_CONFIG@ --srcdir` APR_SRCDIR=`@APR_CONFIG@ --srcdir` APU_DOX = (cd $(APU_SRCDIR); cat docs/doxygen.conf - | doxygen -) APR_DOX = (cd $(APR_SRCDIR); cat docs/doxygen.conf - | doxygen -) SED_BODY_TAG= s(^[\S\s]+[\S\s]+$$)()gi, \ s(href="/Apache2(?:/\w+)*/([^/]+).html")(href="group__apreq__xs__\L$$1.html")g, \ s(href="/APR/Request/Param/(?:Table|Cookie).html")(href="group__apreq__xs__apr__request.html")g, \ s(href="/APR/Request.html")(href="group__apreq__xs__apr__request.html")g, \ s(href="/APR/Request/([^/]+).html")(href="group__apreq__xs__apr__request__\L$$1.html")g, \ s(href="/APR/Brigade.html")(href="http://apr.apache.org/docs/apr-util/$(APU_DOC_VERSION)/apr__buckets_8h.html")g, \ s(href="/APR/([^/]+).html")(href="http://apr.apache.org/docs/apr/$(APR_DOC_VERSION)/apr__\L$$1s_8h.html")g EUM=ExtUtils::Manifest PM_DIR=glue/perl/lib/Apache2 XS_DIR=glue/perl/xsbuilder/APR bin_SCRIPTS = apreq2-config CLEANFILES = $(bin_SCRIPTS) POD2HTML = @PERL@ -MPod::Html -wle 'pod2html @ARGV' if BUILD_PERL_GLUE PERL_TEST = perl_test else PERL_TEST = endif TAR=@TAR@ release: distclean docs_clean reconfig distdir @PERL@ build/version_check.pl > $(distdir)/PREREQUISITES @PERL@ build/version_check.pl -version=@PACKAGE_VERSION@ > $(distdir)/META.yml echo MANIFEST > $(distdir)/MANIFEST @cd $(distdir); @PERL@ -M$(EUM) -e "$(EUM)::mkmanifest" @PERL@ -ple '$$_="$(distdir)/$$_"' $(distdir)/MANIFEST | $(TAR) -czf $(distdir).tar.gz -T - rm -rf $(distdir) @sha256sum $(distdir).tar.gz > $(distdir).tar.gz.sha256 @sha512sum $(distdir).tar.gz > $(distdir).tar.gz.sha512 @echo "Made $(distdir).tar.gz and hashes" release_test: -rm -rf $(distdir) if [ ! -x $(TAR) ]; then echo "$(TAR) is not executable."; fi $(TAR) xzvf $(distdir).tar.gz @cd $(distdir); @PERL@ -M$(EUM) -e "die 'Bogus MANIFEST' if $(EUM)::manicheck" @cd $(distdir); @PERL@ Makefile.PL -apxs @APACHE2_APXS@ && $(MAKE) test rm -rf $(distdir) @echo "$(distdir).tar.gz is kosher." reconfig: ./buildconf.nice ./config.nice docs_clean: -rm -rf docs -rm -rf *.html pod2*.tmp docs: pod2html build/doxygen.conf apr_tags docs/html/feather.gif @PERL@ build/version_check.pl doxygen doxygen build/doxygen.conf docs_install: docs @$(NORMAL_INSTALL) $(mkinstalldirs) $(DESTDIR)$(pkgdatadir) cp *.html docs/html cp -R docs $(DESTDIR)$(pkgdatadir) %.html: $(POD_DIR)/%.pm Makefile.am ${POD2HTML} < $< | @PERL@ -0777 -pe '$(SED_BODY_TAG)' > $@ Apache2__Request.html: $(PM_DIR)/Request.pm ${POD2HTML} < $< | @PERL@ -0777 -pe '$(SED_BODY_TAG)' > $@ Apache2__Upload.html: $(PM_DIR)/Upload.pm ${POD2HTML} < $< | @PERL@ -0777 -pe '$(SED_BODY_TAG)' > $@ Apache2__Cookie.html: $(PM_DIR)/Cookie.pm ${POD2HTML} < $< | @PERL@ -0777 -pe '$(SED_BODY_TAG)' > $@ APR__Request.html: $(XS_DIR)/Request/Request.pod ${POD2HTML} < $< | @PERL@ -0777 -pe '$(SED_BODY_TAG)' > $@ APR__Request__Param.html: $(XS_DIR)/Request/Param/Param.pod ${POD2HTML} < $< | @PERL@ -0777 -pe '$(SED_BODY_TAG)' > $@ APR__Request__Cookie.html: $(XS_DIR)/Request/Cookie/Cookie.pod ${POD2HTML} < $< | @PERL@ -0777 -pe '$(SED_BODY_TAG)' > $@ APR__Request__Error.html: $(XS_DIR)/Request/Error/Error.pod ${POD2HTML} < $< | @PERL@ -0777 -pe '$(SED_BODY_TAG)' > $@ APR__Request__Apache2.html: $(XS_DIR)/Request/Apache2/Apache2.pod ${POD2HTML} < $< | @PERL@ -0777 -pe '$(SED_BODY_TAG)' > $@ APR__Request__CGI.html: $(XS_DIR)/Request/CGI/CGI.pod ${POD2HTML} < $< | @PERL@ -0777 -pe '$(SED_BODY_TAG)' > $@ FAQ.html: Makefile.am FAQ.pod ${POD2HTML} < FAQ.pod | @PERL@ -0777 -pe '$(SED_BODY_TAG)' > FAQ.html pod2html :: Apache2__Request.html Apache2__Cookie.html Apache2__Upload.html pod2html :: APR__Request.html APR__Request__Cookie.html pod2html :: APR__Request__Param.html APR__Request__Error.html pod2html :: APR__Request__Apache2.html APR__Request__CGI.html FAQ.html $(POD_DIR)/%.t: $(POD_DIR)/%.pod (cd glue/perl ; pod2test docs/$*.pod docs/$*.t) pod2test :: $(POD_DIR)/Request.t $(POD_DIR)/Cookie.t $(POD_DIR)/Upload.t $(POD_DIR)/Error.t $(POD_DIR)/Table.t apr_tags: docs/apr.tag docs/apu.tag docs/html/feather.gif: ${mkinstalldirs} docs ${mkinstalldirs} docs/html cp feather.gif docs/html docs/apu.tag: ${mkinstalldirs} docs echo GENERATE_TAGFILE=`pwd`/docs/apu.tag | $(APU_DOX) docs/apr.tag: ${mkinstalldirs} docs echo GENERATE_TAGFILE=`pwd`/docs/apr.tag | $(APR_DOX) test: all library_test module_test $(PERL_TEST) module_test: cd module; $(MAKE) test library_test: cd library; $(MAKE) test perl_install: cd glue/perl; $(MAKE) install perl_test: cd glue/perl; ../../libtool --mode=execute -dlopen ../../library/libapreq2.la $(MAKE) test perl_glue: cd glue/perl; @PERL@ ../../build/xsbuilder.pl run cd glue/perl; @PERL@ Makefile.PL -apxs @APACHE2_APXS@ cd glue/perl; $(MAKE) if BUILD_HTTPD install-exec-local: httpd_install httpd_install: cd @APACHE2_SRC@; $(MAKE) install endif libapreq2-2.17/Makefile.in0000644000175000017500000010353014277402431015007 0ustar jortonjorton# 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@ # The following is a trick to get CPAN clients to follow prerequisites: # # PREREQ_PM => { ExtUtils::XSBuilder=>q[0.23], Test::More=>q[0.47], mod_perl2=>q[1.999022], ExtUtils::MakeMaker=>q[6.15], Apache::Test=>q[1.04] } # # --- MakeMaker post_initialize section: 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)/acinclude.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) $(am__DIST_COMMON) am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \ configure.lineno config.status.lineno mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/include/apreq_config.h CONFIG_CLEAN_FILES = build/doxygen.conf apreq2-config CONFIG_CLEAN_VPATH_FILES = 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)$(bindir)" SCRIPTS = $(bin_SCRIPTS) 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 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) # 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)/apreq2-config.in \ $(top_srcdir)/build/doxygen.conf.in INSTALL README compile \ config.guess 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@ APACHE1_APXS = @APACHE1_APXS@ APACHE2_APXS = @APACHE2_APXS@ APACHE2_HTTPD = @APACHE2_HTTPD@ APACHE2_INCLUDES = @APACHE2_INCLUDES@ APACHE2_SRC = @APACHE2_SRC@ APREQ_CONFIG = @APREQ_CONFIG@ APREQ_DOTTED_VERSION = @APREQ_DOTTED_VERSION@ APREQ_LIBNAME = @APREQ_LIBNAME@ APREQ_LIBTOOL_VERSION = @APREQ_LIBTOOL_VERSION@ APREQ_MAJOR_VERSION = @APREQ_MAJOR_VERSION@ APR_CONFIG = @APR_CONFIG@ APR_DOC_VERSION = @APR_DOC_VERSION@ APR_INCLUDES = @APR_INCLUDES@ APR_LA = @APR_LA@ APR_LDFLAGS = @APR_LDFLAGS@ APR_LIBS = @APR_LIBS@ APR_LTFLAGS = @APR_LTFLAGS@ APU_CONFIG = @APU_CONFIG@ APU_DOC_VERSION = @APU_DOC_VERSION@ APU_LA = @APU_LA@ AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPPFLAGS = @CPPFLAGS@ CSCOPE = @CSCOPE@ CTAGS = @CTAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ 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@ GREP = @GREP@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ MM_OPTS = @MM_OPTS@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ 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@ PERL = @PERL@ PERL_OPTS = @PERL_OPTS@ RANLIB = @RANLIB@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ TAR = @TAR@ VERSION = @VERSION@ 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_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@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ 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@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ AUTOMAKE_OPTIONS = foreign SUBDIRS = . include library module glue EXTRA_DIST = LICENSE NOTICE README INSTALL CHANGES STATUS FAQ.pod MANIFEST.SKIP Makefile.PL buildconf build win32 docs libapreq.rc APU_SRCDIR = `@APU_CONFIG@ --srcdir` APR_SRCDIR = `@APR_CONFIG@ --srcdir` APU_DOX = (cd $(APU_SRCDIR); cat docs/doxygen.conf - | doxygen -) APR_DOX = (cd $(APR_SRCDIR); cat docs/doxygen.conf - | doxygen -) SED_BODY_TAG = s(^[\S\s]+[\S\s]+$$)()gi, \ s(href="/Apache2(?:/\w+)*/([^/]+).html")(href="group__apreq__xs__\L$$1.html")g, \ s(href="/APR/Request/Param/(?:Table|Cookie).html")(href="group__apreq__xs__apr__request.html")g, \ s(href="/APR/Request.html")(href="group__apreq__xs__apr__request.html")g, \ s(href="/APR/Request/([^/]+).html")(href="group__apreq__xs__apr__request__\L$$1.html")g, \ s(href="/APR/Brigade.html")(href="http://apr.apache.org/docs/apr-util/$(APU_DOC_VERSION)/apr__buckets_8h.html")g, \ s(href="/APR/([^/]+).html")(href="http://apr.apache.org/docs/apr/$(APR_DOC_VERSION)/apr__\L$$1s_8h.html")g EUM = ExtUtils::Manifest PM_DIR = glue/perl/lib/Apache2 XS_DIR = glue/perl/xsbuilder/APR bin_SCRIPTS = apreq2-config CLEANFILES = $(bin_SCRIPTS) POD2HTML = @PERL@ -MPod::Html -wle 'pod2html @ARGV' @BUILD_PERL_GLUE_FALSE@PERL_TEST = @BUILD_PERL_GLUE_TRUE@PERL_TEST = perl_test all: all-recursive .SUFFIXES: am--refresh: Makefile @: $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ echo ' cd $(srcdir) && $(AUTOMAKE) --foreign'; \ $(am__cd) $(srcdir) && $(AUTOMAKE) --foreign \ && exit 0; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign 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: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) $(am__cd) $(srcdir) && $(AUTOCONF) $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) $(am__cd) $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS) $(am__aclocal_m4_deps): build/doxygen.conf: $(top_builddir)/config.status $(top_srcdir)/build/doxygen.conf.in cd $(top_builddir) && $(SHELL) ./config.status $@ apreq2-config: $(top_builddir)/config.status $(srcdir)/apreq2-config.in cd $(top_builddir) && $(SHELL) ./config.status $@ install-binSCRIPTS: $(bin_SCRIPTS) @$(NORMAL_INSTALL) @list='$(bin_SCRIPTS)'; 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 \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ if test -f "$$d$$p"; then echo "$$d$$p"; echo "$$p"; else :; fi; \ done | \ sed -e 'p;s,.*/,,;n' \ -e 'h;s|.*|.|' \ -e 'p;x;s,.*/,,;$(transform)' | 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; \ if (++n[d] == $(am__install_max)) { \ print "f", d, files[d]; n[d] = 0; files[d] = "" } } \ else { print "f", d "/" $$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_SCRIPT) $$files '$(DESTDIR)$(bindir)$$dir'"; \ $(INSTALL_SCRIPT) $$files "$(DESTDIR)$(bindir)$$dir" || exit $$?; \ } \ ; done uninstall-binSCRIPTS: @$(NORMAL_UNINSTALL) @list='$(bin_SCRIPTS)'; test -n "$(bindir)" || exit 0; \ files=`for p in $$list; do echo "$$p"; done | \ sed -e 's,.*/,,;$(transform)'`; \ dir='$(DESTDIR)$(bindir)'; $(am__uninstall_files_from_dir) 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 $(SCRIPTS) installdirs: installdirs-recursive installdirs-am: for dir in "$(DESTDIR)$(bindir)"; 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: -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES) 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." @BUILD_HTTPD_FALSE@install-exec-local: clean: clean-recursive clean-am: clean-generic clean-libtool mostlyclean-am distclean: distclean-recursive -rm -f $(am__CONFIG_DISTCLEAN_FILES) -rm -f Makefile distclean-am: clean-am distclean-generic 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-binSCRIPTS install-exec-local 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: uninstall-binSCRIPTS .MAKE: $(am__recursive_targets) 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 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-libtool distclean-tags \ distcleancheck distdir distuninstallcheck dvi dvi-am html \ html-am info info-am install install-am install-binSCRIPTS \ install-data install-data-am install-dvi install-dvi-am \ install-exec install-exec-am install-exec-local 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-binSCRIPTS .PRECIOUS: Makefile release: distclean docs_clean reconfig distdir @PERL@ build/version_check.pl > $(distdir)/PREREQUISITES @PERL@ build/version_check.pl -version=@PACKAGE_VERSION@ > $(distdir)/META.yml echo MANIFEST > $(distdir)/MANIFEST @cd $(distdir); @PERL@ -M$(EUM) -e "$(EUM)::mkmanifest" @PERL@ -ple '$$_="$(distdir)/$$_"' $(distdir)/MANIFEST | $(TAR) -czf $(distdir).tar.gz -T - rm -rf $(distdir) @sha256sum $(distdir).tar.gz > $(distdir).tar.gz.sha256 @sha512sum $(distdir).tar.gz > $(distdir).tar.gz.sha512 @echo "Made $(distdir).tar.gz and hashes" release_test: -rm -rf $(distdir) if [ ! -x $(TAR) ]; then echo "$(TAR) is not executable."; fi $(TAR) xzvf $(distdir).tar.gz @cd $(distdir); @PERL@ -M$(EUM) -e "die 'Bogus MANIFEST' if $(EUM)::manicheck" @cd $(distdir); @PERL@ Makefile.PL -apxs @APACHE2_APXS@ && $(MAKE) test rm -rf $(distdir) @echo "$(distdir).tar.gz is kosher." reconfig: ./buildconf.nice ./config.nice docs_clean: -rm -rf docs -rm -rf *.html pod2*.tmp docs: pod2html build/doxygen.conf apr_tags docs/html/feather.gif @PERL@ build/version_check.pl doxygen doxygen build/doxygen.conf docs_install: docs @$(NORMAL_INSTALL) $(mkinstalldirs) $(DESTDIR)$(pkgdatadir) cp *.html docs/html cp -R docs $(DESTDIR)$(pkgdatadir) %.html: $(POD_DIR)/%.pm Makefile.am ${POD2HTML} < $< | @PERL@ -0777 -pe '$(SED_BODY_TAG)' > $@ Apache2__Request.html: $(PM_DIR)/Request.pm ${POD2HTML} < $< | @PERL@ -0777 -pe '$(SED_BODY_TAG)' > $@ Apache2__Upload.html: $(PM_DIR)/Upload.pm ${POD2HTML} < $< | @PERL@ -0777 -pe '$(SED_BODY_TAG)' > $@ Apache2__Cookie.html: $(PM_DIR)/Cookie.pm ${POD2HTML} < $< | @PERL@ -0777 -pe '$(SED_BODY_TAG)' > $@ APR__Request.html: $(XS_DIR)/Request/Request.pod ${POD2HTML} < $< | @PERL@ -0777 -pe '$(SED_BODY_TAG)' > $@ APR__Request__Param.html: $(XS_DIR)/Request/Param/Param.pod ${POD2HTML} < $< | @PERL@ -0777 -pe '$(SED_BODY_TAG)' > $@ APR__Request__Cookie.html: $(XS_DIR)/Request/Cookie/Cookie.pod ${POD2HTML} < $< | @PERL@ -0777 -pe '$(SED_BODY_TAG)' > $@ APR__Request__Error.html: $(XS_DIR)/Request/Error/Error.pod ${POD2HTML} < $< | @PERL@ -0777 -pe '$(SED_BODY_TAG)' > $@ APR__Request__Apache2.html: $(XS_DIR)/Request/Apache2/Apache2.pod ${POD2HTML} < $< | @PERL@ -0777 -pe '$(SED_BODY_TAG)' > $@ APR__Request__CGI.html: $(XS_DIR)/Request/CGI/CGI.pod ${POD2HTML} < $< | @PERL@ -0777 -pe '$(SED_BODY_TAG)' > $@ FAQ.html: Makefile.am FAQ.pod ${POD2HTML} < FAQ.pod | @PERL@ -0777 -pe '$(SED_BODY_TAG)' > FAQ.html pod2html :: Apache2__Request.html Apache2__Cookie.html Apache2__Upload.html pod2html :: APR__Request.html APR__Request__Cookie.html pod2html :: APR__Request__Param.html APR__Request__Error.html pod2html :: APR__Request__Apache2.html APR__Request__CGI.html FAQ.html $(POD_DIR)/%.t: $(POD_DIR)/%.pod (cd glue/perl ; pod2test docs/$*.pod docs/$*.t) pod2test :: $(POD_DIR)/Request.t $(POD_DIR)/Cookie.t $(POD_DIR)/Upload.t $(POD_DIR)/Error.t $(POD_DIR)/Table.t apr_tags: docs/apr.tag docs/apu.tag docs/html/feather.gif: ${mkinstalldirs} docs ${mkinstalldirs} docs/html cp feather.gif docs/html docs/apu.tag: ${mkinstalldirs} docs echo GENERATE_TAGFILE=`pwd`/docs/apu.tag | $(APU_DOX) docs/apr.tag: ${mkinstalldirs} docs echo GENERATE_TAGFILE=`pwd`/docs/apr.tag | $(APR_DOX) test: all library_test module_test $(PERL_TEST) module_test: cd module; $(MAKE) test library_test: cd library; $(MAKE) test perl_install: cd glue/perl; $(MAKE) install perl_test: cd glue/perl; ../../libtool --mode=execute -dlopen ../../library/libapreq2.la $(MAKE) test perl_glue: cd glue/perl; @PERL@ ../../build/xsbuilder.pl run cd glue/perl; @PERL@ Makefile.PL -apxs @APACHE2_APXS@ cd glue/perl; $(MAKE) @BUILD_HTTPD_TRUE@install-exec-local: httpd_install @BUILD_HTTPD_TRUE@httpd_install: @BUILD_HTTPD_TRUE@ cd @APACHE2_SRC@; $(MAKE) install # 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: libapreq2-2.17/Makefile.PL0000644000175000017500000000551614277401734014726 0ustar jortonjortonrequire 5.006; use strict; use warnings; use Getopt::Long qw(GetOptions); use Config; use constant PERL_PATH => $Config{perlpath}; # XXX use constant WIN32 => ($^O =~ /Win32/); sub test_prereq { system (PERL_PATH, "build/version_check.pl", @_) == 0 or warn "Please upgrade $_[0] first.\n"; } test_prereq perl => PERL_PATH; my %opts; undef @opts{qw(with-apache2-apxs with-apache1-apxs with-apache2-src with-perl with-apache2-httpd with-apr-config with-apu-config apxs with-expat with-mm-opts)}; undef @opts{qw(with-apache2)} if (WIN32); my @flags = qw/enable-maintainer-mode enable-perl-glue disable-perl-glue/; push @flags, qw/debug/ if (WIN32); my %args; # grab from @ARGV only the options that we expect GetOptions(\%args, (map "$_=s", keys %opts), @flags); $args{"with-perl"} = PERL_PATH; my $opts = ""; $opts .= "--enable-maintainer-mode " if $args{"enable-maintainer-mode"}; unless (exists $args{"disable-perl-glue"}) { $opts .= "--enable-perl-glue "; test_prereq "mod_perl2"; test_prereq "Apache::Test"; test_prereq "ExtUtils::MakeMaker"; test_prereq "ExtUtils::XSBuilder"; test_prereq "Test::More"; } $opts .= "--debug " if (WIN32 and $args{debug}); delete @args{@flags}; $args{"with-apache2-apxs"} = delete $args{apxs} if exists $args{apxs} and not exists $args{"with-apache2-apxs"}; $args{"with-apache2-apxs"} ||= eval { require Apache2::Build; Apache2::Build->build_config->{MP_APXS}; }; $args{"with-perl-opts"} = "@ARGV" if @ARGV; if (WIN32) { require File::Basename; require File::Spec; unless ($args{'with-apache2'}) { my @candidates = qw(with-apache2-apxs with-apache2-httpd with-apr-config with-apu-config); foreach my $opt(@candidates) { my $c = delete $args{$opt}; next unless $c; (my $dir = File::Basename::dirname($c)) =~ s{(\\|/)bin}{}; if (-d $dir) { $args{'with-apache2'} = $dir; last; } } unless ($args{'with-apache2'}) { my $mp_ap_prefix = eval { Apache2::Build->build_config->{MP_AP_PREFIX}; }; if ($mp_ap_prefix and -d $mp_ap_prefix) { $args{'with-apache2'} = $mp_ap_prefix; } } } unless (defined $args{'with-apache2-apxs'}) { $args{'with-apache2-apxs'} = File::Spec->catfile($args{'with-apache2'}, 'bin', 'apxs.bat'); } my @opts = map{qq/--$_="$args{$_}"/} keys %args; push @opts, (split ' ', $opts); my @args = (PERL_PATH, 'win32/Configure.pl', @opts); print "@args\n"; system(@args) == 0 or die "system @args failed: $?"; } else { $opts .= join " ", map {qq/--$_="$args{$_}"/} keys %args; my $cmd = "./configure $opts"; print "$cmd\n"; exec $cmd; } libapreq2-2.17/MANIFEST0000644000175000017500000002222014277402434014072 0ustar jortonjortonacinclude.m4 aclocal.m4 apreq2-config.in build/announcement.pl build/dox.css build/dox.foot build/dox.head build/doxygen.conf build/doxygen.conf.in build/get-version.sh build/RELEASE build/update_version.pl build/version_check.pl build/WEBSITE build/xsbuilder.pl buildconf CHANGES compile config.guess config.sub configure configure.ac depcomp docs/apr.tag docs/apreq2.tag docs/apu.tag docs/html/annotated.html docs/html/apreq_8h.html docs/html/apreq_8h_source.html docs/html/apreq__cookie_8h.html docs/html/apreq__cookie_8h_source.html docs/html/apreq__error_8h.html docs/html/apreq__error_8h_source.html docs/html/apreq__module_8h.html docs/html/apreq__module_8h_source.html docs/html/apreq__module__apache2_8h_source.html docs/html/apreq__module__apache_8h_source.html docs/html/apreq__param_8h.html docs/html/apreq__param_8h_source.html docs/html/apreq__parser_8h.html docs/html/apreq__parser_8h_source.html docs/html/apreq__util_8h.html docs/html/apreq__util_8h_source.html docs/html/apreq__version_8h.html docs/html/apreq__version_8h_source.html docs/html/apreq_faq.html docs/html/apreq_install.html docs/html/apreq_license.html docs/html/apreq_notice.html docs/html/bc_s.png docs/html/bdwn.png docs/html/classes.html docs/html/closed.png docs/html/dir_a7b0466279106ea0b8f86f609f621680.html docs/html/dir_b9a38c20fd386f968f52d9fe1a11fa5c.html docs/html/dir_cdd8a03ded30941fff17be6eb886221f.html docs/html/dir_d44c64559bbebec7f509842c48db8b23.html docs/html/doc.png docs/html/dox.css docs/html/doxygen.svg docs/html/dynsections.js docs/html/examples.html docs/html/feather.gif docs/html/files.html docs/html/folderclosed.png docs/html/folderopen.png docs/html/functions.html docs/html/functions_vars.html docs/html/globals.html docs/html/globals_defs.html docs/html/globals_enum.html docs/html/globals_eval.html docs/html/globals_func.html docs/html/globals_type.html docs/html/group__apreq__lang.html docs/html/group__apreq__module.html docs/html/group__apreq__xs.html docs/html/group__apreq__xs__apr__request.html docs/html/group__apreq__xs__apr__request__apache2.html docs/html/group__apreq__xs__apr__request__cgi.html docs/html/group__apreq__xs__apr__request__cookie.html docs/html/group__apreq__xs__apr__request__error.html docs/html/group__apreq__xs__apr__request__param.html docs/html/group__apreq__xs__cookie.html docs/html/group__apreq__xs__request.html docs/html/group__apreq__xs__upload.html docs/html/group__libapreq2.html docs/html/group__mod__apreq2.html docs/html/index.html docs/html/jquery.js docs/html/menu.js docs/html/menudata.js docs/html/modules.html docs/html/nav_f.png docs/html/nav_g.png docs/html/nav_h.png docs/html/open.png docs/html/pages.html docs/html/splitbar.png docs/html/structapreq__cookie__t.html docs/html/structapreq__handle__t.html docs/html/structapreq__hook__find__param__ctx__t.html docs/html/structapreq__hook__t.html docs/html/structapreq__module__t.html docs/html/structapreq__param__t.html docs/html/structapreq__parser__t.html docs/html/structapreq__value__t.html docs/html/sync_off.png docs/html/sync_on.png docs/html/tab_a.png docs/html/tab_b.png docs/html/tab_h.png docs/html/tab_s.png docs/html/tabs.css docs/html/todo.html docs/man/man3/apreq.h.3 docs/man/man3/apreq_cookie.h.3 docs/man/man3/apreq_cookie_t.3 docs/man/man3/apreq_error.h.3 docs/man/man3/apreq_faq.3 docs/man/man3/apreq_handle_t.3 docs/man/man3/apreq_hook_find_param_ctx_t.3 docs/man/man3/apreq_hook_t.3 docs/man/man3/apreq_install.3 docs/man/man3/apreq_lang.3 docs/man/man3/apreq_license.3 docs/man/man3/apreq_module.3 docs/man/man3/apreq_module.h.3 docs/man/man3/apreq_module_t.3 docs/man/man3/apreq_notice.3 docs/man/man3/apreq_param.h.3 docs/man/man3/apreq_param_t.3 docs/man/man3/apreq_parser.h.3 docs/man/man3/apreq_parser_t.3 docs/man/man3/apreq_util.h.3 docs/man/man3/apreq_value_t.3 docs/man/man3/apreq_version.h.3 docs/man/man3/apreq_xs.3 docs/man/man3/apreq_xs_apr_request.3 docs/man/man3/apreq_xs_apr_request_apache2.3 docs/man/man3/apreq_xs_apr_request_cgi.3 docs/man/man3/apreq_xs_apr_request_cookie.3 docs/man/man3/apreq_xs_apr_request_error.3 docs/man/man3/apreq_xs_apr_request_param.3 docs/man/man3/apreq_xs_cookie.3 docs/man/man3/apreq_xs_request.3 docs/man/man3/apreq_xs_upload.3 docs/man/man3/libapreq2.3 docs/man/man3/mod_apreq2.3 docs/man/man3/todo.3 FAQ.pod glue/Makefile.am glue/Makefile.in glue/perl/lib/Apache2/Cookie.pm glue/perl/lib/Apache2/Request.pm glue/perl/lib/Apache2/Upload.pm glue/perl/lib/APR/Request/Magic.pm glue/perl/Makefile.PL glue/perl/README glue/perl/t/apreq/big_input.t glue/perl/t/apreq/cgi.t glue/perl/t/apreq/cookie.t glue/perl/t/apreq/cookie2.t glue/perl/t/apreq/inherit.t glue/perl/t/apreq/request.t glue/perl/t/apreq/upload.t glue/perl/t/conf/extra.conf.in glue/perl/t/response/TestAPI/cookie.pm glue/perl/t/response/TestAPI/error.pm glue/perl/t/response/TestAPI/module.pm glue/perl/t/response/TestAPI/param.pm glue/perl/t/response/TestApReq/big_input.pm glue/perl/t/response/TestApReq/cookie.pm glue/perl/t/response/TestApReq/cookie2.pm glue/perl/t/response/TestApReq/inherit.pm glue/perl/t/response/TestApReq/request.pm glue/perl/t/response/TestApReq/upload.pm glue/perl/t/TEST.PL glue/perl/xsbuilder/APR/Request/Apache2/Apache2.pm glue/perl/xsbuilder/APR/Request/Apache2/Apache2.pod glue/perl/xsbuilder/APR/Request/Apache2/Apache2.xs glue/perl/xsbuilder/APR/Request/Apache2/APR__Request__Apache2.h glue/perl/xsbuilder/APR/Request/APR__Request.h glue/perl/xsbuilder/APR/Request/CGI/CGI.pm glue/perl/xsbuilder/APR/Request/CGI/CGI.pod glue/perl/xsbuilder/APR/Request/CGI/CGI.xs glue/perl/xsbuilder/APR/Request/Cookie/APR__Request__Cookie.h glue/perl/xsbuilder/APR/Request/Cookie/Cookie.pm glue/perl/xsbuilder/APR/Request/Cookie/Cookie.pod glue/perl/xsbuilder/APR/Request/Cookie/Cookie.xs glue/perl/xsbuilder/APR/Request/Error/APR__Request__Error.h glue/perl/xsbuilder/APR/Request/Error/Error.pm glue/perl/xsbuilder/APR/Request/Error/Error.pod glue/perl/xsbuilder/APR/Request/Error/Error.xs glue/perl/xsbuilder/APR/Request/Hook/Hook.pod glue/perl/xsbuilder/APR/Request/Hook/Hook.xs glue/perl/xsbuilder/APR/Request/Param/APR__Request__Param.h glue/perl/xsbuilder/APR/Request/Param/Param.pm glue/perl/xsbuilder/APR/Request/Param/Param.pod glue/perl/xsbuilder/APR/Request/Param/Param.xs glue/perl/xsbuilder/APR/Request/Parser/Parser.pod glue/perl/xsbuilder/APR/Request/Parser/Parser.xs glue/perl/xsbuilder/APR/Request/Request.pm glue/perl/xsbuilder/APR/Request/Request.pod glue/perl/xsbuilder/APR/Request/Request.xs glue/perl/xsbuilder/apreq_xs_postperl.h glue/perl/xsbuilder/apreq_xs_preperl.h glue/perl/xsbuilder/apreq_xs_tables.h glue/perl/xsbuilder/maps/apreq_functions.map glue/perl/xsbuilder/maps/apreq_structures.map glue/perl/xsbuilder/maps/apreq_types.map glue/perl/xsbuilder/ppport.h glue/perl/xsbuilder/tables/APR/Request/CallbackTable.pm glue/perl/xsbuilder/tables/APR/Request/ConstantsTable.pm glue/perl/xsbuilder/tables/APR/Request/FunctionTable.pm glue/perl/xsbuilder/tables/APR/Request/StructureTable.pm glue/perl/xsbuilder/typemap glue/README include/apreq.h include/apreq_config.h.in include/apreq_cookie.h include/apreq_error.h include/apreq_module.h include/apreq_param.h include/apreq_parser.h include/apreq_util.h include/apreq_version.h include/groups.dox.in include/Makefile.am include/Makefile.in INSTALL install-sh libapreq.rc library/cookie.c library/error.c library/Makefile.am library/Makefile.in library/module.c library/module_cgi.c library/module_custom.c library/param.c library/parser.c library/parser_header.c library/parser_multipart.c library/parser_urlencoded.c library/t/at.c library/t/at.h library/t/cookie.c library/t/error.c library/t/Makefile.am library/t/Makefile.in library/t/params.c library/t/parsers.c library/t/util.c library/t/version.c library/util.c library/version.c LICENSE ltmain.sh Makefile.am Makefile.in Makefile.PL MANIFEST META.yml missing module/apache2/apreq_module_apache2.h module/apache2/apreq_private_apache2.h module/apache2/filter.c module/apache2/handle.c module/apache2/Makefile.am module/apache2/Makefile.in module/Makefile.am module/Makefile.in module/t/big_request.t module/t/c-modules/apreq_access_test/mod_apreq_access_test.c module/t/c-modules/apreq_big_request_test/mod_apreq_big_request_test.c module/t/c-modules/apreq_cookie_test/mod_apreq_cookie_test.c module/t/c-modules/apreq_output_filter_test/mod_apreq_output_filter_test.c module/t/c-modules/apreq_redirect_test/mod_apreq_redirect_test.c module/t/c-modules/apreq_request_test/mod_apreq_request_test.c module/t/c-modules/apreq_upload_test/10k module/t/c-modules/apreq_upload_test/128k module/t/c-modules/apreq_upload_test/1b module/t/c-modules/apreq_upload_test/1k module/t/c-modules/apreq_upload_test/63k module/t/c-modules/apreq_upload_test/64k module/t/c-modules/apreq_upload_test/65k module/t/c-modules/apreq_upload_test/mod_apreq_upload_test.c module/t/cgi.t module/t/conf/extra.conf.in module/t/conf/ssl/ca-bundle-duplicates.crt module/t/conf/ssl/ca-bundle-sample.crt module/t/conf/ssl/httpd-passphrase.pl.PL module/t/conf/ssl/proxyssl.conf.in module/t/conf/ssl/ssl.conf.in module/t/cookie.t module/t/request.t module/t/TEST.PL module/t/upload.t module/test_cgi.c NOTICE PREREQUISITES README STATUS win32/apreq2_test.mak win32/apreq2_win32.pl win32/Configure.pl win32/libapreq2.mak win32/mod_apreq2.mak win32/README win32/test_cgi.mak win32/util.pl libapreq2-2.17/META.yml0000644000175000017500000000245614277402434014223 0ustar jortonjorton--- #YAML:1.0 name: libapreq2 version: 2.17 license: Apache_2_0 installdirs: site distribution_type: module dynamic_config: 1 provides: Apache2::Request: file: glue/perl/lib/Apache2/Request.pm version: 2.17 Apache2::Cookie: file: glue/perl/lib/Apache2/Cookie.pm version: 2.17 Apache2::Upload: file: glue/perl/lib/Apache2/Upload.pm version: 2.17 APR::Request: file: glue/perl/xsbuilder/APR/Request/Request.pm version: 2.17 APR::Request::Apache2: file: glue/perl/xsbuilder/APR/Request/Apache2/Apache2.pm version: 2.17 APR::Request::CGI: file: glue/perl/xsbuilder/APR/Request/CGI/CGI.pm version: 2.17 APR::Request::Error: file: glue/perl/xsbuilder/APR/Request/Error/Error.pm version: 2.17 APR::Request::Cookie: file: glue/perl/xsbuilder/APR/Request/Cookie/Cookie.pm version: 2.17 APR::Request::Param: file: glue/perl/xsbuilder/APR/Request/Param/Param.pm version: 2.17 no_index: directory: - glue/perl/xsbuilder/tables/APR/Request - glue/perl/t/response/TestAPI - glue/perl/t/response/TestApReq generated_by: build/version_check.pl requires: mod_perl2: 1.999022 perl: 5.6.1 build_requires: Apache::Test: 1.04 ExtUtils::MakeMaker: 6.15 ExtUtils::XSBuilder: 0.23 Test::More: 0.47 mod_perl2: 1.999022 perl: 5.6.1 libapreq2-2.17/missing0000755000175000017500000001533614277402427014354 0ustar jortonjorton#! /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 , 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 . # 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 ." 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: libapreq2-2.17/module/apache2/apreq_module_apache2.h0000644000175000017500000001335114277401734021751 0ustar jortonjorton/* ** Licensed to the Apache Software Foundation (ASF) under one or more ** contributor license agreements. See the NOTICE file distributed with ** this work for additional information regarding copyright ownership. ** The ASF licenses this file to You under the Apache License, Version 2.0 ** (the "License"); you may not use this file except in compliance with ** the License. You may obtain a copy of the License at ** ** http://www.apache.org/licenses/LICENSE-2.0 ** ** Unless required by applicable law or agreed to in writing, software ** distributed under the License is distributed on an "AS IS" BASIS, ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. ** See the License for the specific language governing permissions and ** limitations under the License. */ #ifndef APREQ_APACHE2_H #define APREQ_APACHE2_H #include "apreq_module.h" #include "apr_optional.h" #include #ifdef __cplusplus extern "C" { #endif /** * @defgroup mod_apreq2 Apache 2.X Filter Module * @ingroup apreq_module * @brief mod_apreq2 - DSO that ties libapreq2 to Apache HTTPD 2.X. * * mod_apreq2 provides the "APREQ2" input filter for using libapreq2 * (and allow its parsed data structures to be shared) within * the Apache 2.X webserver. Using it, libapreq2 works properly * in every phase of the HTTP request, from translation handlers * to output filters, and even for subrequests / internal redirects. * *
    * *

    Activating mod_apreq2 in Apache 2.X

    * * The installation process triggered by * % make install * will not modify your webserver's config file. Hence, * be sure you activate it on startup by adding a LoadModule directive * to your webserver config; e.g. * * @code * * LoadModule apreq_module modules/mod_apreq2.so * * @endcode * * The mod_apreq2 filter is named "apreq2", and may be used in Apache's * input filter directives, e.g. * @code * * AddInputFilter apreq2 # or * SetInputFilter apreq2 * * @endcode * * However, this is not required because libapreq2 will add the filter (only) * if it's necessary. You just need to ensure that your module invokes * apreq_handle_apache2() before the content handler ultimately reads * from the input filter chain. It is important to realize that no * matter how the input filters are initially arranged, the APREQ2 filter * will attempt to reposition itself to be the last input filter to read the * data. * * If you want to use other input filters to transform the incoming HTTP * request data, is important to register those filters with Apache * as having type AP_FTYPE_CONTENT_SET or AP_FTYPE_RESOURCE. Due to the * limitations of Apache's current input filter design, types higher than * AP_FTYPE_CONTENT_SET may not work properly whenever the apreq filter is * active. * * This is especially true when a content handler uses libapreq2 to parse * some of the post data before doing an internal redirect. Any input * filter subsequently added to the redirected request will bypass the * original apreq filter (and therefore lose access to some of the original * post data), unless its type is less than the type of the apreq filter * (currently AP_FTYPE_PROTOCOL-1). * * *

    Server Configuration Directives

    * * * * * * * * * * * * * * * * * * * * * * * * * * *
    Per-directory commands for mod_apreq2
    DirectiveContextDefaultDescription
    APREQ2_ReadLimitdirectory #APREQ_DEFAULT_READ_LIMIT Maximum number of bytes mod_apreq2 will send off to libapreq2 * for parsing. mod_apreq2 will log this event and subsequently * remove itself from the filter chain. *
    APREQ2_BrigadeLimitdirectory#APREQ_DEFAULT_BRIGADE_LIMIT Maximum number of bytes mod_apreq2 will let accumulate * within the heap-buckets in a brigade. Excess data will be * spooled to an appended file bucket. *
    APREQ2_TempDirdirectoryNULL Sets the location of the temporary directory apreq will use to spool * overflow brigade data (based on the APREQ2_BrigadeLimit setting). * If left unset, libapreq2 will select a platform-specific location * via apr_temp_dir_get(). *
    * *

    Implementation Details

    *
     *   XXX apreq as a normal input filter
     *   XXX apreq as a "virtual" content handler.
     *   XXX apreq as a transparent "tee".
     *   XXX apreq parser registration in post_config
     * 
    * * @{ */ /** * Create an apreq handle which communicates with an Apache 2.X * request_rec. */ APREQ_DECLARE(apreq_handle_t *) apreq_handle_apache2(request_rec *r); /** * * */ #ifdef WIN32 typedef __declspec(dllexport) apreq_handle_t * (__stdcall apr_OFN_apreq_handle_apache2_t) (request_rec *r); #else APR_DECLARE_OPTIONAL_FN(APREQ_DECLARE(apreq_handle_t *), apreq_handle_apache2, (request_rec *r)); #endif /** * The mod_apreq2 filter is named "apreq2", and may be used in Apache's * input filter directives, e.g. * @code * * AddInputFilter apreq2 # or * SetInputFilter apreq2 * @endcode * See above */ #define APREQ_FILTER_NAME "apreq2" /** * The Apache2 Module Magic Number for use in the Apache 2.x module structures * This gets bumped if changes in th4e API will break third party applications * using this apache2 module * @see APREQ_MODULE */ #define APREQ_APACHE2_MMN 20101207 /** @} */ #ifdef __cplusplus } #endif #endif libapreq2-2.17/module/apache2/apreq_private_apache2.h0000644000175000017500000000350314277401734022134 0ustar jortonjortonextern module AP_MODULE_DECLARE_DATA apreq_module; struct dir_config { const char *temp_dir; apr_uint64_t read_limit; apr_size_t brigade_limit; }; /* The "warehouse", stored in r->request_config */ struct apache2_handle { apreq_handle_t handle; request_rec *r; apr_table_t *jar, *args; apr_status_t jar_status, args_status; ap_filter_t *f; }; /* Tracks the apreq filter state */ struct filter_ctx { apr_bucket_brigade *bb; /* input brigade that's passed to the parser */ apr_bucket_brigade *bbtmp; /* temporary copy of bb, destined for the spool */ apr_bucket_brigade *spool; /* copied prefetch data for downstream filters */ apreq_parser_t *parser; apreq_hook_t *hook_queue; apreq_hook_t *find_param; apr_table_t *body; apr_status_t body_status; apr_status_t filter_error; apr_uint64_t bytes_read; /* Total bytes read into this filter. */ apr_uint64_t read_limit; /* Max bytes the filter may show to parser */ apr_size_t brigade_limit; const char *temp_dir; }; apr_status_t apreq_filter_prefetch(ap_filter_t *f, apr_off_t readbytes); apr_status_t apreq_filter(ap_filter_t *f, apr_bucket_brigade *bb, ap_input_mode_t mode, apr_read_type_e block, apr_off_t readbytes); void apreq_filter_make_context(ap_filter_t *f); void apreq_filter_init_context(ap_filter_t *f); APR_INLINE static void apreq_filter_relocate(ap_filter_t *f) { request_rec *r = f->r; if (f != r->input_filters) { ap_filter_t *top = r->input_filters; ap_remove_input_filter(f); r->input_filters = f; f->next = top; } } libapreq2-2.17/module/apache2/filter.c0000644000175000017500000004122614277401734017173 0ustar jortonjorton/* ** Licensed to the Apache Software Foundation (ASF) under one or more ** contributor license agreements. See the NOTICE file distributed with ** this work for additional information regarding copyright ownership. ** The ASF licenses this file to You under the Apache License, Version 2.0 ** (the "License"); you may not use this file except in compliance with ** the License. You may obtain a copy of the License at ** ** http://www.apache.org/licenses/LICENSE-2.0 ** ** Unless required by applicable law or agreed to in writing, software ** distributed under the License is distributed on an "AS IS" BASIS, ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. ** See the License for the specific language governing permissions and ** limitations under the License. */ #include "httpd.h" #include "http_config.h" #include "http_log.h" #include "util_filter.h" #include "apr_tables.h" #include "apr_buckets.h" #include "http_request.h" #include "apr_strings.h" #include "apreq_module_apache2.h" #include "apreq_private_apache2.h" #include "apreq_error.h" #include "apreq_util.h" #include "apreq_version.h" static void *apreq_create_dir_config(apr_pool_t *p, char *d) { /* d == OR_ALL */ struct dir_config *dc = apr_palloc(p, sizeof *dc); dc->temp_dir = NULL; dc->read_limit = -1; dc->brigade_limit = -1; return dc; } static void *apreq_merge_dir_config(apr_pool_t *p, void *a_, void *b_) { struct dir_config *a = a_, *b = b_, *c = apr_palloc(p, sizeof *c); c->temp_dir = (b->temp_dir != NULL) /* overrides ok */ ? b->temp_dir : a->temp_dir; c->brigade_limit = (b->brigade_limit == (apr_size_t)-1) /* overrides ok */ ? a->brigade_limit : b->brigade_limit; c->read_limit = (b->read_limit < a->read_limit) /* yes, min */ ? b->read_limit : a->read_limit; return c; } static const char *apreq_set_temp_dir(cmd_parms *cmd, void *data, const char *arg) { struct dir_config *conf = data; const char *err = ap_check_cmd_context(cmd, NOT_IN_LIMIT); if (err != NULL) return err; conf->temp_dir = arg; return NULL; } static const char *apreq_set_read_limit(cmd_parms *cmd, void *data, const char *arg) { struct dir_config *conf = data; const char *err = ap_check_cmd_context(cmd, NOT_IN_LIMIT); if (err != NULL) return err; conf->read_limit = apreq_atoi64f(arg); return NULL; } static const char *apreq_set_brigade_limit(cmd_parms *cmd, void *data, const char *arg) { struct dir_config *conf = data; const char *err = ap_check_cmd_context(cmd, NOT_IN_LIMIT); if (err != NULL) return err; conf->brigade_limit = apreq_atoi64f(arg); return NULL; } static const command_rec apreq_cmds[] = { AP_INIT_TAKE1("APREQ2_TempDir", apreq_set_temp_dir, NULL, OR_ALL, "Default location of temporary directory"), AP_INIT_TAKE1("APREQ2_ReadLimit", apreq_set_read_limit, NULL, OR_ALL, "Maximum amount of data that will be fed into a parser."), AP_INIT_TAKE1("APREQ2_BrigadeLimit", apreq_set_brigade_limit, NULL, OR_ALL, "Maximum in-memory bytes a brigade may use."), { NULL } }; void apreq_filter_init_context(ap_filter_t *f) { request_rec *r = f->r; struct filter_ctx *ctx = f->ctx; apr_bucket_alloc_t *ba = r->connection->bucket_alloc; const char *cl_header; if (r->method_number == M_GET) { /* Don't parse GET (this protects against subrequest body parsing). */ ctx->body_status = APREQ_ERROR_NODATA; return; } cl_header = apr_table_get(r->headers_in, "Content-Length"); if (cl_header != NULL) { char *dummy; apr_uint64_t content_length = apr_strtoi64(cl_header,&dummy,0); if (dummy == NULL || *dummy != 0) { ap_log_rerror(APLOG_MARK, APLOG_ERR, APR_EGENERAL, r, "Invalid Content-Length header (%s)", cl_header); ctx->body_status = APREQ_ERROR_BADHEADER; return; } else if (content_length > ctx->read_limit) { ap_log_rerror(APLOG_MARK, APLOG_ERR, APR_EGENERAL, r, "Content-Length header (%s) exceeds configured " "max_body limit (%" APR_UINT64_T_FMT ")", cl_header, ctx->read_limit); ctx->body_status = APREQ_ERROR_OVERLIMIT; return; } } if (ctx->parser == NULL) { const char *ct_header = apr_table_get(r->headers_in, "Content-Type"); if (ct_header != NULL) { apreq_parser_function_t pf = apreq_parser(ct_header); if (pf != NULL) { ctx->parser = apreq_parser_make(r->pool, ba, ct_header, pf, ctx->brigade_limit, ctx->temp_dir, ctx->hook_queue, NULL); } else { ctx->body_status = APREQ_ERROR_NOPARSER; return; } } else { ctx->body_status = APREQ_ERROR_NOHEADER; return; } } else { if (ctx->parser->brigade_limit > ctx->brigade_limit) ctx->parser->brigade_limit = ctx->brigade_limit; if (ctx->temp_dir != NULL) ctx->parser->temp_dir = ctx->temp_dir; if (ctx->hook_queue != NULL) apreq_parser_add_hook(ctx->parser, ctx->hook_queue); } ctx->hook_queue = NULL; ctx->bb = apr_brigade_create(r->pool, ba); ctx->bbtmp = apr_brigade_create(r->pool, ba); ctx->spool = apr_brigade_create(r->pool, ba); ctx->body = apr_table_make(r->pool, APREQ_DEFAULT_NELTS); ctx->body_status = APR_INCOMPLETE; } /* * Situations to contend with: * * 1) Often the filter will be added by the content handler itself, * so the apreq_filter_init hook will not be run. * 2) If an auth handler uses apreq, the apreq_filter will ensure * it's part of the protocol filters. apreq_filter_init does NOT need * to notify the protocol filter that it must not continue parsing, * the apreq filter can perform this check itself. apreq_filter_init * just needs to ensure cfg->f does not point at it. * 3) If req->proto_input_filters and req->input_filters are apreq * filters, and req->input_filters->next == req->proto_input_filters, * it is safe for apreq_filter to "steal" the proto filter's context * and subsequently drop it from the chain. */ /* Examines the input_filter chain and moves the apreq filter(s) around * before the filter chain is stacked by ap_get_brigade. */ static apr_status_t apreq_filter_init(ap_filter_t *f) { request_rec *r = f->r; struct filter_ctx *ctx = f->ctx; struct apache2_handle *handle = (struct apache2_handle *)apreq_handle_apache2(r); /* Don't parse GET (this protects against subrequest body parsing). */ if (f->r->method_number == M_GET) return APR_SUCCESS; if (ctx == NULL || ctx->body_status == APR_EINIT) { if (f == r->input_filters) { handle->f = f; } else if (r->input_filters->frec->filter_func.in_func == apreq_filter) { ap_log_rerror(APLOG_MARK, APLOG_DEBUG, APR_SUCCESS, r, "removing intermediate apreq filter"); if (handle->f == f) handle->f = r->input_filters; ap_remove_input_filter(f); } else { ap_log_rerror(APLOG_MARK, APLOG_DEBUG, APR_SUCCESS, r, "relocating intermediate apreq filter"); apreq_filter_relocate(f); handle->f = f; } return APR_SUCCESS; } /* else this is a protocol filter which may still be active. * if it is, we must deregister it now. */ if (handle->f == f) { ap_log_rerror(APLOG_MARK, APLOG_DEBUG, APR_SUCCESS, r, "disabling stale protocol filter"); if (ctx->body_status == APR_INCOMPLETE) ctx->body_status = APREQ_ERROR_INTERRUPT; handle->f = NULL; } return APR_SUCCESS; } apr_status_t apreq_filter_prefetch(ap_filter_t *f, apr_off_t readbytes) { struct filter_ctx *ctx = f->ctx; request_rec *r = f->r; apr_status_t rv; apr_off_t len; if (ctx->body_status == APR_EINIT) apreq_filter_init_context(f); if (ctx->body_status != APR_INCOMPLETE || readbytes == 0) return ctx->body_status; ap_log_rerror(APLOG_MARK, APLOG_DEBUG, APR_SUCCESS, r, "prefetching %" APR_OFF_T_FMT " bytes", readbytes); rv = ap_get_brigade(f->next, ctx->bb, AP_MODE_READBYTES, APR_BLOCK_READ, readbytes); if (rv != APR_SUCCESS) { ap_log_rerror(APLOG_MARK, APLOG_ERR, rv, r, "ap_get_brigade failed during prefetch"); ctx->filter_error = rv; return ctx->body_status = APREQ_ERROR_GENERAL; } apreq_brigade_setaside(ctx->bb, r->pool); apreq_brigade_copy(ctx->bbtmp, ctx->bb); rv = apreq_brigade_concat(r->pool, ctx->temp_dir, ctx->brigade_limit, ctx->spool, ctx->bbtmp); if (rv != APR_SUCCESS && rv != APR_EOF) { ap_log_rerror(APLOG_MARK, APLOG_ERR, rv, r, "apreq_brigade_concat failed; TempDir problem?"); ctx->filter_error = APR_EGENERAL; return ctx->body_status = rv; } /* Adding "f" to the protocol filter chain ensures the * spooled data is preserved across internal redirects. */ if (f != r->proto_input_filters) { ap_filter_t *in; for (in = r->input_filters; in != r->proto_input_filters; in = in->next) { if (f == in) { r->proto_input_filters = f; break; } } } apr_brigade_length(ctx->bb, 1, &len); ctx->bytes_read += len; if (ctx->bytes_read > ctx->read_limit) { ctx->body_status = APREQ_ERROR_OVERLIMIT; ap_log_rerror(APLOG_MARK, APLOG_ERR, ctx->body_status, r, "Bytes read (%" APR_UINT64_T_FMT ") exceeds configured read limit (%" APR_UINT64_T_FMT ")", ctx->bytes_read, ctx->read_limit); return ctx->body_status; } ctx->body_status = apreq_parser_run(ctx->parser, ctx->body, ctx->bb); apr_brigade_cleanup(ctx->bb); return ctx->body_status; } apr_status_t apreq_filter(ap_filter_t *f, apr_bucket_brigade *bb, ap_input_mode_t mode, apr_read_type_e block, apr_off_t readbytes) { request_rec *r = f->r; struct filter_ctx *ctx; apr_status_t rv; apr_off_t len; switch (mode) { case AP_MODE_READBYTES: /* only the modes above are supported */ break; case AP_MODE_EXHAUSTIVE: /* not worth supporting at this level */ case AP_MODE_GETLINE: /* chunked trailers are b0rked in ap_http_filter */ return ap_get_brigade(f->next, bb, mode, block, readbytes); default: return APR_ENOTIMPL; } if (f->ctx == NULL) apreq_filter_make_context(f); ctx = f->ctx; if (ctx->body_status == APR_EINIT) apreq_filter_init_context(f); if (ctx->spool && !APR_BRIGADE_EMPTY(ctx->spool)) { apr_bucket *e; rv = apr_brigade_partition(ctx->spool, readbytes, &e); if (rv != APR_SUCCESS && rv != APR_INCOMPLETE) return rv; if (APR_BUCKET_IS_EOS(e)) e = APR_BUCKET_NEXT(e); apreq_brigade_move(bb, ctx->spool, e); return APR_SUCCESS; } else if (ctx->body_status != APR_INCOMPLETE) { if (ctx->filter_error) return ctx->filter_error; rv = ap_get_brigade(f->next, bb, mode, block, readbytes); ap_remove_input_filter(f); return rv; } rv = ap_get_brigade(f->next, bb, mode, block, readbytes); if (rv != APR_SUCCESS) return rv; apreq_brigade_copy(ctx->bb, bb); apr_brigade_length(bb, 1, &len); ctx->bytes_read += len; if (ctx->bytes_read > ctx->read_limit) { ctx->body_status = APREQ_ERROR_OVERLIMIT; ap_log_rerror(APLOG_MARK, APLOG_ERR, ctx->body_status, r, "Bytes read (%" APR_UINT64_T_FMT ") exceeds configured max_body limit (%" APR_UINT64_T_FMT ")", ctx->bytes_read, ctx->read_limit); } else { ctx->body_status = apreq_parser_run(ctx->parser, ctx->body, ctx->bb); apr_brigade_cleanup(ctx->bb); } return APR_SUCCESS; } static int apreq_pre_init(apr_pool_t *p, apr_pool_t *plog, apr_pool_t *ptemp, server_rec *base_server) { apr_status_t status; status = apreq_pre_initialize(p); if (status != APR_SUCCESS) { ap_log_error(APLOG_MARK, APLOG_STARTUP|APLOG_ERR, status, base_server, "Failed to pre-initialize libapreq2"); return HTTP_INTERNAL_SERVER_ERROR; } APR_REGISTER_OPTIONAL_FN(apreq_handle_apache2); return OK; } static int apreq_post_init(apr_pool_t *p, apr_pool_t *plog, apr_pool_t *ptemp, server_rec *base_server) { apr_status_t status; ap_add_version_component(p, apr_psprintf(p, "mod_apreq2-%d/%s", APREQ_APACHE2_MMN, apreq_version_string())); status = apreq_post_initialize(p); if (status != APR_SUCCESS) { ap_log_error(APLOG_MARK, APLOG_STARTUP|APLOG_ERR, status, base_server, "Failed to post-initialize libapreq2"); return HTTP_INTERNAL_SERVER_ERROR; } return OK; } static void register_hooks (apr_pool_t *p) { /* APR_HOOK_FIRST because we want other modules to be able to * register parsers in their post_config hook via APR_HOOK_MIDDLE. */ ap_hook_post_config(apreq_pre_init, NULL, NULL, APR_HOOK_FIRST); /* APR_HOOK_LAST because we need to lock the default_parsers hash * (to prevent further modifications) before the server forks. */ ap_hook_post_config(apreq_post_init, NULL, NULL, APR_HOOK_LAST); ap_register_input_filter(APREQ_FILTER_NAME, apreq_filter, apreq_filter_init, AP_FTYPE_PROTOCOL-1); } /** @} */ module AP_MODULE_DECLARE_DATA apreq_module = { #line __LINE__ "mod_apreq2.c" STANDARD20_MODULE_STUFF, apreq_create_dir_config, apreq_merge_dir_config, NULL, NULL, apreq_cmds, register_hooks, }; void apreq_filter_make_context(ap_filter_t *f) { request_rec *r; struct filter_ctx *ctx; struct dir_config *d; r = f->r; d = ap_get_module_config(r->per_dir_config, &apreq_module); if (f == r->input_filters && r->proto_input_filters == f->next && f->next->frec->filter_func.in_func == apreq_filter && f->r->method_number != M_GET) { ctx = f->next->ctx; switch (ctx->body_status) { case APREQ_ERROR_INTERRUPT: ctx->body_status = APR_INCOMPLETE; /* fall thru */ case APR_SUCCESS: if (d != NULL) { ctx->temp_dir = d->temp_dir; ctx->read_limit = d->read_limit; ctx->brigade_limit = d->brigade_limit; if (ctx->parser != NULL) { ctx->parser->temp_dir = d->temp_dir; ctx->parser->brigade_limit = d->brigade_limit; } } ap_log_rerror(APLOG_MARK, APLOG_DEBUG, APR_SUCCESS, r, "stealing filter context"); f->ctx = ctx; r->proto_input_filters = f; ap_remove_input_filter(f->next); return; default: ap_log_rerror(APLOG_MARK, APLOG_DEBUG, ctx->body_status, r, "cannot steal context: bad filter status"); } } ctx = apr_pcalloc(r->pool, sizeof *ctx); ctx->body_status = APR_EINIT; if (d == NULL) { ctx->read_limit = (apr_uint64_t)-1; ctx->brigade_limit = APREQ_DEFAULT_BRIGADE_LIMIT; } else { ctx->temp_dir = d->temp_dir; ctx->read_limit = (d->read_limit == (apr_uint64_t)-1) ? APREQ_DEFAULT_READ_LIMIT : d->read_limit; ctx->brigade_limit = (d->brigade_limit == (apr_size_t)-1) ? APREQ_DEFAULT_BRIGADE_LIMIT : d->brigade_limit; } f->ctx = ctx; } libapreq2-2.17/module/apache2/handle.c0000644000175000017500000002543714277401734017147 0ustar jortonjorton/* ** Licensed to the Apache Software Foundation (ASF) under one or more ** contributor license agreements. See the NOTICE file distributed with ** this work for additional information regarding copyright ownership. ** The ASF licenses this file to You under the Apache License, Version 2.0 ** (the "License"); you may not use this file except in compliance with ** the License. You may obtain a copy of the License at ** ** http://www.apache.org/licenses/LICENSE-2.0 ** ** Unless required by applicable law or agreed to in writing, software ** distributed under the License is distributed on an "AS IS" BASIS, ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. ** See the License for the specific language governing permissions and ** limitations under the License. */ #include "httpd.h" #include "http_config.h" #include "http_log.h" #include "util_filter.h" #include "apr_tables.h" #include "apr_buckets.h" #include "http_request.h" #include "apr_strings.h" #include "apreq_module_apache2.h" #include "apreq_private_apache2.h" #include "apreq_error.h" APR_INLINE static ap_filter_t *get_apreq_filter(apreq_handle_t *handle) { struct apache2_handle *req = (struct apache2_handle *)handle; if (req->f == NULL) { req->f = ap_add_input_filter(APREQ_FILTER_NAME, NULL, req->r, req->r->connection); /* ap_add_input_filter does not guarantee cfg->f == r->input_filters, * so we reposition the new filter there as necessary. */ apreq_filter_relocate(req->f); } return req->f; } static apr_status_t apache2_jar(apreq_handle_t *handle, const apr_table_t **t) { struct apache2_handle *req = (struct apache2_handle*)handle; request_rec *r = req->r; if (req->jar_status == APR_EINIT) { const char *cookies = apr_table_get(r->headers_in, "Cookie"); if (cookies != NULL) { req->jar = apr_table_make(handle->pool, APREQ_DEFAULT_NELTS); req->jar_status = apreq_parse_cookie_header(handle->pool, req->jar, cookies); } else req->jar_status = APREQ_ERROR_NODATA; } *t = req->jar; return req->jar_status; } static apr_status_t apache2_args(apreq_handle_t *handle, const apr_table_t **t) { struct apache2_handle *req = (struct apache2_handle*)handle; request_rec *r = req->r; if (req->args_status == APR_EINIT) { if (r->args != NULL) { req->args = apr_table_make(handle->pool, APREQ_DEFAULT_NELTS); req->args_status = apreq_parse_query_string(handle->pool, req->args, r->args); } else req->args_status = APREQ_ERROR_NODATA; } *t = req->args; return req->args_status; } static apreq_cookie_t *apache2_jar_get(apreq_handle_t *handle, const char *name) { struct apache2_handle *req = (struct apache2_handle *)handle; const apr_table_t *t; const char *val; if (req->jar_status == APR_EINIT) apache2_jar(handle, &t); else t = req->jar; if (t == NULL) return NULL; val = apr_table_get(t, name); if (val == NULL) return NULL; return apreq_value_to_cookie(val); } static apreq_param_t *apache2_args_get(apreq_handle_t *handle, const char *name) { struct apache2_handle *req = (struct apache2_handle *)handle; const apr_table_t *t; const char *val; if (req->args_status == APR_EINIT) apache2_args(handle, &t); else t = req->args; if (t == NULL) return NULL; val = apr_table_get(t, name); if (val == NULL) return NULL; return apreq_value_to_param(val); } static apr_status_t apache2_body(apreq_handle_t *handle, const apr_table_t **t) { ap_filter_t *f = get_apreq_filter(handle); struct filter_ctx *ctx; if (f->ctx == NULL) apreq_filter_make_context(f); ctx = f->ctx; switch (ctx->body_status) { case APR_EINIT: apreq_filter_init_context(f); if (ctx->body_status != APR_INCOMPLETE) break; case APR_INCOMPLETE: while (apreq_filter_prefetch(f, APREQ_DEFAULT_READ_BLOCK_SIZE) == APR_INCOMPLETE) ; /*loop*/ } *t = ctx->body; return ctx->body_status; } static apreq_param_t *apache2_body_get(apreq_handle_t *handle, const char *name) { ap_filter_t *f = get_apreq_filter(handle); struct filter_ctx *ctx; const char *val; apreq_hook_t *h; apreq_hook_find_param_ctx_t *hook_ctx; if (f->ctx == NULL) apreq_filter_make_context(f); ctx = f->ctx; switch (ctx->body_status) { case APR_SUCCESS: val = apr_table_get(ctx->body, name); if (val != NULL) return apreq_value_to_param(val); return NULL; case APR_EINIT: apreq_filter_init_context(f); if (ctx->body_status != APR_INCOMPLETE) return NULL; apreq_filter_prefetch(f, APREQ_DEFAULT_READ_BLOCK_SIZE); case APR_INCOMPLETE: val = apr_table_get(ctx->body, name); if (val != NULL) return apreq_value_to_param(val); /* Not seen yet, so we need to scan for param while prefetching the body */ hook_ctx = apr_palloc(handle->pool, sizeof *hook_ctx); if (ctx->find_param == NULL) ctx->find_param = apreq_hook_make(handle->pool, apreq_hook_find_param, NULL, NULL); h = ctx->find_param; h->next = ctx->parser->hook; h->ctx = hook_ctx; ctx->parser->hook = h; h->ctx = hook_ctx; hook_ctx->name = name; hook_ctx->param = NULL; hook_ctx->prev = ctx->parser->hook; do { apreq_filter_prefetch(f, APREQ_DEFAULT_READ_BLOCK_SIZE); if (hook_ctx->param != NULL) return hook_ctx->param; } while (ctx->body_status == APR_INCOMPLETE); ctx->parser->hook = h->next; return NULL; default: if (ctx->body == NULL) return NULL; val = apr_table_get(ctx->body, name); if (val != NULL) return apreq_value_to_param(val); return NULL; } /* not reached */ return NULL; } static apr_status_t apache2_parser_get(apreq_handle_t *handle, const apreq_parser_t **parser) { ap_filter_t *f = get_apreq_filter(handle); struct filter_ctx *ctx = f->ctx; if (ctx == NULL) { *parser = NULL; return APR_EINIT; } *parser = ctx->parser; return APR_SUCCESS; } static apr_status_t apache2_parser_set(apreq_handle_t *handle, apreq_parser_t *parser) { ap_filter_t *f = get_apreq_filter(handle); struct filter_ctx *ctx; if (f->ctx == NULL) apreq_filter_make_context(f); ctx = f->ctx; if (ctx->parser == NULL) { ctx->parser = parser; return APR_SUCCESS; } else return APREQ_ERROR_NOTEMPTY; } static apr_status_t apache2_hook_add(apreq_handle_t *handle, apreq_hook_t *hook) { ap_filter_t *f = get_apreq_filter(handle); struct filter_ctx *ctx; if (f->ctx == NULL) apreq_filter_make_context(f); ctx = f->ctx; if (ctx->parser != NULL) { return apreq_parser_add_hook(ctx->parser, hook); } else if (ctx->hook_queue != NULL) { apreq_hook_t *h = ctx->hook_queue; while (h->next != NULL) h = h->next; h->next = hook; } else { ctx->hook_queue = hook; } return APR_SUCCESS; } static apr_status_t apache2_brigade_limit_set(apreq_handle_t *handle, apr_size_t bytes) { ap_filter_t *f = get_apreq_filter(handle); struct filter_ctx *ctx; if (f->ctx == NULL) apreq_filter_make_context(f); ctx = f->ctx; if (ctx->body_status == APR_EINIT || ctx->brigade_limit > bytes) { ctx->brigade_limit = bytes; return APR_SUCCESS; } return APREQ_ERROR_MISMATCH; } static apr_status_t apache2_brigade_limit_get(apreq_handle_t *handle, apr_size_t *bytes) { ap_filter_t *f = get_apreq_filter(handle); struct filter_ctx *ctx; if (f->ctx == NULL) apreq_filter_make_context(f); ctx = f->ctx; *bytes = ctx->brigade_limit; return APR_SUCCESS; } static apr_status_t apache2_read_limit_set(apreq_handle_t *handle, apr_uint64_t bytes) { ap_filter_t *f = get_apreq_filter(handle); struct filter_ctx *ctx; if (f->ctx == NULL) apreq_filter_make_context(f); ctx = f->ctx; if (ctx->read_limit > bytes && ctx->bytes_read < bytes) { ctx->read_limit = bytes; return APR_SUCCESS; } return APREQ_ERROR_MISMATCH; } static apr_status_t apache2_read_limit_get(apreq_handle_t *handle, apr_uint64_t *bytes) { ap_filter_t *f = get_apreq_filter(handle); struct filter_ctx *ctx; if (f->ctx == NULL) apreq_filter_make_context(f); ctx = f->ctx; *bytes = ctx->read_limit; return APR_SUCCESS; } static apr_status_t apache2_temp_dir_set(apreq_handle_t *handle, const char *path) { ap_filter_t *f = get_apreq_filter(handle); struct filter_ctx *ctx; if (f->ctx == NULL) apreq_filter_make_context(f); ctx = f->ctx; // init vs incomplete state? if (ctx->temp_dir == NULL && ctx->bytes_read == 0) { if (path != NULL) ctx->temp_dir = apr_pstrdup(handle->pool, path); return APR_SUCCESS; } return APREQ_ERROR_NOTEMPTY; } static apr_status_t apache2_temp_dir_get(apreq_handle_t *handle, const char **path) { ap_filter_t *f = get_apreq_filter(handle); struct filter_ctx *ctx; if (f->ctx == NULL) apreq_filter_make_context(f); ctx = f->ctx; *path = ctx->parser ? ctx->parser->temp_dir : ctx->temp_dir; return APR_SUCCESS; } static APREQ_MODULE(apache2, APREQ_APACHE2_MMN); APREQ_DECLARE(apreq_handle_t *) apreq_handle_apache2(request_rec *r) { struct apache2_handle *req = ap_get_module_config(r->request_config, &apreq_module); if (req != NULL) { get_apreq_filter(&req->handle); return &req->handle; } req = apr_palloc(r->pool, sizeof *req); ap_set_module_config(r->request_config, &apreq_module, req); req->handle.module = &apache2_module; req->handle.pool = r->pool; req->handle.bucket_alloc = r->connection->bucket_alloc; req->r = r; req->args_status = req->jar_status = APR_EINIT; req->args = req->jar = NULL; req->f = NULL; get_apreq_filter(&req->handle); return &req->handle; } libapreq2-2.17/module/apache2/Makefile.am0000644000175000017500000000251414277401734017573 0ustar jortonjortonTEST_CONFIG_SCRIPT = package Apache::TestMM; filter_args(); generate_script("t/TEST") mod_apreq2_la_LDFLAGS = -export-dynamic -module -avoid-version \ `@APREQ_CONFIG@ --link-libtool --libs` @APR_LTFLAGS@ mod_apreq2_la_SOURCES = apreq_private_apache2.h handle.c filter.c pkgcfgdir = `@APACHE2_APXS@ -q SYSCONFDIR` pkgincludedir = `@APACHE2_APXS@ -q INCLUDEDIR`/@APREQ_LIBNAME@ pkglibdir = `@APACHE2_APXS@ -q LIBEXECDIR` AM_CPPFLAGS = @APACHE2_INCLUDES@ @APR_INCLUDES@ if BUILD_HTTPD # XXX FIXME: static builds don't work anymore # mod_apreq2 needs to be built from httpd-2.X, e.g. # # % cd ../httpd-2.X; # % ./configure --with-module=filters:../httpd-apreq-2/module/apache2/mod_apreq2.c ... # # See the INSTALL file for details. @APACHE2_HTTPD@: cd @APACHE2_SRC@ && $(MAKE) all-local: @APACHE2_HTTPD@ else pkginclude_HEADERS = apreq_module_apache2.h pkglib_LTLIBRARIES = mod_apreq2.la install-exec-local : @echo "----------------------------------------------------------------------" @echo "Before you can use mod_apreq2, you must ensure that an appropriate" @echo "\"LoadModule\" line appears in your webserver's config file:" @echo "$(pkgcfgdir)/httpd.conf" @echo @echo "LoadModule apreq_module $(pkglibdir)/mod_apreq2.so" @echo "----------------------------------------------------------------------" endif libapreq2-2.17/module/apache2/Makefile.in0000644000175000017500000005706514277402427017617 0ustar jortonjorton# 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@ 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@ 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 = module/apache2 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(am__pkginclude_HEADERS_DIST) \ $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/include/apreq_config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = 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)$(pkglibdir)" \ "$(DESTDIR)$(pkgincludedir)" LTLIBRARIES = $(pkglib_LTLIBRARIES) mod_apreq2_la_LIBADD = am_mod_apreq2_la_OBJECTS = handle.lo filter.lo mod_apreq2_la_OBJECTS = $(am_mod_apreq2_la_OBJECTS) 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 = mod_apreq2_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(mod_apreq2_la_LDFLAGS) $(LDFLAGS) -o $@ @BUILD_HTTPD_FALSE@am_mod_apreq2_la_rpath = -rpath $(pkglibdir) 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)/include depcomp = $(SHELL) $(top_srcdir)/depcomp am__maybe_remake_depfiles = depfiles am__depfiles_remade = ./$(DEPDIR)/filter.Plo ./$(DEPDIR)/handle.Plo am__mv = mv -f 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 = $(mod_apreq2_la_SOURCES) DIST_SOURCES = $(mod_apreq2_la_SOURCES) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__pkginclude_HEADERS_DIST = apreq_module_apache2.h HEADERS = $(pkginclude_HEADERS) 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) pkgincludedir = `@APACHE2_APXS@ -q INCLUDEDIR`/@APREQ_LIBNAME@ pkglibdir = `@APACHE2_APXS@ -q LIBEXECDIR` ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ APACHE1_APXS = @APACHE1_APXS@ APACHE2_APXS = @APACHE2_APXS@ APACHE2_HTTPD = @APACHE2_HTTPD@ APACHE2_INCLUDES = @APACHE2_INCLUDES@ APACHE2_SRC = @APACHE2_SRC@ APREQ_CONFIG = @APREQ_CONFIG@ APREQ_DOTTED_VERSION = @APREQ_DOTTED_VERSION@ APREQ_LIBNAME = @APREQ_LIBNAME@ APREQ_LIBTOOL_VERSION = @APREQ_LIBTOOL_VERSION@ APREQ_MAJOR_VERSION = @APREQ_MAJOR_VERSION@ APR_CONFIG = @APR_CONFIG@ APR_DOC_VERSION = @APR_DOC_VERSION@ APR_INCLUDES = @APR_INCLUDES@ APR_LA = @APR_LA@ APR_LDFLAGS = @APR_LDFLAGS@ APR_LIBS = @APR_LIBS@ APR_LTFLAGS = @APR_LTFLAGS@ APU_CONFIG = @APU_CONFIG@ APU_DOC_VERSION = @APU_DOC_VERSION@ APU_LA = @APU_LA@ AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPPFLAGS = @CPPFLAGS@ CSCOPE = @CSCOPE@ CTAGS = @CTAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ 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@ GREP = @GREP@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ MM_OPTS = @MM_OPTS@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ 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@ PERL = @PERL@ PERL_OPTS = @PERL_OPTS@ RANLIB = @RANLIB@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ TAR = @TAR@ VERSION = @VERSION@ 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_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@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ 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@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ TEST_CONFIG_SCRIPT = package Apache::TestMM; filter_args(); generate_script("t/TEST") mod_apreq2_la_LDFLAGS = -export-dynamic -module -avoid-version \ `@APREQ_CONFIG@ --link-libtool --libs` @APR_LTFLAGS@ mod_apreq2_la_SOURCES = apreq_private_apache2.h handle.c filter.c pkgcfgdir = `@APACHE2_APXS@ -q SYSCONFDIR` AM_CPPFLAGS = @APACHE2_INCLUDES@ @APR_INCLUDES@ @BUILD_HTTPD_FALSE@pkginclude_HEADERS = apreq_module_apache2.h @BUILD_HTTPD_FALSE@pkglib_LTLIBRARIES = mod_apreq2.la all: all-am .SUFFIXES: .SUFFIXES: .c .lo .o .obj $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(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 module/apache2/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu module/apache2/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: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): install-pkglibLTLIBRARIES: $(pkglib_LTLIBRARIES) @$(NORMAL_INSTALL) @list='$(pkglib_LTLIBRARIES)'; test -n "$(pkglibdir)" || list=; \ list2=; for p in $$list; do \ if test -f $$p; then \ list2="$$list2 $$p"; \ else :; fi; \ done; \ test -z "$$list2" || { \ echo " $(MKDIR_P) '$(DESTDIR)$(pkglibdir)'"; \ $(MKDIR_P) "$(DESTDIR)$(pkglibdir)" || exit 1; \ echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(pkglibdir)'"; \ $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(pkglibdir)"; \ } uninstall-pkglibLTLIBRARIES: @$(NORMAL_UNINSTALL) @list='$(pkglib_LTLIBRARIES)'; test -n "$(pkglibdir)" || list=; \ for p in $$list; do \ $(am__strip_dir) \ echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(pkglibdir)/$$f'"; \ $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(pkglibdir)/$$f"; \ done clean-pkglibLTLIBRARIES: -test -z "$(pkglib_LTLIBRARIES)" || rm -f $(pkglib_LTLIBRARIES) @list='$(pkglib_LTLIBRARIES)'; \ locs=`for p in $$list; do echo $$p; done | \ sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \ sort -u`; \ test -z "$$locs" || { \ echo rm -f $${locs}; \ rm -f $${locs}; \ } mod_apreq2.la: $(mod_apreq2_la_OBJECTS) $(mod_apreq2_la_DEPENDENCIES) $(EXTRA_mod_apreq2_la_DEPENDENCIES) $(AM_V_CCLD)$(mod_apreq2_la_LINK) $(am_mod_apreq2_la_rpath) $(mod_apreq2_la_OBJECTS) $(mod_apreq2_la_LIBADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/filter.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/handle.Plo@am__quote@ # am--include-marker $(am__depfiles_remade): @$(MKDIR_P) $(@D) @echo '# dummy' >$@-t && $(am__mv) $@-t $@ am--depfiles: $(am__depfiles_remade) .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $< .c.obj: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .c.lo: @am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs install-pkgincludeHEADERS: $(pkginclude_HEADERS) @$(NORMAL_INSTALL) @list='$(pkginclude_HEADERS)'; test -n "$(pkgincludedir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(pkgincludedir)'"; \ $(MKDIR_P) "$(DESTDIR)$(pkgincludedir)" || 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_HEADER) $$files '$(DESTDIR)$(pkgincludedir)'"; \ $(INSTALL_HEADER) $$files "$(DESTDIR)$(pkgincludedir)" || exit $$?; \ done uninstall-pkgincludeHEADERS: @$(NORMAL_UNINSTALL) @list='$(pkginclude_HEADERS)'; test -n "$(pkgincludedir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(pkgincludedir)'; $(am__uninstall_files_from_dir) 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 @BUILD_HTTPD_FALSE@all-local: all-am: Makefile $(LTLIBRARIES) $(HEADERS) all-local installdirs: for dir in "$(DESTDIR)$(pkglibdir)" "$(DESTDIR)$(pkgincludedir)"; 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." @BUILD_HTTPD_TRUE@install-exec-local: clean: clean-am clean-am: clean-generic clean-libtool clean-pkglibLTLIBRARIES \ mostlyclean-am distclean: distclean-am -rm -f ./$(DEPDIR)/filter.Plo -rm -f ./$(DEPDIR)/handle.Plo -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-pkgincludeHEADERS install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-exec-local install-pkglibLTLIBRARIES 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)/filter.Plo -rm -f ./$(DEPDIR)/handle.Plo -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-pkgincludeHEADERS uninstall-pkglibLTLIBRARIES .MAKE: install-am install-strip .PHONY: CTAGS GTAGS TAGS all all-am all-local am--depfiles check \ check-am clean clean-generic clean-libtool \ clean-pkglibLTLIBRARIES 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-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am install-exec-local \ install-html install-html-am install-info install-info-am \ install-man install-pdf install-pdf-am \ install-pkgincludeHEADERS install-pkglibLTLIBRARIES 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-pkgincludeHEADERS \ uninstall-pkglibLTLIBRARIES .PRECIOUS: Makefile # XXX FIXME: static builds don't work anymore # mod_apreq2 needs to be built from httpd-2.X, e.g. # # % cd ../httpd-2.X; # % ./configure --with-module=filters:../httpd-apreq-2/module/apache2/mod_apreq2.c ... # # See the INSTALL file for details. @BUILD_HTTPD_TRUE@@APACHE2_HTTPD@: @BUILD_HTTPD_TRUE@ cd @APACHE2_SRC@ && $(MAKE) @BUILD_HTTPD_TRUE@all-local: @APACHE2_HTTPD@ @BUILD_HTTPD_FALSE@install-exec-local : @BUILD_HTTPD_FALSE@ @echo "----------------------------------------------------------------------" @BUILD_HTTPD_FALSE@ @echo "Before you can use mod_apreq2, you must ensure that an appropriate" @BUILD_HTTPD_FALSE@ @echo "\"LoadModule\" line appears in your webserver's config file:" @BUILD_HTTPD_FALSE@ @echo "$(pkgcfgdir)/httpd.conf" @BUILD_HTTPD_FALSE@ @echo @BUILD_HTTPD_FALSE@ @echo "LoadModule apreq_module $(pkglibdir)/mod_apreq2.so" @BUILD_HTTPD_FALSE@ @echo "----------------------------------------------------------------------" # 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: libapreq2-2.17/module/Makefile.am0000644000175000017500000000162214277401734016267 0ustar jortonjortonAM_CPPFLAGS = @APR_INCLUDES@ SUBDIRS = apache2 TEST_CONFIG_SCRIPT = package Apache::TestMM; filter_args(); generate_script("t/TEST") EXTRA_DIST = t noinst_PROGRAMS = test_cgi test_cgi_LDFLAGS = `@APREQ_CONFIG@ --link-libtool` @APR_LDFLAGS@ run_tests : t/TEST if [ ! -d t/cgi-bin ]; then mkdir t/cgi-bin; fi -cp -f test_cgi t/cgi-bin -cp -Rp .libs t/cgi-bin MAKE=$(MAKE) @PERL@ t/TEST t/TEST : Makefile.am t/TEST.PL @PERL@ -MApache::TestMM -e '$(TEST_CONFIG_SCRIPT)' -- -apxs @APACHE2_APXS@ test :: all check run_tests test_clean : cmodules_clean -MAKE=$(MAKE) @PERL@ t/TEST -clean -rm -rf t/htdocs t/logs t/modules t/TEST t/core t/core.* t/cgi-bin/test_cgi t/cgi-bin/.libs t/.libs t/conf/extra.conf t/conf/ssl/ca t/conf/ssl/httpd-passphrase.pl cmodules_clean: -cd t/c-modules && $(MAKE) clean -rm t/c-modules/Makefile t/c-modules/*/Makefile t/c-modules/apache_httpd_test.h clean-local: test_clean libapreq2-2.17/module/Makefile.in0000644000175000017500000005626214277402427016312 0ustar jortonjorton# 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@ 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@ noinst_PROGRAMS = test_cgi$(EXEEXT) subdir = module ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/include/apreq_config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = PROGRAMS = $(noinst_PROGRAMS) test_cgi_SOURCES = test_cgi.c test_cgi_OBJECTS = test_cgi.$(OBJEXT) test_cgi_LDADD = $(LDADD) 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 = test_cgi_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(test_cgi_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)/include depcomp = $(SHELL) $(top_srcdir)/depcomp am__maybe_remake_depfiles = depfiles am__depfiles_remade = ./$(DEPDIR)/test_cgi.Po am__mv = mv -f 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 = test_cgi.c DIST_SOURCES = test_cgi.c 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 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)/depcomp 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@ APACHE1_APXS = @APACHE1_APXS@ APACHE2_APXS = @APACHE2_APXS@ APACHE2_HTTPD = @APACHE2_HTTPD@ APACHE2_INCLUDES = @APACHE2_INCLUDES@ APACHE2_SRC = @APACHE2_SRC@ APREQ_CONFIG = @APREQ_CONFIG@ APREQ_DOTTED_VERSION = @APREQ_DOTTED_VERSION@ APREQ_LIBNAME = @APREQ_LIBNAME@ APREQ_LIBTOOL_VERSION = @APREQ_LIBTOOL_VERSION@ APREQ_MAJOR_VERSION = @APREQ_MAJOR_VERSION@ APR_CONFIG = @APR_CONFIG@ APR_DOC_VERSION = @APR_DOC_VERSION@ APR_INCLUDES = @APR_INCLUDES@ APR_LA = @APR_LA@ APR_LDFLAGS = @APR_LDFLAGS@ APR_LIBS = @APR_LIBS@ APR_LTFLAGS = @APR_LTFLAGS@ APU_CONFIG = @APU_CONFIG@ APU_DOC_VERSION = @APU_DOC_VERSION@ APU_LA = @APU_LA@ AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPPFLAGS = @CPPFLAGS@ CSCOPE = @CSCOPE@ CTAGS = @CTAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ 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@ GREP = @GREP@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ MM_OPTS = @MM_OPTS@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ 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@ PERL = @PERL@ PERL_OPTS = @PERL_OPTS@ RANLIB = @RANLIB@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ TAR = @TAR@ VERSION = @VERSION@ 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_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@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ 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@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ AM_CPPFLAGS = @APR_INCLUDES@ SUBDIRS = apache2 TEST_CONFIG_SCRIPT = package Apache::TestMM; filter_args(); generate_script("t/TEST") EXTRA_DIST = t test_cgi_LDFLAGS = `@APREQ_CONFIG@ --link-libtool` @APR_LDFLAGS@ all: all-recursive .SUFFIXES: .SUFFIXES: .c .lo .o .obj $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(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 module/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu module/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: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): 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 test_cgi$(EXEEXT): $(test_cgi_OBJECTS) $(test_cgi_DEPENDENCIES) $(EXTRA_test_cgi_DEPENDENCIES) @rm -f test_cgi$(EXEEXT) $(AM_V_CCLD)$(test_cgi_LINK) $(test_cgi_OBJECTS) $(test_cgi_LDADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_cgi.Po@am__quote@ # am--include-marker $(am__depfiles_remade): @$(MKDIR_P) $(@D) @echo '# dummy' >$@-t && $(am__mv) $@-t $@ am--depfiles: $(am__depfiles_remade) .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $< .c.obj: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .c.lo: @am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs # 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 $(PROGRAMS) 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 clean-noinstPROGRAMS \ mostlyclean-am distclean: distclean-recursive -rm -f ./$(DEPDIR)/test_cgi.Po -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ 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 ./$(DEPDIR)/test_cgi.Po -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-recursive mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-recursive pdf-am: ps: ps-recursive ps-am: uninstall-am: .MAKE: $(am__recursive_targets) install-am install-strip .PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am \ am--depfiles check check-am clean 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-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-compile \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ tags tags-am uninstall uninstall-am .PRECIOUS: Makefile run_tests : t/TEST if [ ! -d t/cgi-bin ]; then mkdir t/cgi-bin; fi -cp -f test_cgi t/cgi-bin -cp -Rp .libs t/cgi-bin MAKE=$(MAKE) @PERL@ t/TEST t/TEST : Makefile.am t/TEST.PL @PERL@ -MApache::TestMM -e '$(TEST_CONFIG_SCRIPT)' -- -apxs @APACHE2_APXS@ test :: all check run_tests test_clean : cmodules_clean -MAKE=$(MAKE) @PERL@ t/TEST -clean -rm -rf t/htdocs t/logs t/modules t/TEST t/core t/core.* t/cgi-bin/test_cgi t/cgi-bin/.libs t/.libs t/conf/extra.conf t/conf/ssl/ca t/conf/ssl/httpd-passphrase.pl cmodules_clean: -cd t/c-modules && $(MAKE) clean -rm t/c-modules/Makefile t/c-modules/*/Makefile t/c-modules/apache_httpd_test.h clean-local: test_clean # 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: libapreq2-2.17/module/t/big_request.t0000644000175000017500000000344414277401734017200 0ustar jortonjortonuse strict; use warnings FATAL => 'all'; use Apache::Test; use Apache::TestUtil; use Apache::TestConfig; use Apache::TestRequest qw(GET_BODY POST_BODY); my @key_len = (5, 100, 305); my @key_num = (5, 15, 26); my @keys = ('a'..'z'); my @big_key_len = (100, 500, 5000, 10000); my @big_key_num = (5, 15, 25); my @big_keys = ('a'..'z'); my $num_tests = @key_len * @key_num + @big_key_len * @big_key_num; $num_tests *= 2 if Apache::Test::have_ssl(); plan tests => $num_tests, need_lwp; my $location = "/apreq_big_request_test"; my $scheme = 'http'; START_TESTS: Apache::TestRequest::scheme($scheme); # GET for my $key_len (@key_len) { for my $key_num (@key_num) { my @query = (); my $len = 0; for my $key (@keys[0..($key_num-1)]) { my $pair = "$key=" . 'd' x $key_len; $len += length($pair) - 1; push @query, $pair; } my $query = join ";", @query; t_debug "# of keys : $key_num, key_len $key_len"; my $body = GET_BODY "$location?$query"; ok t_cmp($body, $len, "GET long query"); } } # POST for my $big_key_len (@big_key_len) { for my $big_key_num (@big_key_num) { my @query = (); my $len = 0; for my $big_key (@big_keys[0..($big_key_num-1)]) { my $pair = "$big_key=" . 'd' x $big_key_len; $len += length($pair) - 1; push @query, $pair; } my $query = join ";", @query; t_debug "# of keys : $big_key_num, big_key_len $big_key_len"; my $body = POST_BODY($location, content => $query); ok t_cmp($body, $len, "POST big data"); } } if (Apache::Test::have_ssl() and $scheme ne 'https') { $scheme = 'https'; goto START_TESTS; } libapreq2-2.17/module/t/c-modules/apreq_access_test/mod_apreq_access_test.c0000644000175000017500000000622614277401734026556 0ustar jortonjorton/* ** Licensed to the Apache Software Foundation (ASF) under one or more ** contributor license agreements. See the NOTICE file distributed with ** this work for additional information regarding copyright ownership. ** The ASF licenses this file to You under the Apache License, Version 2.0 ** (the "License"); you may not use this file except in compliance with ** the License. You may obtain a copy of the License at ** ** http://www.apache.org/licenses/LICENSE-2.0 ** ** Unless required by applicable law or agreed to in writing, software ** distributed under the License is distributed on an "AS IS" BASIS, ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. ** See the License for the specific language governing permissions and ** limitations under the License. */ #ifdef CONFIG_FOR_HTTPD_TEST #if CONFIG_FOR_HTTPD_TEST TestAccess test SetHandler apreq_request_test #endif #endif #define APACHE_HTTPD_TEST_ACCESS_CHECKER apreq_access_checker #define APACHE_HTTPD_TEST_COMMANDS access_cmds #define APACHE_HTTPD_TEST_PER_DIR_CREATE create_access_config #include "apache_httpd_test.h" #include "apreq_module_apache2.h" #include "httpd.h" #include "apr_strings.h" extern module AP_MODULE_DECLARE_DATA apreq_access_test_module; struct access_test_cfg { apr_pool_t *pool; const char *param; }; static const char *access_config(cmd_parms *cmd, void *dv, const char *arg) { struct access_test_cfg *cfg = (struct access_test_cfg *)dv; cfg->param = apr_pstrdup(cfg->pool, arg); return NULL; } static const command_rec access_cmds[] = { AP_INIT_TAKE1("TestAccess", access_config, NULL, OR_LIMIT, "'param'"), { NULL } }; static void *create_access_config(apr_pool_t *p, char *dummy) { struct access_test_cfg *cfg = apr_palloc(p, sizeof *cfg); cfg->pool = p; cfg->param = dummy; return cfg; } static int apreq_access_checker(request_rec *r) { apreq_handle_t *handle; apreq_param_t *param; struct access_test_cfg *cfg = (struct access_test_cfg *) ap_get_module_config(r->per_dir_config, &apreq_access_test_module); APR_OPTIONAL_FN_TYPE(apreq_handle_apache2) *fcn = APR_RETRIEVE_OPTIONAL_FN(apreq_handle_apache2); if (!cfg || !cfg->param || !fcn) return DECLINED; handle = fcn(r); param = apreq_param(handle, cfg->param); if (param != NULL) { ap_log_rerror(APLOG_MARK, APLOG_DEBUG, APR_SUCCESS, r, "ACCESS GRANTED: %s => %s", cfg->param, param->v.data); return OK; } else { const apr_table_t *t = apreq_params(handle, r->pool); if (t != NULL) { ap_log_rerror(APLOG_MARK, APLOG_DEBUG, APR_EGENERAL, r, "%s not found: parsing error detected (%d params)", cfg->param, apr_table_elts(t)->nelts); } else { ap_log_rerror(APLOG_MARK, APLOG_DEBUG, APR_EGENERAL, r, "%s not found: paring error detected (no param table)", cfg->param); } return HTTP_FORBIDDEN; } } APACHE_HTTPD_TEST_MODULE(apreq_access_test); libapreq2-2.17/module/t/c-modules/apreq_big_request_test/mod_apreq_big_request_test.c0000644000175000017500000000334314277401734030673 0ustar jortonjorton/* ** Licensed to the Apache Software Foundation (ASF) under one or more ** contributor license agreements. See the NOTICE file distributed with ** this work for additional information regarding copyright ownership. ** The ASF licenses this file to You under the Apache License, Version 2.0 ** (the "License"); you may not use this file except in compliance with ** the License. You may obtain a copy of the License at ** ** http://www.apache.org/licenses/LICENSE-2.0 ** ** Unless required by applicable law or agreed to in writing, software ** distributed under the License is distributed on an "AS IS" BASIS, ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. ** See the License for the specific language governing permissions and ** limitations under the License. */ #ifdef CONFIG_FOR_HTTPD_TEST #if CONFIG_FOR_HTTPD_TEST SetHandler apreq_big_request_test #endif #endif #define APACHE_HTTPD_TEST_HANDLER apreq_big_request_test_handler #include "apache_httpd_test.h" #include "apreq_module_apache2.h" #include "httpd.h" static int dump_table(void *count, const char *key, const char *value) { int *c = (int *) count; *c = *c + strlen(key) + strlen(value); return 1; } static int apreq_big_request_test_handler(request_rec *r) { apreq_handle_t *req; apr_table_t *params; int count = 0; if (strcmp(r->handler, "apreq_big_request_test") != 0) return DECLINED; req = apreq_handle_apache2(r); params = apreq_params(req, r->pool); apr_table_do(dump_table, &count, params, NULL); ap_set_content_type(r, "text/plain"); ap_rprintf(r, "%d", count); return OK; } APACHE_HTTPD_TEST_MODULE(apreq_big_request_test); libapreq2-2.17/module/t/c-modules/apreq_cookie_test/mod_apreq_cookie_test.c0000644000175000017500000000547414277401734026602 0ustar jortonjorton/* ** Licensed to the Apache Software Foundation (ASF) under one or more ** contributor license agreements. See the NOTICE file distributed with ** this work for additional information regarding copyright ownership. ** The ASF licenses this file to You under the Apache License, Version 2.0 ** (the "License"); you may not use this file except in compliance with ** the License. You may obtain a copy of the License at ** ** http://www.apache.org/licenses/LICENSE-2.0 ** ** Unless required by applicable law or agreed to in writing, software ** distributed under the License is distributed on an "AS IS" BASIS, ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. ** See the License for the specific language governing permissions and ** limitations under the License. */ #ifdef CONFIG_FOR_HTTPD_TEST #if CONFIG_FOR_HTTPD_TEST SetHandler apreq_cookie_test #endif #endif #define APACHE_HTTPD_TEST_HANDLER apreq_cookie_test_handler #include "apache_httpd_test.h" #include "apreq_module_apache2.h" #include "apreq_util.h" #include "httpd.h" #include static int dump_table(void *ctx, const char *key, const char *value) { request_rec *r = ctx; ap_log_rerror(APLOG_MARK, APLOG_DEBUG, APR_SUCCESS, r, "[%s] => [%s]", key, value); return 1; } static int apreq_cookie_test_handler(request_rec *r) { apreq_handle_t *req; apr_status_t s; const char *test, *key; apreq_cookie_t *cookie; apr_size_t size; char *dest; const apr_table_t *args; if (strcmp(r->handler, "apreq_cookie_test") != 0) return DECLINED; req = apreq_handle_apache2(r); ap_log_rerror(APLOG_MARK, APLOG_DEBUG, APR_SUCCESS, r, "starting cookie tests"); apreq_args(req, &args); apr_table_do(dump_table, r, args, NULL); test = apr_table_get(args, "test"); key = apr_table_get(args, "key"); cookie = apreq_cookie(req, key); ap_set_content_type(r, "text/plain"); if (strcmp(test, "bake") == 0) { apr_table_add(r->headers_out, "Set-Cookie", apreq_cookie_as_string(cookie, r->pool)); } else if (strcmp(test, "bake2") == 0) { apr_table_add(r->headers_out, "Set-Cookie2", apreq_cookie_as_string(cookie, r->pool)); } else if (strcmp(test, "httponly") == 0) { apreq_cookie_httponly_on(cookie); apr_table_add(r->headers_out, "Set-Cookie", apreq_cookie_as_string(cookie, r->pool)); } else { size = strlen(cookie->v.data); dest = apr_palloc(r->pool, size + 1); s = apreq_decode(dest, &size, cookie->v.data, size); if (s == APR_SUCCESS) ap_rprintf(r, "%s", dest); } return OK; } APACHE_HTTPD_TEST_MODULE(apreq_cookie_test); libapreq2-2.17/module/t/c-modules/apreq_output_filter_test/mod_apreq_output_filter_test.c0000644000175000017500000000576114277401734031671 0ustar jortonjorton/* ** Licensed to the Apache Software Foundation (ASF) under one or more ** contributor license agreements. See the NOTICE file distributed with ** this work for additional information regarding copyright ownership. ** The ASF licenses this file to You under the Apache License, Version 2.0 ** (the "License"); you may not use this file except in compliance with ** the License. You may obtain a copy of the License at ** ** http://www.apache.org/licenses/LICENSE-2.0 ** ** Unless required by applicable law or agreed to in writing, software ** distributed under the License is distributed on an "AS IS" BASIS, ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. ** See the License for the specific language governing permissions and ** limitations under the License. */ #ifdef CONFIG_FOR_HTTPD_TEST #if CONFIG_FOR_HTTPD_TEST AddOutputFilter APREQ_OUTPUT_FILTER html #endif #endif #include "apache_httpd_test.h" #include "apreq_module_apache2.h" #include "httpd.h" #include "util_filter.h" static const char filter_name[] = "APREQ_OUTPUT_FILTER"; extern module AP_MODULE_DECLARE_DATA apreq_output_filter_test_module; static apr_status_t apreq_output_filter_test_init(ap_filter_t *f) { (void)apreq_handle_apache2(f->r); return APR_SUCCESS; } struct ctx_t { request_rec *r; apr_bucket_brigade *bb; }; static int dump_table(void *data, const char *key, const char *value) { struct ctx_t *ctx = (struct ctx_t *)data; ap_log_rerror(APLOG_MARK, APLOG_DEBUG, APR_SUCCESS, ctx->r, "%s => %s", key, value); apr_brigade_printf(ctx->bb,NULL,NULL,"\t%s => %s\n", key, value); return 1; } static apr_status_t apreq_output_filter_test(ap_filter_t *f, apr_bucket_brigade *bb) { request_rec *r = f->r; apreq_handle_t *handle; apr_bucket_brigade *eos; struct ctx_t ctx = {r, bb}; const apr_table_t *t; if (!APR_BUCKET_IS_EOS(APR_BRIGADE_LAST(bb))) return ap_pass_brigade(f->next,bb); eos = apr_brigade_split(bb, APR_BRIGADE_LAST(bb)); handle = apreq_handle_apache2(r); ap_log_rerror(APLOG_MARK, APLOG_DEBUG, APR_SUCCESS, r, "appending parsed data"); apr_brigade_puts(bb, NULL, NULL, "\n--APREQ OUTPUT FILTER--\nARGS:\n"); apreq_args(handle, &t); if (t != NULL) apr_table_do(dump_table, &ctx, t, NULL); apreq_body(handle, &t); if (t != NULL) { apr_brigade_puts(bb,NULL,NULL,"BODY:\n"); apr_table_do(dump_table, &ctx, t, NULL); } APR_BRIGADE_CONCAT(bb,eos); return ap_pass_brigade(f->next,bb); } static void register_hooks (apr_pool_t *p) { (void)p; ap_register_output_filter(filter_name, apreq_output_filter_test, apreq_output_filter_test_init, AP_FTYPE_CONTENT_SET); } module AP_MODULE_DECLARE_DATA apreq_output_filter_test_module = { STANDARD20_MODULE_STUFF, NULL, NULL, NULL, NULL, NULL, register_hooks, /* callback for registering hooks */ }; libapreq2-2.17/module/t/c-modules/apreq_redirect_test/mod_apreq_redirect_test.c0000644000175000017500000000334114277401734027451 0ustar jortonjorton/* ** Licensed to the Apache Software Foundation (ASF) under one or more ** contributor license agreements. See the NOTICE file distributed with ** this work for additional information regarding copyright ownership. ** The ASF licenses this file to You under the Apache License, Version 2.0 ** (the "License"); you may not use this file except in compliance with ** the License. You may obtain a copy of the License at ** ** http://www.apache.org/licenses/LICENSE-2.0 ** ** Unless required by applicable law or agreed to in writing, software ** distributed under the License is distributed on an "AS IS" BASIS, ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. ** See the License for the specific language governing permissions and ** limitations under the License. */ #ifdef CONFIG_FOR_HTTPD_TEST #if CONFIG_FOR_HTTPD_TEST TestAccess test SetHandler apreq_redirect_test #endif #endif #define APACHE_HTTPD_TEST_HANDLER apreq_redirect_test_handler #include "apache_httpd_test.h" #include "apreq_module_apache2.h" #include "httpd.h" static int apreq_redirect_test_handler(request_rec *r) { apreq_handle_t *req; const apreq_param_t *loc; if (strcmp(r->handler, "apreq_redirect_test") != 0) return DECLINED; req = apreq_handle_apache2(r); ap_log_rerror(APLOG_MARK, APLOG_DEBUG, APR_SUCCESS, r, "looking for new location"); loc = apreq_param(req, "location"); if (!loc) return DECLINED; ap_log_rerror(APLOG_MARK, APLOG_DEBUG, APR_SUCCESS, r, "redirecting to %s", loc->v.data); ap_internal_redirect(loc->v.data, r); return OK; } APACHE_HTTPD_TEST_MODULE(apreq_redirect_test); libapreq2-2.17/module/t/c-modules/apreq_request_test/mod_apreq_request_test.c0000644000175000017500000000444514277401734027235 0ustar jortonjorton/* ** Licensed to the Apache Software Foundation (ASF) under one or more ** contributor license agreements. See the NOTICE file distributed with ** this work for additional information regarding copyright ownership. ** The ASF licenses this file to You under the Apache License, Version 2.0 ** (the "License"); you may not use this file except in compliance with ** the License. You may obtain a copy of the License at ** ** http://www.apache.org/licenses/LICENSE-2.0 ** ** Unless required by applicable law or agreed to in writing, software ** distributed under the License is distributed on an "AS IS" BASIS, ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. ** See the License for the specific language governing permissions and ** limitations under the License. */ #ifdef CONFIG_FOR_HTTPD_TEST #if CONFIG_FOR_HTTPD_TEST APREQ2_ReadLimit 500K SetHandler apreq_request_test #endif #endif #define APACHE_HTTPD_TEST_HANDLER apreq_request_test_handler #include "apache_httpd_test.h" #include "apreq_module_apache2.h" #include "httpd.h" static int dump_table(void *ctx, const char *key, const char *value) { request_rec *r = ctx; ap_log_rerror(APLOG_MARK, APLOG_DEBUG, APR_SUCCESS, r, "%s => %s", key, value); ap_rprintf(r, "\t%s => %s\n", key, value); return 1; } static int apreq_request_test_handler(request_rec *r) { apreq_handle_t *req; const apr_table_t *t; apr_status_t s; if (strcmp(r->handler, "apreq_request_test") != 0) return DECLINED; req = apreq_handle_apache2(r); ap_log_rerror(APLOG_MARK, APLOG_DEBUG, APR_SUCCESS, r, "starting apreq_request_test"); s = ap_discard_request_body(r); ap_log_rerror(APLOG_MARK, APLOG_DEBUG, s, r, "discard request body"); ap_set_content_type(r, "text/plain"); ap_rputs("ARGS:\n",r); if (apreq_args(req, &t) == APR_SUCCESS) apr_table_do(dump_table, r, t, NULL); if (apreq_body(req, &t) == APR_SUCCESS) { ap_rputs("BODY:\n",r); apr_table_do(dump_table, r, t, NULL); } ap_log_rerror(APLOG_MARK, APLOG_DEBUG, APR_SUCCESS, r, "finished apreq_request_test"); return OK; } APACHE_HTTPD_TEST_MODULE(apreq_request_test); libapreq2-2.17/module/t/c-modules/apreq_upload_test/10k0000644000175000017500000002400014277401734022412 0ustar jortonjortonlibapreq2-2.17/module/t/c-modules/apreq_upload_test/128k0000644000175000017500000040000014277401734022502 0ustar jortonjortonlibapreq2-2.17/module/t/c-modules/apreq_upload_test/1b0000644000175000017500000000000114277401734022314 0ustar jortonjortonlibapreq2-2.17/module/t/c-modules/apreq_upload_test/1k0000644000175000017500000000200014277401734022326 0ustar jortonjortonlibapreq2-2.17/module/t/c-modules/apreq_upload_test/63k0000644000175000017500000017600014277401734022432 0ustar jortonjortonlibapreq2-2.17/module/t/c-modules/apreq_upload_test/64k0000644000175000017500000020000014277401734022417 0ustar jortonjortonlibapreq2-2.17/module/t/c-modules/apreq_upload_test/65k0000644000175000017500000020200014277401734022422 0ustar jortonjortonlibapreq2-2.17/module/t/c-modules/apreq_upload_test/mod_apreq_upload_test.c0000644000175000017500000000527114277401734026623 0ustar jortonjorton/* ** Licensed to the Apache Software Foundation (ASF) under one or more ** contributor license agreements. See the NOTICE file distributed with ** this work for additional information regarding copyright ownership. ** The ASF licenses this file to You under the Apache License, Version 2.0 ** (the "License"); you may not use this file except in compliance with ** the License. You may obtain a copy of the License at ** ** http://www.apache.org/licenses/LICENSE-2.0 ** ** Unless required by applicable law or agreed to in writing, software ** distributed under the License is distributed on an "AS IS" BASIS, ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. ** See the License for the specific language governing permissions and ** limitations under the License. */ #ifdef CONFIG_FOR_HTTPD_TEST #if CONFIG_FOR_HTTPD_TEST SetHandler apreq_upload_test #endif #endif #define APACHE_HTTPD_TEST_HANDLER apreq_upload_test_handler #include "apache_httpd_test.h" #include "apreq_module.h" #include "apreq_param.h" #include "apreq_module_apache2.h" #include "apreq_util.h" #include "httpd.h" static int apreq_upload_test_handler(request_rec *r) { apreq_handle_t *req; const apreq_param_t *param; if (strcmp(r->handler, "apreq_upload_test") != 0) { return DECLINED; } req = apreq_handle_apache2(r) ; ap_log_rerror(APLOG_MARK, APLOG_DEBUG, APR_SUCCESS, r, "starting apreq_upload_test"); ap_set_content_type(r, "text/plain"); param = apreq_body_get(req, "filename"); if (param == NULL) { ap_rputs("missing upload field", r); } else if (param->upload == NULL) { ap_rputs("not an upload field", r); } else { apr_bucket_brigade *bb; /* upload contents */ apr_bucket *e; apr_size_t total = 0; bb = apr_brigade_create(r->pool, r->connection->bucket_alloc); apreq_brigade_copy(bb, param->upload); while ((e = APR_BRIGADE_FIRST(bb)) != APR_BRIGADE_SENTINEL(bb)) { apr_size_t dlen; const char *data; /* apr_bucket_read() has side effects on spool buckets, which * is why we read from a copy of the brigade - to conserve memory */ if (apr_bucket_read(e, &data, &dlen, APR_BLOCK_READ)) { ap_rprintf(r, "bad bucket read"); break; } else { total += dlen; } apr_bucket_delete(e); } ap_rprintf(r, "%ld", (unsigned long)total); } ap_log_rerror(APLOG_MARK, APLOG_DEBUG, APR_SUCCESS, r, "finished apreq_upload_test"); return OK; } APACHE_HTTPD_TEST_MODULE(apreq_upload_test); libapreq2-2.17/module/t/cgi.t0000644000175000017500000000765514277401734015441 0ustar jortonjortonuse strict; use warnings FATAL => 'all'; use Apache::Test; use Apache::TestUtil; use Apache::TestConfig; use Apache::TestRequest qw(GET_BODY UPLOAD_BODY POST_BODY GET_RC GET_HEAD); use constant WIN32 => Apache::TestConfig::WIN32; my @key_len = (5, 100, 305); my @key_num = (5, 15, 26); my @keys = ('a'..'z'); my @big_key_len = (100, 500, 5000, 10000); my @big_key_num = (5, 15, 25); my @big_keys = ('a'..'z'); plan tests => 10 + @key_len * @key_num + @big_key_len * @big_key_num, need_lwp && need_cgi; require HTTP::Cookies; my $location = '/cgi-bin'; my $script = $location . (WIN32 ? '/test_cgi.exe' : '/test_cgi'); my $line_end = "\n"; my $filler = "0123456789" x 20; # < 64K # GET for my $key_len (@key_len) { for my $key_num (@key_num) { my @query = (); my $len = 0; for my $key (@keys[0..($key_num-1)]) { my $pair = "$key=" . 'd' x $key_len; $len += length($pair) - 1; push @query, $pair; } my $query = join ";", @query; t_debug "# of keys : $key_num, key_len $key_len"; my $body = GET_BODY "$script?$query"; ok t_cmp($body, $len, "GET long query"); } } # POST for my $big_key_len (@big_key_len) { for my $big_key_num (@big_key_num) { my @query = (); my $len = 0; for my $big_key (@big_keys[0..($big_key_num-1)]) { my $pair = "$big_key=" . 'd' x $big_key_len; $len += length($pair) - 1; push @query, $pair; } my $query = join ";", @query; t_debug "# of keys : $big_key_num, big_key_len $big_key_len"; my $body = POST_BODY($script, content => $query); ok t_cmp($body, $len, "POST big data"); } } ok t_cmp(POST_BODY("$script?foo=1", Content => $filler), "\tfoo => 1$line_end", "simple post"); ok t_cmp(GET_BODY("$script?foo=%3F&bar=hello+world"), "\tfoo => ?$line_end\tbar => hello world$line_end", "simple get"); my $body = POST_BODY($script, content => "aaa=$filler;foo=1;bar=2;filler=$filler"); ok t_cmp($body, "\tfoo => 1$line_end\tbar => 2$line_end", "simple post"); $body = POST_BODY("$script?foo=1", content => "intro=$filler&bar=2&conclusion=$filler"); ok t_cmp($body, "\tfoo => 1$line_end\tbar => 2$line_end", "simple post"); $body = UPLOAD_BODY("$script?foo=0", content => $filler); ok t_cmp($body, "\tfoo => 0$line_end", "simple upload"); { my $test = 'netscape'; my $key = 'apache'; my $value = 'ok'; my $cookie = qq{$key=$value}; ok t_cmp($value, GET_BODY("$script?test=$test&key=$key", Cookie => $cookie), $test); } { my $test = 'rfc'; my $key = 'apache'; my $value = 'ok'; my $cookie = qq{\$Version="1"; $key="$value"; \$Path="$location"}; ok t_cmp(qq{"$value"}, GET_BODY("$script?test=$test&key=$key", Cookie => $cookie), $test); } { my $test = 'encoded value with space'; my $key = 'apache'; my $value = 'okie dokie'; my $cookie = "$key=" . join '', map {/ / ? '+' : sprintf '%%%.2X', ord} split //, $value; ok t_cmp($value, GET_BODY("$script?test=$test&key=$key", Cookie => $cookie), $test); } { my $test = 'bake'; my $key = 'apache'; my $value = 'ok'; my $cookie = "$key=$value"; my ($header) = GET_HEAD("$script?test=$test&key=$key", Cookie => $cookie) =~ /^#Set-Cookie:\s+(.+)/m; ok t_cmp($cookie, $header, $test); } { my $test = 'bake2'; my $key = 'apache'; my $value = 'ok'; my $cookie = qq{\$Version="1"; $key="$value"; \$Path="$location"}; my ($header) = GET_HEAD("$script?test=$test&key=$key", Cookie => $cookie) =~ /^#Set-Cookie2:\s+(.+)/m; ok t_cmp(qq{$key="$value"; Version=1; path="$location"}, $header, $test); } libapreq2-2.17/module/t/conf/extra.conf.in0000644000175000017500000000025714277401734020025 0ustar jortonjorton ScriptAlias /cgi-bin/ "@ServerRoot@/cgi-bin/" AllowOverride None Options None libapreq2-2.17/module/t/conf/ssl/ca-bundle-duplicates.crt0000644000175000017500000001411514277401734022724 0ustar jortonjorton#some duplicates of certs found in mod_ssl-2.x.x-1.3.xx/pkg.sslcfg/ca-bundle.crt #to make sure mod_ssl can handle duplicates ABAecom (sub., Am. Bankers Assn.) Root CA ========================================= MD5 Fingerprint: 82:12:F7:89:E1:0B:91:60:A4:B6:22:9F:94:68:11:92 PEM Data: -----BEGIN CERTIFICATE----- MIID+DCCAuCgAwIBAgIRANAeQJAAACdLAAAAAQAAAAQwDQYJKoZIhvcNAQEFBQAw gYwxCzAJBgNVBAYTAlVTMQ0wCwYDVQQIEwRVdGFoMRcwFQYDVQQHEw5TYWx0IExh a2UgQ2l0eTEYMBYGA1UEChMPWGNlcnQgRVogYnkgRFNUMRgwFgYDVQQDEw9YY2Vy dCBFWiBieSBEU1QxITAfBgkqhkiG9w0BCQEWEmNhQGRpZ3NpZ3RydXN0LmNvbTAe Fw05OTA3MTQxNjE0MThaFw0wOTA3MTExNjE0MThaMIGMMQswCQYDVQQGEwJVUzEN MAsGA1UECBMEVXRhaDEXMBUGA1UEBxMOU2FsdCBMYWtlIENpdHkxGDAWBgNVBAoT D1hjZXJ0IEVaIGJ5IERTVDEYMBYGA1UEAxMPWGNlcnQgRVogYnkgRFNUMSEwHwYJ KoZIhvcNAQkBFhJjYUBkaWdzaWd0cnVzdC5jb20wggEiMA0GCSqGSIb3DQEBAQUA A4IBDwAwggEKAoIBAQCtVBjetL/3reh0qu2LfI/C1HUa1YS5tmL8ie/kl2GS+x24 4VpHNJ6eBiL70+o4y7iLB/caoBd3B1owHNQpOCDXJ0DYUJNDv9IYoil2BXKqa7Zp mKt5Hhxl9WqL/MUWqqJy2mDtTm4ZJXoKHTDjUJtCPETrobAgHtsCfv49H7/QAIrb QHamGKUVp1e2UsIBF5h3j4qBxhq0airmr6nWAKzP2BVJfNsbof6B+of505DBAsD5 0ELpkWglX8a/hznplQBgKL+DLMDnXrbXNhbnYId26OcnsiUNi3rlqh3lWc3OCw5v xsic4xDZhTnTt5v6xrp8dNJddVardKSiUb9SfO5xAgMBAAGjUzBRMA8GA1UdEwEB /wQFMAMBAf8wHwYDVR0jBBgwFoAUCCBsZuuBCmxc1bWmPEHdHJaRJ3cwHQYDVR0O BBYEFAggbGbrgQpsXNW1pjxB3RyWkSd3MA0GCSqGSIb3DQEBBQUAA4IBAQBah1iP Lat2IWtUDNnxQfZOzSue4x+boy1/2St9WMhnpCn16ezVvZY/o3P4xFs2fNBjLDQ5 m0i4PW/2FMWeY+anNG7T6DOzxzwYbiOuQ5KZP5jFaTDxNjutuTCC1rZZFpYCCykS YbQRifcML5SQhZgonFNsfmPdc/QZ/0qB0bJSI/08SjTOWhvgUIrtT4GV2GDn5MQN u1g+WPdOaG8+Z8nLepcWJ+xCYRR2uwDF6wg9FX9LtiJdhzuQ9PPA/jez6dliDMDD Wa9gvR8N26E0HzDEPYutsB0Ek+1f1eS/IDAE9EjpMwHRLpAnUrOb3jocq6mXf5vr wo3CbezcE9NGxXl8 -----END CERTIFICATE----- Certificate Ingredients: Data: Version: 3 (0x2) Serial Number: d0:1e:40:90:00:00:27:4b:00:00:00:01:00:00:00:04 Signature Algorithm: sha1WithRSAEncryption Issuer: C=US, ST=Utah, L=Salt Lake City, O=Xcert EZ by DST, CN=Xcert EZ by DST/Email=ca@digsigtrust.com Validity Not Before: Jul 14 16:14:18 1999 GMT Not After : Jul 11 16:14:18 2009 GMT Subject: C=US, ST=Utah, L=Salt Lake City, O=Xcert EZ by DST, CN=Xcert EZ by DST/Email=ca@digsigtrust.com Subject Public Key Info: Public Key Algorithm: rsaEncryption RSA Public Key: (2048 bit) Modulus (2048 bit): 00:ad:54:18:de:b4:bf:f7:ad:e8:74:aa:ed:8b:7c: 8f:c2:d4:75:1a:d5:84:b9:b6:62:fc:89:ef:e4:97: 61:92:fb:1d:b8:e1:5a:47:34:9e:9e:06:22:fb:d3: ea:38:cb:b8:8b:07:f7:1a:a0:17:77:07:5a:30:1c: d4:29:38:20:d7:27:40:d8:50:93:43:bf:d2:18:a2: 29:76:05:72:aa:6b:b6:69:98:ab:79:1e:1c:65:f5: 6a:8b:fc:c5:16:aa:a2:72:da:60:ed:4e:6e:19:25: 7a:0a:1d:30:e3:50:9b:42:3c:44:eb:a1:b0:20:1e: db:02:7e:fe:3d:1f:bf:d0:00:8a:db:40:76:a6:18: a5:15:a7:57:b6:52:c2:01:17:98:77:8f:8a:81:c6: 1a:b4:6a:2a:e6:af:a9:d6:00:ac:cf:d8:15:49:7c: db:1b:a1:fe:81:fa:87:f9:d3:90:c1:02:c0:f9:d0: 42:e9:91:68:25:5f:c6:bf:87:39:e9:95:00:60:28: bf:83:2c:c0:e7:5e:b6:d7:36:16:e7:60:87:76:e8: e7:27:b2:25:0d:8b:7a:e5:aa:1d:e5:59:cd:ce:0b: 0e:6f:c6:c8:9c:e3:10:d9:85:39:d3:b7:9b:fa:c6: ba:7c:74:d2:5d:75:56:ab:74:a4:a2:51:bf:52:7c: ee:71 Exponent: 65537 (0x10001) X509v3 extensions: X509v3 Basic Constraints: critical CA:TRUE X509v3 Authority Key Identifier: keyid:08:20:6C:66:EB:81:0A:6C:5C:D5:B5:A6:3C:41:DD:1C:96:91:27:77 X509v3 Subject Key Identifier: 08:20:6C:66:EB:81:0A:6C:5C:D5:B5:A6:3C:41:DD:1C:96:91:27:77 Signature Algorithm: sha1WithRSAEncryption 5a:87:58:8f:2d:ab:76:21:6b:54:0c:d9:f1:41:f6:4e:cd:2b: 9e:e3:1f:9b:a3:2d:7f:d9:2b:7d:58:c8:67:a4:29:f5:e9:ec: d5:bd:96:3f:a3:73:f8:c4:5b:36:7c:d0:63:2c:34:39:9b:48: b8:3d:6f:f6:14:c5:9e:63:e6:a7:34:6e:d3:e8:33:b3:c7:3c: 18:6e:23:ae:43:92:99:3f:98:c5:69:30:f1:36:3b:ad:b9:30: 82:d6:b6:59:16:96:02:0b:29:12:61:b4:11:89:f7:0c:2f:94: 90:85:98:28:9c:53:6c:7e:63:dd:73:f4:19:ff:4a:81:d1:b2: 52:23:fd:3c:4a:34:ce:5a:1b:e0:50:8a:ed:4f:81:95:d8:60: e7:e4:c4:0d:bb:58:3e:58:f7:4e:68:6f:3e:67:c9:cb:7a:97: 16:27:ec:42:61:14:76:bb:00:c5:eb:08:3d:15:7f:4b:b6:22: 5d:87:3b:90:f4:f3:c0:fe:37:b3:e9:d9:62:0c:c0:c3:59:af: 60:bd:1f:0d:db:a1:34:1f:30:c4:3d:8b:ad:b0:1d:04:93:ed: 5f:d5:e4:bf:20:30:04:f4:48:e9:33:01:d1:2e:90:27:52:b3: 9b:de:3a:1c:ab:a9:97:7f:9b:eb:c2:8d:c2:6d:ec:dc:13:d3: 46:c5:79:7c ANX Network CA by DST ===================== MD5 Fingerprint: A8:ED:DE:EB:93:88:66:D8:2F:C3:BD:1D:BE:45:BE:4D PEM Data: -----BEGIN CERTIFICATE----- MIIDTTCCAragAwIBAgIENm6ibzANBgkqhkiG9w0BAQUFADBSMQswCQYDVQQGEwJV UzEkMCIGA1UEChMbRGlnaXRhbCBTaWduYXR1cmUgVHJ1c3QgQ28uMR0wGwYDVQQL ExREU1QgKEFOWCBOZXR3b3JrKSBDQTAeFw05ODEyMDkxNTQ2NDhaFw0xODEyMDkx NjE2NDhaMFIxCzAJBgNVBAYTAlVTMSQwIgYDVQQKExtEaWdpdGFsIFNpZ25hdHVy ZSBUcnVzdCBDby4xHTAbBgNVBAsTFERTVCAoQU5YIE5ldHdvcmspIENBMIGdMA0G CSqGSIb3DQEBAQUAA4GLADCBhwKBgQC0SBGAWKDVpZkP9jcsRLZu0XzzKmueEbaI IwRccSWeahJ3EW6/aDllqPay9qIYsokVoGe3eowiSGv2hDQftsr3G3LL8ltI04ce InYTBLSsbJZ/5w4IyTJRMC3VgOghZ7rzXggkLAdZnZAa7kbJtaQelrRBkdR/0o04 JrBvQ24JfQIBA6OCATAwggEsMBEGCWCGSAGG+EIBAQQEAwIABzB0BgNVHR8EbTBr MGmgZ6BlpGMwYTELMAkGA1UEBhMCVVMxJDAiBgNVBAoTG0RpZ2l0YWwgU2lnbmF0 dXJlIFRydXN0IENvLjEdMBsGA1UECxMURFNUIChBTlggTmV0d29yaykgQ0ExDTAL BgNVBAMTBENSTDEwKwYDVR0QBCQwIoAPMTk5ODEyMDkxNTQ2NDhagQ8yMDE4MTIw OTE1NDY0OFowCwYDVR0PBAQDAgEGMB8GA1UdIwQYMBaAFIwWVXDMFgpTZMKlhKqz ZBdDP4I2MB0GA1UdDgQWBBSMFlVwzBYKU2TCpYSqs2QXQz+CNjAMBgNVHRMEBTAD AQH/MBkGCSqGSIb2fQdBAAQMMAobBFY0LjADAgSQMA0GCSqGSIb3DQEBBQUAA4GB AEklyWCxDF+pORDTxTRVfc95wynr3vnCQPnoVsXwL+z02exIUbhjOF6TbhiWhbnK UJykuOpmJmiThW9vTHHQvnoLPDG5975pnhDX0UDorBZxq66rOOFwscqSFuBdhaYY gAYAnOGmGEJRp2hoWe8mlF+tMQz+KR4XAYQ3W+gSMqNd -----END CERTIFICATE----- libapreq2-2.17/module/t/conf/ssl/ca-bundle-sample.crt0000644000175000017500000005057714277401734022064 0ustar jortonjorton#pkg.sslcfg/ca-bundle.crt is ~250k, so it is not checked into cvs #for better test results, copy that file into this directory #and leave this one in place ABAecom (sub., Am. Bankers Assn.) Root CA ========================================= MD5 Fingerprint: 82:12:F7:89:E1:0B:91:60:A4:B6:22:9F:94:68:11:92 PEM Data: -----BEGIN CERTIFICATE----- MIID+DCCAuCgAwIBAgIRANAeQJAAACdLAAAAAQAAAAQwDQYJKoZIhvcNAQEFBQAw gYwxCzAJBgNVBAYTAlVTMQ0wCwYDVQQIEwRVdGFoMRcwFQYDVQQHEw5TYWx0IExh a2UgQ2l0eTEYMBYGA1UEChMPWGNlcnQgRVogYnkgRFNUMRgwFgYDVQQDEw9YY2Vy dCBFWiBieSBEU1QxITAfBgkqhkiG9w0BCQEWEmNhQGRpZ3NpZ3RydXN0LmNvbTAe Fw05OTA3MTQxNjE0MThaFw0wOTA3MTExNjE0MThaMIGMMQswCQYDVQQGEwJVUzEN MAsGA1UECBMEVXRhaDEXMBUGA1UEBxMOU2FsdCBMYWtlIENpdHkxGDAWBgNVBAoT D1hjZXJ0IEVaIGJ5IERTVDEYMBYGA1UEAxMPWGNlcnQgRVogYnkgRFNUMSEwHwYJ KoZIhvcNAQkBFhJjYUBkaWdzaWd0cnVzdC5jb20wggEiMA0GCSqGSIb3DQEBAQUA A4IBDwAwggEKAoIBAQCtVBjetL/3reh0qu2LfI/C1HUa1YS5tmL8ie/kl2GS+x24 4VpHNJ6eBiL70+o4y7iLB/caoBd3B1owHNQpOCDXJ0DYUJNDv9IYoil2BXKqa7Zp mKt5Hhxl9WqL/MUWqqJy2mDtTm4ZJXoKHTDjUJtCPETrobAgHtsCfv49H7/QAIrb QHamGKUVp1e2UsIBF5h3j4qBxhq0airmr6nWAKzP2BVJfNsbof6B+of505DBAsD5 0ELpkWglX8a/hznplQBgKL+DLMDnXrbXNhbnYId26OcnsiUNi3rlqh3lWc3OCw5v xsic4xDZhTnTt5v6xrp8dNJddVardKSiUb9SfO5xAgMBAAGjUzBRMA8GA1UdEwEB /wQFMAMBAf8wHwYDVR0jBBgwFoAUCCBsZuuBCmxc1bWmPEHdHJaRJ3cwHQYDVR0O BBYEFAggbGbrgQpsXNW1pjxB3RyWkSd3MA0GCSqGSIb3DQEBBQUAA4IBAQBah1iP Lat2IWtUDNnxQfZOzSue4x+boy1/2St9WMhnpCn16ezVvZY/o3P4xFs2fNBjLDQ5 m0i4PW/2FMWeY+anNG7T6DOzxzwYbiOuQ5KZP5jFaTDxNjutuTCC1rZZFpYCCykS YbQRifcML5SQhZgonFNsfmPdc/QZ/0qB0bJSI/08SjTOWhvgUIrtT4GV2GDn5MQN u1g+WPdOaG8+Z8nLepcWJ+xCYRR2uwDF6wg9FX9LtiJdhzuQ9PPA/jez6dliDMDD Wa9gvR8N26E0HzDEPYutsB0Ek+1f1eS/IDAE9EjpMwHRLpAnUrOb3jocq6mXf5vr wo3CbezcE9NGxXl8 -----END CERTIFICATE----- Certificate Ingredients: Data: Version: 3 (0x2) Serial Number: d0:1e:40:90:00:00:27:4b:00:00:00:01:00:00:00:04 Signature Algorithm: sha1WithRSAEncryption Issuer: C=US, ST=Utah, L=Salt Lake City, O=Xcert EZ by DST, CN=Xcert EZ by DST/Email=ca@digsigtrust.com Validity Not Before: Jul 14 16:14:18 1999 GMT Not After : Jul 11 16:14:18 2009 GMT Subject: C=US, ST=Utah, L=Salt Lake City, O=Xcert EZ by DST, CN=Xcert EZ by DST/Email=ca@digsigtrust.com Subject Public Key Info: Public Key Algorithm: rsaEncryption RSA Public Key: (2048 bit) Modulus (2048 bit): 00:ad:54:18:de:b4:bf:f7:ad:e8:74:aa:ed:8b:7c: 8f:c2:d4:75:1a:d5:84:b9:b6:62:fc:89:ef:e4:97: 61:92:fb:1d:b8:e1:5a:47:34:9e:9e:06:22:fb:d3: ea:38:cb:b8:8b:07:f7:1a:a0:17:77:07:5a:30:1c: d4:29:38:20:d7:27:40:d8:50:93:43:bf:d2:18:a2: 29:76:05:72:aa:6b:b6:69:98:ab:79:1e:1c:65:f5: 6a:8b:fc:c5:16:aa:a2:72:da:60:ed:4e:6e:19:25: 7a:0a:1d:30:e3:50:9b:42:3c:44:eb:a1:b0:20:1e: db:02:7e:fe:3d:1f:bf:d0:00:8a:db:40:76:a6:18: a5:15:a7:57:b6:52:c2:01:17:98:77:8f:8a:81:c6: 1a:b4:6a:2a:e6:af:a9:d6:00:ac:cf:d8:15:49:7c: db:1b:a1:fe:81:fa:87:f9:d3:90:c1:02:c0:f9:d0: 42:e9:91:68:25:5f:c6:bf:87:39:e9:95:00:60:28: bf:83:2c:c0:e7:5e:b6:d7:36:16:e7:60:87:76:e8: e7:27:b2:25:0d:8b:7a:e5:aa:1d:e5:59:cd:ce:0b: 0e:6f:c6:c8:9c:e3:10:d9:85:39:d3:b7:9b:fa:c6: ba:7c:74:d2:5d:75:56:ab:74:a4:a2:51:bf:52:7c: ee:71 Exponent: 65537 (0x10001) X509v3 extensions: X509v3 Basic Constraints: critical CA:TRUE X509v3 Authority Key Identifier: keyid:08:20:6C:66:EB:81:0A:6C:5C:D5:B5:A6:3C:41:DD:1C:96:91:27:77 X509v3 Subject Key Identifier: 08:20:6C:66:EB:81:0A:6C:5C:D5:B5:A6:3C:41:DD:1C:96:91:27:77 Signature Algorithm: sha1WithRSAEncryption 5a:87:58:8f:2d:ab:76:21:6b:54:0c:d9:f1:41:f6:4e:cd:2b: 9e:e3:1f:9b:a3:2d:7f:d9:2b:7d:58:c8:67:a4:29:f5:e9:ec: d5:bd:96:3f:a3:73:f8:c4:5b:36:7c:d0:63:2c:34:39:9b:48: b8:3d:6f:f6:14:c5:9e:63:e6:a7:34:6e:d3:e8:33:b3:c7:3c: 18:6e:23:ae:43:92:99:3f:98:c5:69:30:f1:36:3b:ad:b9:30: 82:d6:b6:59:16:96:02:0b:29:12:61:b4:11:89:f7:0c:2f:94: 90:85:98:28:9c:53:6c:7e:63:dd:73:f4:19:ff:4a:81:d1:b2: 52:23:fd:3c:4a:34:ce:5a:1b:e0:50:8a:ed:4f:81:95:d8:60: e7:e4:c4:0d:bb:58:3e:58:f7:4e:68:6f:3e:67:c9:cb:7a:97: 16:27:ec:42:61:14:76:bb:00:c5:eb:08:3d:15:7f:4b:b6:22: 5d:87:3b:90:f4:f3:c0:fe:37:b3:e9:d9:62:0c:c0:c3:59:af: 60:bd:1f:0d:db:a1:34:1f:30:c4:3d:8b:ad:b0:1d:04:93:ed: 5f:d5:e4:bf:20:30:04:f4:48:e9:33:01:d1:2e:90:27:52:b3: 9b:de:3a:1c:ab:a9:97:7f:9b:eb:c2:8d:c2:6d:ec:dc:13:d3: 46:c5:79:7c ANX Network CA by DST ===================== MD5 Fingerprint: A8:ED:DE:EB:93:88:66:D8:2F:C3:BD:1D:BE:45:BE:4D PEM Data: -----BEGIN CERTIFICATE----- MIIDTTCCAragAwIBAgIENm6ibzANBgkqhkiG9w0BAQUFADBSMQswCQYDVQQGEwJV UzEkMCIGA1UEChMbRGlnaXRhbCBTaWduYXR1cmUgVHJ1c3QgQ28uMR0wGwYDVQQL ExREU1QgKEFOWCBOZXR3b3JrKSBDQTAeFw05ODEyMDkxNTQ2NDhaFw0xODEyMDkx NjE2NDhaMFIxCzAJBgNVBAYTAlVTMSQwIgYDVQQKExtEaWdpdGFsIFNpZ25hdHVy ZSBUcnVzdCBDby4xHTAbBgNVBAsTFERTVCAoQU5YIE5ldHdvcmspIENBMIGdMA0G CSqGSIb3DQEBAQUAA4GLADCBhwKBgQC0SBGAWKDVpZkP9jcsRLZu0XzzKmueEbaI IwRccSWeahJ3EW6/aDllqPay9qIYsokVoGe3eowiSGv2hDQftsr3G3LL8ltI04ce InYTBLSsbJZ/5w4IyTJRMC3VgOghZ7rzXggkLAdZnZAa7kbJtaQelrRBkdR/0o04 JrBvQ24JfQIBA6OCATAwggEsMBEGCWCGSAGG+EIBAQQEAwIABzB0BgNVHR8EbTBr MGmgZ6BlpGMwYTELMAkGA1UEBhMCVVMxJDAiBgNVBAoTG0RpZ2l0YWwgU2lnbmF0 dXJlIFRydXN0IENvLjEdMBsGA1UECxMURFNUIChBTlggTmV0d29yaykgQ0ExDTAL BgNVBAMTBENSTDEwKwYDVR0QBCQwIoAPMTk5ODEyMDkxNTQ2NDhagQ8yMDE4MTIw OTE1NDY0OFowCwYDVR0PBAQDAgEGMB8GA1UdIwQYMBaAFIwWVXDMFgpTZMKlhKqz ZBdDP4I2MB0GA1UdDgQWBBSMFlVwzBYKU2TCpYSqs2QXQz+CNjAMBgNVHRMEBTAD AQH/MBkGCSqGSIb2fQdBAAQMMAobBFY0LjADAgSQMA0GCSqGSIb3DQEBBQUAA4GB AEklyWCxDF+pORDTxTRVfc95wynr3vnCQPnoVsXwL+z02exIUbhjOF6TbhiWhbnK UJykuOpmJmiThW9vTHHQvnoLPDG5975pnhDX0UDorBZxq66rOOFwscqSFuBdhaYY gAYAnOGmGEJRp2hoWe8mlF+tMQz+KR4XAYQ3W+gSMqNd -----END CERTIFICATE----- Certificate Ingredients: Data: Version: 3 (0x2) Serial Number: 913220207 (0x366ea26f) Signature Algorithm: sha1WithRSAEncryption Issuer: C=US, O=Digital Signature Trust Co., OU=DST (ANX Network) CA Validity Not Before: Dec 9 15:46:48 1998 GMT Not After : Dec 9 16:16:48 2018 GMT Subject: C=US, O=Digital Signature Trust Co., OU=DST (ANX Network) CA Subject Public Key Info: Public Key Algorithm: rsaEncryption RSA Public Key: (1024 bit) Modulus (1024 bit): 00:b4:48:11:80:58:a0:d5:a5:99:0f:f6:37:2c:44: b6:6e:d1:7c:f3:2a:6b:9e:11:b6:88:23:04:5c:71: 25:9e:6a:12:77:11:6e:bf:68:39:65:a8:f6:b2:f6: a2:18:b2:89:15:a0:67:b7:7a:8c:22:48:6b:f6:84: 34:1f:b6:ca:f7:1b:72:cb:f2:5b:48:d3:87:1e:22: 76:13:04:b4:ac:6c:96:7f:e7:0e:08:c9:32:51:30: 2d:d5:80:e8:21:67:ba:f3:5e:08:24:2c:07:59:9d: 90:1a:ee:46:c9:b5:a4:1e:96:b4:41:91:d4:7f:d2: 8d:38:26:b0:6f:43:6e:09:7d Exponent: 3 (0x3) X509v3 extensions: Netscape Cert Type: SSL CA, S/MIME CA, Object Signing CA X509v3 CRL Distribution Points: DirName:/C=US/O=Digital Signature Trust Co./OU=DST (ANX Network) CA/CN=CRL1 X509v3 Private Key Usage Period: Not Before: Dec 9 15:46:48 1998 GMT, Not After: Dec 9 15:46:48 2018 GMT X509v3 Key Usage: Certificate Sign, CRL Sign X509v3 Authority Key Identifier: keyid:8C:16:55:70:CC:16:0A:53:64:C2:A5:84:AA:B3:64:17:43:3F:82:36 X509v3 Subject Key Identifier: 8C:16:55:70:CC:16:0A:53:64:C2:A5:84:AA:B3:64:17:43:3F:82:36 X509v3 Basic Constraints: CA:TRUE 1.2.840.113533.7.65.0: 0 ..V4.0.... Signature Algorithm: sha1WithRSAEncryption 49:25:c9:60:b1:0c:5f:a9:39:10:d3:c5:34:55:7d:cf:79:c3: 29:eb:de:f9:c2:40:f9:e8:56:c5:f0:2f:ec:f4:d9:ec:48:51: b8:63:38:5e:93:6e:18:96:85:b9:ca:50:9c:a4:b8:ea:66:26: 68:93:85:6f:6f:4c:71:d0:be:7a:0b:3c:31:b9:f7:be:69:9e: 10:d7:d1:40:e8:ac:16:71:ab:ae:ab:38:e1:70:b1:ca:92:16: e0:5d:85:a6:18:80:06:00:9c:e1:a6:18:42:51:a7:68:68:59: ef:26:94:5f:ad:31:0c:fe:29:1e:17:01:84:37:5b:e8:12:32: a3:5d American Express CA =================== MD5 Fingerprint: 1C:D5:8E:82:BE:70:55:8E:39:61:DF:AD:51:DB:6B:A0 PEM Data: -----BEGIN CERTIFICATE----- MIICkDCCAfkCAgCNMA0GCSqGSIb3DQEBBAUAMIGPMQswCQYDVQQGEwJVUzEnMCUG A1UEChMeQW1lcmljYW4gRXhwcmVzcyBDb21wYW55LCBJbmMuMSYwJAYDVQQLEx1B bWVyaWNhbiBFeHByZXNzIFRlY2hub2xvZ2llczEvMC0GA1UEAxMmQW1lcmljYW4g RXhwcmVzcyBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkwHhcNOTgwODE0MjIwMTAwWhcN MDYwODE0MjM1OTAwWjCBjzELMAkGA1UEBhMCVVMxJzAlBgNVBAoTHkFtZXJpY2Fu IEV4cHJlc3MgQ29tcGFueSwgSW5jLjEmMCQGA1UECxMdQW1lcmljYW4gRXhwcmVz cyBUZWNobm9sb2dpZXMxLzAtBgNVBAMTJkFtZXJpY2FuIEV4cHJlc3MgQ2VydGlm aWNhdGUgQXV0aG9yaXR5MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDJ8kmS hcr9FSm1BrZE7PyIo/KGzv8UTyQckvnCI8HOQ99dNMi4FOzVKnCRSZXXVs2U8amT 0Ggi3E19oApyKkfqJfCFAF82VGHPC/k3Wmed6R/pZD9wlWGn0DAC3iYopGYDBOkw +48zB/lvYYeictvzaHhjZlmpybdm4RWySDYs+QIDAQABMA0GCSqGSIb3DQEBBAUA A4GBAGgXYrhzi0xs60qlPqvlnS7SzYoHV/PGWZd2Fxf4Uo4nk9hY2Chs9KIEeorC diSxArTfKPL386infiNIYYj0EWiuJl32oUtTJWrYKhQCDuCHIG6eGVxzkAsj4jGX Iz/VIqLTBnvaN/XXtUFEF3pFAtmFRWbWjsfwegyZYiJpW+3S -----END CERTIFICATE----- Certificate Ingredients: Data: Version: 1 (0x0) Serial Number: 141 (0x8d) Signature Algorithm: md5WithRSAEncryption Issuer: C=US, O=American Express Company, Inc., OU=American Express Technologies, CN=American Express Certificate Authority Validity Not Before: Aug 14 22:01:00 1998 GMT Not After : Aug 14 23:59:00 2006 GMT Subject: C=US, O=American Express Company, Inc., OU=American Express Technologies, CN=American Express Certificate Authority Subject Public Key Info: Public Key Algorithm: rsaEncryption RSA Public Key: (1024 bit) Modulus (1024 bit): 00:c9:f2:49:92:85:ca:fd:15:29:b5:06:b6:44:ec: fc:88:a3:f2:86:ce:ff:14:4f:24:1c:92:f9:c2:23: c1:ce:43:df:5d:34:c8:b8:14:ec:d5:2a:70:91:49: 95:d7:56:cd:94:f1:a9:93:d0:68:22:dc:4d:7d:a0: 0a:72:2a:47:ea:25:f0:85:00:5f:36:54:61:cf:0b: f9:37:5a:67:9d:e9:1f:e9:64:3f:70:95:61:a7:d0: 30:02:de:26:28:a4:66:03:04:e9:30:fb:8f:33:07: f9:6f:61:87:a2:72:db:f3:68:78:63:66:59:a9:c9: b7:66:e1:15:b2:48:36:2c:f9 Exponent: 65537 (0x10001) Signature Algorithm: md5WithRSAEncryption 68:17:62:b8:73:8b:4c:6c:eb:4a:a5:3e:ab:e5:9d:2e:d2:cd: 8a:07:57:f3:c6:59:97:76:17:17:f8:52:8e:27:93:d8:58:d8: 28:6c:f4:a2:04:7a:8a:c2:76:24:b1:02:b4:df:28:f2:f7:f3: a8:a7:7e:23:48:61:88:f4:11:68:ae:26:5d:f6:a1:4b:53:25: 6a:d8:2a:14:02:0e:e0:87:20:6e:9e:19:5c:73:90:0b:23:e2: 31:97:23:3f:d5:22:a2:d3:06:7b:da:37:f5:d7:b5:41:44:17: 7a:45:02:d9:85:45:66:d6:8e:c7:f0:7a:0c:99:62:22:69:5b: ed:d2 American Express Global CA ========================== MD5 Fingerprint: 63:1B:66:93:8C:F3:66:CB:3C:79:57:DC:05:49:EA:DB PEM Data: -----BEGIN CERTIFICATE----- MIIEBDCCAuygAwIBAgICAIUwDQYJKoZIhvcNAQEFBQAwgZYxCzAJBgNVBAYTAlVT MScwJQYDVQQKEx5BbWVyaWNhbiBFeHByZXNzIENvbXBhbnksIEluYy4xJjAkBgNV BAsTHUFtZXJpY2FuIEV4cHJlc3MgVGVjaG5vbG9naWVzMTYwNAYDVQQDEy1BbWVy aWNhbiBFeHByZXNzIEdsb2JhbCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkwHhcNOTgw ODE0MTkwNjAwWhcNMTMwODE0MjM1OTAwWjCBljELMAkGA1UEBhMCVVMxJzAlBgNV BAoTHkFtZXJpY2FuIEV4cHJlc3MgQ29tcGFueSwgSW5jLjEmMCQGA1UECxMdQW1l cmljYW4gRXhwcmVzcyBUZWNobm9sb2dpZXMxNjA0BgNVBAMTLUFtZXJpY2FuIEV4 cHJlc3MgR2xvYmFsIENlcnRpZmljYXRlIEF1dGhvcml0eTCCASIwDQYJKoZIhvcN AQEBBQADggEPADCCAQoCggEBAPAkJmYu++tKc3FTiUfLJjxTkpRMysKFtQ34w1e9 Lyofahi3V68MABb6oLaQpvcaoS5mJsdoo4qTaWa1RlYtHYLqkAwKIsKJUI0F89Sr c0HwzxKsKLRvFJSWWUuekHWG3+JH6+HpT0N+h8onGGaetcFAZX38YW+tm3LPqV7Y 8/nabpEQ+ky16n4g3qk5L/WI5IpvNcYgnCuGRjMK/DFVpWusFkDpzTVZbzIEw3u1 D3t3cPNIuypSgs6vKW3xEW9t5gcAAe+a8yYNpnkTZ6/4qxx1rJG1a75AsN6cDLFp hRlxkRNFyt/R/eayypaDedvFuKpbepALeFY+xteflEgR9a0CAwEAAaNaMFgwEgYD VR0TAQH/BAgwBgEB/wIBBTAOBgNVHQ8BAf8EBAMCAQYwFwYDVR0gBBAwDjAMBgoq hkiG+Q8KAQUBMBkGA1UdDgQSBBBXRzV7NicRqAj8L0Yl6yRpMA0GCSqGSIb3DQEB BQUAA4IBAQDHYUWoinG5vjTpIXshzVYTmNUwY+kYqkuSFb8LHbvskmnFLsNhi+gw RcsQRsFzOFyLGdIr80DrfHKzLh4n43WVihybLsSVBYZy0FX0oZJSeVzb9Pjc5dcS sUDHPIbkMWVKyjfG3nZXGWlMRmn8Kq0WN3qTrPchSy3766lQy8HRQAjaA2mHpzde VcHF7cTjjgwml5tcV0ty4/IDBdACOyYDQJCevgtbSQx48dVMVSng9v1MA6lUAjLR V1qFrEPtWzsWX6C/NdtLnnvo/+cNPDuom0lBRvVzTv+SZSGDE1Vx60k8f4gawhIo JaFGS0E3l3/sjvHUoZbCILZerakcHhGg -----END CERTIFICATE----- Certificate Ingredients: Data: Version: 3 (0x2) Serial Number: 133 (0x85) Signature Algorithm: sha1WithRSAEncryption Issuer: C=US, O=American Express Company, Inc., OU=American Express Technologies, CN=American Express Global Certificate Authority Validity Not Before: Aug 14 19:06:00 1998 GMT Not After : Aug 14 23:59:00 2013 GMT Subject: C=US, O=American Express Company, Inc., OU=American Express Technologies, CN=American Express Global Certificate Authority Subject Public Key Info: Public Key Algorithm: rsaEncryption RSA Public Key: (2048 bit) Modulus (2048 bit): 00:f0:24:26:66:2e:fb:eb:4a:73:71:53:89:47:cb: 26:3c:53:92:94:4c:ca:c2:85:b5:0d:f8:c3:57:bd: 2f:2a:1f:6a:18:b7:57:af:0c:00:16:fa:a0:b6:90: a6:f7:1a:a1:2e:66:26:c7:68:a3:8a:93:69:66:b5: 46:56:2d:1d:82:ea:90:0c:0a:22:c2:89:50:8d:05: f3:d4:ab:73:41:f0:cf:12:ac:28:b4:6f:14:94:96: 59:4b:9e:90:75:86:df:e2:47:eb:e1:e9:4f:43:7e: 87:ca:27:18:66:9e:b5:c1:40:65:7d:fc:61:6f:ad: 9b:72:cf:a9:5e:d8:f3:f9:da:6e:91:10:fa:4c:b5: ea:7e:20:de:a9:39:2f:f5:88:e4:8a:6f:35:c6:20: 9c:2b:86:46:33:0a:fc:31:55:a5:6b:ac:16:40:e9: cd:35:59:6f:32:04:c3:7b:b5:0f:7b:77:70:f3:48: bb:2a:52:82:ce:af:29:6d:f1:11:6f:6d:e6:07:00: 01:ef:9a:f3:26:0d:a6:79:13:67:af:f8:ab:1c:75: ac:91:b5:6b:be:40:b0:de:9c:0c:b1:69:85:19:71: 91:13:45:ca:df:d1:fd:e6:b2:ca:96:83:79:db:c5: b8:aa:5b:7a:90:0b:78:56:3e:c6:d7:9f:94:48:11: f5:ad Exponent: 65537 (0x10001) X509v3 extensions: X509v3 Basic Constraints: critical CA:TRUE, pathlen:5 X509v3 Key Usage: critical Certificate Sign, CRL Sign X509v3 Certificate Policies: Policy: 1.2.840.113807.10.1.5.1 X509v3 Subject Key Identifier: 57:47:35:7B:36:27:11:A8:08:FC:2F:46:25:EB:24:69 Signature Algorithm: sha1WithRSAEncryption c7:61:45:a8:8a:71:b9:be:34:e9:21:7b:21:cd:56:13:98:d5: 30:63:e9:18:aa:4b:92:15:bf:0b:1d:bb:ec:92:69:c5:2e:c3: 61:8b:e8:30:45:cb:10:46:c1:73:38:5c:8b:19:d2:2b:f3:40: eb:7c:72:b3:2e:1e:27:e3:75:95:8a:1c:9b:2e:c4:95:05:86: 72:d0:55:f4:a1:92:52:79:5c:db:f4:f8:dc:e5:d7:12:b1:40: c7:3c:86:e4:31:65:4a:ca:37:c6:de:76:57:19:69:4c:46:69: fc:2a:ad:16:37:7a:93:ac:f7:21:4b:2d:fb:eb:a9:50:cb:c1: d1:40:08:da:03:69:87:a7:37:5e:55:c1:c5:ed:c4:e3:8e:0c: 26:97:9b:5c:57:4b:72:e3:f2:03:05:d0:02:3b:26:03:40:90: 9e:be:0b:5b:49:0c:78:f1:d5:4c:55:29:e0:f6:fd:4c:03:a9: 54:02:32:d1:57:5a:85:ac:43:ed:5b:3b:16:5f:a0:bf:35:db: 4b:9e:7b:e8:ff:e7:0d:3c:3b:a8:9b:49:41:46:f5:73:4e:ff: 92:65:21:83:13:55:71:eb:49:3c:7f:88:1a:c2:12:28:25:a1: 46:4b:41:37:97:7f:ec:8e:f1:d4:a1:96:c2:20:b6:5e:ad:a9: 1c:1e:11:a0 BelSign Object Publishing CA ============================ MD5 Fingerprint: 8A:02:F8:DF:B8:E1:84:9F:5A:C2:60:24:65:D1:73:FB PEM Data: -----BEGIN CERTIFICATE----- MIIDAzCCAmygAwIBAgIBATANBgkqhkiG9w0BAQQFADCBuzELMAkGA1UEBhMCQkUx ETAPBgNVBAcTCEJydXNzZWxzMRMwEQYDVQQKEwpCZWxTaWduIE5WMTgwNgYDVQQL Ey9CZWxTaWduIE9iamVjdCBQdWJsaXNoaW5nIENlcnRpZmljYXRlIEF1dGhvcml0 eTElMCMGA1UEAxMcQmVsU2lnbiBPYmplY3QgUHVibGlzaGluZyBDQTEjMCEGCSqG SIb3DQEJARYUd2VibWFzdGVyQGJlbHNpZ24uYmUwHhcNOTcwOTE5MjIwMzAwWhcN MDcwOTE5MjIwMzAwWjCBuzELMAkGA1UEBhMCQkUxETAPBgNVBAcTCEJydXNzZWxz MRMwEQYDVQQKEwpCZWxTaWduIE5WMTgwNgYDVQQLEy9CZWxTaWduIE9iamVjdCBQ dWJsaXNoaW5nIENlcnRpZmljYXRlIEF1dGhvcml0eTElMCMGA1UEAxMcQmVsU2ln biBPYmplY3QgUHVibGlzaGluZyBDQTEjMCEGCSqGSIb3DQEJARYUd2VibWFzdGVy QGJlbHNpZ24uYmUwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAMQuH7a/7oJA 3fm3LkHVngWxWtAmfGJVA5v8y2HeS+/+6Jn+h7mIz5DaDwk8dt8Xl7bLPyVF/bS8 WAC+sFq2FIeP7mdkrR2Ig7tnn2VhAFgIgFCfgMkx9iqQHC33SmwQ9iNDXTgJYIhX As0WbBj8zfuSKnfQnpOjXYhk0Mj4XVRRAgMBAAGjFTATMBEGCWCGSAGG+EIBAQQE AwIABzANBgkqhkiG9w0BAQQFAAOBgQBjdhd8lvBTpV0BHFPOKcJ+daxMDaIIc7Rq Mf0CBhSZ3FQEpL/IloafMUMyJVf2hfYluze+oXkjyVcGJXFrRU/49AJAFoIir1Tq Mij2De6ZuksIUQ9uhiMhTC0liIHELg7xEyw4ipUCJMM6lWPkk45IuwhHcl+u5jpa R9Zxxp6aUg== -----END CERTIFICATE----- Certificate Ingredients: Data: Version: 3 (0x2) Serial Number: 1 (0x1) Signature Algorithm: md5WithRSAEncryption Issuer: C=BE, L=Brussels, O=BelSign NV, OU=BelSign Object Publishing Certificate Authority, CN=BelSign Object Publishing CA/Email=webmaster@belsign.be Validity Not Before: Sep 19 22:03:00 1997 GMT Not After : Sep 19 22:03:00 2007 GMT Subject: C=BE, L=Brussels, O=BelSign NV, OU=BelSign Object Publishing Certificate Authority, CN=BelSign Object Publishing CA/Email=webmaster@belsign.be Subject Public Key Info: Public Key Algorithm: rsaEncryption RSA Public Key: (1024 bit) Modulus (1024 bit): 00:c4:2e:1f:b6:bf:ee:82:40:dd:f9:b7:2e:41:d5: 9e:05:b1:5a:d0:26:7c:62:55:03:9b:fc:cb:61:de: 4b:ef:fe:e8:99:fe:87:b9:88:cf:90:da:0f:09:3c: 76:df:17:97:b6:cb:3f:25:45:fd:b4:bc:58:00:be: b0:5a:b6:14:87:8f:ee:67:64:ad:1d:88:83:bb:67: 9f:65:61:00:58:08:80:50:9f:80:c9:31:f6:2a:90: 1c:2d:f7:4a:6c:10:f6:23:43:5d:38:09:60:88:57: 02:cd:16:6c:18:fc:cd:fb:92:2a:77:d0:9e:93:a3: 5d:88:64:d0:c8:f8:5d:54:51 Exponent: 65537 (0x10001) X509v3 extensions: Netscape Cert Type: SSL CA, S/MIME CA, Object Signing CA Signature Algorithm: md5WithRSAEncryption 63:76:17:7c:96:f0:53:a5:5d:01:1c:53:ce:29:c2:7e:75:ac: 4c:0d:a2:08:73:b4:6a:31:fd:02:06:14:99:dc:54:04:a4:bf: c8:96:86:9f:31:43:32:25:57:f6:85:f6:25:bb:37:be:a1:79: 23:c9:57:06:25:71:6b:45:4f:f8:f4:02:40:16:82:22:af:54: ea:32:28:f6:0d:ee:99:ba:4b:08:51:0f:6e:86:23:21:4c:2d: 25:88:81:c4:2e:0e:f1:13:2c:38:8a:95:02:24:c3:3a:95:63: e4:93:8e:48:bb:08:47:72:5f:ae:e6:3a:5a:47:d6:71:c6:9e: 9a:52 BelSign Secure Server CA ======================== MD5 Fingerprint: 3D:5E:82:C6:D9:AD:D9:8B:93:6B:0C:10:B9:49:0A:B1 PEM Data: -----BEGIN CERTIFICATE----- MIIC8zCCAlygAwIBAgIBATANBgkqhkiG9w0BAQQFADCBszELMAkGA1UEBhMCQkUx ETAPBgNVBAcTCEJydXNzZWxzMRMwEQYDVQQKEwpCZWxTaWduIE5WMTQwMgYDVQQL EytCZWxTaWduIFNlY3VyZSBTZXJ2ZXIgQ2VydGlmaWNhdGUgQXV0aG9yaXR5MSEw HwYDVQQDExhCZWxTaWduIFNlY3VyZSBTZXJ2ZXIgQ0ExIzAhBgkqhkiG9w0BCQEW FHdlYm1hc3RlckBiZWxzaWduLmJlMB4XDTk3MDcxNjIyMDA1NFoXDTA3MDcxNjIy MDA1NFowgbMxCzAJBgNVBAYTAkJFMREwDwYDVQQHEwhCcnVzc2VsczETMBEGA1UE ChMKQmVsU2lnbiBOVjE0MDIGA1UECxMrQmVsU2lnbiBTZWN1cmUgU2VydmVyIENl cnRpZmljYXRlIEF1dGhvcml0eTEhMB8GA1UEAxMYQmVsU2lnbiBTZWN1cmUgU2Vy dmVyIENBMSMwIQYJKoZIhvcNAQkBFhR3ZWJtYXN0ZXJAYmVsc2lnbi5iZTCBnzAN BgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA1gESeJL4BEJ/yccig/x8R3AwK0kLPjZA kCjaIXODU/LE0RZAwFP/rqbGJLMnbaWzPTl3XagG9ubpvGMRTgZlcAqdk/miQIt/ SoQOjRax1swIZBIM4ChLyKWEkBf7EUYu1qeFGMsYrmOasFgG9ADP+MQJGjUMofnu Sv1t3v4mpTsCAwEAAaMVMBMwEQYJYIZIAYb4QgEBBAQDAgCgMA0GCSqGSIb3DQEB BAUAA4GBAGw9mcMF4h3K5S2qaIWLQDEgZhNo5lg6idCNdbLFYth9go/32TKBd/Y1 W4UpzmeyubwrGXjP84f9RvGVdbIJVwMwwXrNckdxgMp9ncllPEcRIn36BwsoeKGT 6AVFSOIyMko96FMcELfHc4wHUOH5yStTQfWDjeUJOUqOA2KqQGOL -----END CERTIFICATE----- libapreq2-2.17/module/t/conf/ssl/httpd-passphrase.pl.PL0000644000175000017500000000014214277401734022361 0ustar jortonjorton#for testing SSLPassPhraseDialog exec:@ServerRoot@/conf/ssl/httpd-passphrase.pl print "httpd\n"; libapreq2-2.17/module/t/conf/ssl/proxyssl.conf.in0000644000175000017500000000340414277401734021403 0ustar jortonjorton #here we can test http <-> https #these are not on by default in the 1.x based mod_ssl SSLProxyEngine On SSLProxyProtocol ALL SSLProxyCipherSuite ALL SSLProxyMachineCertificateFile @SSLCA@/asf/proxy/client_ok.pem #SSLProxyMachineCertificatePath @SSLCA@/asf/proxy SSLProxyCACertificateFile @SSLCA@/asf/certs/ca.crt SSLProxyCACertificatePath @ServerRoot@/conf/ssl SSLProxyCARevocationFile @SSLCA@/asf/crl/ca-bundle.crl SSLProxyVerify on SSLProxyVerifyDepth 10 ProxyPass / https://@proxyssl_url@/ ProxyPassReverse / https://@proxyssl_url@/ #here we can test https <-> https SSLEngine on #these are not on by default in the 1.x based mod_ssl SSLProxyEngine On # ensure that client_ok.pem is picked first: SSLProxyMachineCertificateFile @SSLCA@/asf/proxy/client_ok.pem SSLProxyMachineCertificatePath @SSLCA@/asf/proxy SSLProxyCACertificateFile @SSLCA@/asf/certs/ca.crt SSLProxyVerify on SSLProxyCARevocationPath @SSLCA@/asf/crl ProxyPass / https://@proxyssl_url@/ ProxyPassReverse / https://@proxyssl_url@/ #here we can test https <-> http SSLEngine on ProxyPass / http://@servername@:@port@/ ProxyPassReverse / http://@servername@:@port@/ libapreq2-2.17/module/t/conf/ssl/ssl.conf.in0000644000175000017500000001000014277401734020267 0ustar jortonjorton#test config derived from httpd-2.0/docs/conf/ssl-std.conf #base config that can be used by any SSL enabled VirtualHosts AddType application/x-x509-ca-cert .crt AddType application/x-pkcs7-crl .crl SSLSessionCache none #XXX: would be nice to test these #SSLSessionCache shm:@ServerRoot@/logs/ssl_scache(512000) #SSLSessionCache dbm:@ServerRoot@/logs/ssl_scache #SSLSessionCacheTimeout 300 #SSLMutex file:@ServerRoot@/logs/ssl_mutex SSLRandomSeed startup builtin SSLRandomSeed connect builtin #SSLRandomSeed startup file:/dev/random 512 #SSLRandomSeed startup file:/dev/urandom 512 #SSLRandomSeed connect file:/dev/random 512 #SSLRandomSeed connect file:/dev/urandom 512 LogFormat "%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \"%r\" %>s %b" ssl CustomLog logs/ssl_request_log ssl SSLCipherSuite ALL SSLPassPhraseDialog exec:@ServerRoot@/conf/ssl/httpd-passphrase.pl #else the default is builtin SSLPassPhraseDialog builtin SSLCertificateFile @SSLCA@/asf/certs/server_des3.crt SSLCertificateKeyFile @SSLCA@/asf/keys/server_des3.pem # SSLCertificateFile @SSLCA@/asf/certs/server_des3_dsa.crt # SSLCertificateKeyFile @SSLCA@/asf/keys/server_des3_dsa.pem #else the default is an unencrypted key SSLCertificateFile @SSLCA@/asf/certs/server.crt SSLCertificateKeyFile @SSLCA@/asf/keys/server.pem # SSLCertificateFile @SSLCA@/asf/certs/server_dsa.crt # SSLCertificateKeyFile @SSLCA@/asf/keys/server_dsa.pem #SSLCertificateChainFile @SSLCA@/asf/certs/cachain.crt SSLCACertificateFile @SSLCA@/asf/certs/ca.crt SSLCACertificatePath @ServerRoot@/conf/ssl SSLCARevocationFile @SSLCA@/asf/crl/ca-bundle.crl SSLEngine on #t/ssl/verify.t Alias /verify @DocumentRoot@ SSLVerifyClient require SSLVerifyDepth 10 #t/ssl/require.t Alias /require/asf @DocumentRoot@ Alias /require/snakeoil @DocumentRoot@ Alias /ssl-fakebasicauth @DocumentRoot@ Alias /ssl-cgi @DocumentRoot@/modules/cgi Alias /require-ssl-cgi @DocumentRoot@/modules/cgi SSLVerifyClient require SSLVerifyDepth 10 SSLRequire (%{SSL_CIPHER} !~ m/^(EXP|NULL)-/ \ and %{SSL_CLIENT_S_DN_O} eq "ASF" \ and %{SSL_CLIENT_S_DN_OU} in \ {"httpd-test", "httpd", "modperl"} ) SSLVerifyClient require SSLVerifyDepth 10 SSLRequire (%{SSL_CIPHER} !~ m/^(EXP|NULL)-/ \ and %{SSL_CLIENT_S_DN_O} eq "Snake Oil, Ltd." \ and %{SSL_CLIENT_S_DN_OU} in \ {"Staff", "CA", "Dev"} ) SSLOptions +StdEnvVars SSLOptions +StdEnvVars SSLVerifyClient require SSLVerifyDepth 10 SSLVerifyClient require SSLVerifyDepth 5 SSLOptions +FakeBasicAuth AuthName "Snake Oil Authentication" AuthType Basic AuthUserFile @SSLCA@/asf/ssl.htpasswd require valid-user libapreq2-2.17/module/t/cookie.t0000644000175000017500000000370314277401734016136 0ustar jortonjortonuse strict; use warnings FATAL => 'all'; use Apache::Test; use Apache::TestUtil; use Apache::TestRequest qw(GET_BODY GET_HEAD); plan tests => 6, need_lwp; require HTTP::Cookies; my $location = "/apreq_cookie_test"; { my $test = 'netscape'; my $key = 'apache'; my $value = 'ok'; my $cookie = qq{$key=$value}; ok t_cmp(GET_BODY("$location?test=$test&key=$key", Cookie => $cookie), $value, $test); } { my $test = 'rfc'; my $key = 'apache'; my $value = 'ok'; my $cookie = qq{\$Version="1"; $key="$value"; \$Path="$location"}; ok t_cmp(GET_BODY("$location?test=$test&key=$key", Cookie => $cookie), qq{"$value"}, $test); } { my $test = 'encoded value with space'; my $key = 'apache'; my $value = 'okie dokie'; my $cookie = "$key=" . join '', map {/ / ? '+' : sprintf '%%%.2X', ord} split //, $value; ok t_cmp(GET_BODY("$location?test=$test&key=$key", Cookie => $cookie), $value, $test); } { my $test = 'bake'; my $key = 'apache'; my $value = 'ok'; my $cookie = "$key=$value"; my ($header) = GET_HEAD("$location?test=$test&key=$key", Cookie => $cookie) =~ /^#Set-Cookie:\s+(.+)/m; ok t_cmp($header, $cookie, $test); } { my $test = 'bake2'; my $key = 'apache'; my $value = 'ok'; my $cookie = qq{\$Version="1"; $key="$value"; \$Path="$location"}; my ($header) = GET_HEAD("$location?test=$test&key=$key", Cookie => $cookie) =~ /^#Set-Cookie2:\s+(.+)/m; ok t_cmp($header, qq{$key="$value"; Version=1; path="$location"}, $test); } { my $test = 'httponly'; my $key = 'apache'; my $value = 'ok'; my $cookie = "$key=$value; HttpOnly"; my ($header) = GET_HEAD("$location?test=$test&key=$key", Cookie => $cookie) =~ /^#Set-Cookie:\s+(.+)/m; ok t_cmp($header, $cookie, $test); } libapreq2-2.17/module/t/request.t0000644000175000017500000000725314277401734016361 0ustar jortonjortonuse strict; use warnings FATAL => 'all'; use Apache::Test; use Apache::TestUtil; use Apache::TestRequest qw(GET_BODY UPLOAD_BODY POST_BODY GET_RC); require File::Copy; my $num_tests = 18; $num_tests *= 2 if Apache::Test::have_ssl(); plan tests => $num_tests, need_lwp; my $scheme = "http"; START_TESTS: Apache::TestRequest::scheme($scheme); foreach my $location ('/apreq_request_test', '/apreq_access_test') { ok t_cmp(GET_BODY("$location?test=1"), "ARGS:\n\ttest => 1\n", "simple get"); ok t_cmp(UPLOAD_BODY("$location?test=2", content => "unused"), "ARGS:\n\ttest => 2\nBODY:\n\tHTTPUPLOAD => b\n", "simple upload"); } ok t_cmp(GET_RC("/apreq_access_test"), 403, "access denied"); my $filler = "0123456789" x 25_000; # length($filler) must be < 500K / 2 my $body = POST_BODY("/apreq_access_test?foo=1;", content => "bar=2&quux=$filler;test=6&more=$filler"); ok t_cmp($body, < 1 BODY: \tbar => 2 \tquux => $filler \ttest => 6 \tmore => $filler EOT ok t_cmp(GET_RC("/apreq_redirect_test"), 403, "missing 'test' authorization"); foreach my $location ('/apreq_request_test', '/apreq_access_test') { ok t_cmp(GET_BODY("/apreq_redirect_test?test=ok&location=$location%3Ftest=redirect"), "ARGS:\n\ttest => redirect\n", "redirect GET"); $body = POST_BODY("/apreq_redirect_test?location=$location%3Ffoo=bar", content => "quux=$filler;test=redirect+with+prefetch;more=$filler"); ok t_cmp($body, < bar BODY: \tquux => $filler \ttest => redirect with prefetch \tmore => $filler EOT } # internal redirect to plain text files (which are non-apreq requests) my $index_html = do {local (@ARGV,$/) = "t/htdocs/index.html"; <> }; my $orig = 't/htdocs/index.html'; my $copy = 't/htdocs/index.txt'; unlink $copy if -f $copy; File::Copy::copy($orig, $copy) or die "Cannot copy $orig to $copy: $!"; $body = GET_BODY("/apreq_redirect_test?test=redirect_index_txt_GET&location=/index.txt"); $body =~ s{\r}{}g; ok t_cmp($body, $index_html, "redirect /index.txt (GET)"); $body = POST_BODY("/apreq_redirect_test?test=redirect_index_txt_POST", content => "quux=$filler;location=/index.txt;foo=$filler"); $body =~ s{\r}{}g; ok t_cmp($body, $index_html, "redirect /index.txt (POST)"); # output filter tests sub filter_content ($) { my $body = shift; $body =~ s/^.*--APREQ OUTPUT FILTER--\s+//s; return $body; } ok t_cmp(GET_RC("/index.html"), 200, "/index.html"); ok t_cmp(filter_content GET_BODY("/index.html?test=15"), "ARGS:\n\ttest => 15\n", "output filter GET"); ok t_cmp(filter_content POST_BODY("/index.html?test=16", content => "post+data=foo;more=$filler;test=output+filter+POST"), < 16 BODY: \tpost data => foo \tmore => $filler \ttest => output filter POST EOT "output filter POST"); # internal redirect to html files which are filtered as above $body = GET_BODY("/apreq_redirect_test?test=redirect_index_html_GET&location=/index.html?foo=bar"); $body =~ s{\r}{}g; ok t_cmp($body, $index_html . < bar EOT $body = POST_BODY("/apreq_redirect_test?test=redirect_index_html_POST", content => "quux=$filler;location=/index.html?foo=quux;foo=$filler"); $body =~ s{\r}{}g; ok t_cmp($body, $index_html . < quux BODY: \tquux => $filler \tlocation => /index.html?foo=quux \tfoo => $filler EOT if (Apache::Test::have_ssl() and $scheme ne 'https') { $scheme = 'https'; goto START_TESTS; } libapreq2-2.17/module/t/TEST.PL0000644000175000017500000000624314277401734015516 0ustar jortonjortonuse strict; use warnings FATAL => 'all'; use constant WIN32 => $^O eq 'MSWin32'; use Cwd; my $cwd = WIN32 ? Win32::GetLongPathName(cwd) : cwd; $cwd =~ m{^(.+)/module$} or die "Can't find base directory"; my $base_dir = $1; my $module_dir = "$base_dir/module"; my $mod_apreq2_dir = WIN32 ? "$base_dir/win32/libs" : "$module_dir/apache2/.libs"; use base 'Apache::TestRun'; $Apache::TestTrace::Level = 'debug'; main::->new->run(@ARGV); sub pre_configure { my $self = shift; # Don't load an installed mod_apreq* Apache::TestConfig::autoconfig_skip_module_add('mod_apreq.c'); Apache::TestConfig::autoconfig_skip_module_add('mod_apreq2.c'); } sub configure { my $self = shift; my $cfg = $self->{test_config}; # make sure Win32 uses the just-built libapreq2.dll if (WIN32) { $cfg->preamble(qq{LoadFile "$mod_apreq2_dir/libapreq2.dll"\n}); } $cfg->preamble(IfModule => '!mod_apreq2.c', qq(LoadModule apreq_module "$mod_apreq2_dir/mod_apreq2.so"\n)); bless $cfg, "My::TestConfig"; $self->SUPER::configure(); } package My::TestConfig; use Apache::TestTrace; use Apache::TestConfigC; use Config; use File::Spec; use constant WIN32 => $^O eq 'MSWin32'; use base 'Apache::TestConfig'; sub cmodules_configure { my $self = shift; my $dir = File::Spec->catdir($module_dir, 't', 'c-modules'); $self->SUPER::cmodules_configure($dir); } sub cmodules_httpd_conf { my $self = shift; debug "WRITING httpd.conf with " . join", ",map $_->{name}, @{$self->{cmodules}}; $self->SUPER::cmodules_httpd_conf(@_); } sub cmodules_write_makefile { my($self, $mod) = @_; my $dversion = $self->server->dversion; my $name = $mod->{name}; my $makefile = "$mod->{dir}/Makefile"; debug "WRITING $makefile for $name"; my $lib = $self->cmodules_build_so($name); my $fh = Symbol::gensym(); open $fh, ">$makefile" or die "open $makefile: $!"; if (WIN32) { require File::Spec; my @goners = map {$name . '.' . $_} qw(exp ilk lib pdb so lo so.manifest); my $libs = join ' ', (map {'-l' . File::Spec->catfile($mod_apreq2_dir, $_)} qw(libapreq2.lib mod_apreq2.lib)); print $fh <{APXS} all: $lib $lib: $name.c \$(APXS) -I../../../apache2 -I../../../../include $libs -llibhttpd $dversion -p -I$self->{cmodules_dir} -c $name.c clean: -erase @goners vc60.pdb EOF } else { print $fh <{APXS} all: $lib $lib: $name.c \$(APXS) -L../../../../library -I../../../apache2 -I../../../../include -lapreq2 $dversion -I$self->{cmodules_dir} -c $name.c clean: -rm -rf $name.o $name.lo $name.slo $name.la .libs EOF } close $fh or die "close $makefile: $!"; } sub cmodules_makefile_vars { my $make = $ENV{MAKE} || $Config{make}; return < 'all'; use Apache::Test; use Apache::TestUtil; use Apache::TestConfig; use Apache::TestRequest qw(UPLOAD_BODY); plan tests => 7, need_lwp; my $location = "/apreq_upload_test"; my %files = ( '1b' => 1, '1k' => 1024, '10k' => 10240, '63k' => 64512, '64k' => 65536, '65k' => 66560, '128k' => 131072, ); my $server_root = Apache::Test::config()->{vars}->{serverroot}; my $dir = "$server_root/c-modules/apreq_upload_test"; foreach my $file (sort { $files{$a} <=> $files{$b} } keys %files) { my $size = $files{$file}; my $result = UPLOAD_BODY($location, filename => "$dir/$file"); ok t_cmp( $result, $size, "UPLOAD a file size $size btyes" ); } libapreq2-2.17/module/test_cgi.c0000644000175000017500000000716014277401734016203 0ustar jortonjorton/* ** Licensed to the Apache Software Foundation (ASF) under one or more ** contributor license agreements. See the NOTICE file distributed with ** this work for additional information regarding copyright ownership. ** The ASF licenses this file to You under the Apache License, Version 2.0 ** (the "License"); you may not use this file except in compliance with ** the License. You may obtain a copy of the License at ** ** http://www.apache.org/licenses/LICENSE-2.0 ** ** Unless required by applicable law or agreed to in writing, software ** distributed under the License is distributed on an "AS IS" BASIS, ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. ** See the License for the specific language governing permissions and ** limitations under the License. */ #include "apreq_module.h" #include "apreq_util.h" #include "apr_strings.h" #include "apr_lib.h" #include "apr_tables.h" #include static int dump_table(void *count, const char *key, const char *value) { int *c = (int *) count; int value_len = key - value - 1; /* == strlen(value) by construction */ if (value_len) *c += strlen(key) + value_len; return 1; } #define cookie_bake(c) apr_file_printf(out, "Set-Cookie: %s\n", \ apreq_cookie_as_string(c, pool)) #define cookie_bake2(c) apr_file_printf(out, "Set-Cookie2: %s\n", \ apreq_cookie_as_string(c, pool)) int main(int argc, char const * const * argv) { apr_pool_t *pool; apreq_handle_t *req; const apreq_param_t *foo, *bar, *test, *key; apr_file_t *out; atexit(apr_terminate); if (apr_app_initialize(&argc, &argv, NULL) != APR_SUCCESS) { fprintf(stderr, "apr_app_initialize failed\n"); exit(-1); } if (apr_pool_create(&pool, NULL) != APR_SUCCESS) { fprintf(stderr, "apr_pool_create failed\n"); exit(-1); } if (apreq_initialize(pool) != APR_SUCCESS) { fprintf(stderr, "apreq_initialize failed\n"); exit(-1); } req = apreq_handle_cgi(pool); apr_file_open_stdout(&out, pool); foo = apreq_param(req, "foo"); bar = apreq_param(req, "bar"); test = apreq_param(req, "test"); key = apreq_param(req, "key"); if (foo || bar) { apr_file_printf(out, "%s", "Content-Type: text/plain\n\n"); if (foo) { apr_file_printf(out, "\t%s => %s\n", "foo", foo->v.data); } if (bar) { apr_file_printf(out, "\t%s => %s\n", "bar", bar->v.data); } } else if (test && key) { apreq_cookie_t *cookie; char *dest; apr_size_t dlen; cookie = apreq_cookie(req, key->v.data); if (cookie == NULL) { exit(-1); } if (strcmp(test->v.data, "bake") == 0) { cookie_bake(cookie); } else if (strcmp(test->v.data, "bake2") == 0) { cookie_bake2(cookie); } apr_file_printf(out, "%s", "Content-Type: text/plain\n\n"); dest = apr_pcalloc(pool, cookie->v.dlen + 1); if (apreq_decode(dest, &dlen, cookie->v.data, cookie->v.dlen) == APR_SUCCESS) apr_file_printf(out, "%s", dest); else { exit(-1); } } else { const apr_table_t *params = apreq_params(req, pool); int count = 0; apr_file_printf(out, "%s", "Content-Type: text/plain\n\n"); if (params == NULL) { exit(-1); } apr_table_do(dump_table, &count, params, NULL); apr_file_printf(out, "%d", count); } return 0; } libapreq2-2.17/NOTICE0000644000175000017500000000014514277401734013651 0ustar jortonjortonThis product includes software developed by The Apache Software Foundation (http://www.apache.org/). libapreq2-2.17/PREREQUISITES0000644000175000017500000000175714277402434014744 0ustar jortonjorton================================================== Build system (core C API) prerequisites apache2: 2.0.48 apr: 0.9.4 (bundled with apache2 2.0.48) apu: 0.9.4 (bundled with apache2 2.0.48) perl: 5.6.1 ================================================== Perl glue (Apache2::Request) prerequisites Apache::Test: 1.04 (Win32 requires version 1.06) ExtUtils::MakeMaker: 6.15 ExtUtils::XSBuilder: 0.23 Test::More: 0.47 mod_perl2: 1.999022 perl: 5.6.1 ================================================== Additional prerequisites for apreq subversion builds ExtUtils::XSBuilder: 0.23 autoconf: 2.53 automake: 1.6.1 doxygen: 1.2 libtool: 1.4.3 perl: 5.6.1 libapreq2-2.17/README0000644000175000017500000000640414277401734013631 0ustar jortonjorton Apache HTTP Server Request Library What is it? ----------- httpd-apreq is subproject of the Apache HTTP Server Project whose committers develop and maintain the libapreq C library and its language bindings for Perl (contributions for additional language bindings are most welcome). libapreq is a safe, standards-compliant, high-performance library used for parsing HTTP cookies, query-strings and POST data. The original version (libapreq-1.X) was designed by Lincoln Stein and Doug MacEachern. The perl APIs Apache::Request and Apache::Cookie are the lightweight mod_perl analogs of the CGI and CGI::Cookie perl modules. Version 2 of libapreq is an improved codebase designed around APR and Apache-2's input filter API. The C codebase is separated into two independent components: 1) libapreq2, a shared library which is based on libapr and libaprutil. 2) A collection of modules: - mod_apreq2, a filter module for the Apache 2.X webserver, - a CGI module included in libapreq2 itself, - a custom module for general applications. Version 2 also includes the perl APIs for libapreq2- Apache2::Request, Apache2::Upload and Apache2::Cookie. The corresponding XS modules are generated by ExtUtils::XSBuilder, which is based on the new build system created specifically for mod_perl2. The Latest Version ------------------ Details of the latest version can be found on the libapreq project page at https://httpd.apache.org/apreq Documentation ------------- The documentation is in the docs/ directory. It is based on Doxygen, and can be regenerated by typing % make docs in the main directory. Installation ------------ For full details please consult the INSTALL file. Briefly, to install just the C API (libapreq2 + environment modules) on a Unix-like system: % ./configure --with-apache2-apxs=/path/to/apache2/bin/apxs % make % make test % make install To build and install the perl API as well, either add the "--enable-perl-glue" configure option, or let Makefile.PL enable it for you: % perl Makefile.PL --with-apache2-apxs=/path/to/apache2/bin/apxs % make % make test % make install Licensing --------- Please see the file called LICENSE. Contacts -------- o Project homepage: https://httpd.apache.org/apreq/ o Mailing Lists: user lists: C/C++ API - modules-dev@httpd.apache.org Perl API - modperl@perl.apache.org Tcl API - XXX Java API - XXX Python API - XXX developer list (bugs, patches, code contributions, etc.): apreq-dev@httpd.apache.org Acknowledgments ---------------- We wish to acknowledge the following copyrighted works that make up portions of the Apache software: libapreq2 relies heavily on the use of the GNU auto-tools to provide a build environment. The tests are based on the Apache::Test, Test::Harness and Test::Inline. Doxygen generates the documentation for libapreq2. The perl glue and pods are generated by ExtUtils::XSBuilder. libapreq2-2.17/STATUS0000644000175000017500000000627714277402024013720 0ustar jortonjorton/** @page apreq_status STATUS 2.17 released on 25th August 2022 Contributors looking for a mission: - just do an egrep on "TODO" or "XXX" and see what's there CURRENT RELEASE NOTES: RELEASE SHOWSTOPPERS: CURRENT VOTES: - Should we switch to EU::MM for determining the full path to perl? The problem is that some folks move their perl binary post-installation, but never adjust Config.pm. EU::MM is smart, by accepting a full path in $^X or by searching the user's $PATH for $^X, before resorting to Config.pm. However, if we change apreq2, we should also lobby test-dev to adopt the same solution for Apache::Test. Otherwise our test suite will likely fail, even though the rest of the perl build system will presumably still work. +1: joes 0: -1: - Drop ExtUtils::XSBuilder as the C API is fairly stable now. The header parsing + xs generation stuff may be too difficult for the community to maintain over ordinary .xs files. +1: pgollucci TODO: - Get -libmodperl to work like it does in mod_perl land. - Get static builds working again. - Implement (some of) RFC 2184 in the multipart parser. - Dump automake, preferably replacing that with more stuff from httpd/apr's build system. - Move module/t to module/apache2/t. - Figure out how and where the apreq_xs_ headers, and typemap file, should be installed. - Write tests for the apache 1.3.x module. - Fix the broken make dependencies, especially in the module and glue subdirs. The libtool workaround (for OSX IIRC) that copies module/.libs to module/t is especially bogus. - Round out the unit tests in library/t. Ideally each API function should have its own tests, and each possible error status should be both tested & documented. Also upgrade these tests to use the Apache::Test framework. - in glue/perl/t/apreq/cgi.t on Win32, printing to the error log hangs if the strings involved are about 10000 in size. This doesn't occur in the env/cgi tests - why? - Why must fprintf(stderr, ...), rather than apr_file_printf(err, ...), be used on Win32 in cgi_log() of src/apreq_env.c? - Get env/ (Apache::Test) tests to work for --with-apache2-src option. Also add a test to configure that prevents simultaneous use of --with-apache2-src and --with-apache2-apxs. - symbol exports files: -# aix needs .exp files - Install the html dox during "make install". Should we do this for the doxy manpages also? - Rework glue/perl build system to use apreq2-config instead of relying on paths like "../../src". OPEN ISSUES: - Should we bundle an apr-based "application/xml" parser? If so, how should we parse the xml data into an apr_table? BUGS: - Fix build automake/libtool/autoconf build system so it works properly on OSX & AIX. WISH LIST: - I [joes] wish folks would contribute some glue code for one of these: - php, - Rivet, - mod_dtcl, - mod_python, - mod_jk, - tomcat, - mod_ruby, - mod_parrot. */ libapreq2-2.17/win32/apreq2_test.mak0000644000175000017500000001615714277401734016644 0ustar jortonjorton# Microsoft Developer Studio Generated NMAKE File, Based on apreq2_test.dsp !IF "$(APACHE)" == "" !MESSAGE No Apache directory was specified. !MESSAGE This makefile is not to be run directly. !MESSAGE Please use Perl Makefile.PL, and then $(MAKE) on Makefile. !ERROR !ENDIF !IF "$(APR_LIB)" == "" !MESSAGE No apr lib was specified. !MESSAGE This makefile is not to be run directly. !MESSAGE Please use Perl Makefile.PL, and then $(MAKE) on Makefile. !ERROR !ENDIF !IF "$(APU_LIB)" == "" !MESSAGE No aprutil lib was specified. !MESSAGE This makefile is not to be run directly. !MESSAGE Please use Perl Makefile.PL, and then $(MAKE) on Makefile. !ERROR !ENDIF !IF "$(CFG)" == "" CFG=apreq2_test - Win32 Release !MESSAGE No configuration specified. Defaulting to apreq2_test - Win32 Debug. !ENDIF !IF "$(CFG)" != "apreq2_test - Win32 Release" && "$(CFG)" != "apreq2_test - Win32 Debug" !MESSAGE Invalid configuration "$(CFG)" specified. !MESSAGE You can specify a configuration when running NMAKE !MESSAGE by defining the macro CFG on the command line. For example: !MESSAGE !MESSAGE NMAKE /f "apreq2_test.mak" CFG="apreq2_test - Win32 Release" !MESSAGE !MESSAGE Possible choices for configuration are: !MESSAGE !MESSAGE "apreq2_test - Win32 Release" (based on "Win32 (x86) Static Library") !MESSAGE "apreq2_test - Win32 Debug" (based on "Win32 (x86) Static Library") !MESSAGE !ERROR An invalid configuration is specified. !ENDIF !IF "$(OS)" == "Windows_NT" NULL= !ELSE NULL=nul !ENDIF CPP=cl.exe RSC=rc.exe CFG_HOME=$(APREQ_HOME)\win32 LIBTDIR=$(APREQ_HOME)\library\t OUTDIR=$(LIBTDIR) INTDIR=$(LIBTDIR) LIBDIR=$(CFG_HOME)\libs PROGRAMS="$(LIBTDIR)\params.exe" "$(LIBTDIR)\version.exe" \ "$(LIBTDIR)\parsers.exe" "$(LIBTDIR)\cookie.exe" !IF "$(CFG)" == "apreq2_test - Win32 Release" ALL : "$(LIBDIR)\apreq2_test.lib" $(PROGRAMS) CLEAN : -@erase "$(INTDIR)\at.obj" -@erase "$(INTDIR)\vc60.idb" -@erase "$(OUTDIR)\apreq2_test.lib" "$(OUTDIR)" : if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)" CPP_PROJ=/nologo /MD /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /I"$(APACHE)\include" /I"$(APREQ_HOME)\include" /YX /FD /c BSC32=bscmake.exe BSC32_FLAGS=/nologo /o"$(LIBDIR)\apreq2_test.bsc" LIB32=link.exe -lib LIB32_FLAGS=/nologo /out:"$(LIBDIR)\apreq2_test.lib" LIB32_OBJS= \ "$(LIBDIR)\at.obj" \ "$(APR_LIB)" \ "$(APU_LIB)" "$(LIBDIR)\apreq2_test.lib" : "$(OUTDIR)" $(DEF_FILE) $(LIB32_OBJS) $(LIB32) @<< $(LIB32_FLAGS) $(DEF_FLAGS) $(LIB32_OBJS) << LINK32=link.exe LINK32_FLAGS=kernel32.lib wsock32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /incremental:yes /debug /pdbtype:sept LINK32_OBJS= \ "$(LIBDIR)\libapreq2.lib" \ "$(LIBDIR)\apreq2_test.lib" \ "$(APR_LIB)" \ "$(APU_LIB)" \ "$(APACHE)\lib\libhttpd.lib" "$(LIBTDIR)\cookie.exe" : "$(OUTDIR)" $(DEF_FILE) $(LINK32_OBJS) "$(OUTDIR)\cookie.obj" $(LINK32) /pdb:"$(LIBTDIR)\cookie.pdb" /out:"$(LIBTDIR)\cookie.exe" @<< $(LINK32_FLAGS) $(LINK32_OBJS) "$(OUTDIR)\cookie.obj" << "$(LIBTDIR)\params.exe" : "$(OUTDIR)" $(DEF_FILE) $(LINK32_OBJS) "$(OUTDIR)\params.obj" $(LINK32) /pdb:"$(LIBTDIR)\params.pdb" /out:"$(LIBTDIR)\params.exe" @<< $(LINK32_FLAGS) $(LINK32_OBJS) "$(OUTDIR)\params.obj" << "$(LIBTDIR)\parsers.exe" : "$(OUTDIR)" $(DEF_FILE) $(LINK32_OBJS) "$(OUTDIR)\parsers.obj" $(LINK32) /pdb:"$(LIBTDIR)\parsers.pdb" /out:"$(LIBTDIR)\parsers.exe" @<< $(LINK32_FLAGS) $(LINK32_OBJS) "$(OUTDIR)\parsers.obj" << "$(LIBTDIR)\version.exe" : "$(OUTDIR)" $(DEF_FILE) $(LINK32_OBJS) "$(OUTDIR)\version.obj" $(LINK32) /pdb:"$(LIBTDIR)\version.pdb" /out:"$(LIBTDIR)\version.exe" @<< $(LINK32_FLAGS) $(LINK32_OBJS) "$(OUTDIR)\version.obj" << !ELSEIF "$(CFG)" == "apreq2_test - Win32 Debug" ALL : "$(LIBDIR)\apreq2_test.lib" $(PROGRAMS) CLEAN : -@erase "$(INTDIR)\at.obj" -@erase "$(INTDIR)\vc60.idb" -@erase "$(INTDIR)\vc60.pdb" -@erase "$(OUTDIR)\apreq2_test.lib" "$(OUTDIR)" : if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)" CPP_PROJ=/nologo /MDd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "_LIB" /YX /I"$(APACHE)\include" /I"$(APREQ_HOME)\include" /FD /GZ /c BSC32=bscmake.exe BSC32_FLAGS=/nologo /o"$(LIBDIR)\apreq2_test.bsc" LIB32=link.exe -lib LIB32_FLAGS=/nologo /out:"$(LIBDIR)\apreq2_test.lib" LIB32_OBJS= \ "$(LIBDIR)\at.obj" \ "$(APR_LIB)" \ "$(APU_LIB)" LINK32=link.exe LINK32_FLAGS=kernel32.lib wsock32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /incremental:yes /debug /pdbtype:sept LINK32_OBJS= \ "$(LIBDIR)\libapreq2.lib" \ "$(LIBDIR)\apreq2_test.lib" \ "$(APR_LIB)" \ "$(APU_LIB)" \ "$(APACHE)\lib\libhttpd.lib" "$(LIBDIR)\apreq2_test.lib" : "$(OUTDIR)" $(DEF_FILE) $(LIB32_OBJS) $(LIB32) @<< $(LIB32_FLAGS) $(DEF_FLAGS) $(LIB32_OBJS) << "$(LIBTDIR)\cookie.exe" : "$(OUTDIR)" $(DEF_FILE) $(LINK32_OBJS) "$(OUTDIR)\cookie.obj" $(LINK32) /pdb:"$(LIBTDIR)\cookie.pdb" /out:"$(LIBTDIR)\cookie.exe" @<< $(LINK32_FLAGS) $(LINK32_OBJS) "$(OUTDIR)\cookie.obj" << "$(LIBTDIR)\params.exe" : "$(OUTDIR)" $(DEF_FILE) $(LINK32_OBJS) "$(OUTDIR)\params.obj" $(LINK32) /pdb:"$(LIBTDIR)\params.pdb" /out:"$(LIBTDIR)\params.exe" @<< $(LINK32_FLAGS) $(LINK32_OBJS) "$(OUTDIR)\params.obj" << "$(LIBTDIR)\parsers.exe" : "$(OUTDIR)" $(DEF_FILE) $(LINK32_OBJS) "$(OUTDIR)\parsers.obj" $(LINK32) /pdb:"$(LIBTDIR)\parsers.pdb" /out:"$(LIBTDIR)\parsers.exe" @<< $(LINK32_FLAGS) $(LINK32_OBJS) "$(OUTDIR)\parsers.obj" << "$(LIBTDIR)\version.exe" : "$(OUTDIR)" $(DEF_FILE) $(LINK32_OBJS) "$(OUTDIR)\version.obj" $(LINK32) /pdb:"$(LIBTDIR)\version.pdb" /out:"$(LIBTDIR)\version.exe" @<< $(LINK32_FLAGS) $(LINK32_OBJS) "$(OUTDIR)\version.obj" << !ENDIF .c{$(INTDIR)}.obj:: $(CPP) @<< $(CPP_PROJ) $< << .cpp{$(INTDIR)}.obj:: $(CPP) @<< $(CPP_PROJ) $< << .cxx{$(INTDIR)}.obj:: $(CPP) @<< $(CPP_PROJ) $< << .c{$(INTDIR)}.sbr:: $(CPP) @<< $(CPP_PROJ) $< << .cpp{$(INTDIR)}.sbr:: $(CPP) @<< $(CPP_PROJ) $< << .cxx{$(INTDIR)}.sbr:: $(CPP) @<< $(CPP_PROJ) $< << !IF "$(CFG)" == "apreq2_test - Win32 Release" || "$(CFG)" == "apreq2_test - Win32 Debug" SOURCE=$(LIBTDIR)\at.c "$(LIBDIR)\at.obj" : $(SOURCE) "$(INTDIR)" $(CPP) /Fo"$(LIBDIR)\at.obj" $(CPP_PROJ) $(SOURCE) SOURCE=$(LIBTDIR)\cookie.c "$(OUTDIR)\cookie.obj" : $(SOURCE) "$(INTDIR)" $(CPP) /Fo"$(OUTDIR)\cookie.obj" $(CPP_PROJ) $(SOURCE) SOURCE=$(LIBTDIR)\params.c "$(OUTDIR)\params.obj" : $(SOURCE) "$(INTDIR)" $(CPP) /Fo"$(OUTDIR)\params.obj" $(CPP_PROJ) $(SOURCE) SOURCE=$(LIBTDIR)\parsers.c "$(OUTDIR)\parsers.obj" : $(SOURCE) "$(INTDIR)" $(CPP) /Fo"$(OUTDIR)\parsers.obj" $(CPP_PROJ) $(SOURCE) SOURCE=$(LIBTDIR)\version.c "$(OUTDIR)\version.obj" : $(SOURCE) "$(INTDIR)" $(CPP) /Fo"$(OUTDIR)\version.obj" $(CPP_PROJ) $(SOURCE) !ENDIF libapreq2-2.17/win32/apreq2_win32.pl0000755000175000017500000001721114277401734016465 0ustar jortonjorton#!perl use strict; use Config; use Getopt::Long; require Win32; use ExtUtils::MakeMaker; use File::Spec::Functions qw(catfile catdir); use warnings; use FindBin; BEGIN { die 'This script is intended for Win32' unless $^O =~ /Win32/i; } my $license = <<'END'; # ==================================================================== # # Copyright 2003-2006 The Apache Software Foundation # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. # apreq2 script designed to allow easy command line access to apreq2 # configuration parameters. END my $file = 'apreq2-config.pl'; my $apreq_home = Win32::GetShortPathName($FindBin::Bin); $apreq_home =~ s!/?win32$!!; $apreq_home =~ s!/!\\!g; require "$apreq_home/win32/util.pl"; my ($prefix, $help); GetOptions('with-apache2=s' => \$prefix, 'help' => \$help) or usage($0); usage($0) if $help; unless (defined $prefix and -d $prefix) { $prefix = prompt("Please give the path to your Apache2 installation:", $prefix); } die "Can't find a suitable Apache2 installation!" unless (-d $prefix and check($prefix)); $prefix = Win32::GetShortPathName($prefix); my %ap_dir; foreach (qw(bin lib include build)) { $ap_dir{$_} = catdir $prefix, $_; } my $src_version = catfile $apreq_home, 'include', 'apreq_version.h'; my $apache_version = catfile $ap_dir{include}, 'apreq_version.h'; my $apreq_version = -e $src_version ? $src_version : $apache_version; open(my $inc, $apreq_version) or die "Cannot open $apreq_version: $!"; my %vers; while (<$inc>) { if (/define\s+APREQ_(MAJOR|MINOR|PATCH)_VERSION\s+(\d+)/) { $vers{$1} = $2; } } close $inc; my $dotted = "$vers{MAJOR}.$vers{MINOR}.$vers{PATCH}"; my $src_dir = -d $apreq_home ? $apreq_home : ''; my %apreq_args = (APREQ_MAJOR_VERSION => $vers{MAJOR}, APREQ_DOTTED_VERSION => $dotted, APREQ_LIBNAME => 'libapreq2.lib', prefix => $prefix, exec_prefix => $prefix, bindir => $ap_dir{bin}, libdir => $ap_dir{lib}, datadir => $prefix, installbuilddir => $ap_dir{build}, includedir => $ap_dir{include}, CC => $Config{cc}, CPP => $Config{cpp}, LD => $Config{ld}, SHELL => $ENV{comspec}, CPPFLAGS => '', CFLAGS => q{ /nologo /MD /W3 /O2 /D "WIN32" /D "_WINDOWS" /D "NDEBUG" }, LDFLAGS => q{ kernel32.lib /nologo /subsystem:windows /dll }, LIBS => '', EXTRA_INCLUDES => '', APREQ_SOURCE_DIR => $src_dir, APREQ_SO_EXT => $Config{dlext}, APREQ_LIB_TARGET => '', ); my $apreq_usage = << 'EOF'; Usage: apreq2-config [OPTION] Known values for OPTION are: --prefix[=DIR] change prefix to DIR --bindir print location where binaries are installed --includedir print location where headers are installed --libdir print location where libraries are installed --cc print C compiler name --cpp print C preprocessor name and any required options --ld print C linker name --cflags print C compiler flags --cppflags print cpp flags --includes print include information --ldflags print linker flags --libs print additional libraries to link against --srcdir print APR-util source directory --installbuilddir print APR-util build helper directory --link-ld print link switch(es) for linking to APREQ --apreq-so-ext print the extensions of shared objects on this platform --apreq-lib-file print the name of the apreq lib file --version print the APR-util version as a dotted triple --help print this help When linking, an application should do something like: APREQ_LIBS="\`apreq2-config --link-ld --libs\`" An application should use the results of --cflags, --cppflags, --includes, and --ldflags in their build process. EOF my $full = catfile $ap_dir{bin}, $file; open(my $fh, '>', $full) or die "Cannot open $full: $!"; print $fh <<"END"; #!$^X use strict; use warnings; use Getopt::Long; use File::Spec::Functions qw(catfile catdir); $license sub usage { print << 'EOU'; $apreq_usage EOU exit(1); } END foreach my $var (keys %apreq_args) { print $fh qq{my \${$var} = q[$apreq_args{$var}];\n}; } print $fh $_ while ; close $fh; my @args = ('pl2bat', $full); system(@args) == 0 or die "system @args failed: $?"; print qq{apreq2-config.bat has been created under $prefix/bin.\n\n}; __DATA__ my %opts = (); GetOptions(\%opts, 'prefix:s', 'bindir', 'includedir', 'libdir', 'cc', 'cpp', 'ld', 'cflags', 'cppflags', 'includes', 'ldflags', 'libs', 'srcdir', 'installbuilddir', 'link-ld', 'apreq-so-ext', 'apreq-lib-file', 'version', 'help' ) or usage(); usage() if ($opts{help} or not %opts); if (exists $opts{prefix} and $opts{prefix} eq "") { print qq{$prefix\n}; exit(0); } my $user_prefix = defined $opts{prefix} ? $opts{prefix} : ''; my %user_dir; if ($user_prefix) { foreach (qw(lib bin include build)) { $user_dir{$_} = catdir $user_prefix, $_; } } my $flags = ''; SWITCH : { local $\ = "\n"; $opts{bindir} and do { print $user_prefix ? $user_dir{bin} : $bindir; last SWITCH; }; $opts{includedir} and do { print $user_prefix ? $user_dir{include} : $includedir; last SWITCH; }; $opts{libdir} and do { print $user_prefix ? $user_dir{lib} : $libdir; last SWITCH; }; $opts{installbuilddir} and do { print $user_prefix ? $user_dir{build} : $installbuilddir; last SWITCH; }; $opts{srcdir} and do { print $APREQ_SOURCE_DIR; last SWITCH; }; $opts{cc} and do { print $CC; last SWITCH; }; $opts{cpp} and do { print $CPP; last SWITCH; }; $opts{ld} and do { print $LD; last SWITCH; }; $opts{cflags} and $flags .= " $CFLAGS "; $opts{cppflags} and $flags .= " $CPPFLAGS "; $opts{includes} and do { my $inc = $user_prefix ? $user_dir{include} : $includedir; $flags .= qq{ /I"$inc" $EXTRA_INCLUDES }; }; $opts{ldflags} and $flags .= " $LDFLAGS "; $opts{libs} and $flags .= " $LIBS "; $opts{'link-ld'} and do { my $libpath = $user_prefix ? $user_dir{lib} : $libdir; $flags .= qq{ /libpath:"$libpath" $APREQ_LIBNAME }; }; $opts{'apreq-so-ext'} and do { print $APREQ_SO_EXT; last SWITCH; }; $opts{'apreq-lib-file'} and do { my $full_apreqlib = $user_prefix ? (catfile $user_dir{lib}, $APREQ_LIBNAME) : (catfile $libdir, $APREQ_LIBNAME); print $full_apreqlib; last SWITCH; }; $opts{version} and do { print $APREQ_DOTTED_VERSION; last SWITCH; }; print $flags if $flags; } exit(0); libapreq2-2.17/win32/Configure.pl0000644000175000017500000003517214277401734016175 0ustar jortonjorton#!C:/Perl/bin/perl use strict; use warnings; use FindBin; use Getopt::Long; use File::Spec::Functions qw(devnull catfile catdir path); use Cwd; require Win32; use ExtUtils::MakeMaker; use File::Basename; use File::Path; my ($apache, $apxs, $debug, $help, $no_perl, $perl, $with_perl); my $VERSION = "2.17"; my $result = GetOptions( 'with-apache2=s' => \$apache, 'with-apache2-apxs=s' => \$apxs, 'debug' => \$debug, 'help' => \$help, 'with-perl=s' => \$perl, 'disable-perl-glue' => \$no_perl, 'enable-perl-glue' => \$with_perl, ); usage() if $help; my @path_ext; path_ext(); $apache ||= search(); my $apreq_home = Win32::GetShortPathName($FindBin::Bin); $apreq_home =~ s!/?win32$!!; $apreq_home =~ s!/!\\!g; my $doxygen = which('doxygen'); my $doxysearch = which('doxysearch'); my $cfg = $debug ? 'Debug' : 'Release'; my @tests = qw(cookie parsers params version); my @test_files = map {catfile('library', 't', "$_.t")} @tests; generate_tests($apreq_home, \@tests); my %apr_libs; my $prog = apache_prog_name($apache); my @httpd_ver = httpd_version($prog); my $devnull = devnull(); my %map = ( apr => $httpd_ver[1] >= 2 ? 'libapr-1.lib' : 'libapr.lib', apu => $httpd_ver[1] >= 2 ? 'libaprutil-1.lib' : 'libaprutil.lib' ); foreach my $what (qw(apr apu)) { my $ap = ($httpd_ver[1] >= 2) ? "$what-1-config.bat" : "$what-config.bat"; my $cfg = catfile $apache, 'bin', $ap; my $lib; eval {$lib = qx{"$cfg" --$what-lib-file 2>$devnull;}}; if ($@ or not $lib or $lib =~ /usage/i) { $apr_libs{$what} = catfile $apache, 'lib', $map{$what}; } else { chomp $lib; $apr_libs{$what} = $lib; } } my $version_check = catfile $apreq_home, 'build', 'version_check.pl'; my $cmd = join ' ', ($^X, $version_check, 'perl_prereqs'); chomp(my $prereq_string = qx{$cmd}); open(my $make, '>Makefile') or die qq{Cannot open Makefile: $!}; print $make <<"END"; # Microsoft Developer Studio Generated NMAKE File. # The following is a trick to get CPAN clients to follow prerequisites: # # $prereq_string # # --- MakeMaker post_initialize section: APREQ_HOME=$apreq_home APR_LIB=$apr_libs{apr} APU_LIB=$apr_libs{apu} CFG=$cfg APACHE=$apache PERL=$^X RM_F=\$(PERL) -MExtUtils::Command -e rm_f DOXYGEN_CONF=\$(APREQ_HOME)\\build\\doxygen.conf.win32 TEST_FILES = @test_files END print $make $_ while (); unless (-x $apxs) { my $apxs_trial = catfile $apache, 'bin', 'apxs.bat'; $apxs = (-e $apxs_trial) ? $apxs_trial : which('apxs'); unless ($apxs) { $apxs = fetch_apxs() ? which('apxs') : ''; } } my $test = << 'END'; TEST : TEST_APREQ2 PERL_TEST TEST_APREQ2: $(LIBAPREQ) $(MOD) $(MAKE) /nologo /f $(CFG_HOME)\$(APREQ2_TEST).mak CFG="$(APREQ2_TEST) - Win32 $(CFG)" APACHE="$(APACHE)" APREQ_HOME="$(APREQ_HOME)" APR_LIB="$(APR_LIB)" APU_LIB="$(APU_LIB)" set PATH=$(APREQ_HOME)\win32\libs;$(APACHE)\bin;$(PATH) $(PERL) "-MExtUtils::Command::MM" "-e" "test_harness()" $(TEST_FILES) cd $(APREQ_HOME) $(MAKE) /nologo /f $(CFG_HOME)\$(CGITEST).mak CFG="$(CGITEST) - Win32 $(CFG)" APACHE="$(APACHE)" APREQ_HOME="$(APREQ_HOME)" APR_LIB="$(APR_LIB)" APU_LIB="$(APU_LIB)" cd $(APREQ_HOME) END my $clean = << 'END'; CLEAN: cd $(LIBDIR) $(RM_F) *.pch *.exe *.exp *.lib *.pdb *.ilk *.idb *.so *.dll *.obj *.manifest cd $(TDIR) $(RM_F) *.pch *.exe *.exp *.lib *.pdb *.ilk *.idb *.so *.dll *.obj *.manifest cd $(APREQ_HOME)\module\t\c-modules $(MAKE) clean cd $(APREQ_HOME) !IF EXIST("$(PERLGLUE)\Makefile") cd $(PERLGLUE) $(MAKE) /nologo clean cd $(APREQ_HOME) !ENDIF END if ($apxs) { $test .= << "END"; cd \$(APREQ_MODULE) \$(PERL) t\\TEST.PL -apxs $apxs cd \$(APREQ_HOME) END $clean .= << 'END'; cd $(APREQ_MODULE) $(PERL) t\TEST.PL -clean cd $(APREQ_HOME) END } print $make "\n", $test, "\n"; print $make "\n", $clean, "\n"; if ($doxygen and $doxysearch) { print $make <<"END"; docs: \$(DOXYGEN_CONF) cd \$(APREQ_HOME) "$doxygen" \$(DOXYGEN_CONF) cd \$(APREQ_HOME) END my $bin_abspath = Win32::GetShortPathName(dirname($doxysearch)); open(my $conf, "$apreq_home/build/doxygen.conf.in") or die "Cannot read $apreq_home/build/doxygen.conf.in: $!"; open(my $win32_conf, ">$apreq_home/build/doxygen.conf.win32") or die "Cannot write to $apreq_home/build/doxygen.conf.win32: $!"; while (<$conf>) { s/\@PERL\@/"$^X"/; s/\@PACKAGE\@/libapreq2/; s/\@VERSION\@/$VERSION/; print $win32_conf $_; } close $conf; close $win32_conf; } close $make; # generate_defs(); if (not $no_perl and $] >= 5.008) { my @args = ($^X, "$apreq_home/build/xsbuilder.pl", 'run', 'run'); chdir "$apreq_home/glue/perl"; system(@args) == 0 or die "system @args failed: $?"; chdir $apreq_home; } print << "END"; A Makefile has been generated in $apreq_home. You can now run nmake - build the libapreq2 library and perl glue nmake test - run the supplied tests nmake install - install the C libraries and perl glue modules nmake clean - remove intermediate files nmake docs - build documents (requires doxygen) nmake help - list the nmake targets END if ($doxygen) { print << 'END'; nmake docs - builds documents END } my @args = ($^X, "$apreq_home/win32/apreq2_win32.pl", "--with-apache2=$apache"); system(@args) == 0 or warn "system @args failed: $?"; sub usage { print <<'END'; Usage: perl Configure.pl [--with-apache2=C:\Path\to\Apache2] [--debug] perl Configure.pl --help Options: --with-apache2=C:\Path\to\Apache2 : specify the top-level Apache2 directory --debug : build a debug version --disable-perl-glue : skip building the perl glue --help : print this help message With no options specified, an attempt will be made to find a suitable Apache2 directory, and if found, a non-debug version will be built. END exit; } sub search { my $apache; if (my $bin = which('Apache')) { (my $candidate = dirname($bin)) =~ s!bin$!!; if (-d $candidate and check($candidate)) { $apache = $candidate; } } unless ($apache and -d $apache) { $apache = prompt("Please give the path to your Apache2 installation:", $apache); } die "Can't find a suitable Apache2 installation!" unless ($apache and -d $apache and check($apache)); $apache = Win32::GetShortPathName($apache); $apache =~ s!\\!/!g; $apache =~ s!/$!!; my $ans = prompt(qq{\nUse "$apache" for your Apache2 directory?}, 'yes'); unless ($ans =~ /^y/i) { die <<'END'; Please run this configuration script again, and give the --with-apache2=C:\Path\to\Apache2 option to specify the desired top-level Apache2 directory. END } return $apache; } sub drives { my @drives = (); eval{require Win32API::File;}; return map {"$_:\\"} ('C' .. 'Z') if $@; my @r = Win32API::File::getLogicalDrives(); return unless @r > 0; for (@r) { my $t = Win32API::File::GetDriveType($_); push @drives, $_ if ($t == 3 or $t == 4); } return @drives > 0 ? @drives : undef; } sub check { my $apache = shift; die qq{No libhttpd library found under $apache/lib} unless -e qq{$apache/lib/libhttpd.lib}; die qq{No httpd header found under $apache/include} unless -e qq{$apache/include/httpd.h}; my $prog = apache_prog_name($apache); my $vers = qx{$prog -v}; die qq{"$apache" does not appear to be version 2.x} unless $vers =~ m!Apache/2.\d!; return 1; } sub path_ext { if ($ENV{PATHEXT}) { push @path_ext, split ';', $ENV{PATHEXT}; for my $ext (@path_ext) { $ext =~ s/^\.*(.+)$/$1/; } } else { #Win9X: doesn't have PATHEXT push @path_ext, qw(com exe bat); } } sub which { my $program = shift; return unless $program; my @extras = (); my @drives = drives(); (my $program_files = $ENV{ProgramFiles}) =~ s!^\w+:\\!!; if (@drives > 0) { for my $drive (@drives) { for ('Apache2', "$program_files/Apache2", "$program_files/Apache Group/Apache2") { my $bin = catdir $drive, $_, 'bin'; push @extras, $bin if (-d $bin); } } } my @a = map {catfile $_, $program} (path(), @extras); for my $base(@a) { return $base if -x $base; for my $ext (@path_ext) { return "$base.$ext" if -x "$base.$ext"; } } return; } sub httpd_version { my $prog = shift; my $vers = qx{$prog -v}; die qq{Could not parse "$apache" version} unless $vers =~ m!Apache/2.(\d).(\d)!; return (2, $1, $2); } sub generate_defs { my $preamble =<<'END'; LIBRARY EXPORTS END chdir "$apreq_home/env"; my $match = qr{^apreq_env}; my %fns = (); open my $fh, ") { next unless /^APREQ_DECLARE\([^\)]+\)\s*(\w+)/; my $fn = $1; $fns{$fn}++ if $fn =~ /$match/; } close $fh; open my $def, ">../win32/mod_apreq.def" or die "Cannot open win32/mod_apreq.def: $!"; print $def $preamble; print $def $_, "\n" for (sort keys %fns); close $def; } sub generate_tests { my ($top, $test_files) = @_; my $t = catdir $top, 'library', 't'; foreach my $test(@$test_files) { my $file = catfile $t, $test; open my $fh, '>', "$file.t" || die "Cannot open $file.t: $!"; print $fh <<"EOT"; #!$^X exec '$file'; EOT close $fh; } } sub fetch_apxs { eval {require Archive::Tar;}; if ($@) { die "Need Archive::Tar installed in order to install apxs."; } eval {require LWP::Simple; import LWP::Simple qw(getstore is_success)}; if ($@) { die "Need LWP::Simple installed in order to install apxs."; } print << 'END'; I could not find an apxs utility on your system, which is needed to run tests in the env/ subdirectory. The apxs utiltity (and apr-config and apu-config utilties) have not yet been ported to Apache2 on Win32, but a development port is available, which I can install for you, if you like. END my $ans = prompt('Install apxs?', 'yes'); return unless $ans =~ /^y/i; my $file = 'apxs_win32.tar.gz'; my $remote = 'http://perl.apache.org/dist/win32-bin/' . $file; print "Fetching $remote ... "; unless (is_success(getstore($remote, $file))) { warn "Download of $remote failed"; return; } print " done!\n"; my $arc = Archive::Tar->new($file, 1); $arc->extract($arc->list_files()); my $dir = 'apxs'; unless (-d $dir) { warn "Unpacking $file failed"; return; } print "chdir $dir\n"; chdir $dir or do { warn "chdir to $dir failed: $!"; return; }; my $prog = apache_prog_name($apache); my @args = ($^X, 'Configure.pl', "-with-apache2=$apache", "--with-apache-prog=$prog"); print "@args\n\n"; system(@args) == 0 or do { warn "system @args failed: $?"; return; }; chdir '..'; rmtree($dir, 1, 1) or warn "rmtree of $dir failed: $!"; print "unlink $file\n"; unlink $file or warn "unlink of $file failed: $!"; return 1; } sub apache_prog_name { my $apache = shift; my $prog; for my $trial(qw(Apache.exe httpd.exe)) { my $path = catfile($apache, 'bin', $trial); next unless -e $path; $prog = $path; last; } die "Could not determine the Apache2 binary name" unless $prog; return $prog; } __DATA__ LIBAPREQ=libapreq2 APREQ2_TEST=apreq2_test CGITEST=test_cgi MOD=mod_apreq2 !IF "$(CFG)" != "Release" && "$(CFG)" != "Debug" !MESSAGE Invalid configuration "$(CFG)" specified. !MESSAGE You can specify a configuration when running NMAKE !MESSAGE by defining the macro CFG on the command line. For example: !MESSAGE !MESSAGE NMAKE CFG="Release" !MESSAGE !MESSAGE Possible choices for configuration are: !MESSAGE !MESSAGE "Release" (based on "Win32 (x86) Console Application") !MESSAGE "Debug" (based on "Win32 (x86) Console Application") !MESSAGE !ERROR An invalid configuration is specified. !ENDIF !IF "$(APACHE)" == "" !MESSAGE No Apache directory was specified. !MESSAGE Please run Configure.bat to specify a valid Apache directory. !ERROR !ENDIF !IF "$(OS)" == "Windows_NT" NULL= !ELSE NULL=nul !ENDIF CFG_HOME=$(APREQ_HOME)\win32 LIBDIR=$(CFG_HOME)\libs PERLGLUE=$(APREQ_HOME)\glue\perl APACHE_LIB=$(APACHE)\lib TDIR=$(APREQ_HOME)\library\t APREQ_MODULE=$(APREQ_HOME)\module ALL : MAKE_ALL MAKE_ALL : $(LIBAPREQ) $(MOD) PERL_GLUE $(LIBAPREQ): $(MAKE) /nologo /f $(CFG_HOME)\$(LIBAPREQ).mak CFG="$(LIBAPREQ) - Win32 $(CFG)" APACHE="$(APACHE)" APREQ_HOME="$(APREQ_HOME)" APR_LIB="$(APR_LIB)" APU_LIB="$(APU_LIB)" $(MOD): $(LIBAPREQ) $(MAKE) /nologo /f $(CFG_HOME)\$(MOD).mak CFG="$(MOD) - Win32 $(CFG)" APACHE="$(APACHE)" APREQ_HOME="$(APREQ_HOME)" APR_LIB="$(APR_LIB)" APU_LIB="$(APU_LIB)" PERL_GLUE: $(MOD) cd $(PERLGLUE) $(PERL) Makefile.PL $(MAKE) /nologo cd $(APREQ_HOME) PERL_TEST: $(MOD) cd $(PERLGLUE) !IF !EXIST("$(PERLGLUE)\Makefile") $(PERL) Makefile.PL !ENDIF set PATH=$(APREQ_HOME)\win32\libs;$(APACHE)\bin;$(PATH) $(MAKE) /nologo test cd $(APREQ_HOME) INSTALL : INSTALL_LIBAPREQ2 PERL_INSTALL INSTALL_LIBAPREQ2: $(LIBAPREQ) cd $(LIBDIR) !IF EXIST("$(LIBDIR)\$(MOD).so") copy "$(MOD).so" "$(APACHE)\modules\$(MOD).so" copy "$(MOD).lib" "$(APACHE_LIB)\$(MOD).lib" !ENDIF !IF EXIST("$(LIBDIR)\$(MOD).pdb") copy "$(MOD).pdb" "$(APACHE)\modules\$(MOD).pdb" !ENDIF !IF EXIST("$(LIBDIR)\$(LIBAPREQ).lib") copy "$(LIBAPREQ).lib" "$(APACHE_LIB)\$(LIBAPREQ).lib" !ENDIF !IF EXIST("$(LIBDIR)\$(LIBAPREQ).dll") copy "$(LIBAPREQ).dll" "$(APACHE)\bin\$(LIBAPREQ).dll" !ENDIF !IF EXIST("$(LIBDIR)\$(LIBAPREQ).pdb") copy "$(LIBAPREQ).pdb" "$(APACHE)\bin\$(LIBAPREQ).pdb" !ENDIF cd $(APREQ_HOME) PERL_INSTALL: $(MOD) cd $(PERLGLUE) !IF !EXIST("$(PERLGLUE)\Makefile") $(PERL) Makefile.PL !ENDIF $(MAKE) /nologo install cd $(APREQ_HOME) HELP: @echo nmake - build the libapreq2 library and perl glue @echo nmake test - run the supplied tests @echo nmake clean - clean @echo nmake install - install the C libraries and perl modules @echo nmake docs - build documents (requires doxygen) libapreq2-2.17/win32/libapreq2.mak0000644000175000017500000001462214277401734016267 0ustar jortonjorton# Microsoft Developer Studio Generated NMAKE File, Based on libapreq.dsp !IF "$(APACHE)" == "" !MESSAGE No Apache directory was specified. !MESSAGE This makefile is not to be run directly. !MESSAGE Please use Perl Makefile.PL, and then $(MAKE) on Makefile. !ERROR !ENDIF !IF "$(APR_LIB)" == "" !MESSAGE No apr lib was specified. !MESSAGE This makefile is not to be run directly. !MESSAGE Please use Perl Makefile.PL, and then $(MAKE) on Makefile. !ERROR !ENDIF !IF "$(APU_LIB)" == "" !MESSAGE No aprutil lib was specified. !MESSAGE This makefile is not to be run directly. !MESSAGE Please use Perl Makefile.PL, and then $(MAKE) on Makefile. !ERROR !ENDIF !IF "$(CFG)" == "" CFG=libapreq2 - Win32 Release !MESSAGE No configuration specified. Defaulting to libapreq2 - Win32 Release. !ENDIF !IF "$(CFG)" != "libapreq2 - Win32 Release" && "$(CFG)" != "libapreq2 - Win32 Debug" !MESSAGE Invalid configuration "$(CFG)" specified. !MESSAGE You can specify a configuration when running NMAKE !MESSAGE by defining the macro CFG on the command line. For example: !MESSAGE !MESSAGE NMAKE /f "libapreq2.mak" CFG="libapreq2 - Win32 Debug" !MESSAGE !MESSAGE Possible choices for configuration are: !MESSAGE !MESSAGE "libapreq2 - Win32 Release" (based on "Win32 (x86) Static Library") !MESSAGE "libapreq2 - Win32 Debug" (based on "Win32 (x86) Static Library") !MESSAGE !ERROR An invalid configuration is specified. !ENDIF !IF "$(OS)" == "Windows_NT" NULL= !ELSE NULL=nul !ENDIF CPP=cl.exe RSC=rc.exe CFG_HOME=$(APREQ_HOME)\win32 OUTDIR=$(CFG_HOME)\libs INTDIR=$(CFG_HOME)\libs LIBDIR=$(APREQ_HOME)\library LINK32_OBJS= \ "$(INTDIR)\cookie.obj" \ "$(INTDIR)\param.obj" \ "$(INTDIR)\parser.obj" \ "$(INTDIR)\parser_header.obj" \ "$(INTDIR)\parser_multipart.obj" \ "$(INTDIR)\parser_urlencoded.obj" \ "$(INTDIR)\util.obj" \ "$(INTDIR)\version.obj" \ "$(INTDIR)\module.obj" \ "$(INTDIR)\module_custom.obj" \ "$(INTDIR)\module_cgi.obj" \ "$(INTDIR)\error.obj" \ "$(INTDIR)\libapreq.res" !IF "$(CFG)" == "libapreq2 - Win32 Release" ALL : "$(OUTDIR)\libapreq2.dll" "$(OUTDIR)" : if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)" CPP_PROJ=/nologo /MD /W3 /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "APREQ_DECLARE_EXPORT" /I"$(APACHE)\include" /I"$(APREQ_HOME)\include" /YX /FD /c MTL_PROJ=/nologo /D "NDEBUG" /mktyplib203 /win32 RSC=rc.exe RSC_PROJ=/l 0x409 /i "$(APACHE)\include" /d "NDEBUG" /i "$(APREQ_HOME)\include" BSC32=bscmake.exe BSC32_FLAGS=/nologo /o"$(OUTDIR)\libapreq2.bsc" LINK32=link.exe MANIFEST=$(OUTDIR)\libapreq2.dll.manifest LINK32_FLAGS="$(APR_LIB)" "$(APU_LIB)" kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /incremental:no /out:"$(OUTDIR)\libapreq2.dll" /implib:"$(OUTDIR)\libapreq2.lib" "$(OUTDIR)\libapreq2.dll" : "$(OUTDIR)" $(DEF_FILE) $(LINK32_OBJS) $(LINK32) @<< $(LINK32_FLAGS) $(DEF_FLAGS) $(LINK32_OBJS) << if exist $(MANIFEST) mt /nologo /manifest $(MANIFEST) /outputresource:$(OUTDIR)\libapreq2.dll;2 !ELSEIF "$(CFG)" == "libapreq2 - Win32 Debug" ALL : "$(OUTDIR)\libapreq2.dll" "$(OUTDIR)" : if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)" CPP_PROJ=/nologo /MDd /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "APREQ_DECLARE_EXPORT" /I"$(APACHE)\include" /I"$(APREQ_HOME)\include" /YX /FD /GZ /c MTL_PROJ=/nologo /D "_DEBUG" /mktyplib203 /win32 RSC=rc.exe RSC_PROJ=/l 0x409 /i "$(APACHE)\include" /d "_DEBUG" /i "$(APREQ_HOME)\include" BSC32=bscmake.exe BSC32_FLAGS=/nologo /o"$(OUTDIR)\libapreq2.bsc" LINK32=link.exe MANIFEST=$(OUTDIR)\libapreq2.dll.manifest LINK32_FLAGS="$(APR_LIB)" "$(APU_LIB)" kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /incremental:yes /pdb:"$(OUTDIR)\libapreq2.pdb" /debug /out:"$(OUTDIR)\libapreq2.dll" /implib:"$(OUTDIR)\libapreq2.lib" /pdbtype:sept "$(OUTDIR)\libapreq2.dll" : "$(OUTDIR)" $(DEF_FILE) $(LINK32_OBJS) $(LINK32) @<< $(LINK32_FLAGS) $(DEF_FLAGS) $(LINK32_OBJS) << if exist $(MANIFEST) mt /nologo /manifest $(MANIFEST) /outputresource:$(OUTDIR)\libapreq2.dll;2 !ENDIF .c{$(INTDIR)}.obj:: $(CPP) @<< $(CPP_PROJ) $< << .cpp{$(INTDIR)}.obj:: $(CPP) @<< $(CPP_PROJ) $< << .cxx{$(INTDIR)}.obj:: $(CPP) @<< $(CPP_PROJ) $< << .c{$(INTDIR)}.sbr:: $(CPP) @<< $(CPP_PROJ) $< << .cpp{$(INTDIR)}.sbr:: $(CPP) @<< $(CPP_PROJ) $< << .cxx{$(INTDIR)}.sbr:: $(CPP) @<< $(CPP_PROJ) $< << !IF "$(CFG)" == "libapreq2 - Win32 Release" || "$(CFG)" == "libapreq2 - Win32 Debug" SOURCE=$(LIBDIR)\cookie.c "$(INTDIR)\cookie.obj" : $(SOURCE) "$(INTDIR)" $(CPP) /Fo"$(INTDIR)\cookie.obj" $(CPP_PROJ) $(SOURCE) SOURCE=$(LIBDIR)\param.c "$(INTDIR)\param.obj" : $(SOURCE) "$(INTDIR)" $(CPP) /Fo"$(INTDIR)\param.obj" $(CPP_PROJ) $(SOURCE) SOURCE=$(LIBDIR)\parser.c "$(INTDIR)\parser.obj" : $(SOURCE) "$(INTDIR)" $(CPP) /Fo"$(INTDIR)\parser.obj" $(CPP_PROJ) $(SOURCE) SOURCE=$(LIBDIR)\parser_header.c "$(INTDIR)\parser_header.obj" : $(SOURCE) "$(INTDIR)" $(CPP) /Fo"$(INTDIR)\parser_header.obj" $(CPP_PROJ) $(SOURCE) SOURCE=$(LIBDIR)\parser_multipart.c "$(INTDIR)\parser_multipart.obj" : $(SOURCE) "$(INTDIR)" $(CPP) /Fo"$(INTDIR)\parser_multipart.obj" $(CPP_PROJ) $(SOURCE) SOURCE=$(LIBDIR)\parser_urlencoded.c "$(INTDIR)\parser_urlencoded.obj" : $(SOURCE) "$(INTDIR)" $(CPP) /Fo"$(INTDIR)\parser_urlencoded.obj" $(CPP_PROJ) $(SOURCE) SOURCE=$(LIBDIR)\version.c "$(INTDIR)\version.obj" : $(SOURCE) "$(INTDIR)" $(CPP) /Fo"$(INTDIR)\version.obj" $(CPP_PROJ) $(SOURCE) SOURCE=$(LIBDIR)\module.c "$(INTDIR)\module.obj" : $(SOURCE) "$(INTDIR)" $(CPP) /Fo"$(INTDIR)\module.obj" $(CPP_PROJ) $(SOURCE) SOURCE=$(LIBDIR)\module_custom.c "$(INTDIR)\module_custom.obj" : $(SOURCE) "$(INTDIR)" $(CPP) /Fo"$(INTDIR)\module_custom.obj" $(CPP_PROJ) $(SOURCE) SOURCE=$(LIBDIR)\module_cgi.c "$(INTDIR)\module_cgi.obj" : $(SOURCE) "$(INTDIR)" $(CPP) /Fo"$(INTDIR)\module_cgi.obj" $(CPP_PROJ) $(SOURCE) SOURCE=$(LIBDIR)\util.c "$(INTDIR)\util.obj" : $(SOURCE) "$(INTDIR)" $(CPP) /Fo"$(INTDIR)\util.obj" $(CPP_PROJ) $(SOURCE) SOURCE=$(LIBDIR)\error.c "$(INTDIR)\error.obj" : $(SOURCE) "$(INTDIR)" $(CPP) /Fo"$(INTDIR)\error.obj" $(CPP_PROJ) $(SOURCE) SOURCE=.\libapreq.rc "$(INTDIR)\libapreq.res" : $(SOURCE) "$(INTDIR)" $(RSC) /fo"$(INTDIR)\libapreq.res" $(RSC_PROJ) $(SOURCE) !ENDIF libapreq2-2.17/win32/mod_apreq2.mak0000644000175000017500000001074714277401734016443 0ustar jortonjorton# Microsoft Developer Studio Generated NMAKE File, Based on mod_apreq.dsp !IF "$(APACHE)" == "" !MESSAGE No Apache directory was specified. !MESSAGE This makefile is not to be run directly. !MESSAGE Please use Perl Makefile.PL, and then $(MAKE) on Makefile. !ERROR !ENDIF !IF "$(APR_LIB)" == "" !MESSAGE No apr lib was specified. !MESSAGE This makefile is not to be run directly. !MESSAGE Please use Perl Makefile.PL, and then $(MAKE) on Makefile. !ERROR !ENDIF !IF "$(APU_LIB)" == "" !MESSAGE No aprutil lib was specified. !MESSAGE This makefile is not to be run directly. !MESSAGE Please use Perl Makefile.PL, and then $(MAKE) on Makefile. !ERROR !ENDIF !IF "$(CFG)" == "" CFG=mod_apreq2 - Win32 Release !MESSAGE No configuration specified. Defaulting to mod_apreq2 - Win32 Release. !ENDIF !IF "$(CFG)" != "mod_apreq2 - Win32 Release" && "$(CFG)" != "mod_apreq2 - Win32 Debug" !MESSAGE Invalid configuration "$(CFG)" specified. !MESSAGE You can specify a configuration when running NMAKE !MESSAGE by defining the macro CFG on the command line. For example: !MESSAGE !MESSAGE NMAKE /f "mod_apreq2.mak" CFG="mod_apreq2 - Win32 Debug" !MESSAGE !MESSAGE Possible choices for configuration are: !MESSAGE !MESSAGE "mod_apreq2 - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library") !MESSAGE "mod_apreq2 - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library") !MESSAGE !ERROR An invalid configuration is specified. !ENDIF !IF "$(OS)" == "Windows_NT" NULL= !ELSE NULL=nul !ENDIF CPP=cl.exe MTL=midl.exe RSC=rc.exe CFG_HOME=$(APREQ_HOME)\win32 OUTDIR=$(CFG_HOME)\libs INTDIR=$(CFG_HOME)\libs MODDIR=$(APREQ_HOME)\module\apache2 LINK32_OBJS= \ "$(INTDIR)\handle.obj" \ "$(INTDIR)\filter.obj" \ "$(APR_LIB)" \ "$(APU_LIB)" \ "$(APACHE)\lib\libhttpd.lib" \ "$(OUTDIR)\libapreq2.lib" !IF "$(CFG)" == "mod_apreq2 - Win32 Release" ALL : "$(OUTDIR)\mod_apreq2.dll" "$(OUTDIR)" : if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)" CPP_PROJ=/nologo /MD /W3 /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "APREQ_DECLARE_EXPORT" /I"$(APACHE)\include" /I"$(APREQ_HOME)\include" /I"$(MODDIR)" /YX /FD /c MTL_PROJ=/nologo /D "NDEBUG" /mktyplib203 /win32 BSC32=bscmake.exe BSC32_FLAGS=/nologo /o"$(OUTDIR)\mod_apreq2.bsc" LINK32=link.exe MANIFEST=$(OUTDIR)\mod_apreq2.so.manifest LINK32_FLAGS=kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /incremental:no /out:"$(OUTDIR)\mod_apreq2.so" /implib:"$(OUTDIR)\mod_apreq2.lib" "$(OUTDIR)\mod_apreq2.dll" : "$(OUTDIR)" $(DEF_FILE) $(LINK32_OBJS) $(LINK32) @<< $(LINK32_FLAGS) $(LINK32_OBJS) << if exist $(MANIFEST) mt /nologo /manifest $(MANIFEST) /outputresource:$(OUTDIR)\mod_apreq2.so;2 !ELSEIF "$(CFG)" == "mod_apreq2 - Win32 Debug" ALL : "$(OUTDIR)\mod_apreq2.dll" "$(OUTDIR)" : if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)" CPP_PROJ=/nologo /MDd /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "APREQ_DECLARE_EXPORT" /I"$(APACHE)\include" /I"$(APREQ_HOME)\include" /I"$(MODDIR)" /YX /FD /GZ /c MTL_PROJ=/nologo /D "_DEBUG" /mktyplib203 /win32 BSC32=bscmake.exe BSC32_FLAGS=/nologo /o"$(OUTDIR)\mod_apreq2.bsc" LINK32=link.exe MANIFEST=$(OUTDIR)\mod_apreq2.so.manifest LINK32_FLAGS=kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /incremental:yes /pdb:"$(OUTDIR)\mod_apreq2.pdb" /debug /out:"$(OUTDIR)\mod_apreq2.so" /implib:"$(OUTDIR)\mod_apreq2.lib" /pdbtype:sept "$(OUTDIR)\mod_apreq2.dll" : "$(OUTDIR)" $(DEF_FILE) $(LINK32_OBJS) $(LINK32) @<< $(LINK32_FLAGS) $(LINK32_OBJS) << if exist $(MANIFEST) mt /nologo /manifest $(MANIFEST) /outputresource:$(OUTDIR)\mod_apreq2.so;2 !ENDIF .c{$(INTDIR)}.obj:: $(CPP) @<< $(CPP_PROJ) $< << .cpp{$(INTDIR)}.obj:: $(CPP) @<< $(CPP_PROJ) $< << .cxx{$(INTDIR)}.obj:: $(CPP) @<< $(CPP_PROJ) $< << .c{$(INTDIR)}.sbr:: $(CPP) @<< $(CPP_PROJ) $< << .cpp{$(INTDIR)}.sbr:: $(CPP) @<< $(CPP_PROJ) $< << .cxx{$(INTDIR)}.sbr:: $(CPP) @<< $(CPP_PROJ) $< << !IF "$(CFG)" == "mod_apreq2 - Win32 Release" || "$(CFG)" == "mod_apreq2 - Win32 Debug" SOURCE=$(MODDIR)\filter.c "$(INTDIR)\filter.obj" : $(SOURCE) "$(INTDIR)" $(CPP) /Fo"$(INTDIR)\filter.obj" $(CPP_PROJ) $(SOURCE) SOURCE=$(MODDIR)\handle.c "$(INTDIR)\handle.obj" : $(SOURCE) "$(INTDIR)" $(CPP) /Fo"$(INTDIR)\handle.obj" $(CPP_PROJ) $(SOURCE) !ENDIF libapreq2-2.17/win32/README0000644000175000017500000000275414277401734014577 0ustar jortonjortonThis directory contains the necessary makefiles to build libapreq and related things on Win32 using VC++ 6. Run, from the httpd-apreq-2 top-level directory, perl Makefile.PL to generate the top-level Makefile. Available options are: --with-apache2=C:\Path\to\Apache2 : specify the top-level Apache2 directory --debug : build a debug version --without-perl : skip initialization of perl glue --help : print a help message With no options specified, an attempt will be made to find a suitable Apache2 directory, and if found, a non-debug version will be built. Assuming the configuration is successful, a Makefile will be generated. This can be used as: nmake - builds the libapreq2 library and perl glue nmake test - runs the supplied tests nmake install - install the C libraries and perl modules nmake clean - clean nmake docs - build documentation nmake help - print a usage message The 'docs' target is only available if a doxygen binary is detected. An experimental apxs tool for Win32 is available at http://perl.apache.org/dist/win32-bin/apxs_win32.tar.gz which will be needed to build the env/c-modules tests. If the apxs bat file isn't found on your system, the configuration script should offer to fetch and install it for you. If this is not done, grab the above archive, unpack it, and run the Configure.pl script within the archive to install. libapreq2-2.17/win32/test_cgi.mak0000644000175000017500000001007414277401734016204 0ustar jortonjorton# Microsoft Developer Studio Generated NMAKE File, Based on testall.dsp !IF "$(APACHE)" == "" !MESSAGE No Apache directory was specified. !MESSAGE This makefile is not to be run directly. !MESSAGE Please use Perl Makefile.PL, and then $(MAKE) on Makefile. !ERROR !ENDIF !IF "$(APR_LIB)" == "" !MESSAGE No apr lib was specified. !MESSAGE This makefile is not to be run directly. !MESSAGE Please use Perl Makefile.PL, and then $(MAKE) on Makefile. !ERROR !ENDIF !IF "$(APU_LIB)" == "" !MESSAGE No aprutil lib was specified. !MESSAGE This makefile is not to be run directly. !MESSAGE Please use Perl Makefile.PL, and then $(MAKE) on Makefile. !ERROR !ENDIF !IF "$(CFG)" == "" CFG=test_cgi - Win32 Release !MESSAGE No configuration specified. Defaulting to test_cgi - Win32 Release. !ENDIF !IF "$(CFG)" != "test_cgi - Win32 Release" && "$(CFG)" != "test_cgi - Win32 Debug" !MESSAGE Invalid configuration "$(CFG)" specified. !MESSAGE You can specify a configuration when running NMAKE !MESSAGE by defining the macro CFG on the command line. For example: !MESSAGE !MESSAGE NMAKE /f "test_cgi.mak" CFG="test_cgi - Win32 Debug" !MESSAGE !MESSAGE Possible choices for configuration are: !MESSAGE !MESSAGE "test_cgi - Win32 Release" (based on "Win32 (x86) Console Application") !MESSAGE "test_cgi - Win32 Debug" (based on "Win32 (x86) Console Application") !MESSAGE !ERROR An invalid configuration is specified. !ENDIF !IF "$(OS)" == "Windows_NT" NULL= !ELSE NULL=nul !ENDIF CFG_HOME=$(APREQ_HOME)\win32 MODULE=$(APREQ_HOME)\module OUTDIR=$(CFG_HOME)\libs INTDIR=$(CFG_HOME)\libs CGIBIN=$(MODULE)\t\cgi-bin LINK32_OBJS= \ "$(INTDIR)\test_cgi.obj" \ "$(OUTDIR)\libapreq2.lib" \ "$(APR_LIB)" \ "$(APU_LIB)" !IF "$(CFG)" == "test_cgi - Win32 Release" ALL : "$(OUTDIR)\test_cgi.exe" "$(OUTDIR)" : if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)" CPP=cl.exe CPP_PROJ=/nologo /MD /W3 /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /I"$(APACHE)\include" /I"$(APREQ_HOME)\include" /Fp"$(INTDIR)\test_cgi.pch" /YX /FD /c RSC=rc.exe BSC32=bscmake.exe BSC32_FLAGS=/nologo /o"$(OUTDIR)\test_cgi.bsc" LINK32=link.exe LINK32_FLAGS=kernel32.lib wsock32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /incremental:no /pdb:"$(OUTDIR)\test_cgi.pdb" /out:"$(CGIBIN)\test_cgi.exe" !ELSEIF "$(CFG)" == "test_cgi - Win32 Debug" ALL : "$(OUTDIR)\test_cgi.exe" "$(OUTDIR)" : if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)" CPP=cl.exe CPP_PROJ=/nologo /MDd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /I"$(APACHE)\include" /I"$(APREQ_HOME)\include" /YX /FD /GZ /c RSC=rc.exe BSC32=bscmake.exe BSC32_FLAGS=/nologo /o"$(OUTDIR)\test_cgi.bsc" LINK32=link.exe LINK32_FLAGS=kernel32.lib wsock32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /incremental:yes /pdb:"$(OUTDIR)\test_cgi.pdb" /debug /out:"$(CGIBIN)\test_cgi.exe" /pdbtype:sept !ENDIF !IF "$(CFG)" == "test_cgi - Win32 Release" || "$(CFG)" == "test_cgi - Win32 Debug" .c{$(INTDIR)}.obj:: $(CPP) @<< $(CPP_PROJ) $< << .cpp{$(INTDIR)}.obj:: $(CPP) @<< $(CPP_PROJ) $< << .cxx{$(INTDIR)}.obj:: $(CPP) @<< $(CPP_PROJ) $< << .c{$(INTDIR)}.sbr:: $(CPP) @<< $(CPP_PROJ) $< << .cpp{$(INTDIR)}.sbr:: $(CPP) @<< $(CPP_PROJ) $< << .cxx{$(INTDIR)}.sbr:: $(CPP) @<< $(CPP_PROJ) $< << "$(OUTDIR)\test_cgi.exe" : "$(OUTDIR)" $(DEF_FILE) $(LINK32_OBJS) if not exist "$(CGIBIN)/$(NULL)" mkdir "$(CGIBIN)" $(LINK32) @<< $(LINK32_FLAGS) $(LINK32_OBJS) << SOURCE=$(MODULE)\test_cgi.c "$(INTDIR)\test_cgi.obj" : $(SOURCE) "$(INTDIR)" $(CPP) /Fo"$(INTDIR)\test_cgi.obj" $(CPP_PROJ) $(SOURCE) !ENDIF libapreq2-2.17/win32/util.pl0000644000175000017500000000172114277401734015222 0ustar jortonjortonsub usage { my $script = shift; print <<"END"; Usage: perl $script [--with-apache2=C:\Path\to\Apache2] perl $script --help Options: --with-apache2=C:\Path\to\Apache2 : specify the top-level Apache2 directory --help : print this help message With no options specified, an attempt will be made to find a suitable Apache2 directory. END exit; } require File::Spec; sub check { my $apache = shift; die qq{No libhttpd library found under $apache/lib} unless -e qq{$apache/lib/libhttpd.lib}; die qq{No httpd header found under $apache/include} unless -e qq{$apache/include/httpd.h}; for my $b(qw(Apache.exe httpd.exe)) { my $binary = File::Spec->catfile($apache, 'bin', $b); next unless -x $binary; my $vers = qx{$binary -v}; die qq{"$apache" does not appear to be version 2.x} unless $vers =~ m!Apache/2.!; last; } return 1; } 1;