All tests now use the Test::Simple library. We keep the distinction between
pl (pure perl) and plt (perl + Test::Simple) in case someone wants to write a
perl tests without this lib.
- t/pm/*: All tests now use the plt extension and the Test::Simple library.
- t/pm/CondStack.pl: Remove it as it was not well built and the test results
were false.
This tests the make_paragraphs method from the Automake::File library. This
uses the newly added .plt file extension as we use the Test::Simple library.
- t/pm/File.pl: Add it.
FIXME: Their is a bug with the test that says:
Filehandle STDOUT reopened as $fh only for input at
/usr/share/perl/5.26/Test2/IPC/Driver/Files.pm line 144 during global
destruction.
It only happens when Automake modules are included. I suspect this comes from
the Automake::General module but this needs to be investigated.
lib/Automake/File.pm: Change the way make_paragraphs works
We now call preprocess_file before make_paragraphs. This is useful to test
the lib as we can now feed a file handle (Automake::XFile) directly to
make_paragraphs (and not simply a filename).
This function now takes a list of paragraph as argument instead of building it
in its code. This is the first step in the modification of this function to
be able to test it with files that don't "physically" exist in the actual file
system.
* lib/Automake/File.pm: Start the modification of file_contents_internal for
unit testing
These functions are language specific functions. To achieve this, we had to
add a new module "TmpModule". The functions in this module should be
relocated when we find a better place.
* lib/Automake/LangHandling.pm: Add handle_emacs_lisp, handle_java,
handle_python to this module.
* lib/Automake/LangHandling: Add this module to avoid include cycles.
This module handles the configure.ac files on the Automake side. It required
to modify a bit the scan_autoconf_[file|traces] functions so we can pass them
the environment var for autoconf as arguments from the main file (otherwise it
wouldn't work).
* lib/Automake/HandleConfigure.pm: Module for handling configure.ac for automake.
* lib/Automake/Utils.pm: Add some necessary functions for the new
HandleConfigure module.
backanme: get the back path to the Makefile directory.
locate_am: locate the *.am file for which a *.in file exists
get_number_of_threads: returns the number of threads on which Automake should
run.
* lib/Automake/Utils.pm: Add the backname, locate_am, get_number_of_threads
functions to the Automake::Utils module.
This test is placed in the perl_fake_XFAIL_TESTS meaning it is expected to
FAIL but is the correct behavior of the test. It should generate a fatal
error with the following message: 'unknown channel test-fatal'.
In an effort to move out as much as possible from the main script, we create
these modules to host the methods.
* LangHandling: This module host all the functions for handling
languages (functions that define obj directories of the language, rewrite
the file extention...).
* SilentRules: Declares functions for handling silent rules.
* Requires: Functions for requiring configuration files.
We move the variable to the bottom of the file where it is used because we
have no real reason to declare it where it was. The added comment has also
been removed since it doesn't make sense and isn't useful for the
comprehension of this variable. The variable will stay in this file unless we
have a real reason to move it out of this file.
The docs was mainly pod but the newly added methods were not documented that
way. This commit standardize that. Of course the private methods stay
documented with simple comments.
Checks if the output string is a flattened version of the input string. It
should remove trailing and leading whitespaces, multiple whitespaces (and
replace it with single ones) and line breaks in a given string.
* t/pm/Utils.pl: add check_flatten to the test-suite.
Some methods added to this module were not working properly because they
depend on others which stayed in automake.in
* ConfVars.pm: Added this module to put the methods in question.
* CondStack.pm: Module that takes care of the conditional stack.
* Utils.pm: Added some needed utility functions for the above to run properly.
* File.pm: Methods that looks at files' content.
* local.mk: Added the new modules.
Some subs in bin/automake are still moveable to this file but require to move
other subs before.
* verbose_var: adds a prefix to a variable name.
* verbose_private_var: same as verbose_var but for private vars. This method
is now private in this module since it is only used once in the.
define_verbose_var which has been moved here took.
* define_verbose_var: defines verbose variables for silent rules in the
generated makefile.
* define_verbose_tagvar: calls define_verbose_var with $name as argument
* define_variable: define a new Makefile variable.
* define_pretty_variable: same as above but for printing in an input file.
* define_files_variables: define a variable containing a list of files
composed of a specified basename and extension.
* define_configure_variable: define a variable and substitute its name by a
configure-style text.
* subst: Method to get a configure-style substitute from a text
* file_contents_internal: Return the contents of a file from automake/lib/am.
This is a long method that will need some reworking later.
This module contains utility methods to be used in bin/automake.
* lib/Automake/Utils.pm: New utility module.
* var_SUFFIXES_trigger: Moved to the Automake::Utils module.
* locate_aux_dir: Moved to the Automake::Utils module.
This is the first step in modularizing Automake for the Summer of Code project
"Modularize Automake to improve its test-suite". The goal here is to move out
as much as possible from bin/automake.in in order for it to eventually only
call methods from the different modules.
* lib/Automake/Global.pm: The Automake::Global package will now hold variable
and constant declarations in order to move subroutines that use them out of
the main package.
* bin/automake.in: The $gen_copyright var/constant was left here because it
uses a variable passed directly by the Makefile here. This needs to be
looked at later. Te rest of the declarations was moved.
Mathieu Lirzin [Sun, 25 Mar 2018 05:29:48 +0000 (07:29 +0200)]
test-driver.scm: Add "--coverage" option
* contrib/test-driver.scm: When 'coverage' option is enabled, run tests
in the debug vm and trace coverage data.
(%options): Add 'coverage'.
(show-help): Display option.
Mathieu Lirzin [Sat, 24 Mar 2018 22:42:16 +0000 (23:42 +0100)]
test-driver.scm: Don't guess script name from "--test-name"
'primitive-load' is used instead of 'load-from-path' since the script is
given as a relative file name. For unknown reason, using 'load' fails
with GNU Mcron test suite when running 'make distcheck'.
* contrib/test-driver.scm: Get the actual script name directly from the
command line. Handle the case where that argument is missing.
Mathieu Lirzin [Tue, 20 Feb 2018 22:18:09 +0000 (23:18 +0100)]
bin: Rely only on the shebang line
Previously ‘automake’ and ‘aclocal’ were handling the case of being
interpreted as a Shell script by using a hack leveraging the fact that
Shell and Perl has a compatible syntax intersection allowing those
scripts to launch ‘perl’ from the shell.
Mathieu Lirzin [Sun, 11 Mar 2018 22:24:55 +0000 (23:24 +0100)]
maint: Post-release administrivia
* NEWS: Add header line for next release.
* configure.ac (AC_INIT): Bump version number to 1.16a.
* m4/amversion.m4: Likewise (auto-updated by "make bootstrap").
Mathieu Lirzin [Sun, 11 Mar 2018 21:24:54 +0000 (22:24 +0100)]
version 1.16.1
* configure.ac (AC_INIT): Bump version number to 1.16.1.
* m4/amversion.m4: Likewise (auto-updated by "make bootstrap").
* NEWS: Record release version.
Pavel Raiskup [Sun, 11 Mar 2018 20:47:54 +0000 (21:47 +0100)]
install-sh: avoid (low risk) race in "/tmp"
Ensure that nobody can cross privilege boundaries by pre-creating
symlink on '$tmpdir' destination directory.
Just testing 'mkdir -p' by creating "/tmp/ins$RANDOM-$$/d" is not safe
because "/tmp" directory is usually world-writeable and
"/tmp/ins$RANDOM-$$" content could be pretty easily guessed by
attacker (at least for shells where $RANDOM is not supported). So, as
the first step, create the "/tmp/ins$RANDOM-$$" without -p. This step
would fail early if somebody wanted catch us.
Systems that implement (and have enabled) fs.protected_symlinks kernel
feature are not affected even without this commit.
Mathieu Lirzin [Sat, 3 Mar 2018 22:50:10 +0000 (23:50 +0100)]
automake: Don't rely on List::Util to provide 'none'
This change fixes automake bug#30631.
This removes the use of List::Util which is not supported by Perl 5.6,
by reimplementing the 'none' subroutine.
* lib/Automake/General.pm (none): New subroutine.
* bin/automake.in (handle_single_transform): Use it.
* t/pm/General.pl: New test.
* t/list-of-tests.mk (perl_TESTS): Add it.
* NEWS: Update.
Mathieu Lirzin [Sat, 3 Mar 2018 11:01:13 +0000 (12:01 +0100)]
python: Support future python version up to 3.9
This change fixes automake bug#28160.
Since AM_PYTHON_PATH macro takes no maximum version argument, there is
no need to generate _AM_PYTHON_INTERPRETER_LIST dynamically, like what
was previously done by the reverted commit 1d60fb72168e62d33fe433380af621de64e22f23. We could rely on M4 to
generate this list statically however this is likely to be a complex
solution that would not improve maintainability.
Paul Eggert [Wed, 7 Mar 2018 04:13:32 +0000 (20:13 -0800)]
maint: write-file-hooks -> before-save-hook
write-file-hooks is obsolete since Emacs 22.1 (released June 2007) and
it's time to use the recommended replacement.
Problem reported by Glenn Morris in:
https://lists.gnu.org/r/bug-gnulib/2018-03/msg00008.html
* contrib/tap-driver.pl, lib/compile, lib/depcomp, lib/install-sh:
* lib/mdate-sh, lib/missing, lib/mkinstalldirs, lib/py-compile:
* lib/tap-driver.sh, lib/test-driver, lib/ylwrap:
Update hook usage for files where Automake is the canonical source.
Mathieu Lirzin [Sun, 25 Feb 2018 21:28:21 +0000 (22:28 +0100)]
maint: Post-release administrivia
* NEWS: Add header line for next release.
* configure.ac (AC_INIT): Bump version number to 1.16a.
* m4/amversion.m4: Likewise (auto-updated by "make bootstrap").
Mathieu Lirzin [Sun, 25 Feb 2018 19:47:15 +0000 (20:47 +0100)]
version 1.16
* configure.ac (AC_INIT, APIVERSION): Bump version number to 1.16.
* m4/amversion.m4: Likewise (auto-updated by "make bootstrap").
* NEWS: Record release version.
Mathieu Lirzin [Sat, 3 Feb 2018 23:09:31 +0000 (00:09 +0100)]
python: Avoid exceeding command-line length limit
With Python implementations following PEP-3174, a large number of files
are installed in the ‘__pycache__’ directory. As a consequence
“t/instmany-python.sh” test was failing due to the
‘uninstall-pythonPYTHON’ target deleting installed files in a single
‘rm’ command. Doing that in multiple steps avoids exceeding the
command-line length limit. This fixes bug#30335.
* lib/am/python.am (uninstall-%DIR%PYTHON): For byte-compiled files
installed in '__pycache__' directory, uninstall them by batch of 40.
[?FIRST?] (am__pep3147_tweak): Adapt.
Mathieu Lirzin [Thu, 18 Jan 2018 10:19:13 +0000 (11:19 +0100)]
tests: Don't check 'Getopt::Long' corner cases
Depending on the installed 'Getopt::Long' perl module, command-line
handling may vary a bit. As a consequence we prefer not to check
command-line corners cases. This change fixes automake bug#29638.
* t/aclocal.sh (am_create_testdir): Don't expect "--versi" to be
interpreted as "--version".
* t/automake-cmdline.tap: Don't expect "--vers" to be interpreted as
"--version" and things after "--" to be interpreted as file arguments.
(do_check): Display the actual command output.
* t/maken3.sh (check_targets): "--force" is not a documented option, so
don't use it.
Mathieu Lirzin [Thu, 1 Feb 2018 12:51:03 +0000 (13:51 +0100)]
python: Generate python interpreter list
_AM_PYTHON_INTERPRETER_LIST is used by AM_PYTHON_PATH to autodetect
Python programs whose names correspond to a specific Python
version (e.g. python3.6). Previously this list was updated manually.
The automatic support of newer versions (up to 4.0 excluded) fixes
bug#28160.
* m4/python.m4 (am_py_min_ver, am_py_max_ver): New macros.
(_AM_PYTHON_INTERPRETER_LIST): Generate this list instead of hard-coding
it. Implementation is taken from GNU Pyconfigure.
Mathieu Lirzin [Thu, 18 Jan 2018 23:41:31 +0000 (00:41 +0100)]
tests: Distribute DEJATOOL files manually
"t/check12.sh" was failing because files declared in DEJATOOL are not
automatically distributed. The test running 'make distcheck' couldn't succeed
since some scripts were not distributed. This fixes automake bug#26738.
* t/check12.sh (Makefile.am): Distribute files from DEJATOOL.
Mathieu Lirzin [Thu, 18 Jan 2018 22:51:49 +0000 (23:51 +0100)]
tests: Fix various 'flex' compilation issues
* t/lex-clean-cxx.sh (parsefoo.lxx): Declare 'yylex':
(mainfoo.cc): Make declaration compatible with C++.
* t/lex-depend-cxx.sh (joe.ll): Declare 'yylex'.
* t/silent-many-languages.sh (Makefile.am, sub/Makefile.am): Link -lfl only
with 'fo2' and 'sub/ba2' which are the only program needing it.
(foo5.l): Define 'isatty'.
(foo6.y): Declare 'yylex'.
Jim Meyering [Thu, 23 Nov 2017 05:07:29 +0000 (21:07 -0800)]
port elisp-compilation support to emacs-23.1 and newer
In May of 2017, emacs.master support for using the long-deprecated
byte-compile-dest-file function was removed, and that removal broke
automake's elisp-compiling rule for any .el file not in the current
directory. In emacs-23.1 (July 2009) byte-compile-dest-file-function
became the recommended way to adjust the byte-compiler's destination.
The removed functionality has been restored for Emacs-26, albeit with
dissuasive diagnostics warning about the imminent removal of this
functionality. It will be removed in Emacs-27.
* lib/am/lisp.am (.el.elc): Use byte-compile-dest-file-function, rather
than byte-compile-dest-file. Also, use "-f batch-byte-compile '$<'"
rather than open-coding it, as suggested by Glenn Morris.
* t/lisp-readonly-srcdir.sh: New file, to test for the above.
* t/list-of-tests.mk (handwritten_TESTS): Add it.
* NEWS (Bugs fixed): Mention this problem.
Jim Meyering [Thu, 20 Mar 2014 19:31:32 +0000 (12:31 -0700)]
"make dist" did not depend on $(BUILT_SOURCES)
* lib/am/distdir.am (distdir-am): New intermediate target.
Interpose this target between $(distdir) and its dependency
on $(DISTFILES), so that we can ensure $(BUILT_SOURCES) are
all created before we begin creating $(DISTFILES).
* t/dist-vs-built-sources.sh: Test for this.
* t/list-of-tests.mk (handwritten_TESTS): Add it.
* NEWS (Bugs fixed): Mention it.
Assaf Gordon reported that "make dist" (after ./configure
from a pristine clone of GNU hello) would fail due to the
absence of configmake.h while compiling lib/localcharset.c.
https://lists.gnu.org/r/bug-hello/2014-03/msg00016.html
Paul Eggert [Sat, 23 Sep 2017 18:03:34 +0000 (11:03 -0700)]
install-sh: do not assume / = //
* lib/install-sh: Do not append / to destination
directory if it already ends in /. This supports
a destination directory of // on hosts where / and //
are distinct directories, as POSIX allows.
Paul Eggert [Sat, 16 Sep 2017 20:03:36 +0000 (13:03 -0700)]
Prefer https: URLs
In Gnulib, Emacs, etc. we are changing ftp: and http: URLs to use
https:, to discourage man-in-the-middle attacks when downloading
software. The attached patch propagates these changes upstream to
Automake. This patch does not affect files that Automake is
downstream of, which I'll patch separately.
Althouth the resources are not secret, plain HTTP is vulnerable to
malicious routers that tamper with responses from GNU servers,
and this sort of thing is all too common when people in some other
countries browse US-based websites. See, for example:
Aceto G, Botta A, Pescapé A, Awan MF, Ahmad T, Qaisar
S. Analyzing internet censorship in Pakistan. RTSI
2016. https://dx.doi.org/10.1109/RTSI.2016.7740626
HTTPS is not a complete solution here, but it can be a significant
help. The GNU project regularly serves up code to users, so we should
take some care here.
Paul Eggert [Sat, 16 Sep 2017 20:03:36 +0000 (13:03 -0700)]
Prefer https: URLs
In Gnulib, Emacs, etc. we are changing ftp: and http: URLs to use
https:, to discourage man-in-the-middle attacks when downloading
software. The attached patch propagates these changes upstream to
Automake. This patch does not affect files that Automake is
downstream of, which I'll patch separately.
Althouth the resources are not secret, plain HTTP is vulnerable to
malicious routers that tamper with responses from GNU servers,
and this sort of thing is all too common when people in some other
countries browse US-based websites. See, for example:
Aceto G, Botta A, Pescapé A, Awan MF, Ahmad T, Qaisar
S. Analyzing internet censorship in Pakistan. RTSI
2016. https://dx.doi.org/10.1109/RTSI.2016.7740626
HTTPS is not a complete solution here, but it can be a significant
help. The GNU project regularly serves up code to users, so we should
take some care here.