]> git.ipfire.org Git - thirdparty/autoconf.git/commitdiff
This change prompted by a problem report by Andrey Simonenko in
authorPaul Eggert <eggert@cs.ucla.edu>
Fri, 15 Dec 2006 18:25:23 +0000 (18:25 +0000)
committerPaul Eggert <eggert@cs.ucla.edu>
Fri, 15 Dec 2006 18:25:23 +0000 (18:25 +0000)
<http://lists.gnu.org/archive/html/bug-autoconf/2006-12/msg00026.html>.
* 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.

ChangeLog
doc/autoconf.texi
lib/autoconf/fortran.m4
lib/autoconf/general.m4

index afe6e5c6ecc624b229966acb63c604e3dcfebe9f..29cf319680a0f7cca165f69871f70d155eb85386 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,15 @@
+2006-12-15  Paul Eggert  <eggert@cs.ucla.edu>
+
+       This change prompted by a problem report by Andrey Simonenko in
+       <http://lists.gnu.org/archive/html/bug-autoconf/2006-12/msg00026.html>.
+       * 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  <eggert@cs.ucla.edu>
 
        * doc/autoconf.texi: Undo some of the 2006-12-10 change.  It was
index 9cb5505fb75f8d9296a492b365f67f86591f5457..98bf219bfd9ff2f94d5a89e2c3723e19a184eba9 100644 (file)
@@ -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,
index e53a2e5b913b51840b8dfc7a639137357e4ef487..a5005e005cbe115a79a7b5675defd9e4a661c46a 100644 (file)
@@ -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
 
 
index 0cd1e7bdd5c268eefd9c4d1eb79b31099ea28de1..27bfa607da3476b25f13e1026e1faae34b12c231 100644 (file)
@@ -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)