--- trunk/OOPSE-3.0/ac-tools/fortran90.m4 2004/09/24 04:16:43 1490 +++ trunk/OOPSE-3.0/ac-tools/fortran90.m4 2004/10/06 21:22:43 1535 @@ -1047,4 +1047,131 @@ m4_default([$2],[$1])="$ac_val" ])# AC_F95_FUNC +# AC_F90_MODULE_NAMES +# ------------------- +# +# Figure out how the Fortran 90 compiler constructs module file names +# +AC_DEFUN([AC_F90_MODULE_NAMES], +[AC_REQUIRE([AC_PROG_F90])dnl +AC_CACHE_CHECK([for Fortran 90 module file names], + ac_cv_f90_module_names, +[AC_LANG_PUSH(Fortran 90) +# carry out the test in a new directory, so that we don't miss anything +mkdir conftest +cd conftest +AC_COMPILE_IFELSE( +[MODULE Bar +END MODULE Bar], +ac_cv_f90_module_names= +[ac_file_list=* +for ac_file in $ac_file_list; do + case $ac_file in + # don't care for original source and object files + conftest.$ac_ext | conftest.$ac_objext | conftest.err ) + : + ;; + # look for new files derived from the file name + *conftest*) + ac_pat=`echo $ac_file | sed s/conftest/%FILE%/` + _AC_LIST_MEMBER_IF($ac_pat, $ac_cv_f90_module_names,, + ac_cv_f90_module_names="$ac_cv_f90_module_names $ac_pat") + ;; + # look for new files derived from the module name, + # with different case translation schemes + *Bar*) + ac_pat=`echo $ac_file | sed s/Bar/%Module%/` + _AC_LIST_MEMBER_IF($ac_pat, $ac_cv_f90_module_names,, + ac_cv_f90_module_names="$ac_cv_f90_module_names $ac_pat") + ;; + *bar*) + ac_pat=`echo $ac_file | sed s/bar/%module%/` + _AC_LIST_MEMBER_IF($ac_pat, $ac_cv_f90_module_names,, + ac_cv_f90_module_names="$ac_cv_f90_module_names $ac_pat") + ;; + *BAR*) + ac_pat=`echo $ac_file | sed s/BAR/%MODULE%/` + _AC_LIST_MEMBER_IF($ac_pat, $ac_cv_f90_module_names,, + ac_cv_f90_module_names="$ac_cv_f90_module_names $ac_pat") + ;; + # Other files - we have no idea how they are generated + *) + AC_MSG_WARN([Bogus file found: $ac_file]) + ;; + esac +done +if test "x$ac_cv_f90_module_names" = "x"; then + AC_MSG_WARN([Couldn't determine module file names]) +fi +], +[ac_cv_f90_module_names= +AC_MSG_WARN([Couldn't determine module file names])]) +cd .. +# cleanup +rm -rf conftest +AC_LANG_POP()dnl +]) # AC_CACHE_CHECK +# We now generate a shell script that will help us to figure out the correct +# module file names, using the value of ac_cv_f90_module_names + +echo "Generating shell script modnam" + +cat > scripts/modnam << EOF +#! /bin/sh +# This script is auto-generated by configure +# +usage="\\ +Usage: \$[0] [[FILES]] + +[[FILES]] are Fortran 90 source files. +The output is a list of module file names that the Fortran 90 compiler +generates when compiling [[FILES]]." + +list= +empty= + +if test \$[@%:@] -eq 0; then + echo "\$usage"; exit 0 +fi + +while test \$[@%:@] != 0; do + + file=\$[1] + shift + +# strip suffix + base=\`echo \$file | sed 's/[[.]][[^.]]*$//'\` + + test ! -f \$file && continue + +# Look for module definitions and transform them to upper / lower case + mods=\`cat \$file | sed '/^ *[[mM][oO][dD][uU][lL][eE]]/!d;s/^ *[[mM][oO][dD][uU][lL][eE]] *\([[A-Za-z_][A-Za-z0-9_]]*\).*\$/\1/'\` + upper=\`echo \$mods | tr a-z A-Z\` + lower=\`echo \$mods | tr A-Z a-z\` + +# Here, the patterns for generating module file names were inserted by configure + for trans in $ac_cv_f90_module_names; do + + pat=\`echo \$trans | sed 's/.*\(%.*%\).*/\1/'\` + var=empty + case \$pat in + %MODULE%) + var=upper ;; + %Module%) + var=mods ;; + %module%) + var=lower ;; + %FILE%) + test -n "\$mods" && var=base ;; + esac + new=\`eval '(for i in \$'\$var '; do echo \$trans | sed s/\$pat/\$i/; done)'\` + list="\$list \$new" + done +done + +echo \$list +# end of configure-generated script +EOF +chmod 755 scripts/modnam +]) # AC_F90_MODULE_NAMES