GNU bug report logs - #18744
Problem with am__is_gnu_make: Arg list too long

Previous Next

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.

Full log


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...




This bug report was last modified 10 years and 160 days ago.

Previous Next


GNU bug tracking system
Copyright (C) 1999 Darren O. Benham, 1997,2003 nCipher Corporation Ltd, 1994-97 Ian Jackson.