[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
fortran modules
From: |
Michael R Nolta |
Subject: |
fortran modules |
Date: |
Sat, 31 Jan 2004 00:41:46 -0500 |
User-agent: |
Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.0.2) Gecko/20030708 |
Hi,
To get automake/autoconf to work with my simple f90 project, I had to
add a check for whether the module filenames are capitalized or not.
If you're not familiar with fortran, f90 module files are like C header
files; however, they're generated at compile time and not written by the
programmer. Also, the file format is compiler dependent, so you can't
precompute them.
In addition, the actual module filename isn't standard. For example, if
I have "module dummy" in the source, the SGI IRIX and Intel ifc
compilers spit out "DUMMY.mod", while the Portland pgf90 compiler
produces "dummy.mod".
So to work around this, I put this in Makefile.am:
EXTRA_HEADERS = dummy.mod DUMMY.mod
include_HEADERS = @DUMMY_MOD@
and tested for @DUMMY_MOD@ in configure.ac:
AC_PROG_FC_UPPERCASE_MOD
if test "$ac_cv_prog_fc_uppercase_mod" = "yes"; then
DUMMY_MOD=DUMMY.mod
else
DUMMY_MOD=dummy.mod
fi
AC_SUBST(DUMMY_MOD)
where AC_PROG_FC_UPPERCASE_MOD is a macro I wrote to check which
convention the f90 compiler uses [attached].
A couple of questions:
* Is this the best way to do this given the current versions of
autoconf/make? In other words, is their a feature I don't know about
which makes this rigamarole unnecessary?
* Since this is a pretty common idiom, would it make sense to extend
automake to know about Fortran modules? I coudl say instead,
include_MODULES = dummy
and automake could then automagically determine the right filename
depending on which compiler is being used.
Cheers,
-Mike
# _AC_PROG_FC_UPPERCASE_MOD
# -------------------------
# Test if the Fortran compiler produces uppercase module filenames.
#
AC_DEFUN([_AC_PROG_FC_UPPERCASE_MOD],
[_AC_FORTRAN_ASSERT()dnl
AC_CACHE_CHECK([whether $[]_AC_FC[] produces uppercase module filenames],
[ac_cv_prog_[]_AC_LANG_ABBREV[]_uppercase_mod],
[AC_LANG_CONFTEST([AC_LANG_SOURCE([ module conftest
end module])])
ac_try='$[]_AC_FC[] $[]_AC_LANG_PREFIX[]FLAGS -c conftest.$ac_ext
>&AS_MESSAGE_LOG_FD'
if AC_TRY_EVAL(ac_try) &&
test -f CONFTEST.mod ; then
ac_cv_prog_[]_AC_LANG_ABBREV[]_uppercase_mod=yes
rm -f CONFTEST.mod
else
ac_cv_prog_[]_AC_LANG_ABBREV[]_uppercase_mod=no
fi
rm -f conftest*])
#if test $ac_cv_prog_[]_AC_LANG_ABBREV[]_uppercase_mod = 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_UPPERCASE_MOD
# AC_PROG_FC_MOD
# ---------------
AC_DEFUN([AC_PROG_FC_UPPERCASE_MOD],
[AC_REQUIRE([AC_PROG_FC])dnl
AC_LANG_PUSH(Fortran)dnl
_AC_PROG_FC_UPPERCASE_MOD
AC_LANG_POP(Fortran)dnl
])# AC_PROG_FC_UPPERCASE_MOD
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- fortran modules,
Michael R Nolta <=