+ 2009-03-29 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ Rewrite maintainer-check in separate tests, parallelizable.
+ * Makefile.am (sc_diff_automake_in_automake, sc_perl_syntax)
+ (sc_no_brace_variable_expansions, sc_rm_minus_f)
+ (sc_no_for_variable_in_macro, sc_mkinstalldirs)
+ (sc_pre_normal_post_install_uninstall, sc_perl_no_undef)
+ (sc_perl_no_split_regex_space, sc_cd_in_backquotes)
+ (sc_cd_relative_dir, sc_perl_at_uscore_in_scalar_context)
+ (sc_perl_local_no_parens, sc_perl_local)
+ (sc_AMDEP_TRUE_in_automake_in, sc_tests_make_without_am_makeflags)
+ (sc_tests_plain_make, sc_tests_plain_autoconf)
+ (sc_tests_plain_autoupdate, sc_tests_plain_automake)
+ (sc_tests_here_document_format, sc_tests_Exit_not_exit)
+ (sc_tests_automake_fails, sc_tests_plain_aclocal)
+ (sc_tests_plain_perl, sc_tests_required_after_defs)
+ (sc_tests_overriding_macros_on_cmdline, sc_tests_plain_sleep)
+ (sc_tests_plain_egrep_fgrep, sc_mkdir_p, sc_perl_at_substs)
+ (sc_unquoted_DESTDIR, sc_tabs_in_texi, sc_at_in_texi): New rules,
+ all phony, all listed in ...
+ (syntax_check_rules): ... this new variable and split out from ...
+ (maintainer-check): ... this rule. Depend on $(syntax_check_rules).
+
+ * Makefile.am (maintainer-check): Do not complain if DESTDIR is
+ passed as argument to `make'.
+
+ * doc/automake.texi (Cross-Compilation): Fix underfull hbox.
+
+ Sync auxiliary files from upstream.
+ * INSTALL, lib/INSTALL, lib/config.guess, lib/config.sub,
+ lib/texinfo.tex: Sync from upstream.
+
+ 2009-03-28 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ manual: minor cleanups.
+ * doc/automake.texi (Yacc and Lex): Adjust spacing in example.
+ (Mixing Fortran 77 With C and C++): Drop unneeded @page breaks.
+
+ Sane (un)install for empty directory variables.
+ This patch fixes all install and uninstall rules to behave
+ sanely when $(wheredir) is the empty string, but $(where_HOW) is
+ nonempty, for all kinds of values of `where' and `HOW'.
+ * lib/am/data.am (install-%DIR%%PRIMARY%, uninstall-%DIR%%PRIMARY%):
+ Do not touch the install tree if the corresponding directory variable
+ $(%NDIR%dir) is empty.
+ * lib/am/java.am (install-%DIR%JAVA, uninstall-%DIR%JAVA): Likewise.
+ * lib/am/libs.am (install-%DIR%LIBRARIES, uninstall-%DIR%LIBRARIES):
+ Likewise.
+ * lib/am/lisp.am (install-%DIR%LISP, uninstall-%DIR%LISP): Likewise.
+ * lib/am/ltlib.am (install-%DIR%LTLIBRARIES, uninstall-%DIR%LTLIBRARIES):
+ Likewise.
+ * lib/am/mans.am (install-man%SECTION%, uninstall-man%SECTION%):
+ Likewise.
+ * lib/am/progs.am (install-%DIR%PROGRAMS, uninstall-%DIR%PROGRAMS):
+ Likewise.
+ * lib/am/python.am (install-%DIR%PYTHON, uninstall-%DIR%PYTHON):
+ Likewise.
+ * lib/am/scripts.am (install-%DIR%SCRIPTS, uninstall-%DIR%SCRIPTS):
+ Likewise.
+ * lib/am/texinfos.am (install-dvi-am, install-html-am, install-pdf-am)
+ (install-ps-am, uninstall-dvi-am, uninstall-html-am, uninstall-pdf-am)
+ (uninstall-ps-am): Likewise.
+ * tests/instdir2.test, tests/instdir-java.test,
+ tests/instdir-lisp.test, tests/instdir-ltlib.test,
+ tests/instdir-prog.test, tests/instdir-python.test,
+ tests/instdir-texi.test: New tests.
+ * tests/Makefile.am: Update.
+ * NEWS: Update.
+ Suggestion by Akim Demaille.
+
+ Ensure that empty directory variables work with empty content variables.
+ This test ensures that, if both $(wheredir) and $(where_HOW) are
+ the empty string, then the `install' and `uninstall' rules behave
+ sanely, for several directory variables `wheredir' and several
+ primaries `HOW'.
+ * tests/instdir.test: New test.
+ * tests/Makefile.am: Update.
+
+ 2009-03-23 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ Use --tag=FC with libtool also for .f90 files.
+ * automake.in: Set 'libtool_tag' for language `fc'.
+ * tests/fort5.test: Grep for the tag.
+ * THANKS: Update.
+ Report by John R. Cary.
+
+ 2009-03-22 Peter Breitenlohner <peb@mppmu.mpg.de>
+ Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ For PR automake/533:
+ DISTFILES containing a directory and files in that directory.
+ When the source tree contains non-writable files or directories
+ (as happens during distcheck), and directories or entries
+ thereof are listed multiple times in variables to be
+ distributed, then the corresponding directories below $(distdir)
+ need to be made writable recursively. Since file modes should
+ not change, they need to be copied recursively using `cp -f'.
+ * lib/am/distdir.am: Handle this situation.
+ * tests/distdir.test: Extend test to those cases.
+ * NEWS: Update.
+ Report by Peter Breitenlohner.
+
+ 2009-03-22 Jim Meyering <meyering@redhat.com>
+
+ Fix a documentation typo.
+ * doc/automake.texi (Headers): Clarify the note telling when it's
+ better not to use noinst_HEADERS.
+
+ 2009-03-22 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ Define AM_RECURSIVE_TARGETS, for gnulib's GNUmakefile.
+ This new macro lists all public targets which invoke `make'
+ recursively, or depend on targets which do so. It allows to
+ prevent parallelism selectively, when multiple targets are
+ passed on the `make' command line.
+ * lib/am/distdir.am [%?SUBDIRS%] (AM_RECURSIVE_TARGETS): New
+ macro.
+ * lib/am/subdirs.am (AM_RECURSIVE_TARGETS): Likewise.
+ * lib/am/tags.am [%?SUBDIRS%] (AM_RECURSIVE_TARGETS):
+ Likewise.
+
+2009-03-11 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ Fix LAZY_TEST_SUITE handling and $(TEST_SUITE_LOG) recreation.
+ * lib/am/check.am (check-TESTS): Expand `$(TEST_LOGS)' only once
+ in the rule command, for systems with low command line limits.
+ Remove $(TEST_SUITE_LOG) even in LAZY_TEST_SUITE mode.
+ ($(TEST_SUITE_LOG)): Always recreate $(TEST_SUITE_LOG). Mention
+ lazy mode in the summary output.
+ * tests/parallel-tests.test: Test LAZY_TEST_SUITE semantics.
+
+2009-03-10 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ Fix parallel-tests with empty $(TESTS) for BSD make.
+ * lib/am/check.am [PARALLEL_TESTS] ($(TEST_SUITE_LOG)): Ignore
+ empty line stemming from empty $(TEST_LOGS), to avoid counting
+ zero tests as one.
+ (check-TESTS): If `$(TESTS)' is empty, override TEST_LOGS to be
+ empty, rather than `.log', for BSD make.
+ * tests/parallel-tests6.test: New test.
+ * tests/Makefile.am: Update.
+
+ Mark check-html and check-TESTS as recursive for BSD make.
+ * lib/am/check.am [PARALLEL_TESTS] (.MAKE): Add check-TESTS
+ and check-html prerequisites.
+
+ Match XFAIL_TESTS correctly with Solaris make.
+ * lib/am/check.am [PARALLEL_TESTS]: VPATH rewriting may have
+ changed test names, so srcdir needs to be taken into account
+ explicitly when checking against the list of tests expected
+ to fail. Fixes spurious FAILures from XFAIL_TESTS.
+
+ Use append mode to capture parallel test output.
+ * tests/lisp8.test: Use append mode for output from `make -j',
+ to avoid dropped lines.
+ * tests/parallel-tests3.test: Likewise.
+
+ parallel-tests: Fix summary output.
+ * lib/am/check.am (am__text_box): Fix unportable sed script,
+ replacing `\n' in the right hand side of an `s' command with
+ a literal newline. Kudos to Bruno Haible for the newline idea.
+ * tests/parallel-tests.test: Update test to expose this.
+
+2009-03-08 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ Overhaul of tests/README.
+ * tests/README: General overhaul. Mention parallel test suite
+ execution, the test-suite.log file; document `Exit' vs. `exit',
+ `defs' vs. `defs-p', the naming of `parallel-tests' tests.
+ * README: Simplify, point to tests/README.
+
+ Documentation for the parallel-tests driver.
+ * doc/automake.texi (Tests, Options): Document the `parallel-tests'
+ option, including new features of the test driver.
+ * NEWS: Update.
+
+ New tests for `parallel-tests'.
+ * tests/parallel-tests.test: New file, to expose a bunch of
+ features of `parallel-tests': VERBOSE, clean, TEST_SUITE_LOG,
+ test dependencies, DISABLE_HARD_ERRORS.
+ * tests/parallel-tests2.test: New file, test check-html.
+ * tests/parallel-tests3.test: New file, test concurrency.
+ * tests/parallel-tests4.test: New file, test suffix rules.
+ * tests/parallel-tests5.test: New file, demonstrate compile/test
+ concurrency.
+ * tests/defs.in: Add a `required' check for rst2html.
+ * tests/Makefile.am: Update.
+
+ parallel-tests: Ensure backward-compatible semantics.
+ For each test in Automake's test suite that uses TESTS, generate
+ an identical one that uses the `parallel-tests' option, for
+ coverage of backward-compatible functionality.
+ * tests/gen-parallel-tests: New file, generates distributed
+ Makefile.am snippet tests/parallel-tests.am to list all tests
+ that use the TESTS interface but not yet the `parallel-tests'
+ option, with names mangled to use suffix `-p.test', in ...
+ (parallel_tests): ... this new make macro.
+ * tests/Makefile.am ($(srcdir)/parallel-tests.am)
+ ($(parallel_tests), defs-p): New rules.
+ (TESTS): Add check11.test and $(parallel_tests).
+ (check_SCRIPTS): Add defs-p, $(parallel_tests).
+ (check-clean-local): Remove `defs-p'.
+ (EXTRA_DIST): Distribute gen-parallel-tests.
+ (MAINTAINERCLEANFILES): New variable, remove $(parallel_tests).
+ * bootstrap: Generate parallel-tests.am.
+ * tests/check8.test: Check for circular dependencies in rules.
+ * tests/check11.test: New test, check that SKIPs are not counted
+ as passed tests.
+ * tests/defs.in: Unset DISABLE_HARD_ERRORS, LAZY_TEST_SUITE,
+ VERBOSE, so the tests are not influenced by the way our test
+ suite is invoked.
+
+2009-03-08 Akim Demaille <akim@lrde.epita.fr>
+ Jim Meyering <jim@meyering.net>
+ Benoit Sigoure <tsuna@lrde.epita.fr>
+ Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ Parallel test execution: new option `parallel-tests'.
+ * automake.in (handle_tests): Set new conditional PARALLEL_TESTS
+ when reading check.am. Handle option `parallel-tests' and all
+ its new semantics. Define macros TEST_SUFFIXES, TEST_SUITE_LOG,
+ TEST_SUITE_HTML, TEST_LOGS, TEST_LOGS_TMP, suffix rules if
+ applicable, and per-target rules for other tests. Add all log
+ files to %clean_files at the `MOSTLY_CLEAN' level.
+ * lib/Automake/Options.pm (_process_option_list): Accept
+ `parallel-tests'.
+ * lib/am/check.am [!PARALLEL_TESTS] (check-TESTS): Move existing
+ testsuite driver under this new conditional.
+ [PARALLEL_TESTS]
+ (am__rst_title, am__rst_section, am__text_box am__sh_e_setup)
+ (am__check_pre, am__check_post): New internal macros.
+ ($(TEST_SUITE_LOG), check-TESTS, .log.html, check-html): New
+ rules.
+ * lib/am/check2.am: New file.
+ * lib/am/Makefile.am (dist_am_DATA): Add check2.am.
+ * tests/Makefile.am (AUTOMAKE_OPTIONS): Use `parallel-tests'.
+ (clean-local): Renamed from distclean-local.
+ * tests/defs.in: Drop VERBOSE handling, not needed here any more.
+
+2009-03-12 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ Rename `silent' mode to `silent-rules' mode.
+ * automake.in (define_verbose_var, verbose_flag)
+ (define_verbose_tagvar, handle_options, handle_languages)
+ (handle_configure, parse_arguments): Rename the `silent' option
+ to `silent-rules', so it coincides with the `--silent-rules'
+ command line option; adjust all code and comments.
+ * lib/Automake/Options.pm (_process_option_list): Likewise.
+ * doc/automake.texi (Invoking Automake, Libtool Flags, Options):
+ Likewise.
+ * NEWS: Adjust.
+ * tests/dollarvar.test, tests/silent.test, tests/silent2.test,
+ tests/silent3.test, tests/silent4.test, tests/silent5.test,
+ tests/silent6.test, tests/silent7.test: Likewise.
+ Suggestion by Jan Engelhardt.
+
+2009-03-11 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ `silent' mode unconditionally overrides portability-recursive.
+ * automake.in (parse_arguments): Don't handle a global `silent'
+ option here; instead, ...
+ (handle_options): ... handle the "normal" `silent' option here.
+ Override `portability-recursive' here, at the last point we deal
+ with options, instead ...
+ * lib/Automake/Options.pm (_process_option_list): ... of here.
+ * tests/silent6.test: Replace unportable make snippet, remove
+ FIXME note, add more test cases of options passed in the various
+ locations.
+
+ Drop extra line from compile rules when `silent' is not used.
+ * lib/am/depend2.am [!%FASTDEP%]: Only use the `%VERBOSE%
+ @AM_BACKSLASH@' extra line if ?VERBOSE?.
+ Report by Ralf Corsepius.
+
+2009-03-10 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ Keep `--silent-rules' across triggered automake reruns.
+ * automake.in (usage): Reformat to be a bit clearer.
+ (handle_configure): Remove substitutions %STRICTNESS% and
+ %USE-DEPS% in favor of a new substitution %AUTOMAKE-OPTIONS%
+ that carries over all needed flags.
+ * lib/am/configure.am (%MAKEFILE-IN%): Adjust rule.
+ * tests/flavor.test: New test, to ensure --$flavor (gnu,
+ gnits, foreign, cygnus), --ignore-deps, and --silent-rules are
+ preserved across automake reruns.
+ * tests/Makefile.am: Update.
+
+2009-03-09 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ Provide variables for silencing of user rules.
+ * automake.in (handle_languages): Always define `AM_V_GEN' and
+ `AM_V_at'.
+ * doc/automake.texi (Options): Document these flags.
+ * tests/silent7.test: New test.
+ * tests/Makefile.am: Update.
+
+ Redo variable naming for `silent' machinery.
+ The public variables are named `AM_V_' plus the compiler
+ short-hand now, e.g.: AM_V_CC, AM_V_CXXLD, AM_V_GEN. The
+ dispatch variables are internal details and begin with
+ `am__v_'.
+ * automake.in (verbose_var): Update comment.
+ (verbose_private_var): New function. Order functions so that
+ ones not needed outside this section are listed first.
+ (verbose_dispatch): Remove, no need to factor this.
+ (define_verbose_var, define_verbose_libtool): Use
+ verbose_private_var.
+ (define_verbose_tagvar): Likewise; and simplify.
+ Report by Jan Engelhardt.
+
+ Let -Wportability turn on/off the portability-recursive channel.
+ * lib/Automake/ChannelDefs.pm (switch_warning): switch
+ `portability-recursive' channel as well if changing the
+ `portability' channel.
+ * tests/dollarvar2.test: New test.
+ * tests/Makefile.am: Update.
+
+2009-03-07 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ New automake command line option `--silent-rules'.
+ * automake.in (parse_arguments): Accept `--silent-rules; let it
+ override command line warning settings.
+ (usage): Document it.
+ * doc/automake.texi (Invoking Automake): Document it.
+ * NEWS: Update.
+ * tests/dollarvar.test: Also test `--silent-rules'.
+ * tests/pr300-ltlib.test: Use `$MAKE V=1' to enable verbose
+ output, which is matched later in the test.
+ * tests/silent6.test: New test.
+ * tests/Makefile.am: Update.
+
+ Documentation and tests for the `silent' option.
+ * NEWS: Update.
+ * doc/automake.texi (Invoking Automake): `silent' turns off some
+ portability warnings.
+ (Libtool Flags): `silent' silences libtool.
+ (Options): Document the `silent' flag.
+ * tests/dollarvar.test, tests/silent.test, tests/silent2.test,
+ tests/silent3.test, tests/silent4.test, tests/silent5.test: New
+ tests.
+ * tests/Makefile.am: Update.
+ * Makefile.am (maintainer-check): Ignore `DESTDIR' and `V' when
+ checking for make variables that should not be overridden from
+ the command line.
+
+2009-03-07 Jan Engelhardt <jengelh@medozas.de>
+ Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ Implement `silent' build rules.
+ * automake.in (ccer): New field in the language structure.
+ Initialize it for all registered languages.
+ (verbose_var, verbose_flag, verbose_dispatch)
+ (silent_flag, define_verbose_var, define_verbose_tagvar)
+ (define_verbose_libtool): New functions.
+ (handle_languages, handle_programs, handle_libraries)
+ (handle_ltlibraries, handle_configure)
+ (define_compiler_variable, define_linker_variable)
+ (define_per_target_linker_variable): Use them where appropriate
+ to define variables to implement the silent output machinery.
+ * lib/Automake/Options.pm (_process_option_list): Accept
+ `silent', turning off `portability-recursive'.
+ * lib/am/depend2.am: Add %VERBOSE% and %SILENT% prefixes where
+ appropriate.
+ * lib/am/lex.am: Likewise.
+ * lib/am/library.am: Likewise.
+ * lib/am/ltlibrary.am: Likewise.
+ * lib/am/program.am: Likewise.
+ * lib/am/yacc.am: Likewise.
+ * m4/init.m4 (AM_INIT_AUTOMAKE): Substitute, but do not define,
+ AM_BACKSLASH.
+ * tests/defs.in: Unset `V', to avoid influencing inner tests.
+
+2009-03-07 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ New channel `portability-recursive'.
+ Add new channel for portability warnings about recursive make
+ variable expansions `$(var1$(var2))'. Enable it alongside
+ `-Wportability'.
+ * lib/Automake/ChannelDefs.pm (Automake::ChannelDefs): Register
+ channel `portability-recursive'.
+ * lib/Automake/Variable.pm (_VARIABLE_CHARACTERS)
+ (_VARIABLE_RECURSIVE_PATTERN): New variables.
+ (check_variable_expansions): Diagnose recursive variable
+ expansions through the new channel.
+
2009-03-14 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
* NEWS: Update.
## Makefile for Automake.
## Copyright (C) 1995, 1996, 1997, 1998, 1999, 2001, 2002, 2003, 2004,
-## 2005, 2006, 2007, 2008 Free Software Foundation, Inc.
+## 2005, 2006, 2007, 2008, 2009 Free Software Foundation, Inc.
## This program is free software; you can redistribute it and/or modify
## it under the terms of the GNU General Public License as published by
# Some simple checks, and then ordinary check. These are only really
# guaranteed to work on my machine.
- maintainer-check: automake aclocal
+ syntax_check_rules = \
+ sc_diff_automake_in_automake \
+ sc_perl_syntax \
+ sc_no_brace_variable_expansions \
+ sc_rm_minus_f \
+ sc_no_for_variable_in_macro \
+ sc_mkinstalldirs \
+ sc_pre_normal_post_install_uninstall \
+ sc_perl_no_undef \
+ sc_perl_no_split_regex_space \
+ sc_cd_in_backquotes \
+ sc_cd_relative_dir \
+ sc_perl_at_uscore_in_scalar_context \
+ sc_perl_local_no_parens \
+ sc_perl_local \
+ sc_AMDEP_TRUE_in_automake_in \
+ sc_tests_make_without_am_makeflags \
+ sc_tests_plain_make \
+ sc_tests_plain_autoconf \
+ sc_tests_plain_autoupdate \
+ sc_tests_plain_automake \
+ sc_tests_here_document_format \
+ sc_tests_Exit_not_exit \
+ sc_tests_automake_fails \
+ sc_tests_plain_aclocal \
+ sc_tests_plain_perl \
+ sc_tests_required_after_defs \
+ sc_tests_overriding_macros_on_cmdline \
+ sc_tests_plain_sleep \
+ sc_tests_plain_egrep_fgrep \
+ sc_mkdir_p \
+ sc_perl_at_substs \
+ sc_unquoted_DESTDIR \
+ sc_tabs_in_texi \
+ sc_at_in_texi
+
+ .PHONY: $(syntax_check_rules)
+ $(syntax_check_rules): automake aclocal
+ maintainer-check: $(syntax_check_rules)
+
## This check avoids accidental configure substitutions in the source.
## There are exactly 6 lines that should be modified. This works out
## to 22 lines of diffs.
+ sc_diff_automake_in_automake:
@if test `diff $(srcdir)/automake.in automake | wc -l` -ne 22; then \
echo "found too many diffs between automake.in and automake"; 1>&2; \
diff -c $(srcdir)/automake.in automake; \
exit 1; \
fi
+
## Syntax check with default Perl (on my machine, Perl 5).
+ sc_perl_syntax:
perllibdir="./lib$(PATH_SEPARATOR)$(srcdir)/lib" $(PERL) -c -w automake
perllibdir="./lib$(PATH_SEPARATOR)$(srcdir)/lib" $(PERL) -c -w aclocal
+
## expect no instances of '${...}'. However, $${...} is ok, since that
## is a shell construct, not a Makefile construct.
+ sc_no_brace_variable_expansions:
@if grep -F '$${' $(srcdir)/lib/am/[a-z]*.am | \
grep -F -v '$$$$'; then \
echo "Found too many uses of '\$${' in the lines above." 1>&2; \
exit 1; \
else :; fi
+
## Make sure `rm' is called with `-f'.
+ sc_rm_minus_f:
@if grep -v '^#' $(srcdir)/lib/am/[a-z]*.am $(srcdir)/tests/*.test | \
grep -E '\<rm ([^-]|\-[^f ]*\>)'; then \
echo "Suspicious 'rm' invocation." 1>&2; \
exit 1; \
else :; fi
+
## Never use something like `for file in $(FILES)', this doesn't work
## if FILES is empty or if it contains shell meta characters (e.g. $ is
## commonly used in Java filenames).
+ sc_no_for_variable_in_macro:
@if grep 'for .* in \$$(' $(srcdir)/lib/am/[a-z]*.am; then \
echo 'Use "list=$$(mumble); for var in $$$$list".' 1>&2 ; \
exit 1; \
else :; fi
+
## Make sure all invocations of mkinstalldirs are correct.
+ sc_mkinstalldirs:
@if grep -n 'mkinstalldirs' $(srcdir)/lib/am/[a-z]*.am | \
grep -F -v '$$(mkinstalldirs)'; then \
echo "Found incorrect use of mkinstalldirs in the lines above" 1>&2; \
exit 1; \
else :; fi
+
## Make sure all calls to PRE/NORMAL/POST_INSTALL/UNINSTALL
+ sc_pre_normal_post_install_uninstall:
@if grep -E -n '\((PRE|NORMAL|POST)_(|UN)INSTALL\)' \
$(srcdir)/lib/am/[a-z]*.am | \
grep -v ':##' | grep -v ': @\$$('; then \
echo "Found incorrect use of PRE/NORMAL/POST_INSTALL/UNINSTALL in the lines above" 1>&2; \
exit 1; \
else :; fi
+
## We never want to use "undef", only "delete", but for $/.
+ sc_perl_no_undef:
@if grep -n -w 'undef ' $(srcdir)/automake.in | \
grep -F -v 'undef $$/'; then \
echo "Found undef in automake.in; use delete instead" 1>&2; \
exit 1; \
fi
+
## We never want split (/ /,...), only split (' ', ...).
+ sc_perl_no_split_regex_space:
@if grep -n 'split (/ /' $(srcdir)/automake.in; then \
echo "Found bad split in the lines above." 1>&2; \
exit 1; \
fi
+
## Look for cd within backquotes
+ sc_cd_in_backquotes:
@if grep -n '^[^#]*` *cd ' $(srcdir)/automake.in \
$(srcdir)/lib/am/*.am; then \
echo "Consider using \$$(am__cd) in the lines above." 1>&2; \
exit 1; \
fi
+
## Look for cd to a relative directory (may be influenced by CDPATH).
## Skip some known directories that are OK.
+ sc_cd_relative_dir:
@if grep -n '^[^#]*cd ' $(srcdir)/automake.in \
$(srcdir)/lib/am/*.am | \
grep -v 'echo.*cd ' | \
echo "Consider using \$$(am__cd) in the lines above." 1>&2; \
exit 1; \
fi
+
## Using @_ in a scalar context is most probably a programming error.
+ sc_perl_at_uscore_in_scalar_context:
@if grep -Hn '[^@_A-Za-z0-9][_A-Za-z0-9]*[^) ] *= *@_' $(srcdir)/automake.in; then \
echo "Using @_ in a scalar context in the lines above." 1>&2; \
exit 1; \
fi
+
## Forbid using parens with `local' to ease counting.
+ sc_perl_local_no_parens:
@if grep '^[ \t]*local *(' $(srcdir)/automake.in; then \
echo "Don't use \`local' with parens: use several \`local' above." >&2; \
exit 1; \
fi
+
## Allow only `local $_' in Automake.
+ sc_perl_local:
@if grep -v '^[ \t]*local \$$_;' $(srcdir)/automake.in | \
grep '^[ \t]*local [^*]'; then \
echo "Please avoid \`local'." 1>&2; \
exit 1; \
fi
+
## Don't let AMDEP_TRUE substitution appear in automake.in.
+ sc_AMDEP_TRUE_in_automake_in:
@if grep '@AMDEP''_TRUE@' $(srcdir)/automake.in; then \
echo "Don't put AMDEP_TRUE substitution in automake.in" 1>&2; \
exit 1; \
fi
+
## Tests should never call make directly.
+ sc_tests_make_without_am_makeflags:
@if grep '^[^#].*(MAKE) ' $(srcdir)/lib/am/*.am $(srcdir)/automake.in |\
grep -v 'AM_MAKEFLAGS'; then \
echo 'Use $$(MAKE) $$(AM_MAKEFLAGS).' 1>&2; \
exit 1; \
fi
+
## Tests should never call make directly.
+ sc_tests_plain_make:
@if grep -v '^#' $(srcdir)/tests/*.test | grep ':[ ]*make'; then \
echo 'Do not run "make" in the above tests. Use "$$MAKE" instead.' 1>&2; \
exit 1; \
fi
+
## Tests should never call autoconf directly.
+ sc_tests_plain_autoconf:
@if grep -v '^#' $(srcdir)/tests/*.test | grep ':[ ]*autoconf'; then \
echo 'Do not run "autoconf" in the above tests. Use "$$AUTOCONF" instead.' 1>&2; \
exit 1; \
fi
+
## Tests should never call autoupdate directly.
+ sc_tests_plain_autoupdate:
@if grep -v '^#' $(srcdir)/tests/*.test | grep ':[ ]*autoupdate'; then \
echo 'Do not run "autoupdate" in the above tests. Use "$$AUTOUPDATE" instead.' 1>&2; \
exit 1; \
fi
+
## Tests should never call automake directly.
+ sc_tests_plain_automake:
@if grep -v '^#' $(srcdir)/tests/*.test | grep -E ':[ ]*automake([^:]|$$)'; then \
echo 'Do not run "automake" in the above tests. Use "$$AUTOMAKE" instead.' 1>&2; \
exit 1; \
fi
+
## Tests should only use END and EOF for here documents
## (so that the next test is effective).
+ sc_tests_here_document_format:
@if grep '<<' $(srcdir)/tests/*.test | grep -v 'END' | grep -v 'EOF'; then \
echo 'Use here documents with "END" and "EOF" only, for greppability.' 1>&2; \
exit 1; \
fi
+
## Tests should never call exit directly, but use Exit.
## This is so that the exit status is transported correctly across the 0 trap.
## Ignore comments, and ignore one perl line in ext2.test.
+ sc_tests_Exit_not_exit:
@found=false; for file in $(srcdir)/tests/*.test; do \
res=`sed -n '/^#/d; /^\$$PERL/d; /<<.*END/,/^END/{b;}; /<<.*EOF/,/^EOF/{b;}; /exit [$$0-9]/p' $$file`; \
if test -n "$$res"; then \
echo 'Do not call plain "exit", use "Exit" instead, in above tests.' 1>&2; \
exit 1; \
fi
+
## Use AUTOMAKE_fails when appropriate
+ sc_tests_automake_fails:
@if grep -v '^#' $(srcdir)/tests/*.test | grep '\$$AUTOMAKE.*&&.*[eE]xit'; then \
echo 'Use AUTOMAKE_fails + grep to catch automake failures in the above tests.' 1>&2; \
exit 1; \
fi
+
## Tests should never call aclocal directly.
+ sc_tests_plain_aclocal:
@if grep -v '^#' $(srcdir)/tests/*.test | grep ':[ ]*aclocal'; then \
echo 'Do not run "aclocal" in the above tests. Use "$$ACLOCAL" instead.' 1>&2; \
exit 1; \
fi
+
## Tests should never call perl directly.
+ sc_tests_plain_perl:
@if grep -v '^#' $(srcdir)/tests/*.test | grep ':[ ]*perl'; then \
echo 'Do not run "perl" in the above tests. Use "$$PERL" instead.' 1>&2; \
exit 1; \
fi
+
## Setting `required' after sourcing `./defs' is a bug.
+ sc_tests_required_after_defs:
@for file in $(srcdir)/tests/*.test; do \
if out=`sed -n '/defs/,$${/required=/p;}' $$file`; test -n "$$out"; then \
echo 'Do not set "required" after sourcing "defs" in '"$$file: $$out" 1>&2; \
exit 1; \
fi; \
done
+
## Overriding a Makefile macro on the command line is not portable when
## recursive targets are used. Better use an envvar. SHELL is an exception,
-## POSIX says it can't come from the environment. DESTDIRS is an exception,
-## too, as package authors are urged not to intitialize this anywhere.
+## POSIX says it can't come from the environment. V and DESTDIRS are exceptions,
- ## too, as package authors are urged not to intitialize this anywhere.
++## too, as package authors are urged not to initialize them anywhere.
+ sc_tests_overriding_macros_on_cmdline:
@if grep -E '\$$MAKE .*(SHELL=.*=|=.*SHELL=)' $(srcdir)/tests/*.test; then \
echo 'Rewrite "$$MAKE foo=bar SHELL=$$SHELL" as "foo=bar $$MAKE -e SHELL=$$SHELL"' 1>&2; \
echo ' in the above lines, it is more portable.' 1>&2; \
exit 1; \
fi
- @if sed 's/DESTDIR=[^ ]*//; s/SHELL=[^ ]*//' $(srcdir)/tests/*.test | \
- grep '\$$MAKE .*=' ; then \
+ @if sed 's/DESTDIR=[^ ]*//; s/SHELL=[^ ]*//; s/V=[^ ]*//' $(srcdir)/tests/*.test | \
+ grep '\$$MAKE .*=' ; then \
echo 'Rewrite "$$MAKE foo=bar" as "foo=bar $$MAKE -e" in the above lines,' 1>&2; \
echo 'it is more portable.' 1>&2; \
exit 1; \
echo 'the above lines.' 1>&2; \
exit 1; \
fi
+
## Never use `sleep 1' to create files with different timestamps.
## Use `$sleep' instead. Some filesystems (e.g., Windows') have only
## a 2sec resolution.
+ sc_tests_plain_sleep:
@if grep -E '\bsleep +[12345]\b' $(srcdir)/tests/*.test; then \
echo 'Do not use "sleep x" in the above tests. Use "$$sleep" instead.' 1>&2; \
exit 1; \
fi
+
## fgrep and egrep are not required by POSIX.
+ sc_tests_plain_egrep_fgrep:
@if grep -E '\b[ef]grep\b' $(srcdir)/tests/*.test ; then \
echo 'Do not use egrep or fgrep in test cases. Use $$FGREP or $$EGREP.' 1>&2; \
exit 1; \
echo 'Do not use egrep or fgrep in the above files, they are not portable.' 1>&2; \
exit 1; \
fi
+
+ sc_mkdir_p:
@if grep 'mkdir_p' $(srcdir)/automake.in \
$(srcdir)/lib/am/*.am $(srcdir)/tests/*.test; then \
echo 'Do not use mkdir_p in the above files, use MKDIR_P.' 1>&2; \
exit 1; \
fi
+
## Try to make sure all @...@ substitutions are covered by our
## substitution rule.
+ sc_perl_at_substs:
@if test `grep -E '^[^#]*@[A-Za-z_0-9]+@' aclocal | wc -l` -ne 0; then \
echo "Unresolved @...@ substitution in aclocal" 1>&2; \
exit 1; \
@if test `grep -E '^[^#]*@[A-Za-z_0-9]+@' automake | wc -l` -ne 0; then \
echo "Unresolved @...@ substitution in automake" 1>&2; \
exit 1; \
- fi; \
- if grep -E "[^\'\"]\\\$$\(DESTDIR" $(srcdir)/lib/am/*.am; then \
+ fi
+
+ sc_unquoted_DESTDIR:
+ @if grep -E "[^\'\"]\\\$$\(DESTDIR" $(srcdir)/lib/am/*.am; then \
echo 'Suspicious unquoted DESTDIR uses.' 1>&2 ; \
exit 1; \
fi
+
+ sc_tabs_in_texi:
@if grep ' ' $(srcdir)/doc/automake.texi; then \
echo 'Do not use tabs in the manual.' 1>&2; \
exit 1; \
fi
+
+ sc_at_in_texi:
@if grep -E '([^@]|^)@([ ][^@]|$$)' $(srcdir)/doc/automake.texi; \
then \
echo 'Unescaped @.' 1>&2; \
ps-recursive uninstall-recursive
RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \
distclean-recursive maintainer-clean-recursive
+ AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \
+ $(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \
+ distdir dist dist-all distcheck
ETAGS = etags
CTAGS = ctags
DIST_SUBDIRS = $(SUBDIRS)
-e 's,[@]configure_input[@],Generated from $@.in; do not edit by hand.,g' \
-e 's,[@]datadir[@],$(datadir),g'
+
+ # Some simple checks, and then ordinary check. These are only really
+ # guaranteed to work on my machine.
+ syntax_check_rules = \
+ sc_diff_automake_in_automake \
+ sc_perl_syntax \
+ sc_no_brace_variable_expansions \
+ sc_rm_minus_f \
+ sc_no_for_variable_in_macro \
+ sc_mkinstalldirs \
+ sc_pre_normal_post_install_uninstall \
+ sc_perl_no_undef \
+ sc_perl_no_split_regex_space \
+ sc_cd_in_backquotes \
+ sc_cd_relative_dir \
+ sc_perl_at_uscore_in_scalar_context \
+ sc_perl_local_no_parens \
+ sc_perl_local \
+ sc_AMDEP_TRUE_in_automake_in \
+ sc_tests_make_without_am_makeflags \
+ sc_tests_plain_make \
+ sc_tests_plain_autoconf \
+ sc_tests_plain_autoupdate \
+ sc_tests_plain_automake \
+ sc_tests_here_document_format \
+ sc_tests_Exit_not_exit \
+ sc_tests_automake_fails \
+ sc_tests_plain_aclocal \
+ sc_tests_plain_perl \
+ sc_tests_required_after_defs \
+ sc_tests_overriding_macros_on_cmdline \
+ sc_tests_plain_sleep \
+ sc_tests_plain_egrep_fgrep \
+ sc_mkdir_p \
+ sc_perl_at_substs \
+ sc_unquoted_DESTDIR \
+ sc_tabs_in_texi \
+ sc_at_in_texi
+
WGET = wget
WGET_SV_CVS = $(WGET) http://savannah.gnu.org/cgi-bin/viewcvs/~checkout~/
WGET_SV_GIT_CF = $(WGET) 'http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;hb=HEAD;f='
@for dep in $?; do \
case '$(am__configure_deps)' in \
*$$dep*) \
- echo ' cd $(srcdir) && $(AUTOMAKE) --gnu '; \
- $(am__cd) $(srcdir) && $(AUTOMAKE) --gnu \
+ echo ' cd $(srcdir) && $(AUTOMAKE) --gnu'; \
+ $(am__cd) $(srcdir) && $(AUTOMAKE) --gnu \
&& exit 0; \
exit 1;; \
esac; \
done; \
- echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu Makefile'; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu Makefile'; \
$(am__cd) $(top_srcdir) && \
- $(AUTOMAKE) --gnu Makefile
+ $(AUTOMAKE) --gnu Makefile
.PRECIOUS: Makefile
Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
@case '$?' in \
install-binSCRIPTS: $(bin_SCRIPTS)
@$(NORMAL_INSTALL)
test -z "$(bindir)" || $(MKDIR_P) "$(DESTDIR)$(bindir)"
- @list='$(bin_SCRIPTS)'; \
+ @list='$(bin_SCRIPTS)'; test -n "$(bindir)" || list=; \
for p in $$list; do \
if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
if test -f "$$d$$p"; then echo "$$d$$p"; echo "$$p"; else :; fi; \
uninstall-binSCRIPTS:
@$(NORMAL_UNINSTALL)
- @list='$(bin_SCRIPTS)'; \
+ @list='$(bin_SCRIPTS)'; test -n "$(bindir)" || exit 0; \
files=`for p in $$list; do echo "$$p"; done | \
sed -e 's,.*/,,;$(transform)'`; \
test -n "$$list" || exit 0; \
if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
if test -d $$d/$$file; then \
dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test -d "$(distdir)/$$file"; then \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
- cp -pR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
fi; \
- cp -pR $$d/$$file "$(distdir)$$dir" || exit 1; \
+ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
else \
test -f "$(distdir)/$$file" \
|| cp -p $$d/$$file "$(distdir)/$$file" \
dist-hook:
cd $(distdir)/tests && chmod a+rx *.test
- # Some simple checks, and then ordinary check. These are only really
- # guaranteed to work on my machine.
- maintainer-check: automake aclocal
+ .PHONY: $(syntax_check_rules)
+ $(syntax_check_rules): automake aclocal
+ maintainer-check: $(syntax_check_rules)
+
+ sc_diff_automake_in_automake:
@if test `diff $(srcdir)/automake.in automake | wc -l` -ne 22; then \
echo "found too many diffs between automake.in and automake"; 1>&2; \
diff -c $(srcdir)/automake.in automake; \
exit 1; \
fi
+
+ sc_perl_syntax:
perllibdir="./lib$(PATH_SEPARATOR)$(srcdir)/lib" $(PERL) -c -w automake
perllibdir="./lib$(PATH_SEPARATOR)$(srcdir)/lib" $(PERL) -c -w aclocal
+
+ sc_no_brace_variable_expansions:
@if grep -F '$${' $(srcdir)/lib/am/[a-z]*.am | \
grep -F -v '$$$$'; then \
echo "Found too many uses of '\$${' in the lines above." 1>&2; \
exit 1; \
else :; fi
+
+ sc_rm_minus_f:
@if grep -v '^#' $(srcdir)/lib/am/[a-z]*.am $(srcdir)/tests/*.test | \
grep -E '\<rm ([^-]|\-[^f ]*\>)'; then \
echo "Suspicious 'rm' invocation." 1>&2; \
exit 1; \
else :; fi
+
+ sc_no_for_variable_in_macro:
@if grep 'for .* in \$$(' $(srcdir)/lib/am/[a-z]*.am; then \
echo 'Use "list=$$(mumble); for var in $$$$list".' 1>&2 ; \
exit 1; \
else :; fi
+
+ sc_mkinstalldirs:
@if grep -n 'mkinstalldirs' $(srcdir)/lib/am/[a-z]*.am | \
grep -F -v '$$(mkinstalldirs)'; then \
echo "Found incorrect use of mkinstalldirs in the lines above" 1>&2; \
exit 1; \
else :; fi
+
+ sc_pre_normal_post_install_uninstall:
@if grep -E -n '\((PRE|NORMAL|POST)_(|UN)INSTALL\)' \
$(srcdir)/lib/am/[a-z]*.am | \
grep -v ':##' | grep -v ': @\$$('; then \
echo "Found incorrect use of PRE/NORMAL/POST_INSTALL/UNINSTALL in the lines above" 1>&2; \
exit 1; \
else :; fi
+
+ sc_perl_no_undef:
@if grep -n -w 'undef ' $(srcdir)/automake.in | \
grep -F -v 'undef $$/'; then \
echo "Found undef in automake.in; use delete instead" 1>&2; \
exit 1; \
fi
+
+ sc_perl_no_split_regex_space:
@if grep -n 'split (/ /' $(srcdir)/automake.in; then \
echo "Found bad split in the lines above." 1>&2; \
exit 1; \
fi
+
+ sc_cd_in_backquotes:
@if grep -n '^[^#]*` *cd ' $(srcdir)/automake.in \
$(srcdir)/lib/am/*.am; then \
echo "Consider using \$$(am__cd) in the lines above." 1>&2; \
exit 1; \
fi
+
+ sc_cd_relative_dir:
@if grep -n '^[^#]*cd ' $(srcdir)/automake.in \
$(srcdir)/lib/am/*.am | \
grep -v 'echo.*cd ' | \
echo "Consider using \$$(am__cd) in the lines above." 1>&2; \
exit 1; \
fi
+
+ sc_perl_at_uscore_in_scalar_context:
@if grep -Hn '[^@_A-Za-z0-9][_A-Za-z0-9]*[^) ] *= *@_' $(srcdir)/automake.in; then \
echo "Using @_ in a scalar context in the lines above." 1>&2; \
exit 1; \
fi
+
+ sc_perl_local_no_parens:
@if grep '^[ \t]*local *(' $(srcdir)/automake.in; then \
echo "Don't use \`local' with parens: use several \`local' above." >&2; \
exit 1; \
fi
+
+ sc_perl_local:
@if grep -v '^[ \t]*local \$$_;' $(srcdir)/automake.in | \
grep '^[ \t]*local [^*]'; then \
echo "Please avoid \`local'." 1>&2; \
exit 1; \
fi
+
+ sc_AMDEP_TRUE_in_automake_in:
@if grep '@AMDEP''_TRUE@' $(srcdir)/automake.in; then \
echo "Don't put AMDEP_TRUE substitution in automake.in" 1>&2; \
exit 1; \
fi
+
+ sc_tests_make_without_am_makeflags:
@if grep '^[^#].*(MAKE) ' $(srcdir)/lib/am/*.am $(srcdir)/automake.in |\
grep -v 'AM_MAKEFLAGS'; then \
echo 'Use $$(MAKE) $$(AM_MAKEFLAGS).' 1>&2; \
exit 1; \
fi
+
+ sc_tests_plain_make:
@if grep -v '^#' $(srcdir)/tests/*.test | grep ':[ ]*make'; then \
echo 'Do not run "make" in the above tests. Use "$$MAKE" instead.' 1>&2; \
exit 1; \
fi
+
+ sc_tests_plain_autoconf:
@if grep -v '^#' $(srcdir)/tests/*.test | grep ':[ ]*autoconf'; then \
echo 'Do not run "autoconf" in the above tests. Use "$$AUTOCONF" instead.' 1>&2; \
exit 1; \
fi
+
+ sc_tests_plain_autoupdate:
@if grep -v '^#' $(srcdir)/tests/*.test | grep ':[ ]*autoupdate'; then \
echo 'Do not run "autoupdate" in the above tests. Use "$$AUTOUPDATE" instead.' 1>&2; \
exit 1; \
fi
+
+ sc_tests_plain_automake:
@if grep -v '^#' $(srcdir)/tests/*.test | grep -E ':[ ]*automake([^:]|$$)'; then \
echo 'Do not run "automake" in the above tests. Use "$$AUTOMAKE" instead.' 1>&2; \
exit 1; \
fi
+
+ sc_tests_here_document_format:
@if grep '<<' $(srcdir)/tests/*.test | grep -v 'END' | grep -v 'EOF'; then \
echo 'Use here documents with "END" and "EOF" only, for greppability.' 1>&2; \
exit 1; \
fi
+
+ sc_tests_Exit_not_exit:
@found=false; for file in $(srcdir)/tests/*.test; do \
res=`sed -n '/^#/d; /^\$$PERL/d; /<<.*END/,/^END/{b;}; /<<.*EOF/,/^EOF/{b;}; /exit [$$0-9]/p' $$file`; \
if test -n "$$res"; then \
echo 'Do not call plain "exit", use "Exit" instead, in above tests.' 1>&2; \
exit 1; \
fi
+
+ sc_tests_automake_fails:
@if grep -v '^#' $(srcdir)/tests/*.test | grep '\$$AUTOMAKE.*&&.*[eE]xit'; then \
echo 'Use AUTOMAKE_fails + grep to catch automake failures in the above tests.' 1>&2; \
exit 1; \
fi
+
+ sc_tests_plain_aclocal:
@if grep -v '^#' $(srcdir)/tests/*.test | grep ':[ ]*aclocal'; then \
echo 'Do not run "aclocal" in the above tests. Use "$$ACLOCAL" instead.' 1>&2; \
exit 1; \
fi
+
+ sc_tests_plain_perl:
@if grep -v '^#' $(srcdir)/tests/*.test | grep ':[ ]*perl'; then \
echo 'Do not run "perl" in the above tests. Use "$$PERL" instead.' 1>&2; \
exit 1; \
fi
+
+ sc_tests_required_after_defs:
@for file in $(srcdir)/tests/*.test; do \
if out=`sed -n '/defs/,$${/required=/p;}' $$file`; test -n "$$out"; then \
echo 'Do not set "required" after sourcing "defs" in '"$$file: $$out" 1>&2; \
exit 1; \
fi; \
done
+
+ sc_tests_overriding_macros_on_cmdline:
@if grep -E '\$$MAKE .*(SHELL=.*=|=.*SHELL=)' $(srcdir)/tests/*.test; then \
echo 'Rewrite "$$MAKE foo=bar SHELL=$$SHELL" as "foo=bar $$MAKE -e SHELL=$$SHELL"' 1>&2; \
echo ' in the above lines, it is more portable.' 1>&2; \
exit 1; \
fi
- @if sed 's/DESTDIR=[^ ]*//; s/SHELL=[^ ]*//' $(srcdir)/tests/*.test | \
- grep '\$$MAKE .*=' ; then \
+ @if sed 's/DESTDIR=[^ ]*//; s/SHELL=[^ ]*//; s/V=[^ ]*//' $(srcdir)/tests/*.test | \
+ grep '\$$MAKE .*=' ; then \
echo 'Rewrite "$$MAKE foo=bar" as "foo=bar $$MAKE -e" in the above lines,' 1>&2; \
echo 'it is more portable.' 1>&2; \
exit 1; \
echo 'the above lines.' 1>&2; \
exit 1; \
fi
+
+ sc_tests_plain_sleep:
@if grep -E '\bsleep +[12345]\b' $(srcdir)/tests/*.test; then \
echo 'Do not use "sleep x" in the above tests. Use "$$sleep" instead.' 1>&2; \
exit 1; \
fi
+
+ sc_tests_plain_egrep_fgrep:
@if grep -E '\b[ef]grep\b' $(srcdir)/tests/*.test ; then \
echo 'Do not use egrep or fgrep in test cases. Use $$FGREP or $$EGREP.' 1>&2; \
exit 1; \
echo 'Do not use egrep or fgrep in the above files, they are not portable.' 1>&2; \
exit 1; \
fi
+
+ sc_mkdir_p:
@if grep 'mkdir_p' $(srcdir)/automake.in \
$(srcdir)/lib/am/*.am $(srcdir)/tests/*.test; then \
echo 'Do not use mkdir_p in the above files, use MKDIR_P.' 1>&2; \
exit 1; \
fi
+
+ sc_perl_at_substs:
@if test `grep -E '^[^#]*@[A-Za-z_0-9]+@' aclocal | wc -l` -ne 0; then \
echo "Unresolved @...@ substitution in aclocal" 1>&2; \
exit 1; \
@if test `grep -E '^[^#]*@[A-Za-z_0-9]+@' automake | wc -l` -ne 0; then \
echo "Unresolved @...@ substitution in automake" 1>&2; \
exit 1; \
- fi; \
- if grep -E "[^\'\"]\\\$$\(DESTDIR" $(srcdir)/lib/am/*.am; then \
+ fi
+
+ sc_unquoted_DESTDIR:
+ @if grep -E "[^\'\"]\\\$$\(DESTDIR" $(srcdir)/lib/am/*.am; then \
echo 'Suspicious unquoted DESTDIR uses.' 1>&2 ; \
exit 1; \
fi
+
+ sc_tabs_in_texi:
@if grep ' ' $(srcdir)/doc/automake.texi; then \
echo 'Do not use tabs in the manual.' 1>&2; \
exit 1; \
fi
+
+ sc_at_in_texi:
@if grep -E '([^@]|^)@([ ][^@]|$$)' $(srcdir)/doc/automake.texi; \
then \
echo 'Unescaped @.' 1>&2; \
Both install and uninstall may sometimes enter (`cd' into) the target
installation directory now, when no build-local scripts are used.
+ Both install and uninstall do not fail anymore but do nothing if an
+ installation directory variable like `bindir' is set to the empty string.
+
For built-in rules, `make install' now fails reliably if installation
of a file failed. Conversely, `make uninstall' even succeeds when
issued multiple times.
- The `color-tests' option causes colored test result output on terminals.
+ - The `parallel-tests' option enables a new test driver that allows for
+ parallel test execution, and formatted result output as RST
+ (reStructuredText) and HTML. Enabling this option may require some
+ changes to your test suite setup; see the manual for details.
+
+ - The `silent-rules' option enables Linux kernel-style silent build output.
+ This option requires the widely supported but non-POSIX `make' feature
+ of recursive variable expansion, so do not use it if your package needs
+ to build with `make' implementations that do not support it.
+ Besides the normal option setting methods, it can also be enabled
+ globally by the new automake option `--silent-rules'.
+
- New prefix `notrans_' for manpages which should not be transformed
by --program-transform.
- The default no-op recursive rules for these targets also work with BSD make
now: html, install-html, install-dvi, install-pdf, install-pdf, install-info.
+ - `make distcheck' works also when both a directory and some file below it
+ have been added to a distribution variable, such as EXTRA_DIST or *_SOURCES.
+
* Bugs introduced by 1.10:
- Fix output of dummy dependency files in presence of post-processed
# Content of the linking variable.
'link' => "\$",
+ # Name of the compiler variable (CC).
+ 'ccer' => "\$",
+
# Name of the linker variable (LD).
'lder' => "\$",
# Content of the linker variable ($(CC)).
'ansi' => 1,
'autodep' => '',
'flags' => ['CFLAGS', 'CPPFLAGS'],
+ 'ccer' => 'CC',
'compiler' => 'COMPILE',
'compile' => '$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)',
'lder' => 'CCLD',
'autodep' => 'CXX',
'flags' => ['CXXFLAGS', 'CPPFLAGS'],
'compile' => '$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS)',
+ 'ccer' => 'CXX',
'compiler' => 'CXXCOMPILE',
'compile_flag' => '-c',
'output_flag' => '-o',
'autodep' => 'OBJC',
'flags' => ['OBJCFLAGS', 'CPPFLAGS'],
'compile' => '$(OBJC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_OBJCFLAGS) $(OBJCFLAGS)',
+ 'ccer' => 'OBJC',
'compiler' => 'OBJCCOMPILE',
'compile_flag' => '-c',
'output_flag' => '-o',
'autodep' => 'UPC',
'flags' => ['UPCFLAGS', 'CPPFLAGS'],
'compile' => '$(UPC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_UPCFLAGS) $(UPCFLAGS)',
+ 'ccer' => 'UPC',
'compiler' => 'UPCCOMPILE',
'compile_flag' => '-c',
'output_flag' => '-o',
'config_vars' => ['YACC'],
'flags' => ['YFLAGS'],
'compile' => '$(YACC) $(YFLAGS) $(AM_YFLAGS)',
+ 'ccer' => 'YACC',
'compiler' => 'YACCCOMPILE',
'extensions' => ['.y'],
'output_extensions' => sub { (my $ext = $_[0]) =~ tr/y/c/;
'config_vars' => ['YACC'],
'rule_file' => 'yacc',
'flags' => ['YFLAGS'],
+ 'ccer' => 'YACC',
'compiler' => 'YACCCOMPILE',
'compile' => '$(YACC) $(YFLAGS) $(AM_YFLAGS)',
'extensions' => ['.y++', '.yy', '.yxx', '.ypp'],
'rule_file' => 'lex',
'flags' => ['LFLAGS'],
'compile' => '$(LEX) $(LFLAGS) $(AM_LFLAGS)',
+ 'ccer' => 'LEX',
'compiler' => 'LEXCOMPILE',
'extensions' => ['.l'],
'output_extensions' => sub { (my $ext = $_[0]) =~ tr/l/c/;
'rule_file' => 'lex',
'flags' => ['LFLAGS'],
'compile' => '$(LEX) $(LFLAGS) $(AM_LFLAGS)',
+ 'ccer' => 'LEX',
'compiler' => 'LEXCOMPILE',
'extensions' => ['.l++', '.ll', '.lxx', '.lpp'],
'output_extensions' => sub { (my $ext = $_[0]) =~ tr/l/c/;
# or anything else required. They can also set CCAS.
# Or simply use Preprocessed Assembler.
'compile' => '$(CCAS) $(AM_CCASFLAGS) $(CCASFLAGS)',
+ 'ccer' => 'CCAS',
'compiler' => 'CCASCOMPILE',
'compile_flag' => '-c',
'output_flag' => '-o',
'autodep' => 'CCAS',
'flags' => ['CCASFLAGS', 'CPPFLAGS'],
'compile' => '$(CCAS) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CCASFLAGS) $(CCASFLAGS)',
+ 'ccer' => 'CPPAS',
'compiler' => 'CPPASCOMPILE',
'compile_flag' => '-c',
'output_flag' => '-o',
'link' => '$(F77LD) $(AM_FFLAGS) $(FFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@',
'flags' => ['FFLAGS'],
'compile' => '$(F77) $(AM_FFLAGS) $(FFLAGS)',
+ 'ccer' => 'F77',
'compiler' => 'F77COMPILE',
'compile_flag' => '-c',
'output_flag' => '-o',
'link' => '$(FCLD) $(AM_FCFLAGS) $(FCFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@',
'flags' => ['FCFLAGS'],
'compile' => '$(FC) $(AM_FCFLAGS) $(FCFLAGS)',
+ 'ccer' => 'FC',
'compiler' => 'FCCOMPILE',
'compile_flag' => '-c',
'output_flag' => '-o',
+ 'libtool_tag' => 'FC',
'lder' => 'FCLD',
'ld' => '$(FC)',
'pure' => 1,
'lder' => 'FCLD',
'ld' => '$(FC)',
'flags' => ['FCFLAGS', 'CPPFLAGS'],
+ 'ccer' => 'PPFC',
'compiler' => 'PPFCCOMPILE',
'compile' => '$(FC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_FCFLAGS) $(FCFLAGS)',
'compile_flag' => '-c',
'lder' => 'F77LD',
'ld' => '$(F77)',
'flags' => ['FFLAGS', 'CPPFLAGS'],
+ 'ccer' => 'PPF77',
'compiler' => 'PPF77COMPILE',
'compile' => '$(F77) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_FFLAGS) $(FFLAGS)',
'compile_flag' => '-c',
'flags' => ['RFLAGS', 'FFLAGS'],
# FIXME also FFLAGS.
'compile' => '$(F77) $(AM_FFLAGS) $(FFLAGS) $(AM_RFLAGS) $(RFLAGS)',
+ 'ccer' => 'F77',
'compiler' => 'RCOMPILE',
'compile_flag' => '-c',
'output_flag' => '-o',
'autodep' => 'GCJ',
'flags' => ['GCJFLAGS'],
'compile' => '$(GCJ) $(AM_GCJFLAGS) $(GCJFLAGS)',
+ 'ccer' => 'GCJ',
'compiler' => 'GCJCOMPILE',
'compile_flag' => '-c',
'output_flag' => '-o',
################################################################
+# `silent-rules' mode handling functions.
+
+# verbose_var (NAME)
+# ------------------
+# The public variable stem used to implement `silent-rules'.
+sub verbose_var ($)
+{
+ my ($name) = @_;
+ return 'AM_V_' . $name;
+}
+
+# verbose_private_var (NAME)
+# --------------------------
+# The naming policy for the private variables for `silent-rules'.
+sub verbose_private_var ($)
+{
+ my ($name) = @_;
+ return 'am__v_' . $name;
+}
+
+# define_verbose_var (NAME, VAL)
+# ------------------------------
+# For `silent-rules' mode, setup VAR and dispatcher, to expand to VAL if silent.
+sub define_verbose_var ($$)
+{
+ my ($name, $val) = @_;
+ my $var = verbose_var ($name);
+ my $pvar = verbose_private_var ($name);
+ if (option 'silent-rules')
+ {
+ # Using `$V' instead of `$(V)' breaks IRIX make.
+ define_variable ($var, '$(' . $pvar . '_$(V))', INTERNAL);
+ define_variable ($pvar . '_', $val, INTERNAL);
+ define_variable ($pvar . '_0', $val, INTERNAL);
+ }
+}
+
+# Above should not be needed in the general automake code.
+
+# verbose_flag (NAME)
+# -------------------
+# Contents of %VERBOSE%: variable to expand before rule command.
+sub verbose_flag ($)
+{
+ my ($name) = @_;
+ return '$(' . verbose_var ($name) . ')'
+ if (option 'silent-rules');
+ return '';
+}
+
+# silent_flag
+# -----------
+# Contents of %SILENT%: variable to expand to `@' when silent.
+sub silent_flag ()
+{
+ return verbose_flag ('at');
+}
+
+# define_verbose_tagvar (NAME)
+# ----------------------------
+# Engage the needed `silent-rules' machinery for tag NAME.
+sub define_verbose_tagvar ($)
+{
+ my ($name) = @_;
+ if (option 'silent-rules')
+ {
+ define_verbose_var ($name, '@echo " '. $name . ' ' x (6 - length ($name)) . '" $@;');
+ define_verbose_var ('at', '@');
+ }
+}
+
+# define_verbose_libtool
+# ----------------------
+# Engage the needed `silent-rules' machinery for `libtool --silent'.
+sub define_verbose_libtool ()
+{
+ define_verbose_var ('lt', '--silent');
+ return verbose_flag ('lt');
+}
+
+
+################################################################
+
# Handle AUTOMAKE_OPTIONS variable. Return 1 on error, 0 otherwise.
sub handle_options
}
}
+ # Override portability-recursive warning.
+ switch_warning ('no-portability-recursive')
+ if option 'silent-rules';
+
if ($strictness == GNITS)
{
set_option ('readme-alpha', INTERNAL);
(option 'no-dependencies' || $lang->autodep eq 'no')
? ('FALSE', 'FALSE') : ('AMDEP', "am__fastdep$fpfx");
+ my $verbose = verbose_flag ($lang->ccer || 'GEN');
+ my $silent = silent_flag ();
+
my %transform = ('EXT' => $ext,
'PFX' => $pfx,
'FPFX' => $fpfx,
SUBDIROBJ => 0,
'DERIVED-EXT' => 'BUG',
DIST_SOURCE => 1,
+ VERBOSE => $verbose,
+ SILENT => $silent,
);
# Generate the appropriate rules for this extension.
my $ptltflags = "${derived}_LIBTOOLFLAGS";
$ptltflags = 'AM_LIBTOOLFLAGS' unless set_seen $ptltflags;
+ my $ltverbose = define_verbose_libtool ();
my $obj_ltcompile =
- "\$(LIBTOOL) $libtool_tag\$($ptltflags) \$(LIBTOOLFLAGS) "
+ "\$(LIBTOOL) $ltverbose $libtool_tag\$($ptltflags) \$(LIBTOOLFLAGS) "
. "--mode=compile $obj_compile";
# We _need_ `-o' for per object rules.
OBJOBJ => "$obj.obj",
LTOBJ => "$obj.lo",
+ VERBOSE => $verbose,
+ SILENT => $silent,
COMPILE => $obj_compile,
LTCOMPILE => $obj_ltcompile,
-o => $output_flag,
unless defined $done{$languages{'c'}};
define_linker_variable ($languages{'c'});
}
+
+ # Always provide the user with `AM_V_GEN' for `silent-rules' mode.
+ define_verbose_tagvar ('GEN');
}
set_seen ($xname . '_LDFLAGS');
# Determine program to use for link.
- my $xlink = &define_per_target_linker_variable ($linker, $xname);
+ my($xlink, $vlink) = &define_per_target_linker_variable ($linker, $xname);
+ $vlink = verbose_flag ($vlink || 'GEN');
# If the resulting program lies into a subdirectory,
# make sure this directory will exist.
PROGRAM => $one_file,
XPROGRAM => $xname,
XLINK => $xlink,
+ VERBOSE => $vlink,
DIRSTAMP => $dirstamp,
EXEEXT => '$(EXEEXT)');
&define_variable ('AR', 'ar', INTERNAL);
&define_variable ('ARFLAGS', 'cru', INTERNAL);
+ &define_verbose_tagvar ('AR');
foreach my $pair (@liblist)
{
# If the resulting library lies into a subdirectory,
# make sure this directory will exist.
my $dirstamp = require_build_directory_maybe ($onelib);
+ my $verbose = verbose_flag ('AR');
+ my $silent = silent_flag ();
$output_rules .= &file_contents ('library',
$where,
+ VERBOSE => $verbose,
+ SILENT => $silent,
LIBRARY => $onelib,
XLIBRARY => $xlib,
DIRSTAMP => $dirstamp);
NONLIBTOOL => 0, LIBTOOL => 1);
# Determine program to use for link.
- my $xlink = &define_per_target_linker_variable ($linker, $xlib);
+ my($xlink, $vlink) = &define_per_target_linker_variable ($linker, $xlib);
+ $vlink = verbose_flag ($vlink || 'GEN');
my $rpathvar = "am_${xlib}_rpath";
my $rpath = "\$($rpathvar)";
XLTLIBRARY => $xlib,
RPATH => $rpath,
XLINK => $xlink,
+ VERBOSE => $vlink,
DIRSTAMP => $dirstamp);
if ($seen_libobjs)
{
define_pretty_variable ('am__configure_deps', TRUE, INTERNAL,
@configuredeps);
+ my $automake_options = '--' . (global_option 'cygnus' ? 'cygnus' : $strictness_name)
+ . (global_option 'no-dependencies' ? ' --ignore-deps' : '')
+ . (global_option 'silent-rules' ? ' --silent-rules' : '');
+
$output_rules .= file_contents
('configure',
new Automake::Location,
'MAKEFILE-IN' => $rel_makefile_in,
'MAKEFILE-IN-DEPS' => "@include_stack",
'MAKEFILE-AM' => $rel_makefile_am,
- STRICTNESS => global_option 'cygnus'
- ? 'cygnus' : $strictness_name,
- 'USE-DEPS' => global_option 'no-dependencies'
- ? ' --ignore-deps' : '',
+ 'AUTOMAKE-OPTIONS' => $automake_options,
'MAKEFILE-AM-SOURCES' => "$makefile$colon_infile",
- 'REGEN-ACLOCAL-M4' => $regen_aclocal_m4);
+ 'REGEN-ACLOCAL-M4' => $regen_aclocal_m4,
+ VERBOSE => verbose_flag ('GEN'));
if ($relative_dir eq '.')
{
{
push (@check_tests, 'check-TESTS');
$output_rules .= &file_contents ('check', new Automake::Location,
- COLOR => !! option 'color-tests');
+ COLOR => !! option 'color-tests',
+ PARALLEL_TESTS => !! option 'parallel-tests');
# Tests that are known programs should have $(EXEEXT) appended.
# For matching purposes, we need to adjust XFAIL_TESTS as well.
append_exeext { exists $known_programs{$_[0]} } 'TESTS';
append_exeext { exists $known_programs{$_[0]} } 'XFAIL_TESTS'
if (var ('XFAIL_TESTS'));
+
+ if (option 'parallel-tests')
+ {
+ define_variable ('TEST_SUITE_LOG', 'test-suite.log', INTERNAL);
+ define_variable ('TEST_SUITE_HTML', '$(TEST_SUITE_LOG:.log=.html)', INTERNAL);
+ my $suff = '.test';
+ my $at_exeext = '';
+ if (exists $configure_vars{'EXEEXT'})
+ {
+ $at_exeext = subst ('EXEEXT');
+ $suff = $at_exeext . ' ' . $suff;
+ }
+ define_variable ('TEST_EXTENSIONS', $suff, INTERNAL);
+ # FIXME: this mishandles conditions.
+ my @test_suffixes = (var 'TEST_EXTENSIONS')->value_as_list_recursive;
+ if (exists $configure_vars{'EXEEXT'})
+ {
+ unshift (@test_suffixes, $at_exeext)
+ unless $test_suffixes[0] eq $at_exeext;
+ }
+ unshift (@test_suffixes, '');
+
+ transform_variable_recursively
+ ('TESTS', 'TEST_LOGS', 'am__testlogs', 1, INTERNAL,
+ sub {
+ my ($subvar, $val, $cond, $full_cond) = @_;
+ my $obj = $val;
+ return $obj
+ if $val =~ /^\@.*\@$/;
+ $obj =~ s/\$\(EXEEXT\)$//o;
+ foreach my $test_suffix (@test_suffixes)
+ {
+ next
+ if $test_suffix eq $at_exeext || $test_suffix eq '';
+ return substr ($obj, 0, length ($obj) - length ($test_suffix)) . '.log'
+ if substr ($obj, - length ($test_suffix)) eq $test_suffix;
+ }
+ $obj .= '.log';
+ $output_rules .= file_contents ('check2', new Automake::Location,
+ GENERIC => 0,
+ OBJ => $obj,
+ SOURCE => $val,
+ EXT => '');
+ return $obj;
+ });
+
+ my $nhelper=1;
+ my $prev = 'TESTS';
+ my $post = '';
+ my $last_suffix = $test_suffixes[$#test_suffixes];
+ my $cur = '';
+ foreach my $test_suffix (@test_suffixes)
+ {
+ if ($test_suffix eq $last_suffix)
+ {
+ $cur = 'TEST_LOGS';
+ }
+ else
+ {
+ $cur = 'am__test_logs' . $nhelper;
+ }
+ define_variable ($cur,
+ '$(' . $prev . ':' . $test_suffix . $post . '=.log)', INTERNAL);
+ $post = '.log';
+ $prev = $cur;
+ $nhelper++;
+ $output_rules .= file_contents ('check2', new Automake::Location,
+ GENERIC => 1,
+ OBJ => '',
+ SOURCE => '$<',
+ EXT => $test_suffix)
+ if $test_suffix ne $at_exeext && $test_suffix ne '';
+ }
+
+ define_variable ('TEST_LOGS_TMP', '$(TEST_LOGS:.log=.log-t)', INTERNAL);
+
+ $clean_files{'$(TEST_LOGS_TMP)'} = MOSTLY_CLEAN;
+ $clean_files{'$(TEST_LOGS)'} = MOSTLY_CLEAN;
+ $clean_files{'$(TEST_SUITE_LOG)'} = MOSTLY_CLEAN;
+ $clean_files{'$(TEST_SUITE_HTML)'} = MOSTLY_CLEAN;
+ }
}
}
$libtool_tag = '--tag=' . $lang->libtool_tag . ' '
if $lang->libtool_tag && exists $libtool_tags{$lang->libtool_tag};
&define_variable ($var, $value, INTERNAL);
- &define_variable ("LT$var",
- "\$(LIBTOOL) $libtool_tag\$(AM_LIBTOOLFLAGS) "
- . "\$(LIBTOOLFLAGS) --mode=compile $value",
- INTERNAL)
- if var ('LIBTOOL');
+ if (var ('LIBTOOL'))
+ {
+ my $verbose = define_verbose_libtool ();
+ &define_variable ("LT$var",
+ "\$(LIBTOOL) $verbose $libtool_tag\$(AM_LIBTOOLFLAGS) "
+ . "\$(LIBTOOLFLAGS) --mode=compile $value",
+ INTERNAL);
+ }
+ define_verbose_tagvar ($lang->ccer || 'GEN');
}
# CCLD = $(CC).
&define_variable ($lang->lder, $lang->ld, INTERNAL);
# CCLINK = $(CCLD) blah blah...
- &define_variable ($lang->linker,
- ((var ('LIBTOOL') ?
- "\$(LIBTOOL) $libtool_tag\$(AM_LIBTOOLFLAGS) "
- . "\$(LIBTOOLFLAGS) --mode=link " : '')
- . $lang->link),
- INTERNAL);
+ my $link = '';
+ if (var ('LIBTOOL'))
+ {
+ my $verbose = define_verbose_libtool ();
+ $link = "\$(LIBTOOL) $verbose $libtool_tag\$(AM_LIBTOOLFLAGS) "
+ . "\$(LIBTOOLFLAGS) --mode=link ";
+ }
+ &define_variable ($lang->linker, $link . $lang->link, INTERNAL);
+ &define_variable ($lang->compiler, $lang);
+ &define_verbose_tagvar ($lang->lder || 'GEN');
}
sub define_per_target_linker_variable ($$)
$libtool_tag = '--tag=' . $lang->libtool_tag . ' '
if $lang->libtool_tag && exists $libtool_tags{$lang->libtool_tag};
+ my $verbose = define_verbose_libtool ();
$link_command =
- "\$(LIBTOOL) $libtool_tag\$(AM_LIBTOOLFLAGS) \$(LIBTOOLFLAGS) "
+ "\$(LIBTOOL) $verbose $libtool_tag\$(AM_LIBTOOLFLAGS) \$(LIBTOOLFLAGS) "
. "--mode=link " . $link_command;
}
# If the computed command is the same as the generic command, use
# the command linker variable.
- return $lang->linker
+ return ($lang->linker, $lang->lder)
if $link_command eq $orig_command;
&define_variable ("${target}_LINK", $link_command, INTERNAL);
- return "${target}_LINK";
+ return ("${target}_LINK", $lang->lder);
}
################################################################
-i, --ignore-deps disable dependency tracking code
--include-deps enable dependency tracking code
+Verbosity of generated rules:
+ --silent-rules enable silent build rules
+
Flavors:
--cygnus assume program is part of Cygnus-style tree
--foreign set strictness to foreign
'f|force-missing' => \$force_missing,
'o|output-dir=s' => \$output_directory,
'a|add-missing' => \$add_missing,
- 'c|copy' => \$copy_missing,
+ 'c|copy' => \$copy_missing,
+ 'silent-rules' => sub { set_global_option ('silent-rules',
+ $cli_where); },
'v|verbose' => sub { setup_channel 'verb', silent => 0; },
'W|warnings=s' => \&parse_warnings,
# These long options (--Werror and --Wno-error) for backward
exit 1;; \
esac; \
done; \
- echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu doc/Makefile'; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu doc/Makefile'; \
$(am__cd) $(top_srcdir) && \
- $(AUTOMAKE) --gnu doc/Makefile
+ $(AUTOMAKE) --gnu doc/Makefile
.PRECIOUS: Makefile
Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
@case '$?' in \
uninstall-dvi-am:
@$(NORMAL_UNINSTALL)
- @list='$(DVIS)'; for p in $$list; do \
+ @list='$(DVIS)'; test -n "$(dvidir)" || list=; \
+ for p in $$list; do \
$(am__strip_dir) \
echo " rm -f '$(DESTDIR)$(dvidir)/$$f'"; \
rm -f "$(DESTDIR)$(dvidir)/$$f"; \
uninstall-html-am:
@$(NORMAL_UNINSTALL)
- @list='$(HTMLS)'; for p in $$list; do \
+ @list='$(HTMLS)'; test -n "$(htmldir)" || list=; \
+ for p in $$list; do \
$(am__strip_dir) \
echo " rm -rf '$(DESTDIR)$(htmldir)/$$f'"; \
rm -rf "$(DESTDIR)$(htmldir)/$$f"; \
uninstall-pdf-am:
@$(NORMAL_UNINSTALL)
- @list='$(PDFS)'; for p in $$list; do \
+ @list='$(PDFS)'; test -n "$(pdfdir)" || list=; \
+ for p in $$list; do \
$(am__strip_dir) \
echo " rm -f '$(DESTDIR)$(pdfdir)/$$f'"; \
rm -f "$(DESTDIR)$(pdfdir)/$$f"; \
uninstall-ps-am:
@$(NORMAL_UNINSTALL)
- @list='$(PSS)'; for p in $$list; do \
+ @list='$(PSS)'; test -n "$(psdir)" || list=; \
+ for p in $$list; do \
$(am__strip_dir) \
echo " rm -f '$(DESTDIR)$(psdir)/$$f'"; \
rm -f "$(DESTDIR)$(psdir)/$$f"; \
install-man1: $(dist_man1_MANS)
@$(NORMAL_INSTALL)
test -z "$(man1dir)" || $(MKDIR_P) "$(DESTDIR)$(man1dir)"
- @list='$(dist_man1_MANS)'; \
+ @list='$(dist_man1_MANS)'; test -n "$(man1dir)" || exit 0; \
{ for i in $$list; do echo "$$i"; done; \
} | while read p; do \
if test -f $$p; then d=; else d="$(srcdir)/"; fi; \
uninstall-man1:
@$(NORMAL_UNINSTALL)
- @list='$(dist_man1_MANS)'; \
+ @list='$(dist_man1_MANS)'; test -n "$(man1dir)" || exit 0; \
files=`{ for i in $$list; do echo "$$i"; done; \
} | sed -e 's,.*/,,;h;s,.*\.,,;s,^[^1][0-9a-z]*$$,1,;x' \
-e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,'`; \
install-dist_docDATA: $(dist_doc_DATA)
@$(NORMAL_INSTALL)
test -z "$(docdir)" || $(MKDIR_P) "$(DESTDIR)$(docdir)"
- @list='$(dist_doc_DATA)'; for p in $$list; do \
+ @list='$(dist_doc_DATA)'; test -n "$(docdir)" || list=; \
+ for p in $$list; do \
if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
echo "$$d$$p"; \
done | $(am__base_list) | \
uninstall-dist_docDATA:
@$(NORMAL_UNINSTALL)
- @list='$(dist_doc_DATA)'; \
+ @list='$(dist_doc_DATA)'; test -n "$(docdir)" || list=; \
files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
test -n "$$files" || exit 0; \
echo " ( cd '$(DESTDIR)$(docdir)' && rm -f" $$files ")"; \
if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
if test -d $$d/$$file; then \
dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test -d "$(distdir)/$$file"; then \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
- cp -pR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
fi; \
- cp -pR $$d/$$file "$(distdir)$$dir" || exit 1; \
+ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
else \
test -f "$(distdir)/$$file" \
|| cp -p $$d/$$file "$(distdir)/$$file" \
install-dvi-am: $(DVIS)
@$(NORMAL_INSTALL)
test -z "$(dvidir)" || $(MKDIR_P) "$(DESTDIR)$(dvidir)"
- @list='$(DVIS)'; for p in $$list; do \
+ @list='$(DVIS)'; test -n "$(dvidir)" || list=; \
+ for p in $$list; do \
if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
echo "$$d$$p"; \
done | $(am__base_list) | \
install-html-am: $(HTMLS)
@$(NORMAL_INSTALL)
test -z "$(htmldir)" || $(MKDIR_P) "$(DESTDIR)$(htmldir)"
- @list='$(HTMLS)'; list2=; for p in $$list; do \
+ @list='$(HTMLS)'; list2=; test -n "$(htmldir)" || list=; \
+ for p in $$list; do \
if test -f "$$p" || test -d "$$p"; then d=; else d="$(srcdir)/"; fi; \
$(am__strip_dir) \
if test -d "$$d$$p"; then \
@$(NORMAL_INSTALL)
test -z "$(infodir)" || $(MKDIR_P) "$(DESTDIR)$(infodir)"
@srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \
- list='$(INFO_DEPS)'; \
+ list='$(INFO_DEPS)'; test -n "$(infodir)" || list=; \
for file in $$list; do \
case $$file in \
$(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \
@$(POST_INSTALL)
@if (install-info --version && \
install-info --version 2>&1 | sed 1q | grep -i -v debian) >/dev/null 2>&1; then \
- list='$(INFO_DEPS)'; \
+ list='$(INFO_DEPS)'; test -n "$(infodir)" || list=; \
for file in $$list; do \
relfile=`echo "$$file" | sed 's|^.*/||'`; \
echo " install-info --info-dir='$(DESTDIR)$(infodir)' '$(DESTDIR)$(infodir)/$$relfile'";\
install-pdf-am: $(PDFS)
@$(NORMAL_INSTALL)
test -z "$(pdfdir)" || $(MKDIR_P) "$(DESTDIR)$(pdfdir)"
- @list='$(PDFS)'; for p in $$list; do \
+ @list='$(PDFS)'; test -n "$(pdfdir)" || list=; \
+ for p in $$list; do \
if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
echo "$$d$$p"; \
done | $(am__base_list) | \
install-ps-am: $(PSS)
@$(NORMAL_INSTALL)
test -z "$(psdir)" || $(MKDIR_P) "$(DESTDIR)$(psdir)"
- @list='$(PSS)'; for p in $$list; do \
+ @list='$(PSS)'; test -n "$(psdir)" || list=; \
+ for p in $$list; do \
if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
echo "$$d$$p"; \
done | $(am__base_list) | \
@end table
For instance when installing GCC, the GNU Compiler Collection, we can
- use @option{--target=@var{TARGET}} to specify that we want to build
+ use @option{--target=@/@var{TARGET}} to specify that we want to build
GCC as a cross-compiler for @var{TARGET}. Mixing @option{--build} and
@option{--target}, we can actually cross-compile a cross-compiler;
such a three-way cross-compilation is known as a @dfn{Canadian cross}.
corresponding @file{Makefile.am}. This option is deprecated and will be
removed in a future release.
+@item --silent-rules
+@opindex --silent-rules
+Enable the @option{silent-rules} option globally (@pxref{Options}).
+
@item -v
@itemx --verbose
@opindex -v
The categories output by default are @samp{syntax} and
@samp{unsupported}. Additionally, @samp{gnu} and @samp{portability}
are enabled in @option{--gnu} and @option{--gnits} strictness.
+On the other hand, the @option{silent-rules} options (@pxref{Options})
+turns off portability warnings about recursive variable expansions.
@vindex WARNINGS
The environment variable @env{WARNINGS} can contain a comma separated
The libtool rules also use a @code{LIBTOOLFLAGS} variable that should
not be set in @file{Makefile.am}: this is a user variable (@pxref{Flag
Variables Ordering}. It allows users to run @samp{make
-LIBTOOLFLAGS=--silent}, for instance.
+LIBTOOLFLAGS=--silent}, for instance. Note that the verbosity of
+@command{libtool} can also be influenced with the Automake
+@option{silent-rules} option (@pxref{Options}).
@node LTLIBOBJS, Libtool Issues, Libtool Flags, A Shared Library
#define yylhs c_yylhs
#define yylen c_yylen
#define yydefred c_yydefred
- #define yydgoto c_yydgoto
+ #define yydgoto c_yydgoto
#define yysindex c_yysindex
#define yyrindex c_yyrindex
#define yygindex c_yygindex
@command{cfortran} is not yet Free Software, but it will be in the next
major release.}.
- @page
Automake can help in two ways:
@enumerate
been mentioned in @code{foo_LDADD} and @code{libfoo_la_LIBADD}, then
Automake would have issued a warning.
-
- @page
@menu
* How the Linker is Chosen:: Automatic linker selection
@end menu
Usually, only header files that accompany installed libraries need to
be installed. Headers used by programs or convenience libraries are
not installed. The @code{noinst_HEADERS} variable can be used for
- such headers. However when the header actually belongs to one
- convenient library or program, we recommend listing it in the
+ such headers. However when the header actually belongs to a single
+ convenience library or program, we recommend listing it in the
program's or library's @code{_SOURCES} variable (@pxref{Program
Sources}) instead of in @code{noinst_HEADERS}. This is clearer for
the @file{Makefile.am} reader. @code{noinst_HEADERS} would be the
@cindex @code{make check}
@trindex check
-Automake supports two forms of test suites.
+Automake supports three forms of test suites, the first two of which
+are very similar.
@section Simple Tests
@vindex TESTS
@vindex TESTS_ENVIRONMENT
The variable @code{TESTS_ENVIRONMENT} can be used to set environment
-variables for the test run; the environment variable @code{srcdir} is
+variables for the test run; the environment variable @env{srcdir} is
set in the rule. If all your test programs are scripts, you can also
set @code{TESTS_ENVIRONMENT} to an invocation of the shell (e.g.
@samp{$(SHELL) -x} can be useful for debugging the tests), or any other
by the tests, not the tests themselves. Of course you can set
@code{TESTS = $(check_PROGRAMS)} if all your programs are test cases.
+
+@section Simple tests using @samp{parallel-tests}
+@cindex @option{parallel-tests}, Using
+The option @option{parallel-tests} (@pxref{Options}) enables a test
+suite driver that is mostly compatible to the simple test driver
+described above, but provides a few more features and slightly different
+semantics. It features concurrent execution of tests with @code{make -j},
+allows to specify inter-test dependencies, lazy reruns of tests that
+have not completed in a prior run, summary and verbose output in
+@samp{RST} (reStructuredText) and @samp{HTML} format, and hard errors
+for exceptional failures. Similar to the simple test driver,
+@code{TESTS_ENVIRONMENT}, @code{AM_COLOR_TESTS}, @code{XFAIL_TESTS}, and
+the @code{check_*} variables are honored, and the environment variable
+@env{srcdir} is set during test execution.
+
+@vindex TEST_SUITE_LOG
+@vindex TEST_LOGS
+The driver operates by defining a set of @command{make} rules to create
+a summary log file, @code{TEST_SUITE_LOG}, which defaults to
+@file{test-suite.log} and requires a @file{.log} suffix. This file
+depends upon log files created for each single test program listed in
+@code{TESTS}, which in turn contain all output produced by the
+corresponding tests.
+
+@vindex TEST_EXTENSIONS
+Each log file is created when the corresponding test has completed.
+The set of log files is listed in the read-only variable
+@code{TEST_LOGS}, and defaults to @code{TESTS}, with the executable
+extension if any (@pxref{EXEEXT}), as well as any suffix listed in
+@code{TEST_EXTENSIONS} removed, and @file{.log} appended.
+@code{TEST_EXTENSIONS} defaults to @file{.test}. Results are undefined
+if a test file name ends in several concatenated suffixes.
+
+@vindex VERBOSE
+As with the simple driver above, by default one status line is printed
+per completed test, and a short summary after the suite has completed.
+However, standard output and standard error of the test are redirected
+to a per-test log file, so that parallel execution does not produce
+intermingled output. The output from failed tests is collected in the
+@file{test-suite.log} file. If the variable @samp{VERBOSE} is set, this
+file is output after the summary. For best results, the tests should be
+verbose by default now.
+
+@trindex mostlyclean
+@trindex check-html
+@vindex RST2HTML
+@vindex TEST_SUITE_HTML
+With @code{make check-html}, the log files may be converted from RST
+(reStructuredText, see @uref{http://docutils.sourceforge.net/@/rst.html})
+to HTML using @samp{RST2HTML}, which defaults to @command{rst2html} or
+@command{rst2html.py}. The variable @samp{TEST_SUITE_HTML} contains the
+set of converted log files. The log and HTML files are removed upon
+@code{make mostlyclean}.
+
+@vindex DISABLE_HARD_ERRORS
+@cindex Exit status 99, special interpretation
+@cindex hard error
+Even in the presence of expected failures (see @code{XFAIL_TESTS}, there
+may be conditions under which a test outcome needs attention. For
+example, with test-driven development, you may write tests for features
+that you have not implemented yet, and thus mark these tests as expected
+to fail. However, you may still be interested in exceptional conditions,
+for example, tests that fail due to a segmentation violation or another
+error that is independent of the feature awaiting implementation.
+Tests can exit with an exit status of 99 to signal such a @emph{hard
+error}. Unless the variable @code{DISABLE_HARD_ERRORS} is set to a
+nonempty value, such tests will be counted as failed.
+
+@vindex LAZY_TEST_SUITE
+By default, all tests listed in @code{TESTS} are run upon @code{make
+check}. When @code{LAZY_TEST_SUITE} is nonempty, then log files of
+a previous run are not removed before starting the test suite, so only
+tests that have not yet been completed are run, as well as tests that
+have been modified after the previous run.
+
+In order to guarantee an ordering between tests even with @code{make
+-j@var{N}}, dependencies between the corresponding log files may be
+specified through usual @command{make} dependencies. For example, the
+following snippet lets the test named @file{foo-execute.test} depend
+upon completion of the test @file{foo-compile.test}:
+
+@example
+TESTS = foo-compile.test foo-execute.test
+foo-execute.log: foo-compile.log
+@end example
+
+@noindent
+Please note that this ordering ignores the @emph{results} of required
+tests, thus the test @file{foo-execute.test} is run even if the test
+@file{foo-compile.test} failed or was skipped beforehand.
+
+@cindex Unit tests
+The combination of lazy test execution and correct dependencies between
+tests and their sources may be exploited for efficient unit testing
+during development. To further speed up the edit-compile-test cycle, it
+may even be useful to specify compiled programs in @code{EXTRA_PROGRAMS}
+instead of with @code{check_PROGRAMS}, as the former allows intertwined
+compilation and test execution (but note that @code{EXTRA_PROGRAMS} are
+not cleaned automatically, @pxref{Uniform}).
+
+The variables @code{TESTS} and @code{XFAIL_TESTS} may contain
+conditional parts as well as configure substitutions. In the latter
+case, however, certain restrictions apply: substituted test names
+must end with a nonempty test suffix like @file{.test}, so that one of
+the inference rules generated by @command{automake} can apply. For
+literal test names, @command{automake} can generate per-target rules
+to avoid this limitation.
+
+
@section DejaGnu Tests
If @uref{ftp://ftp.gnu.org/gnu/dejagnu/, @command{dejagnu}} appears in
Don't require @file{texinfo.tex}, even if there are texinfo files in
this directory.
+@item @option{parallel-tests}
+@cindex Option, @option{parallel-tests}
+@opindex parallel-tests
+Enable test suite driver for @code{TESTS} that can run tests in parallel
+(@pxref{Tests}, for more information).
+
@item @option{readme-alpha}
@cindex Option, @option{readme-alpha}
@opindex readme-alpha
@samp{@var{MAJOR}.@var{MINOR}@var{ALPHA}}, where @var{ALPHA} is a
letter; it should be omitted for non-alpha releases.
+@item @option{silent-rules}
+@cindex Option, @option{silent-rules}
+@opindex silent-rules
+Enable silent build rules. This will cause many build rules to output a
+status line of the form
+
+@example
+ GEN @var{output-file}
+@end example
+
+@noindent
+instead of printing the command that will be executed to update
+@var{output-file}. It will also silence @command{libtool} output.
+
+@vindex @code{V}
+The verbosity can be influenced at @command{make} run time by setting the
+variable @code{V}: @samp{make V=0} is equivalent to @code{V} being unset,
+while @samp{make V=1} will produce verbose output.
+
+For portability to different @command{make} implementations, package authors
+are advised to not set the variable @code{V} inside the @file{Makefile.am}
+file, to allow the user to override the value for subdirectories as well.
+
+The current implementation of this feature relies on a non-POSIX, but in
+practice rather widely supported @file{Makefile} construct of nested
+variable expansion @samp{$(@var{var1}$(V))}. Do not use the
+@option{silent-rules} option if your package needs to build with
+@command{make} implementations that do not support it. The
+@option{silent-rules} option turns off warnings about recursive variable
+expansion, which are in turn enabled by @option{-Wportability}
+(@pxref{Invoking Automake}).
+
+@vindex @code{AM_V_GEN}
+@vindex @code{AM_V_at}
+To extend the silent mode to your own rules, you can use the predefined
+variable @code{AM_V_GEN} as a prefix to commands that should output a
+status line in silent mode, and @code{AM_V_at} as a prefix to commands
+that should not output anything in silent mode. With @code{V=1}, these
+variables will expand to empty strings.
+
@item @option{std-options}
@cindex Options, @option{std-options}
@cindex @samp{make installcheck}, testing @option{--help} and @option{--version}
DATA = $(dist_perllib_DATA) $(nodist_perllib_DATA)
RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \
distclean-recursive maintainer-clean-recursive
+ AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \
+ $(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \
+ distdir
ETAGS = etags
CTAGS = ctags
DIST_SUBDIRS = $(SUBDIRS)
exit 1;; \
esac; \
done; \
- echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu lib/Automake/Makefile'; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu lib/Automake/Makefile'; \
$(am__cd) $(top_srcdir) && \
- $(AUTOMAKE) --gnu lib/Automake/Makefile
+ $(AUTOMAKE) --gnu lib/Automake/Makefile
.PRECIOUS: Makefile
Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
@case '$?' in \
install-dist_perllibDATA: $(dist_perllib_DATA)
@$(NORMAL_INSTALL)
test -z "$(perllibdir)" || $(MKDIR_P) "$(DESTDIR)$(perllibdir)"
- @list='$(dist_perllib_DATA)'; for p in $$list; do \
+ @list='$(dist_perllib_DATA)'; test -n "$(perllibdir)" || list=; \
+ for p in $$list; do \
if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
echo "$$d$$p"; \
done | $(am__base_list) | \
uninstall-dist_perllibDATA:
@$(NORMAL_UNINSTALL)
- @list='$(dist_perllib_DATA)'; \
+ @list='$(dist_perllib_DATA)'; test -n "$(perllibdir)" || list=; \
files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
test -n "$$files" || exit 0; \
echo " ( cd '$(DESTDIR)$(perllibdir)' && rm -f" $$files ")"; \
install-nodist_perllibDATA: $(nodist_perllib_DATA)
@$(NORMAL_INSTALL)
test -z "$(perllibdir)" || $(MKDIR_P) "$(DESTDIR)$(perllibdir)"
- @list='$(nodist_perllib_DATA)'; for p in $$list; do \
+ @list='$(nodist_perllib_DATA)'; test -n "$(perllibdir)" || list=; \
+ for p in $$list; do \
if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
echo "$$d$$p"; \
done | $(am__base_list) | \
uninstall-nodist_perllibDATA:
@$(NORMAL_UNINSTALL)
- @list='$(nodist_perllib_DATA)'; \
+ @list='$(nodist_perllib_DATA)'; test -n "$(perllibdir)" || list=; \
files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
test -n "$$files" || exit 0; \
echo " ( cd '$(DESTDIR)$(perllibdir)' && rm -f" $$files ")"; \
if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
if test -d $$d/$$file; then \
dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test -d "$(distdir)/$$file"; then \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
- cp -pR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
fi; \
- cp -pR $$d/$$file "$(distdir)$$dir" || exit 1; \
+ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
else \
test -f "$(distdir)/$$file" \
|| cp -p $$d/$$file "$(distdir)/$$file" \
exit 1;; \
esac; \
done; \
- echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu lib/Automake/tests/Makefile'; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu lib/Automake/tests/Makefile'; \
$(am__cd) $(top_srcdir) && \
- $(AUTOMAKE) --gnu lib/Automake/tests/Makefile
+ $(AUTOMAKE) --gnu lib/Automake/tests/Makefile
.PRECIOUS: Makefile
Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
@case '$?' in \
if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
if test -d $$d/$$file; then \
dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test -d "$(distdir)/$$file"; then \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
- cp -pR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
fi; \
- cp -pR $$d/$$file "$(distdir)$$dir" || exit 1; \
+ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
else \
test -f "$(distdir)/$$file" \
|| cp -p $$d/$$file "$(distdir)/$$file" \
DATA = $(dist_pkgvdata_DATA) $(dist_script_DATA)
RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \
distclean-recursive maintainer-clean-recursive
+ AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \
+ $(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \
+ distdir
ETAGS = etags
CTAGS = ctags
DIST_SUBDIRS = $(SUBDIRS)
exit 1;; \
esac; \
done; \
- echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu lib/Makefile'; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu lib/Makefile'; \
$(am__cd) $(top_srcdir) && \
- $(AUTOMAKE) --gnu lib/Makefile
+ $(AUTOMAKE) --gnu lib/Makefile
.PRECIOUS: Makefile
Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
@case '$?' in \
install-dist_pkgvdataDATA: $(dist_pkgvdata_DATA)
@$(NORMAL_INSTALL)
test -z "$(pkgvdatadir)" || $(MKDIR_P) "$(DESTDIR)$(pkgvdatadir)"
- @list='$(dist_pkgvdata_DATA)'; for p in $$list; do \
+ @list='$(dist_pkgvdata_DATA)'; test -n "$(pkgvdatadir)" || list=; \
+ for p in $$list; do \
if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
echo "$$d$$p"; \
done | $(am__base_list) | \
uninstall-dist_pkgvdataDATA:
@$(NORMAL_UNINSTALL)
- @list='$(dist_pkgvdata_DATA)'; \
+ @list='$(dist_pkgvdata_DATA)'; test -n "$(pkgvdatadir)" || list=; \
files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
test -n "$$files" || exit 0; \
echo " ( cd '$(DESTDIR)$(pkgvdatadir)' && rm -f" $$files ")"; \
install-dist_scriptDATA: $(dist_script_DATA)
@$(NORMAL_INSTALL)
test -z "$(scriptdir)" || $(MKDIR_P) "$(DESTDIR)$(scriptdir)"
- @list='$(dist_script_DATA)'; for p in $$list; do \
+ @list='$(dist_script_DATA)'; test -n "$(scriptdir)" || list=; \
+ for p in $$list; do \
if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
echo "$$d$$p"; \
done | $(am__base_list) | \
uninstall-dist_scriptDATA:
@$(NORMAL_UNINSTALL)
- @list='$(dist_script_DATA)'; \
+ @list='$(dist_script_DATA)'; test -n "$(scriptdir)" || list=; \
files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
test -n "$$files" || exit 0; \
echo " ( cd '$(DESTDIR)$(scriptdir)' && rm -f" $$files ")"; \
if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
if test -d $$d/$$file; then \
dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test -d "$(distdir)/$$file"; then \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
- cp -pR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
fi; \
- cp -pR $$d/$$file "$(distdir)$$dir" || exit 1; \
+ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
else \
test -f "$(distdir)/$$file" \
|| cp -p $$d/$$file "$(distdir)/$$file" \
dist_am_DATA = \
ansi2knr.am \
check.am \
+check2.am \
clean-hdr.am \
clean.am \
compile.am \
exit 1;; \
esac; \
done; \
- echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu lib/am/Makefile'; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu lib/am/Makefile'; \
$(am__cd) $(top_srcdir) && \
- $(AUTOMAKE) --gnu lib/am/Makefile
+ $(AUTOMAKE) --gnu lib/am/Makefile
.PRECIOUS: Makefile
Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
@case '$?' in \
install-dist_amDATA: $(dist_am_DATA)
@$(NORMAL_INSTALL)
test -z "$(amdir)" || $(MKDIR_P) "$(DESTDIR)$(amdir)"
- @list='$(dist_am_DATA)'; for p in $$list; do \
+ @list='$(dist_am_DATA)'; test -n "$(amdir)" || list=; \
+ for p in $$list; do \
if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
echo "$$d$$p"; \
done | $(am__base_list) | \
uninstall-dist_amDATA:
@$(NORMAL_UNINSTALL)
- @list='$(dist_am_DATA)'; \
+ @list='$(dist_am_DATA)'; test -n "$(amdir)" || list=; \
files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
test -n "$$files" || exit 0; \
echo " ( cd '$(DESTDIR)$(amdir)' && rm -f" $$files ")"; \
if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
if test -d $$d/$$file; then \
dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test -d "$(distdir)/$$file"; then \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
- cp -pR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
fi; \
- cp -pR $$d/$$file "$(distdir)$$dir" || exit 1; \
+ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
else \
test -f "$(distdir)/$$file" \
|| cp -p $$d/$$file "$(distdir)/$$file" \
exit 1;; \
esac; \
done; \
- echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu m4/Makefile'; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu m4/Makefile'; \
$(am__cd) $(top_srcdir) && \
- $(AUTOMAKE) --gnu m4/Makefile
+ $(AUTOMAKE) --gnu m4/Makefile
.PRECIOUS: Makefile
Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
@case '$?' in \
install-dist_m4dataDATA: $(dist_m4data_DATA)
@$(NORMAL_INSTALL)
test -z "$(m4datadir)" || $(MKDIR_P) "$(DESTDIR)$(m4datadir)"
- @list='$(dist_m4data_DATA)'; for p in $$list; do \
+ @list='$(dist_m4data_DATA)'; test -n "$(m4datadir)" || list=; \
+ for p in $$list; do \
if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
echo "$$d$$p"; \
done | $(am__base_list) | \
uninstall-dist_m4dataDATA:
@$(NORMAL_UNINSTALL)
- @list='$(dist_m4data_DATA)'; \
+ @list='$(dist_m4data_DATA)'; test -n "$(m4datadir)" || list=; \
files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
test -n "$$files" || exit 0; \
echo " ( cd '$(DESTDIR)$(m4datadir)' && rm -f" $$files ")"; \
if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
if test -d $$d/$$file; then \
dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test -d "$(distdir)/$$file"; then \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
- cp -pR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
fi; \
- cp -pR $$d/$$file "$(distdir)$$dir" || exit 1; \
+ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
else \
test -f "$(distdir)/$$file" \
|| cp -p $$d/$$file "$(distdir)/$$file" \
## Process this file with automake to create Makefile.in
+AUTOMAKE_OPTIONS = parallel-tests
-XFAIL_TESTS = \
+XFAIL_TESTS = \
all.test \
auxdir2.test \
cond17.test \
txinfo5.test
+include $(srcdir)/parallel-tests.am
+
+$(srcdir)/parallel-tests.am: gen-parallel-tests Makefile.am
+ (cd $(srcdir) && $(SHELL) ./gen-parallel-tests) >$@
+
+$(parallel_tests): $(parallel_tests:-p.test=.test) Makefile.am
+ input=`echo $@ | sed 's,.*/,,; s,-p.test$$,.test,'`; \
+ sed 's,^\. \./defs,. ./defs-p,' < $(srcdir)/$$input > $@
+ chmod a+rx $@
+
+MAINTAINERCLEANFILES = $(parallel_tests)
+
+defs-p: defs Makefile.am
+ sed 's,^AM_INIT_AUTOMAKE$$,&([parallel-tests]),' < defs >$@
+
TESTS = \
aclibobj.test \
aclocal.test \
check8.test \
check9.test \
check10.test \
+check11.test \
checkall.test \
clean.test \
clean2.test \
distdir.test \
distname.test \
dollar.test \
+dollarvar.test \
+dollarvar2.test \
double.test \
dup2.test \
else.test \
extra6.test \
extra7.test \
f90only.test \
+flavor.test \
flibs.test \
fn99.test \
fn99subdir.test \
instsh3.test \
instdat.test \
instdat2.test \
+ instdir.test \
+ instdir2.test \
+ instdir-java.test \
+ instdir-lisp.test \
+ instdir-ltlib.test \
+ instdir-prog.test \
+ instdir-python.test \
+ instdir-texi.test \
instexec.test \
instfail.test \
instfail-info.test \
parallel-am.test \
parallel-am2.test \
parallel-am3.test \
+parallel-tests.test \
+parallel-tests2.test \
+parallel-tests3.test \
+parallel-tests4.test \
+parallel-tests5.test \
+parallel-tests6.test \
parse.test \
percent.test \
percent2.test \
sanity.test \
scripts.test \
seenc.test \
+silent.test \
+silent2.test \
+silent3.test \
+silent4.test \
+silent5.test \
+silent6.test \
+silent7.test \
sinclude.test \
srcsub.test \
srcsub2.test \
yacc7.test \
yacc8.test \
yaccpp.test \
-yaccvpath.test
+yaccvpath.test \
+$(parallel_tests)
-EXTRA_DIST = ChangeLog-old $(TESTS)
+EXTRA_DIST = ChangeLog-old gen-parallel-tests $(TESTS)
# Each test case depends on defs, aclocal, and automake.
-check_SCRIPTS = defs aclocal-$(APIVERSION) automake-$(APIVERSION)
+check_SCRIPTS = defs defs-p aclocal-$(APIVERSION) automake-$(APIVERSION) $(parallel_tests)
-distclean-local: check-clean-local
+clean-local: check-clean-local
check-clean-local:
-chmod -R u+rwx *.dir
- -rm -rf *.dir
+ -rm -rf defs-p *.dir
PRE_UNINSTALL = :
POST_UNINSTALL = :
build_triplet = @build@
-subdir = tests
DIST_COMMON = README $(srcdir)/Makefile.am $(srcdir)/Makefile.in \
- $(srcdir)/aclocal.in $(srcdir)/automake.in $(srcdir)/defs.in
+ $(srcdir)/aclocal.in $(srcdir)/automake.in $(srcdir)/defs.in \
+ $(srcdir)/parallel-tests.am
+subdir = tests
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
am__aclocal_m4_deps = $(top_srcdir)/m4/amversion.m4 \
$(top_srcdir)/m4/auxdir.m4 $(top_srcdir)/m4/init.m4 \
blu='\e[1;34m'; \
std='\e[m'; \
}
+am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
+am__vpath_adj = case $$p in \
+ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
+ *) f=$$p;; \
+ esac;
+am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
+am__install_max = 40
+am__nobase_strip_setup = \
+ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
+am__nobase_strip = \
+ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
+am__nobase_list = $(am__nobase_strip_setup); \
+ for p in $$list; do echo "$$p $$p"; done | \
+ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
+ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
+ if (++n[$$2] == $(am__install_max)) \
+ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
+ END { for (dir in files) print dir, files[dir] }'
+am__base_list = \
+ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
+ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
+# Restructured Text title and section.
+am__rst_title = sed 's/.*/ & /;h;s/./=/g;p;x;p;g;p;s/.*//'
+am__rst_section = sed 'p;s/./=/g;p;g'
+# Put stdin (possibly several lines separated by ". ") in a box.
+am__text_box = { nlinit=`echo 'nl="'; echo '"'`; eval "$$nlinit"; \
+ sed "s/\\. /\\$$nl/g"; } | sed '/^$$/d' | \
+$(AWK) '{ if (final) final = final "\n" $$0; else final = $$0; }\
+max < length($$0) { max = length($$0); } \
+END { \
+ for (i = 0; i < max; ++i) line = line "="; \
+ print line; print final; print line; \
+}'
+# Solaris 10 'make', and several other traditional 'make' implementations,
+# pass "-e" to $(SHELL). This contradicts POSIX. Work around the problem
+# by disabling -e (using the XSI extension "set +e") if it's set.
+am__sh_e_setup = case $$- in *e*) set +e;; esac
+# To be inserted before the command running the test. Creates the
+# directory for the log if needed. Stores in $dir the directory
+# containing $f, in $tst the test, in $log the log, and passes
+# TESTS_ENVIRONMENT. Save and restore TERM around use of
+# TESTS_ENVIRONMENT, in case that unsets it.
+am__check_pre = \
+$(am__sh_e_setup); \
+$(am__vpath_adj_setup) $(am__vpath_adj) \
+srcdir=$(srcdir); export srcdir; \
+rm -f $@-t; \
+trap 'st=$$?; rm -f '\''$(abs_builddir)/$@-t'\''; (exit $$st); exit $$st' \
+ 1 2 13 15; \
+am__odir=`echo "./$@" | sed 's|/[^/]*$$||'`; \
+test "x$$am__odir" = x. || $(MKDIR_P) "$$am__odir" || exit $$?; \
+if test -f "./$$f"; then dir=./; \
+elif test -f "$$f"; then dir=; \
+else dir="$(srcdir)/"; fi; \
+tst=$$dir$$f; log='$@'; __SAVED_TERM=$$TERM; \
+$(TESTS_ENVIRONMENT)
+TEST_SUITE_LOG = test-suite.log
+TEST_SUITE_HTML = $(TEST_SUITE_LOG:.log=.html)
+TEST_EXTENSIONS = .test
+am__test_logs1 = $(TESTS:=.log)
+TEST_LOGS = $(am__test_logs1:.test.log=.log)
+TEST_LOGS_TMP = $(TEST_LOGS:.log=.log-t)
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
ACLOCAL = @ACLOCAL@
AMTAR = @AMTAR@
top_build_prefix = @top_build_prefix@
top_builddir = @top_builddir@
top_srcdir = @top_srcdir@
+AUTOMAKE_OPTIONS = parallel-tests
XFAIL_TESTS = \
all.test \
auxdir2.test \
cond17.test \
txinfo5.test
+parallel_tests = \
+check-p.test \
+check10-p.test \
+check11-p.test \
+check2-p.test \
+check3-p.test \
+check4-p.test \
+check5-p.test \
+check6-p.test \
+check7-p.test \
+check8-p.test \
+check9-p.test \
+color-p.test \
+comment9-p.test \
+dejagnu-p.test \
+exeext4-p.test \
+maken3-p.test \
+maken4-p.test \
+pr401-p.test \
+pr401b-p.test \
+pr401c-p.test
+
+MAINTAINERCLEANFILES = $(parallel_tests)
TESTS = \
aclibobj.test \
aclocal.test \
check8.test \
check9.test \
check10.test \
+check11.test \
checkall.test \
clean.test \
clean2.test \
distdir.test \
distname.test \
dollar.test \
+dollarvar.test \
+dollarvar2.test \
double.test \
dup2.test \
else.test \
extra6.test \
extra7.test \
f90only.test \
+flavor.test \
flibs.test \
fn99.test \
fn99subdir.test \
instsh3.test \
instdat.test \
instdat2.test \
+ instdir.test \
+ instdir2.test \
+ instdir-java.test \
+ instdir-lisp.test \
+ instdir-ltlib.test \
+ instdir-prog.test \
+ instdir-python.test \
+ instdir-texi.test \
instexec.test \
instfail.test \
instfail-info.test \
parallel-am.test \
parallel-am2.test \
parallel-am3.test \
+parallel-tests.test \
+parallel-tests2.test \
+parallel-tests3.test \
+parallel-tests4.test \
+parallel-tests5.test \
+parallel-tests6.test \
parse.test \
percent.test \
percent2.test \
sanity.test \
scripts.test \
seenc.test \
+silent.test \
+silent2.test \
+silent3.test \
+silent4.test \
+silent5.test \
+silent6.test \
+silent7.test \
sinclude.test \
srcsub.test \
srcsub2.test \
yacc7.test \
yacc8.test \
yaccpp.test \
-yaccvpath.test
+yaccvpath.test \
+$(parallel_tests)
-EXTRA_DIST = ChangeLog-old $(TESTS)
+EXTRA_DIST = ChangeLog-old gen-parallel-tests $(TESTS)
# Each test case depends on defs, aclocal, and automake.
-check_SCRIPTS = defs aclocal-$(APIVERSION) automake-$(APIVERSION)
+check_SCRIPTS = defs defs-p aclocal-$(APIVERSION) automake-$(APIVERSION) $(parallel_tests)
all: all-am
.SUFFIXES:
-$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps)
+.SUFFIXES: .html .log .test
+$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(srcdir)/parallel-tests.am $(am__configure_deps)
@for dep in $?; do \
case '$(am__configure_deps)' in \
*$$dep*) \
exit 1;; \
esac; \
done; \
- echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu tests/Makefile'; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu tests/Makefile'; \
$(am__cd) $(top_srcdir) && \
- $(AUTOMAKE) --gnu tests/Makefile
+ $(AUTOMAKE) --gnu tests/Makefile
.PRECIOUS: Makefile
Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
@case '$?' in \
CTAGS:
-check-TESTS: $(TESTS)
- @failed=0; all=0; xfail=0; xpass=0; skip=0; \
- srcdir=$(srcdir); export srcdir; \
- list=' $(TESTS) '; \
- $(am__tty_colors); \
- if test -n "$$list"; then \
- for tst in $$list; do \
- if test -f ./$$tst; then dir=./; \
- elif test -f $$tst; then dir=; \
- else dir="$(srcdir)/"; fi; \
- if $(TESTS_ENVIRONMENT) $${dir}$$tst; then \
- all=`expr $$all + 1`; \
- case " $(XFAIL_TESTS) " in \
- *[\ \ ]$$tst[\ \ ]*) \
- xpass=`expr $$xpass + 1`; \
- failed=`expr $$failed + 1`; \
- col=$$red; res=XPASS; \
- ;; \
- *) \
- col=$$grn; res=PASS; \
- ;; \
- esac; \
- elif test $$? -ne 77; then \
- all=`expr $$all + 1`; \
- case " $(XFAIL_TESTS) " in \
- *[\ \ ]$$tst[\ \ ]*) \
- xfail=`expr $$xfail + 1`; \
- col=$$lgn; res=XFAIL; \
- ;; \
- *) \
- failed=`expr $$failed + 1`; \
- col=$$red; res=FAIL; \
- ;; \
- esac; \
- else \
- skip=`expr $$skip + 1`; \
- col=$$blu; res=SKIP; \
- fi; \
- echo "$${col}$$res$${std}: $$tst"; \
- done; \
- if test "$$all" -eq 1; then \
- tests="test"; \
- All=""; \
- else \
- tests="tests"; \
- All="All "; \
- fi; \
- if test "$$failed" -eq 0; then \
- if test "$$xfail" -eq 0; then \
- banner="$$All$$all $$tests passed"; \
- else \
- if test "$$xfail" -eq 1; then failures=failure; else failures=failures; fi; \
- banner="$$All$$all $$tests behaved as expected ($$xfail expected $$failures)"; \
- fi; \
- else \
- if test "$$xpass" -eq 0; then \
- banner="$$failed of $$all $$tests failed"; \
- else \
- if test "$$xpass" -eq 1; then passes=pass; else passes=passes; fi; \
- banner="$$failed of $$all $$tests did not behave as expected ($$xpass unexpected $$passes)"; \
- fi; \
- fi; \
- dashes="$$banner"; \
- skipped=""; \
- if test "$$skip" -ne 0; then \
- if test "$$skip" -eq 1; then \
- skipped="($$skip test was not run)"; \
- else \
- skipped="($$skip tests were not run)"; \
- fi; \
- test `echo "$$skipped" | wc -c` -le `echo "$$banner" | wc -c` || \
- dashes="$$skipped"; \
- fi; \
- report=""; \
- if test "$$failed" -ne 0 && test -n "$(PACKAGE_BUGREPORT)"; then \
- report="Please report to $(PACKAGE_BUGREPORT)"; \
- test `echo "$$report" | wc -c` -le `echo "$$banner" | wc -c` || \
- dashes="$$report"; \
- fi; \
- dashes=`echo "$$dashes" | sed s/./=/g`; \
- if test "$$failed" -eq 0; then \
- echo "$$grn$$dashes"; \
- else \
- echo "$$red$$dashes"; \
- fi; \
- echo "$$banner"; \
- test -z "$$skipped" || echo "$$skipped"; \
- test -z "$$report" || echo "$$report"; \
- echo "$$dashes$$std"; \
- test "$$failed" -eq 0; \
- else :; fi
+# To be appended to the command running the test. Handle the stdout
+# and stderr redirection, and catch the exit status.
+am__check_post = \
+>$@-t 2>&1; \
+estatus=$$?; \
+if test -n '$(DISABLE_HARD_ERRORS)' \
+ && test $$estatus -eq 99; then \
+ estatus=1; \
+fi; \
+TERM=$$__SAVED_TERM; export TERM; \
+$(am__tty_colors); \
+xfailed=PASS; \
+case " $(XFAIL_TESTS) " in \
+ *[\ \ ]$$f[\ \ ]* | *[\ \ ]$$dir$$f[\ \ ]*) \
+ xfailed=XFAIL;; \
+esac; \
+case $$estatus:$$xfailed in \
+ 0:XFAIL) col=$$red; res=XPASS;; \
+ 0:*) col=$$grn; res=PASS ;; \
+ 77:*) col=$$blu; res=SKIP ;; \
+ 99:*) col=$$red; res=FAIL ;; \
+ *:XFAIL) col=$$lgn; res=XFAIL;; \
+ *:*) col=$$red; res=FAIL ;; \
+esac; \
+echo "$${col}$$res$${std}: $$f"; \
+echo "$$res: $$f (exit: $$estatus)" | \
+ $(am__rst_section) >$@; \
+cat $@-t >>$@; \
+rm -f $@-t
+
+$(TEST_SUITE_LOG): $(TEST_LOGS)
+ @$(am__sh_e_setup); \
+ list='$(TEST_LOGS)'; \
+ results=`for f in $$list; do \
+ read line < $$f && echo "$$line" || echo FAIL; \
+ done`; \
+ all=`echo "$$results" | sed '/^$$/d' | wc -l | sed -e 's/^[ ]*//'`; \
+ fail=`echo "$$results" | grep -c '^FAIL'`; \
+ pass=`echo "$$results" | grep -c '^PASS'`; \
+ skip=`echo "$$results" | grep -c '^SKIP'`; \
+ xfail=`echo "$$results" | grep -c '^XFAIL'`; \
+ xpass=`echo "$$results" | grep -c '^XPASS'`; \
+ failures=`expr $$fail + $$xpass`; \
+ all=`expr $$all - $$skip`; \
+ if test "$$all" -eq 1; then tests=test; All=; \
+ else tests=tests; All="All "; fi; \
+ case fail=$$fail:xpass=$$xpass:xfail=$$xfail in \
+ fail=0:xpass=0:xfail=0) \
+ msg="$$All$$all $$tests passed. "; \
+ exit=true;; \
+ fail=0:xpass=0:xfail=*) \
+ msg="$$All$$all $$tests behaved as expected"; \
+ if test "$$xfail" -eq 1; then xfailures=failure; \
+ else xfailures=failures; fi; \
+ msg="$$msg ($$xfail expected $$xfailures). "; \
+ exit=true;; \
+ fail=*:xpass=0:xfail=*) \
+ msg="$$fail of $$all $$tests failed. "; \
+ exit=false;; \
+ fail=*:xpass=*:xfail=*) \
+ msg="$$failures of $$all $$tests did not behave as expected"; \
+ if test "$$xpass" -eq 1; then xpasses=pass; \
+ else xpasses=passes; fi; \
+ msg="$$msg ($$xpass unexpected $$xpasses). "; \
+ exit=false;; \
+ *) \
+ echo >&2 "incorrect case"; exit 4;; \
+ esac; \
+ if test "$$skip" -ne 0; then \
+ if test "$$skip" -eq 1; then \
+ msg="$$msg($$skip test was not run). "; \
+ else \
+ msg="$$msg($$skip tests were not run). "; \
+ fi; \
+ fi; \
+ { \
+ echo "$(PACKAGE_STRING): $(subdir)/$(TEST_SUITE_LOG)" | \
+ $(am__rst_title); \
+ echo "$$msg"; \
+ echo; \
+ echo ".. contents:: :depth: 2"; \
+ echo; \
+ for f in $$list; do \
+ read line < $$f; \
+ case $$line in \
+ SKIP:*|PASS:*|XFAIL:*);; \
+ *) echo; cat $$f;; \
+ esac; \
+ done; \
+ } >$(TEST_SUITE_LOG).tmp; \
+ mv $(TEST_SUITE_LOG).tmp $(TEST_SUITE_LOG); \
+ if test -n '$(LAZY_TEST_SUITE)'; then \
+ msg="$${msg}(tests were rerun lazily). "; \
+ fi; \
+ if test "$$failures" -ne 0; then \
+ msg="$${msg}See $(subdir)/$(TEST_SUITE_LOG). "; \
+ if test -n "$(PACKAGE_BUGREPORT)"; then \
+ msg="$${msg}Please report to $(PACKAGE_BUGREPORT). "; \
+ fi; \
+ fi; \
+ $(am__tty_colors); \
+ if $$exit; then \
+ echo $(ECHO_N) "$$grn$(ECHO_C)"; \
+ else \
+ echo $(ECHO_N) "$$red$(ECHO_C)"; \
+ fi; \
+ echo "$$msg" | $(am__text_box); \
+ echo $(ECHO_N) "$$std$(ECHO_C)"; \
+ test x"$$VERBOSE" = x || $$exit || cat $(TEST_SUITE_LOG); \
+ $$exit
+
+# Run all the tests.
+check-TESTS:
+ @list='$(TEST_LOGS)'; if test -z '$(LAZY_TEST_SUITE)' \
+ && test -n "$$list"; then \
+ rm -f $$list; \
+ fi
+ @test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG)
+ @set_logs=; if test "X$(TEST_LOGS)" = X.log; then \
+ set_logs=TEST_LOGS=; \
+ fi; \
+ $(MAKE) $(AM_MAKEFLAGS) $(TEST_SUITE_LOG) $$set_logs
+
+.log.html:
+ @list='$(RST2HTML) $$RST2HTML rst2html rst2html.py'; \
+ for r2h in $$list; do \
+ if ($$r2h --version) >/dev/null 2>&1; then \
+ R2H=$$r2h; \
+ fi; \
+ done; \
+ if test -z "$$R2H"; then \
+ echo >&2 "cannot find rst2html, cannot create $@"; \
+ exit 2; \
+ fi; \
+ $$R2H $< >$@.tmp
+ @mv $@.tmp $@
+
+# Be sure to run check-TESTS first, and then to convert the result.
+# Beware of concurrent executions. And expect check-TESTS to fail.
+check-html:
+ @if $(MAKE) $(AM_MAKEFLAGS) check-TESTS; then :; else \
+ rv=$$?; \
+ $(MAKE) $(AM_MAKEFLAGS) $(TEST_SUITE_HTML); \
+ exit $$rv; \
+ fi
+.test.log:
+ @p='$<'; $(am__check_pre) "$$tst" $(am__check_post)
distdir: $(DISTFILES)
@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
if test -d $$d/$$file; then \
dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test -d "$(distdir)/$$file"; then \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
- cp -pR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
fi; \
- cp -pR $$d/$$file "$(distdir)$$dir" || exit 1; \
+ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
else \
test -f "$(distdir)/$$file" \
|| cp -p $$d/$$file "$(distdir)/$$file" \
`test -z '$(STRIP)' || \
echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
mostlyclean-generic:
+ -test -z "$(TEST_LOGS)" || rm -f $(TEST_LOGS)
+ -test -z "$(TEST_LOGS_TMP)" || rm -f $(TEST_LOGS_TMP)
+ -test -z "$(TEST_SUITE_HTML)" || rm -f $(TEST_SUITE_HTML)
+ -test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG)
clean-generic:
maintainer-clean-generic:
@echo "This command is intended for maintainers to use"
@echo "it deletes files that may require special tools to rebuild."
+ -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES)
clean: clean-am
-clean-am: clean-generic mostlyclean-am
+clean-am: clean-generic clean-local mostlyclean-am
distclean: distclean-am
-rm -f Makefile
-distclean-am: clean-am distclean-generic distclean-local
+distclean-am: clean-am distclean-generic
dvi: dvi-am
uninstall-am:
-.MAKE: check-am install-am install-strip
+.MAKE: check-TESTS check-am check-html install-am install-strip
-.PHONY: all all-am check check-TESTS check-am clean clean-generic \
- distclean distclean-generic distclean-local distdir dvi dvi-am \
- html html-am info info-am install install-am install-data \
- install-data-am install-dvi install-dvi-am install-exec \
- install-exec-am install-html install-html-am install-info \
- install-info-am install-man install-pdf install-pdf-am \
- install-ps install-ps-am install-strip installcheck \
- installcheck-am installdirs maintainer-clean \
+.PHONY: all all-am check check-TESTS check-am check-html clean \
+ clean-generic clean-local distclean distclean-generic distdir \
+ dvi dvi-am html html-am info info-am install install-am \
+ install-data install-data-am install-dvi install-dvi-am \
+ install-exec install-exec-am install-html install-html-am \
+ install-info install-info-am install-man install-pdf \
+ install-pdf-am install-ps install-ps-am install-strip \
+ installcheck installcheck-am installdirs maintainer-clean \
maintainer-clean-generic mostlyclean mostlyclean-generic pdf \
pdf-am ps ps-am uninstall uninstall-am
-distclean-local: check-clean-local
+$(srcdir)/parallel-tests.am: gen-parallel-tests Makefile.am
+ (cd $(srcdir) && $(SHELL) ./gen-parallel-tests) >$@
+
+$(parallel_tests): $(parallel_tests:-p.test=.test) Makefile.am
+ input=`echo $@ | sed 's,.*/,,; s,-p.test$$,.test,'`; \
+ sed 's,^\. \./defs,. ./defs-p,' < $(srcdir)/$$input > $@
+ chmod a+rx $@
+
+defs-p: defs Makefile.am
+ sed 's,^AM_INIT_AUTOMAKE$$,&([parallel-tests]),' < defs >$@
+
+clean-local: check-clean-local
check-clean-local:
-chmod -R u+rwx *.dir
- -rm -rf *.dir
+ -rm -rf defs-p *.dir
# Tell versions [3.59,3.63) of GNU make to not export all variables.
# Otherwise a system limit (for SysV at least) may be exceeded.