automake
[Top][All Lists]
Advanced

[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


reply via email to

[Prev in Thread] Current Thread [Next in Thread]