���ѧۧݧ�ӧ�� �ާ֧ߧ֧էا֧� - ���֧էѧܧ�ڧ��ӧѧ�� - /home/ukubnwwtacc0unt/chapelbellstudios.com/uploads/cover/general.m4.tar
���ѧ٧ѧ�
usr/share/autoconf/autoconf/general.m4 0000644 00000307742 15204036162 0014006 0 ustar 00 # This file is part of Autoconf. -*- Autoconf -*- # Parameterized macros. m4_define([_AC_COPYRIGHT_YEARS], [ Copyright (C) 1992-1996, 1998-2012 Free Software Foundation, Inc. ]) # This file is part of Autoconf. This program is free # software; you can redistribute it and/or modify it under the # terms of the GNU General Public License as published by the # Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # Under Section 7 of GPL version 3, you are granted additional # permissions described in the Autoconf Configure Script Exception, # version 3.0, as published by the Free Software Foundation. # # You should have received a copy of the GNU General Public License # and a copy of the Autoconf Configure Script Exception along with # this program; see the files COPYINGv3 and COPYING.EXCEPTION # respectively. If not, see <http://www.gnu.org/licenses/>. # Written by David MacKenzie, with help from # Franc,ois Pinard, Karl Berry, Richard Pixley, Ian Lance Taylor, # Roland McGrath, Noah Friedman, david d zuhn, and many others. ## ---------------- ## ## The diversions. ## ## ---------------- ## # We heavily use m4's diversions both for the initializations and for # required macros (see AC_REQUIRE), because in both cases we have to # issue high in `configure' something which is discovered late. # # KILL is only used to suppress output. # # The layers of `configure'. We let m4 undivert them by itself, when # it reaches the end of `configure.ac'. # # - BINSH # #! /bin/sh # - HEADER-REVISION # Sent by AC_REVISION # - HEADER-COMMENT # Purpose of the script. # - HEADER-COPYRIGHT # Copyright notice(s) # - M4SH-INIT # Initialization of bottom layers. # # - DEFAULTS # early initializations (defaults) # - PARSE_ARGS # initialization code, option handling loop. # # - HELP_BEGIN # Handling `configure --help'. # - HELP_CANON # Help msg for AC_CANONICAL_* # - HELP_ENABLE # Help msg from AC_ARG_ENABLE. # - HELP_WITH # Help msg from AC_ARG_WITH. # - HELP_VAR # Help msg from AC_ARG_VAR. # - HELP_VAR_END # A small paragraph on the use of the variables. # - HELP_END # Tail of the handling of --help. # # - VERSION_BEGIN # Head of the handling of --version. # - VERSION_FSF # FSF copyright notice for --version. # - VERSION_USER # User copyright notice for --version. # - VERSION_END # Tail of the handling of --version. # # - SHELL_FN # Shell functions. # # - INIT_PREPARE # Tail of initialization code. # # - BODY # the tests and output code # # _m4_divert(DIVERSION-NAME) # -------------------------- # Convert a diversion name into its number. Otherwise, return # DIVERSION-NAME which is supposed to be an actual diversion number. # Of course it would be nicer to use m4_case here, instead of zillions # of little macros, but it then takes twice longer to run `autoconf'! # # From M4sugar: # -1. KILL # 10000. GROW # # From M4sh: # 0. BINSH # 1. HEADER-REVISION # 2. HEADER-COMMENT # 3. HEADER-COPYRIGHT # 4. M4SH-INIT # 1000. BODY m4_define([_m4_divert(DEFAULTS)], 10) m4_define([_m4_divert(PARSE_ARGS)], 20) m4_define([_m4_divert(HELP_BEGIN)], 100) m4_define([_m4_divert(HELP_CANON)], 101) m4_define([_m4_divert(HELP_ENABLE)], 102) m4_define([_m4_divert(HELP_WITH)], 103) m4_define([_m4_divert(HELP_VAR)], 104) m4_define([_m4_divert(HELP_VAR_END)], 105) m4_define([_m4_divert(HELP_END)], 106) m4_define([_m4_divert(VERSION_BEGIN)], 200) m4_define([_m4_divert(VERSION_FSF)], 201) m4_define([_m4_divert(VERSION_USER)], 202) m4_define([_m4_divert(VERSION_END)], 203) m4_define([_m4_divert(SHELL_FN)], 250) m4_define([_m4_divert(INIT_PREPARE)], 300) # AC_DIVERT_PUSH(DIVERSION-NAME) # AC_DIVERT_POP # ------------------------------ m4_copy([m4_divert_push],[AC_DIVERT_PUSH]) m4_copy([m4_divert_pop], [AC_DIVERT_POP]) ## ------------------------------------ ## ## Defining/requiring Autoconf macros. ## ## ------------------------------------ ## # AC_DEFUN(NAME, EXPANSION) # AC_DEFUN_ONCE(NAME, EXPANSION) # AC_BEFORE(THIS-MACRO-NAME, CALLED-MACRO-NAME) # AC_REQUIRE(STRING) # AC_PROVIDE(MACRO-NAME) # AC_PROVIDE_IFELSE(MACRO-NAME, IF-PROVIDED, IF-NOT-PROVIDED) # ----------------------------------------------------------- m4_copy([m4_defun], [AC_DEFUN]) m4_copy([m4_defun_once], [AC_DEFUN_ONCE]) m4_copy([m4_before], [AC_BEFORE]) m4_copy([m4_require], [AC_REQUIRE]) m4_copy([m4_provide], [AC_PROVIDE]) m4_copy([m4_provide_if], [AC_PROVIDE_IFELSE]) # AC_OBSOLETE(THIS-MACRO-NAME, [SUGGESTION]) # ------------------------------------------ m4_define([AC_OBSOLETE], [AC_DIAGNOSE([obsolete], [$1 is obsolete$2])]) ## ----------------------------- ## ## Implementing shell functions. ## ## ----------------------------- ## # AC_REQUIRE_SHELL_FN(NAME-TO-CHECK, COMMENT, BODY, [DIVERSION = SHELL_FN] # ------------------------------------------------------------------------ # Same as AS_REQUIRE_SHELL_FN except that the default diversion comes # later in the script (speeding up configure --help and --version). AC_DEFUN([AC_REQUIRE_SHELL_FN], [AS_REQUIRE_SHELL_FN([$1], [$2], [$3], m4_default_quoted([$4], [SHELL_FN]))]) ## ----------------------------- ## ## Implementing Autoconf loops. ## ## ----------------------------- ## # AU::AC_FOREACH(VARIABLE, LIST, EXPRESSION) # ------------------------------------------ AU_DEFUN([AC_FOREACH], [[m4_foreach_w($@)]]) AC_DEFUN([AC_FOREACH], [m4_foreach_w($@)dnl AC_DIAGNOSE([obsolete], [The macro `AC_FOREACH' is obsolete. You should run autoupdate.])]) ## ----------------------------------- ## ## Helping macros to display strings. ## ## ----------------------------------- ## # AU::AC_HELP_STRING(LHS, RHS, [COLUMN]) # -------------------------------------- AU_ALIAS([AC_HELP_STRING], [AS_HELP_STRING]) ## ---------------------------------------------- ## ## Information on the package being Autoconf'ed. ## ## ---------------------------------------------- ## # It is suggested that the macros in this section appear before # AC_INIT in `configure.ac'. Nevertheless, this is just stylistic, # and from the implementation point of view, AC_INIT *must* be expanded # beforehand: it puts data in diversions which must appear before the # data provided by the macros of this section. # The solution is to require AC_INIT in each of these macros. AC_INIT # has the needed magic so that it can't be expanded twice. # _AC_INIT_LITERAL(STRING) # ------------------------ # Reject STRING if it contains newline, or if it cannot be used as-is # in single-quoted strings, double-quoted strings, and quoted and # unquoted here-docs. m4_define([_AC_INIT_LITERAL], [m4_if(m4_index(m4_translit([[$1]], [ ""], ['']), ['])AS_LITERAL_HEREDOC_IF([$1], [-]), [-1-], [], [m4_warn([syntax], [AC_INIT: not a literal: $1])])]) # _AC_INIT_PACKAGE(PACKAGE-NAME, VERSION, BUG-REPORT, [TARNAME], [URL]) # --------------------------------------------------------------------- m4_define([_AC_INIT_PACKAGE], [_AC_INIT_LITERAL([$1]) _AC_INIT_LITERAL([$2]) _AC_INIT_LITERAL([$3]) m4_ifndef([AC_PACKAGE_NAME], [m4_define([AC_PACKAGE_NAME], [$1])]) m4_ifndef([AC_PACKAGE_TARNAME], [m4_define([AC_PACKAGE_TARNAME], m4_default([$4], [m4_bpatsubst(m4_tolower(m4_bpatsubst([[$1]], [GNU ])), [[^_abcdefghijklmnopqrstuvwxyz0123456789]], [-])]))]) m4_ifndef([AC_PACKAGE_VERSION], [m4_define([AC_PACKAGE_VERSION], [$2])]) m4_ifndef([AC_PACKAGE_STRING], [m4_define([AC_PACKAGE_STRING], [$1 $2])]) m4_ifndef([AC_PACKAGE_BUGREPORT], [m4_define([AC_PACKAGE_BUGREPORT], [$3])]) m4_ifndef([AC_PACKAGE_URL], [m4_define([AC_PACKAGE_URL], m4_if([$5], [], [m4_if(m4_index([$1], [GNU ]), [0], [[http://www.gnu.org/software/]m4_defn([AC_PACKAGE_TARNAME])[/]])], [[$5]]))]) ]) # AC_COPYRIGHT(TEXT, [VERSION-DIVERSION = VERSION_USER], # [FILTER = m4_newline]) # ------------------------------------------------------ # Emit TEXT, a copyright notice, in the top of `configure' and in # --version output. Macros in TEXT are evaluated once. Process # the --version output through FILTER (m4_newline, m4_do, and # m4_copyright_condense are common filters). m4_define([AC_COPYRIGHT], [AS_COPYRIGHT([$1])[]]dnl [m4_divert_text(m4_default_quoted([$2], [VERSION_USER]), [m4_default([$3], [m4_newline])([$1])])])# AC_COPYRIGHT # AC_REVISION(REVISION-INFO) # -------------------------- # The second quote in the translit is just to cope with font-lock-mode # which sees the opening of a string. m4_define([AC_REVISION], [m4_divert_text([HEADER-REVISION], [@%:@ From __file__ m4_translit([$1], [$""]).])dnl ]) ## ---------------------------------------- ## ## Requirements over the Autoconf version. ## ## ---------------------------------------- ## # AU::AC_PREREQ(VERSION) # ---------------------- # Update this `AC_PREREQ' statement to require the current version of # Autoconf. But fail if ever this autoupdate is too old. # # Note that `m4_defn([m4_PACKAGE_VERSION])' below are expanded before # calling `AU_DEFUN', i.e., it is hard coded. Otherwise it would be # quite complex for autoupdate to import the value of # `m4_PACKAGE_VERSION'. We could `AU_DEFUN' `m4_PACKAGE_VERSION', but # this would replace all its occurrences with the current version of # Autoconf, which is certainly not what the user intended. AU_DEFUN([AC_PREREQ], [m4_version_prereq([$1])[]dnl [AC_PREREQ(]]m4_dquote(m4_dquote(m4_defn([m4_PACKAGE_VERSION])))[[)]]) # AC_PREREQ(VERSION) # ------------------ # Complain and exit if the Autoconf version is less than VERSION. m4_undefine([AC_PREREQ]) m4_copy([m4_version_prereq], [AC_PREREQ]) # AC_AUTOCONF_VERSION # ------------------- # The current version of Autoconf parsing this file. m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION]) ## ---------------- ## ## Initialization. ## ## ---------------- ## # All the following macros are used by AC_INIT. Ideally, they should # be presented in the order in which they are output. Please, help us # sorting it, or at least, don't augment the entropy. # _AC_INIT_NOTICE # --------------- # Provide useful headers; override the HEADER-COMMENT created by M4sh. m4_define([_AC_INIT_NOTICE], [m4_cleardivert([HEADER-COMMENT])]dnl [m4_divert_text([HEADER-COMMENT], [@%:@ Guess values for system-dependent variables and create Makefiles. @%:@ Generated by m4_PACKAGE_STRING[]dnl m4_ifset([AC_PACKAGE_STRING], [ for AC_PACKAGE_STRING]).]) m4_ifset([AC_PACKAGE_BUGREPORT], [m4_divert_text([HEADER-COMMENT], [@%:@ @%:@ Report bugs to <AC_PACKAGE_BUGREPORT>.])]) ]) # _AC_INIT_COPYRIGHT # ------------------ # We dump to VERSION_FSF to make sure we are inserted before the # user copyrights, and after the setup of the --version handling. m4_define([_AC_INIT_COPYRIGHT], [AC_COPYRIGHT(m4_defn([_AC_COPYRIGHT_YEARS]), [VERSION_FSF], [ m4_copyright_condense])dnl AC_COPYRIGHT( [This configure script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it.], [VERSION_FSF], [m4_echo])]) # File Descriptors # ---------------- # Set up the file descriptors used by `configure'. # File descriptor usage: # 0 standard input (/dev/null) # 1 file creation # 2 errors and warnings # AS_MESSAGE_LOG_FD compiler messages saved in config.log # AS_MESSAGE_FD checking for... messages and results # AS_ORIGINAL_STDIN_FD original standard input (still open) # # stdin is /dev/null because checks that run programs may # inadvertently run interactive ones, which would stop configuration # until someone typed an EOF. m4_define([AS_MESSAGE_FD], 6) m4_define([AS_ORIGINAL_STDIN_FD], 7) # That's how they used to be named. AU_ALIAS([AC_FD_CC], [AS_MESSAGE_LOG_FD]) AU_ALIAS([AC_FD_MSG], [AS_MESSAGE_FD]) # _AC_INIT_DEFAULTS # ----------------- # Values which defaults can be set from `configure.ac'. # `/bin/machine' is used in `glibcbug'. The others are used in config.* m4_define([_AC_INIT_DEFAULTS], [m4_divert_push([DEFAULTS])dnl test -n "$DJDIR" || exec AS_ORIGINAL_STDIN_FD<&0 </dev/null exec AS_MESSAGE_FD>&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=. LIB@&t@OBJS= cross_compiling=no subdirs= MFLAGS= MAKEFLAGS= AC_SUBST([SHELL])dnl AC_SUBST([PATH_SEPARATOR])dnl # Identity of this package. AC_SUBST([PACKAGE_NAME], [m4_ifdef([AC_PACKAGE_NAME], ['AC_PACKAGE_NAME'])])dnl AC_SUBST([PACKAGE_TARNAME], [m4_ifdef([AC_PACKAGE_TARNAME], ['AC_PACKAGE_TARNAME'])])dnl AC_SUBST([PACKAGE_VERSION], [m4_ifdef([AC_PACKAGE_VERSION], ['AC_PACKAGE_VERSION'])])dnl AC_SUBST([PACKAGE_STRING], [m4_ifdef([AC_PACKAGE_STRING], ['AC_PACKAGE_STRING'])])dnl AC_SUBST([PACKAGE_BUGREPORT], [m4_ifdef([AC_PACKAGE_BUGREPORT], ['AC_PACKAGE_BUGREPORT'])])dnl AC_SUBST([PACKAGE_URL], [m4_ifdef([AC_PACKAGE_URL], ['AC_PACKAGE_URL'])])dnl m4_divert_pop([DEFAULTS])dnl m4_wrap_lifo([m4_divert_text([DEFAULTS], [ac_subst_vars='m4_set_dump([_AC_SUBST_VARS], m4_newline)' ac_subst_files='m4_ifdef([_AC_SUBST_FILES], [m4_defn([_AC_SUBST_FILES])])' ac_user_opts=' enable_option_checking m4_ifdef([_AC_USER_OPTS], [m4_defn([_AC_USER_OPTS]) ])' m4_ifdef([_AC_PRECIOUS_VARS], [_AC_ARG_VAR_STORE[]dnl _AC_ARG_VAR_VALIDATE[]dnl ac_precious_vars='m4_defn([_AC_PRECIOUS_VARS])']) m4_ifdef([_AC_LIST_SUBDIRS], [ac_subdirs_all='m4_defn([_AC_LIST_SUBDIRS])'])dnl ])])dnl ])# _AC_INIT_DEFAULTS # AC_PREFIX_DEFAULT(PREFIX) # ------------------------- AC_DEFUN([AC_PREFIX_DEFAULT], [m4_divert_text([DEFAULTS], [ac_default_prefix=$1])]) # AC_PREFIX_PROGRAM(PROGRAM) # -------------------------- # Guess the value for the `prefix' variable by looking for # the argument program along PATH and taking its parent. # Example: if the argument is `gcc' and we find /usr/local/gnu/bin/gcc, # set `prefix' to /usr/local/gnu. # This comes too late to find a site file based on the prefix, # and it might use a cached value for the path. # No big loss, I think, since most configures don't use this macro anyway. AC_DEFUN([AC_PREFIX_PROGRAM], [if test "x$prefix" = xNONE; then dnl We reimplement AC_MSG_CHECKING (mostly) to avoid the ... in the middle. _AS_ECHO_N([checking for prefix by ]) AC_PATH_PROG(ac_prefix_program, [$1]) if test -n "$ac_prefix_program"; then prefix=`AS_DIRNAME(["$ac_prefix_program"])` prefix=`AS_DIRNAME(["$prefix"])` fi fi ])# AC_PREFIX_PROGRAM # AC_CONFIG_SRCDIR([UNIQUE-FILE-IN-SOURCE-DIR]) # --------------------------------------------- # UNIQUE-FILE-IN-SOURCE-DIR is a file name unique to this package, # relative to the directory that configure is in, which we can look # for to find out if srcdir is correct. AC_DEFUN([AC_CONFIG_SRCDIR], [m4_divert_text([DEFAULTS], [ac_unique_file="$1"])]) # _AC_INIT_DIRCHECK # ----------------- # Set ac_pwd, and sanity-check it and the source and installation directories. # # (This macro is AC_REQUIREd by _AC_INIT_SRCDIR, so it has to be AC_DEFUNed.) # AC_DEFUN([_AC_INIT_DIRCHECK], [m4_divert_push([PARSE_ARGS])dnl ac_pwd=`pwd` && test -n "$ac_pwd" && ac_ls_di=`ls -di .` && ac_pwd_ls_di=`cd "$ac_pwd" && ls -di .` || AC_MSG_ERROR([working directory cannot be determined]) test "X$ac_ls_di" = "X$ac_pwd_ls_di" || AC_MSG_ERROR([pwd does not report name of working directory]) m4_divert_pop([PARSE_ARGS])dnl ])# _AC_INIT_DIRCHECK # _AC_INIT_SRCDIR # --------------- # Compute `srcdir' based on `$ac_unique_file'. # # (We have to AC_DEFUN it, since we use AC_REQUIRE.) # AC_DEFUN([_AC_INIT_SRCDIR], [AC_REQUIRE([_AC_INIT_DIRCHECK])dnl m4_divert_push([PARSE_ARGS])dnl # 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"])` 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 .." AC_MSG_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" || AC_MSG_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 m4_divert_pop([PARSE_ARGS])dnl ])# _AC_INIT_SRCDIR # _AC_INIT_PARSE_ARGS # ------------------- m4_define([_AC_INIT_PARSE_ARGS], [m4_divert_push([PARSE_ARGS])dnl # 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 AC_SUBST(exec_prefix, NONE)dnl no_create= no_recursion= AC_SUBST(prefix, NONE)dnl program_prefix=NONE program_suffix=NONE AC_SUBST(program_transform_name, [s,x,x,])dnl 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.) AC_SUBST([bindir], ['${exec_prefix}/bin'])dnl AC_SUBST([sbindir], ['${exec_prefix}/sbin'])dnl AC_SUBST([libexecdir], ['${exec_prefix}/libexec'])dnl AC_SUBST([datarootdir], ['${prefix}/share'])dnl AC_SUBST([datadir], ['${datarootdir}'])dnl AC_SUBST([sysconfdir], ['${prefix}/etc'])dnl AC_SUBST([sharedstatedir], ['${prefix}/com'])dnl AC_SUBST([localstatedir], ['${prefix}/var'])dnl AC_SUBST([includedir], ['${prefix}/include'])dnl AC_SUBST([oldincludedir], ['/usr/include'])dnl AC_SUBST([docdir], [m4_ifset([AC_PACKAGE_TARNAME], ['${datarootdir}/doc/${PACKAGE_TARNAME}'], ['${datarootdir}/doc/${PACKAGE}'])])dnl AC_SUBST([infodir], ['${datarootdir}/info'])dnl AC_SUBST([htmldir], ['${docdir}'])dnl AC_SUBST([dvidir], ['${docdir}'])dnl AC_SUBST([pdfdir], ['${docdir}'])dnl AC_SUBST([psdir], ['${docdir}'])dnl AC_SUBST([libdir], ['${exec_prefix}/lib'])dnl AC_SUBST([localedir], ['${datarootdir}/locale'])dnl AC_SUBST([mandir], ['${datarootdir}/man'])dnl 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 # Accept the important Cygnus configure options, so we can diagnose typos. 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 ;; _AC_INIT_PARSE_ENABLE([disable]) -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 ;; _AC_INIT_PARSE_ENABLE([enable]) -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 ;; -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=: ;; _AC_INIT_PARSE_ENABLE([with]) _AC_INIT_PARSE_ENABLE([without]) --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 ;; -*) AC_MSG_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]]* ) AC_MSG_ERROR([invalid variable name: `$ac_envvar']) ;; esac eval $ac_envvar=\$ac_optarg export $ac_envvar ;; *) # FIXME: should be removed in autoconf 3.0. AC_MSG_WARN([you should use --build, --host, --target]) expr "x$ac_option" : "[.*[^-._$as_cr_alnum]]" >/dev/null && AC_MSG_WARN([invalid host type: $ac_option]) : "${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'` AC_MSG_ERROR([missing argument to $ac_option]) fi if test -n "$ac_unrecognized_opts"; then case $enable_option_checking in no) ;; fatal) AC_MSG_ERROR([unrecognized options: $ac_unrecognized_opts]) ;; *) AC_MSG_WARN( [unrecognized options: $ac_unrecognized_opts]) ;; 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 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 AC_MSG_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 AS_MESSAGE_FD>/dev/null m4_divert_pop([PARSE_ARGS])dnl ])# _AC_INIT_PARSE_ARGS # _AC_INIT_PARSE_ENABLE(OPTION-NAME) # ---------------------------------- # A trivial front-end for _AC_INIT_PARSE_ENABLE2. # m4_define([_AC_INIT_PARSE_ENABLE], [m4_bmatch([$1], [^with], [_AC_INIT_PARSE_ENABLE2([$1], [with])], [_AC_INIT_PARSE_ENABLE2([$1], [enable])])]) # _AC_INIT_PARSE_ENABLE2(OPTION-NAME, POSITIVE-NAME) # -------------------------------------------------- # Handle an `--enable' or a `--with' option. # # OPTION-NAME is `enable', `disable', `with', or `without'. # POSITIVE-NAME is the corresponding positive variant, i.e. `enable' or `with'. # # Positive variant of the option is recognized by the condition # OPTION-NAME == POSITIVE-NAME . # m4_define([_AC_INIT_PARSE_ENABLE2], [-$1-* | --$1-*) ac_useropt=`expr "x$ac_option" : 'x-*$1-\(m4_if([$1], [$2], [[[^=]]], [.])*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : "[.*[^-+._$as_cr_alnum]]" >/dev/null && AC_MSG_ERROR( [invalid ]m4_if([$2], [with], [package], [feature])[ name: $ac_useropt]) ac_useropt_orig=$ac_useropt ac_useropt=`AS_ECHO(["$ac_useropt"]) | sed 's/[[-+.]]/_/g'` case $ac_user_opts in *" "$2_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--$1-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval $2_$ac_useropt=m4_if([$1], [$2], [\$ac_optarg], [no]) ;;dnl ]) # _AC_INIT_HELP # ------------- # Handle the `configure --help' message. m4_define([_AC_INIT_HELP], [m4_divert_push([HELP_BEGIN])dnl # # 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 m4_ifset([AC_PACKAGE_STRING], [AC_PACKAGE_STRING], [this package]) 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: ]AS_HELP_STRING([--prefix=PREFIX], [install architecture-independent files in PREFIX [$ac_default_prefix]]) AS_HELP_STRING([--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] --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] ]AS_HELP_STRING([--docdir=DIR], [documentation root ]@<:@DATAROOTDIR/doc/m4_ifset([AC_PACKAGE_TARNAME], [AC_PACKAGE_TARNAME], [PACKAGE])@:>@)[ --htmldir=DIR html documentation [DOCDIR] --dvidir=DIR dvi documentation [DOCDIR] --pdfdir=DIR pdf documentation [DOCDIR] --psdir=DIR ps documentation [DOCDIR] _ACEOF cat <<\_ACEOF] m4_divert_pop([HELP_BEGIN])dnl dnl The order of the diversions here is dnl - HELP_BEGIN dnl which may be extended by extra generic options such as with X or dnl AC_ARG_PROGRAM. Displayed only in long --help. dnl dnl - HELP_CANON dnl Support for cross compilation (--build, --host and --target). dnl Display only in long --help. dnl dnl - HELP_ENABLE dnl which starts with the trailer of the HELP_BEGIN, HELP_CANON section, dnl then implements the header of the non generic options. dnl dnl - HELP_WITH dnl dnl - HELP_VAR dnl dnl - HELP_VAR_END dnl dnl - HELP_END dnl initialized below, in which we dump the trailer (handling of the dnl recursion for instance). m4_divert_push([HELP_ENABLE])dnl _ACEOF fi if test -n "$ac_init_help"; then m4_ifset([AC_PACKAGE_STRING], [ case $ac_init_help in short | recursive ) echo "Configuration of AC_PACKAGE_STRING:";; esac]) cat <<\_ACEOF m4_divert_pop([HELP_ENABLE])dnl m4_divert_push([HELP_END])dnl Report bugs to m4_ifset([AC_PACKAGE_BUGREPORT], [<AC_PACKAGE_BUGREPORT>], [the package provider]).dnl m4_ifdef([AC_PACKAGE_NAME], [m4_ifset([AC_PACKAGE_URL], [ AC_PACKAGE_NAME home page: <AC_PACKAGE_URL>.])dnl m4_if(m4_index(m4_defn([AC_PACKAGE_NAME]), [GNU ]), [0], [ General help using GNU software: <http://www.gnu.org/gethelp/>.])]) _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_SRCDIRS(["$ac_dir"]) cd "$ac_dir" || { ac_status=$?; continue; } # Check for guested configure. 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 AC_MSG_WARN([no configuration information is in $ac_dir]) fi || ac_status=$? cd "$ac_pwd" || { ac_status=$?; break; } done fi test -n "$ac_init_help" && exit $ac_status m4_divert_pop([HELP_END])dnl ])# _AC_INIT_HELP # _AC_INIT_VERSION # ---------------- # Handle the `configure --version' message. m4_define([_AC_INIT_VERSION], [m4_divert_text([VERSION_BEGIN], [if $ac_init_version; then cat <<\_ACEOF m4_ifset([AC_PACKAGE_NAME], [AC_PACKAGE_NAME ])configure[]dnl m4_ifset([AC_PACKAGE_VERSION], [ AC_PACKAGE_VERSION]) generated by m4_PACKAGE_STRING]) m4_divert_text([VERSION_END], [_ACEOF exit fi])dnl ])# _AC_INIT_VERSION # _AC_INIT_CONFIG_LOG # ------------------- # Initialize the config.log file descriptor and write header to it. m4_define([_AC_INIT_CONFIG_LOG], [m4_divert_text([INIT_PREPARE], [m4_define([AS_MESSAGE_LOG_FD], 5)dnl 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 m4_ifset([AC_PACKAGE_NAME], [AC_PACKAGE_NAME ])dnl $as_me[]m4_ifset([AC_PACKAGE_VERSION], [ AC_PACKAGE_VERSION]), which was generated by m4_PACKAGE_STRING. Invocation command line was $ $[0] $[@] _ACEOF exec AS_MESSAGE_LOG_FD>>config.log AS_UNAME >&AS_MESSAGE_LOG_FD cat >&AS_MESSAGE_LOG_FD <<_ACEOF m4_text_box([Core tests.]) _ACEOF ])])# _AC_INIT_CONFIG_LOG # _AC_INIT_PREPARE # ---------------- # Called by AC_INIT to build the preamble of the `configure' scripts. # 1. Trap and clean up various tmp files. # 2. Set up the fd and output files # 3. Remember the options given to `configure' for `config.status --recheck'. # 4. Initiates confdefs.h # 5. Loads site and cache files m4_define([_AC_INIT_PREPARE], [m4_divert_push([INIT_PREPARE])dnl # 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=`AS_ECHO(["$ac_arg"]) | sed "s/'/'\\\\\\\\''/g"` ;; esac case $ac_pass in 1) AS_VAR_APPEND([ac_configure_args0], [" '$ac_arg'"]) ;; 2) AS_VAR_APPEND([ac_configure_args1], [" '$ac_arg'"]) dnl If trying to remove duplicates, be sure to (i) keep the *last* dnl value (e.g. --prefix=1 --prefix=2 --prefix=1 might keep 2 only), dnl and (ii) not to strip long options (--prefix foo --prefix bar might dnl give --prefix foo bar). if test $ac_must_keep_next = true; then ac_must_keep_next=false # Got value, back to normal. else case $ac_arg in dnl Use broad patterns, as arguments that would have already made configure dnl exit don't matter. *=* | --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_VAR_APPEND([ac_configure_args], [" '$ac_arg'"]) ;; esac done done AS_UNSET(ac_configure_args0) AS_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=$? # Save into config.log some information that might help in debugging. { echo AS_BOX([Cache variables.]) echo m4_bpatsubsts(m4_defn([_AC_CACHE_DUMP]), [^ *\(#.*\)? ], [], ['], ['\\'']) echo AS_BOX([Output variables.]) echo for ac_var in $ac_subst_vars do eval ac_val=\$$ac_var case $ac_val in *\'\''*) ac_val=`AS_ECHO(["$ac_val"]) | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; esac AS_ECHO(["$ac_var='\''$ac_val'\''"]) done | sort echo if test -n "$ac_subst_files"; then AS_BOX([File substitutions.]) echo for ac_var in $ac_subst_files do eval ac_val=\$$ac_var case $ac_val in *\'\''*) ac_val=`AS_ECHO(["$ac_val"]) | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; esac AS_ECHO(["$ac_var='\''$ac_val'\''"]) done | sort echo fi if test -s confdefs.h; then AS_BOX([confdefs.h.]) echo cat confdefs.h echo fi test "$ac_signal" != 0 && AS_ECHO(["$as_me: caught signal $ac_signal"]) AS_ECHO(["$as_me: exit $exit_status"]) } >&AS_MESSAGE_LOG_FD 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_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 dnl AIX cpp loses on an empty file, NextStep 3.3 (patch 3) loses on a file dnl containing less than 14 bytes (including the newline). AS_ECHO(["/* confdefs.h */"]) > confdefs.h # Predefined preprocessor variables. AC_DEFINE_UNQUOTED([PACKAGE_NAME], ["$PACKAGE_NAME"], [Define to the full name of this package.])dnl AC_DEFINE_UNQUOTED([PACKAGE_TARNAME], ["$PACKAGE_TARNAME"], [Define to the one symbol short name of this package.])dnl AC_DEFINE_UNQUOTED([PACKAGE_VERSION], ["$PACKAGE_VERSION"], [Define to the version of this package.])dnl AC_DEFINE_UNQUOTED([PACKAGE_STRING], ["$PACKAGE_STRING"], [Define to the full name and version of this package.])dnl AC_DEFINE_UNQUOTED([PACKAGE_BUGREPORT], ["$PACKAGE_BUGREPORT"], [Define to the address where bug reports for this package should be sent.])dnl AC_DEFINE_UNQUOTED([PACKAGE_URL], ["$PACKAGE_URL"], [Define to the home page for this package.]) # Let the site file select an alternate cache file if it wants to. AC_SITE_LOAD AC_CACHE_LOAD m4_divert_pop([INIT_PREPARE])dnl ])# _AC_INIT_PREPARE # AU::AC_INIT([UNIQUE-FILE-IN-SOURCE-DIR]) # ---------------------------------------- # This macro is used only for Autoupdate. AU_DEFUN([AC_INIT], [m4_ifval([$2], [[AC_INIT($@)]], [m4_ifval([$1], [[AC_INIT] AC_CONFIG_SRCDIR([$1])], [[AC_INIT]])])[]dnl ]) # AC_INIT([PACKAGE, VERSION, [BUG-REPORT], [TARNAME], [URL]) # ---------------------------------------------------------- # Include the user macro files, prepare the diversions, and output the # preamble of the `configure' script. # # If BUG-REPORT is omitted, do without (unless the user previously # defined the m4 macro AC_PACKAGE_BUGREPORT). If TARNAME is omitted, # use PACKAGE to seed it. If URL is omitted, use # `http://www.gnu.org/software/TARNAME/' if PACKAGE begins with `GNU', # otherwise, do without. # # Note that the order is important: first initialize, then set the # AC_CONFIG_SRCDIR. m4_define([AC_INIT], [# Forbidden tokens and exceptions. m4_pattern_forbid([^_?A[CHUM]_]) m4_pattern_forbid([_AC_]) m4_pattern_forbid([^LIBOBJS$], [do not use LIBOBJS directly, use AC_LIBOBJ (see section `AC_LIBOBJ vs LIBOBJS']) # Actually reserved by M4sh. m4_pattern_allow([^AS_FLAGS$]) # So that the autoconf-generated scripts will always re-execute # themselves with $CONFIG_SHELL, if that's set in the environment. m4_define([_AS_FORCE_REEXEC_WITH_CONFIG_SHELL], [yes]) AS_INIT[]dnl AS_PREPARE[]dnl m4_divert_push([KILL]) m4_ifval([$2], [_AC_INIT_PACKAGE($@)]) _AC_INIT_DEFAULTS _AC_INIT_PARSE_ARGS _AC_INIT_DIRCHECK _AC_INIT_SRCDIR _AC_INIT_HELP _AC_INIT_VERSION _AC_INIT_CONFIG_LOG _AC_INIT_PREPARE _AC_INIT_NOTICE _AC_INIT_COPYRIGHT m4_divert_text([SHELL_FN], [ m4_text_box([Autoconf initialization.])]) m4_divert_pop m4_ifval([$2], , [m4_ifval([$1], [AC_CONFIG_SRCDIR([$1])])])dnl dnl dnl Substitute for predefined variables. AC_SUBST([DEFS])dnl AC_SUBST([ECHO_C])dnl AC_SUBST([ECHO_N])dnl AC_SUBST([ECHO_T])dnl AC_SUBST([LIBS])dnl _AC_ARG_VAR_PRECIOUS([build_alias])AC_SUBST([build_alias])dnl _AC_ARG_VAR_PRECIOUS([host_alias])AC_SUBST([host_alias])dnl _AC_ARG_VAR_PRECIOUS([target_alias])AC_SUBST([target_alias])dnl dnl AC_LANG_PUSH(C) ]) ## ------------------------------------------------------------- ## ## Selecting optional features, working with optional software. ## ## ------------------------------------------------------------- ## # AC_PRESERVE_HELP_ORDER # ---------------------- # Emit help strings in the order given, rather than grouping all --enable-FOO # and all --with-BAR. AC_DEFUN([AC_PRESERVE_HELP_ORDER], [m4_divert_once([HELP_ENABLE], [[ Optional Features and Packages: --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] --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no)]]) m4_define([_m4_divert(HELP_ENABLE)], _m4_divert(HELP_WITH)) ])# AC_PRESERVE_HELP_ORDER # _AC_ENABLE_IF(OPTION, FEATURE, [ACTION-IF-TRUE], [ACTION-IF-FALSE]) # ------------------------------------------------------------------- # Common code for AC_ARG_ENABLE and AC_ARG_WITH. # OPTION is either "enable" or "with". # m4_define([_AC_ENABLE_IF], [@%:@ Check whether --$1-$2 was given. _AC_ENABLE_IF_ACTION([$1], m4_translit([$2], [-+.], [___]), [$3], [$4]) ]) m4_define([_AC_ENABLE_IF_ACTION], [m4_append_uniq([_AC_USER_OPTS], [$1_$2], [ ])dnl AS_IF([test "${$1_$2+set}" = set], [$1val=$$1_$2; $3], [$4])dnl ]) # AC_ARG_ENABLE(FEATURE, HELP-STRING, [ACTION-IF-TRUE], [ACTION-IF-FALSE]) # ------------------------------------------------------------------------ AC_DEFUN([AC_ARG_ENABLE], [AC_PROVIDE_IFELSE([AC_PRESERVE_HELP_ORDER], [], [m4_divert_once([HELP_ENABLE], [[ 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]]])])dnl m4_divert_once([HELP_ENABLE], [$2])dnl _AC_ENABLE_IF([enable], [$1], [$3], [$4])dnl ])# AC_ARG_ENABLE AU_DEFUN([AC_ENABLE], [AC_ARG_ENABLE([$1], [ --enable-$1], [$2], [$3])]) # AC_ARG_WITH(PACKAGE, HELP-STRING, ACTION-IF-TRUE, [ACTION-IF-FALSE]) # -------------------------------------------------------------------- AC_DEFUN([AC_ARG_WITH], [AC_PROVIDE_IFELSE([AC_PRESERVE_HELP_ORDER], [], [m4_divert_once([HELP_WITH], [[ Optional Packages: --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no)]])]) m4_divert_once([HELP_WITH], [$2])dnl _AC_ENABLE_IF([with], [$1], [$3], [$4])dnl ])# AC_ARG_WITH AU_DEFUN([AC_WITH], [AC_ARG_WITH([$1], [ --with-$1], [$2], [$3])]) # AC_DISABLE_OPTION_CHECKING # -------------------------- AC_DEFUN([AC_DISABLE_OPTION_CHECKING], [m4_divert_once([DEFAULTS], [enable_option_checking=no]) ])# AC_DISABLE_OPTION_CHECKING ## ----------------------------------------- ## ## Remembering variables for reconfiguring. ## ## ----------------------------------------- ## # AC_ARG_VAR(VARNAME, DOCUMENTATION) # ---------------------------------- # Register VARNAME as a precious variable, and document it in # `configure --help' (but only once). AC_DEFUN([AC_ARG_VAR], [m4_divert_once([HELP_VAR], [[ Some influential environment variables:]])dnl m4_divert_once([HELP_VAR_END], [[ Use these variables to override the choices made by `configure' or to help it to find libraries and programs with nonstandard names/locations.]])dnl m4_expand_once([m4_divert_text([HELP_VAR], [AS_HELP_STRING([$1], [$2], [ ])])], [$0($1)])dnl AC_SUBST([$1])dnl _AC_ARG_VAR_PRECIOUS([$1])dnl ])# AC_ARG_VAR # _AC_ARG_VAR_PRECIOUS(VARNAME) # ----------------------------- # Declare VARNAME is precious. m4_define([_AC_ARG_VAR_PRECIOUS], [m4_append_uniq([_AC_PRECIOUS_VARS], [$1], [ ])dnl ]) # _AC_ARG_VAR_STORE # ----------------- # We try to diagnose when precious variables have changed. To do this, # make two early snapshots (after the option processing to take # explicit variables into account) of those variables: one (ac_env_) # which represents the current run, and a second (ac_cv_env_) which, # at the first run, will be saved in the cache. As an exception to # the cache mechanism, its loading will override these variables (non # `ac_cv_env_' cache value are only set when unset). # # In subsequent runs, after having loaded the cache, compare # ac_cv_env_foo against ac_env_foo. See _AC_ARG_VAR_VALIDATE. m4_define([_AC_ARG_VAR_STORE], [m4_divert_text([PARSE_ARGS], [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])dnl ]) # _AC_ARG_VAR_VALIDATE # -------------------- # The precious variables are saved twice at the beginning of # configure. E.g., PRECIOUS is saved as `ac_env_PRECIOUS_set' and # `ac_env_PRECIOUS_value' on the one hand and `ac_cv_env_PRECIOUS_set' # and `ac_cv_env_PRECIOUS_value' on the other hand. # # Now the cache has just been loaded, so `ac_cv_env_' represents the # content of the cached values, while `ac_env_' represents that of the # current values. # # So we check that `ac_env_' and `ac_cv_env_' are consistent. If # they aren't, die. m4_define([_AC_ARG_VAR_VALIDATE], [m4_divert_text([INIT_PREPARE], [# 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,) AS_MESSAGE([error: `$ac_var' was set to `$ac_old_val' in the previous run], 2) ac_cache_corrupted=: ;; ,set) AS_MESSAGE([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 AS_MESSAGE([error: `$ac_var' has changed since the previous run:], 2) ac_cache_corrupted=: else AS_MESSAGE([warning: ignoring whitespace changes in `$ac_var' since the previous run:], 2) eval $ac_var=\$ac_old_val fi AS_MESSAGE([ former value: `$ac_old_val'], 2) AS_MESSAGE([ 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=`AS_ECHO(["$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_VAR_APPEND([ac_configure_args], [" '$ac_arg'"]) ;; esac fi done if $ac_cache_corrupted; then AS_MESSAGE([error: in `$ac_pwd':], 2) AS_MESSAGE([error: changes in the environment can compromise the build], 2) AS_ERROR([run `make distclean' and/or `rm $cache_file' and start over]) fi])dnl ])# _AC_ARG_VAR_VALIDATE ## ---------------------------- ## ## Transforming program names. ## ## ---------------------------- ## # AC_ARG_PROGRAM # -------------- # This macro is expanded only once, to avoid that `foo' ends up being # installed as `ggfoo'. AC_DEFUN_ONCE([AC_ARG_PROGRAM], [dnl Document the options. m4_divert_push([HELP_BEGIN])dnl 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 m4_divert_pop([HELP_BEGIN])dnl 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=`AS_ECHO(["$program_transform_name"]) | sed "$ac_script"` ])# AC_ARG_PROGRAM ## ------------------------- ## ## Finding auxiliary files. ## ## ------------------------- ## # AC_CONFIG_AUX_DIR(DIR) # ---------------------- # Find install-sh, config.sub, config.guess, and Cygnus configure # in directory DIR. These are auxiliary files used in configuration. # DIR can be either absolute or relative to $srcdir. AC_DEFUN([AC_CONFIG_AUX_DIR], [AC_CONFIG_AUX_DIRS($1 "$srcdir"/$1)]) # AC_CONFIG_AUX_DIR_DEFAULT # ------------------------- # The default is `$srcdir' or `$srcdir/..' or `$srcdir/../..'. # There's no need to call this macro explicitly; just AC_REQUIRE it. AC_DEFUN([AC_CONFIG_AUX_DIR_DEFAULT], [AC_CONFIG_AUX_DIRS("$srcdir" "$srcdir/.." "$srcdir/../..")]) # AC_CONFIG_AUX_DIRS(DIR ...) # --------------------------- # Internal subroutine. # Search for the configuration auxiliary files in directory list $1. # We look only for install-sh, so users of AC_PROG_INSTALL # do not automatically need to distribute the other auxiliary files. AC_DEFUN([AC_CONFIG_AUX_DIRS], [ac_aux_dir= for ac_dir in $1; do if test -f "$ac_dir/install-sh"; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/install-sh -c" break elif test -f "$ac_dir/install.sh"; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/install.sh -c" break elif test -f "$ac_dir/shtool"; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/shtool install -c" break fi done if test -z "$ac_aux_dir"; then AC_MSG_ERROR([cannot find install-sh, install.sh, or shtool in $1]) 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. ac_config_guess="$SHELL $ac_aux_dir/config.guess" # Please don't use this var. ac_config_sub="$SHELL $ac_aux_dir/config.sub" # Please don't use this var. ac_configure="$SHELL $ac_aux_dir/configure" # Please don't use this var. AC_PROVIDE([AC_CONFIG_AUX_DIR_DEFAULT])dnl ])# AC_CONFIG_AUX_DIRS ## ------------------------ ## ## Finding aclocal macros. ## ## ------------------------ ## # AC_CONFIG_MACRO_DIR(DIR) # ------------------------ # Declare directory containing additional macros for aclocal. AC_DEFUN([AC_CONFIG_MACRO_DIR], []) ## --------------------- ## ## Requiring aux files. ## ## --------------------- ## # AC_REQUIRE_AUX_FILE(FILE) # ------------------------- # This macro does nothing, it's a hook to be read with `autoconf --trace'. # It announces FILE is required in the auxdir. m4_define([AC_REQUIRE_AUX_FILE], [AS_LITERAL_WORD_IF([$1], [], [m4_fatal([$0: requires a literal argument])])]) ## ----------------------------------- ## ## Getting the canonical system type. ## ## ----------------------------------- ## # The inputs are: # configure --host=HOST --target=TARGET --build=BUILD # # The rules are: # 1. Build defaults to the current platform, as determined by config.guess. # 2. Host defaults to build. # 3. Target defaults to host. # _AC_CANONICAL_SPLIT(THING) # -------------------------- # Generate the variables THING, THING_{alias cpu vendor os}. m4_define([_AC_CANONICAL_SPLIT], [case $ac_cv_$1 in *-*-*) ;; *) AC_MSG_ERROR([invalid value of canonical $1]);; esac AC_SUBST([$1], [$ac_cv_$1])dnl ac_save_IFS=$IFS; IFS='-' set x $ac_cv_$1 shift AC_SUBST([$1_cpu], [$[1]])dnl AC_SUBST([$1_vendor], [$[2]])dnl shift; shift [# Remember, the first character of IFS is used to create $]*, # except with old shells: $1_os=$[*] IFS=$ac_save_IFS case $$1_os in *\ *) $1_os=`echo "$$1_os" | sed 's/ /-/g'`;; esac AC_SUBST([$1_os])dnl ])# _AC_CANONICAL_SPLIT # AC_CANONICAL_BUILD # ------------------ AC_DEFUN_ONCE([AC_CANONICAL_BUILD], [AC_REQUIRE([AC_CONFIG_AUX_DIR_DEFAULT])dnl AC_REQUIRE_AUX_FILE([config.sub])dnl AC_REQUIRE_AUX_FILE([config.guess])dnl m4_divert_once([HELP_CANON], [[ System types: --build=BUILD configure for building on BUILD [guessed]]])dnl # Make sure we can run config.sub. $SHELL "$ac_aux_dir/config.sub" sun4 >/dev/null 2>&1 || AC_MSG_ERROR([cannot run $SHELL $ac_aux_dir/config.sub]) AC_CACHE_CHECK([build system type], [ac_cv_build], [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 && AC_MSG_ERROR([cannot guess build type; you must specify one]) ac_cv_build=`$SHELL "$ac_aux_dir/config.sub" $ac_build_alias` || AC_MSG_ERROR([$SHELL $ac_aux_dir/config.sub $ac_build_alias failed]) ]) _AC_CANONICAL_SPLIT(build) ])# AC_CANONICAL_BUILD # AC_CANONICAL_HOST # ----------------- AC_DEFUN_ONCE([AC_CANONICAL_HOST], [AC_REQUIRE([AC_CANONICAL_BUILD])dnl m4_divert_once([HELP_CANON], [[ --host=HOST cross-compile to build programs to run on HOST [BUILD]]])dnl AC_CACHE_CHECK([host system type], [ac_cv_host], [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` || AC_MSG_ERROR([$SHELL $ac_aux_dir/config.sub $host_alias failed]) fi ]) _AC_CANONICAL_SPLIT([host]) ])# AC_CANONICAL_HOST # AC_CANONICAL_TARGET # ------------------- AC_DEFUN_ONCE([AC_CANONICAL_TARGET], [AC_REQUIRE([AC_CANONICAL_HOST])dnl AC_BEFORE([$0], [AC_ARG_PROGRAM])dnl m4_divert_once([HELP_CANON], [[ --target=TARGET configure for building compilers for TARGET [HOST]]])dnl AC_CACHE_CHECK([target system type], [ac_cv_target], [if test "x$target_alias" = x; then ac_cv_target=$ac_cv_host else ac_cv_target=`$SHELL "$ac_aux_dir/config.sub" $target_alias` || AC_MSG_ERROR([$SHELL $ac_aux_dir/config.sub $target_alias failed]) fi ]) _AC_CANONICAL_SPLIT([target]) # The aliases save the names the user supplied, while $host etc. # will get canonicalized. test -n "$target_alias" && test "$program_prefix$program_suffix$program_transform_name" = \ NONENONEs,x,x, && program_prefix=${target_alias}-[]dnl ])# AC_CANONICAL_TARGET AU_ALIAS([AC_CANONICAL_SYSTEM], [AC_CANONICAL_TARGET]) # AU::AC_VALIDATE_CACHED_SYSTEM_TUPLE([CMD]) # ------------------------------------------ # If the cache file is inconsistent with the current host, # target and build system types, execute CMD or print a default # error message. Now handled via _AC_ARG_VAR_PRECIOUS. AU_DEFUN([AC_VALIDATE_CACHED_SYSTEM_TUPLE], []) ## ---------------------- ## ## Caching test results. ## ## ---------------------- ## # AC_SITE_LOAD # ------------ # Look for site- or system-specific initialization scripts. m4_define([AC_SITE_LOAD], [# Prefer an explicitly selected file to automatically selected ones. ac_site_file1=NONE ac_site_file2=NONE if test -n "$CONFIG_SITE"; then # We do not want a PATH search for config.site. case $CONFIG_SITE in @%:@(( -*) ac_site_file1=./$CONFIG_SITE;; */*) ac_site_file1=$CONFIG_SITE;; *) ac_site_file1=./$CONFIG_SITE;; esac elif test "x$prefix" != xNONE; then ac_site_file1=$prefix/share/config.site ac_site_file2=$prefix/etc/config.site else ac_site_file1=$ac_default_prefix/share/config.site ac_site_file2=$ac_default_prefix/etc/config.site fi for ac_site_file in "$ac_site_file1" "$ac_site_file2" do test "x$ac_site_file" = xNONE && continue if test /dev/null != "$ac_site_file" && test -r "$ac_site_file"; then AC_MSG_NOTICE([loading site script $ac_site_file]) sed 's/^/| /' "$ac_site_file" >&AS_MESSAGE_LOG_FD . "$ac_site_file" \ || AC_MSG_FAILURE([failed to load site script $ac_site_file]) fi done ]) # AC_CACHE_LOAD # ------------- m4_define([AC_CACHE_LOAD], [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 AC_MSG_NOTICE([loading cache $cache_file]) case $cache_file in [[\\/]]* | ?:[[\\/]]* ) . "$cache_file";; *) . "./$cache_file";; esac fi else AC_MSG_NOTICE([creating cache $cache_file]) >$cache_file fi ])# AC_CACHE_LOAD # _AC_CACHE_DUMP # -------------- # Dump the cache to stdout. It can be in a pipe (this is a requirement). m4_define([_AC_CACHE_DUMP], [# 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_*) AC_MSG_WARN([cache variable $ac_var contains a newline]) ;; esac case $ac_var in #( _ | IFS | as_nl) ;; #( BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( *) AS_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 )dnl ])# _AC_CACHE_DUMP # AC_CACHE_SAVE # ------------- # Save the cache. # Allow a site initialization script to override cache values. m4_define([AC_CACHE_SAVE], [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 _AC_CACHE_DUMP() | sed [' /^ac_cv_env_/b end t clear :clear s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/ 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 AC_MSG_NOTICE([updating cache $cache_file]) if test ! -f "$cache_file" || test -h "$cache_file"; then cat confcache >"$cache_file" else dnl Try to update the cache file atomically even on different mount points; dnl at the same time, avoid filename limitation issues in the common case. case $cache_file in #( */* | ?:*) mv -f confcache "$cache_file"$$ && mv -f "$cache_file"$$ "$cache_file" ;; #( *) mv -f confcache "$cache_file" ;; esac fi fi else AC_MSG_NOTICE([not updating unwritable cache $cache_file]) fi fi rm -f confcache[]dnl ])# AC_CACHE_SAVE # AC_CACHE_VAL(CACHE-ID, COMMANDS-TO-SET-IT) # ------------------------------------------ # The name of shell var CACHE-ID must contain `_cv_' in order to get saved. # Should be dnl'ed. Try to catch common mistakes. m4_defun([AC_CACHE_VAL], [AS_LITERAL_WORD_IF([$1], [m4_if(m4_index(m4_quote($1), [_cv_]), [-1], [AC_DIAGNOSE([syntax], [$0($1, ...): suspicious cache-id, must contain _cv_ to be cached])])])dnl m4_if(m4_index([$2], [AC_DEFINE]), [-1], [], [AC_DIAGNOSE([syntax], [$0($1, ...): suspicious presence of an AC_DEFINE in the second argument, ]dnl [where no actions should be taken])])dnl m4_if(m4_index([$2], [AC_SUBST]), [-1], [], [AC_DIAGNOSE([syntax], [$0($1, ...): suspicious presence of an AC_SUBST in the second argument, ]dnl [where no actions should be taken])])dnl AS_VAR_SET_IF([$1], [_AS_ECHO_N([(cached) ])], [$2]) ]) # AC_CACHE_CHECK(MESSAGE, CACHE-ID, COMMANDS) # ------------------------------------------- # Do not call this macro with a dnl right behind. m4_defun([AC_CACHE_CHECK], [AC_MSG_CHECKING([$1]) AC_CACHE_VAL([$2], [$3])dnl AS_LITERAL_WORD_IF([$2], [AC_MSG_RESULT([$$2])], [AS_VAR_COPY([ac_res], [$2]) AC_MSG_RESULT([$ac_res])])dnl ]) # _AC_CACHE_CHECK_INT(MESSAGE, CACHE-ID, EXPRESSION, # [PROLOGUE = DEFAULT-INCLUDES], [IF-FAILS]) # -------------------------------------------------------------- AC_DEFUN([_AC_CACHE_CHECK_INT], [AC_CACHE_CHECK([$1], [$2], [AC_COMPUTE_INT([$2], [$3], [$4], [$5])]) ])# _AC_CACHE_CHECK_INT ## ---------------------- ## ## Defining CPP symbols. ## ## ---------------------- ## # AC_DEFINE_TRACE_LITERAL(LITERAL-CPP-SYMBOL) # ------------------------------------------- # Used by --trace to collect the list of AC_DEFINEd macros. m4_define([AC_DEFINE_TRACE_LITERAL], [m4_pattern_allow([^$1$])dnl AS_IDENTIFIER_IF([$1], [], [m4_warn([syntax], [AC_DEFINE: not an identifier: $1])])dnl ])# AC_DEFINE_TRACE_LITERAL # AC_DEFINE_TRACE(CPP-SYMBOL) # --------------------------- # This macro is a wrapper around AC_DEFINE_TRACE_LITERAL which filters # out non literal symbols. CPP-SYMBOL must not include any parameters. m4_define([AC_DEFINE_TRACE], [AS_LITERAL_WORD_IF([$1], [AC_DEFINE_TRACE_LITERAL(_m4_expand([$1]))])]) # AC_DEFINE(VARIABLE, [VALUE], [DESCRIPTION]) # ------------------------------------------- # Set VARIABLE to VALUE, verbatim, or 1. Remember the value # and if VARIABLE is affected the same VALUE, do nothing, else # die. The third argument is used by autoheader. m4_define([AC_DEFINE], [_AC_DEFINE_Q([_$0], $@)]) # _AC_DEFINE(STRING) # ------------------ # Append the pre-expanded STRING and a newline to confdefs.h, as if by # a quoted here-doc. m4_define([_AC_DEFINE], [AS_ECHO(["AS_ESCAPE([[$1]])"]) >>confdefs.h]) # AC_DEFINE_UNQUOTED(VARIABLE, [VALUE], [DESCRIPTION]) # ---------------------------------------------------- # Similar, but perform shell substitutions $ ` \ once on VALUE, as # in an unquoted here-doc. m4_define([AC_DEFINE_UNQUOTED], [_AC_DEFINE_Q([_$0], $@)]) # _AC_DEFINE_UNQUOTED(STRING) # --------------------------- # Append the pre-expanded STRING and a newline to confdefs.h, as if # with an unquoted here-doc, but avoiding a fork in the common case of # no backslash, no command substitution, no complex variable # substitution, and no quadrigraphs. m4_define([_AC_DEFINE_UNQUOTED], [m4_if(m4_bregexp([$1], [\\\|`\|\$(\|\${\|@]), [-1], [AS_ECHO(["AS_ESCAPE([$1], [""])"]) >>confdefs.h], [cat >>confdefs.h <<_ACEOF [$1] _ACEOF])]) # _AC_DEFINE_Q(MACRO, VARIABLE, [VALUE], [DESCRIPTION]) # ----------------------------------------------------- # Internal function that performs common elements of AC_DEFINE{,_UNQUOTED}. # MACRO must take one argument, which is the fully expanded string to # append to confdefs.h as if by a possibly-quoted here-doc. # # m4_index is roughly 5 to 8 times faster than m4_bpatsubst, so we use # m4_format rather than regex to grab prefix up to first (). AC_name # is defined with over-quotation, so that we can avoid m4_defn; this # is only safe because the name should not contain $. # # Guarantee a match in m4_index, so as to avoid a bug with precision # -1 in m4_format in older m4. m4_define([_AC_DEFINE_Q], [m4_pushdef([AC_name], m4_format([[[%.*s]]], m4_index([$2(], [(]), [$2]))]dnl [AC_DEFINE_TRACE(AC_name)]dnl [m4_cond([m4_index([$3], [ ])], [-1], [], [m4_bregexp([[$3]], [[^\\] ], [-])], [], [], [m4_warn([syntax], [AC_DEFINE]m4_if([$1], [_AC_DEFINE], [], [[_UNQUOTED]])[: `$3' is not a valid preprocessor define value])])]dnl [m4_ifval([$4], [AH_TEMPLATE(AC_name, [$4]) ])_m4_popdef([AC_name])]dnl [$1(m4_expand([[@%:@define] $2 ]m4_if([$#], 2, 1, [$3], [], [/**/], [[$3]]))) ]) ## -------------------------- ## ## Setting output variables. ## ## -------------------------- ## # AC_SUBST_TRACE(VARIABLE) # ------------------------ # This macro is used with --trace to collect the list of substituted variables. m4_define([AC_SUBST_TRACE]) # AC_SUBST(VARIABLE, [VALUE]) # --------------------------- # Create an output variable from a shell VARIABLE. If VALUE is given # assign it to VARIABLE. Use `""' if you want to set VARIABLE to an # empty value, not an empty second argument. # m4_define([AC_SUBST], [AS_IDENTIFIER_IF([$1], [], [m4_fatal([$0: `$1' is not a valid shell variable name])])]dnl [AC_SUBST_TRACE([$1])]dnl [m4_pattern_allow([^$1$])]dnl [m4_ifvaln([$2], [$1=$2])[]]dnl [m4_set_add([_AC_SUBST_VARS], [$1])])# AC_SUBST # AC_SUBST_FILE(VARIABLE) # ----------------------- # Read the comments of the preceding macro. m4_define([AC_SUBST_FILE], [m4_pattern_allow([^$1$])dnl m4_append_uniq([_AC_SUBST_FILES], [$1], [ ])]) ## --------------------------------------- ## ## Printing messages at autoconf runtime. ## ## --------------------------------------- ## # In fact, I think we should promote the use of m4_warn and m4_fatal # directly. This will also avoid to some people to get it wrong # between AC_FATAL and AC_MSG_ERROR. # AC_DIAGNOSE(CATEGORY, MESSAGE) # AC_FATAL(MESSAGE, [EXIT-STATUS]) # -------------------------------- m4_define([AC_DIAGNOSE], [m4_warn($@)]) m4_define([AC_FATAL], [m4_fatal($@)]) # AC_WARNING(MESSAGE) # ------------------- # Report a MESSAGE to the user of autoconf if `-W' or `-W all' was # specified. m4_define([AC_WARNING], [AC_DIAGNOSE([syntax], [$1])]) ## ---------------------------------------- ## ## Printing messages at configure runtime. ## ## ---------------------------------------- ## # AC_MSG_CHECKING(FEATURE) # ------------------------ m4_define([AC_MSG_CHECKING], [{ _AS_ECHO_LOG([checking $1]) _AS_ECHO_N([checking $1... ]); }dnl ]) # AC_MSG_RESULT(RESULT) # --------------------- m4_define([AC_MSG_RESULT], [{ _AS_ECHO_LOG([result: $1]) _AS_ECHO([$1]); }dnl ]) # AC_MSG_WARN(PROBLEM) # AC_MSG_NOTICE(STRING) # AC_MSG_ERROR(ERROR, [EXIT-STATUS = 1]) # AC_MSG_FAILURE(ERROR, [EXIT-STATUS = 1]) # ---------------------------------------- m4_copy([AS_WARN], [AC_MSG_WARN]) m4_copy([AS_MESSAGE], [AC_MSG_NOTICE]) m4_copy([AS_ERROR], [AC_MSG_ERROR]) m4_define([AC_MSG_FAILURE], [{ AS_MESSAGE([error: in `$ac_pwd':], 2) AC_MSG_ERROR([$1 See `config.log' for more details], [$2]); }]) # _AC_MSG_LOG_CONFTEST # -------------------- m4_define([_AC_MSG_LOG_CONFTEST], [AS_ECHO(["$as_me: failed program was:"]) >&AS_MESSAGE_LOG_FD sed 's/^/| /' conftest.$ac_ext >&AS_MESSAGE_LOG_FD ]) # AU::AC_CHECKING(FEATURE) # ------------------------ AU_DEFUN([AC_CHECKING], [AS_MESSAGE([checking $1...])]) # AU::AC_MSG_RESULT_UNQUOTED(RESULT) # ---------------------------------- # No escaping, so it performed also backtick substitution. AU_DEFUN([AC_MSG_RESULT_UNQUOTED], [_AS_ECHO_UNQUOTED([$as_me:${as_lineno-$LINENO}: result: $1], AS_MESSAGE_LOG_FD) _AS_ECHO_UNQUOTED([$1])[]dnl ]) # AU::AC_VERBOSE(STRING) # ---------------------- AU_ALIAS([AC_VERBOSE], [AC_MSG_RESULT]) ## ---------------------------- ## ## Compiler-running mechanics. ## ## ---------------------------- ## # _AC_RUN_LOG(COMMAND, LOG-COMMANDS) # ---------------------------------- # Eval COMMAND, save the exit status in ac_status, and log it. The return # code is 0 if COMMAND succeeded, so that it can be used directly in AS_IF # constructs. AC_DEFUN([_AC_RUN_LOG], [{ { $2; } >&AS_MESSAGE_LOG_FD ($1) 2>&AS_MESSAGE_LOG_FD ac_status=$? _AS_ECHO_LOG([\$? = $ac_status]) test $ac_status = 0; }]) # _AC_RUN_LOG_STDERR(COMMAND, LOG-COMMANDS) # ----------------------------------------- # Run COMMAND, save its stderr into conftest.err, save the exit status # in ac_status, and log it. Don't forget to clean up conftest.err after # use. # Note that when tracing, most shells will leave the traces in stderr # starting with "+": that's what this macro tries to address. # The return code is 0 if COMMAND succeeded, so that it can be used directly # in AS_IF constructs. AC_DEFUN([_AC_RUN_LOG_STDERR], [{ { $2; } >&AS_MESSAGE_LOG_FD ($1) 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&AS_MESSAGE_LOG_FD mv -f conftest.er1 conftest.err fi _AS_ECHO_LOG([\$? = $ac_status]) test $ac_status = 0; }]) # _AC_RUN_LOG_LIMIT(COMMAND, LOG-COMMANDS, [LINES]) # ------------------------------------------------- # Like _AC_RUN_LOG, but only log LINES lines from stderr, # defaulting to 10 lines. AC_DEFUN([_AC_RUN_LOG_LIMIT], [{ { $2; } >&AS_MESSAGE_LOG_FD ($1) 2>conftest.err ac_status=$? if test -s conftest.err; then sed 'm4_default([$3], [10])a\ ... rest of stderr output deleted ... m4_default([$3], [10])q' conftest.err >conftest.er1 cat conftest.er1 >&AS_MESSAGE_LOG_FD fi rm -f conftest.er1 conftest.err _AS_ECHO_LOG([\$? = $ac_status]) test $ac_status = 0; }]) # _AC_DO_ECHO(COMMAND) # -------------------- # Echo COMMAND. This is designed to be used just before evaluating COMMAND. AC_DEFUN([_AC_DO_ECHO], [m4_if([$1], [$ac_try], [], [ac_try="$1" ])]dnl dnl If the string contains '\"', '`', or '\\', then just echo it rather dnl than expanding it. This is a hack, but it is safer, while also dnl typically expanding simple substrings like '$CC', which is what we want. dnl dnl Much of this macro body is quoted, to work around misuses like dnl `AC_CHECK_FUNC(sigblock, , AC_CHECK_LIB(bsd, sigblock))', dnl which underquotes the 3rd arg and would misbehave if we didn't quote here. dnl The "(($ac_try" instead of $ac_try avoids problems with even-worse dnl underquoting misuses, such as dnl `AC_CHECK_FUNC(foo, , AC_CHECK_LIB(a, foo, , AC_CHECK_LIB(b, foo)))'. dnl We normally wouldn't bother with this kind of workaround for invalid code dnl but this change was put in just before Autoconf 2.60 and we wanted to dnl minimize the integration hassle. [[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\""] AS_ECHO(["$ac_try_echo"])]) # _AC_DO(COMMAND) # --------------- # Eval COMMAND, save the exit status in ac_status, and log it. # For internal use only. AC_DEFUN([_AC_DO], [_AC_RUN_LOG([eval "$1"], [_AC_DO_ECHO([$1])])]) # _AC_DO_STDERR(COMMAND) # ---------------------- # Like _AC_RUN_LOG_STDERR, but eval (instead of running) COMMAND. AC_DEFUN([_AC_DO_STDERR], [_AC_RUN_LOG_STDERR([eval "$1"], [_AC_DO_ECHO([$1])])]) # _AC_DO_VAR(VARIABLE) # -------------------- # Evaluate "$VARIABLE", which should be a valid shell command. # The purpose of this macro is to write "configure:123: command line" # into config.log for every test run. AC_DEFUN([_AC_DO_VAR], [_AC_DO([$$1])]) # _AC_DO_TOKENS(COMMAND) # ---------------------- # Like _AC_DO_VAR, but execute COMMAND instead, where COMMAND is a series of # tokens of the shell command language. AC_DEFUN([_AC_DO_TOKENS], [{ ac_try='$1' _AC_DO([$ac_try]); }]) # _AC_DO_LIMIT(COMMAND, [LINES]) # ------------------------------ # Like _AC_DO, but limit the amount of stderr lines logged to LINES. # For internal use only. AC_DEFUN([_AC_DO_LIMIT], [_AC_RUN_LOG_LIMIT([eval "$1"], [_AC_DO_ECHO([$1])], [$2])]) # _AC_EVAL(COMMAND) # ----------------- # Eval COMMAND, save the exit status in ac_status, and log it. # Unlike _AC_DO, this macro mishandles quoted arguments in some cases. # It is present only for backward compatibility with previous Autoconf versions. AC_DEFUN([_AC_EVAL], [_AC_RUN_LOG([eval $1], [eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$1\""])]) # _AC_EVAL_STDERR(COMMAND) # ------------------------ # Like _AC_RUN_LOG_STDERR, but eval (instead of running) COMMAND. # Unlike _AC_DO_STDERR, this macro mishandles quoted arguments in some cases. # It is present only for backward compatibility with previous Autoconf versions. AC_DEFUN([_AC_EVAL_STDERR], [_AC_RUN_LOG_STDERR([eval $1], [eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$1\""])]) # AC_TRY_EVAL(VARIABLE) # --------------------- # Evaluate $VARIABLE, which should be a valid shell command. # The purpose of this macro is to write "configure:123: command line" # into config.log for every test run. # # The AC_TRY_EVAL and AC_TRY_COMMAND macros are dangerous and # undocumented, and should not be used. # They may be removed or their API changed in a future release. # Autoconf itself no longer uses these two macros; they are present # only for backward compatibility with previous versions of Autoconf. # Not every shell command will work due to problems with eval # and quoting, and the rules for exactly what does work are tricky. # Worse, due to double-expansion during evaluation, arbitrary unintended # shell commands could be executed in some situations. AC_DEFUN([AC_TRY_EVAL], [_AC_EVAL([$$1])]) # AC_TRY_COMMAND(COMMAND) # ----------------------- # Like AC_TRY_EVAL, but execute COMMAND instead, where COMMAND is a series of # tokens of the shell command language. # This macro should not be used; see the comments under AC_TRY_EVAL for why. AC_DEFUN([AC_TRY_COMMAND], [{ ac_try='$1' _AC_EVAL([$ac_try]); }]) # AC_RUN_LOG(COMMAND) # ------------------- AC_DEFUN([AC_RUN_LOG], [_AC_RUN_LOG([$1], [AS_ECHO(["$as_me:${as_lineno-$LINENO}: AS_ESCAPE([$1])"])])]) ## ------------------------ ## ## Examining declarations. ## ## ------------------------ ## # _AC_PREPROC_IFELSE_BODY # ----------------------- # Shell function body for _AC_PREPROC_IFELSE. m4_define([_AC_PREPROC_IFELSE_BODY], [ AS_LINENO_PUSH([$[]1]) AS_IF([_AC_DO_STDERR([$ac_cpp conftest.$ac_ext]) > conftest.i && { test -z "$ac_[]_AC_LANG_ABBREV[]_preproc_warn_flag$ac_[]_AC_LANG_ABBREV[]_werror_flag" || test ! -s conftest.err }], [ac_retval=0], [_AC_MSG_LOG_CONFTEST ac_retval=1]) AS_LINENO_POP AS_SET_STATUS([$ac_retval]) ])# _AC_PREPROC_IFELSE_BODY # _AC_PREPROC_IFELSE(PROGRAM, [ACTION-IF-TRUE], [ACTION-IF-FALSE]) # ---------------------------------------------------------------- # Try to preprocess PROGRAM. # # This macro can be used during the selection of a preprocessor. # eval is necessary to expand ac_cpp. AC_DEFUN([_AC_PREPROC_IFELSE], [AC_REQUIRE_SHELL_FN([ac_fn_]_AC_LANG_ABBREV[_try_cpp], [AS_FUNCTION_DESCRIBE([ac_fn_]_AC_LANG_ABBREV[_try_cpp], [LINENO], [Try to preprocess conftest.$ac_ext, and return whether this succeeded.])], [$0_BODY])]dnl [m4_ifvaln([$1], [AC_LANG_CONFTEST([$1])])]dnl [AS_IF([ac_fn_[]_AC_LANG_ABBREV[]_try_cpp "$LINENO"], [$2], [$3]) rm -f conftest.err conftest.i[]m4_ifval([$1], [ conftest.$ac_ext])[]dnl ])# _AC_PREPROC_IFELSE # AC_PREPROC_IFELSE(PROGRAM, [ACTION-IF-TRUE], [ACTION-IF-FALSE]) # --------------------------------------------------------------- # Try to preprocess PROGRAM. Requires that the preprocessor for the # current language was checked for, hence do not use this macro in macros # looking for a preprocessor. AC_DEFUN([AC_PREPROC_IFELSE], [AC_LANG_PREPROC_REQUIRE()dnl _AC_PREPROC_IFELSE($@)]) # AC_TRY_CPP(INCLUDES, [ACTION-IF-TRUE], [ACTION-IF-FALSE]) # --------------------------------------------------------- # AC_TRY_CPP is used to check whether particular header files exist. # (But it actually tests whether INCLUDES produces no CPP errors.) # # INCLUDES are not defaulted and are double quoted. AU_DEFUN([AC_TRY_CPP], [AC_PREPROC_IFELSE([AC_LANG_SOURCE([[$1]])], [$2], [$3])]) # AC_EGREP_CPP(PATTERN, PROGRAM, # [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND]) # ------------------------------------------------------ # Because this macro is used by AC_PROG_GCC_TRADITIONAL, which must # come early, it is not included in AC_BEFORE checks. AC_DEFUN([AC_EGREP_CPP], [AC_LANG_PREPROC_REQUIRE()dnl AC_REQUIRE([AC_PROG_EGREP])dnl AC_LANG_CONFTEST([AC_LANG_SOURCE([[$2]])]) AS_IF([dnl eval is necessary to expand ac_cpp. dnl Ultrix and Pyramid sh refuse to redirect output of eval, so use subshell. (eval "$ac_cpp conftest.$ac_ext") 2>&AS_MESSAGE_LOG_FD | dnl Quote $1 to prevent m4 from eating character classes $EGREP "[$1]" >/dev/null 2>&1], [$3], [$4]) rm -f conftest* ])# AC_EGREP_CPP # AC_EGREP_HEADER(PATTERN, HEADER-FILE, # [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND]) # --------------------------------------------------------- AC_DEFUN([AC_EGREP_HEADER], [AC_EGREP_CPP([$1], [#include <$2> ], [$3], [$4])]) ## ------------------ ## ## Examining syntax. ## ## ------------------ ## # _AC_COMPILE_IFELSE_BODY # ----------------------- # Shell function body for _AC_COMPILE_IFELSE. m4_define([_AC_COMPILE_IFELSE_BODY], [ AS_LINENO_PUSH([$[]1]) rm -f conftest.$ac_objext AS_IF([_AC_DO_STDERR($ac_compile) && { test -z "$ac_[]_AC_LANG_ABBREV[]_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext], [ac_retval=0], [_AC_MSG_LOG_CONFTEST ac_retval=1]) AS_LINENO_POP AS_SET_STATUS([$ac_retval]) ])# _AC_COMPILE_IFELSE_BODY # _AC_COMPILE_IFELSE(PROGRAM, [ACTION-IF-TRUE], [ACTION-IF-FALSE]) # ---------------------------------------------------------------- # Try to compile PROGRAM. # This macro can be used during the selection of a compiler. AC_DEFUN([_AC_COMPILE_IFELSE], [AC_REQUIRE_SHELL_FN([ac_fn_]_AC_LANG_ABBREV[_try_compile], [AS_FUNCTION_DESCRIBE([ac_fn_]_AC_LANG_ABBREV[_try_compile], [LINENO], [Try to compile conftest.$ac_ext, and return whether this succeeded.])], [$0_BODY])]dnl [m4_ifvaln([$1], [AC_LANG_CONFTEST([$1])])]dnl [AS_IF([ac_fn_[]_AC_LANG_ABBREV[]_try_compile "$LINENO"], [$2], [$3]) rm -f core conftest.err conftest.$ac_objext[]m4_ifval([$1], [ conftest.$ac_ext])[]dnl ])# _AC_COMPILE_IFELSE # AC_COMPILE_IFELSE(PROGRAM, [ACTION-IF-TRUE], [ACTION-IF-FALSE]) # --------------------------------------------------------------- # Try to compile PROGRAM. Requires that the compiler for the current # language was checked for, hence do not use this macro in macros looking # for a compiler. AC_DEFUN([AC_COMPILE_IFELSE], [AC_LANG_COMPILER_REQUIRE()dnl _AC_COMPILE_IFELSE($@)]) # AC_TRY_COMPILE(INCLUDES, FUNCTION-BODY, # [ACTION-IF-TRUE], [ACTION-IF-FALSE]) # --------------------------------------------------- AU_DEFUN([AC_TRY_COMPILE], [AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[$1]], [[$2]])], [$3], [$4])]) ## --------------------- ## ## Examining libraries. ## ## --------------------- ## # _AC_LINK_IFELSE_BODY # -------------------- # Shell function body for _AC_LINK_IFELSE. m4_define([_AC_LINK_IFELSE_BODY], [ AS_LINENO_PUSH([$[]1]) rm -f conftest.$ac_objext conftest$ac_exeext AS_IF([_AC_DO_STDERR($ac_link) && { test -z "$ac_[]_AC_LANG_ABBREV[]_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && { test "$cross_compiling" = yes || AS_TEST_X([conftest$ac_exeext]) }], [ac_retval=0], [_AC_MSG_LOG_CONFTEST ac_retval=1]) # 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 AS_LINENO_POP AS_SET_STATUS([$ac_retval]) ])# _AC_LINK_IFELSE_BODY # _AC_LINK_IFELSE(PROGRAM, [ACTION-IF-TRUE], [ACTION-IF-FALSE]) # ------------------------------------------------------------- # Try to link PROGRAM. # This macro can be used during the selection of a compiler. # # Test that resulting file is executable; see the problem reported by mwoehlke # in <http://lists.gnu.org/archive/html/bug-coreutils/2006-10/msg00048.html>. # But skip the test when cross-compiling, to prevent problems like the one # reported by Chris Johns in # <http://lists.gnu.org/archive/html/autoconf/2007-03/msg00085.html>. # AC_DEFUN([_AC_LINK_IFELSE], [AC_REQUIRE_SHELL_FN([ac_fn_]_AC_LANG_ABBREV[_try_link], [AS_FUNCTION_DESCRIBE([ac_fn_]_AC_LANG_ABBREV[_try_link], [LINENO], [Try to link conftest.$ac_ext, and return whether this succeeded.])], [$0_BODY])]dnl [m4_ifvaln([$1], [AC_LANG_CONFTEST([$1])])]dnl [AS_IF([ac_fn_[]_AC_LANG_ABBREV[]_try_link "$LINENO"], [$2], [$3]) rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext[]m4_ifval([$1], [ conftest.$ac_ext])[]dnl ])# _AC_LINK_IFELSE # AC_LINK_IFELSE(PROGRAM, [ACTION-IF-TRUE], [ACTION-IF-FALSE]) # ------------------------------------------------------------ # Try to link PROGRAM. Requires that the compiler for the current # language was checked for, hence do not use this macro in macros looking # for a compiler. AC_DEFUN([AC_LINK_IFELSE], [AC_LANG_COMPILER_REQUIRE()dnl _AC_LINK_IFELSE($@)]) # AC_TRY_LINK(INCLUDES, FUNCTION-BODY, # [ACTION-IF-TRUE], [ACTION-IF-FALSE]) # ------------------------------------------------ # Contrarily to AC_LINK_IFELSE, this macro double quote its first two args. AU_DEFUN([AC_TRY_LINK], [AC_LINK_IFELSE([AC_LANG_PROGRAM([[$1]], [[$2]])], [$3], [$4])]) # AC_COMPILE_CHECK(ECHO-TEXT, INCLUDES, FUNCTION-BODY, # ACTION-IF-TRUE, [ACTION-IF-FALSE]) # --------------------------------------------------- AU_DEFUN([AC_COMPILE_CHECK], [m4_ifvaln([$1], [AC_MSG_CHECKING([for $1])])dnl AC_LINK_IFELSE([AC_LANG_PROGRAM([[$2]], [[$3]])], [$4], [$5])]) ## ------------------------------- ## ## Checking for runtime features. ## ## ------------------------------- ## # _AC_RUN_IFELSE_BODY # ------------------- # Shell function body for _AC_RUN_IFELSE. m4_define([_AC_RUN_IFELSE_BODY], [ AS_LINENO_PUSH([$[]1]) AS_IF([_AC_DO_VAR(ac_link) && _AC_DO_TOKENS(./conftest$ac_exeext)], [ac_retval=0], [AS_ECHO(["$as_me: program exited with status $ac_status"]) >&AS_MESSAGE_LOG_FD _AC_MSG_LOG_CONFTEST ac_retval=$ac_status]) rm -rf conftest.dSYM conftest_ipa8_conftest.oo AS_LINENO_POP AS_SET_STATUS([$ac_retval]) ])# _AC_RUN_IFELSE_BODY # _AC_RUN_IFELSE(PROGRAM, [ACTION-IF-TRUE], [ACTION-IF-FALSE]) # ------------------------------------------------------------ # Compile, link, and run. # This macro can be used during the selection of a compiler. # We also remove conftest.o as if the compilation fails, some compilers # don't remove it. We remove gmon.out and bb.out, which may be # created during the run if the program is built with profiling support. AC_DEFUN([_AC_RUN_IFELSE], [AC_REQUIRE_SHELL_FN([ac_fn_]_AC_LANG_ABBREV[_try_run], [AS_FUNCTION_DESCRIBE([ac_fn_]_AC_LANG_ABBREV[_try_run], [LINENO], [Try to link conftest.$ac_ext, and return whether this succeeded. Assumes that executables *can* be run.])], [$0_BODY])]dnl [m4_ifvaln([$1], [AC_LANG_CONFTEST([$1])])]dnl [AS_IF([ac_fn_[]_AC_LANG_ABBREV[]_try_run "$LINENO"], [$2], [$3]) rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam[]m4_ifval([$1], [ conftest.$ac_ext])[]dnl ])# _AC_RUN_IFELSE # AC_RUN_IFELSE(PROGRAM, # [ACTION-IF-TRUE], [ACTION-IF-FALSE], # [ACTION-IF-CROSS-COMPILING = RUNTIME-ERROR]) # ---------------------------------------------------------- # Compile, link, and run. Requires that the compiler for the current # language was checked for, hence do not use this macro in macros looking # for a compiler. AC_DEFUN([AC_RUN_IFELSE], [AC_LANG_COMPILER_REQUIRE()dnl m4_ifval([$4], [], [AC_DIAGNOSE([cross], [$0 called without default to allow cross compiling])])dnl AS_IF([test "$cross_compiling" = yes], [m4_default([$4], [AC_MSG_FAILURE([cannot run test program while cross compiling])])], [_AC_RUN_IFELSE($@)]) ]) # AC_TRY_RUN(PROGRAM, # [ACTION-IF-TRUE], [ACTION-IF-FALSE], # [ACTION-IF-CROSS-COMPILING = RUNTIME-ERROR]) # ------------------------------------------------------- AU_DEFUN([AC_TRY_RUN], [AC_RUN_IFELSE([AC_LANG_SOURCE([[$1]])], [$2], [$3], [$4])]) ## ------------------------------------- ## ## Checking for the existence of files. ## ## ------------------------------------- ## # AC_CHECK_FILE(FILE, [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND]) # ------------------------------------------------------------- # # Check for the existence of FILE. AC_DEFUN([AC_CHECK_FILE], [AC_DIAGNOSE([cross], [cannot check for file existence when cross compiling])dnl AS_VAR_PUSHDEF([ac_File], [ac_cv_file_$1])dnl AC_CACHE_CHECK([for $1], [ac_File], [test "$cross_compiling" = yes && AC_MSG_ERROR([cannot check for file existence when cross compiling]) if test -r "$1"; then AS_VAR_SET([ac_File], [yes]) else AS_VAR_SET([ac_File], [no]) fi]) AS_VAR_IF([ac_File], [yes], [$2], [$3]) AS_VAR_POPDEF([ac_File])dnl ])# AC_CHECK_FILE # _AC_CHECK_FILES(FILE) # --------------------- # Helper to AC_CHECK_FILES, which generates two of the three arguments # to AC_CHECK_FILE based on FILE. m4_define([_AC_CHECK_FILES], [[$1], [AC_DEFINE_UNQUOTED(AS_TR_CPP([HAVE_$1]), [1], [Define to 1 if you have the file `$1'.])]]) # AC_CHECK_FILES(FILE..., [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND]) # ----------------------------------------------------------------- # For each word in the whitespace-separated FILE list, perform either # ACTION-IF-FOUND or ACTION-IF-NOT-FOUND. For files that exist, also # provide the preprocessor variable HAVE_FILE. AC_DEFUN([AC_CHECK_FILES], [m4_map_args_w([$1], [AC_CHECK_FILE(_$0(], [)[$2], [$3])])]) ## ------------------------------- ## ## Checking for declared symbols. ## ## ------------------------------- ## # _AC_CHECK_DECL_BODY # ------------------- # Shell function body for AC_CHECK_DECL. m4_define([_AC_CHECK_DECL_BODY], [ AS_LINENO_PUSH([$[]1]) [as_decl_name=`echo $][2|sed 's/ *(.*//'`] [as_decl_use=`echo $][2|sed -e 's/(/((/' -e 's/)/) 0&/' -e 's/,/) 0& (/g'`] AC_CACHE_CHECK([whether $as_decl_name is declared], [$[]3], [AC_COMPILE_IFELSE([AC_LANG_PROGRAM([$[]4], [@%:@ifndef $[]as_decl_name @%:@ifdef __cplusplus (void) $[]as_decl_use; @%:@else (void) $[]as_decl_name; @%:@endif @%:@endif ])], [AS_VAR_SET([$[]3], [yes])], [AS_VAR_SET([$[]3], [no])])]) AS_LINENO_POP ])# _AC_CHECK_DECL_BODY # AC_CHECK_DECL(SYMBOL, # [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND], # [INCLUDES = DEFAULT-INCLUDES]) # ------------------------------------------------------- # Check whether SYMBOL (a function, variable, or constant) is declared. AC_DEFUN([AC_CHECK_DECL], [AC_REQUIRE_SHELL_FN([ac_fn_]_AC_LANG_ABBREV[_check_decl], [AS_FUNCTION_DESCRIBE([ac_fn_]_AC_LANG_ABBREV[_check_decl], [LINENO SYMBOL VAR INCLUDES], [Tests whether SYMBOL is declared in INCLUDES, setting cache variable VAR accordingly.])], [_$0_BODY])]dnl [AS_VAR_PUSHDEF([ac_Symbol], [ac_cv_have_decl_$1])]dnl [ac_fn_[]_AC_LANG_ABBREV[]_check_decl ]dnl ["$LINENO" "$1" "ac_Symbol" "AS_ESCAPE([AC_INCLUDES_DEFAULT([$4])], [""])" AS_VAR_IF([ac_Symbol], [yes], [$2], [$3]) AS_VAR_POPDEF([ac_Symbol])dnl ])# AC_CHECK_DECL # _AC_CHECK_DECLS(SYMBOL, ACTION-IF_FOUND, ACTION-IF-NOT-FOUND, # INCLUDES) # ------------------------------------------------------------- # Helper to AC_CHECK_DECLS, which generates the check for a single # SYMBOL with INCLUDES, performs the AC_DEFINE, then expands # ACTION-IF-FOUND or ACTION-IF-NOT-FOUND. m4_define([_AC_CHECK_DECLS], [AC_CHECK_DECL([$1], [ac_have_decl=1], [ac_have_decl=0], [$4])]dnl [AC_DEFINE_UNQUOTED(AS_TR_CPP(m4_bpatsubst(HAVE_DECL_[$1],[ *(.*])), [$ac_have_decl], [Define to 1 if you have the declaration of `$1', and to 0 if you don't.])]dnl [m4_ifvaln([$2$3], [AS_IF([test $ac_have_decl = 1], [$2], [$3])])]) # AC_CHECK_DECLS(SYMBOLS, # [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND], # [INCLUDES = DEFAULT-INCLUDES]) # -------------------------------------------------------- # Defines HAVE_DECL_SYMBOL to 1 if declared, 0 otherwise. See the # documentation for a detailed explanation of this difference with # other AC_CHECK_*S macros. SYMBOLS is an m4 list. AC_DEFUN([AC_CHECK_DECLS], [m4_map_args_sep([_$0(], [, [$2], [$3], [$4])], [], $1)]) # _AC_CHECK_DECL_ONCE(SYMBOL) # --------------------------- # Check for a single SYMBOL once. m4_define([_AC_CHECK_DECL_ONCE], [AC_DEFUN([_AC_Check_Decl_$1], [_AC_CHECK_DECLS([$1])])]dnl [AC_REQUIRE([_AC_Check_Decl_$1])]) # AC_CHECK_DECLS_ONCE(SYMBOLS) # ---------------------------- # Like AC_CHECK_DECLS(SYMBOLS), but do it at most once. AC_DEFUN([AC_CHECK_DECLS_ONCE], [m4_map_args_sep([_AC_CHECK_DECL_ONCE(], [)], [], $1)]) ## ---------------------------------- ## ## Replacement of library functions. ## ## ---------------------------------- ## # AC_CONFIG_LIBOBJ_DIR(DIRNAME) # ----------------------------- # Announce LIBOBJ replacement files are in $top_srcdir/DIRNAME. AC_DEFUN_ONCE([AC_CONFIG_LIBOBJ_DIR], [m4_divert_text([DEFAULTS], [ac_config_libobj_dir=$1])]) # AC_LIBSOURCE(FILE-NAME) # ----------------------- # Announce we might need the file `FILE-NAME'. m4_define([AC_LIBSOURCE], []) # AC_LIBSOURCES([FILE-NAME1, ...]) # -------------------------------- # Announce we might need these files. AC_DEFUN([AC_LIBSOURCES], [m4_map_args([AC_LIBSOURCE], $1)]) # _AC_LIBOBJ(FILE-NAME-NOEXT, ACTION-IF-INDIR) # -------------------------------------------- # We need `FILE-NAME-NOEXT.o', save this into `LIBOBJS'. m4_define([_AC_LIBOBJ], [case " $LIB@&t@OBJS " in *" $1.$ac_objext "* ) ;; *) AC_SUBST([LIB@&t@OBJS], ["$LIB@&t@OBJS $1.$ac_objext"]) ;; esac ]) # AC_LIBOBJ(FILE-NAME-NOEXT) # -------------------------- # We need `FILE-NAME-NOEXT.o', save this into `LIBOBJS'. AC_DEFUN([AC_LIBOBJ], [_AC_LIBOBJ([$1])]dnl [AS_LITERAL_WORD_IF([$1], [AC_LIBSOURCE([$1.c])], [AC_DIAGNOSE([syntax], [$0($1): you should use literals])])]) # _AC_LIBOBJS_NORMALIZE # --------------------- # Clean up LIBOBJS and LTLIBOBJS so that they work with 1. ac_objext, # 2. Automake's ANSI2KNR, 3. Libtool, 4. combination of the three. # Used with AC_CONFIG_COMMANDS_PRE. AC_DEFUN([_AC_LIBOBJS_NORMALIZE], [ac_libobjs= ac_ltlibobjs= m4_ifndef([AM_C_PROTOTYPES], [U= ])dnl for ac_i in : $LIB@&t@OBJS; 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=`AS_ECHO(["$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_VAR_APPEND([ac_libobjs], [" \${LIBOBJDIR}$ac_i\$U.$ac_objext"]) AS_VAR_APPEND([ac_ltlibobjs], [" \${LIBOBJDIR}$ac_i"'$U.lo']) done AC_SUBST([LIB@&t@OBJS], [$ac_libobjs]) AC_SUBST([LTLIBOBJS], [$ac_ltlibobjs]) ]) ## ----------------------------------- ## ## Checking compiler characteristics. ## ## ----------------------------------- ## # _AC_COMPUTE_INT_COMPILE(EXPRESSION, VARIABLE, PROLOGUE, [IF-SUCCESS], # [IF-FAILURE]) # --------------------------------------------------------------------- # Compute the integer EXPRESSION and store the result in the VARIABLE. # Works OK if cross compiling, but assumes twos-complement arithmetic. m4_define([_AC_COMPUTE_INT_COMPILE], [# Depending upon the size, compute the lo and hi bounds. _AC_COMPILE_IFELSE([AC_LANG_BOOL_COMPILE_TRY([$3], [($1) >= 0])], [ac_lo=0 ac_mid=0 while :; do _AC_COMPILE_IFELSE([AC_LANG_BOOL_COMPILE_TRY([$3], [($1) <= $ac_mid])], [ac_hi=$ac_mid; break], [AS_VAR_ARITH([ac_lo], [$ac_mid + 1]) if test $ac_lo -le $ac_mid; then ac_lo= ac_hi= break fi AS_VAR_ARITH([ac_mid], [2 '*' $ac_mid + 1])]) done], [AC_COMPILE_IFELSE([AC_LANG_BOOL_COMPILE_TRY([$3], [($1) < 0])], [ac_hi=-1 ac_mid=-1 while :; do _AC_COMPILE_IFELSE([AC_LANG_BOOL_COMPILE_TRY([$3], [($1) >= $ac_mid])], [ac_lo=$ac_mid; break], [AS_VAR_ARITH([ac_hi], ['(' $ac_mid ')' - 1]) if test $ac_mid -le $ac_hi; then ac_lo= ac_hi= break fi AS_VAR_ARITH([ac_mid], [2 '*' $ac_mid])]) done], [ac_lo= ac_hi=])]) # Binary search between lo and hi bounds. while test "x$ac_lo" != "x$ac_hi"; do AS_VAR_ARITH([ac_mid], ['(' $ac_hi - $ac_lo ')' / 2 + $ac_lo]) _AC_COMPILE_IFELSE([AC_LANG_BOOL_COMPILE_TRY([$3], [($1) <= $ac_mid])], [ac_hi=$ac_mid], [AS_VAR_ARITH([ac_lo], ['(' $ac_mid ')' + 1])]) done case $ac_lo in @%:@(( ?*) AS_VAR_SET([$2], [$ac_lo]); $4 ;; '') $5 ;; esac[]dnl ])# _AC_COMPUTE_INT_COMPILE # _AC_COMPUTE_INT_RUN(EXPRESSION, VARIABLE, PROLOGUE, [IF-SUCCESS], # [IF-FAILURE]) # ----------------------------------------------------------------- # Store the evaluation of the integer EXPRESSION in VARIABLE. # # AC_LANG_INT_SAVE intentionally does not end the file in a newline, so # we must add one to make it a text file before passing it to read. m4_define([_AC_COMPUTE_INT_RUN], [_AC_RUN_IFELSE([AC_LANG_INT_SAVE([$3], [$1])], [echo >>conftest.val; read $2 <conftest.val; $4], [$5]) rm -f conftest.val ])# _AC_COMPUTE_INT_RUN # _AC_COMPUTE_INT_BODY # -------------------- # Shell function body for AC_COMPUTE_INT. m4_define([_AC_COMPUTE_INT_BODY], [ AS_LINENO_PUSH([$[]1]) if test "$cross_compiling" = yes; then _AC_COMPUTE_INT_COMPILE([$[]2], [$[]3], [$[]4], [ac_retval=0], [ac_retval=1]) else _AC_COMPUTE_INT_RUN([$[]2], [$[]3], [$[]4], [ac_retval=0], [ac_retval=1]) fi AS_LINENO_POP AS_SET_STATUS([$ac_retval]) ])# _AC_COMPUTE_INT_BODY # AC_COMPUTE_INT(VARIABLE, EXPRESSION, PROLOGUE, [IF-FAILS]) # ---------------------------------------------------------- # Store into the shell variable VARIABLE the value of the integer C expression # EXPRESSION. The value should fit in an initializer in a C variable of type # `signed long'. If no PROLOGUE are specified, the default includes are used. # IF-FAILS is evaluated if the value cannot be found (which includes the # case of cross-compilation, if EXPRESSION is not computable at compile-time. AC_DEFUN([AC_COMPUTE_INT], [AC_LANG_COMPILER_REQUIRE()]dnl [AC_REQUIRE_SHELL_FN([ac_fn_]_AC_LANG_ABBREV[_compute_int], [AS_FUNCTION_DESCRIBE([ac_fn_]_AC_LANG_ABBREV[_compute_int], [LINENO EXPR VAR INCLUDES], [Tries to find the compile-time value of EXPR in a program that includes INCLUDES, setting VAR accordingly. Returns whether the value could be computed])], [_$0_BODY])]dnl [AS_IF([ac_fn_[]_AC_LANG_ABBREV[]_compute_int "$LINENO" "$2" "$1" ]dnl ["AS_ESCAPE([$3], [""])"], [], [$4]) ])# AC_COMPUTE_INT # _AC_COMPUTE_INT(EXPRESSION, VARIABLE, PROLOGUE, [IF-FAILS]) # ----------------------------------------------------------- # FIXME: this private interface was used by several packages. # Give them time to transition to AC_COMPUTE_INT and then delete this one. AC_DEFUN([_AC_COMPUTE_INT], [AC_COMPUTE_INT([$2], [$1], [$3], [$4]) AC_DIAGNOSE([obsolete], [The macro `_AC_COMPUTE_INT' is obsolete and will be deleted in a future version or Autoconf. Hence, it is suggested that you use instead the public AC_COMPUTE_INT macro. Note that the arguments are slightly different between the two.])dnl ])# _AC_COMPUTE_INT usr/share/autoconf/autotest/general.m4 0000644 00000217621 15204050745 0014037 0 ustar 00 # This file is part of Autoconf. -*- Autoconf -*- # M4 macros used in building test suites. m4_define([_AT_COPYRIGHT_YEARS], [ Copyright (C) 2000-2012 Free Software Foundation, Inc. ]) # This file is part of Autoconf. This program is free # software; you can redistribute it and/or modify it under the # terms of the GNU General Public License as published by the # Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # Under Section 7 of GPL version 3, you are granted additional # permissions described in the Autoconf Configure Script Exception, # version 3.0, as published by the Free Software Foundation. # # You should have received a copy of the GNU General Public License # and a copy of the Autoconf Configure Script Exception along with # this program; see the files COPYINGv3 and COPYING.EXCEPTION # respectively. If not, see <http://www.gnu.org/licenses/>. # _m4_divert(DIVERSION-NAME) # -------------------------- # Convert a diversion name into its number. Otherwise, return # DIVERSION-NAME which is supposed to be an actual diversion number. # Of course it would be nicer to use m4_case here, instead of zillions # of little macros, but it then takes twice longer to run `autoconf'! # # From M4sugar: # -1. KILL # 10000. GROW # # From M4sh: # 0. BINSH # 1. HEADER-REVISION # 2. HEADER-COMMENT # 3. HEADER-COPYRIGHT # 4. M4SH-SANITIZE # 5. M4SH-INIT # 1000. BODY # # Defined below: # - DEFAULTS # Overall initialization, value of $at_groups_all. # - PARSE_ARGS_BEGIN # Setup defaults required for option processing. # - PARSE_ARGS # Option processing. After AT_INIT, user options can be entered here as # cases of a case statement. # - PARSE_ARGS_END # Finish up the option processing. # # - HELP # Start printing the help message. # - HELP_MODES # Modes help text. Additional modes can be appended as self-contained # cat'd here-docs as generated by AS_HELP_STRING. # - HELP_TUNING_BEGIN # Tuning help text. This is for Autotest-provided text. # - HELP_TUNING # Additional tuning options' help text can be appended here as # self-contained cat'd here-docs as generated by AS_HELP_STRING. # - HELP_OTHER # User help can be appended to this as self-contained cat'd here-docs. # - HELP_END # Finish up the help texts. # # - VERSION # Head of the handling of --version. # - VERSION_NOTICES # Copyright notices for --version. # - VERSION_END # Tail of the handling of --version. # # - BANNERS # Output shell initialization for the associative array of banner text. # - TESTS_BEGIN # Like DEFAULTS but run after argument processing for purposes of # optimization. Do anything else that needs to be done to prepare for # tests. Sets up verbose and log file descriptors. Sets and logs PATH. # - PREPARE_TESTS # Declares functions shared among the tests. Perform any user # initialization to be shared among all tests. # - TESTS # The core of the test suite. # # - TEST_SCRIPT # The collector for code for each test, the ``normal'' diversion, but # undiverted into other locations before final output. # # - TEST_GROUPS # Contents of each test group. The tests deliberately occur after the # end of the shell script, so that the shell need not spend time parsing # commands it will not execute. m4_define([_m4_divert(DEFAULTS)], 100) m4_define([_m4_divert(PARSE_ARGS_BEGIN)], 200) m4_define([_m4_divert(PARSE_ARGS)], 201) m4_define([_m4_divert(PARSE_ARGS_END)], 202) m4_define([_m4_divert(HELP)], 300) m4_define([_m4_divert(HELP_MODES)], 301) m4_define([_m4_divert(HELP_TUNING_BEGIN)], 302) m4_define([_m4_divert(HELP_TUNING)], 303) m4_define([_m4_divert(HELP_OTHER)], 304) m4_define([_m4_divert(HELP_END)], 305) m4_define([_m4_divert(VERSION)], 350) m4_define([_m4_divert(VERSION_NOTICES)], 351) m4_define([_m4_divert(VERSION_END)], 352) m4_define([_m4_divert(BANNERS)], 400) m4_define([_m4_divert(TESTS_BEGIN)], 401) m4_define([_m4_divert(PREPARE_TESTS)], 402) m4_define([_m4_divert(TESTS)], 403) m4_define([_m4_divert(TEST_SCRIPT)], 450) m4_define([_m4_divert(TEST_GROUPS)], 500) # AT_LINE # ------- # Return the current file sans directory, a colon, and the current # line. Be sure to return a _quoted_ file name, so if, for instance, # the user is lunatic enough to have a file named `dnl' (and I, for # one, love to be brainless and stubborn sometimes), then we return a # quoted name. # # Gee, we can't use simply # # m4_bpatsubst(__file__, [^.*/\(.*\)], [[\1]]) # # since then, since `dnl' doesn't match the pattern, it is returned # with once quotation level less, so you lose! And since GNU M4 # is one of the biggest junk in the whole universe wrt regexp, don't # even think about using `?' or `\?'. Bah, `*' will do. # Pleeeeeeeease, Gary, provide us with dirname and ERE! # # M4 recompiles the regular expression for every m4_bpatsubst, but __file__ # rarely changes. Be fast - only compute the dirname when necessary; for # autoconf alone, this shaves off several seconds in building testsuite. m4_define([_AT_LINE_file]) m4_define([_AT_LINE_base]) m4_define([AT_LINE], [m4_if(m4_defn([_AT_LINE_file]), __file__, [], [m4_do([m4_define([_AT_LINE_file], __file__)], [m4_define([_AT_LINE_base], m4_bregexp(/__file__, [/\([^/]*\)$], [[\1]]))])])dnl m4_defn([_AT_LINE_base]):__line__]) # _AT_LINE_ESCAPED # ---------------- # Same as AT_LINE, but already escaped for the shell. m4_define([_AT_LINE_ESCAPED], ["AS_ESCAPE(m4_dquote(AT_LINE))"]) # _AT_NORMALIZE_TEST_GROUP_NUMBER(SHELL-VAR) # ------------------------------------------ # Normalize SHELL-VAR so that its value has the same number of digits as # all the other test group numbers. m4_define([_AT_NORMALIZE_TEST_GROUP_NUMBER], [ eval 'while :; do case $$1 in #( '"$at_format"'*) break;; esac $1=0$$1 done' ]) # _AT_DEFINE_INIT(NAME, [DEFINITION]) # ----------------------------------- # Define macro NAME to die if invoked prior to AT_INIT, and to DEFINITION # after AT_INIT. m4_define([_AT_DEFINE_INIT], [m4_define($@)m4_pushdef([$1], [m4_fatal([$1: missing AT_INIT detected])])dnl m4_append([_AT_DEFINE_INIT_LIST], [[$1]], [,])]) # _AT_DEFINE_SETUP(NAME, [DEFINITION]) # ------------------------------------ # Define macro NAME to die if invoked outside AT_SETUP/AT_CLEANUP, and # to DEFINITION otherwise. m4_define([_AT_DEFINE_SETUP], [m4_define([$1], [m4_ifndef([AT_ingroup], [m4_fatal([$1: missing AT_SETUP detected])])$2])]) # AT_INIT([TESTSUITE-NAME]) # ------------------------- # Begin test suite. m4_define([AT_INIT], [m4_pushdef([AT_INIT], [m4_fatal([$0: invoked multiple times])])] [m4_pattern_forbid([^_?AT_])] [m4_pattern_allow([^_ATEOF$])] [m4_ifndef([AT_PACKAGE_BUGREPORT], [m4_fatal( [$1: AT_PACKAGE_BUGREPORT is missing, consider writing package.m4])])] [m4_define([AT_TESTSUITE_NAME], m4_defn([AT_PACKAGE_STRING])[ test suite]m4_ifval([$1], [m4_expand([: $1])]))] [m4_define([AT_ordinal], 0)] [m4_define([AT_banner_ordinal], 0)] [m4_define([AT_help_all], [])] [m4_map_args([_m4_popdef], _AT_DEFINE_INIT_LIST)] [m4_wrap([_AT_FINISH])] [AS_INIT[]]dnl dnl We don't use m4sh's BODY diversion, but AS_INIT sticks a banner there. dnl This trick removes that banner, since it adds nothing to autotest. [m4_cleardivert([BODY])]dnl [AS_ME_PREPARE[]]dnl [m4_divert_push([DEFAULTS])]dnl [AT_COPYRIGHT(m4_defn([_AT_COPYRIGHT_YEARS]), [ m4_copyright_condense])] [AT_COPYRIGHT( [This test suite is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it.], [m4_echo])] [AS_PREPARE SHELL=${CONFIG_SHELL-/bin/sh} # How were we run? at_cli_args="$[@]" m4_divert_push([BANNERS])dnl # Should we print banners? Yes if more than one test is run. case $at_groups in #( *$as_nl* ) at_print_banners=: ;; #( * ) at_print_banners=false ;; esac # Text for banner N, set to a single space once printed. m4_divert_pop([BANNERS])dnl back to DEFAULTS m4_divert_push([PREPARE_TESTS])dnl m4_text_box([Autotest shell functions.]) AS_FUNCTION_DESCRIBE([at_fn_banner], [NUMBER], [Output banner NUMBER, provided the testsuite is running multiple groups and this particular banner has not yet been printed.]) at_fn_banner () { $at_print_banners || return 0 eval at_banner_text=\$at_banner_text_$[1] test "x$at_banner_text" = "x " && return 0 eval "at_banner_text_$[1]=\" \"" if test -z "$at_banner_text"; then $at_first || echo else AS_ECHO(["$as_nl$at_banner_text$as_nl"]) fi } # at_fn_banner AS_FUNCTION_DESCRIBE([at_fn_check_prepare_notrace], [REASON LINE], [Perform AT_CHECK preparations for the command at LINE for an untraceable command; REASON is the reason for disabling tracing.]) at_fn_check_prepare_notrace () { $at_trace_echo "Not enabling shell tracing (command contains $[1])" AS_ECHO(["$[2]"]) >"$at_check_line_file" at_check_trace=: at_check_filter=: : >"$at_stdout"; : >"$at_stderr" } AS_FUNCTION_DESCRIBE([at_fn_check_prepare_trace], [LINE], [Perform AT_CHECK preparations for the command at LINE for a traceable command.]) at_fn_check_prepare_trace () { AS_ECHO(["$[1]"]) >"$at_check_line_file" at_check_trace=$at_traceon at_check_filter=$at_check_filter_trace : >"$at_stdout"; : >"$at_stderr" } AS_FUNCTION_DESCRIBE([at_fn_check_prepare_dynamic], [COMMAND LINE], [Decide if COMMAND at LINE is traceable at runtime, and call the appropriate preparation function.]) at_fn_check_prepare_dynamic () { case $[1] in *$as_nl*) at_fn_check_prepare_notrace 'an embedded newline' "$[2]" ;; *) at_fn_check_prepare_trace "$[2]" ;; esac } AS_FUNCTION_DESCRIBE([at_fn_filter_trace], [], [Remove the lines in the file "$at_stderr" generated by "set -x" and print them to stderr.]) at_fn_filter_trace () { mv "$at_stderr" "$at_stder1" grep '^ *+' "$at_stder1" >&2 grep -v '^ *+' "$at_stder1" >"$at_stderr" } AS_FUNCTION_DESCRIBE([at_fn_log_failure], [FILE-LIST], [Copy the files in the list on stdout with a "> " prefix, and exit the shell with a failure exit code.]) at_fn_log_failure () { for file do AS_ECHO(["$file:"]); sed 's/^/> /' "$file"; done echo 1 > "$at_status_file" exit 1 } AS_FUNCTION_DESCRIBE([at_fn_check_skip], [EXIT-CODE LINE], [Check whether EXIT-CODE is a special exit code (77 or 99), and if so exit the test group subshell with that same exit code. Use LINE in any report about test failure.]) at_fn_check_skip () { case $[1] in 99) echo 99 > "$at_status_file"; at_failed=: AS_ECHO(["$[2]: hard failure"]); exit 99;; 77) echo 77 > "$at_status_file"; exit 77;; esac } AS_FUNCTION_DESCRIBE([at_fn_check_status], [EXPECTED EXIT-CODE LINE], [Check whether EXIT-CODE is the EXPECTED exit code, and if so do nothing. Otherwise, if it is 77 or 99, exit the test group subshell with that same exit code; if it is anything else print an error message referring to LINE, and fail the test.]) at_fn_check_status () { dnl This order ensures that we don't `skip' if we are precisely checking dnl $? = 77 or $? = 99. case $[2] in $[1] ) ;; 77) echo 77 > "$at_status_file"; exit 77;; 99) echo 99 > "$at_status_file"; at_failed=: AS_ECHO(["$[3]: hard failure"]); exit 99;; *) AS_ECHO(["$[3]: exit code was $[2], expected $[1]"]) at_failed=:;; esac } AS_FUNCTION_DESCRIBE([at_fn_diff_devnull], [FILE], [Emit a diff between /dev/null and FILE. Uses "test -s" to avoid useless diff invocations.]) at_fn_diff_devnull () { test -s "$[1]" || return 0 $at_diff "$at_devnull" "$[1]" } AS_FUNCTION_DESCRIBE([at_fn_test], [NUMBER], [Parse out test NUMBER from the tail of this file.]) at_fn_test () { eval at_sed=\$at_sed$[1] sed "$at_sed" "$at_myself" > "$at_test_source" } AS_FUNCTION_DESCRIBE([at_fn_create_debugging_script], [], [Create the debugging script $at_group_dir/run which will reproduce the current test group.]) at_fn_create_debugging_script () { { echo "#! /bin/sh" && echo 'test "${ZSH_VERSION+set}" = set dnl && alias -g '\''${1+"$[@]"}'\''='\''"$[@]"'\''' && AS_ECHO(["cd '$at_dir'"]) && AS_ECHO(["exec \${CONFIG_SHELL-$SHELL} \"$at_myself\" -v -d ]dnl [$at_debug_args $at_group \${1+\"\$[@]\"}"]) && echo 'exit 1' } >"$at_group_dir/run" && chmod +x "$at_group_dir/run" } m4_text_box([End of autotest shell functions.]) m4_divert_pop([PREPARE_TESTS])dnl back to DEFAULTS # Not all shells have the 'times' builtin; the subshell is needed to make # sure we discard the 'times: not found' message from the shell. at_times_p=false (times) >/dev/null 2>&1 && at_times_p=: # CLI Arguments to pass to the debugging scripts. at_debug_args= # -e sets to true at_errexit_p=false # Shall we be verbose? ':' means no, empty means yes. at_verbose=: at_quiet= # Running several jobs in parallel, 0 means as many as test groups. at_jobs=1 at_traceon=: at_trace_echo=: at_check_filter_trace=: # Shall we keep the debug scripts? Must be `:' when the suite is # run by a debug script, so that the script doesn't remove itself. at_debug_p=false # Display help message? at_help_p=false # Display the version message? at_version_p=false # List test groups? at_list_p=false # --clean at_clean=false # Test groups to run at_groups= # Whether to rerun failed tests. at_recheck= # Whether a write failure occurred at_write_fail=0 # The directory we run the suite in. Default to . if no -C option. at_dir=`pwd` # An absolute reference to this testsuite script. dnl m4-double quote, to preserve [] [case $as_myself in [\\/]* | ?:[\\/]* ) at_myself=$as_myself ;; * ) at_myself=$at_dir/$as_myself ;; esac] # Whether -C is in effect. at_change_dir=false m4_divert_pop([DEFAULTS])dnl m4_define([_AT_FINISH], [m4_ifdef([AT_ingroup], [m4_fatal([missing AT_CLEANUP detected])])dnl m4_divert_text([DEFAULTS], [ # Whether to enable colored test results. at_color=m4_ifdef([AT_color], [AT_color], [no]) # List of the tested programs. at_tested='m4_ifdef([AT_tested], [m4_translit(m4_dquote(m4_defn([AT_tested])), [ ], m4_newline)])' # As many question marks as there are digits in the last test group number. # Used to normalize the test group numbers so that `ls' lists them in # numerical order. at_format='m4_bpatsubst(m4_defn([AT_ordinal]), [.], [?])' # Description of all the test groups. at_help_all="AS_ESCAPE(m4_dquote(m4_defn([AT_help_all])))" # List of the all the test groups. at_groups_all=`AS_ECHO(["$at_help_all"]) | sed 's/;.*//'` AS_FUNCTION_DESCRIBE([at_fn_validate_ranges], [NAME...], [Validate and normalize the test group number contained in each variable NAME. Leading zeroes are treated as decimal.]) at_fn_validate_ranges () { for at_grp do eval at_value=\$$at_grp if test $at_value -lt 1 || test $at_value -gt AT_ordinal; then AS_ECHO(["invalid test group: $at_value"]) >&2 exit 1 fi case $at_value in 0*) # We want to treat leading 0 as decimal, like expr and test, but # AS_VAR_ARITH treats it as octal if it uses $(( )). # With XSI shells, ${at_value#${at_value%%[1-9]*}} avoids the # expr fork, but it is not worth the effort to determine if the # shell supports XSI when the user can just avoid leading 0. eval $at_grp='`expr $at_value + 0`' ;; esac done }])])dnl m4_divert_push([PARSE_ARGS])dnl at_prev= for at_option do # If the previous option needs an argument, assign it. if test -n "$at_prev"; then at_option=$at_prev=$at_option at_prev= fi case $at_option in *=?*) at_optarg=`expr "X$at_option" : '[[^=]]*=\(.*\)'` ;; *) at_optarg= ;; esac # Accept the important Cygnus configure options, so we can diagnose typos. case $at_option in --help | -h ) at_help_p=: ;; --list | -l ) at_list_p=: ;; --version | -V ) at_version_p=: ;; --clean | -c ) at_clean=: ;; --color ) at_color=always ;; --color=* ) case $at_optarg in no | never | none) at_color=never ;; auto | tty | if-tty) at_color=auto ;; always | yes | force) at_color=always ;; *) at_optname=`echo " $at_option" | sed 's/^ //; s/=.*//'` AS_ERROR([unrecognized argument to $at_optname: $at_optarg]) ;; esac ;; --debug | -d ) at_debug_p=: ;; --errexit | -e ) at_debug_p=: at_errexit_p=: ;; --verbose | -v ) at_verbose=; at_quiet=: ;; --trace | -x ) at_traceon='set -x' at_trace_echo=echo at_check_filter_trace=at_fn_filter_trace ;; [[0-9] | [0-9][0-9] | [0-9][0-9][0-9] | [0-9][0-9][0-9][0-9]]) at_fn_validate_ranges at_option AS_VAR_APPEND([at_groups], ["$at_option$as_nl"]) ;; # Ranges [[0-9]- | [0-9][0-9]- | [0-9][0-9][0-9]- | [0-9][0-9][0-9][0-9]-]) at_range_start=`echo $at_option |tr -d X-` at_fn_validate_ranges at_range_start at_range=`AS_ECHO(["$at_groups_all"]) | \ sed -ne '/^'$at_range_start'$/,$p'` AS_VAR_APPEND([at_groups], ["$at_range$as_nl"]) ;; [-[0-9] | -[0-9][0-9] | -[0-9][0-9][0-9] | -[0-9][0-9][0-9][0-9]]) at_range_end=`echo $at_option |tr -d X-` at_fn_validate_ranges at_range_end at_range=`AS_ECHO(["$at_groups_all"]) | \ sed -ne '1,/^'$at_range_end'$/p'` AS_VAR_APPEND([at_groups], ["$at_range$as_nl"]) ;; [[0-9]-[0-9] | [0-9]-[0-9][0-9] | [0-9]-[0-9][0-9][0-9]] | \ [[0-9]-[0-9][0-9][0-9][0-9] | [0-9][0-9]-[0-9][0-9]] | \ [[0-9][0-9]-[0-9][0-9][0-9] | [0-9][0-9]-[0-9][0-9][0-9][0-9]] | \ [[0-9][0-9][0-9]-[0-9][0-9][0-9]] | \ [[0-9][0-9][0-9]-[0-9][0-9][0-9][0-9]] | \ [[0-9][0-9][0-9][0-9]-[0-9][0-9][0-9][0-9]] ) at_range_start=`expr $at_option : '\(.*\)-'` at_range_end=`expr $at_option : '.*-\(.*\)'` if test $at_range_start -gt $at_range_end; then at_tmp=$at_range_end at_range_end=$at_range_start at_range_start=$at_tmp fi at_fn_validate_ranges at_range_start at_range_end at_range=`AS_ECHO(["$at_groups_all"]) | \ sed -ne '/^'$at_range_start'$/,/^'$at_range_end'$/p'` AS_VAR_APPEND([at_groups], ["$at_range$as_nl"]) ;; # Directory selection. --directory | -C ) at_prev=--directory ;; --directory=* ) at_change_dir=: at_dir=$at_optarg if test x- = "x$at_dir" ; then at_dir=./- fi ;; # Parallel execution. --jobs | -j ) at_jobs=0 ;; --jobs=* | -j[[0-9]]* ) if test -n "$at_optarg"; then at_jobs=$at_optarg else at_jobs=`expr X$at_option : 'X-j\(.*\)'` fi case $at_jobs in *[[!0-9]]*) at_optname=`echo " $at_option" | sed 's/^ //; s/[[0-9=]].*//'` AS_ERROR([non-numeric argument to $at_optname: $at_jobs]) ;; esac ;; # Keywords. --keywords | -k ) at_prev=--keywords ;; --keywords=* ) at_groups_selected=$at_help_all at_save_IFS=$IFS IFS=, set X $at_optarg shift IFS=$at_save_IFS for at_keyword do at_invert= case $at_keyword in '!'*) at_invert="-v" at_keyword=`expr "X$at_keyword" : 'X!\(.*\)'` ;; esac # It is on purpose that we match the test group titles too. at_groups_selected=`AS_ECHO(["$at_groups_selected"]) | grep -i $at_invert ["^[1-9][^;]*;.*[; ]$at_keyword[ ;]"]` done # Smash the keywords. at_groups_selected=`AS_ECHO(["$at_groups_selected"]) | sed 's/;.*//'` AS_VAR_APPEND([at_groups], ["$at_groups_selected$as_nl"]) ;; --recheck) at_recheck=: ;; m4_divert_pop([PARSE_ARGS])dnl dnl Process *=* last to allow for user specified --option=* type arguments. m4_divert_push([PARSE_ARGS_END])dnl *=*) at_envvar=`expr "x$at_option" : 'x\([[^=]]*\)='` # Reject names that are not valid shell variable names. case $at_envvar in '' | [[0-9]]* | *[[!_$as_cr_alnum]]* ) AS_ERROR([invalid variable name: `$at_envvar']) ;; esac at_value=`AS_ECHO(["$at_optarg"]) | sed "s/'/'\\\\\\\\''/g"` # Export now, but save eval for later and for debug scripts. export $at_envvar AS_VAR_APPEND([at_debug_args], [" $at_envvar='$at_value'"]) ;; *) AS_ECHO(["$as_me: invalid option: $at_option"]) >&2 AS_ECHO(["Try \`$[0] --help' for more information."]) >&2 exit 1 ;; esac done # Verify our last option didn't require an argument AS_IF([test -n "$at_prev"], [AS_ERROR([`$at_prev' requires an argument])]) # The file containing the suite. at_suite_log=$at_dir/$as_me.log # Selected test groups. if test -z "$at_groups$at_recheck"; then at_groups=$at_groups_all else if test -n "$at_recheck" && test -r "$at_suite_log"; then at_oldfails=`sed -n [' /^Failed tests:$/,/^Skipped tests:$/{ s/^[ ]*\([1-9][0-9]*\):.*/\1/p } /^Unexpected passes:$/,/^## Detailed failed tests/{ s/^[ ]*\([1-9][0-9]*\):.*/\1/p } /^## Detailed failed tests/q '] "$at_suite_log"` AS_VAR_APPEND([at_groups], ["$at_oldfails$as_nl"]) fi # Sort the tests, removing duplicates. at_groups=`AS_ECHO(["$at_groups"]) | sort -nu | sed '/^$/d'` fi if test x"$at_color" = xalways \ || { test x"$at_color" = xauto && test -t 1; }; then at_red=`printf '\033@<:@0;31m'` at_grn=`printf '\033@<:@0;32m'` at_lgn=`printf '\033@<:@1;32m'` at_blu=`printf '\033@<:@1;34m'` at_std=`printf '\033@<:@m'` else at_red= at_grn= at_lgn= at_blu= at_std= fi m4_divert_pop([PARSE_ARGS_END])dnl m4_divert_push([HELP])dnl # Help message. if $at_help_p; then cat <<_ATEOF || at_write_fail=1 Usage: $[0] [[OPTION]... [VARIABLE=VALUE]... [TESTS]] Run all the tests, or the selected TESTS, given by numeric ranges, and save a detailed log file. Upon failure, create debugging scripts. Do not change environment variables directly. Instead, set them via command line arguments. Set \`AUTOTEST_PATH' to select the executables to exercise. Each relative directory is expanded as build and source directories relative to the top level of this distribution. E.g., from within the build directory /tmp/foo-1.0, invoking this: $ $[0] AUTOTEST_PATH=bin is equivalent to the following, assuming the source directory is /src/foo-1.0: PATH=/tmp/foo-1.0/bin:/src/foo-1.0/bin:\$PATH $[0] _ATEOF m4_divert_pop([HELP])dnl m4_divert_push([HELP_MODES])dnl cat <<_ATEOF || at_write_fail=1 Operation modes: -h, --help print the help message, then exit -V, --version print version number, then exit -c, --clean remove all the files this test suite might create and exit -l, --list describes all the tests, or the selected TESTS _ATEOF m4_divert_pop([HELP_MODES])dnl m4_wrap([m4_divert_push([HELP_TUNING_BEGIN])dnl cat <<_ATEOF || at_write_fail=1 dnl extra quoting prevents emacs whitespace mode from putting tabs in output Execution tuning: -C, --directory=DIR [ change to directory DIR before starting] --color[[=never|auto|always]] [ ]m4_ifdef([AT_color], [disable colored test results, or enable even without terminal], [enable colored test results on terminal, or always]) -j, --jobs[[=N]] [ Allow N jobs at once; infinite jobs with no arg (default 1)] -k, --keywords=KEYWORDS [ select the tests matching all the comma-separated KEYWORDS] [ multiple \`-k' accumulate; prefixed \`!' negates a KEYWORD] --recheck select all tests that failed or passed unexpectedly last time -e, --errexit abort as soon as a test fails; implies --debug -v, --verbose force more detailed output [ default for debugging scripts] -d, --debug inhibit clean up and top-level logging [ default for debugging scripts] -x, --trace enable tests shell tracing _ATEOF m4_divert_pop([HELP_TUNING_BEGIN])])dnl m4_divert_push([HELP_END])dnl cat <<_ATEOF || at_write_fail=1 Report bugs to <AT_PACKAGE_BUGREPORT>.dnl m4_ifdef([AT_PACKAGE_NAME], [m4_ifset([AT_PACKAGE_URL], [ m4_defn([AT_PACKAGE_NAME]) home page: <AT_PACKAGE_URL>.])dnl m4_if(m4_index(m4_defn([AT_PACKAGE_NAME]), [GNU ]), [0], [ General help using GNU software: <http://www.gnu.org/gethelp/>.])]) _ATEOF exit $at_write_fail fi # List of tests. if $at_list_p; then cat <<_ATEOF || at_write_fail=1 AT_TESTSUITE_NAME test groups: NUM: FILE-NAME:LINE TEST-GROUP-NAME KEYWORDS _ATEOF # Pass an empty line as separator between selected groups and help. AS_ECHO(["$at_groups$as_nl$as_nl$at_help_all"]) | awk 'NF == 1 && FS != ";" { selected[[$ 1]] = 1 next } /^$/ { FS = ";" } NF > 0 { if (selected[[$ 1]]) { printf " %3d: %-18s %s\n", $ 1, $ 2, $ 3 if ($ 4) { lmax = 79 indent = " " line = indent len = length (line) n = split ($ 4, a, " ") for (i = 1; i <= n; i++) { l = length (a[[i]]) + 1 if (i > 1 && len + l > lmax) { print line line = indent " " a[[i]] len = length (line) } else { line = line " " a[[i]] len += l } } if (n) print line } } }' || at_write_fail=1 exit $at_write_fail fi m4_divert_pop([HELP_END])dnl m4_divert_push([VERSION])dnl if $at_version_p; then AS_ECHO(["$as_me (AT_PACKAGE_STRING)"]) && cat <<\_ATEOF || at_write_fail=1 m4_divert_pop([VERSION])dnl m4_divert_push([VERSION_END])dnl _ATEOF exit $at_write_fail fi m4_divert_pop([VERSION_END])dnl m4_divert_push([TESTS_BEGIN])dnl # Take any -C into account. if $at_change_dir ; then test x != "x$at_dir" && cd "$at_dir" \ || AS_ERROR([unable to change directory]) at_dir=`pwd` fi # Load the config files for any default variable assignments. for at_file in atconfig atlocal do test -r $at_file || continue . ./$at_file || AS_ERROR([invalid content: $at_file]) done # Autoconf <=2.59b set at_top_builddir instead of at_top_build_prefix: : "${at_top_build_prefix=$at_top_builddir}" # Perform any assignments requested during argument parsing. eval "$at_debug_args" # atconfig delivers names relative to the directory the test suite is # in, but the groups themselves are run in testsuite-dir/group-dir. if test -n "$at_top_srcdir"; then builddir=../.. for at_dir_var in srcdir top_srcdir top_build_prefix do AS_VAR_COPY([at_val], [at_$at_dir_var]) case $at_val in [[\\/$]]* | ?:[[\\/]]* ) at_prefix= ;; *) at_prefix=../../ ;; esac AS_VAR_SET([$at_dir_var], [$at_prefix$at_val]) done fi m4_text_box([Directory structure.]) # This is the set of directories and files used by this script # (non-literals are capitalized): # # TESTSUITE - the testsuite # TESTSUITE.log - summarizes the complete testsuite run # TESTSUITE.dir/ - created during a run, remains after -d or failed test # + at-groups/ - during a run: status of all groups in run # | + NNN/ - during a run: meta-data about test group NNN # | | + check-line - location (source file and line) of current AT_CHECK # | | + status - exit status of current AT_CHECK # | | + stdout - stdout of current AT_CHECK # | | + stder1 - stderr, including trace # | | + stderr - stderr, with trace filtered out # | | + test-source - portion of testsuite that defines group # | | + times - timestamps for computing duration # | | + pass - created if group passed # | | + xpass - created if group xpassed # | | + fail - created if group failed # | | + xfail - created if group xfailed # | | + skip - created if group skipped # + at-stop - during a run: end the run if this file exists # + at-source-lines - during a run: cache of TESTSUITE line numbers for extraction # + 0..NNN/ - created for each group NNN, remains after -d or failed test # | + TESTSUITE.log - summarizes the group results # | + ... - files created during the group # The directory the whole suite works in. # Should be absolute to let the user `cd' at will. at_suite_dir=$at_dir/$as_me.dir # The file containing the suite ($at_dir might have changed since earlier). at_suite_log=$at_dir/$as_me.log # The directory containing helper files per test group. at_helper_dir=$at_suite_dir/at-groups # Stop file: if it exists, do not start new jobs. at_stop_file=$at_suite_dir/at-stop # The fifo used for the job dispatcher. at_job_fifo=$at_suite_dir/at-job-fifo if $at_clean; then test -d "$at_suite_dir" && find "$at_suite_dir" -type d ! -perm -700 -exec chmod u+rwx \{\} \; rm -f -r "$at_suite_dir" "$at_suite_log" exit $? fi # Don't take risks: use only absolute directories in PATH. # # For stand-alone test suites (ie. atconfig was not found), # AUTOTEST_PATH is relative to `.'. # # For embedded test suites, AUTOTEST_PATH is relative to the top level # of the package. Then expand it into build/src parts, since users # may create executables in both places. AUTOTEST_PATH=`AS_ECHO(["$AUTOTEST_PATH"]) | sed "s|:|$PATH_SEPARATOR|g"` at_path= _AS_PATH_WALK([$AUTOTEST_PATH $PATH], [test -n "$at_path" && AS_VAR_APPEND([at_path], [$PATH_SEPARATOR]) case $as_dir in [[\\/]]* | ?:[[\\/]]* ) AS_VAR_APPEND([at_path], ["$as_dir"]) ;; * ) if test -z "$at_top_build_prefix"; then # Stand-alone test suite. AS_VAR_APPEND([at_path], ["$as_dir"]) else # Embedded test suite. AS_VAR_APPEND([at_path], ["$at_top_build_prefix$as_dir$PATH_SEPARATOR"]) AS_VAR_APPEND([at_path], ["$at_top_srcdir/$as_dir"]) fi ;; esac]) # Now build and simplify PATH. # # There might be directories that don't exist, but don't redirect # builtins' (eg., cd) stderr directly: Ultrix's sh hates that. at_new_path= _AS_PATH_WALK([$at_path], [test -d "$as_dir" || continue case $as_dir in [[\\/]]* | ?:[[\\/]]* ) ;; * ) as_dir=`(cd "$as_dir" && pwd) 2>/dev/null` ;; esac case $PATH_SEPARATOR$at_new_path$PATH_SEPARATOR in *$PATH_SEPARATOR$as_dir$PATH_SEPARATOR*) ;; $PATH_SEPARATOR$PATH_SEPARATOR) at_new_path=$as_dir ;; *) AS_VAR_APPEND([at_new_path], ["$PATH_SEPARATOR$as_dir"]) ;; esac]) PATH=$at_new_path export PATH # Setting up the FDs. m4_define([AS_MESSAGE_LOG_FD], [5]) dnl The parent needs two fds to the same fifo, otherwise, there is a race dnl where the parent can read the fifo before a child opens it for writing m4_define([AT_JOB_FIFO_IN_FD], [6]) m4_define([AT_JOB_FIFO_OUT_FD], [7]) [#] AS_MESSAGE_LOG_FD is the log file. Not to be overwritten if `-d'. if $at_debug_p; then at_suite_log=/dev/null else : >"$at_suite_log" fi exec AS_MESSAGE_LOG_FD>>"$at_suite_log" # Banners and logs. AS_BOX(m4_defn([AT_TESTSUITE_NAME])[.]) { AS_BOX(m4_defn([AT_TESTSUITE_NAME])[.]) echo AS_ECHO(["$as_me: command line was:"]) AS_ECHO([" \$ $[0] $at_cli_args"]) echo # If ChangeLog exists, list a few lines in case it might help determining # the exact version. if test -n "$at_top_srcdir" && test -f "$at_top_srcdir/ChangeLog"; then AS_BOX([ChangeLog.]) echo sed 's/^/| /;10q' "$at_top_srcdir/ChangeLog" echo fi AS_UNAME echo # Contents of the config files. for at_file in atconfig atlocal do test -r $at_file || continue AS_ECHO(["$as_me: $at_file:"]) sed 's/^/| /' $at_file echo done } >&AS_MESSAGE_LOG_FD m4_divert_pop([TESTS_BEGIN])dnl m4_divert_push([PREPARE_TESTS])dnl { AS_BOX([Tested programs.]) echo } >&AS_MESSAGE_LOG_FD # Report what programs are being tested. for at_program in : $at_tested do test "$at_program" = : && continue case $at_program in [[\\/]* | ?:[\\/]* ) $at_program_=$at_program ;;] * ) _AS_PATH_WALK([$PATH], [test -f "$as_dir/$at_program" && break]) at_program_=$as_dir/$at_program ;; esac if test -f "$at_program_"; then { AS_ECHO(["$at_srcdir/AT_LINE: $at_program_ --version"]) "$at_program_" --version </dev/null echo } >&AS_MESSAGE_LOG_FD 2>&1 else AS_ERROR([cannot find $at_program]) fi done { AS_BOX([Running the tests.]) } >&AS_MESSAGE_LOG_FD at_start_date=`date` at_start_time=`date +%s 2>/dev/null` AS_ECHO(["$as_me: starting at: $at_start_date"]) >&AS_MESSAGE_LOG_FD m4_divert_pop([PREPARE_TESTS])dnl m4_divert_push([TESTS])dnl # Create the master directory if it doesn't already exist. AS_MKDIR_P(["$at_suite_dir"]) || AS_ERROR([cannot create `$at_suite_dir']) # Can we diff with `/dev/null'? DU 5.0 refuses. if diff /dev/null /dev/null >/dev/null 2>&1; then at_devnull=/dev/null else at_devnull=$at_suite_dir/devnull >"$at_devnull" fi # Use `diff -u' when possible. if at_diff=`diff -u "$at_devnull" "$at_devnull" 2>&1` && test -z "$at_diff" then at_diff='diff -u' else at_diff=diff fi # Get the last needed group. for at_group in : $at_groups; do :; done # Extract the start and end lines of each test group at the tail # of this file awk ' BEGIN { FS="" } /^@%:@AT_START_/ { start = NR } /^@%:@AT_STOP_/ { test = substr ($ 0, 10) print "at_sed" test "=\"1," start "d;" (NR-1) "q\"" if (test == "'"$at_group"'") exit }' "$at_myself" > "$at_suite_dir/at-source-lines" && . "$at_suite_dir/at-source-lines" || AS_ERROR([cannot create test line number cache]) rm -f "$at_suite_dir/at-source-lines" # Set number of jobs for `-j'; avoid more jobs than test groups. set X $at_groups; shift; at_max_jobs=$[@%:@] if test $at_max_jobs -eq 0; then at_jobs=1 fi if test $at_jobs -ne 1 && { test $at_jobs -eq 0 || test $at_jobs -gt $at_max_jobs; }; then at_jobs=$at_max_jobs fi # If parallel mode, don't output banners, don't split summary lines. if test $at_jobs -ne 1; then at_print_banners=false at_quiet=: fi # Set up helper dirs. rm -rf "$at_helper_dir" && mkdir "$at_helper_dir" && cd "$at_helper_dir" && { test -z "$at_groups" || mkdir $at_groups; } || AS_ERROR([testsuite directory setup failed]) # Functions for running a test group. We leave the actual # test group execution outside of a shell function in order # to avoid hitting zsh 4.x exit status bugs. AS_FUNCTION_DESCRIBE([at_fn_group_prepare], [], [Prepare for running a test group.]) at_fn_group_prepare () { # The directory for additional per-group helper files. at_job_dir=$at_helper_dir/$at_group # The file containing the location of the last AT_CHECK. at_check_line_file=$at_job_dir/check-line # The file containing the exit status of the last command. at_status_file=$at_job_dir/status # The files containing the output of the tested commands. at_stdout=$at_job_dir/stdout at_stder1=$at_job_dir/stder1 at_stderr=$at_job_dir/stderr # The file containing the code for a test group. at_test_source=$at_job_dir/test-source # The file containing dates. at_times_file=$at_job_dir/times # Be sure to come back to the top test directory. cd "$at_suite_dir" # Clearly separate the test groups when verbose. $at_first || $at_verbose echo at_group_normalized=$at_group _AT_NORMALIZE_TEST_GROUP_NUMBER(at_group_normalized) # Create a fresh directory for the next test group, and enter. # If one already exists, the user may have invoked ./run from # within that directory; we remove the contents, but not the # directory itself, so that we aren't pulling the rug out from # under the shell's notion of the current directory. at_group_dir=$at_suite_dir/$at_group_normalized at_group_log=$at_group_dir/$as_me.log _AS_CLEAN_DIR("$at_group_dir") || AS_WARN([test directory for $at_group_normalized could not be cleaned]) # Be tolerant if the above `rm' was not able to remove the directory. AS_MKDIR_P(["$at_group_dir"]) echo 0 > "$at_status_file" # In verbose mode, append to the log file *and* show on # the standard output; in quiet mode only write to the log. if test -z "$at_verbose"; then at_tee_pipe='tee -a "$at_group_log"' else at_tee_pipe='cat >> "$at_group_log"' fi } AS_FUNCTION_DESCRIBE([at_fn_group_banner], [[ORDINAL LINE DESC PAD [BANNER]]], [Declare the test group ORDINAL, located at LINE with group description DESC, and residing under BANNER. Use PAD to align the status column.]) at_fn_group_banner () { at_setup_line="$[2]" test -n "$[5]" && at_fn_banner $[5] at_desc="$[3]" case $[1] in [[0-9]]) at_desc_line=" $[1]: ";; [[0-9][0-9]]) at_desc_line=" $[1]: " ;; [*]) at_desc_line="$[1]: " ;; esac AS_VAR_APPEND([at_desc_line], ["$[3]$[4]"]) $at_quiet AS_ECHO_N(["$at_desc_line"]) echo "# -*- compilation -*-" >> "$at_group_log" } AS_FUNCTION_DESCRIBE([at_fn_group_postprocess], [], [Perform cleanup after running a test group.]) at_fn_group_postprocess () { # Be sure to come back to the suite directory, in particular # since below we might `rm' the group directory we are in currently. cd "$at_suite_dir" if test ! -f "$at_check_line_file"; then sed "s/^ */$as_me: WARNING: /" <<_ATEOF A failure happened in a test group before any test could be run. This means that test suite is improperly designed. Please report this failure to <AT_PACKAGE_BUGREPORT>. _ATEOF AS_ECHO(["$at_setup_line"]) >"$at_check_line_file" at_status=99 fi $at_verbose AS_ECHO_N(["$at_group. $at_setup_line: "]) AS_ECHO_N(["$at_group. $at_setup_line: "]) >> "$at_group_log" case $at_xfail:$at_status in yes:0) at_msg="UNEXPECTED PASS" at_res=xpass at_errexit=$at_errexit_p at_color=$at_red ;; no:0) at_msg="ok" at_res=pass at_errexit=false at_color=$at_grn ;; *:77) at_msg='skipped ('`cat "$at_check_line_file"`')' at_res=skip at_errexit=false at_color=$at_blu ;; no:* | *:99) at_msg='FAILED ('`cat "$at_check_line_file"`')' at_res=fail at_errexit=$at_errexit_p at_color=$at_red ;; yes:*) at_msg='expected failure ('`cat "$at_check_line_file"`')' at_res=xfail at_errexit=false at_color=$at_lgn ;; esac echo "$at_res" > "$at_job_dir/$at_res" # In parallel mode, output the summary line only afterwards. if test $at_jobs -ne 1 && test -n "$at_verbose"; then AS_ECHO(["$at_desc_line $at_color$at_msg$at_std"]) else # Make sure there is a separator even with long titles. AS_ECHO([" $at_color$at_msg$at_std"]) fi at_log_msg="$at_group. $at_desc ($at_setup_line): $at_msg" case $at_status in 0|77) # $at_times_file is only available if the group succeeded. # We're not including the group log, so the success message # is written in the global log separately. But we also # write to the group log in case they're using -d. if test -f "$at_times_file"; then at_log_msg="$at_log_msg ("`sed 1d "$at_times_file"`')' rm -f "$at_times_file" fi AS_ECHO(["$at_log_msg"]) >> "$at_group_log" AS_ECHO(["$at_log_msg"]) >&AS_MESSAGE_LOG_FD # Cleanup the group directory, unless the user wants the files # or the success was unexpected. if $at_debug_p || test $at_res = xpass; then at_fn_create_debugging_script if test $at_res = xpass && $at_errexit; then echo stop > "$at_stop_file" fi else if test -d "$at_group_dir"; then find "$at_group_dir" -type d ! -perm -700 -exec chmod u+rwx \{\} \; rm -fr "$at_group_dir" fi rm -f "$at_test_source" fi ;; *) # Upon failure, include the log into the testsuite's global # log. The failure message is written in the group log. It # is later included in the global log. AS_ECHO(["$at_log_msg"]) >> "$at_group_log" # Upon failure, keep the group directory for autopsy, and create # the debugging script. With -e, do not start any further tests. at_fn_create_debugging_script if $at_errexit; then echo stop > "$at_stop_file" fi ;; esac } m4_text_box([Driver loop.]) dnl Catching signals correctly: dnl dnl The first idea was: trap the signal, send it to all spawned jobs, dnl then reset the handler and reraise the signal for ourselves. dnl However, before exiting, ksh will then send the signal to all dnl process group members, potentially killing the outer testsuite dnl and/or the 'make' process driving us. dnl So now the strategy is: trap the signal, send it to all spawned jobs, dnl then exit the script with the right status. dnl dnl In order to let the jobs know about the signal, we cannot just send it dnl to the current process group (kill $SIG 0), for the same reason as above. dnl Also, it does not reliably stop the suite to send the signal to the dnl spawned processes, because they might not transport it further dnl (maybe this can be fixed?). dnl dnl So what we do is enable shell job control if available, which causes the dnl shell to start each parallel task as its own shell job, thus as a new dnl process group leader. We then send the signal to all new process groups. dnl Do we have job control? if (set -m && set +m && set +b) >/dev/null 2>&1; then set +b at_job_control_on='set -m' at_job_control_off='set +m' at_job_group=- else at_job_control_on=: at_job_control_off=: at_job_group= fi for at_signal in 1 2 15; do dnl This signal handler is not suitable for PIPE: it causes writes. dnl The code that was interrupted may have the errexit, monitor, or xtrace dnl flags enabled, so sanitize. trap 'set +x; set +e $at_job_control_off at_signal='"$at_signal"' dnl Safety belt: even with runaway processes, prevent starting new jobs. echo stop > "$at_stop_file" dnl Do not enter this area multiple times, do not kill self prematurely. trap "" $at_signal dnl Gather process group IDs of currently running jobs. at_pgids= for at_pgid in `jobs -p 2>/dev/null`; do at_pgids="$at_pgids $at_job_group$at_pgid" done dnl Ignore `kill' errors, as some jobs may have finished in the meantime. test -z "$at_pgids" || kill -$at_signal $at_pgids 2>/dev/null dnl wait until all jobs have exited. wait dnl Status output. Do this after waiting for the jobs, for ordered output. dnl Avoid scribbling onto the end of a possibly incomplete line. if test "$at_jobs" -eq 1 || test -z "$at_verbose"; then echo >&2 fi at_signame=`kill -l $at_signal 2>&1 || echo $at_signal` set x $at_signame test $# -gt 2 && at_signame=$at_signal AS_WARN([caught signal $at_signame, bailing out]) dnl Do not reinstall the default handler here and reraise the signal to dnl let the default handler do its job, see the note about ksh above. dnl trap - $at_signal dnl kill -$at_signal $$ dnl Instead, exit with appropriate status. AS_VAR_ARITH([exit_status], [128 + $at_signal]) AS_EXIT([$exit_status])' $at_signal done rm -f "$at_stop_file" at_first=: if test $at_jobs -ne 1 && rm -f "$at_job_fifo" && test -n "$at_job_group" && ( mkfifo "$at_job_fifo" && trap 'exit 1' PIPE STOP TSTP ) 2>/dev/null then # FIFO job dispatcher. dnl Since we use job control, we need to propagate TSTP. dnl This handler need not be used for serial execution. dnl Again, we should stop all processes in the job groups, otherwise dnl the stopping will not be effective while one test group is running. dnl Apparently ksh does not honor the TSTP trap. dnl As a safety measure, not use the same variable names as in the dnl termination handlers above, one might get called during execution dnl of the other. trap 'at_pids= for at_pid in `jobs -p`; do at_pids="$at_pids $at_job_group$at_pid" done dnl Send it to all spawned jobs, ignoring those finished meanwhile. if test -n "$at_pids"; then dnl Unfortunately, ksh93 fork-bombs when we send TSTP, so send STOP dnl if this might be ksh (STOP prevents possible TSTP handlers inside dnl AT_CHECKs from running). Then stop ourselves. at_sig=TSTP test "${TMOUT+set}" = set && at_sig=STOP kill -$at_sig $at_pids 2>/dev/null fi kill -STOP $$ dnl We got a CONT, so let's go again. Passing this to all processes dnl in the groups is necessary (because we stopped them), but it may dnl cause changed test semantics; e.g., a sleep will be interrupted. test -z "$at_pids" || kill -CONT $at_pids 2>/dev/null' TSTP echo # Turn jobs into a list of numbers, starting from 1. at_joblist=`AS_ECHO(["$at_groups"]) | sed -n 1,${at_jobs}p` set X $at_joblist shift for at_group in $at_groups; do dnl Enable job control only for spawning the test group: dnl Let the jobs to run in separate process groups, but dnl avoid all the status output by the shell. $at_job_control_on 2>/dev/null ( # Start one test group. $at_job_control_off dnl First child must open the fifo to avoid blocking parent; all other dnl children inherit it already opened from the parent. if $at_first; then exec AT_JOB_FIFO_OUT_FD>"$at_job_fifo" else dnl Children do not need parent's copy of fifo. exec AT_JOB_FIFO_IN_FD<&- fi dnl When a child receives PIPE, be sure to write back the token, dnl so the master does not hang waiting for it. dnl errexit and xtrace should not be set in this shell instance, dnl except as debug measures. However, shells such as dash may dnl optimize away the _AT_CHECK subshell, so normalize here. trap 'set +x; set +e dnl Ignore PIPE signals that stem from writing back the token. trap "" PIPE echo stop > "$at_stop_file" echo >&AT_JOB_FIFO_OUT_FD dnl Do not reraise the default PIPE handler. dnl It wreaks havoc with ksh, see above. dnl trap - 13 dnl kill -13 $$ AS_EXIT([141])' PIPE at_fn_group_prepare if cd "$at_group_dir" && at_fn_test $at_group && . "$at_test_source" then :; else AS_WARN([unable to parse test group: $at_group]) at_failed=: fi at_fn_group_postprocess echo >&AT_JOB_FIFO_OUT_FD ) & $at_job_control_off if $at_first; then at_first=false exec AT_JOB_FIFO_IN_FD<"$at_job_fifo" AT_JOB_FIFO_OUT_FD>"$at_job_fifo" fi shift # Consume one token. if test $[@%:@] -gt 0; then :; else read at_token <&AT_JOB_FIFO_IN_FD || break set x $[*] fi test -f "$at_stop_file" && break done exec AT_JOB_FIFO_OUT_FD>&- # Read back the remaining ($at_jobs - 1) tokens. set X $at_joblist shift if test $[@%:@] -gt 0; then shift for at_job do read at_token done <&AT_JOB_FIFO_IN_FD fi exec AT_JOB_FIFO_IN_FD<&- wait else # Run serially, avoid forks and other potential surprises. for at_group in $at_groups; do at_fn_group_prepare if cd "$at_group_dir" && at_fn_test $at_group && . "$at_test_source"; then :; else AS_WARN([unable to parse test group: $at_group]) at_failed=: fi at_fn_group_postprocess test -f "$at_stop_file" && break at_first=false done fi # Wrap up the test suite with summary statistics. cd "$at_helper_dir" # Use ?..???? when the list must remain sorted, the faster * otherwise. at_pass_list=`for f in */pass; do echo $f; done | sed '/\*/d; s,/pass,,'` at_skip_list=`for f in */skip; do echo $f; done | sed '/\*/d; s,/skip,,'` at_xfail_list=`for f in */xfail; do echo $f; done | sed '/\*/d; s,/xfail,,'` at_xpass_list=`for f in ?/xpass ??/xpass ???/xpass ????/xpass; do echo $f; done | sed '/?/d; s,/xpass,,'` at_fail_list=`for f in ?/fail ??/fail ???/fail ????/fail; do echo $f; done | sed '/?/d; s,/fail,,'` set X $at_pass_list $at_xpass_list $at_xfail_list $at_fail_list $at_skip_list shift; at_group_count=$[@%:@] set X $at_xpass_list; shift; at_xpass_count=$[@%:@]; at_xpass_list=$[*] set X $at_xfail_list; shift; at_xfail_count=$[@%:@] set X $at_fail_list; shift; at_fail_count=$[@%:@]; at_fail_list=$[*] set X $at_skip_list; shift; at_skip_count=$[@%:@] AS_VAR_ARITH([at_run_count], [$at_group_count - $at_skip_count]) AS_VAR_ARITH([at_unexpected_count], [$at_xpass_count + $at_fail_count]) AS_VAR_ARITH([at_total_fail_count], [$at_xfail_count + $at_fail_count]) # Back to the top directory. cd "$at_dir" rm -rf "$at_helper_dir" # Compute the duration of the suite. at_stop_date=`date` at_stop_time=`date +%s 2>/dev/null` AS_ECHO(["$as_me: ending at: $at_stop_date"]) >&AS_MESSAGE_LOG_FD case $at_start_time,$at_stop_time in [[0-9]*,[0-9]*]) AS_VAR_ARITH([at_duration_s], [$at_stop_time - $at_start_time]) AS_VAR_ARITH([at_duration_m], [$at_duration_s / 60]) AS_VAR_ARITH([at_duration_h], [$at_duration_m / 60]) AS_VAR_ARITH([at_duration_s], [$at_duration_s % 60]) AS_VAR_ARITH([at_duration_m], [$at_duration_m % 60]) at_duration="${at_duration_h}h ${at_duration_m}m ${at_duration_s}s" AS_ECHO(["$as_me: test suite duration: $at_duration"]) >&AS_MESSAGE_LOG_FD ;; esac echo AS_BOX([Test results.]) echo { echo AS_BOX([Test results.]) echo } >&AS_MESSAGE_LOG_FD dnl dnl FIXME: this code is as far from i18n-cleanness as man dnl could imagine... dnl if test $at_run_count = 1; then at_result="1 test" at_were=was else at_result="$at_run_count tests" at_were=were fi if $at_errexit_p && test $at_unexpected_count != 0; then if test $at_xpass_count = 1; then at_result="$at_result $at_were run, one passed" else at_result="$at_result $at_were run, one failed" fi at_result="$at_result unexpectedly and inhibited subsequent tests." at_color=$at_red else # Don't you just love exponential explosion of the number of cases? at_color=$at_red case $at_xpass_count:$at_fail_count:$at_xfail_count in # So far, so good. 0:0:0) at_result="$at_result $at_were successful." at_color=$at_grn ;; 0:0:*) at_result="$at_result behaved as expected." at_color=$at_lgn ;; # Some unexpected failures 0:*:0) at_result="$at_result $at_were run, $at_fail_count failed unexpectedly." ;; # Some failures, both expected and unexpected 0:*:1) at_result="$at_result $at_were run, $at_total_fail_count failed ($at_xfail_count expected failure)." ;; 0:*:*) at_result="$at_result $at_were run, $at_total_fail_count failed ($at_xfail_count expected failures)." ;; # No unexpected failures, but some xpasses *:0:*) at_result="$at_result $at_were run, $at_xpass_count passed unexpectedly." ;; # No expected failures, but failures and xpasses *:1:0) at_result="$at_result $at_were run, $at_unexpected_count did not behave as expected dnl ($at_fail_count unexpected failure)." ;; *:*:0) at_result="$at_result $at_were run, $at_unexpected_count did not behave as expected dnl ($at_fail_count unexpected failures)." ;; # All of them. *:*:1) at_result="$at_result $at_were run, $at_xpass_count passed unexpectedly, $at_total_fail_count failed ($at_xfail_count expected failure)." ;; *:*:*) at_result="$at_result $at_were run, $at_xpass_count passed unexpectedly, $at_total_fail_count failed ($at_xfail_count expected failures)." ;; esac if test $at_skip_count = 0 && test $at_run_count -gt 1; then at_result="All $at_result" fi fi # Now put skips in the mix. case $at_skip_count in 0) ;; 1) at_result="$at_result 1 test was skipped." ;; *) at_result="$at_result $at_skip_count tests were skipped." ;; esac if test $at_unexpected_count = 0; then echo "$at_color$at_result$at_std" echo "$at_result" >&AS_MESSAGE_LOG_FD else echo "${at_color}ERROR: $at_result$at_std" >&2 echo "ERROR: $at_result" >&AS_MESSAGE_LOG_FD { echo AS_BOX([Summary of the failures.]) # Summary of failed and skipped tests. if test $at_fail_count != 0; then echo "Failed tests:" $SHELL "$at_myself" $at_fail_list --list echo fi if test $at_skip_count != 0; then echo "Skipped tests:" $SHELL "$at_myself" $at_skip_list --list echo fi if test $at_xpass_count != 0; then echo "Unexpected passes:" $SHELL "$at_myself" $at_xpass_list --list echo fi if test $at_fail_count != 0; then AS_BOX([Detailed failed tests.]) echo for at_group in $at_fail_list do at_group_normalized=$at_group _AT_NORMALIZE_TEST_GROUP_NUMBER(at_group_normalized) cat "$at_suite_dir/$at_group_normalized/$as_me.log" echo done echo fi if test -n "$at_top_srcdir"; then AS_BOX([${at_top_build_prefix}config.log]) sed 's/^/| /' ${at_top_build_prefix}config.log echo fi } >&AS_MESSAGE_LOG_FD AS_BOX([$as_me.log was created.]) echo if $at_debug_p; then at_msg='per-test log files' else at_msg="\`${at_testdir+${at_testdir}/}$as_me.log'" fi AS_ECHO(["Please send $at_msg and all information you think might help: To: <AT_PACKAGE_BUGREPORT> Subject: @<:@AT_PACKAGE_STRING@:>@ $as_me: dnl $at_fail_list${at_fail_list:+ failed${at_xpass_list:+, }}dnl $at_xpass_list${at_xpass_list:+ passed unexpectedly} You may investigate any problem if you feel able to do so, in which case the test suite provides a good starting point. Its output may be found below \`${at_testdir+${at_testdir}/}$as_me.dir'. "]) exit 1 fi exit 0 m4_text_box([Actual tests.]) m4_divert_pop([TESTS])dnl dnl End of AT_INIT: divert to KILL, only test groups are to be dnl output, the rest is ignored. Current diversion is BODY, inherited dnl from M4sh. m4_divert([KILL]) ])# AT_INIT # _AT_ARG_OPTION(OPTIONS,HELP-TEXT,[ARGS],[ACTION-IF-GIVEN], # [ACTION-IF-NOT-GIVEN]) # ---------------------------------------------------------- # Internal implementation of AT_ARG_OPTION & AT_ARG_OPTION_ARG m4_defun([_AT_ARG_OPTION], [m4_divert_once([HELP_OTHER], [cat <<_ATEOF || at_write_fail=1 Other options: _ATEOF ])dnl m4_divert_once HELP_OTHER m4_divert_text([HELP_OTHER], [cat <<_ATEOF || at_write_fail=1 $2 _ATEOF])dnl dnl Turn our options into our desired strings m4_ifdef([AT_first_option],[m4_undefine([AT_first_option])])dnl m4_ifdef([AT_case],[m4_undefine([AT_case])])dnl m4_ifdef([AT_case_no],[m4_undefine([AT_case_no])])dnl m4_ifdef([AT_case_arg],[m4_undefine([AT_case_arg])])dnl m4_foreach([AT_option], m4_split(m4_normalize([$1]),[[ \|]+]), [m4_define_default([AT_first_option],AT_option)dnl m4_define_default([AT_first_option_tr], [m4_bpatsubst(m4_defn([AT_first_option]), -, [_])])dnl m4_append([AT_case],m4_if(m4_len(AT_option),1,[],[-])[-]AT_option, [ | ])dnl m4_append([AT_case_no],[--no-]AT_option, [ | ])dnl m4_append([AT_case_arg], m4_if(m4_len(AT_option),1,[],[-])[-]AT_option[=*], [ | ])dnl ])dnl m4_foreach AT_option dnl keep track so we or the user may process ACTION-IF-NOT-GIVEN m4_divert_once([PARSE_ARGS_BEGIN], [ ## ## Set up package specific options. ## ])dnl m4_divert_text([PARSE_ARGS_BEGIN], [dnl Provide a default value for options without arguments. m4_ifvaln([$3],,[at_arg_[]AT_first_option_tr=false])dnl at_arg_given_[]AT_first_option_tr=false ])dnl m4_divert_text DEFAULTS m4_divert_text([PARSE_ARGS], [dnl Parse the options and args when necessary. m4_ifvaln([$3], [ AT_case ) at_prev=--AT_first_option_tr ;; AT_case_arg ) at_arg_[]AT_first_option_tr=$at_optarg at_arg_given_[]AT_first_option_tr=: $4 ;;], [ AT_case ) at_optarg=: at_arg_[]AT_first_option_tr=: at_arg_given_[]AT_first_option_tr=: m4_ifval([$4],[$4])[]dnl ;; AT_case_no ) at_optarg=false at_arg_[]AT_first_option_tr=false at_arg_given_[]AT_first_option_tr=: m4_ifval([$4],[$4])[]dnl ;;])dnl m4_ifvaln $3 ])dnl m4_divert_text PARSE_ARGS m4_ifvaln([$5], [m4_divert_once([PARSE_ARGS_END], [ ## ## Process package specific options when _not_ supplied. ##])dnl m4_divert_once PARSE_ARGS_END m4_divert_text([PARSE_ARGS_END], [ AS_IF([$at_arg_given_[]AT_first_option_tr],,[$5])dnl ])dnl m4_divert_text PARSE_ARGS_END ])dnl m4_ifvaln $5 ])dnl _AT_ARG_OPTION # AT_ARG_OPTION(OPTIONS,HELP-TEXT,[ACTION-IF-GIVEN],[ACTION-IF-NOT-GIVEN]) # ------------------------------------------------------------------------ # Accept a list of space-separated OPTIONS, all aliases of the first one. # Add HELP-TEXT to the HELP_OTHER diversion. # # Leading dashes should not be passed in OPTIONS. Users will be required # to pass `--' before long options and `-' before single character options. # # $at_arg_OPTION will be set to `:' if this option is received, `false' if # if --no-OPTION is received, and `false' by default. # # Run ACTION-IF-GIVEN each time an option in OPTIONS is encountered; here, # $at_optarg will be set to `:' or `false' as appropriate. $at_optarg is # actually just a copy of $at_arg_OPTION. # # ACTION-IF-NOT-GIVEN will be run once after option parsing is complete and # if no option from OPTIONS was used. m4_defun([AT_ARG_OPTION],[_AT_ARG_OPTION([$1],[$2],,[$3],[$4])]) # AT_ARG_OPTION_ARG(OPTIONS,HELP-TEXT,[ACTION-IF-GIVEN],[ACTION-IF-NOT-GIVEN]) # ---------------------------------------------------------------------------- # Accept a set of space-separated OPTIONS with arguments, all aliases of the # first one. Add HELP-TEXT to the HELP_OTHER diversion. # # Leading dashes should not be passed in OPTIONS. Users will be required # to pass `--' before long options and `-' before single character options. # # By default, any argument to these options will be assigned to the shell # variable $at_arg_OPTION, where OPTION is the first option in OPTIONS with # any `-' characters replaced with `_'. # # Run ACTION-IF-GIVEN each time an option in OPTIONS is encountered; here, # $at_optarg will be set to the option argument. $at_optarg is actually just # a copy of $at_arg_OPTION. # # ACTION-IF-NOT-GIVEN will be run once after option parsing is complete # and if no option from OPTIONS was used. m4_defun([AT_ARG_OPTION_ARG],[_AT_ARG_OPTION([$1],[$2],1,[$3],[$4])]) # AT_TESTED(PROGRAMS) # ------------------- # Specify the list of programs exercised by the test suite. Their # versions are logged, and in the case of embedded test suite, they # must correspond to the version of the package. PATH should be # already preset so the proper executable will be selected. m4_define([AT_TESTED], [m4_append_uniq_w([AT_tested], [$1])]) # AT_COPYRIGHT(TEXT, [FILTER = m4_newline]) # ----------------------------------------- # Emit TEXT, a copyright notice, in the top of the test suite and in # --version output. Macros in TEXT are evaluated once. Process # the --version output through FILTER (m4_newline, m4_do, and # m4_copyright_condense are common filters). m4_define([AT_COPYRIGHT], [AS_COPYRIGHT([$1])[]]dnl [m4_divert_text([VERSION_NOTICES], [m4_default([$2], [m4_newline])([$1])])])# AT_COPYRIGHT # AT_COLOR_TESTS # -------------- # Enable colored test results if standard error is connected to a terminal. m4_define([AT_COLOR_TESTS], [m4_define([AT_color], [auto])]) # AT_SETUP(DESCRIPTION) # --------------------- # Start a group of related tests, all to be executed in the same subshell. # The group is testing what DESCRIPTION says. _AT_DEFINE_INIT([AT_SETUP], [m4_ifdef([AT_ingroup], [m4_fatal([$0: nested AT_SETUP detected])], [m4_define([AT_ingroup], [AS_ECHO(["$at_setup_line"]) >"$at_check_line_file" ])]) m4_ifdef([AT_keywords], [m4_undefine([AT_keywords])]) m4_define([AT_capture_files], []) m4_define([AT_line], AT_LINE) m4_define([AT_xfail], [at_xfail=no]) m4_define([AT_description], m4_expand([$1])) m4_define([AT_ordinal], m4_incr(AT_ordinal)) m4_divert_push([TEST_GROUPS])dnl [#AT_START_]AT_ordinal at_fn_group_banner AT_ordinal 'm4_defn([AT_line])' \ "AS_ESCAPE(m4_dquote(m4_defn([AT_description])))" m4_format(["%*s"], m4_max(0, m4_eval(47 - m4_qlen(m4_defn([AT_description])))), [])m4_if( AT_banner_ordinal, [0], [], [ AT_banner_ordinal]) m4_divert_push([TEST_SCRIPT])dnl ]) # AT_FAIL_IF(SHELL-EXPRESSION) # ---------------------------- # Make the test die with hard failure if SHELL-EXPRESSION evaluates to # true (exitcode = 0). _AT_DEFINE_SETUP([AT_FAIL_IF], [dnl dnl Try to limit the amount of conditionals that we emit. m4_case([$1], [], [], [false], [], [:], [_AT_CHECK_EXIT([], [99])], [true], [_AT_CHECK_EXIT([], [99])], [_AT_CHECK_EXIT([$1], [99])])]) # AT_SKIP_IF(SHELL-EXPRESSION) # ---------------------------- # Skip the rest of the group if SHELL-EXPRESSION evaluates to true # (exitcode = 0). _AT_DEFINE_SETUP([AT_SKIP_IF], [dnl dnl Try to limit the amount of conditionals that we emit. m4_case([$1], [], [], [false], [], [:], [_AT_CHECK_EXIT([], [77])], [true], [_AT_CHECK_EXIT([], [77])], [_AT_CHECK_EXIT([$1], [77])])]) # AT_XFAIL_IF(SHELL-EXPRESSION) # ----------------------------- # Set up the test to be expected to fail if SHELL-EXPRESSION evaluates to # true (exitcode = 0). _AT_DEFINE_SETUP([AT_XFAIL_IF], [dnl dnl Try to limit the amount of conditionals that we emit. m4_case([$1], [], [], [false], [], [:], [m4_define([AT_xfail], [at_xfail=yes])], [true], [m4_define([AT_xfail], [at_xfail=yes])], [m4_append([AT_xfail], [ $1 && at_xfail=yes])])]) # AT_KEYWORDS(KEYWORDS) # --------------------- # Declare a list of keywords associated to the current test group. # Since the -k option is case-insensitive, the list is stored in lower case # to avoid duplicates that differ only by case. _AT_DEFINE_SETUP([AT_KEYWORDS], [m4_append_uniq_w([AT_keywords], m4_tolower(_m4_expand([$1 ])))]) # AT_CAPTURE_FILE(FILE) # --------------------- # If the current test group does not behave as expected, save the contents of # FILE in the test suite log. _AT_DEFINE_SETUP([AT_CAPTURE_FILE], [m4_append_uniq([AT_capture_files], ["$1"], [ \ ])]) # AT_CLEANUP # ---------- # Complete a group of related tests. _AT_DEFINE_INIT([AT_CLEANUP], [m4_ifdef([AT_ingroup], [AT_ingroup[]_m4_undefine([AT_ingroup])], [m4_fatal([$0: missing AT_SETUP detected])])dnl m4_append([AT_help_all], m4_defn([AT_ordinal]);m4_defn([AT_line]);m4_defn([AT_description]);dnl m4_ifdef([AT_keywords], [m4_defn([AT_keywords])]); )dnl m4_divert_pop([TEST_SCRIPT])dnl Back to TEST_GROUPS AT_xfail ( AS_ECHO(["AT_ordinal. $at_setup_line: testing $at_desc ..."]) $at_traceon m4_undivert([TEST_SCRIPT])dnl Insert the code here set +x $at_times_p && times >"$at_times_file" ) AS_MESSAGE_LOG_FD>&1 2>&1 AT_JOB_FIFO_OUT_FD>&- | eval $at_tee_pipe read at_status <"$at_status_file" [#AT_STOP_]AT_ordinal m4_divert_pop([TEST_GROUPS])dnl Back to KILL. ])# AT_CLEANUP # AT_BANNER([TEXT]) # ----------------- # Start a category of related test groups. If multiple groups are executed, # output TEXT as a banner without any shell expansion, prior to any test # from the category. If TEXT is empty, no banner is printed. _AT_DEFINE_INIT([AT_BANNER], [m4_ifdef([AT_ingroup], [m4_fatal([$0: nested AT_SETUP detected])])dnl m4_define([AT_banner_ordinal], m4_incr(AT_banner_ordinal)) m4_divert_text([BANNERS], [@%:@ Banner AT_banner_ordinal. AT_LINE @%:@ Category starts at test group m4_incr(AT_ordinal). at_banner_text_[]AT_banner_ordinal="AS_ESCAPE([$1])"])dnl ])# AT_BANNER # AT_DATA(FILE, CONTENTS) # ----------------------- # Initialize an input data FILE with given CONTENTS, which should be # empty or end with a newline. # This macro is not robust to active symbols in CONTENTS *on purpose*. # If you don't want CONTENTS to be evaluated, quote it twice. _AT_DEFINE_SETUP([AT_DATA], [m4_if([$2], [], [: >$1], [$2], [[]], [: >$1], [cat >$1 <<'_ATEOF' $2[]_ATEOF ])]) # AT_CHECK(COMMANDS, [STATUS = 0], STDOUT, STDERR, # [RUN-IF-FAIL], [RUN-IF-PASS]) # ------------------------------------------------ # Execute a test by performing given shell COMMANDS. These commands # should normally exit with STATUS, while producing expected STDOUT and # STDERR contents. Shell metacharacters in STDOUT and STDERR are # _not_ processed by the shell, but are treated as string literals. # # STATUS, STDOUT, and STDERR are not checked if equal to `ignore'. # # If STDOUT is `expout', then stdout is compared to the content of the file # `expout'. Likewise for STDERR and `experr'. # # If STDOUT is `stdout', then the stdout is left in the file `stdout', # likewise for STDERR and `stderr'. Don't do this: # # AT_CHECK([command >out]) # # Some checks on `out' # # do this instead: # # AT_CHECK([command], [], [stdout]) # # Some checks on `stdout' # # You might wonder why you can't just use `ignore', then directly use stdout # and stderr left by the test suite: # # AT_CHECK([command], [], [ignore]) # AT_CHECK([check stdout]) # # If the test suite always captured data in the file `stdout', then the # second command would be trying to read and write from the same file, with # undefined behavior. Therefore, the test suite actually captures data in # an internal file of a different name, and only creates `stdout' when # explicitly requested. # # Any line of stderr starting with leading blanks and a `+' are filtered # out, since most shells when tracing include subshell traces in stderr. # This may cause spurious failures when the test suite is run with `-x'. # _AT_DEFINE_SETUP([AT_CHECK], [_AT_CHECK(m4_expand([$1]), [$2], AS_ESCAPE(m4_dquote(m4_expand([$3]))), AS_ESCAPE(m4_dquote(m4_expand([$4]))), [$5], [$6])]) # AT_CHECK_UNQUOTED(COMMANDS, [STATUS = 0], STDOUT, STDERR, # [RUN-IF-FAIL], [RUN-IF-PASS]) # --------------------------------------------------------- # Like AT_CHECK, but do not AS_ESCAPE shell metacharacters in the STDOUT # and STDERR arguments before running the comparison. _AT_DEFINE_SETUP([AT_CHECK_UNQUOTED], [_AT_CHECK(m4_expand([$1]), [$2], AS_ESCAPE(m4_dquote(m4_expand([$3])), [""]), AS_ESCAPE(m4_dquote(m4_expand([$4])), [""]), [$5], [$6])]) # AT_CHECK_NOESCAPE(COMMANDS, [STATUS = 0], STDOUT, STDERR, # [RUN-IF-FAIL], [RUN-IF-PASS]) # --------------------------------------------------------- # Obsolete spelling of AT_CHECK_UNQUOTED. m4_define([AT_CHECK_NOESCAPE], [m4_warn([obsolete], [consider using AT_CHECK_UNQUOTED instead of $0])]dnl [_AT_CHECK(m4_expand([$1]), [$2], m4_expand([$3]), m4_expand([$4]), [$5], [$6])]) # _AT_DECIDE_TRACEABLE(COMMANDS) # ------------------------------ # Worker for _AT_CHECK that expands to shell code. If COMMANDS are safe to # trace with `set -x', the shell code will evaluate to true. Otherwise, # the shell code will print a message stating an aspect of COMMANDS that makes # tracing them unsafe, and evaluate to false. # # Tracing COMMANDS is not safe if they contain a command that spans multiple # lines. When the test suite user passes `-x' or `--trace', the test suite # precedes every command with a `set -x'. Since most tests expect a specific # stderr, if only to confirm that it is empty, the test suite filters ^+ from # the captured stderr before comparing with the expected stderr. If a command # spans multiple lines, so will its trace, but a `+' only prefixes the first # line of that trace: # # $ echo 'foo # bar' # => stdout # foo # bar # => stderr # + foo # bar # # In a subset of cases, one could filter such extended shell traces from # stderr. Since test commands spanning several lines are rare, I chose # instead to simply not trace COMMANDS that could yield multiple trace lines. # Distinguishing such COMMANDS became the task at hand. # # These features may cause a shell command to span multiple lines: # # (a) A quoted literal newline. # Example: # echo foo' # 'bar # M4 is a hostile language for the job of parsing COMMANDS to determine whether # each literal newline is quoted, so we simply disable tracing for all COMMANDS # that bear literal newlines. # # (b) A command substitution not subject to word splitting. # Example: # var=$(printf 'foo\nbar') # Example: # echo "`printf 'foo\\nbar`" # One cannot know in general the number of lines a command substitution will # yield without executing the substituted command. As such, we disable tracing # for all COMMANDS containing these constructs. # # (c) A parameter expansion not subject to word splitting. # Example: # var=foo' # 'bar # echo "$var" # Parameter expansions appear in COMMANDS with much greater frequency than do # newlines and command substitutions, so disabling tracing for all such # COMMANDS would much more substantially devalue `testsuite -x'. To determine # which parameter expansions yield multiple lines, we escape all ``', `"', # and `\' in a copy of COMMANDS and expand that string within double quotes # at runtime. If the result of that expansion contains multiple lines, the # test suite disables tracing for the command in question. # # This method leads the test suite to expand some parameters that the shell # itself will never expand due to single-quotes or backslash escapes. This is # not a problem for `$foo' expansions, which will simply yield the empty string # or some unrelated value. A `${...}' expansion could actually form invalid # shell code, however; consider `${=foo}'. Therefore, we disable tracing for # all COMMANDS containing `${...}'. This affects few COMMANDS. # # This macro falls in a very hot path; the Autoconf test suite expands it 1640 # times as of this writing. To give a sense of the impact of the heuristics I # just described, the test suite preemptively disables tracing for 31 of those, # and 268 contain parameter expansions that require runtime evaluation. The # balance are always safe to trace. m4_define([_AT_DECIDE_TRACEABLE], dnl Utility macro. dnl dnl Examine COMMANDS for a reason to never trace COMMANDS. [m4_pushdef([at_reason], m4_cond([m4_eval(m4_index([$1], [`]) >= 0)], [1], [[a `...` command substitution]], [m4_eval(m4_index([$1], [$(]) >= 0)], [1], [[a $(...) command substitution]], [m4_eval(m4_index([$1], [${]) >= 0)], [1], [[a ${...} parameter expansion]], [m4_eval(m4_index([$1], m4_newline) >= 0)], [1], [[an embedded newline]], [m4_eval(m4_bregexp([$1], [[^|]|[^|]]) >= 0)], [1], [[a shell pipeline]], []))]dnl No reason. [m4_if(m4_index(_m4_defn([at_reason]), [a]), [0],]dnl dnl We know at build time that tracing COMMANDS is never safe. [[at_fn_check_prepare_notrace '_m4_defn([at_reason])'], m4_index([$1], [$]), [-1],]dnl dnl We know at build time that tracing COMMANDS is always safe. [[at_fn_check_prepare_trace],]dnl dnl COMMANDS may contain parameter expansions; expand them at runtime. [[at_fn_check_prepare_dynamic "AS_ESCAPE([[$1]], [`\"])"])[]]dnl [_m4_popdef([at_reason])]) # AT_DIFF_STDERR/AT_DIFF_STDOUT # ----------------------------- # These are subroutines of AT_CHECK. Using indirect dispatch is a tad # faster than using m4_case, and these are called very frequently. m4_define([AT_DIFF_STDERR(stderr)], [echo stderr:; tee stderr <"$at_stderr"]) m4_define([AT_DIFF_STDERR(stderr-nolog)], [echo stderr captured; cp "$at_stderr" stderr]) m4_define([AT_DIFF_STDERR(ignore)], [echo stderr:; cat "$at_stderr"]) m4_define([AT_DIFF_STDERR(ignore-nolog)]) m4_define([AT_DIFF_STDERR(experr)], [$at_diff experr "$at_stderr" || at_failed=:]) m4_define([AT_DIFF_STDERR()], [at_fn_diff_devnull "$at_stderr" || at_failed=:]) m4_define([AT_DIFF_STDOUT(stdout)], [echo stdout:; tee stdout <"$at_stdout"]) m4_define([AT_DIFF_STDOUT(stdout-nolog)], [echo stdout captured; cp "$at_stdout" stdout]) m4_define([AT_DIFF_STDOUT(ignore)], [echo stdout:; cat "$at_stdout"]) m4_define([AT_DIFF_STDOUT(ignore-nolog)]) m4_define([AT_DIFF_STDOUT(expout)], [$at_diff expout "$at_stdout" || at_failed=:]) m4_define([AT_DIFF_STDOUT()], [at_fn_diff_devnull "$at_stdout" || at_failed=:]) # _AT_CHECK(COMMANDS, [STATUS = 0], STDOUT, STDERR, # [RUN-IF-FAIL], [RUN-IF-PASS]) # ------------------------------------------------- # Worker for AT_CHECK and AT_CHECK_UNQUOTED, with COMMANDS, STDOUT, and # STDERR pre-expanded. # # Implementation Details # ---------------------- # Ideally, we would like to run # # ( $at_traceon; COMMANDS >at-stdout 2> at-stderr ) # # but we must group COMMANDS as it is not limited to a single command, and # then the shells will save the traces in at-stderr. So we have to filter # them out when checking stderr, and we must send them into the test suite's # stderr to honor -x properly. Since only the first line of the trace of a # multiline command starts with a `+', and I know of no straightforward way to # filter out the unadorned trace lines, we disable shell tracing entirely for # commands that could span multiple lines. # # Limiting COMMANDS to a single command is not good either, since then # the user herself would use {} or (), and then we face the same problem. # # But then, there is no point in running # # ( $at_traceon { $1 ; } >at-stdout 2>at-stder1 ) # # instead of the simpler # # ( $at_traceon; $1 ) >at-stdout 2>at-stder1 # # Note that we truncate and append to the output files, to avoid losing # output from multiple concurrent processes, e.g., an inner testsuite # with parallel jobs. m4_define([_AT_CHECK], [m4_define([AT_ingroup])]dnl [{ set +x AS_ECHO(["$at_srcdir/AT_LINE: AS_ESCAPE([[$1]])"]) _AT_DECIDE_TRACEABLE([$1]) _AT_LINE_ESCAPED ( $at_check_trace; [$1] ) >>"$at_stdout" 2>>"$at_stderr" AS_MESSAGE_LOG_FD>&- at_status=$? at_failed=false $at_check_filter m4_ifdef([AT_DIFF_STDERR($4)], [m4_indir([AT_DIFF_STDERR($4)])], [echo >>"$at_stderr"; AS_ECHO([["$4"]]) | \ $at_diff - "$at_stderr" || at_failed=:]) m4_ifdef([AT_DIFF_STDOUT($3)], [m4_indir([AT_DIFF_STDOUT($3)])], [echo >>"$at_stdout"; AS_ECHO([["$3"]]) | \ $at_diff - "$at_stdout" || at_failed=:]) m4_if([$2], [ignore], [at_fn_check_skip], [at_fn_check_status m4_default([$2], [0])]) $at_status "$at_srcdir/AT_LINE" m4_ifvaln([$5$6], [AS_IF($at_failed, [$5], [$6])])]dnl [$at_failed && at_fn_log_failure AT_capture_files $at_traceon; } ])# _AT_CHECK # _AT_CHECK_EXIT(COMMANDS, [EXIT-STATUS-IF-PASS]) # ----------------------------------------------- # Minimal version of _AT_CHECK for AT_SKIP_IF and AT_FAIL_IF. m4_define([_AT_CHECK_EXIT], [m4_define([AT_ingroup])]dnl [AS_ECHO(_AT_LINE_ESCAPED) >"$at_check_line_file" m4_ifval([$1], [($1) \ && ])at_fn_check_skip $2 "$at_srcdir/AT_LINE"])# _AT_CHECK_EXIT
| ver. 1.4 |
Github
|
.
| PHP 8.1.34 | ���֧ߧ֧�ѧ�ڧ� ����ѧߧڧ��: 0.41 |
proxy
|
phpinfo
|
���ѧ����ۧܧ�