⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 fortran.m4

📁 LINUX下的源码工具,可自己分析,或者直接装在系统上作为应用
💻 M4
📖 第 1 页 / 共 2 页
字号:
# Some compilers don't accept -v (Lahey: -verbose, xlf: -V, Fujitsu: -###)AC_DEFUN([_AC_PROG_F77_V],[AC_CACHE_CHECK([how to get verbose linking output from $F77],                [ac_cv_prog_f77_v],[AC_LANG_ASSERT(Fortran 77)AC_COMPILE_IFELSE([AC_LANG_PROGRAM()],[ac_cv_prog_f77_v=# Try some options frequently used verbose outputfor ac_verb in -v -verbose --verbose -V -\#\#\#; do  _AC_PROG_F77_V_OUTPUT($ac_verb)  # look for -l* and *.a constructs in the output  for ac_arg in $ac_f77_v_output; do     case $ac_arg in        [[\\/]]*.a | ?:[[\\/]]*.a | -[[lLRu]]*)          ac_cv_prog_f77_v=$ac_verb          break 2 ;;     esac  donedoneif test -z "$ac_cv_prog_f77_v"; then   AC_MSG_WARN([cannot determine how to obtain linking information from $F77])fi],                  [AC_MSG_WARN([compilation failed])])])])# _AC_PROG_F77_V# AC_F77_LIBRARY_LDFLAGS# ----------------------## Determine the linker flags (e.g. "-L" and "-l") for the Fortran 77# intrinsic and run-time libraries that are required to successfully# link a Fortran 77 program or shared library.  The output variable# FLIBS 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 77, source code into a single# program or shared library.## For example, if object files from a C++ and Fortran 77 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 77 intrinsic and run-time libraries must be# linked in as well, but the C++ compiler/linker doesn't know how to# add these Fortran 77 libraries.  Hence, the macro# "AC_F77_LIBRARY_LDFLAGS" was created to determine these Fortran 77# 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_F77_LIBRARY_LDFLAGS],[AC_LANG_PUSH(Fortran 77)dnl_AC_PROG_F77_VAC_CACHE_CHECK([for Fortran 77 libraries], ac_cv_flibs,[if test "x$FLIBS" != "x"; then  ac_cv_flibs="$FLIBS" # Let the user override the test.else_AC_PROG_F77_V_OUTPUTac_cv_flibs=# Save positional arguments (if any)ac_save_positional="$[@]"set X $ac_f77_v_outputwhile test $[@%:@] != 1; do  shift  ac_arg=$[1]  case $ac_arg in        [[\\/]]*.a | ?:[[\\/]]*.a)          _AC_LIST_MEMBER_IF($ac_arg, $ac_cv_flibs, ,              ac_cv_flibs="$ac_cv_flibs $ac_arg")          ;;        -bI:*)          _AC_LIST_MEMBER_IF($ac_arg, $ac_cv_flibs, ,             [_AC_LINKER_OPTION([$ac_arg], ac_cv_flibs)])          ;;          # Ignore these flags.        -lang* | -lcrt0.o | -lc | -lgcc | -libmil | -LANG:=*)          ;;        -lkernel32)          test x"$CYGWIN" != xyes && ac_cv_flibs="$ac_cv_flibs $ac_arg"          ;;        -[[LRuY]])          # 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_flibs, ,                               [ac_arg="$ac_arg $ac_j"                               ac_cv_flibs="$ac_cv_flibs $ac_j"])          done          ;;        -[[lLR]]*)          _AC_LIST_MEMBER_IF($ac_arg, $ac_cv_flibs, ,                             ac_cv_flibs="$ac_cv_flibs $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_f77_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_flibs)      ;;esacfi # test "x$FLIBS" = "x"])FLIBS="$ac_cv_flibs"AC_SUBST(FLIBS)AC_LANG_POP(Fortran 77)dnl])# AC_F77_LIBRARY_LDFLAGS# AC_F77_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_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 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_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_F77_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_F77_DUMMY_MAIN],[AC_REQUIRE([AC_F77_LIBRARY_LDFLAGS])dnlm4_define([_AC_LANG_PROGRAM_C_F77_HOOKS],[#ifdef F77_DUMMY_MAIN#  ifdef __cplusplus     extern "C"#  endif   int F77_DUMMY_MAIN() { return 1; }#endif])AC_CACHE_CHECK([for dummy main to link with Fortran 77 libraries],               ac_cv_f77_dummy_main,[AC_LANG_PUSH(C)dnl ac_f77_dm_save_LIBS=$LIBS LIBS="$LIBS $FLIBS" # First, try linking without a dummy main: AC_LINK_IFELSE([AC_LANG_PROGRAM([], [])],                [ac_cv_f77_dummy_main=none],                [ac_cv_f77_dummy_main=unknown]) if test $ac_cv_f77_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 F77_DUMMY_MAIN $ac_func]])],                    [ac_cv_f77_dummy_main=$ac_func; break])   done fi rm -f conftest* LIBS=$ac_f77_dm_save_LIBS AC_LANG_POP(C)dnl])F77_DUMMY_MAIN=$ac_cv_f77_dummy_mainAS_IF([test "$F77_DUMMY_MAIN" != unknown],      [m4_default([$1],[if test $F77_DUMMY_MAIN != none; then  AC_DEFINE_UNQUOTED([F77_DUMMY_MAIN], $F77_DUMMY_MAIN,                     [Define to dummy `main' function (if any) required to                      link to the Fortran 77 libraries.])fi])],      [m4_default([$2],            [AC_MSG_FAILURE([linking to Fortran libraries from C fails])])])])# AC_F77_DUMMY_MAIN# AC_F77_MAIN# -----------# Define F77_MAIN to name of alternate main() function for use with# the Fortran libraries.  (Typically, the libraries may define their# own main() to initialize I/O, etcetera, that then call your own# routine called MAIN__ or whatever.)  See AC_F77_DUMMY_MAIN, above.# If no such alternate name is found, just define F77_MAIN to main.#AC_DEFUN([AC_F77_MAIN],[AC_REQUIRE([AC_F77_LIBRARY_LDFLAGS])dnlAC_CACHE_CHECK([for alternate main to link with Fortran 77 libraries],               ac_cv_f77_main,[AC_LANG_PUSH(C)dnl ac_f77_m_save_LIBS=$LIBS LIBS="$LIBS $FLIBS" ac_cv_f77_main="main" # default entry point name for ac_func in MAIN__ MAIN_ __main MAIN _MAIN __MAIN main_ main__ _main; do   AC_LINK_IFELSE([AC_LANG_PROGRAM([@%:@undef F77_DUMMY_MAIN@%:@define main $ac_func])],                  [ac_cv_f77_main=$ac_func; break]) done rm -f conftest* LIBS=$ac_f77_m_save_LIBS AC_LANG_POP(C)dnl])AC_DEFINE_UNQUOTED([F77_MAIN], $ac_cv_f77_main,                   [Define to alternate name for `main' routine that is                    called from a `main' in the Fortran libraries.])])# AC_F77_MAIN# _AC_F77_NAME_MANGLING# ---------------------# Test for the name mangling scheme used by the Fortran 77 compiler.## Sets ac_cv_f77_mangling. The value contains three fields, separated# by commas:## lower case / upper case:#    case translation of the Fortran 77 symbols# underscore / no underscore:#    whether the compiler appends "_" to symbol names# extra underscore / no extra underscore:#    whether the compiler appends an extra "_" to symbol names already#    containing at least one underscore#AC_DEFUN([_AC_F77_NAME_MANGLING],[AC_REQUIRE([AC_F77_LIBRARY_LDFLAGS])dnlAC_REQUIRE([AC_F77_DUMMY_MAIN])dnlAC_CACHE_CHECK([for Fortran 77 name-mangling scheme],               ac_cv_f77_mangling,[AC_LANG_PUSH(Fortran 77)dnlAC_COMPILE_IFELSE([      subroutine foobar()      return      end      subroutine foo_bar()      return      end],[mv conftest.$ac_objext cf77_test.$ac_objext  AC_LANG_PUSH(C)dnl  ac_save_LIBS=$LIBS  LIBS="cf77_test.$ac_objext $LIBS $FLIBS"  ac_success=no  for ac_foobar in foobar FOOBAR; do    for ac_underscore in "" "_"; do      ac_func="$ac_foobar$ac_underscore"      AC_LINK_IFELSE([AC_LANG_CALL([], [$ac_func])],                     [ac_success=yes; break 2])    done  done  if test "$ac_success" = "yes"; then     case $ac_foobar in        foobar)           ac_case=lower           ac_foo_bar=foo_bar           ;;        FOOBAR)           ac_case=upper           ac_foo_bar=FOO_BAR           ;;     esac     ac_success_extra=no     for ac_extra in "" "_"; do        ac_func="$ac_foo_bar$ac_underscore$ac_extra"        AC_LINK_IFELSE([AC_LANG_CALL([], [$ac_func])],                       [ac_success_extra=yes; break])     done     if test "$ac_success_extra" = "yes"; then	ac_cv_f77_mangling="$ac_case case"        if test -z "$ac_underscore"; then           ac_cv_f77_mangling="$ac_cv_f77_mangling, no underscore"	else           ac_cv_f77_mangling="$ac_cv_f77_mangling, underscore"        fi        if test -z "$ac_extra"; then           ac_cv_f77_mangling="$ac_cv_f77_mangling, no extra underscore"	else           ac_cv_f77_mangling="$ac_cv_f77_mangling, extra underscore"        fi      else	ac_cv_f77_mangling="unknown"      fi  else     ac_cv_f77_mangling="unknown"  fi  LIBS=$ac_save_LIBS  AC_LANG_POP(C)dnl  rm -f cf77_test* conftest*],  [AC_MSG_FAILURE([cannot compile a simple Fortran program])])AC_LANG_POP(Fortran 77)dnl])])# _AC_F77_NAME_MANGLING# The replacement is empty.AU_DEFUN([AC_F77_NAME_MANGLING], [])# AC_F77_WRAPPERS# ---------------# Defines C macros F77_FUNC(name,NAME) and F77_FUNC_(name,NAME) to# properly mangle the names of C identifiers, and C identifiers with# underscores, respectively, so that they match the name mangling# scheme used by the Fortran 77 compiler.AC_DEFUN([AC_F77_WRAPPERS],[AC_REQUIRE([_AC_F77_NAME_MANGLING])dnlAH_TEMPLATE([F77_FUNC],    [Define to a macro mangling the given C identifier (in lower and upper     case), which must not contain underscores, for linking with Fortran.])dnlAH_TEMPLATE([F77_FUNC_],    [As F77_FUNC, but for C identifiers containing underscores.])dnlcase $ac_cv_f77_mangling in  "lower case, no underscore, no extra underscore")          AC_DEFINE([F77_FUNC(name,NAME)],  [name])          AC_DEFINE([F77_FUNC_(name,NAME)], [name]) ;;  "lower case, no underscore, extra underscore")          AC_DEFINE([F77_FUNC(name,NAME)],  [name])          AC_DEFINE([F77_FUNC_(name,NAME)], [name ## _]) ;;  "lower case, underscore, no extra underscore")          AC_DEFINE([F77_FUNC(name,NAME)],  [name ## _])          AC_DEFINE([F77_FUNC_(name,NAME)], [name ## _]) ;;  "lower case, underscore, extra underscore")          AC_DEFINE([F77_FUNC(name,NAME)],  [name ## _])          AC_DEFINE([F77_FUNC_(name,NAME)], [name ## __]) ;;  "upper case, no underscore, no extra underscore")          AC_DEFINE([F77_FUNC(name,NAME)],  [NAME])          AC_DEFINE([F77_FUNC_(name,NAME)], [NAME]) ;;  "upper case, no underscore, extra underscore")          AC_DEFINE([F77_FUNC(name,NAME)],  [NAME])          AC_DEFINE([F77_FUNC_(name,NAME)], [NAME ## _]) ;;  "upper case, underscore, no extra underscore")          AC_DEFINE([F77_FUNC(name,NAME)],  [NAME ## _])          AC_DEFINE([F77_FUNC_(name,NAME)], [NAME ## _]) ;;  "upper case, underscore, extra underscore")          AC_DEFINE([F77_FUNC(name,NAME)],  [NAME ## _])          AC_DEFINE([F77_FUNC_(name,NAME)], [NAME ## __]) ;;  *)          AC_MSG_WARN([unknown Fortran 77 name-mangling scheme])          ;;esac])# AC_F77_WRAPPERS# AC_F77_FUNC(NAME, [SHELLVAR = NAME])# ------------------------------------# For a Fortran subroutine of given NAME, define a shell variable# $SHELLVAR to the Fortran-77 mangled name.  If the SHELLVAR# argument is not supplied, it defaults to NAME.AC_DEFUN([AC_F77_FUNC],[AC_REQUIRE([_AC_F77_NAME_MANGLING])dnlcase $ac_cv_f77_mangling in  upper*) ac_val="m4_toupper([$1])" ;;  lower*) ac_val="m4_tolower([$1])" ;;  *)      ac_val="unknown" ;;esaccase $ac_cv_f77_mangling in *," underscore"*) ac_val="$ac_val"_ ;; esacm4_if(m4_index([$1],[_]),-1,[],[case $ac_cv_f77_mangling in *," extra underscore"*) ac_val="$ac_val"_ ;; esac])m4_default([$2],[$1])="$ac_val"])# AC_F77_FUNC

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -