📄 fortran.m4
字号:
# _AC_PROG_FC_G# -------------# Check whether -g works, even if F[C]FLAGS is set, in case the package# plays around with F[C]FLAGS (such as to build both debugging and normal# versions of a library), tasteless as that idea is.m4_define([_AC_PROG_FC_G],[_AC_FORTRAN_ASSERT()dnlac_test_FFLAGS=${[]_AC_LANG_PREFIX[]FLAGS+set}ac_save_FFLAGS=$[]_AC_LANG_PREFIX[]FLAGS_AC_LANG_PREFIX[]FLAGS=AC_CACHE_CHECK(whether $[]_AC_FC[] accepts -g, ac_cv_prog_[]_AC_LANG_ABBREV[]_g,[_AC_LANG_PREFIX[]FLAGS=-g_AC_COMPILE_IFELSE([AC_LANG_PROGRAM()],[ac_cv_prog_[]_AC_LANG_ABBREV[]_g=yes],[ac_cv_prog_[]_AC_LANG_ABBREV[]_g=no])])if test "$ac_test_FFLAGS" = set; then _AC_LANG_PREFIX[]FLAGS=$ac_save_FFLAGSelif test $ac_cv_prog_[]_AC_LANG_ABBREV[]_g = yes; then if test "x$ac_cv_[]_AC_LANG_ABBREV[]_compiler_gnu" = xyes; then _AC_LANG_PREFIX[]FLAGS="-g -O2" else _AC_LANG_PREFIX[]FLAGS="-g" fielse if test "x$ac_cv_[]_AC_LANG_ABBREV[]_compiler_gnu" = xyes; then _AC_LANG_PREFIX[]FLAGS="-O2" else _AC_LANG_PREFIX[]FLAGS= fifi[]dnl])# _AC_PROG_FC_G# _AC_PROG_FC_C_O# ---------------# Test if the Fortran compiler accepts the options `-c' and `-o'# simultaneously, and define `[F77/FC]_NO_MINUS_C_MINUS_O' if it does not.## The usefulness of this macro is questionable, as I can't really see# why anyone would use it. The only reason I include it is for# completeness, since a similar test exists for the C compiler.## FIXME: it seems like we could merge the C/C++/Fortran versions of this.AC_DEFUN([_AC_PROG_FC_C_O],[_AC_FORTRAN_ASSERT()dnlAC_CACHE_CHECK([whether $[]_AC_FC[] understands -c and -o together], [ac_cv_prog_[]_AC_LANG_ABBREV[]_c_o],[AC_LANG_CONFTEST([AC_LANG_PROGRAM([])])# We test twice because some compilers refuse to overwrite an existing# `.o' file with `-o', although they will create one.ac_try='$[]_AC_FC[] $[]_AC_LANG_PREFIX[]FLAGS -c conftest.$ac_ext -o conftest2.$ac_objext >&AS_MESSAGE_LOG_FD'rm -f conftest2.*if _AC_DO_VAR(ac_try) && test -f conftest2.$ac_objext && _AC_DO_VAR(ac_try); then ac_cv_prog_[]_AC_LANG_ABBREV[]_c_o=yeselse ac_cv_prog_[]_AC_LANG_ABBREV[]_c_o=nofirm -f conftest*])if test $ac_cv_prog_[]_AC_LANG_ABBREV[]_c_o = no; then AC_DEFINE([]_AC_FC[]_NO_MINUS_C_MINUS_O, 1, [Define to 1 if your Fortran compiler doesn't accept -c and -o together.])fi])# _AC_PROG_FC_C_O# AC_PROG_F77_C_O# ---------------AC_DEFUN([AC_PROG_F77_C_O],[AC_REQUIRE([AC_PROG_F77])dnlAC_LANG_PUSH(Fortran 77)dnl_AC_PROG_FC_C_OAC_LANG_POP(Fortran 77)dnl])# AC_PROG_F77_C_O# AC_PROG_FC_C_O# ---------------AC_DEFUN([AC_PROG_FC_C_O],[AC_REQUIRE([AC_PROG_FC])dnlAC_LANG_PUSH(Fortran)dnl_AC_PROG_FC_C_OAC_LANG_POP(Fortran)dnl])# AC_PROG_FC_C_O## ------------------------------- #### 4. Compilers' characteristics. #### ------------------------------- ### ---------------------------------------- ## 4d. Fortran 77 compiler characteristics. ## ---------------------------------------- ## _AC_PROG_FC_V_OUTPUT([FLAG = $ac_cv_prog_{f77/fc}_v])# -------------------------------------------------# Link a trivial Fortran program, compiling with a verbose output FLAG# (whose default value, $ac_cv_prog_{f77/fc}_v, is computed by# _AC_PROG_FC_V), and return the output in $ac_{f77/fc}_v_output. This# output is processed in the way expected by _AC_FC_LIBRARY_LDFLAGS,# so that any link flags that are echoed by the compiler appear as# space-separated items.AC_DEFUN([_AC_PROG_FC_V_OUTPUT],[_AC_FORTRAN_ASSERT()dnlAC_LANG_CONFTEST([AC_LANG_PROGRAM([])])# Compile and link our simple test program by passing a flag (argument# 1 to this macro) to the Fortran compiler in order to get# "verbose" output that we can then parse for the Fortran linker# flags.ac_save_FFLAGS=$[]_AC_LANG_PREFIX[]FLAGS_AC_LANG_PREFIX[]FLAGS="$[]_AC_LANG_PREFIX[]FLAGS m4_default([$1], [$ac_cv_prog_[]_AC_LANG_ABBREV[]_v])"eval "set x $ac_link"shift_AS_ECHO_LOG([$[*]])ac_[]_AC_LANG_ABBREV[]_v_output=`eval $ac_link AS_MESSAGE_LOG_FD>&1 2>&1 | grep -v 'Driving:'`echo "$ac_[]_AC_LANG_ABBREV[]_v_output" >&AS_MESSAGE_LOG_FD_AC_LANG_PREFIX[]FLAGS=$ac_save_FFLAGSrm -f conftest*# On HP/UX there is a line like: "LPATH is: /foo:/bar:/baz" where# /foo, /bar, and /baz are search directories for the Fortran linker.# Here, we change these into -L/foo -L/bar -L/baz (and put it first):ac_[]_AC_LANG_ABBREV[]_v_output="`echo $ac_[]_AC_LANG_ABBREV[]_v_output | grep 'LPATH is:' | sed 's,.*LPATH is\(: *[[^ ]]*\).*,\1,;s,: */, -L/,g'` $ac_[]_AC_LANG_ABBREV[]_v_output"# FIXME: we keep getting bitten by quoted arguments; a more general fix# that detects unbalanced quotes in FLIBS should be implemented# and (ugh) tested at some point.case $ac_[]_AC_LANG_ABBREV[]_v_output in # If we are using xlf then replace all the commas with spaces. *xlfentry*) ac_[]_AC_LANG_ABBREV[]_v_output=`echo $ac_[]_AC_LANG_ABBREV[]_v_output | sed 's/,/ /g'` ;; # With Intel ifc, ignore the quoted -mGLOB_options_string stuff (quoted # $LIBS confuse us, and the libraries appear later in the output anyway). *mGLOB_options_string*) ac_[]_AC_LANG_ABBREV[]_v_output=`echo $ac_[]_AC_LANG_ABBREV[]_v_output | sed 's/"-mGLOB[[^"]]*"/ /g'` ;; # Portland Group compiler has singly- or doubly-quoted -cmdline argument # Singly-quoted arguments were reported for versions 5.2-4 and 6.0-4. # Doubly-quoted arguments were reported for "PGF90/x86 Linux/x86 5.0-2". *-cmdline\ * | *-ignore\ * | *-def\ *) ac_[]_AC_LANG_ABBREV[]_v_output=`echo $ac_[]_AC_LANG_ABBREV[]_v_output | sed "\ s/-cmdline *'[[^']]*'/ /g; s/-cmdline *\"[[^\"]]*\"/ /g s/-ignore *'[[^']]*'/ /g; s/-ignore *\"[[^\"]]*\"/ /g s/-def *'[[^']]*'/ /g; s/-def *\"[[^\"]]*\"/ /g"` ;; # If we are using Cray Fortran then delete quotes. *cft90*) ac_[]_AC_LANG_ABBREV[]_v_output=`echo $ac_[]_AC_LANG_ABBREV[]_v_output | sed 's/"//g'` ;;esac])# _AC_PROG_FC_V_OUTPUT# _AC_PROG_FC_V# --------------## Determine the flag that causes the Fortran compiler to print# information of library and object files (normally -v)# Needed for _AC_FC_LIBRARY_FLAGS# Some compilers don't accept -v (Lahey: -verbose, xlf: -V, Fujitsu: -###)AC_DEFUN([_AC_PROG_FC_V],[_AC_FORTRAN_ASSERT()dnlAC_CACHE_CHECK([how to get verbose linking output from $[]_AC_FC[]], [ac_cv_prog_[]_AC_LANG_ABBREV[]_v],[AC_COMPILE_IFELSE([AC_LANG_PROGRAM()],[ac_cv_prog_[]_AC_LANG_ABBREV[]_v=# Try some options frequently used verbose outputfor ac_verb in -v -verbose --verbose -V -\#\#\#; do _AC_PROG_FC_V_OUTPUT($ac_verb) # look for -l* and *.a constructs in the output for ac_arg in $ac_[]_AC_LANG_ABBREV[]_v_output; do case $ac_arg in [[\\/]]*.a | ?:[[\\/]]*.a | -[[lLRu]]*) ac_cv_prog_[]_AC_LANG_ABBREV[]_v=$ac_verb break 2 ;; esac donedoneif test -z "$ac_cv_prog_[]_AC_LANG_ABBREV[]_v"; then AC_MSG_WARN([cannot determine how to obtain linking information from $[]_AC_FC[]])fi], [AC_MSG_WARN([compilation failed])])])])# _AC_PROG_FC_V# _AC_FC_LIBRARY_LDFLAGS# ----------------------## Determine the linker flags (e.g. "-L" and "-l") for the Fortran# intrinsic and runtime libraries that are required to successfully# link a Fortran program or shared library. The output variable# FLIBS/FCLIBS is set to these flags.## This macro is intended to be used in those situations when it is# necessary to mix, e.g. C++ and Fortran, source code into a single# program or shared library.## For example, if object files from a C++ and Fortran compiler must# be linked together, then the C++ compiler/linker must be used for# linking (since special C++-ish things need to happen at link time# like calling global constructors, instantiating templates, enabling# exception support, etc.).## However, the Fortran intrinsic and runtime libraries must be# linked in as well, but the C++ compiler/linker doesn't know how to# add these Fortran libraries. Hence, the macro# "AC_F77_LIBRARY_LDFLAGS" was created to determine these Fortran# libraries.## This macro was packaged in its current form by Matthew D. Langston.# However, nearly all of this macro came from the "OCTAVE_FLIBS" macro# in "octave-2.0.13/aclocal.m4", and full credit should go to John# W. Eaton for writing this extremely useful macro. Thank you John.AC_DEFUN([_AC_FC_LIBRARY_LDFLAGS],[_AC_FORTRAN_ASSERT()dnl_AC_PROG_FC_VAC_CACHE_CHECK([for _AC_LANG libraries of $[]_AC_FC[]], ac_cv_[]_AC_LANG_ABBREV[]_libs,[if test "x$[]_AC_LANG_PREFIX[]LIBS" != "x"; then ac_cv_[]_AC_LANG_ABBREV[]_libs="$[]_AC_LANG_PREFIX[]LIBS" # Let the user override the test.else_AC_PROG_FC_V_OUTPUTac_cv_[]_AC_LANG_ABBREV[]_libs=# Save positional arguments (if any)ac_save_positional="$[@]"set X $ac_[]_AC_LANG_ABBREV[]_v_outputwhile test $[@%:@] != 1; do shift ac_arg=$[1] case $ac_arg in [[\\/]]*.a | ?:[[\\/]]*.a) _AC_LIST_MEMBER_IF($ac_arg, $ac_cv_[]_AC_LANG_ABBREV[]_libs, , ac_cv_[]_AC_LANG_ABBREV[]_libs="$ac_cv_[]_AC_LANG_ABBREV[]_libs $ac_arg") ;; -bI:*) _AC_LIST_MEMBER_IF($ac_arg, $ac_cv_[]_AC_LANG_ABBREV[]_libs, , [_AC_LINKER_OPTION([$ac_arg], ac_cv_[]_AC_LANG_ABBREV[]_libs)]) ;; # Ignore these flags. -lang* | -lcrt*.o | -lc | -lgcc | -libmil | -LANG:=* | -LIST:* | -LNO:*) ;; -lkernel32) test x"$CYGWIN" != xyes && ac_cv_[]_AC_LANG_ABBREV[]_libs="$ac_cv_[]_AC_LANG_ABBREV[]_libs $ac_arg" ;; -[[LRuYz]]) # These flags, when seen by themselves, take an argument. # We remove the space between option and argument and re-iterate # unless we find an empty arg or a new option (starting with -) case $[2] in "" | -*);; *) ac_arg="$ac_arg$[2]" shift; shift set X $ac_arg "$[@]" ;; esac ;; -YP,*) for ac_j in `echo $ac_arg | sed -e 's/-YP,/-L/;s/:/ -L/g'`; do _AC_LIST_MEMBER_IF($ac_j, $ac_cv_[]_AC_LANG_ABBREV[]_libs, , [ac_arg="$ac_arg $ac_j" ac_cv_[]_AC_LANG_ABBREV[]_libs="$ac_cv_[]_AC_LANG_ABBREV[]_libs $ac_j"]) done ;; -[[lLR]]*) _AC_LIST_MEMBER_IF($ac_arg, $ac_cv_[]_AC_LANG_ABBREV[]_libs, , ac_cv_[]_AC_LANG_ABBREV[]_libs="$ac_cv_[]_AC_LANG_ABBREV[]_libs $ac_arg") ;; -zallextract*| -zdefaultextract) ac_cv_[]_AC_LANG_ABBREV[]_libs="$ac_cv_[]_AC_LANG_ABBREV[]_libs $ac_arg" ;; # Ignore everything else. esacdone# restore positional argumentsset X $ac_save_positional; shift# We only consider "LD_RUN_PATH" on Solaris systems. If this is seen,# then we insist that the "run path" must be an absolute path (i.e. it# must begin with a "/").case `(uname -sr) 2>/dev/null` in "SunOS 5"*) ac_ld_run_path=`echo $ac_[]_AC_LANG_ABBREV[]_v_output | sed -n 's,^.*LD_RUN_PATH *= *\(/[[^ ]]*\).*$,-R\1,p'` test "x$ac_ld_run_path" != x && _AC_LINKER_OPTION([$ac_ld_run_path], ac_cv_[]_AC_LANG_ABBREV[]_libs) ;;esacfi # test "x$[]_AC_LANG_PREFIX[]LIBS" = "x"])[]_AC_LANG_PREFIX[]LIBS="$ac_cv_[]_AC_LANG_ABBREV[]_libs"AC_SUBST([]_AC_LANG_PREFIX[]LIBS)])# _AC_FC_LIBRARY_LDFLAGS# AC_F77_LIBRARY_LDFLAGS# ----------------------AC_DEFUN([AC_F77_LIBRARY_LDFLAGS],[AC_REQUIRE([AC_PROG_F77])dnlAC_LANG_PUSH(Fortran 77)dnl_AC_FC_LIBRARY_LDFLAGSAC_LANG_POP(Fortran 77)dnl])# AC_F77_LIBRARY_LDFLAGS# AC_FC_LIBRARY_LDFLAGS# ----------------------AC_DEFUN([AC_FC_LIBRARY_LDFLAGS],[AC_REQUIRE([AC_PROG_FC])dnlAC_LANG_PUSH(Fortran)dnl_AC_FC_LIBRARY_LDFLAGSAC_LANG_POP(Fortran)dnl])# AC_FC_LIBRARY_LDFLAGS# _AC_FC_DUMMY_MAIN([ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND])# -----------------------------------------------------------## Detect name of dummy main routine required by the Fortran libraries,# (if any) and define {F77,FC}_DUMMY_MAIN to this name (which should be# used for a dummy declaration, if it is defined). On some systems,# linking a C program to the Fortran library does not work unless you# supply a dummy function called something like MAIN__.## Execute ACTION-IF-NOT-FOUND if no way of successfully linking a C# program with the {F77,FC} libs is found; default to exiting with an error# message. Execute ACTION-IF-FOUND if a dummy routine name is needed# and found or if it is not needed (default to defining {F77,FC}_DUMMY_MAIN# when needed).## What is technically happening is that the Fortran libraries provide# their own main() function, which usually initializes Fortran I/O and# similar stuff, and then calls MAIN__, which is the entry point of# your program. Usually, a C program will override this with its own# main() routine, but the linker sometimes complain if you don't# provide a dummy (never-called) MAIN__ routine anyway.## Of course, programs that want to allow Fortran subroutines to do# I/O, etcetera, should call their main routine MAIN__() (or whatever)# instead of main(). A separate autoconf test (_AC_FC_MAIN) checks# for the routine to use in this case (since the semantics of the test# are slightly different). To link to e.g. purely numerical# libraries, this is normally not necessary, however, and most C/C++# programs are reluctant to turn over so much control to Fortran. =)## The name variants we check for are (in order):# MAIN__ (g77, MAIN__ required on some systems; IRIX, MAIN__ optional)# MAIN_, __main (SunOS)# MAIN _MAIN __MAIN main_ main__ _main (we follow DDD and try these too)AC_DEFUN([_AC_FC_DUMMY_MAIN],[_AC_FORTRAN_ASSERT()dnlm4_define(_AC_LANG_PROGRAM_C_[]_AC_FC[]_HOOKS,[#ifdef ]_AC_FC[_DUMMY_MAIN]AC_LANG_CASE([Fortran], [#ifndef FC_DUMMY_MAIN_EQ_F77])[# ifdef __cplusplus extern "C"# endif int ]_AC_FC[_DUMMY_MAIN() { return 1; }]AC_LANG_CASE([Fortran], [#endif])[#endif])AC_CACHE_CHECK([for dummy main to link with _AC_LANG libraries], ac_cv_[]_AC_LANG_ABBREV[]_dummy_main,[ac_[]_AC_LANG_ABBREV[]_dm_save_LIBS=$LIBS LIBS="$LIBS $[]_AC_LANG_PREFIX[]LIBS" ac_fortran_dm_var=[]_AC_FC[]_DUMMY_MAIN AC_LANG_PUSH(C)dnl # First, try linking without a dummy main: AC_LINK_IFELSE([AC_LANG_PROGRAM([], [])], [ac_cv_fortran_dummy_main=none], [ac_cv_fortran_dummy_main=unknown]) if test $ac_cv_fortran_dummy_main = unknown; then for ac_func in MAIN__ MAIN_ __main MAIN _MAIN __MAIN main_ main__ _main; do AC_LINK_IFELSE([AC_LANG_PROGRAM([[@%:@define $ac_fortran_dm_var $ac_func]])], [ac_cv_fortran_dummy_main=$ac_func; break]) done fi AC_LANG_POP(C)dnl ac_cv_[]_AC_LANG_ABBREV[]_dummy_main=$ac_cv_fortran_dummy_main rm -f conftest* LIBS=$ac_[]_AC_LANG_ABBREV[]_dm_save_LIBS])[]_AC_FC[]_DUMMY_MAIN=$ac_cv_[]_AC_LANG_ABBREV[]_dummy_mainAS_IF([test "$[]_AC_FC[]_DUMMY_MAIN" != unknown], [m4_default([$1],[if test $[]_AC_FC[]_DUMMY_MAIN != none; then AC_DEFINE_UNQUOTED([]_AC_FC[]_DUMMY_MAIN, $[]_AC_FC[]_DUMMY_MAIN, [Define to dummy `main' function (if any) required to link to the Fortran libraries.]) if test "x$ac_cv_fc_dummy_main" = "x$ac_cv_f77_dummy_main"; then AC_DEFINE([FC_DUMMY_MAIN_EQ_F77], 1, [Define if F77 and FC dummy `main' functions are identical.]) fifi])], [m4_default([$2],
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -