header-vars: recognize more make flags ('-k' in particular)
[platform/upstream/automake.git] / lib / am / header-vars.am
index d2f0984..4ad1783 100644 (file)
@@ -31,55 +31,77 @@ VPATH = @srcdir@
 ## enough for now.
 am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)'
 
-## Shell code that determines whether make is running in "dry mode"
-## ("make -n") or not.  Useful in rules that invoke make recursively,
-## and are thus executed also with "make -n" -- either because they
-## are declared as dependencies to '.MAKE' (NetBSD make), or because
-## their recipes contain the "$(MAKE)" string (GNU and Solaris make).
-am__make_dryrun = \
+## Shell code that determines whether the current make instance is
+## running with a given one-letter option (e.g., -k, -n) that takes
+## no argument.  Actually, the only supported option at the moment
+## is '-n' (support for '-k' will be added soon).
+am__make_running_with_option = \
   { \
-    am__dry=no; \
+    case $${am__target_option-} in \
+        ?) ;; \
+        *) echo "am__make_running_with_option: internal error: invalid" \
+                "target option '$${am__target_option-}' specified" >&2; \
+           exit 1;; \
+    esac; \
+    am__has_opt=no; \
     if $(am__is_gnu_make); then \
-## GNU make: $(MAKEFLAGS) is quite tricky there, and the older
-## $(MFLAGS) variable behaves much better.
+## GNU make: $(MAKEFLAGS) is quite tricky there, while the older variable
+## $(MFLAGS) behaves much better.  So use the latter.
       for am__flg in $$MFLAGS; do \
         case $$am__flg in \
           *=*|--*) ;; \
-          -*n*) am__dry=yes; break;; \
+          -*$$am__target_option*) am__has_opt=yes; break;; \
         esac; \
       done; \
     else \
-## Non-GNU make: we must rely on $(MAKEFLAGS).  This is tricky and brittle,
-## but is the best we can do.
+## Non-GNU make: we must rely on $(MAKEFLAGS).  This is tricker and more
+## brittle, but is the best we can do.
       case $$MAKEFLAGS in \
 ## If we run "make TESTS='snooze nap'", FreeBSD make will export MAKEFLAGS
 ## to " TESTS=foo\ nap", so that the simpler loop below (on word-splitted
 ## $$MAKEFLAGS) would see a "make flag" equal to "nap", and would wrongly
 ## misinterpret that as and indication that make is running in dry mode.
-## This has already happened in practice.  So we need this unpleasant hack.
+## This has already happened in practice.  So we need this hack.
          *\\[\ \       ]*) \
-           echo 'am--echo: ; @echo "AM"  OK' | $(MAKE) -f - 2>/dev/null \
-             | grep '^AM OK$$' >/dev/null || am__dry=yes ;; \
+## Extra indirection with ${am__bs} required by FreeBSD 8.x make.
+## Not sure why (so sorry for the cargo-cult programming here).
+           am__bs=\\; \
+           am__flags=`printf '%s\n' "$$MAKEFLAGS" \
+            | sed "s/$$am__bs$$am__bs[$$am__bs $$am__bs        ]*//g"`;; \
          *) \
-          am__skip_next=no; \
-           for am__flg in $$MAKEFLAGS; do \
-            if test $$am__skip_next = yes; then \
-              am__skip_next=no; \
-              continue; \
-            fi; \
-             case $$am__flg in \
-               *=*|--*) ;; \
-## Quite ugly special-casing.  We might need other similar, but let's
-## wait until the need arises.
-              -I) am__skip_next=yes;; \
-               *n*) am__dry=yes; break;; \
-             esac; \
-           done ;;\
-       esac; \
+           am__flags=$$MAKEFLAGS;; \
+      esac; \
+      am__skip_next=no; \
+      for am__flg in $$am__flags; do \
+        if test $$am__skip_next = yes; then \
+          am__skip_next=no; \
+          continue; \
+        fi; \
+        case $$am__flg in \
+          *=*|--*) ;; \
+## Quite ugly special-casing.  We might need other similar ones actually,
+## but let's wait until the need arises.
+          -I) am__skip_next=yes;; \
+          *$$am__target_option*) am__has_opt=yes; break;; \
+        esac; \
+      done;\
     fi; \
-    test $$am__dry = yes; \
+    unset am__skip_next am__flg am__flags am__target_option; \
+    test $$am__has_opt = yes; \
   }
 
+## Shell code that determines whether make is running in "dry mode"
+## ("make -n") or not.  Useful in rules that invoke make recursively,
+## and are thus executed also with "make -n" -- either because they
+## are declared as dependencies to '.MAKE' (NetBSD make), or because
+## their recipes contain the "$(MAKE)" string (GNU and Solaris make).
+am__make_dryrun = { am__target_option=n; $(am__make_running_with_option); }
+
+## Shell code that determines whether make is running in "keep-going mode"
+## ("make -k") or not.  Useful in rules that must recursively descend into
+## subdirectories, and decide whther to stop at the first error or not.
+am__make_keepgoing = { am__target_option=k; $(am__make_running_with_option); }
+
 ## Some derived variables that have been found to be useful.
 pkgdatadir = $(datadir)/@PACKAGE@
 pkgincludedir = $(includedir)/@PACKAGE@