On 22/01/10 17:09, Jim Meyering wrote:
Eric Blake wrote:
According to Jim Meyering on 1/22/2010 6:17 AM:
However, it'd sure be nice to use something more generic than
lib/config.h.  IMHO, autoconf should make configure AC_SUBST its
currently-internal-only CONFIG_HEADERS variable.  While we wait,
I suppose we can kludge it by extracting the first file name
from the use of AC_CONFIG_HEADER(S)? in configure.ac.

And what's wrong with AH_HEADER?  It should be possible to do something
like (untested):

AC_CONFIG_COMMANDS_PRE([m4_ifdef([AH_HEADER],
  [AC_SUBST([CONFIG_HEADER], m4_defn([AH_HEADER]))])])

I didn't know we could do that ;-)
And it's even documented.
Thanks!

Then, to enable maint.mk to rely on a definition of $(CONFIG_HEADER)
we could add something like the above to modules/maintainer-makefile:

     configure.ac:
     AC_CONFIG_COMMANDS_PRE([m4_ifdef([AH_HEADER],
       [AC_SUBST([CONFIG_HEADER], m4_defn([AH_HEADER]))])])


The attached gnulib patch (summarized below) seems to work.

cheers,
Pádraig.

--- a/modules/maintainer-makefile
+++ b/modules/maintainer-makefile

+configure.ac:
+AC_CONFIG_COMMANDS_PRE([m4_ifdef([AH_HEADER],
+  [AC_SUBST([CONFIG_INCLUDE], m4_defn([AH_HEADER]))])])
+

--- a/top/maint.mk
+++ b/top/maint.mk

+# #if HAVE_... will evaluate to false for any non numeric string.
+# That would be flagged by using -Wundef, however gnulib currently
+# tests many undefined macros, and so we can't enable that option.
+# So at least preclude common boolean strings as macro values.
+sc_Wundef_boolean:
+       @grep -Ei '^#define.*(yes|no|true|false)$$' '$(CONFIG_INCLUDE)' && \
+         { echo 'Use 0 or 1 for macro values' 1>&2; exit 1; } || :
+

>From 0e9eb78c012655bc9f4e9deb12d574bed52f898c Mon Sep 17 00:00:00 2001
From: =?utf-8?q?P=C3=A1draig=20Brady?= <p...@draigbrady.com>
Date: Mon, 25 Jan 2010 10:55:34 +0000
Subject: [PATCH] syntax-check: detect incorrect boolean macro values in config.h

* modules/maintainer-makefile (configure.ac): Parameterize the location
of config.h.  The logic is from Eric Blake and the location indicated
by Jim Meyering.  Note CONFIG_HEADER is a forbidden variable name.
* top/maint.mk (sc_Wundef_boolean): New rule.
---
 ChangeLog                   |    8 ++++++++
 modules/maintainer-makefile |    4 ++++
 top/maint.mk                |    8 ++++++++
 3 files changed, 20 insertions(+), 0 deletions(-)

diff --git a/ChangeLog b/ChangeLog
index 9546514..ad563d4 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,11 @@
+2010-01-25 Pádraig Brady <p...@draigbrady.com>
+
+	syntax-check: detect incorrect boolean macro values in config.h
+	* modules/maintainer-makefile (configure.ac): Parameterize the location
+	of config.h.  The logic is from Eric Blake and the location indicated
+	by Jim Meyering.  Note CONFIG_HEADER is a forbidden variable name.
+	* top/maint.mk (sc_Wundef_boolean): New rule.
+
 2010-01-24  Bruno Haible  <br...@clisp.org>
 
 	Tests for module 'yn'.
diff --git a/modules/maintainer-makefile b/modules/maintainer-makefile
index 21c2802..ed43e87 100644
--- a/modules/maintainer-makefile
+++ b/modules/maintainer-makefile
@@ -9,6 +9,10 @@ gnumakefile
 useless-if-before-free
 vc-list-files
 
+configure.ac:
+AC_CONFIG_COMMANDS_PRE([m4_ifdef([AH_HEADER],
+  [AC_SUBST([CONFIG_INCLUDE], m4_defn([AH_HEADER]))])])
+
 License:
 GPLed build tool
 
diff --git a/top/maint.mk b/top/maint.mk
index 346d681..d384ca6 100644
--- a/top/maint.mk
+++ b/top/maint.mk
@@ -718,6 +718,14 @@ sc_copyright_check:
 	       exit 1; };						\
 	fi
 
+# #if HAVE_... will evaluate to false for any non numeric string.
+# That would be flagged by using -Wundef, however gnulib currently
+# tests many undefined macros, and so we can't enable that option.
+# So at least preclude common boolean strings as macro values.
+sc_Wundef_boolean:
+	@grep -Ei '^#define.*(yes|no|true|false)$$' '$(CONFIG_INCLUDE)' && \
+	  { echo 'Use 0 or 1 for macro values' 1>&2; exit 1; } || :
+
 vc-diff-check:
 	(unset CDPATH; cd $(srcdir) && $(VC) diff) > vc-diffs || :
 	if test -s vc-diffs; then				\
-- 
1.6.2.5

Reply via email to