Package: automake;
Reported by: "Daniel Richard G." <skunk <at> iSKUNK.ORG>
Date: Thu, 16 Oct 2014 02:58:02 UTC
Severity: normal
Tags: patch
Done: Stefano Lattarini <stefano.lattarini <at> gmail.com>
Bug is archived. No further changes may be made.
View this message in rfc822 format
From: Stefano Lattarini <stefano.lattarini <at> gmail.com> To: "Daniel Richard G." <skunk <at> iSKUNK.ORG>, 18744 <at> debbugs.gnu.org Subject: bug#18744: Problem with am__is_gnu_make: Arg list too long Date: Fri, 19 Dec 2014 15:16:41 +0100
Reference: http://debbugs.gnu.org/18744 On 10/16/2014 04:57 AM, Daniel Richard G. wrote: > Hello gnus, > > I was hacking on libarchive for compatibility with an older Tru64 > system, in conjuction with Automake 1.14.1, when I encountered a problem > during "gmake check": > > [...] > gmake check-TESTS > gmake[2]: Entering directory `/tmp/libarchive-3.1.2/_build' > gmake[3]: Entering directory `/tmp/libarchive-3.1.2/_build' > ../build/autoconf/test-driver: line 107: 23320 Segmentation fault "$@" >$log_file 2>&1 > FAIL: libarchive_test > FAIL: bsdtar_test > FAIL: bsdcpio_test > FAIL: bsdcat_test > gmake[3]: execvp: bash: Arg list too long > gmake[3]: *** [test-suite.log] Error 127 > gmake[3]: Leaving directory `/tmp/libarchive-3.1.2/_build' > gmake[2]: *** [check-TESTS] Error 2 > gmake[2]: Leaving directory `/tmp/libarchive-3.1.2/_build' > gmake[1]: *** [check-am] Error 2 > gmake[1]: Leaving directory `/tmp/libarchive-3.1.2/_build' > gmake: *** [check] Error 2 > > > Where was that "Arg list too long" error coming from? I removed some > leading "@" specifiers from some makefile recipe lines, and got this: > > [...] > FAIL: libarchive_test > FAIL: bsdtar_test > FAIL: bsdcpio_test > FAIL: bsdcat_test > bases='libarchive_test.log bsdtar_test.log bsdcpio_test.log bsdcat_test.log'; bases=`for i in $bases; do echo $i; done | sed 's/\.log$//'`; bases=`echo $bases`; \ > am__f_ok () { test -f "$1" && test -r "$1"; }; \ > redo_bases=`for i in $bases; do \ > am__f_ok $i.trs && am__f_ok $i.log || echo $i; \ > done`; \ > if test -n "$redo_bases"; then \ > redo_logs=`for i in $redo_bases; do echo $i.log; done`; \ > redo_results=`for i in $redo_bases; do echo $i.trs; done`; \ > if (target_option=n; case ${target_option-} in ?) ;; *) echo "am__make_running_with_option: internal error: invalid" "target option '${target_option-}' specified" >&2; exit 1;; esac; has_opt=no; sane_makeflags=$MAKEFLAGS; if test -n ' Makefile cat/.deps/bsdcat-bsdcat.Po cat/.deps/bsdcat-cmdline.Po cat/test/.deps/bsdcat_test-main.Po cat/test/.deps/bsdcat_test-test_0.Po cat/test/.deps/bsdcat_test-test_empty_gz.Po cat/test/.deps/bsdcat_test-test_empty_lz4.Po cat/test/.deps/bsdcat_test-test_empty_xz.Po cat/test/.deps/bsdcat_test-test_error.Po cat/test/.deps/bsdcat_test-test_error_mixed.Po cat/test/.deps/bsdcat_test-test_expand_Z.Po cat/test/.deps/bsdcat_test-test_expand_bz2.Po cat/test/.deps/bsdcat_test-test_expand_gz.Po cat/test/.deps/bsdcat_test-test_expand_lz4.Po cat/test/.deps/bsdcat_test-test_expand_mixed.Po cat/test/.deps/bsdcat_test-test_expand_plain.Po cat/test/.deps/bsdcat_test-test_expand_xz.Po cat/test/.deps/bsdcat_test-test_help.Po cat/test/.deps/bsdcat_test-test_version. Po cpio/.deps/bsdcpio-cmdline.Po cpio/.deps/bsdcpio-cpio.Po cpio/.deps/bsdcpio-cpio_windows.Po cpio/.deps/bsdcpio_test-cmdline.Po cpio/test/.deps/bsdcpio_test-main.Po cpio/test/.deps/bsdcpio_test-test_0.Po cpio/test/.deps/bsdcpio_test-test_basic.Po [...] > > > That last "if test -n" statement includes what appears to be every *.Po > and *.Plo file in the entire project---not helped, perhaps, by the fact > that this project has a bazillion source files and only a single top- > level makefile. Not only that, the output showed *two* full instances of > this list in the same recipe line, presumably resulting from two > expansions of the same problematic construct. > > This appeared to be $(am__make_dryrun) at first, but nested within was > $(am__make_running_with_option), and in turn $(am__is_gnu_make): > > am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)' > > To confirm that this was the problem, I added the following rule to the > makefile... > > print-makefile-list: > : $(MAKEFILE_LIST) > > ...and then tried > > $ gmake print-makefile-list > : Makefile cat/.deps/bsdcat-bsdcat.Po cat/.deps/bsdcat-cmdline.Po cat/test/.deps/bsdcat_test-main.Po cat/test/.deps/bsdcat_test-test_0.Po cat/test/.deps/bsdcat_test-test_empty_gz.Po [...] > > Yep, those *.Po/*.Plo files are makefile fragments that get include'd, > so it makes sense that we end up with a huge MAKEFILE_LIST. If I change > am__is_gnu_make to... > > am__is_gnu_make = test -n '$(MAKE_VERSION)' && test -n '$(MAKELEVEL)' > > ...given that MAKE_VERSION appears to be a shorter example of a GNU-Make- > only variable, then things work as they should: > > [...] > gmake[5]: Nothing to be done for `all-am'. > gmake[5]: Leaving directory `/tmp/libarchive-3.1.2/_build' > gmake[4]: Leaving directory `/tmp/libarchive-3.1.2/_build' > ============================================================================ > Testsuite summary for libarchive 3.1.2 > ============================================================================ > # TOTAL: 4 > # PASS: 0 > # SKIP: 0 > # XFAIL: 0 > # FAIL: 4 > # XPASS: 0 > # ERROR: 0 > ============================================================================ > See ./test-suite.log > Please report to libarchive-discuss <at> googlegroups.com > ============================================================================ > gmake[3]: *** [test-suite.log] Error 1 > gmake[3]: Leaving directory `/tmp/libarchive-3.1.2/_build' > gmake[2]: *** [check-TESTS] Error 2 > gmake[2]: Leaving directory `/tmp/libarchive-3.1.2/_build' > gmake[1]: *** [check-am] Error 2 > gmake[1]: Leaving directory `/tmp/libarchive-3.1.2/_build' > gmake: *** [check] Error 2 > > > (At least as far as the test infrastructure is concerned!) > > > --Daniel > > Thanks for the report. I agree with the spirit of your fix, but unfortunately the $(MAKE_VERSION) macro seem present also in non-GNU implementations of make (e.g., FreeBSD's). Let me look for a better variable...
GNU bug tracking system
Copyright (C) 1999 Darren O. Benham,
1997,2003 nCipher Corporation Ltd,
1994-97 Ian Jackson.