From 161112fd78a1ce4ed0e7965c0b0d15805f0c02b7 Mon Sep 17 00:00:00 2001 From: Akim Demaille Date: Mon, 23 Oct 2000 18:32:17 +0000 Subject: [PATCH] In order to check that all the CPP symbols which are AC_DEFINE'd are properly templated, autoheader traces AC_DEFINE/AC_DEFINE_UNQUOTED. Only literals can be traced, and actually tracing non literals produces invalid autoheader input. Hence, provide a means to trace calls to AC_DEFINE/AC_DEFINE_UNQUOTED with literals. * acgeneral.m4 (AC_DEFINE_TRACE, AC_DEFINE_TRACE_LITERAL): New macros. (AC_DEFINE, AC_DEFINE_UNQUOTED): Use AC_DEFINE_TRACE. * autoheader.sh: Trace AC_DEFINE_TRACE_LITERAL, not AC_DEFINE/AC_DEFINE_UNQUOTED. --- ChangeLog | 15 +++++++++++++++ acgeneral.m4 | 22 +++++++++++++++++++--- autoheader.in | 3 +-- autoheader.sh | 3 +-- bin/autoheader.in | 3 +-- lib/autoconf/general.m4 | 22 +++++++++++++++++++--- tests/syntax.m4 | 1 + tests/update.m4 | 1 + 8 files changed, 58 insertions(+), 12 deletions(-) diff --git a/ChangeLog b/ChangeLog index 22ea98eb..f558dac2 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,18 @@ +2000-10-23 Akim Demaille + + In order to check that all the CPP symbols which are AC_DEFINE'd + are properly templated, autoheader traces + AC_DEFINE/AC_DEFINE_UNQUOTED. Only literals can be traced, and + actually tracing non literals produces invalid autoheader input. + Hence, provide a means to trace calls to + AC_DEFINE/AC_DEFINE_UNQUOTED with literals. + + * acgeneral.m4 (AC_DEFINE_TRACE, AC_DEFINE_TRACE_LITERAL): New + macros. + (AC_DEFINE, AC_DEFINE_UNQUOTED): Use AC_DEFINE_TRACE. + * autoheader.sh: Trace AC_DEFINE_TRACE_LITERAL, not + AC_DEFINE/AC_DEFINE_UNQUOTED. + 2000-10-23 Akim Demaille Let autoupdate change AC_PREREQ to require the current version of diff --git a/acgeneral.m4 b/acgeneral.m4 index 0fbfd6a4..a9fa77fc 100644 --- a/acgeneral.m4 +++ b/acgeneral.m4 @@ -2596,25 +2596,41 @@ AC_MSG_RESULT_UNQUOTED(AC_VAR_GET([$2]))]) ## ---------------------- ## +# AC_DEFINE_TRACE_LITERAL(LITERAL-CPP-SYMBOL) +# ------------------------------------------- +# This macro is useless, it is used only with --trace to collect the +# list of *literals* CPP values passed to AC_DEFINE/AC_DEFINE_UNQUOTED. +define([AC_DEFINE_TRACE_LITERAL]) + + +# AC_DEFINE_TRACE(CPP-SYMBOL) +# --------------------------- +# This macro is a wrapper around AC_DEFINE_TRACE_LITERAL which filters +# out non literal symbols. +define([AC_DEFINE_TRACE], +[AC_VAR_INDIR_IFELSE([$1], [], [AC_DEFINE_TRACE_LITERAL([$1])])]) + + # AC_DEFINE(VARIABLE, [VALUE], [DESCRIPTION]) # ------------------------------------------- # Set VARIABLE to VALUE, verbatim, or 1. Remember the value # and if VARIABLE is affected the same VALUE, do nothing, else # die. The third argument is used by autoheader. define([AC_DEFINE], -[ifval([$3], [AH_TEMPLATE([$1], [$3])])dnl +[AC_DEFINE_TRACE([$1])dnl +ifval([$3], [AH_TEMPLATE([$1], [$3])])dnl cat >>confdefs.h <<\EOF [#define] $1 ifelse($#, 2, [$2], $#, 3, [$2], 1) EOF ]) - # AC_DEFINE_UNQUOTED(VARIABLE, [VALUE], [DESCRIPTION]) # ---------------------------------------------------- # Similar, but perform shell substitutions $ ` \ once on VALUE. define([AC_DEFINE_UNQUOTED], -[ifval([$3], [AH_TEMPLATE([$1], [$3])])dnl +[AC_DEFINE_TRACE([$1])dnl +ifval([$3], [AH_TEMPLATE([$1], [$3])])dnl cat >>confdefs.h <$tmp/traces.sh || { (exit 1); exit; } $verbose $me: sourcing $tmp/traces.sh >&2 diff --git a/autoheader.sh b/autoheader.sh index 9996cb8a..1f83ec0e 100644 --- a/autoheader.sh +++ b/autoheader.sh @@ -250,8 +250,7 @@ $autoconf \ --trace AC_CONFIG_HEADERS:'config_h="$1"' \ --trace AH_OUTPUT:'ac_verbatim_$1="\ $2"' \ - --trace AC_DEFINE:'syms="$$syms $1"' \ - --trace AC_DEFINE_UNQUOTED:'syms="$$syms $1"' \ + --trace AC_DEFINE_TRACE_LITERAL:'syms="$$syms $1"' \ $infile >$tmp/traces.sh || { (exit 1); exit; } $verbose $me: sourcing $tmp/traces.sh >&2 diff --git a/bin/autoheader.in b/bin/autoheader.in index 9996cb8a..1f83ec0e 100644 --- a/bin/autoheader.in +++ b/bin/autoheader.in @@ -250,8 +250,7 @@ $autoconf \ --trace AC_CONFIG_HEADERS:'config_h="$1"' \ --trace AH_OUTPUT:'ac_verbatim_$1="\ $2"' \ - --trace AC_DEFINE:'syms="$$syms $1"' \ - --trace AC_DEFINE_UNQUOTED:'syms="$$syms $1"' \ + --trace AC_DEFINE_TRACE_LITERAL:'syms="$$syms $1"' \ $infile >$tmp/traces.sh || { (exit 1); exit; } $verbose $me: sourcing $tmp/traces.sh >&2 diff --git a/lib/autoconf/general.m4 b/lib/autoconf/general.m4 index 0fbfd6a4..a9fa77fc 100644 --- a/lib/autoconf/general.m4 +++ b/lib/autoconf/general.m4 @@ -2596,25 +2596,41 @@ AC_MSG_RESULT_UNQUOTED(AC_VAR_GET([$2]))]) ## ---------------------- ## +# AC_DEFINE_TRACE_LITERAL(LITERAL-CPP-SYMBOL) +# ------------------------------------------- +# This macro is useless, it is used only with --trace to collect the +# list of *literals* CPP values passed to AC_DEFINE/AC_DEFINE_UNQUOTED. +define([AC_DEFINE_TRACE_LITERAL]) + + +# AC_DEFINE_TRACE(CPP-SYMBOL) +# --------------------------- +# This macro is a wrapper around AC_DEFINE_TRACE_LITERAL which filters +# out non literal symbols. +define([AC_DEFINE_TRACE], +[AC_VAR_INDIR_IFELSE([$1], [], [AC_DEFINE_TRACE_LITERAL([$1])])]) + + # AC_DEFINE(VARIABLE, [VALUE], [DESCRIPTION]) # ------------------------------------------- # Set VARIABLE to VALUE, verbatim, or 1. Remember the value # and if VARIABLE is affected the same VALUE, do nothing, else # die. The third argument is used by autoheader. define([AC_DEFINE], -[ifval([$3], [AH_TEMPLATE([$1], [$3])])dnl +[AC_DEFINE_TRACE([$1])dnl +ifval([$3], [AH_TEMPLATE([$1], [$3])])dnl cat >>confdefs.h <<\EOF [#define] $1 ifelse($#, 2, [$2], $#, 3, [$2], 1) EOF ]) - # AC_DEFINE_UNQUOTED(VARIABLE, [VALUE], [DESCRIPTION]) # ---------------------------------------------------- # Similar, but perform shell substitutions $ ` \ once on VALUE. define([AC_DEFINE_UNQUOTED], -[ifval([$3], [AH_TEMPLATE([$1], [$3])])dnl +[AC_DEFINE_TRACE([$1])dnl +ifval([$3], [AH_TEMPLATE([$1], [$3])])dnl cat >>confdefs.h <