bug-gnulib@gnu.org mirror (unofficial)
 help / color / mirror / Atom feed
* maintainer-makefile: catch uses of $< in non-implicit rules
@ 2019-05-18  7:44 Akim Demaille
  2019-05-18  7:52 ` Paul Eggert
  0 siblings, 1 reply; 24+ messages in thread
From: Akim Demaille @ 2019-05-18  7:44 UTC (permalink / raw)
  To: Gnulib bugs

Bruno made a bug report some time ago: make check failed for Bison on Solaris. The problem was the use of $< in some non-implicit rules.  This syntax-check caught them.

See
http://lists.gnu.org/archive/html/bug-bison/2019-05/msg00009.html
and
https://lists.gnu.org/archive/html/bison-patches/2019-05/msg00017.html

Ok to install?

commit e8a5869f2936459762cc48ab370c35b69f86d5e0
Author: Akim Demaille <akim.demaille@gmail.com>
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  <akim@lrde.epita.fr>
+
+	maintainer-makefile: catch uses of $< in non-implicit rules
+	* top/maint.mk (sc_prohibit_magic_number_exit): New.
+
 2019-05-14  Paul Eggert  <eggert@cs.ucla.edu>
 
 	close-stream, closein, closeout: simplify
diff --git a/top/maint.mk b/top/maint.mk
index e9d5ee7d4..05ee7661c 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 '$($@_awk_)' || 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:



^ permalink raw reply related	[flat|nested] 24+ messages in thread

end of thread, other threads:[~2019-07-19  7:40 UTC | newest]

Thread overview: 24+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2019-05-18  7:44 maintainer-makefile: catch uses of $< in non-implicit rules Akim Demaille
2019-05-18  7:52 ` Paul Eggert
2019-05-18  9:51   ` Akim Demaille
2019-05-18 18:21     ` Paul Eggert
2019-05-19  5:42       ` Akim Demaille
2019-06-17  9:57         ` Tim Rühsen
2019-06-17  9:59           ` Akim Demaille
2019-06-17 10:04             ` Tim Rühsen
2019-06-22 15:53               ` Akim Demaille
2019-06-24  9:42                 ` Tim Rühsen
2019-06-24 15:56                   ` Akim Demaille
2019-06-25 13:12                     ` Tim Rühsen
2019-06-25 13:24                     ` Tim Rühsen
2019-06-25 14:37                       ` Bruno Haible
2019-06-25 14:39                         ` Tim Rühsen
2019-06-25 14:46                         ` Tim Rühsen
2019-07-10  9:07                       ` Tim Rühsen
2019-07-10  9:38                         ` Tim Rühsen
2019-07-10 10:21                           ` Tim Rühsen
2019-07-10 19:32                             ` Akim Demaille
2019-07-11  8:00                               ` Tim Rühsen
2019-07-11  8:46                               ` Tim Rühsen
2019-07-19  7:40                                 ` Bernhard Voelker
2019-07-19  7:30     ` Bernhard Voelker

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).