From: Alexandre Duret-Lutz Date: Sun, 16 Jan 2005 00:36:54 +0000 (+0000) Subject: * lib/am/subdirs.am ($(RECURSIVE_TARGETS), $(RECURSIVE_CLEAN_TARGETS)): X-Git-Tag: Release-1-9b~209 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=340d06a429ca4a90d939b92abfb45c0f2de811ad;p=thirdparty%2Fautomake.git * lib/am/subdirs.am ($(RECURSIVE_TARGETS), $(RECURSIVE_CLEAN_TARGETS)): Process all words of $MAKEFLAGS when checking for -k. * tests/check4.test: New file. * tests/Makefile.am (TESTS): Add check4.test. Report from Eric Blake. --- diff --git a/ChangeLog b/ChangeLog index 3332d2453..ce2f539bb 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,11 @@ +2005-01-16 Alexandre Duret-Lutz + + * lib/am/subdirs.am ($(RECURSIVE_TARGETS), $(RECURSIVE_CLEAN_TARGETS)): + Process all words of $MAKEFLAGS when checking for -k. + * tests/check4.test: New file. + * tests/Makefile.am (TESTS): Add check4.test. + Report from Eric Blake. + 2005-01-13 Alexandre Duret-Lutz * m4/amversion.in (AM_AUTOMAKE_VERSION): Point users to diff --git a/lib/am/subdirs.am b/lib/am/subdirs.am index 19bcafbfd..cfa0a1599 100644 --- a/lib/am/subdirs.am +++ b/lib/am/subdirs.am @@ -32,7 +32,15 @@ RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ # (2) otherwise, pass the desired values on the `make' command line. $(RECURSIVE_TARGETS): - @set fnord $$MAKEFLAGS; amf=$$2; \ +## Using $failcom allows "-k" to keep its natural meaning when running a +## recursive rule. + @failcom='exit 1'; \ + for f in x $$MAKEFLAGS; do \ + case $$f in \ + *=* | --[!k]*);; \ + *k*) failcom='fail=yes';; \ + esac; \ + done; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ list='$(SUBDIRS)'; for subdir in $$list; do \ @@ -44,9 +52,7 @@ $(RECURSIVE_TARGETS): local_target="$$target"; \ fi; \ (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ -## This trick allows "-k" to keep its natural meaning when running a -## recursive rule. - || case "$$amf" in *=*) exit 1;; *k*) fail=yes;; *) exit 1;; esac; \ + || eval $$failcom; \ done; \ if test "$$dot_seen" = "no"; then \ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ @@ -65,7 +71,15 @@ maintainer-clean: maintainer-clean-recursive ## the dependencies are required before any target is examined, make ## bombs. $(RECURSIVE_CLEAN_TARGETS): - @set fnord $$MAKEFLAGS; amf=$$2; \ +## Using $failcom allows "-k" to keep its natural meaning when running a +## recursive rule. + @failcom='exit 1'; \ + for f in x $$MAKEFLAGS; do \ + case $$f in \ + *=* | --[!k]*);; \ + *k*) failcom='fail=yes';; \ + esac; \ + done; \ dot_seen=no; \ ## For distclean and maintainer-clean we make sure to use the full ## list of subdirectories. We do this so that `configure; make @@ -91,7 +105,5 @@ $(RECURSIVE_CLEAN_TARGETS): local_target="$$target"; \ fi; \ (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ -## This trick allows "-k" to keep its natural meaning when running a -## recursive rule. - || case "$$amf" in *=*) exit 1;; *k*) fail=yes;; *) exit 1;; esac; \ + || eval $$failcom; \ done && test -z "$$fail" diff --git a/tests/Makefile.am b/tests/Makefile.am index 5f3727e35..8e5e60f45 100644 --- a/tests/Makefile.am +++ b/tests/Makefile.am @@ -75,6 +75,7 @@ ccnoco.test \ check.test \ check2.test \ check3.test \ +check4.test \ checkall.test \ clean.test \ clean2.test \ diff --git a/tests/Makefile.in b/tests/Makefile.in index 06255b72e..5d0fcfca5 100644 --- a/tests/Makefile.in +++ b/tests/Makefile.in @@ -195,6 +195,7 @@ ccnoco.test \ check.test \ check2.test \ check3.test \ +check4.test \ checkall.test \ clean.test \ clean2.test \ diff --git a/tests/check4.test b/tests/check4.test new file mode 100755 index 000000000..9fc65ddeb --- /dev/null +++ b/tests/check4.test @@ -0,0 +1,88 @@ +#! /bin/sh +# Copyright (C) 2005 Free Software Foundation, Inc. +# +# This file is part of GNU Automake. +# +# GNU Automake is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2, or (at your option) +# any later version. +# +# GNU Automake is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with Automake; see the file COPYING. If not, write to +# the Free Software Foundation, Inc., 59 Temple Place - Suite 330, +# Boston, MA 02111-1307, USA. + +# Make sure `make -k check' processes all directories. + +. ./defs || exit 1 + +set -e + +cat >> configure.in << 'END' +AC_CONFIG_FILES([dir/Makefile]) +AC_OUTPUT +END + +mkdir dir + +cat > Makefile.am <<'END' +SUBDIRS = dir +TESTS = ok.sh +END + +echo TESTS = fail.sh >dir/Makefile.am + +cat >ok.sh <<'END' +#!/bin/sh +: +END + +cat >dir/fail.sh <<'END' +#!/bin/sh +exit 1 +END + +chmod +x ok.sh dir/fail.sh + +$ACLOCAL +$AUTOCONF +$AUTOMAKE +./configure --prefix `pwd`/inst +$MAKE check >stdout && exit 1 +cat stdout +grep 'FAIL: fail.sh' stdout +grep 'PASS: ok.sh' stdout && exit 1 + +# The exit status of `make -k' can be anything +# (depending on the Make implementation) +$MAKE -k check >stdout || : +cat stdout +grep 'FAIL: fail.sh' stdout +grep 'PASS: ok.sh' stdout + +# should also works when -k is not in first position +$MAKE -s -k check >stdout || : +cat stdout +grep 'FAIL: fail.sh' stdout +grep 'PASS: ok.sh' stdout + +# The rest of the test is for GNU Make. + +# Use --version AND -v, because SGI Make doesn't fail on --version. +# Also grep for GNU because newer versions of FreeBSD make do +# not complain about `--version' (they seem to silently ignore it). +($MAKE --version -v | grep GNU) || exit 0 + +# Try with a long-option that do not have a short option equivalent +# (here, --no-print-directory). That should cause all options to +# appear verbatim in MAKEFLAGS. +$MAKE --no-print-directory -k check >stdout || : +cat stdout +grep 'FAIL: fail.sh' stdout +grep 'PASS: ok.sh' stdout