[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PATCH] autoheader: check templates of all config headers
From: |
Daniel Elstner |
Subject: |
[PATCH] autoheader: check templates of all config headers |
Date: |
Mon, 17 Aug 2015 12:38:12 +0200 |
* 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