[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
New macro AC_FC_PP_DEFINE for the preprocessor define flag.
From: |
Ralf Wildenhues |
Subject: |
New macro AC_FC_PP_DEFINE for the preprocessor define flag. |
Date: |
Sat, 2 Apr 2011 15:39:31 +0200 |
User-agent: |
Mutt/1.5.20 (2010-08-04) |
The infrastructure for handling preprocessed Fortran better is still
lacking quite a bit; e.g., it would be nice to generate lazily-updated
config headers with Fortran-style comments. For now, I use this as a
workaround in projects:
AC_CONFIG_HEADERS([config.h])
# Convert config.h into an fconfig.h suitable for inclusion into Fortran.
# The sed script transforms C style /* comments */ into Fortran style.
AC_CONFIG_HEADERS([fconfig.h],
[[sed '
/\/\*\(.*\)\*\//{
s,,!\1,p
d
}
/\/\*/,/\*\//{
s,/\*,,
s,\*/,,
s,^,!,p
d
}' fconfig.h > fconfig.ht
mv -f fconfig.ht fconfig.h
]])
One thing that is still needed for basic support is a macro for the
define flag; thanks to IBM xlf, -D does not work universally. (I've
gathered the other spellings by looking at manuals only, no testing.)
For example, we can use this macro with above snippet as
FCFLAGS="$FCFLAGS ${FC_DEFINE}HAVE_FCONFIG_H"
(and later on, we want to have a FCDEFS variable and automake rules to
pick up this junk all by itself ...)
Pushed to master.
Cheers,
Ralf
New macro AC_FC_PP_DEFINE for the preprocessor define flag.
* lib/autoconf/fortran.m4 (AC_FC_PP_DEFINE): New macro.
* lib/autom4te.in (Automake-preselections): Preselect it.
* doc/autoconf.texi (Fortran Compiler): Document it.
* tests/local.at (_AT_CHECK_ENV): Do not complain about
FCFLAGS_F nor FC_DEFINE.
* NEWS: Update.
diff --git a/NEWS b/NEWS
index d09e0f4..c44678d 100644
--- a/NEWS
+++ b/NEWS
@@ -20,6 +20,7 @@ GNU Autoconf NEWS - User visible changes.
AC_FC_MODULE_FLAG for the Fortran 90 module search path flag
AC_FC_MODULE_OUTPUT_FLAG for the Fortran 90 module output directory flag
AC_FC_PP_SRCEXT for preprocessed Fortran source files extensions
+ AC_FC_PP_DEFINE for the Fortran preprocessor define flag
* Noteworthy changes in release 2.68 (2010-09-22) [stable]
Released by Eric Blake, based on git versions 2.67.*.
diff --git a/doc/autoconf.texi b/doc/autoconf.texi
index 730b590..d553f4a 100644
--- a/doc/autoconf.texi
+++ b/doc/autoconf.texi
@@ -8262,6 +8262,25 @@ Fortran Compiler
@address@hidden variables, respectively.
@end defmac
address@hidden AC_FC_PP_DEFINE (@ovar{action-if-success},
@dvar{action-if-failure, @
+ AC_MSG_FAILURE})
address@hidden
address@hidden fc_pp_define
+
+Find a flag to specify defines for preprocessed Fortran. Not all
+Fortran compilers use @option{-D}. Substitute @code{FC_DEFINE} with
+the result and call @var{action-if-success} (defaults to nothing) if
+successful, and @var{action-if-failure} (defaults to failing with an
+error message) if not.
+
+This macro calls @code{AC_FC_PP_SRCEXT([F])} in order to learn how to
+to preprocess a @file{conftest.F} file, but restores a previously used
+Fortran source file extension afterwards again.
+
+The result of this test is cached in the @code{ac_cv_fc_pp_define}
+variable.
address@hidden defmac
+
@defmac AC_FC_FREEFORM (@ovar{action-if-success}, @dvar{action-if-failure, @
AC_MSG_FAILURE})
@acindex{FC_FREEFORM}
diff --git a/lib/autoconf/fortran.m4 b/lib/autoconf/fortran.m4
index 1c31392..56488a9 100644
--- a/lib/autoconf/fortran.m4
+++ b/lib/autoconf/fortran.m4
@@ -1275,6 +1275,56 @@ AC_LANG_POP(Fortran)dnl
])# AC_FC_PP_SRCEXT
+# AC_FC_PP_DEFINE([ACTION-IF-SUCCESS], [ACTION-IF-FAILURE = FAILURE])
+# -------------------------------------------------------------------
+# Find a flag to specify defines for preprocessed Fortran. Not all
+# Fortran compilers use -D. Substitute FC_DEFINE with the result and
+# call ACTION-IF-SUCCESS (defaults to nothing) if successful, and
+# ACTION-IF-FAILURE (defaults to failing with an error message) if not.
+#
+# Known flags:
+# IBM: -WF,-D
+# Lahey/Fujitsu: -Wp,-D older versions???
+# f2c: -D or -Wc,-D
+# others: -D
+AC_DEFUN([AC_FC_PP_DEFINE],
+[AC_LANG_PUSH([Fortran])dnl
+ac_fc_pp_define_srcext_save=$ac_fc_srcext
+AC_FC_PP_SRCEXT([F])
+AC_CACHE_CHECK([how to define symbols for preprocessed Fortran],
+ [ac_cv_fc_pp_define],
+[ac_fc_pp_define_srcext_save=$ac_fc_srcext
+ac_cv_fc_pp_define=unknown
+ac_fc_pp_define_FCFLAGS_save=$FCFLAGS
+for ac_flag in -D -WF,-D -Wp,-D -Wc,-D
+do
+ FCFLAGS="$ac_fc_pp_define_FCFLAGS_save ${ac_flag}FOOBAR ${ac_flag}ZORK=42"
+ AC_COMPILE_IFELSE([AC_LANG_PROGRAM([], [[
+#ifndef FOOBAR
+ choke me
+#endif
+#if ZORK != 42
+ choke me
+#endif]])],
+ [ac_cv_fc_pp_define=$ac_flag])
+ test x"$ac_cv_fc_pp_define" != xunknown && break
+done
+FCFLAGS=$ac_fc_pp_define_FCFLAGS_save
+])
+ac_fc_srcext=$ac_fc_pp_define_srcext_save
+if test "x$ac_cv_fc_pp_define" = xunknown; then
+ FC_DEFINE=
+ m4_default([$2],
+ [AC_MSG_ERROR([Fortran does not allow to define preprocessor
symbols], 77)])
+else
+ FC_DEFINE=$ac_cv_fc_pp_define
+ $1
+fi
+AC_SUBST([FC_DEFINE])dnl
+AC_LANG_POP([Fortran])dnl
+])
+
+
# AC_FC_FREEFORM([ACTION-IF-SUCCESS], [ACTION-IF-FAILURE = FAILURE])
# ------------------------------------------------------------------
# Look for a compiler flag to make the Fortran (FC) compiler accept
diff --git a/lib/autom4te.in b/lib/autom4te.in
index 0f86842..f38c4ad 100644
--- a/lib/autom4te.in
+++ b/lib/autom4te.in
@@ -44,6 +44,7 @@ args: --preselect AC_CONFIG_LIBOBJ_DIR
args: --preselect AC_CONFIG_LINKS
args: --preselect AC_FC_FREEFORM
args: --preselect AC_FC_SRCEXT
+args: --preselect AC_FC_PP_DEFINE
args: --preselect AC_FC_PP_SRCEXT
args: --preselect AC_INIT
args: --preselect AC_LIBSOURCE
diff --git a/tests/local.at b/tests/local.at
index a2efce3..1678c33 100644
--- a/tests/local.at
+++ b/tests/local.at
@@ -317,7 +317,7 @@ if test -f state-env.before && test -f state-env.after; then
[cross_compiling|U],
[interpval|PATH_SEPARATOR],
[F77_DUMMY_MAIN|f77_(case|underscore)],
- [FC(_DUMMY_MAIN|FLAGS|LIBS|FLAGS_f|_MODEXT|_MODINC|_MODOUT)?],
+ [FC(_DUMMY_MAIN|FLAGS|LIBS|FLAGS_[fF]|_MODEXT|_MODINC|_MODOUT|_DEFINE)?],
[ALLOCA|GETLOADAVG_LIBS|KMEM_GROUP|NEED_SETGID|POW_LIB],
[AWK|LEX|LEXLIB|LEX_OUTPUT_ROOT|LN_S|M4|MKDIR_P|RANLIB|SET_MAKE|YACC],
[GREP|[EF]GREP|SED],
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- New macro AC_FC_PP_DEFINE for the preprocessor define flag.,
Ralf Wildenhues <=