[PATCH] autoheader: check templates of all config headers

Daniel Elstner <[email protected]>
Newsgroups gmane.comp.sysutils.autoconf.patches
Message-ID <[email protected]>
* bin/autoheader.in: When checking for missing templates, take
all config headers into account, not just the one generated by
autoheader.  This makes it possible to use AC_DEFINE() for
secondary headers without duplicating the template into the
first header.
* tests/tools.at: Add a check for autoheader with multiple
config headers.
* NEWS: Document the new behavior.
---
 NEWS              |  5 +++++
 bin/autoheader.in | 37 ++++++++++++++++++++++++++-----------
 tests/tools.at    | 25 +++++++++++++++++++++++++
 3 files changed, 56 insertions(+), 11 deletions(-)

diff --git a/NEWS b/NEWS
index f691179..ceda4a0 100644
--- a/NEWS
+++ b/NEWS
@@ -27,6 +27,11 @@ GNU Autoconf NEWS - User visible changes.
    is now deprecated.  If you really need that behavior use
    AC_PREPROC_IFELSE.
 
+** When checking for missing templates, autoheader now takes any
+   templates defined in the inputs of secondary config headers into
+   account.  This makes it possible to use AC_DEFINE for secondary
+   headers without duplicating the template in the main config header.
+
 ** Macros
 
 - New macro AC_C__GENERIC.
diff --git a/bin/autoheader.in b/bin/autoheader.in
index 8c70663..fe06774 100644
--- a/bin/autoheader.in
+++ b/bin/autoheader.in
@@ -191,11 +191,21 @@ unless ($config_h)
     exit 1;
   }
 
-# We template only the first CONFIG_HEADER.
-$config_h =~ s/ .*//;
 # Support "outfile[:infile]", defaulting infile="outfile.in".
-($config_h, $config_h_in) = split (':', $config_h, 2);
-$config_h_in ||= "$config_h.in";
+sub templates_for_header ($)
+{
+  my ($spec) = @_;
+  my ($header, @templates) = split(':', $spec);
+
+  return @templates if (@templates);
+  return $header . '.in';
+}
+
+my @config_templates = map(templates_for_header($_), split(' ', $config_h));
+
+# We template only the first CONFIG_HEADER.
+$config_h_in = shift(@config_templates);
+$config_h =~ s/[ :].*//;
 
 # %SYMBOL might contain things like 'F77_FUNC(name,NAME)', but we keep
 # only the name of the macro.
@@ -261,14 +271,20 @@ $out->close;
 
 # Check that all the symbols have a template.
 {
-  my $in = new Autom4te::XFile ("< " . open_quote ("$tmp/config.hin"));
-  my $suggest_ac_define = 1;
-  while ($_ = $in->getline)
+  foreach my $template ("$tmp/config.hin", @config_templates)
     {
-      my ($symbol) = /^\#\s*\w+\s+(\w+)/
-	or next;
-      delete $symbol{$symbol};
+      my $in = new Autom4te::XFile ("< " . open_quote ($template));
+
+      while ($_ = $in->getline)
+	{
+	  my ($sym) = /^\#\s*\w+\s+(\w+)/
+	    or next;
+	  delete $symbol{$sym};
+	}
     }
+
+  my $suggest_ac_define = 1;
+
   foreach (sort keys %symbol)
     {
       msg 'syntax', "warning: missing template: $_";
@@ -277,7 +293,6 @@ $out->close;
 	  msg 'syntax',  "Use AC_DEFINE([$_], [], [Description])";
 	  $suggest_ac_define = 0;
 	}
-
     }
   exit 1
     if keys %symbol;
diff --git a/tests/tools.at b/tests/tools.at
index 24173c9..d5a919c 100644
--- a/tests/tools.at
+++ b/tests/tools.at
@@ -860,6 +860,31 @@ config.h.in:0
 AT_CLEANUP
 
 
+# autoheader should take all config header inputs into account when
+# checking for missing templates.
+AT_SETUP([autoheader with multiple headers])
+
+AT_DATA([config-extra.h.in],
+[[/* Define this to whatever you want. */
+#undef HANNA
+]])
+AT_DATA([configure.ac],
+[[AC_INIT
+AC_CONFIG_HEADERS([config.h config-extra.h])
+AC_DEFINE([HANNA], ["Hanna"])
+AC_DEFINE([SEAN], ["Sean"], [Sean's name])
+AC_OUTPUT
+]])
+
+AT_CHECK_AUTOCONF
+AT_CHECK_AUTOHEADER
+AT_CHECK([grep HANNA configure], [0], [ignore], [ignore])
+AT_CHECK([grep HANNA config.h.in], [1], [ignore], [ignore])
+AT_CHECK([grep SEAN configure], [0], [ignore], [ignore])
+AT_CHECK([grep SEAN config.h.in], [0], [ignore], [ignore])
+
+AT_CLEANUP
+
 
 
 ## ------------ ##
-- 
2.1.4
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.