bug-gnulib
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: maintainer-makefile: catch uses of $< in non-implicit rules


From: Akim Demaille
Subject: Re: maintainer-makefile: catch uses of $< in non-implicit rules
Date: Sat, 18 May 2019 11:51:19 +0200

Hi Paul!

> Le 18 mai 2019 à 09:52, Paul Eggert <address@hidden> a écrit :
> 
> Akim Demaille wrote:
>> +  };                                                                        
>> \
> 
> Thanks, that looks good except I don't see why some of the lines like the 
> above have semicolons while others don't.

You're right, more consistency wouldn't hurt.  Because everything ends in a 
single line, some of them are needed (separators of statements of compound 
statements), others aren't.

How about this?

commit 2e801e81bb362429d0e252d076233bfdac20e367
Author: Akim Demaille <address@hidden>
Date:   Sat May 18 08:46:00 2019 +0200

    maintainer-makefile: catch uses of $< in non-implicit rules
    
    * top/maint.mk (sc_prohibit_magic_number_exit): New.

diff --git a/ChangeLog b/ChangeLog
index 1918041f0..8d5a4ca6e 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+2019-05-18  Akim Demaille  <address@hidden>
+
+       maintainer-makefile: catch uses of $< in non-implicit rules
+       * top/maint.mk (sc_prohibit_magic_number_exit): New.
+
 2019-05-14  Paul Eggert  <address@hidden>
 
        close-stream, closein, closeout: simplify
diff --git a/top/maint.mk b/top/maint.mk
index e9d5ee7d4..3dbe9c378 100644
--- a/top/maint.mk
+++ b/top/maint.mk
@@ -408,6 +408,41 @@ sc_prohibit_magic_number_exit:
        halt='use EXIT_* values rather than magic number'               \
          $(_sc_search_regexp)
 
+# Check that we don't use $< in non-implicit Makefile rules.
+#
+# To find the Makefiles, trace AC_CONFIG_FILES.  Using VC_LIST would
+# miss the Makefiles that are not under VC control (e.g., symlinks
+# installed for gettext).  "Parsing" (recursive) uses of SUBDIRS seems
+# too delicate.
+#
+# Use GNU Make's --print-data-base to normalize the rules into some
+# easy to parse format: they are separated by two \n.  Look for the
+# "section" about non-pattern rules (marked with "# Files") inside
+# which there are still the POSIX Make like implicit rules (".c.o").
+sc_prohibit_gnu_make_extensions_awk_ =                                 \
+  BEGIN {                                                              \
+      RS = "\n\n";                                                     \
+      in_rules = 0;                                                    \
+  }                                                                    \
+  /^\# Files/ {                                                                
\
+      in_rules = 1;                                                    \
+  }                                                                    \
+  /\$$</ && in_rules && $$0 !~ /^(.*\n)*\.\w+(\.\w+)?:/ {              \
+      print "Error: " file ": $$< in a non implicit rule\n" $$0;       \
+      status = 1;                                                      \
+  }                                                                    \
+  END {                                                                        
\
+     exit status;                                                      \
+  }
+sc_prohibit_gnu_make_extensions:
+       (cd $(srcdir) && autoconf --trace AC_CONFIG_FILES:'$$1') |      \
+         tr ' ' '\n' |                                                 \
+         $(SED) -ne '/Makefile/{s/\.in$$//;p;}' |                      \
+         while read m; do                                              \
+           $(MAKE) -qp -f $$m .DUMMY-TARGET 2>/dev/null |              \
+             awk -v file=$$m -e '$(address@hidden)' || exit 1;         \
+         done
+
 # Using EXIT_SUCCESS as the first argument to error is misleading,
 # since when that parameter is 0, error does not exit.  Use '0' instead.
 sc_error_exit_success:




reply via email to

[Prev in Thread] Current Thread [Next in Thread]