From: Paul Eggert Date: Fri, 15 Dec 2006 18:25:23 +0000 (+0000) Subject: This change prompted by a problem report by Andrey Simonenko in X-Git-Tag: v2.62~388 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=6a575d434f295d06d00ce38826ff11bd7e4df939;p=thirdparty%2Fautoconf.git This change prompted by a problem report by Andrey Simonenko in . * doc/autoconf.texi (Defining Symbols): AC_DEFINE works for object-like macros only, in the traditional portable character set. * lib/autoconf/general.m4 (AC_DEFINE_TRACE_LITERAL): Warn about attempts to define things that are not identifiers. * lib/autoconf/fortran.m4 (_AC_FC_WRAPPERS): Rewrite to avoid awful hack that AC_DEFINEd macro names containing parentheses. --- diff --git a/ChangeLog b/ChangeLog index afe6e5c6..29cf3196 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,15 @@ +2006-12-15 Paul Eggert + + This change prompted by a problem report by Andrey Simonenko in + . + * doc/autoconf.texi (Defining Symbols): AC_DEFINE works for + object-like macros only, in the traditional portable character + set. + * lib/autoconf/general.m4 (AC_DEFINE_TRACE_LITERAL): + Warn about attempts to define things that are not identifiers. + * lib/autoconf/fortran.m4 (_AC_FC_WRAPPERS): Rewrite to avoid + awful hack that AC_DEFINEd macro names containing parentheses. + 2006-12-12 Paul Eggert * doc/autoconf.texi: Undo some of the 2006-12-10 change. It was diff --git a/doc/autoconf.texi b/doc/autoconf.texi index 9cb5505f..98bf219b 100644 --- a/doc/autoconf.texi +++ b/doc/autoconf.texi @@ -8250,7 +8250,9 @@ output. @defmac AC_DEFINE (@var{variable}, @var{value}, @ovar{description}) @defmacx AC_DEFINE (@var{variable}) @acindex{DEFINE} -Define the C preprocessor variable @var{variable} to @var{value} (verbatim). +Define @var{variable} to @var{value} (verbatim), by defining a C +object-like macro for @var{variable}. @var{variable} should be a C +identifier that contains only letters, digits, and underscores. @var{value} should not contain literal newlines, and if you are not using @code{AC_CONFIG_HEADERS} it should not contain any @samp{#} characters, as @command{make} tends to eat them. To use a shell variable, diff --git a/lib/autoconf/fortran.m4 b/lib/autoconf/fortran.m4 index e53a2e5b..a5005e00 100644 --- a/lib/autoconf/fortran.m4 +++ b/lib/autoconf/fortran.m4 @@ -1033,40 +1033,82 @@ AC_LANG_POP(Fortran)dnl # scheme used by the Fortran compiler. AC_DEFUN([_AC_FC_WRAPPERS], [_AC_FORTRAN_ASSERT()dnl -AH_TEMPLATE(_AC_FC[_FUNC], - [Define to a macro mangling the given C identifier (in lower and upper - case), which must not contain underscores, for linking with Fortran.])dnl -AH_TEMPLATE(_AC_FC[_FUNC_], - [As ]_AC_FC[_FUNC, but for C identifiers containing underscores.])dnl case $ac_cv_[]_AC_LANG_ABBREV[]_mangling in - "lower case, no underscore, no extra underscore") - AC_DEFINE(_AC_FC[_FUNC(name,NAME)], [name]) - AC_DEFINE(_AC_FC[_FUNC_(name,NAME)], [name]) ;; - "lower case, no underscore, extra underscore") - AC_DEFINE(_AC_FC[_FUNC(name,NAME)], [name]) - AC_DEFINE(_AC_FC[_FUNC_(name,NAME)], [name ## _]) ;; - "lower case, underscore, no extra underscore") - AC_DEFINE(_AC_FC[_FUNC(name,NAME)], [name ## _]) - AC_DEFINE(_AC_FC[_FUNC_(name,NAME)], [name ## _]) ;; - "lower case, underscore, extra underscore") - AC_DEFINE(_AC_FC[_FUNC(name,NAME)], [name ## _]) - AC_DEFINE(_AC_FC[_FUNC_(name,NAME)], [name ## __]) ;; - "upper case, no underscore, no extra underscore") - AC_DEFINE(_AC_FC[_FUNC(name,NAME)], [NAME]) - AC_DEFINE(_AC_FC[_FUNC_(name,NAME)], [NAME]) ;; - "upper case, no underscore, extra underscore") - AC_DEFINE(_AC_FC[_FUNC(name,NAME)], [NAME]) - AC_DEFINE(_AC_FC[_FUNC_(name,NAME)], [NAME ## _]) ;; - "upper case, underscore, no extra underscore") - AC_DEFINE(_AC_FC[_FUNC(name,NAME)], [NAME ## _]) - AC_DEFINE(_AC_FC[_FUNC_(name,NAME)], [NAME ## _]) ;; - "upper case, underscore, extra underscore") - AC_DEFINE(_AC_FC[_FUNC(name,NAME)], [NAME ## _]) - AC_DEFINE(_AC_FC[_FUNC_(name,NAME)], [NAME ## __]) ;; + 'lower case, no underscore, extra underscore' | \ + 'lower case, underscore, no extra underscore' | \ + 'lower case, underscore, extra underscore' | \ + 'upper case, no underscore, no extra underscore' | \ + 'upper case, no underscore, extra underscore' | \ + 'upper case, underscore, no extra underscore' | \ + 'upper case, underscore, extra underscore') ;; *) AC_MSG_WARN([unknown Fortran name-mangling scheme]) ;; esac +case $ac_cv_[]_AC_LANG_ABBREV[]_mangling in #( + 'upper case',*,) + AC_DEFINE(_AC_FC[_UPPER_CASE], 1, + [Define to 1 if upper case spelling should be used.]);; +esac +case $ac_cv_[]_AC_LANG_ABBREV[]_mangling in #( + *,'underscore',*) + AC_DEFINE(_AC_FC[_UNDERSCORE], 1, + [Define to 1 if an underscore should be appended.]);; +esac +case $ac_cv_[]_AC_LANG_ABBREV[]_mangling in #( + *,*,'extra underscore') + AC_DEFINE(_AC_FC[_EXTRA_UNDERSCORE], 1, + [Define to 1 if an extra underscore should be appended.]);; +esac +AH_VERBATIM(_AC_FC[_FUNC], +[/* Define to 1 if upper case spelling should be used. */ +#undef ]_AC_FC[_UPPER_CASE + +/* Define to 1 if an underscore should be appended. */ +#undef ]_AC_FC[_UNDERSCORE + +/* Define to 1 if an extra underscore should be appended. */ +#undef ]_AC_FC[_EXTRA_UNDERSCORE + +/* Define to a macro mangling the given C identifier (in lower and upper + case), which must not contain underscores, for linking with Fortran. +#ifdef ]_AC_FC[_UPPER_CASE +# ifdef ]_AC_FC[_UNDERSCORE +# ifdef ]_AC_FC[_EXTRA_UNDERSCORE +# define ]_AC_FC[_FUNC(name, NAME) NAME ## _ +# define ]_AC_FC[_FUNC_(name, NAME) NAME ## __ +# else +# define ]_AC_FC[_FUNC(name, NAME) NAME ## _ +# define ]_AC_FC[_FUNC_(name, NAME) NAME ## _ +# endif +# else +# ifdef ]_AC_FC[_EXTRA_UNDERSCORE +# define ]_AC_FC[_FUNC(name, NAME) NAME +# define ]_AC_FC[_FUNC_(name, NAME) NAME ## _ +# else +# define ]_AC_FC[_FUNC(name, NAME) NAME +# define ]_AC_FC[_FUNC_(name, NAME) NAME +# endif +# endif +#else +# ifdef ]_AC_FC[_UNDERSCORE +# ifdef ]_AC_FC[_EXTRA_UNDERSCORE +# define ]_AC_FC[_FUNC(name, NAME) name ## _ +# define ]_AC_FC[_FUNC_(name, NAME) name ## __ +# else +# define ]_AC_FC[_FUNC(name, NAME) name ## _ +# define ]_AC_FC[_FUNC_(name, NAME) name ## _ +# endif +# else +# ifdef ]_AC_FC[_EXTRA_UNDERSCORE +# define ]_AC_FC[_FUNC(name, NAME) name +# define ]_AC_FC[_FUNC_(name, NAME) name ## _ +# else +# define ]_AC_FC[_FUNC(name, NAME) name +# define ]_AC_FC[_FUNC_(name, NAME) name +# endif +# endif +#endif]) ])# _AC_FC_WRAPPERS diff --git a/lib/autoconf/general.m4 b/lib/autoconf/general.m4 index 0cd1e7bd..27bfa607 100644 --- a/lib/autoconf/general.m4 +++ b/lib/autoconf/general.m4 @@ -1951,7 +1951,10 @@ AC_DEFUN([_AC_CACHE_CHECK_INT], # ------------------------------------------- # Used by --trace to collect the list of AC_DEFINEd macros. m4_define([AC_DEFINE_TRACE_LITERAL], -[m4_pattern_allow([^$1$])]) +[m4_pattern_allow([^$1$])dnl +m4_bmatch([$1], ^m4_defn([m4_re_word])$, [], + [m4_warn([syntax], [AC_DEFINE: not an identifier: $1])])dnl +])# AC_DEFINE_TRACE_LITERAL # AC_DEFINE_TRACE(CPP-SYMBOL)