Karl Berry [Sun, 24 Dec 2023 16:55:04 +0000 (08:55 -0800)]
test: do not leave files as mode zero.
Follows up on https://bugs.gnu.org/67868.
* t/dist-with-unreadable-makefile-fails.sh: chmod u+rw at end.
Also follow usual pattern of ending tests with :, not explicit exit.
* t/tap-bad-prog.tap: chmod u+r at end (since only r removed).
Karl Berry [Sat, 23 Dec 2023 18:44:03 +0000 (10:44 -0800)]
doc: more on help2man and "Errors with distclean".
This fixes (the rest of) https://bugs.gnu.org/67891.
* doc/automake.texi (Errors with distclean): make a subsection of
"Checking the Distribution". Contrast help2man usage examples of
Autoconf (includes man pages in distribution) and
Automake (no man pages, distributes the help2man script instead).
(Checking the Distribution): convert subheadings to subsections.
* doc/local.mk: also mention autoconf vs. automake approaches here,
and point to the manual.
(checklinkx): en passant, remove unused checklinkx exclude.
Zack Weinberg [Fri, 22 Dec 2023 23:52:26 +0000 (15:52 -0800)]
maint: sync autoconf Channels.pm and ChannelsDefs.pm.
Patch from https://bugs.gnu.org/67971.
The changes address <https://savannah.gnu.org/support/?110872>,
about m4_warn code/documentation consistency.
It should be impossible to reach report_bad_channel from code in
Automake.
* lib/Automake/Channels.pm (msg): If the channel argument is invalid,
don't crash; report the mistake and use the `syntax' channel.
(report_bad_channel): New function for reporting invalid channels.
* lib/Automake/ChannelDefs.pm (usage): Clarify that the list of
warning categories is exhaustive, and that ``all'', ``none'',
``no-CATEGORY'', and ``error'' are not warning categories.
Karl Berry [Thu, 21 Dec 2023 23:46:43 +0000 (15:46 -0800)]
automake: avoid unnecessary use of \K.
This fixes (part of) https://bugs.gnu.org/67891
and follows up on https://bugs.gnu.org/55025.
* bin/automake.in (generate_makefile) <posix>: avoid use of
\K when removing comment and blank lines before a .POSIX target,
since Solaris 10 has perl 5.8.4, and \K was added in 5.10.
Karl Berry [Mon, 18 Dec 2023 22:20:55 +0000 (14:20 -0800)]
maint: announcement text tweaks.
* HACKING: mention DEVEL_SNAPSHOT=1 for us.
* NEWS: tweak text.
* maintainer/maint.mk (announcement): tweak text,
ls -l ./announcement as a clue as to where the result is.
karl [Sun, 17 Dec 2023 16:42:35 +0000 (08:42 -0800)]
dist: more forcefully deal with mode 0 directories created by tests.
From https://bugs.gnu.org/67868.
* lib/am/distdir.am (am__remove_distdir): make directories
readable and searchable, not just writable. (Also typo.)
* t/local.mk (clean-local-check): ensure directories are
at least mode 700
* t/uninstall-fail.sh: restore reasonable permissions of
the mode 0 $inst/share directory at the end.
Reuben Thomas [Sun, 10 Dec 2023 23:12:00 +0000 (15:12 -0800)]
doc: add advice to list Yacc/Lex generated sources in BUILT_SOURCES.
For https://bugs.gnu.org/62791.
* doc/automake.texi (Yacc and Lex): it seems to be necessary to
list the generated C source file for a Yacc/Lex file, as well as the
header file, in BUILT_SOURCES.
Zack Weinberg [Sun, 10 Dec 2023 17:50:51 +0000 (09:50 -0800)]
automake: again revise file mtime resolution support.
This patch is from https://bugs.gnu.org/67670.
In order for the Automake testsuite to be able to use sub-second
delays to control whether certain files are considered newer
than others, five(!) separate pieces of software all need to
cooperate: automake itself, autoconf's internal `autom4te'
utility, the Perl interpreter and its libraries, the sleep(1)
shell utility, and finally the filesystem hosting the build
directory. The existing tests for this are a combination of
inadequate and incorrect. This patch, in conjunction with a
patch just committed to Autoconf trunk,
https://git.savannah.gnu.org/cgit/autoconf.git/commit/?id=39d96e6fff7ceae63b823872602caf4d255a38c8
should make everything much more robust, as follows:
- _AM_FILESYSTEM_TIMESTAMP_RESOLUTION is completely rewritten.
It no longer looks for autom4te at all, because this macro is
invoked unconditionally from AM_INIT, so *every* project that
uses Automake would get this test that's only relevant to
Automake's own testsuite. Also, it tries sleeping for as little
as one millisecond (smaller delays consistently get rounded up
to 1ms on my computer and I expect that's universal), it should
accurately detect FAT's two-second resolution now, and it should
not be tripped up anymore by running at precisely the moment
that will make a 0.1s sleep cross a 1s boundary (this may sound
unlikely but it used to cause a couple of test failures *every
time* I ran the automake testsuite on a network filesystem that
only supported 1s resolution).
- In support of the above, the test for working ls -t moved from
AM_SANITY_CHECK to _AM_FILESYSTEM_TIMESTAMP_RESOLUTION. This
allowed me to simplify the test for $srcdir/configure being
older than a freshly created file.
- If automake is capable of reading high-resolution file
modification timestamps from the operating system, it prints
`Features: subsecond-mtime' as the second line of --version
output. (We can't just assume this works for sufficiently new
automake, because it depends on whether the Perl interpreter
provides this capability, and that's not a simple question of
which version of Perl you have, either.)
- The Autoconf patch mentioned above adds the same annotation to the
output of autom4te --version.
- Finally, t/ax/test-defs.in looks for the
`Features: subsecond-mtime' string from both automake and
autom4te and resets the sleep time to one second if it's not
there. There might be a better place to put this, somewhere
it'll execute every time the *overall testsuite* is invoked
rather than once for each test, but I couldn't find one.
Tested on x86-64-linux with development automake and development
autoconf.
* m4/sanity.m4 (_AM_FILESYSTEM_TIMESTAMP_RESOLUTION): Rewrite for
greater reliability. Don't probe autom4te at all here.
Check for working ls -t here.
(AM_SANITY_CHECK): Do not cache the result.
Do not check for working `ls -t' here.
Disentangle control flow in the loop probing the relative ages of
build and source directory.
* lib/Automake/FileUtils.pm: Sync from autoconf.
* bin/automake.in (version): Include `Features: subsecond-mtime'
in the output if $Automake::FileUtils::subsecond_mtime is true.
* configure.ac: Rename the substitution variable MODIFICATION_DELAY
to MTIME_RESOLUTION.
* t/ax/test-defs.in: Require both $AUTOMAKE and $AUTOM4TE to report
support for high-resolution timestamps before setting $sleep to
delay for less than one second.
* NEWS: Update info.
Karl Berry [Sat, 2 Dec 2023 22:33:30 +0000 (14:33 -0800)]
doc: autoconf portability link, python NEWS.
More for https://bugs.gnu.org/67268.
* doc/automake.texi (Usage of Conditionals): link to
Autoconf's Limitations of Builtins, e.g.,
https://www.gnu.org/savannah-checkouts/gnu/autoconf/manual/autoconf-2.71/html_node/Limitations-of-Builtins.html
* NEWS: Python version preferences are not just miscellaneous.
* lib/missing: add autoreconf, autogen and perl as supported programs,
potentially especially useful from bootstrap scripts. Alphabetize.
* NEWS: mention.
* THANKS: new contributor.
* contrib/test-driver.scm: remove.
Original patch and discussion:
https://lists.gnu.org/archive/html/automake-patches/2016-05/msg00000.html
Suggestion from guile-devel in 2023 that it's been updated outside
of Automake, and merging would not be especially helpful:
https://lists.gnu.org/archive/html/guile-devel/2023-11/msg00036.html
Pavel Raiskup [Tue, 21 Nov 2023 16:30:00 +0000 (08:30 -0800)]
automake: make the ARFLAGS default 'cr' instead of 'cru'.
In some GNU/Linux distributions people started to compile 'ar'
binary with --enable-deterministic-archives (binutils project).
That, however, in combination with our previous long time working
default AR_FLAGS=cru causes warnings on such installations:
ar: `u' modifier ignored since `D' is the default (see `U')
The 'u' option (at least with GNU binutils) did small optimization
during repeated builds because it instructed 'ar' to not
open/close unchanged *.o files and to rather read their contents
from old archive file. However, its removal should not cause a
big performance hit for usual workflows.
Distributions started using --enable-deterministic-archives
knowing that it would disable the 'u', just to rather have a bit
more deterministic builds.
Also, to justify this change a bit more, keeping 'u' in ARFLAGS
could only result in many per-project changes to override
Automake's ARFLAGS default, just to silence such warnings.
Fixes bug#20082. Reported by Eric Blake.
* bin/automake.in (handle_libraries): Use 'ARFLAGS=cr' by default.
* doc/automake.texi (Building a library): Mention the changed
ARFLAGS default.
(@c LocalWords): Replace 'cru' with 'cr'.
* m4/ar-lib.m4 (AM_PROG_AR): Cut out 'cru' string into separate
ARFLAGS variable with new default 'cr'.
* NEWS: Document.
Karl Berry [Sun, 19 Nov 2023 02:25:16 +0000 (18:25 -0800)]
doc: mention shell operators preferred over `test` options.
* doc/automake.texi (Usage of Conditionals): mention that shell
operators (&&, ||, ()) are preferred over `test` options (-a, -o,
\(\)). Idea and POSIX url reference from Michael Stapelberg,
https://lists.gnu.org/archive/html/automake-patches/2016-10/msg00002.html
Karl Berry [Thu, 2 Nov 2023 01:03:36 +0000 (18:03 -0700)]
doc: references for non-fractional timestamps.
The non-fractional fix from Bogdan fixes
https://bugs.gnu.org/64756, discussed earlier in a long thread on
automake in 2023-03 and 2023-04; references in the bug.
Jacob Bachmeyer contributed to the analysis and fixes.
Karl Berry [Mon, 30 Oct 2023 17:14:51 +0000 (10:14 -0700)]
doc: user conditional for dependency tracking.
* doc/automake.texi (Automatic dependency tracking): Describe
basing a conditional for dependency tracking on the shell variable
enable_dependency_tracking. Mentioned by Nick Bowler.
https://lists.gnu.org/archive/html/automake/2023-09/msg00004.html
Vincent Lefevre [Fri, 6 Oct 2023 15:18:33 +0000 (08:18 -0700)]
automake: new option posix to emit .POSIX target first.
This patch is from https://bugs.gnu.org/55025.
* lib/Automake/Options.pm (_is_valid_easy_option): declare new
option "posix".
* bin/automake.in (generate_makefile): if the "posix" option is
present, add a .POSIX special target as the first non-comment
line in the Makefile.in files.
* NEWS: mention this.
* doc/automake.texi: likewise.
Jan Engelhardt [Thu, 10 Aug 2023 01:07:00 +0000 (18:07 -0700)]
automake: portability warning for dollar-escaped dollar signs.
This bug and fix was posted at
https://lists.gnu.org/archive/html/automake/2023-08/msg00003.html.
* lib/Automake/Variable.pm (scan_variable_expansions): rewrite
scan_variable_expansions regex to handle dollar-escaped dollar signs.
* t/dollarvar2.sh: test it.
Bruno Haible [Fri, 21 Jul 2023 01:03:27 +0000 (18:03 -0700)]
automake: disable GNU make's internal pattern rules, for speed.
From https://bugs.gnu.org/64743.
* lib/am/footer.am: Disable GNU make's internal pattern rules.
* lib/Automake/Rule.pm (_conditionals_for_rule): Add special handling
for these pattern rules from footer.am.
(define): Likewise.
* t/nodep.sh: Update test to avoid matching the new %:: rules.
* t/fnoc.sh: Update test to avoid matching the new %:: SCCS rule.
* NEWS: Mention this.
* doc/automake.texi (Suffixes): Likewise.
(Doc changes written by Karl.)
Mike Frysinger [Fri, 14 Jul 2023 15:50:51 +0000 (08:50 -0700)]
automake: set test delays to am_cv_filesystem_timestamp_resolution.
This patch is from https://bugs.gnu.org/60808.
* configure.ac: Set test delays to
am_cv_filesystem_timestamp_resolution, instead of hardwiring
5sec on DJGPP and 2sec elsewhere. This speeds up test runs
significantly, informally as much 30%.
This change refines the fix for https://bugs.gnu.org/54063.
* bin/automake.in (scan_texinfo_file): if .texi doesn't exist,
but .texi.in exists, read the latter for the Texinfo source.
Use the @setfilename argument, if present, to generate rules.
* t/txinfo-no-texi-but-texi-in.sh: new test.
* t/list-of-tests.mk (handwritten_tests): add it.
* doc/automake.texi (Texinfo): document this.
* NEWS: mention this. (Doc changes written by Karl.)
This change: finishes fixing https://bugs.gnu.org/34151
and https://bugs.gnu.org/30612 and https://bugs.gnu.org/42393;
fixes https://bugs.gnu.org/44795 and https://bugs.gnu.org/49755;
partially fixes https://bugs.gnu.org/45205
and https://bugs.gnu.org/55073.
Still open: https://bugs.gnu.org/15256;
* t/lex-clean-cxx.sh: test __cplusplus, __sun, and __EXTERN_C__
before using extern "C" for the yylex decl, as explained at
https://debbugs.gnu.org/cgi/bugreport.cgi?bug=45205#13.
* t/lex-depend-cxx.sh: likewise.
This change finishes fixing https://bugs.gnu.org/30556.
* t/python-prefix.sh: use $PYTHON if set, not hardwiring "python".
* t/python-virtualenv.sh (get-pyexecdir): new make target;
use it instead of hardwiring $py_site.
automake: do not warn that POSIX variables are non-POSIX.
This change fixes https://bugs.gnu.org/9587.
* lib/Automake/Variable.pm (_VARIABLE_PATTERN_EXTRA_POSIX):
new variable for $(*D) and the like.
(_VARIABLE_PATTERN): use it.
* t/vars3.sh: update test.
* NEWS: mention this.
POSIX spec (currently):
https://pubs.opengroup.org/onlinepubs/9699919799/utilities/make.html
Karl Berry [Sun, 25 Jun 2023 01:31:29 +0000 (18:31 -0700)]
doc: bring a few examples up to date.
* doc/automake.texi (Built Sources Example): use @kbd for typed
commands; show current output.
(Checking the Distribution): refer to Third-Party Makefiles
for the do-nothing dvi target example.
Other small wording tweaks throughout.
* HACKING: consistently omit $ prompt.
Say a bit more about versions of Autoconf.
Describe actual current status of branches (only master in use).
Give some topic examples.
"rerun" not "re-run".
Other small wording tweaks throughout.
Karl Berry [Sat, 24 Jun 2023 00:51:43 +0000 (17:51 -0700)]
test: avoid sometime-race condition for dist-no-built-sources test.
* t/dist-no-built-sources.sh: rm the dist .tar.gz and .tar
generated after inspecting, to avoid it being considered up to
date on the second time through the loop.
Paul Eggert [Thu, 8 Jun 2023 21:33:14 +0000 (14:33 -0700)]
depcomp spelling fix
* lib/depcomp: Fix spelling in comment.
Originally reported by Josh Soref <jsoref@gmail.com> in:
https://lists.gnu.org/r/bug-gnulib/2023-06/msg00057.html
Karl Berry [Tue, 30 May 2023 00:54:07 +0000 (17:54 -0700)]
doc: improve NAME string for man pages.
This change fixes https://bugs.gnu.org/62853 and
https://bugs.gnu.org/62854.
* doc/local.mk (update_mans): move $(AM_V_GEN): to calls;
include --name="$${HELP2MAN_NAME}".
(-%D%/aclocal-$(APIVERSION).1, %D%/automake-$(APIVERSION).1):
set HELP2MAN_NAME in environment to pass to help2man.
Bogdan [Sun, 28 May 2023 01:10:11 +0000 (18:10 -0700)]
configure: exit explicitly if the path to perl contains spaces.
This change ameloriates https://bugs.gnu.org/62896.
* configure.ac: exit explicitly if the result of AC_PATH_PROG for
perl contains spaces, since shebang lines cannot support such paths.
* THANKS (Bogdan): add.
* t/ax/am-test-lib.sh (is_blocked_signal): Revise Perl code
to more closely follow documented interfaces where
available. This also works around bugs and limitations
of the POSIX module in Perl 5.6.
Karl Berry [Wed, 1 Mar 2023 23:03:30 +0000 (15:03 -0800)]
doc: tweak old NEWS about ACLOCAL_AMFLAGS.
* NEWS: any ACLOCAL_AMFLAGS deprecation will be in a major
release (the hypothetical 2.0), not sooner.
* NEWS-2.0: developers who don't wish to be maintainers are also
welcome and needed.
* bin/automake.in: restore explicit per-directory pattern rules,
since evidently @D is not supported on BSD-derived makes,
whatever POSIX says. That is, revert this commit:
https://git.savannah.gnu.org/gitweb/?p=automake.git;a=commitdiff;h=55f8fcfd08cbf15d65d61dd2db934b6c3171cf06
Paul Eggert [Thu, 2 Feb 2023 22:17:52 +0000 (14:17 -0800)]
Use higher-resolution file timestamps
* lib/Automake/FileUtils.pm (mtime):
Return higher-resolution file timestamps.
This isn’t perfect, but it’s better than what we had.
Code change taken from Autoconf to partially fix a race
<https://bugs.gentoo.org/show_bug.cgi?id=782985>.
Frédéric Bérat [Mon, 12 Dec 2022 06:32:13 +0000 (07:32 +0100)]
tests: depcomp: ensure make_ok() fails when run_make fails
While running automake tests with -std-gnu=c99, the compiler report
errors which lead to make to fail. Yet, these failures are ignored
during the tests, which considers them to be successful as stderror is
check for one specific pattern.
If make fails, investigation should be made to discover why, whatever
the reason for the failure is.
* t/ax/depcomp.sh: Make make_ok fail when make fails.
Mike Frysinger [Fri, 13 Jan 2023 01:31:31 +0000 (20:31 -0500)]
tests: rework gettext to only check 'external' behavior
The gettext project deprecated non-external use back in 2010 with the
0.18 release, and made it fatal with the 0.20 release in 2019. With
that version, calling AM_GNU_GETTEXT() fails, which means all Automake
tests are now skipped. The t/gettext-macros.sh helper probes gettext
as such:
>+ autopoint --force
> autopoint: *** AM_GNU_GETTEXT without 'external' argument is no longer supported in version 0.21.1
> autopoint: *** Stop.
> ...
>+ aclocal-1.16 -Werror -Wno-syntax -I m4 --install
> aclocal-1.16: warnings are treated as errors
> configure.ac:4: warning: macro 'AM_GNU_GETTEXT' not found in library
> configure.ac:5: warning: macro 'AM_GNU_GETTEXT_VERSION' not found in library
>+ echo skip_all_ "couldn't find or get gettext macros"
Since t/gettext-macros.sh generates a helper that all other gettext
tests use to see if gettext is available, all they get skipped.
Rework our existing tests to only check the 'external' gettext mode.
This should work with older versions, and we don't really need to
keep track of old non-external mode since it's been deprecated for
so long.
Mike Frysinger [Fri, 13 Jan 2023 05:09:06 +0000 (00:09 -0500)]
tests: disable git log pager usage
When running this code locally, the git log call can trigger a pager
depending on the local settings, which in turn forces the test to be
interactive. Run git with --no-pager to force disable it.
Frédéric Bérat [Mon, 12 Dec 2022 07:05:53 +0000 (08:05 +0100)]
tests: Fix 'type defaults' error in link_cond due to main not being properly declared
This is related to an effort to prepare Automake for future GCC/Clang
versions which set c99 as default standard to be used.
Not properly declaring main as "int main(...)" is rejected since c99.
Mike Frysinger [Thu, 12 Jan 2023 03:07:22 +0000 (22:07 -0500)]
dirstamp: switch to a pattern rule
We can leverage $(@D) to generate a single pattern rule for all dirstamp
rules. This saves many lines in the output -- normally we create 2 rules
(or 6 lines) per subdir, and projects that use subdirs tend to use them
quite a bit.
In the most extreme & unlikely case (1 subdir, no depdir support), the
line count is the same. In every other case, it's always a win.
Looking at a few real world projects, the line deltas:
* GNU libgloss: +3 -66
* GNU newlib: +3 -714
* GNU sim: +3 -138
There shouldn't be any concerns about portability with $(@D) because:
(0) This has been in POSIX (and beyond) for decades,
(1) We only generate this rule iff we know the dirstamp is in a subdir
(so we'd never have a case where $(@D) would expand to the cwd, and
that is where a few implementations are known to be buggy),
(2) We already rely on $(@D) in our depdir code, and have since 2014
(the Automake 1.16 release).
Mike Frysinger [Thu, 12 Jan 2023 02:40:04 +0000 (21:40 -0500)]
dirstamp: use append too instead of truncate
We changed the depfiles logic to use >> (append) instead of > (truncate)
due to it being slightly faster & nicer to the disk. Do the same with
the dirstamp files as we only need the files to exist -- we don't care
about their content, and we never put anything in them ourselves. If
someone else were to, we clean them up normally with `make clean`.
Simple test case on my Linux 6.1 w/ext4 on SSD:
@: > foo.txt
for (i = 0; i < 1000000; ++i) close(open("foo.txt", O_WRONLY|O_CREAT|O_TRUNC, 0666));
-> 769 msec
@: >>foo.txt
for (i = 0; i < 1000000; ++i) close(open("foo.txt", O_WRONLY|O_CREAT|O_APPEND, 0666));
-> 2 sec
Mike Frysinger [Wed, 4 Jan 2023 02:46:38 +0000 (21:46 -0500)]
rm: convert more cases to am__rm_f
Fixes automake bug https://bugs.gnu.org/10828.
Clean up a few more cases where we were doing `test ... || rm ...` to
avoid calling `rm -f` without arguments by leveraging am__rm_f. These
were harder to find in the source due to their constructed nature.
The clean programs rules in particular were much more complicated than
they needed to be. This logic boiled down to two things: delete the
list of programs, and then delete the list without the exeext suffix,
but only if the list of programs is non-empty.
The check-TESTS rule was converted to am__rm_f, but a simplification
was missed where the $list variable is inlined.
* bin/automake.in: Delete test -z logic and always call am__rm_f.
* contrib/check-html.am: Use $(am__rm_f) helper.
* doc/automake.texi: Update examples to match current behavior.
* lib/am/check.am: Inline $list variable.
* lib/am/progs.am: Rewrite rule to use $(am__rm_f).
Karl Berry [Mon, 9 Jan 2023 01:56:40 +0000 (17:56 -0800)]
doc: overriding targets doesn't mean third-party Makefiles.
Fixes automake bug https://bugs.gnu.org/60607.
* doc/automake.texi (dvi and distcheck): simply show
dvi: as an example of a do-nothing Makefile (xref to Extending),
instead of cross-referencing the complicated method in
Third-Party Makefiles.
(Clean, Extending): wording tweaks.
Mike Frysinger [Wed, 4 Jan 2023 02:07:45 +0000 (21:07 -0500)]
depend: trim spurious leading tab
These vars are replaced with a list of remove commands that are joined
with a \n and each line always has a leading \t inserted. That means
the literal tab here before the var leads to 2 tabs included in the
output. While not functionally a problem, it can be a bit confusing
when reading the output as it implies something is amiss. Trimming
the tab also aligns with the other .am files which don't include it.
Karl Berry [Sat, 1 Oct 2022 21:59:51 +0000 (14:59 -0700)]
maintcheck: placate maintainer-check and grep 3.8.
* maintainer/syntax-checks.mk (sc_rm_minus_f): no \ before -
(diagnosed by grep 3.8).
* t/comment12.sh: use $(...) instead of `...`.
* t/comments-escaped-in-var.sh: use AUTOMAKE_fails and grep
for expected warning message.
* t/list-of-tests.mk (handwritten_TESTS): add t/py-compile-files.sh.
* t/subdir-add2-pr46.sh (.NOTPARALLEL): add; showed up with
parallelized internal make. Seems unreproducible.
Karl Berry [Sat, 1 Oct 2022 16:02:15 +0000 (09:02 -0700)]
aclocal: protect against Perl undefined warnings.
* bin/aclocal.in (usage): check that envvars (ACLOCAL_AUTOMAKE_DIR,
ACLOCAL_PATH) are defined before printing values.
* HACKING: describe running scripts from checkout, et al.