4 # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
5 # 2005, 2006, 2007, 2008, 2009, 2011 Free Software Foundation, Inc.
7 # This program is free software; you can redistribute it and/or modify
8 # it under the terms of the GNU General Public License as published by
9 # the Free Software Foundation; either version 2, or (at your option)
12 # This program is distributed in the hope that it will be useful,
13 # but WITHOUT ANY WARRANTY; without even the implied warranty of
14 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 # GNU General Public License for more details.
17 # You should have received a copy of the GNU General Public License
18 # along with this program. If not, see <http://www.gnu.org/licenses/>.
20 # Defines for Automake testing environment.
21 # Tom Tromey <tromey@cygnus.com>
23 # Be more Bourne compatible.
24 # (Snippet copied from configure's initialization in Autoconf 2.64)
25 DUALCASE=1; export DUALCASE # for MKS sh
26 if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then
29 # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which
30 # is contrary to our usage. Disable this feature.
31 alias -g '${1+"$@"}'='"$@"'
34 case `(set -o) 2>/dev/null` in *posix*) set -o posix;; esac
37 # A single whitespace character.
39 # A tabulation character.
41 # A newline character.
45 # As autoconf-generated configure scripts do, ensure that IFS
46 # is defined initially, so that saving and restoring $IFS works.
49 # Ensure we are running from the right directory.
51 echo "defs: not found in current directory" 1>&2
55 if test -z "$srcdir"; then
57 srcdir=`echo "$0" | sed -e 's,/[^\\/]*$,,'`
58 test "$srcdir" = $0 && srcdir=.
61 # Ensure $srcdir is set correctly.
62 test -f "$srcdir/defs.in" || {
63 echo "$srcdir/defs.in not found, check \$srcdir" 1>&2
67 # The name of the current test (without the `.test' suffix).
68 # Test scripts can override it if they need to (but this should
69 # be done carefully, and *before* including ./defs).
70 if test -z "$me"; then
71 me=`echo "$0" | sed -e 's,.*[\\/],,;s/\.test$//'`
72 elif env | grep '^me=' >/dev/null; then
73 echo "$0: variable \`me' is set in the environment: this is unsafe" >&2
77 # Check that the environment is properly sanitized.
78 for var in required parallel_tests; do
79 if env | grep "^$var=" >/dev/null; then
80 echo "$me: variable \`$var' is set in the environment:" \
87 # This might be used in testcases checking distribution-related features.
88 # Test scripts are free to override this if they need to.
91 APIVERSION='@APIVERSION@'
92 PATH_SEPARATOR='@PATH_SEPARATOR@'
94 # Make sure we override the user shell.
97 # User can override various tools used.
98 test -z "$PERL" && PERL='@PERL@'
99 test -z "$YACC" && YACC='@YACC@'
100 test -z "$LEX" && LEX='@LEX@'
101 test -z "$MAKE" && MAKE=make
102 test -z "$AUTOCONF" && AUTOCONF="@am_AUTOCONF@"
103 test -z "$AUTOM4TE" && AUTOM4TE="@am_AUTOM4TE@"
104 test -z "$AUTORECONF" && AUTORECONF="@am_AUTORECONF@"
105 test -z "$AUTOHEADER" && AUTOHEADER="@am_AUTOHEADER@"
106 test -z "$AUTOUPDATE" && AUTOUPDATE="@am_AUTOUPDATE@"
107 test -z "$MISSING" && MISSING=`pwd`/../lib/missing
108 # Use -Werror because this also turns some Perl warnings into error.
109 # (Tests for which this is inappropriate should use -Wno-error.)
110 test -z "$ACLOCAL" && ACLOCAL="aclocal-$APIVERSION -Werror"
112 # See how Automake should be run. We put --foreign as the default
113 # strictness to avoid having to create lots and lots of files. A test
114 # can override this by specifying a different strictness. Use -Wall
115 # -Werror by default. Tests for which this is inappropriate
116 # (e.g. when testing that a warning is enabled by a specific switch)
117 # should use -Wnone or/and -Wno-error
118 test -z "$AUTOMAKE" && AUTOMAKE="automake-$APIVERSION --foreign -Werror -Wall"
120 PATH="`pwd`$PATH_SEPARATOR$PATH"
122 # Some shells forget to export modified environment variables.
123 # (See note about `export' in the Autoconf manual.)
126 # We use a trap below for cleanup. This requires us to go through
127 # hoops to get the right exit status transported through the signal.
128 # So use `Exit STATUS' instead of `exit STATUS' inside of the tests.
129 # Turn off errexit here so that we don't trip the bug with OSF1/Tru64
130 # sh inside this function.
138 # Print warnings (e.g., about skipped and failed tests) to this file
139 # number. Override by putting, say:
140 # stderr_fileno_=9; export stderr_fileno_; exec 9>&2;
141 # in the definition of AM_TESTS_ENVIRONMENT.
142 # This is useful when using automake's parallel tests mode, to print the
143 # reason for skip/failure to console, rather than to the *.log files.
144 : ${stderr_fileno_=2}
146 # Copied from Gnulib's `tests/init.sh'.
147 warn_ () { echo "$@" 1>&$stderr_fileno_; }
148 fail_ () { warn_ "$me: failed test: $@"; Exit 1; }
149 skip_ () { warn_ "$me: skipped test: $@"; Exit 77; }
150 fatal_ () { warn_ "$me: hard error: $@"; Exit 99; }
151 framework_failure_ () { warn_ "$me: set-up failure: $@"; Exit 99; }
155 # Tell whether we are cross-compiling. This is especially useful to skip
156 # tests (or portions of them) that requires a native compiler.
159 test x"$host_alias" != x
162 # So that we can force the use of correct gcc, g++ etc., consistently
163 # with cross-compilation settings.
164 if cross_compiling; then
165 am__tool_prefix="$host_alias-"
170 for tool in : $required
172 # Check that each required tool is present.
175 cc|c++|fortran|fortran77)
176 echo "$me: dummy requirement '$tool', no check done"
179 # Do not use --version, bzip2 still tries to compress stdin.
180 echo "$me: running bzip2 --help"
181 ( bzip2 --help ) || exit 77
184 # Exuberant Ctags will create a TAGS file even
185 # when asked for --help or --version. (Emacs's etags
186 # does not have such problem.) Use -o /dev/null
187 # to make sure we do not pollute the tests/ directory.
188 echo "$me: running etags --version -o /dev/null"
189 ( etags --version -o /dev/null ) || exit 77
192 # Use --version AND -v, because SGI Make doesn't fail on --version.
193 # Also grep for GNU because newer versions of FreeBSD make do
194 # not complain about `--version' (they seem to silently ignore it).
195 echo "$me: running $MAKE --version -v | grep GNU"
196 ( $MAKE --version -v | grep GNU ) || exit 77
199 # When gcc is required, export `CC=gcc' so that ./configure
200 # always use it. This is important only when the user
201 # has defined CC in his environment, otherwise ./configure will
202 # prefer gcc to other compilers.
203 CC=${am__tool_prefix}gcc
205 echo "$me: running $CC --version"
206 ( $CC --version ) || exit 77
209 GCJ=${am__tool_prefix}gcj
211 echo "$me: running $GCJ --version"
212 ( $GCJ --version ) || exit 77
213 ( $GCJ -v ) || exit 77
216 CXX=${am__tool_prefix}g++
218 echo "$me: running $CXX --version"
219 ( $CXX --version ) || exit 77
222 FC=${am__tool_prefix}gfortran
224 echo "$me: running $FC --version"
225 $FC --version || skip_ "GNU Fortran compiler not available"
226 echo "$me: running $FC -v"
227 $FC -v || skip_ "botched installation for GNU Fortran compiler"
228 case " $required " in
230 *) F77=$FC; export F77;;
234 F77=${am__tool_prefix}g77
236 echo "$me: running $F77 --version"
237 $F77 --version || skip_ "GNU Fortran 77 compiler not available"
238 echo "$me: running $F77 -v"
239 $F77 -v || skip_ "botched installation for GNU Fortran 77 compiler"
240 case " $required " in
242 *) FC=$F77; export FC;;
248 # There is no way to ask *only* the compiler's version.
249 # This tool always wants to do something (by default
250 # it will try link *nothing* and complain it cannot find
251 # main(); funny). Use -help so it does not try linking anything.
252 echo "$me: running $CC -V -help"
253 ( $CC -V -help ) || exit 77
256 # The Java compiler from JDK 1.5 (and presumably earlier versions)
257 # cannot handle the `-version' option by itself: it bails out
258 # telling that source files are missing. Adding also the `-help'
259 # option seems to solve the problem.
260 echo "$me: running javac -version -help"
261 javac -version -help || exit 77
264 echo "$me: running makedepend -f-"
265 ( makedepend -f- ) || exit 77
268 # Make sure makeinfo understands --html.
269 echo "$me: running makeinfo --html --version"
270 ( makeinfo --html --version ) || exit 77
273 # Skip this test case if the user is root.
274 # We try to append to a read-only file to detect this.
275 priv_check_temp=priv-check.$$
276 touch $priv_check_temp || exit 1
277 chmod a-w $priv_check_temp || exit 1
278 (echo foo >> $priv_check_temp) >/dev/null 2>&1
280 rm -f $priv_check_temp
281 test $overwrite_status = 0 && exit 77
284 cross_compiling && skip_ "doesn't work in cross-compile mode"
287 # Python doesn't support --version, it has -V
288 echo "$me: running python -V"
289 ( python -V ) || exit 77
292 # Skip this test case if read-only directories aren't supported
294 ro_dir_temp=ro_dir.$$
295 mkdir $ro_dir_temp || exit 1
296 chmod a-w $ro_dir_temp || exit 1
297 (: > $ro_dir_temp/probe) >/dev/null 2>/dev/null
300 test $create_status = 0 && exit 77
303 # Try the variants that are tried in check.am.
305 for r2h in $RST2HTML rst2html rst2html.py; do
306 echo "$me: running $r2h --version"
307 $r2h --version && break 2
313 # DejaGnu's runtest program. We rely on being able to specify
314 # the program on the runtest command-line. This requires
315 # DejaGnu 1.4.3 or later.
316 echo "$me: running runtest --version"
317 (runtest SOMEPROGRAM=someprogram --version) || exit 77
320 # No all versions of Tex support `--version', so we use
322 test -n "@TEX@" || exit 77
325 # Texi2dvi supports `-o' since Texinfo 4.1.
326 echo "$me: running texi2dvi -o /dev/null --version"
327 ( texi2dvi -o /dev/null --version ) || exit 77
331 test x"$LEX" = x"false" && skip_ "lex not found or disabled"
335 test x"$YACC" = x"false" && skip_ "yacc not found or disabled"
337 # Generic case: the tool must support --version.
339 echo "$me: running $tool --version"
340 ( $tool --version ) || exit 77
346 # Always use an absolute srcdir. Otherwise symlinks made in subdirs
347 # of the test dir just won't work.
353 srcdir=`CDPATH=: && cd "$srcdir" && pwd`
359 test ! -d $testSubDir || {
360 find $testSubDir -type d ! -perm -700 -exec chmod u+rwx {} ";"
365 sh_errexit_works=@sh_errexit_works@
366 if test "$sh_errexit_works" = yes; then
370 case $exit_status,$keep_testdirs in
372 find $testSubDir -type d ! -perm -700 -exec chmod u+rwx {} ";"
376 test "$signal" != 0 &&
377 echo "$me: caught signal $signal"
378 echo "$me: exit $exit_status"
381 for signal in 1 2 13 15; do
382 trap 'signal='$signal'; { Exit 1; }' $signal
387 # Copy in some files we need.
388 for file in install-sh missing depcomp; do
389 cp "$srcdir/../lib/$file" "$testSubDir/$file" || Exit 1
394 # Build appropriate environment in test directory. Eg create
395 # configure.in, touch all necessary files, etc.
396 # Don't use AC_OUTPUT, but AC_CONFIG_FILES so that appending
397 # still produces a valid configure.ac. But then, tests running
398 # config.status really need to append AC_OUTPUT.
400 echo "AC_INIT([$me], [1.0])"
401 if test x"$parallel_tests" = x"yes"; then
402 echo "AM_INIT_AUTOMAKE([parallel-tests])"
404 echo "AM_INIT_AUTOMAKE"
406 echo "AC_CONFIG_FILES([Makefile])"
409 # Unset some make-related variables that may cause $MAKE to act like
410 # a recursively invoked sub-make. Any $MAKE invocation in a test is
411 # conceptually an independent invocation, not part of the main
413 unset MFLAGS MAKEFLAGS AM_MAKEFLAGS MAKELEVEL
414 unset __MKLVL__ MAKE_JOBS_FIFO # For BSD make.
415 unset DMAKE_CHILD DMAKE_DEF_PRINTED DMAKE_MAX_JOBS # For Solaris dmake.
416 # Unset verbosity flag.
418 # Also unset variables that will let `make -e install' divert
419 # files into unwanted directories.
421 unset prefix exec_prefix bindir datarootdir datadir docdir dvidir
422 unset htmldir includedir infodir libdir libexecdir localedir mandir
423 unset oldincludedir pdfdir psdir sbindir sharedstatedir sysconfdir
424 # Unset variables that might change the "make distcheck" behaviour.
425 unset DISTCHECK_CONFIGURE_FLAGS AM_DISTCHECK_CONFIGURE_FLAGS
426 # Also unset variables that control our test driver. While not
427 # conceptually independent, they cause some changed semantics we
428 # need to control (and test for) in some of the tests to ensure
429 # backward-compatible behavior.
430 unset TESTS_ENVIRONMENT AM_TESTS_ENVIRONMENT
431 unset DISABLE_HARD_ERRORS
434 unset TEST_LOG_COMPILER
439 echo "=== Running test $0"
441 # We might need extra macros, e.g., from Libtool or Gettext.
442 # Find them on the system.
443 # Use `-I $srcdir/../m4' in addition to `--acdir=$srcdir/../m4', because the
444 # other `-I' directories added for libtool and gettext might contain
445 # files from an old version of Automake that we don't want to use.
446 # Use `-Wno-syntax' because we do not want our test suite to fail because
447 # some third-party .m4 file is underquoted.
449 *libtool* | *gettext* )
450 aclocaldir='@prefix@/share/aclocal'
452 if test -f $aclocaldir/dirlist; then
454 <$aclocaldir/dirlist \
455 sed 's/#.*//;s/[ ][ ]*$//g' \
456 | while read dir; do test ! -d "$dir" || echo "-I $dir"; done`
461 for d in $extra_includes $aclocaldir ; do
462 test "x$d" != x-I || continue
463 if test -f "$d/libtool.m4"; then
466 if test -f "$d/gettext.m4"; then
471 *libtool* ) test $libtool_found = yes || Exit 77 ;;
472 *gettext* ) test $gettext_found = yes || Exit 77 ;;
474 # Libtool cannot cope with spaces in the build tree. Our testsuite setup
475 # cannot cope with spaces in the source tree name for Libtool and gettext
477 case $srcdir,`pwd` in
478 *\ * | *\ *) Exit 77 ;;
480 ACLOCAL="$ACLOCAL -Wno-syntax -I $srcdir/../m4 $extra_includes -I $aclocaldir"
484 testaclocaldir='@abs_top_srcdir@/m4'
486 # POSIX no longer requires 'egrep' and 'fgrep',
487 # but some hosts lack 'grep -E' and 'grep -F'.
491 # The amount we should wait after modifying files depends on the platform.
492 # For instance, Windows '95, '98 and ME have 2-second granularity
493 # and can be up to 3 seconds in the future w.r.t. the system clock.
494 sleep='sleep @MODIFICATION_DELAY@'
496 # The tests call `make -e' but we do not want $srcdir from the environment
497 # to override the definition from the Makefile.
501 # An old timestamp that can be given to a file, in "touch -t" format.
502 # The time stamp should be portable to all file systems of interest.
503 # Just for fun, choose the exact time of the announcement of the GNU project
504 # in UTC; see <http://www.gnu.org/gnu/initial-announcement.html>.
505 old_timestamp=198309271735.59
507 # is_newest FILE FILES
508 # --------------------
509 # Return false if any file in FILES is newer than FILE.
510 # Resolve ties in favor of FILE.
513 is_newest_files=`find "$@" -newer "$1"`
514 test -z "$is_newest_files"
519 # Return success if $MAKE is GNU make, return failure otherwise.
522 # Use --version AND -v, because SGI Make doesn't fail on --version.
523 # Also grep for GNU because newer versions of FreeBSD make do
524 # not complain about `--version' (they seem to silently ignore it).
525 $MAKE --version -v | grep GNU
528 # AUTOMAKE_run status [options...]
529 # --------------------------------
530 # Run Automake with OPTIONS, and fail if automake
531 # does not exit with STATUS.
537 $AUTOMAKE ${1+"$@"} >stdout 2>stderr || exitcode=$?
540 test $exitcode = $expected_exitcode || Exit 1
543 # AUTOMAKE_fails [options...]
544 # ---------------------------
545 # Run Automake with OPTIONS, and fail if automake
546 # does not exit with STATUS.
549 AUTOMAKE_run 1 ${1+"$@"}
552 commented_sed_unindent_prog='
553 /^$/b # Nothing to do for empty lines.
554 x # Get x<indent> into pattern space.
555 /^$/{ # No prior x<indent>, go prepare it.
556 g # Copy this 1st non-blank line into pattern space.
557 s/^\(['"$tab"' ]*\).*/x\1/ # Prepare x<indent> in pattern space.
558 } # Now: x<indent> in pattern and <line> in hold.
559 G # Build x<indent>\n<line> in pattern space, and
560 h # duplicate it into hold space.
561 s/\n.*$// # Restore x<indent> in pattern space, and
562 x # exchange with the above duplicate in hold space.
563 s/^x\(.*\)\n\1// # Remove leading <indent> from <line>.
564 s/^x.*\n// # Restore <line> when there is no leading <indent>.
567 # unindent [input files...]
568 # -------------------------
569 # Remove the "proper" amount of leading whitespace from the given files,
570 # and output the result on stdout. That amount is determined by looking
571 # at the leading whitespace of the first non-blank line in the input
572 # files. If no input file is specified, standard input is implied.
575 if test x"$sed_unindent_prog" = x; then
576 sed_unindent_prog=`printf '%s\n' "$commented_sed_unindent_prog" | sed -e "s/ *# .*//"`
578 sed "$sed_unindent_prog" ${1+"$@"}
580 sed_unindent_prog="" # Avoid interferences from the environment.
582 # Turn on shell traces.