should be updated by hand whenever the GPL gets updated (which
shouldn't happen that often anyway :-).
-* All changes that are not trivial bug fixes must be mentioned in NEWS.
+* All changes from the last release that are not trivial bug fixes should
+ be mentioned in NEWS.
* Changes which are potentially controversial, require a non-trivial
plan, or must be implemented gradually with a roadmap spanning several
* You can run a single test, with, e.g.,
make check TESTS='t/aclocal-acdir.sh'
-
where t/aclocal-acdir.sh can be any t/*.sh test, including a new one
you are writing. You may want to add --no-print-dir to silence GNU
make about the many cd commands, and/or env VERBOSE=1 to get more
information about what make is running.
-* Sometimes you may want to see when each test starts running, and not
- just when they complete. This can be done by setting TESTS_ENVIRONMENT,
- as in:
+* Sometimes you may want to see when each test starts running, not only
+ when they complete. This can be done by setting TESTS_ENVIRONMENT:
make -j12 VERBOSE=1 TESTS_ENVIRONMENT='echo RUNNING: "$$f";' check
* Run "make maintainer-check" before commit. Watch out for trailing spaces.
- It may be useful to run it more verbose:
- make AM_V_GEN= VERBOSE=1 maintainer-check
+ Probably useful to run it more verbosely:
+ make AM_V_GEN= AM_V_at= VERBOSE=1 maintainer-check
* After "make -j12 check" succeeds. run "make -j12 distcheck" before
pushing a commit, since that exercises yet more of the code.
make check TESTS='t/good-name.sh'
- During development of a new test, it can be useful to end it with
- "exit 33" (or whatever random value) to force it to fail even when it
- would otherwise succeed, so you can inspect the test directory to be
- sure things worked as expected.
+ "exit 33" (or any random value) to force it to fail even when it would
+ otherwise succeed, so you can inspect the test.dir/test.log and other
+ test.dir/* files to be sure things worked as expected.
- At some point before releasing, add the test to the appropriate
variable in t/list-of-tests.mk, most likely the (alphabetical)
handwritten_TESTS.
+* Some hints for debugging test failures or trying to understand the
+ (complex) test infrastructure.
+
+ - You may want a simple test just to exercise the setup; t/amassign.sh
+ is such a test. For a simple test that runs automake twice (sometimes
+ useful in finding concurrency failures), try t/nodef.sh.
+
+ - The t/ax/ dir contains most of the test infrastructure files.
+
+ - To trace the (complex) test initialization code, change the set -e
+ to set -ex (or whatever you wish) in t/ax/test-init.sh.
+ Automake itself enables -x for the *.log and test-suite.log files,
+ in am_test_setup in t/ax/test-lib.sh. You may want to change to -vx.
+
+ - If you want to run the individual commands of a test one by one in a
+ shell, you have to reproduce the test environment. Start a subshell and:
+ PATH=$am/bin:$am/t/ax:$PATH # where $am is your automake source checkout
+ set +u # if needed; automake cannot handle this "nounset" option
+ . test-init.sh # beginning of test
+ Then each command you type will be executed in the test environment,
+ including -x being enabled. Each test prints the PATH value at the beginning.
+
+ - If you need to debug a test which fails under installcheck, you need
+ to invoke make with am_running_installcheck=yes, as is done by the
+ installcheck-testsuite target in t/local.mk.
+
+ - If you want to see the (complex shell) commands that make is
+ running, despite all of Automake's attempt at silence, run (GNU)
+ make --debug=p ... other make args ...
+
============================================================================
= Bug tracker
* Automake uses the debbugs instance at https://bugs.gnu.org. Email
from the tracker is sent to bug-automake@gnu.org, and vice versa.
- (https://gnu.org/s/automake for all the mailing lists; you should subscribe.)
+ Ditto automake-patches@gnu.org. (See
+ https://gnu.org/s/automake for all the mailing lists; if you're
+ working on Automake, please subscribe.)
-* To see all open bugs (and recently closed ones):
+* To see all open bugs resp. patches (and recently closed ones):
https://debbugs.gnu.org/cgi/pkgreport.cgi?pkg=automake
+ https://debbugs.gnu.org/cgi/pkgreport.cgi?pkg=automake-patches
-* For a full search form, initialized to show bugs tagged confirmed:
+* For a full search form, initialized to show only bugs tagged confirmed:
https://debbugs.gnu.org/cgi/pkgreport.cgi?package=automake;include=tags%3Aconfirmed
* We use the "confirmed" tag to mean bugs that have been reviewed, are
* To download the so-called maintainer mbox for a bug, say 12345:
https://debbugs.gnu.org/cgi/bugreport.cgi?bug=12345;mbox=yes;mboxmaint=yes
Only the maintainer mbox consistently has the bug# prefix on Subject:
- lines, so it is generally the most usable.
+ lines, so it is the most usable, as far as we know.
* To close a bug, you can mail (or bcc) to 12345-done@debbugs.gnu.org.
It's best to do this with a note saying that the bug is being closed
- Generated file timestamp checks handle filesystems with sub-second
timestamp granularity dynamically, greatly speeding up make check,
- etc. However, this requires an autom4te from Autoconf 2.72 (as yet
- unreleased) or later (or random test failures and other timing
- problems may ensue), as well as a Perl, sleep utility, and
- filesystem that supports sub-second resolution; otherwise, we fall
- back to one-second granularity as before. When everything is
- supported, a new line `Features: subsecond-mtime' is printed by
- automake --version (and autom4mte --version). (bug#64756, bug#67670)
+ etc. However, this requires an autom4te from Autoconf 2.72 or later
+ (or random test failures and other timing problems may ensue), as
+ well as a Perl, sleep utility, and filesystem that supports
+ sub-second resolution; otherwise, we fall back to one-second
+ granularity as before. When everything is supported, a line
+ `Features: subsecond-mtime' is now printed by automake --version
+ and autom4mte --version. (bug#64756, bug#67670)
- The default value of $ARFLAGS is now "cr" instead of "cru", to better
support deterministic builds. (bug#20082)
- Pass any options given to AM_PROG_LEX on to AC_PROG_LEX.
(bug#65600, bug#65730)
+ - Typos in code and other doc fixes. (bug#68003, bug#68004, et al.)
+
* Obsolescence:
- py-compile no longer supports Python 0.x or 1.x versions. Python 2.0,
# _AM_SLEEP_FRACTIONAL_SECONDS
# ----------------------------
AC_DEFUN([_AM_SLEEP_FRACTIONAL_SECONDS], [dnl
-AC_CACHE_CHECK([whether sleep supports fractional seconds], am_cv_sleep_fractional_seconds, [dnl
-AS_IF([sleep 0.001 2>/dev/null], [am_cv_sleep_fractional_seconds=true], [am_cv_sleep_fractional_seconds=false])
+AC_CACHE_CHECK([whether sleep supports fractional seconds],
+ am_cv_sleep_fractional_seconds, [dnl
+AS_IF([sleep 0.001 2>/dev/null], [am_cv_sleep_fractional_seconds=true],
+ [am_cv_sleep_fractional_seconds=false])
])])
# _AM_FILESYSTEM_TIMESTAMP_RESOLUTION
# granularity, so we don't check for anything finer than that.
AC_DEFUN([_AM_FILESYSTEM_TIMESTAMP_RESOLUTION], [dnl
AC_REQUIRE([_AM_SLEEP_FRACTIONAL_SECONDS])
-AC_CACHE_CHECK([the filesystem timestamp resolution], am_cv_filesystem_timestamp_resolution, [dnl
+AC_CACHE_CHECK([filesystem timestamp resolution], am_cv_filesystem_timestamp_resolution, [dnl
# Default to the worst case.
am_cv_filesystem_timestamp_resolution=2
:
else
MTIME_RESOLUTION=1
+ # we must not sleep for fractional seconds when autom4te does not
+ # support subsecond-mtimes, even when sleep supports it. See bug#67670.
+ am_cv_sleep_fractional_seconds=false
+ export am_cv_sleep_fractional_seconds
fi
;;
esac
+
+# This sleep variable is used explicitly in some tests to avoid
+# too-quick creation. I (Karl) believe that was an incomplete workaround
+# for this whole subsecond-mtime problem. With this set to "sleep 1",
+# there were still random parallelization failures, without also setting
+# am_cv_sleep_fractional_seconds=false as above.
+#
sleep="sleep $MTIME_RESOLUTION"
# An old timestamp that can be given to a file, in "touch -t" format.
old_timestamp=198309271735.59
# Make our wrapper script (or installed scripts, if running under
-# "installcheck") accessible by default. And avoid to uselessly
-# extend $PATH multiple times if this file is sourced multiple times.
+# "installcheck") accessible by default. And avoid uselessly
+# extending $PATH multiple times if this file is sourced multiple times.
case $PATH in
$am_bindir$PATH_SEPARATOR*) ;;
*) PATH=$am_bindir$PATH_SEPARATOR$PATH;;