This change fixes https://bugs.gnu.org/24507.
* lib/am/python.am (am__pep3147_tweak): remove conditional
on %?INSTALL%.
* t/python-pr10995.sh: test with make uninstall.
Fixes automake bug https://bugs.gnu.org/53340.
If the system has xargs, then utilize it to uninstall files to stay
within long command line limits. If the system doesn't have xargs,
fall back to running the remove command one at a time. Since every
reasonable system should have `xargs -n`, and POSIX requires it, the
fallback probably rarely gets used, so don't bother optimizing.
* lib/am/inst-vars.am: Use am__xargs_n to call rm -f on the files.
* lib/am/python.am: Drop am__base_list and for loop and let the
am__uninstall_files_from_dir break up the long command lines.
* m4/init.m4: Call _AM_PROG_XARGS_N.
* m4/xargsn.m4: New test for `xargs -n`.
The st variable is set at the top of this shell script, and then here
is a pipeline where it tries to update it in the subshell. But since
setting variables in a subshell doesn't propagate back up, it doesn't
actually work. Have the final subshell in the pipeline manage its own
exit status and exit with that so that the final status of the pipeline
is the right value.
* lib/am/python.am: Fix final subshell exit status passing.
This change fixes automake bug#31222.
On macOS, 'sed' interprets '\n' in the substitution text as the letter 'n'
instead of as a newline.
* lib/am/python.am [?FIRST?] (am__pep3147_tweak): Use a space instead of '\n'.
* NEWS: Update.
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.
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.
* lib/am/python.am: Here. Byte-compiling was occurring inside of
a loop, causing an O(n^2) number of byte-compilations instead of
O(n).
Copyright-paperwork-exempt: yes
Signed-off-by: Stefano Lattarini <stefano.lattarini@gmail.com>
* maint:
tests: fix a spurious failure when $PYTHON is in the environment
python tests: support PEP-3147 installation layout
python: uninstall cater to PEP-3147
tests: improve a comment
tests: honour $PYTHON override
tests: typofix in message
news: document fix for bug#8847 (PEP-3147, __pycache__)
python: improve support for modern python (CPython 3.2 and PyPy)
Signed-off-by: Stefano Lattarini <stefano.lattarini@gmail.com>
After recent commit commit v1.12.4-43-ge0e99ed, "python: improve
support for modern python (CPython 3.2 and PyPy)", the python install
rules have been made smart enough to install "*.pyc" byte-compiled
files according to PEP-3147 with modern (post-3.2) pythons. However,
the uninstall rules hadn't been updated accordingly, causing leftover
files to remain around after "make uninstall", as well as failures in
"make distcheck".
* lib/am/python.am (am__pep3147_tweak): New internal macro, used
in ...
(uninstall-%DIR%PYTHON): ... the recipe of this target, which has
been adjusted to cater to PEP-3147
Signed-off-by: Stefano Lattarini <stefano.lattarini@gmail.com>
And the similar "reduced forms" "%KEY:iffalse%" and "%KEY?iftrue%"
as well.
They are harder to grasp, can be easily reformulated in function of
other "plainer" transforms ("?KEY?" and "?!KEY?"), and we'll remove
support for them anyway in a later change.
* lib/am/data.am, lib/am/libs.am, lib/am/lisp.am, lib/am/ltlib.am,
lib/am/progs.am, lib/am/python.am, lib/am/scripts.am: Adjusted not
to rely on those kinds of transforms.
Signed-off-by: Stefano Lattarini <stefano.lattarini@gmail.com>
Fixes automake bug#11030 and bug#10997.
An empty declaration of "foo_PRIMARY" in a Makefile.am used to
cause the generated install rules to create the directory $(foodir)
anyway, even if nothing was to be installed there.
While this could be seen as a convenient way to create a $(foodir)
directory upon "make install" (respecting $(DESTDIR) settings and
such), it also caused problems with conditionals; for example, an
input of:
if FALSE
pgkdata_DATA = something
endif
caused the generated install rules to unconditionally create the
$(pkgdatadir) directory (see automake bug#10997).
Also, a user wanting to create an empty directory upon installation
can easily do so with a custom install hook, as in:
installdirs-local:
$(MKDIR_P) $(DESTDIR)$(foodir)
install-data-hook: installdirs-local
On the other hand, the old behavior of "always create $(foodir),
even if 'foo_PRIMARY' is empty" was harder and more tricky to
override.
Thus, from now on, an empty declaration of "foo_PRIMARY" will not
cause the directory $(foodir) to be created upon "make install"
anymore.
* lib/am/data.am, lib/am/java.am, lib/am/libs.am, lib/am/lisp.am,
lib/am/ltlib.am, lib/am/mans.am, lib/am/progs.am, lib/am/python.am,
lib/am/scripts.am, lib/am/texinfos.am: Adjust install rules to avoid
creating an installation directory if no files are actually to be
installed there.
* tests/instdir-empty.test: Remove, it was testing a semantic
opposite to the one we now want and implement.
* tests/instdir-no-empty.test: New test, check the new semantic.
* tests/instdir-cond.test: Enhance. Move the still-failing part
of the test ...
* tests/instdir-cond2.test: ... here.
* tests/list-of-tests.mk, tests/Makefile.am (XFAIL_TESTS): Update.
* tests/java3.test: Adjust to avoid spurious failures.
* HACKING, NEWS, THANKS: Update.
Signed-off-by: Stefano Lattarini <stefano.lattarini@gmail.com>
Fixes automake bug#10995, introduced in commit v1.11-372-gb46debf.
* lib/am/python.am: Move the definition of 'am__py_compile' to
ensure it is always emitted in the output Makefile.in. Previously,
this wouldn't have happened if the input Makefile.am contained a
'noinst_PYTHON' declaration before a 'python_PYTHON' one.
* tests/Makefile.am (XFAIL_TESTS): Remove 'python-pr10995.test' and
'python.test'.
* NEWS: Update.
Copyright-paperwork-exempt: yes
Signed-off-by: Stefano Lattarini <stefano.lattarini@gmail.com>
This change fixes automake bug#9578.
* lib/am/inst-vars.am (am__uninstall_files_from_dir): New internal
macro, that defines a shell code fragment to uninstall files from
a given directory.
* lib/am/data.am (uninstall-%DIR%%PRIMARY%): Use it, to reduce code
duplication and improve consistency and correctness.
* lib/am/libs.am (uninstall-%DIR%LIBRARIES): Likewise.
* lib/am/lisp.am (uninstall-%DIR%LISP): Likewise.
* lib/am/mans.am (uninstall-man%SECTION%): Likewise.
* lib/am/python.am (uninstall-%DIR%LIBRARIES): Likewise.
* lib/am/scripts.am (uninstall-%DIR%SCRIPTS): Likewise.
* tests/uninstall-pr9578.test: New test.
* tests/uninstall-fail.test: New test.
* tests/Makefile.am (TESTS): Add them.
* NEWS, THANKS: Update.
Report by Nick Bowler.
* lib/py-compile (Option parsing): Do not count an empty argument
to `--destdir' or `--basedir' as a missing argument.
* lib/python.am: Simplify accordingly, passing the `--destdir'
option to py-compile unconditionally, even if `$(DESTDIR)' is
empty.
* NEWS: Update.
* lib/python.am (install-%DIR%PYTHON): Run each instance of
py-compile using $(SHELL). Since we are at it, break overly
long lines.
(am__py_compile): New variable, to reduce code duplication.
Automake will move to GPLv3+ once the Exception statement has
been rewritten to use the new GPLv3 exception language. This
change does not impact the COPYING file that may be installed
by `automake --add-missing'.
* COPYING: Revert to GPLv2. All uses changed.
* NEWS: Update.
Signed-off-by: Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
* lib/am/inst-vars.am (am__nobase_strip_setup)
(am__nobase_strip): New macros.
(am__nobase_list): Factorize.
* lib/am/data.am (uninstall-%DIR%%PRIMARY%): Use them, for a
constant number of forks per uninstall.
* lib/am/libs.am (uninstall-%DIR%LIBRARIES): Likewise.
* lib/am/lisp.am (uninstall-%DIR%LISP): Likewise.
* lib/am/progs.am (uninstall-%DIR%PROGRAMS): Fast uninstall.
* lib/am/python.am (uninstall-%DIR%PYTHON): Fast uninstall.
Echo all `rm' commands that are are executed.
* lib/am/java.am (install-%DIR%JAVA, uninstall-%DIR%JAVA):
Fast install and uninstall.
Signed-off-by: Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
With nobase targets, at most 50 files are installed at once,
to avoid quadratic string concatenation and line length limits.
This isn't yet done with base targets. One hope is that there,
the typical file name length is lower. If this turns out to be
a problem, it should be revisited.
* lib/am/inst-vars.am (am__nobase_list): New helper macro for
installation of multiple nobase files at once: sorts and lists
files keyed by their target directory.
* lib/am/data.am (%DIR%%PRIMARY%_INSTALL): No need to set it to
$(install_sh_DATA) any more, not even for nobase targets.
(install-%DIR%%PRIMARY%): Split base and nobase cases.
Rewrite to pass lists of files which all go in the same
directory to `install'. In the nobase case, make use of
$(am__nobase_list) and $(MKDIR_P) each directory before
populating it. Take care of files in source and build trees,
and avoid creating directories where no files are to be
installed.
* lib/am/libs.am (%DIR%LIBRARIES_INSTALL): Likewise.
(install-%DIR%LIBRARIES): Likewise.
* lib/am/python.am (%DIR%PYTHON_INSTALL): Likewise.
(install-%DIR%PYTHON): Likewise. Also take care to keep note of
a list for byte compilation after installation.
* lib/am/texinfos.am (install-dvi-am, install-html-am)
(install-info-am, install-pdf-am, install-ps-am): Use file lists
to install multiple files at once.
* NEWS: Update.
Suggested by Akim Demaille.
Signed-off-by: Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
* automake.in (&transform_token): New.
(&transform): Use it.
Support %KEY?TRUE:FALSE%.
(&make_paragraphs): Adjust the regexp to call %transform.
* lib/am/data.am, lib/am/libs.am, lib/am/lisp.am, lib/am/ltlib.am,
* lib/am/progs.am, lib/am/python.am, lib/am/scripts.am:
Use %KEY?TRUE:FALSE%.
* lib/am/inst-vars.am (am__strip_dir): Assign the result to f
to be more alike am__vpath_adj.
Adjust dependencies.
Signed-off-by: Akim Demaille <akim@lrde.epita.fr>
* automake.texi (Obsolete macros): Document AM_PROG_MKDIR_P.
* lib/am/data.am, lib/am/distdir.am, lib/am/install.am,
lib/am/java.am, lib/am/libs.am, lib/am/lisp.am, lib/am/ltlib.am,
lib/am/mans.am, lib/am/progs.am, lib/am/python.am,
lib/am/scripts.am, lib/am/texinfos.am: Use MKDIR_P instead of mkdir_p.
* m4/mkdirp.m4 (AM_PROG_MKDIR_P): Define mkdir_p using $MKDIR_P, not
as '$(MKDIR_P)', otherwise it will break `Makefile.in's that use
mkdir_p without defining MKDIR_P.
* tests/distdir.test, tests/instman.test, tests/txinfo21.test:
Adjust.
path argument that is not compiled into the file when byte compiling.
* lib/am/python.am: Use the new py-compile arguments to not include
DESTDIR in the byte compiled files.
* tests/python12.test: Test that DESTDIR won't be byte compiled into
python files.
* lib/am/data.am, lib/am/distdir.am, lib/am/java.am, lib/am/libs.am,
lib/am/lisp.am, lib/am/ltlib.am, lib/am/mans.am, lib/am/progs.am,
lib/am/python.am, lib/am/scripts.am, lib/am/texinfos.am: Quote
installation paths in install, uninstall, and installcheck rules,
as well as in am__installdirs variables. This is for the sake
of paths containing spaces.
* lib/am/install.am (installdirs-am, installdirs): Do not try
to create "" directories.
* test/instspc.test: New file.
* test/Makefile.am (TESTS): Add instspc.test.
Report from James Amundson.
Ensure --basedir has an argument.
* lib/am/python.am (install-%DIR%PYTHON): Do not run py-compile
if nothing was installed.
* tests/python10.test: New file.
* tests/Makefile.am (TESTS): Add python10.test.
Suggested by Sander Niemeijer.
(handle_source_transform): ... extracted from here.
(am_install_var): Use shadow_unconditionally to define %DISTVAR%.
* lib/am/data.am, lib/am/java.am, lib/am/lisp.am, lib/am/python.am,
lib/am/script.am: Add %DISTVAR% to DIST_COMMON.
* tests/cond33.test: Make sure all conditional files are distributed.
Report from Ralf Corsepius.
am__vpath_adj, and am__strip_dir.
* lib/am/Makefile.am (dist_am_DATA): Add inst-vars.am.
* lib/am/data.am, lib/am/lisp.am, lib/am/python.am,
lib/am/scripts.am: Include inst-vars.am, and use $(am__vpath_adj),
$(am__vpath_adj_setup), and $(am__strip_dir) in install and
uninstall rules. This fixes installation of nobase_ files in
VPATH setups with Sun and OSF1/Tru64 Make.
* lib/am/libs.am, lib/am/ltlib.am: Include inst-vars.am, and use
$(am__strip_dir) to simplify install and uninstall rules.
* tests/nobase.test: Augment to check installation from VPATH builds.
only if it is already present in the package.
(scan_autoconf_files): Do not require mkinstalldirs.
(require_build_directory): Use $(mkdir_p), not $(mkinstalldirs).
* lib/am/data.am, lib/am/distdir.am, lib/am/install.am,
lib/am/java.am, lib/am/libs.am, lib/am/lisp.am, lib/am/mans.am,
lib/am/progs.am, lib/am/python.am, lib/am/scripts.am,
lib/am/texinfos.am: Use $(mkdir_p) instead of $(mkinstalldirs).
* m4/mkdirp.m4: New file.
* m4/Makefile.am (dist_m4data_DATA): Add mkdirp.m4.
* m4/init.m4 (AM_INIT_AUTOMAKE): Call AM_PROG_MKDIR_P.
* tests/Makefile.am (TESTS): Remove insh.test.
* tests/insh.test: Delete.
* tests/defs.in, tests/instsh.test: Do not install mkinstalldirs.
* tests/auxdir.test: Install mkinstalldirs.
* tests/distdir.test, tests/instman.test, tests/pr2.test: Use
$(mkdir_p), not $(mkinstalldirs).
* tests/empty.test: Run configure, do not substitute things by hand.
* doc/automake.texi (Optional) <AC_CONFIG_FILES>: Take install-sh
as an example, not mkinstalldirs.
(Auxiliary Programs) <mkinstalldirs>: Update.
* lib/am/header-vars.am (install_sh_DATA): New.
* lib/am/data.am (install-%DIR%%PRIMARY%): Declare and use
%DIR%%PRIMARY%_INSTALL, and set it to $(install_sh_DATA) instead
of $(INSTALL_DATA) for nobase_ targets.
* lib/am/lisp.am (install-%DIR%LISP): Likewise.
* lib/am/python.am (install-%DIR%PYTHON): Likewise.
* tests/nobase.test (configure.in): Append AC_OUTPUT.
* tests/Makefile.am (XFAIL_TESTS): Remove nobase.test.