]> git.ipfire.org Git - thirdparty/automake.git/commitdiff
* lib/am/subdirs.am ($(RECURSIVE_TARGETS), $(RECURSIVE_CLEAN_TARGETS)):
authorAlexandre Duret-Lutz <adl@gnu.org>
Sun, 16 Jan 2005 00:36:54 +0000 (00:36 +0000)
committerAlexandre Duret-Lutz <adl@gnu.org>
Sun, 16 Jan 2005 00:36:54 +0000 (00:36 +0000)
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.

ChangeLog
lib/am/subdirs.am
tests/Makefile.am
tests/Makefile.in
tests/check4.test [new file with mode: 0755]

index 3332d24537c30e54e85874a1359fd3728a5fda04..ce2f539bb9d170cd2629e3e9305d3ac570ff4132 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,11 @@
+2005-01-16  Alexandre Duret-Lutz  <adl@gnu.org>
+
+       * 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  <adl@gnu.org>
 
        * m4/amversion.in (AM_AUTOMAKE_VERSION): Point users to
index 19bcafbfd8df3e832234995f4fc57f1e94f06a17..cfa0a1599083800d1581769115eba5291a6c4648 100644 (file)
@@ -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"
index 5f3727e354e04f09ce84f817a4c417975b245fb7..8e5e60f456401ea99a5e95bbc4d693cd38681a80 100644 (file)
@@ -75,6 +75,7 @@ ccnoco.test \
 check.test \
 check2.test \
 check3.test \
+check4.test \
 checkall.test \
 clean.test \
 clean2.test \
index 06255b72e37aa87af33969597958d592df0990bd..5d0fcfca5772662f3ffa44e40934121a03b6d5aa 100644 (file)
@@ -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 (executable)
index 0000000..9fc65dd
--- /dev/null
@@ -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