Blame src/openpa/confdb/aclocal_f77.m4

Packit Service c5cf8c
dnl PAC_F77_SEARCH_LIST - expands to a whitespace separated list of fortran 77
Packit Service c5cf8c
dnl compilers for use with AC_PROG_F77 that is more suitable for HPC software
Packit Service c5cf8c
dnl packages
Packit Service c5cf8c
AC_DEFUN([PAC_F77_SEARCH_LIST],[ifort pgf77 af77 xlf frt cf77 fort77 fl32 fort ifc efc ftn gfortran f77 g77])
Packit Service c5cf8c
dnl PAC_PROG_F77 - reprioritize the F77 compiler search order
Packit Service c5cf8c
dnl NOTE: this macro suffers from a basically intractable "expanded before it
Packit Service c5cf8c
dnl was required" problem when libtool is also used
Packit Service c5cf8c
AC_DEFUN([PAC_PROG_F77],[
Packit Service c5cf8c
PAC_PUSH_FLAG([FFLAGS])
Packit Service c5cf8c
AC_PROG_F77([PAC_F77_SEARCH_LIST])
Packit Service c5cf8c
PAC_POP_FLAG([FFLAGS])
Packit Service c5cf8c
])
Packit Service c5cf8c
dnl
Packit Service c5cf8c
dnl/*D
Packit Service c5cf8c
dnl PAC_PROG_F77_NAME_MANGLE - Determine how the Fortran compiler mangles
Packit Service c5cf8c
dnl names 
Packit Service c5cf8c
dnl
Packit Service c5cf8c
dnl Synopsis:
Packit Service c5cf8c
dnl PAC_PROG_F77_NAME_MANGLE([action])
Packit Service c5cf8c
dnl
Packit Service c5cf8c
dnl Output Effect:
Packit Service c5cf8c
dnl If no action is specified, one of the following names is defined:
Packit Service c5cf8c
dnl.vb
Packit Service c5cf8c
dnl If fortran names are mapped:
Packit Service c5cf8c
dnl   lower -> lower                  F77_NAME_LOWER
Packit Service c5cf8c
dnl   lower -> lower_                 F77_NAME_LOWER_USCORE
Packit Service c5cf8c
dnl   lower -> UPPER                  F77_NAME_UPPER
Packit Service c5cf8c
dnl   lower_lower -> lower__          F77_NAME_LOWER_2USCORE
Packit Service c5cf8c
dnl   mixed -> mixed                  F77_NAME_MIXED
Packit Service c5cf8c
dnl   mixed -> mixed_                 F77_NAME_MIXED_USCORE
Packit Service c5cf8c
dnl   mixed -> UPPER@STACK_SIZE       F77_NAME_UPPER_STDCALL
Packit Service c5cf8c
dnl.ve
Packit Service c5cf8c
dnl If an action is specified, it is executed instead.
Packit Service c5cf8c
dnl 
Packit Service c5cf8c
dnl Notes:
Packit Service c5cf8c
dnl We assume that if lower -> lower (any underscore), upper -> upper with the
Packit Service c5cf8c
dnl same underscore behavior.  Previous versions did this by 
Packit Service c5cf8c
dnl compiling a Fortran program and running strings -a over it.  Depending on 
Packit Service c5cf8c
dnl strings is a bad idea, so instead we try compiling and linking with a 
Packit Service c5cf8c
dnl C program, since that is why we are doing this anyway.  A similar approach
Packit Service c5cf8c
dnl is used by FFTW, though without some of the cases we check (specifically, 
Packit Service c5cf8c
dnl mixed name mangling).  STD_CALL not only specifies a particular name
Packit Service c5cf8c
dnl mangling convention (adding the size of the calling stack into the function
Packit Service c5cf8c
dnl name, but also the stack management convention (callee cleans the stack,
Packit Service c5cf8c
dnl and arguments are pushed onto the stack from right to left)
Packit Service c5cf8c
dnl
Packit Service c5cf8c
dnl One additional problem is that some Fortran implementations include 
Packit Service c5cf8c
dnl references to the runtime (like pgf90_compiled for the pgf90 compiler
Packit Service c5cf8c
dnl used as the "Fortran 77" compiler).  This is not yet solved.
Packit Service c5cf8c
dnl
Packit Service c5cf8c
dnl D*/
Packit Service c5cf8c
dnl
Packit Service c5cf8c
AC_DEFUN([PAC_PROG_F77_NAME_MANGLE],[
Packit Service c5cf8c
AC_REQUIRE([AC_F77_LIBRARY_LDFLAGS])
Packit Service c5cf8c
AC_CACHE_CHECK([for Fortran 77 name mangling],
Packit Service c5cf8c
pac_cv_prog_f77_name_mangle,[
Packit Service c5cf8c
# Initialize pac_found to indicate if name mangling scheme has been found
Packit Service c5cf8c
pac_found=no
Packit Service c5cf8c
AC_LANG_PUSH([Fortran 77])
Packit Service c5cf8c
AC_COMPILE_IFELSE([
Packit Service c5cf8c
    AC_LANG_SOURCE([
Packit Service c5cf8c
        subroutine MY_name( ii )
Packit Service c5cf8c
        return
Packit Service c5cf8c
        end
Packit Service c5cf8c
    ])
Packit Service c5cf8c
],[
Packit Service c5cf8c
    PAC_RUNLOG([mv conftest.$OBJEXT f77conftest.$OBJEXT])
Packit Service c5cf8c
    saved_LIBS="$LIBS"
Packit Service c5cf8c
    dnl  FLIBS is set by AC_F77_LIBRARY_LDFLAGS
Packit Service c5cf8c
    LIBS="f77conftest.$OBJEXT $FLIBS $LIBS"
Packit Service c5cf8c
    AC_LANG_PUSH([C])
Packit Service c5cf8c
    for call in "" __stdcall ; do
Packit Service c5cf8c
        for sym in my_name_ my_name__ my_name MY_NAME MY_name MY_name_ NONE ; do
Packit Service c5cf8c
            AC_LINK_IFELSE([
Packit Service c5cf8c
                AC_LANG_PROGRAM([extern void ${call} ${sym}(int);],[${sym}(0);])
Packit Service c5cf8c
            ],[
Packit Service c5cf8c
                pac_found=yes
Packit Service c5cf8c
                break
Packit Service c5cf8c
            ])
Packit Service c5cf8c
        done
Packit Service c5cf8c
        test "$pac_found" = "yes" && break
Packit Service c5cf8c
    done
Packit Service c5cf8c
    AC_LANG_POP([C])
Packit Service c5cf8c
    LIBS="$saved_LIBS"
Packit Service c5cf8c
    rm -f f77conftest.$OBJEXT
Packit Service c5cf8c
])
Packit Service c5cf8c
AC_LANG_POP([Fortran 77])
Packit Service c5cf8c
dnl
Packit Service c5cf8c
# If we got to here and pac_cv_prog_f77_name_mangle is still NOT definable,
Packit Service c5cf8c
# it may be that the programs have to be linked with the Fortran compiler,
Packit Service c5cf8c
# not the C compiler.  Try reversing the language used for the test
Packit Service c5cf8c
if test  "$pac_found" != "yes" ; then
Packit Service c5cf8c
    AC_LANG_PUSH([C])
Packit Service c5cf8c
    for call in "" __stdcall ; do
Packit Service c5cf8c
        for sym in my_name_ my_name__ my_name MY_NAME MY_name MY_name_ NONE ; do
Packit Service c5cf8c
            AC_COMPILE_IFELSE([
Packit Service c5cf8c
                AC_LANG_SOURCE([void ${call} ${sym}(int a) {}])
Packit Service c5cf8c
            ],[
Packit Service c5cf8c
                PAC_RUNLOG([mv conftest.$OBJEXT cconftest.$OBJEXT])
Packit Service c5cf8c
                saved_LIBS="$LIBS"
Packit Service c5cf8c
                LIBS="cconftest.$OBJEXT $LIBS"
Packit Service c5cf8c
                AC_LANG_PUSH([Fortran 77])
Packit Service c5cf8c
                AC_LINK_IFELSE([
Packit Service c5cf8c
                    AC_LANG_PROGRAM([],[      call my_name(0)])
Packit Service c5cf8c
                ],[
Packit Service c5cf8c
                    pac_found=yes
Packit Service c5cf8c
                ]) 
Packit Service c5cf8c
                AC_LANG_POP([Fortran 77])
Packit Service c5cf8c
                LIBS="$saved_LIBS"
Packit Service c5cf8c
                rm -f cconftest.$OBJEXT
Packit Service c5cf8c
                test "$pac_found" = "yes" && break
Packit Service c5cf8c
            ])
Packit Service c5cf8c
        done
Packit Service c5cf8c
        test "$pac_found" = "yes" && break
Packit Service c5cf8c
    done
Packit Service c5cf8c
    AC_LANG_POP([C])
Packit Service c5cf8c
fi
Packit Service c5cf8c
if test "$pac_found" = "yes" ; then
Packit Service c5cf8c
    case ${sym} in
Packit Service c5cf8c
        my_name_)
Packit Service c5cf8c
            pac_cv_prog_f77_name_mangle="lower uscore" ;;
Packit Service c5cf8c
        my_name__)
Packit Service c5cf8c
            pac_cv_prog_f77_name_mangle="lower 2uscore" ;;
Packit Service c5cf8c
        my_name)
Packit Service c5cf8c
            pac_cv_prog_f77_name_mangle="lower" ;;
Packit Service c5cf8c
        MY_NAME)
Packit Service c5cf8c
            pac_cv_prog_f77_name_mangle="upper" ;;
Packit Service c5cf8c
        MY_name)
Packit Service c5cf8c
            pac_cv_prog_f77_name_mangle="mixed" ;;
Packit Service c5cf8c
        MY_name_)
Packit Service c5cf8c
            pac_cv_prog_f77_name_mangle="mixed uscore" ;;
Packit Service c5cf8c
        *)
Packit Service c5cf8c
            pac_cv_prog_f77_name_mangle=""
Packit Service c5cf8c
            pac_found=no;
Packit Service c5cf8c
            ;;
Packit Service c5cf8c
    esac
Packit Service c5cf8c
    if test "X$pac_cv_prog_f77_name_mangle" != "X" ; then
Packit Service c5cf8c
        if test "$call" = "__stdcall" ; then
Packit Service c5cf8c
            pac_cv_prog_f77_name_mangle="$pac_cv_prog_f77_name_mangle stdcall"
Packit Service c5cf8c
        fi
Packit Service c5cf8c
    fi
Packit Service c5cf8c
fi
Packit Service c5cf8c
])
Packit Service c5cf8c
dnl Endof ac_cache_check
Packit Service c5cf8c
case $pac_cv_prog_f77_name_mangle in
Packit Service c5cf8c
    *stdcall)
Packit Service c5cf8c
        F77_STDCALL="__stdcall" ;;
Packit Service c5cf8c
    *)
Packit Service c5cf8c
        F77_STDCALL="" ;;
Packit Service c5cf8c
esac
Packit Service c5cf8c
# Get the standard call definition
Packit Service c5cf8c
# FIXME: This should use F77_STDCALL, not STDCALL (non-conforming name)
Packit Service c5cf8c
F77_STDCALL="$call"
Packit Service c5cf8c
AC_DEFINE_UNQUOTED(STDCALL,[$F77_STDCALL],[Define calling convention])
Packit Service c5cf8c
Packit Service c5cf8c
# new_name="`echo $name | tr ' ' '_' | tr [a-z] [A-Z]`"
Packit Service c5cf8c
# We could have done the character conversion with 'tr'
Packit Service c5cf8c
# which may not be portable, e.g. solaris's /usr/ucb/bin/tr.
Packit Service c5cf8c
# So use a conservative approach.
Packit Service c5cf8c
Packit Service c5cf8c
# Replace blank with underscore
Packit Service c5cf8c
name_scheme="`echo $pac_cv_prog_f77_name_mangle | sed 's% %_%g'`"
Packit Service c5cf8c
# Turn lowercase into uppercase.
Packit Service c5cf8c
name_scheme="`echo $name_scheme | sed -e 'y%abcdefghijklmnopqrstuvwxyz%ABCDEFGHIJKLMNOPQRSTUVWXYZ%'`"
Packit Service c5cf8c
F77_NAME_MANGLE="F77_NAME_${name_scheme}"
Packit Service c5cf8c
AC_DEFINE_UNQUOTED([$F77_NAME_MANGLE]) 
Packit Service c5cf8c
AC_SUBST(F77_NAME_MANGLE)
Packit Service c5cf8c
if test "X$pac_cv_prog_f77_name_mangle" = "X" ; then
Packit Service c5cf8c
    AC_MSG_WARN([Unknown Fortran naming scheme])
Packit Service c5cf8c
fi
Packit Service c5cf8c
dnl
Packit Service c5cf8c
dnl Define the macros that is needed by AC_DEFINE_UNQUOTED([$F77_NAME_MANGLE])
Packit Service c5cf8c
AH_TEMPLATE([F77_NAME_LOWER],
Packit Service c5cf8c
    [Fortran names are lowercase with no trailing underscore])
Packit Service c5cf8c
AH_TEMPLATE([F77_NAME_LOWER_USCORE],
Packit Service c5cf8c
    [Fortran names are lowercase with one trailing underscore])
Packit Service c5cf8c
AH_TEMPLATE([F77_NAME_LOWER_2USCORE],
Packit Service c5cf8c
    [Fortran names are lowercase with two trailing underscores])
Packit Service c5cf8c
AH_TEMPLATE([F77_NAME_MIXED],
Packit Service c5cf8c
    [Fortran names preserve the original case])
Packit Service c5cf8c
AH_TEMPLATE([F77_NAME_MIXED_USCORE],
Packit Service c5cf8c
    [Fortran names preserve the original case with one trailing underscore])
Packit Service c5cf8c
AH_TEMPLATE([F77_NAME_UPPER],
Packit Service c5cf8c
    [Fortran names are uppercase])
Packit Service c5cf8c
AH_TEMPLATE([F77_NAME_LOWER_STDCALL],
Packit Service c5cf8c
    [Fortran names are lowercase with no trailing underscore in stdcall])
Packit Service c5cf8c
AH_TEMPLATE([F77_NAME_LOWER_USCORE_STDCALL],
Packit Service c5cf8c
    [Fortran names are lowercase with one trailing underscore in stdcall])
Packit Service c5cf8c
AH_TEMPLATE([F77_NAME_LOWER_2USCORE_STDCALL],
Packit Service c5cf8c
    [Fortran names are lowercase with two trailing underscores in stdcall])
Packit Service c5cf8c
AH_TEMPLATE([F77_NAME_MIXED_STDCALL],
Packit Service c5cf8c
    [Fortran names preserve the original case in stdcall])
Packit Service c5cf8c
AH_TEMPLATE([F77_NAME_MIXED_USCORE_STDCALL],
Packit Service c5cf8c
    [Fortran names preserve the original case with one trailing underscore in stdcall])
Packit Service c5cf8c
AH_TEMPLATE([F77_NAME_UPPER_STDCALL],
Packit Service c5cf8c
    [Fortran names are uppercase in stdcall])
Packit Service c5cf8c
])
Packit Service c5cf8c
dnl
Packit Service c5cf8c
dnl/*D
Packit Service c5cf8c
dnl PAC_PROG_F77_CHECK_SIZEOF - Determine the size in bytes of a Fortran
Packit Service c5cf8c
dnl type
Packit Service c5cf8c
dnl
Packit Service c5cf8c
dnl Synopsis:
Packit Service c5cf8c
dnl PAC_PROG_F77_CHECK_SIZEOF(type,[cross-size])
Packit Service c5cf8c
dnl
Packit Service c5cf8c
dnl Output Effect:
Packit Service c5cf8c
dnl Sets SIZEOF_F77_uctype to the size if bytes of type.
Packit Service c5cf8c
dnl If type is unknown, the size is set to 0.
Packit Service c5cf8c
dnl If cross-compiling, the value cross-size is used (it may be a variable)
Packit Service c5cf8c
dnl For example 'PAC_PROG_F77_CHECK_SIZEOF(real)' defines
Packit Service c5cf8c
dnl 'SIZEOF_F77_REAL' to 4 on most systems.  The variable 
Packit Service c5cf8c
dnl 'pac_cv_sizeof_f77_<type>' (e.g., 'pac_cv_sizeof_f77_real') is also set to
Packit Service c5cf8c
dnl the size of the type. 
Packit Service c5cf8c
dnl If the corresponding variable is already set, that value is used.
Packit Service c5cf8c
dnl If the name has an '*' in it (e.g., 'integer*4'), the defined name 
Packit Service c5cf8c
dnl replaces that with an underscore (e.g., 'SIZEOF_F77_INTEGER_4').
Packit Service c5cf8c
dnl
Packit Service c5cf8c
dnl Notes:
Packit Service c5cf8c
dnl If the 'cross-size' argument is not given, 'autoconf' will issue an error
Packit Service c5cf8c
dnl message.  You can use '0' to specify undetermined.
Packit Service c5cf8c
dnl
Packit Service c5cf8c
dnl D*/
Packit Service c5cf8c
AC_DEFUN([PAC_PROG_F77_CHECK_SIZEOF],[
Packit Service c5cf8c
AC_REQUIRE([AC_HEADER_STDC])
Packit Service c5cf8c
AC_REQUIRE([AC_F77_LIBRARY_LDFLAGS])
Packit Service c5cf8c
changequote(<<, >>)dnl
Packit Service c5cf8c
dnl The name to #define.
Packit Service c5cf8c
dnl dnl If the arg value contains a variable, we need to update that
Packit Service c5cf8c
define(<<PAC_TYPE_NAME>>, translit(sizeof_f77_$1, [a-z *], [A-Z__]))dnl
Packit Service c5cf8c
dnl The cache variable name.
Packit Service c5cf8c
define(<<PAC_CV_NAME>>, translit(pac_cv_f77_sizeof_$1, [ *], [__]))dnl
Packit Service c5cf8c
changequote([, ])dnl
Packit Service c5cf8c
AC_CACHE_CHECK([for size of Fortran type $1],PAC_CV_NAME,[
Packit Service c5cf8c
AC_REQUIRE([PAC_PROG_F77_NAME_MANGLE])
Packit Service c5cf8c
AC_LANG_PUSH([Fortran 77])
Packit Service c5cf8c
AC_COMPILE_IFELSE([
Packit Service c5cf8c
    AC_LANG_SOURCE([
Packit Service c5cf8c
        subroutine isize()
Packit Service c5cf8c
        $1 i(2)
Packit Service c5cf8c
        call cisize( i(1), i(2) )
Packit Service c5cf8c
        end
Packit Service c5cf8c
    ])
Packit Service c5cf8c
],[
Packit Service c5cf8c
    # pac_f77compile_ok=yes
Packit Service c5cf8c
    PAC_RUNLOG([mv conftest.$OBJEXT pac_f77conftest.$OBJEXT])
Packit Service c5cf8c
    # Save original LIBS, prepend previously generated object file to LIBS
Packit Service c5cf8c
    saved_LIBS="$LIBS"
Packit Service c5cf8c
    LIBS="pac_f77conftest.$OBJEXT $FLIBS $LIBS"
Packit Service c5cf8c
    AC_LANG_PUSH([C])
Packit Service c5cf8c
    AC_RUN_IFELSE([
Packit Service c5cf8c
        AC_LANG_PROGRAM([
Packit Service c5cf8c
#if defined(HAVE_STDIO_H) || defined(STDC_HEADERS)
Packit Service c5cf8c
#include <stdio.h>
Packit Service c5cf8c
#endif
Packit Service c5cf8c
#ifdef F77_NAME_UPPER
Packit Service c5cf8c
#define cisize_ CISIZE
Packit Service c5cf8c
#define isize_ ISIZE
Packit Service c5cf8c
#elif defined(F77_NAME_LOWER) || defined(F77_NAME_MIXED)
Packit Service c5cf8c
#define cisize_ cisize
Packit Service c5cf8c
#define isize_ isize
Packit Service c5cf8c
#endif
Packit Service c5cf8c
static int isize_val=0;
Packit Service c5cf8c
void cisize_(char *,char*);
Packit Service c5cf8c
void isize_(void);
Packit Service c5cf8c
void cisize_(char *i1p, char *i2p)
Packit Service c5cf8c
{ 
Packit Service c5cf8c
   isize_val = (int)(i2p - i1p);
Packit Service c5cf8c
}
Packit Service c5cf8c
        ],[
Packit Service c5cf8c
    FILE *f = fopen("conftestval", "w");
Packit Service c5cf8c
    if (!f) return 1;
Packit Service c5cf8c
    isize_();
Packit Service c5cf8c
    fprintf(f,"%d\n", isize_val);
Packit Service c5cf8c
        ])
Packit Service c5cf8c
        dnl Endof ac_lang_program
Packit Service c5cf8c
    ],[
Packit Service c5cf8c
        eval PAC_CV_NAME=`cat conftestval`
Packit Service c5cf8c
    ],[
Packit Service c5cf8c
        eval PAC_CV_NAME=0
Packit Service c5cf8c
    ],[
Packit Service c5cf8c
        # Use -9999 as value to emit a warning message after the cache_check.
Packit Service c5cf8c
        ifelse([$2],[],[eval PAC_CV_NAME=-9999],[eval PAC_CV_NAME=$2])
Packit Service c5cf8c
    ])
Packit Service c5cf8c
    dnl Endof ac_run_ifelse
Packit Service c5cf8c
    AC_LANG_POP([C])
Packit Service c5cf8c
    LIBS="$saved_LIBS"
Packit Service c5cf8c
    # remove previously generated object file.
Packit Service c5cf8c
    rm -f pac_f77conftest.$OBJEXT
Packit Service c5cf8c
],[
Packit Service c5cf8c
    # pac_f77compile_ok=no
Packit Service c5cf8c
    ifelse([$2],,eval PAC_CV_NAME=0,eval PAC_CV_NAME=$2)
Packit Service c5cf8c
])  Endof ac_compile_ifelse
Packit Service c5cf8c
AC_LANG_POP([Fortran 77])
Packit Service c5cf8c
])
Packit Service c5cf8c
dnl Endof ac_cache_check
Packit Service c5cf8c
if test "$PAC_CV_NAME" = "-9999" ; then
Packit Service c5cf8c
     AC_MSG_WARN([No value provided for size of $1 when cross-compiling])
Packit Service c5cf8c
fi
Packit Service c5cf8c
AC_DEFINE_UNQUOTED(PAC_TYPE_NAME,$PAC_CV_NAME,[Define size of PAC_TYPE_NAME])
Packit Service c5cf8c
undefine([PAC_TYPE_NAME])
Packit Service c5cf8c
undefine([PAC_CV_NAME])
Packit Service c5cf8c
])
Packit Service c5cf8c
dnl
Packit Service c5cf8c
dnl This version uses a Fortran program to link programs.
Packit Service c5cf8c
dnl This is necessary because some compilers provide shared libraries
Packit Service c5cf8c
dnl that are not within the default linker paths (e.g., our installation
Packit Service c5cf8c
dnl of the Portland Group compilers)
Packit Service c5cf8c
dnl
Packit Service c5cf8c
AC_DEFUN([PAC_PROG_F77_CHECK_SIZEOF_EXT],[
Packit Service c5cf8c
changequote(<<,>>)dnl
Packit Service c5cf8c
dnl The name to #define.
Packit Service c5cf8c
dnl If the arg value contains a variable, we need to update that
Packit Service c5cf8c
define(<<PAC_TYPE_NAME>>, translit(sizeof_f77_$1, [a-z *], [A-Z__]))dnl
Packit Service c5cf8c
dnl The cache variable name.
Packit Service c5cf8c
define(<<PAC_CV_NAME>>, translit(pac_cv_f77_sizeof_$1, [ *], [__]))dnl
Packit Service c5cf8c
changequote([,])dnl
Packit Service c5cf8c
AC_CACHE_CHECK([for size of Fortran type $1],PAC_CV_NAME,[
Packit Service c5cf8c
AC_REQUIRE([AC_HEADER_STDC])
Packit Service c5cf8c
AC_REQUIRE([PAC_PROG_F77_NAME_MANGLE])
Packit Service c5cf8c
dnl if test "$cross_compiling" = yes ; then
Packit Service c5cf8c
dnl     ifelse([$2],[],
Packit Service c5cf8c
dnl         [AC_MSG_WARN([No value provided for size of $1 when cross-compiling])],
Packit Service c5cf8c
dnl         [eval PAC_CV_NAME=$2])
Packit Service c5cf8c
dnl fi
Packit Service c5cf8c
AC_LANG_PUSH([C])
Packit Service c5cf8c
AC_COMPILE_IFELSE([
Packit Service c5cf8c
    AC_LANG_SOURCE([
Packit Service c5cf8c
#if defined(HAVE_STDIO_H) || defined(STDC_HEADERS)
Packit Service c5cf8c
#include <stdio.h>
Packit Service c5cf8c
#endif
Packit Service c5cf8c
#ifdef F77_NAME_UPPER
Packit Service c5cf8c
#define cisize_ CISIZE
Packit Service c5cf8c
#define isize_ ISIZE
Packit Service c5cf8c
#elif defined(F77_NAME_LOWER) || defined(F77_NAME_MIXED)
Packit Service c5cf8c
#define cisize_ cisize
Packit Service c5cf8c
#define isize_ isize
Packit Service c5cf8c
#endif
Packit Service c5cf8c
int cisize_(char *,char*);
Packit Service c5cf8c
int cisize_(char *i1p, char *i2p) {
Packit Service c5cf8c
    int isize_val=0;
Packit Service c5cf8c
    FILE *f = fopen("conftestval", "w");
Packit Service c5cf8c
    if (!f) return 1;
Packit Service c5cf8c
    isize_val = (int)(i2p - i1p);
Packit Service c5cf8c
    fprintf(f,"%d\n", isize_val);
Packit Service c5cf8c
    fclose(f);
Packit Service c5cf8c
    return 0;
Packit Service c5cf8c
}
Packit Service c5cf8c
    ])
Packit Service c5cf8c
    dnl Endof ac_lang_source
Packit Service c5cf8c
],[
Packit Service c5cf8c
    # pac_compile_ok=yes
Packit Service c5cf8c
    PAC_RUNLOG([mv conftest.$OBJEXT pac_conftest.$OBJEXT])
Packit Service c5cf8c
    # Save LIBS and prepend object file to LIBS
Packit Service c5cf8c
    saved_LIBS="$LIBS"
Packit Service c5cf8c
    LIBS="pac_conftest.$OBJEXT $LIBS"
Packit Service c5cf8c
    AC_LANG_PUSH([Fortran 77])
Packit Service c5cf8c
    AC_RUN_IFELSE([
Packit Service c5cf8c
        AC_LANG_SOURCE([
Packit Service c5cf8c
            program main
Packit Service c5cf8c
            $1 a(2)
Packit Service c5cf8c
            integer irc, cisize
Packit Service c5cf8c
            irc = cisize(a(1),a(2))
Packit Service c5cf8c
            end
Packit Service c5cf8c
        ])
Packit Service c5cf8c
    ],[
Packit Service c5cf8c
        eval PAC_CV_NAME=`cat conftestval`
Packit Service c5cf8c
    ],[
Packit Service c5cf8c
        eval PAC_CV_NAME=0
Packit Service c5cf8c
    ],[
Packit Service c5cf8c
        # Use -9999 as value to emit a warning message after the cache_check.
Packit Service c5cf8c
        ifelse([$2],[],[eval PAC_CV_NAME=-9999],[eval PAC_CV_NAME=$2])
Packit Service c5cf8c
    ])
Packit Service c5cf8c
    AC_LANG_POP([Fortran 77])
Packit Service c5cf8c
    LIBS="$saved_LIBS"
Packit Service c5cf8c
    # remove previously generated object file.
Packit Service c5cf8c
    rm -f pac_conftest.$OBJEXT
Packit Service c5cf8c
],[
Packit Service c5cf8c
    AC_MSG_WARN([Unable to compile the C routine for finding the size of a $1])
Packit Service c5cf8c
])
Packit Service c5cf8c
AC_LANG_POP([C])
Packit Service c5cf8c
])
Packit Service c5cf8c
dnl Endof ac_cache_check
Packit Service c5cf8c
if test "$PAC_CV_NAME" = "-9999" ; then
Packit Service c5cf8c
     AC_MSG_WARN([No value provided for size of $1 when cross-compiling])
Packit Service c5cf8c
fi
Packit Service c5cf8c
AC_DEFINE_UNQUOTED(PAC_TYPE_NAME,$PAC_CV_NAME,[Define size of PAC_TYPE_NAME])
Packit Service c5cf8c
undefine([PAC_TYPE_NAME])
Packit Service c5cf8c
undefine([PAC_CV_NAME])
Packit Service c5cf8c
])
Packit Service c5cf8c
dnl
Packit Service c5cf8c
dnl/*D
Packit Service c5cf8c
dnl PAC_PROG_F77_EXCLAIM_COMMENTS
Packit Service c5cf8c
dnl
Packit Service c5cf8c
dnl Synopsis:
Packit Service c5cf8c
dnl PAC_PROG_F77_EXCLAIM_COMMENTS([action-if-true],[action-if-false])
Packit Service c5cf8c
dnl
Packit Service c5cf8c
dnl Notes:
Packit Service c5cf8c
dnl Check whether '!' may be used to begin comments in Fortran.
Packit Service c5cf8c
dnl
Packit Service c5cf8c
dnl This macro requires a version of autoconf `after` 2.13; the 'acgeneral.m4'
Packit Service c5cf8c
dnl file contains an error in the handling of Fortran programs in 
Packit Service c5cf8c
dnl 'AC_TRY_COMPILE' (fixed in our local version).
Packit Service c5cf8c
dnl
Packit Service c5cf8c
dnl D*/
Packit Service c5cf8c
AC_DEFUN([PAC_PROG_F77_EXCLAIM_COMMENTS],[
Packit Service c5cf8c
AC_CACHE_CHECK([whether Fortran 77 accepts ! for comments],
Packit Service c5cf8c
pac_cv_prog_f77_exclaim_comments,[
Packit Service c5cf8c
AC_LANG_PUSH([Fortran 77])
Packit Service c5cf8c
AC_COMPILE_IFELSE([
Packit Service c5cf8c
     AC_LANG_PROGRAM([],[!        This is a comment])
Packit Service c5cf8c
],[
Packit Service c5cf8c
    pac_cv_prog_f77_exclaim_comments="yes"
Packit Service c5cf8c
],[
Packit Service c5cf8c
    pac_cv_prog_f77_exclaim_comments="no"
Packit Service c5cf8c
])
Packit Service c5cf8c
AC_LANG_POP([Fortran 77])
Packit Service c5cf8c
])
Packit Service c5cf8c
if test "$pac_cv_prog_f77_exclaim_comments" = "yes" ; then
Packit Service c5cf8c
    ifelse([$1],[],[:],[$1])
Packit Service c5cf8c
else
Packit Service c5cf8c
    ifelse([$2],[],[:],[$2])
Packit Service c5cf8c
fi
Packit Service c5cf8c
])dnl
Packit Service c5cf8c
dnl
Packit Service c5cf8c
dnl/*D
Packit Service c5cf8c
dnl PAC_F77_CHECK_COMPILER_OPTION - Check that a F77 compiler option is
Packit Service c5cf8c
dnl accepted without warning messages
Packit Service c5cf8c
dnl
Packit Service c5cf8c
dnl Synopsis:
Packit Service c5cf8c
dnl PAC_F77_CHECK_COMPILER_OPTION(optionname,action-if-ok,action-if-fail)
Packit Service c5cf8c
dnl
Packit Service c5cf8c
dnl Output Effects:
Packit Service c5cf8c
dnl
Packit Service c5cf8c
dnl If no actions are specified, a working value is added to 'FOPTIONS'
Packit Service c5cf8c
dnl
Packit Service c5cf8c
dnl Notes:
Packit Service c5cf8c
dnl This is now careful to check that the output is different, since 
Packit Service c5cf8c
dnl some compilers are noisy.
Packit Service c5cf8c
dnl 
Packit Service c5cf8c
dnl We are extra careful to prototype the functions in case compiler options
Packit Service c5cf8c
dnl that complain about poor code are in effect.
Packit Service c5cf8c
dnl
Packit Service c5cf8c
dnl Because this is a long script, we have ensured that you can pass a 
Packit Service c5cf8c
dnl variable containing the option name as the first argument.
Packit Service c5cf8c
dnl D*/
Packit Service c5cf8c
AC_DEFUN([PAC_F77_CHECK_COMPILER_OPTION],[
Packit Service c5cf8c
AC_MSG_CHECKING([whether Fortran 77 compiler accepts option $1])
Packit Service c5cf8c
pac_opt="$1"
Packit Service c5cf8c
AC_LANG_PUSH([Fortran 77])
Packit Service c5cf8c
FFLAGS_orig="$FFLAGS"
Packit Service c5cf8c
FFLAGS_opt="$pac_opt $FFLAGS"
Packit Service c5cf8c
pac_result="unknown"
Packit Service c5cf8c
Packit Service c5cf8c
AC_LANG_CONFTEST([AC_LANG_PROGRAM()])
Packit Service c5cf8c
FFLAGS="$FFLAGS_orig"
Packit Service c5cf8c
rm -f pac_test1.log
Packit Service c5cf8c
PAC_LINK_IFELSE_LOG([pac_test1.log], [], [
Packit Service c5cf8c
    FFLAGS="$FFLAGS_opt"
Packit Service c5cf8c
    rm -f pac_test2.log
Packit Service c5cf8c
    PAC_LINK_IFELSE_LOG([pac_test2.log], [], [
Packit Service c5cf8c
        PAC_RUNLOG_IFELSE([diff -b pac_test1.log pac_test2.log],
Packit Service c5cf8c
                          [pac_result=yes], [pac_result=no])
Packit Service c5cf8c
    ],[
Packit Service c5cf8c
        pac_result=no
Packit Service c5cf8c
    ])
Packit Service c5cf8c
], [
Packit Service c5cf8c
    pac_result=no
Packit Service c5cf8c
])
Packit Service c5cf8c
AC_MSG_RESULT([$pac_result])
Packit Service c5cf8c
dnl Delete the conftest created by AC_LANG_CONFTEST.
Packit Service c5cf8c
rm -f conftest.$ac_ext
Packit Service c5cf8c
#
Packit Service c5cf8c
if test "$pac_result" = "yes" ; then
Packit Service c5cf8c
    AC_MSG_CHECKING([whether routines compiled with $pac_opt can be linked with ones compiled without $pac_opt])
Packit Service c5cf8c
    pac_result=unknown
Packit Service c5cf8c
    FFLAGS="$FFLAGS_orig"
Packit Service c5cf8c
    rm -f pac_test3.log
Packit Service c5cf8c
    PAC_COMPILE_IFELSE_LOG([pac_test3.log], [
Packit Service c5cf8c
        AC_LANG_SOURCE([
Packit Service c5cf8c
            subroutine try()
Packit Service c5cf8c
            end
Packit Service c5cf8c
        ])
Packit Service c5cf8c
    ],[
Packit Service c5cf8c
        PAC_RUNLOG([mv conftest.$OBJEXT pac_conftest.$OBJEXT])
Packit Service c5cf8c
        saved_LIBS="$LIBS"
Packit Service c5cf8c
        LIBS="pac_conftest.$OBJEXT $LIBS"
Packit Service c5cf8c
Packit Service c5cf8c
        FFLAGS="$FFLAGS_opt"
Packit Service c5cf8c
        rm -f pac_test4.log
Packit Service c5cf8c
        PAC_LINK_IFELSE_LOG([pac_test4.log], [AC_LANG_PROGRAM()], [
Packit Service c5cf8c
            PAC_RUNLOG_IFELSE([diff -b pac_test2.log pac_test4.log],
Packit Service c5cf8c
                              [pac_result=yes], [pac_result=no])
Packit Service c5cf8c
        ],[
Packit Service c5cf8c
            pac_result=no
Packit Service c5cf8c
        ])
Packit Service c5cf8c
        LIBS="$saved_LIBS"
Packit Service c5cf8c
        rm -f pac_conftest.$OBJEXT
Packit Service c5cf8c
    ],[
Packit Service c5cf8c
        pac_result=no
Packit Service c5cf8c
    ])
Packit Service c5cf8c
    AC_MSG_RESULT([$pac_result])
Packit Service c5cf8c
    rm -f pac_test3.log pac_test4.log
Packit Service c5cf8c
fi
Packit Service c5cf8c
rm -f pac_test1.log pac_test2.log
Packit Service c5cf8c
Packit Service c5cf8c
dnl Restore FFLAGS before 2nd/3rd argument commands are executed,
Packit Service c5cf8c
dnl as 2nd/3rd argument command could be modifying FFLAGS.
Packit Service c5cf8c
FFLAGS="$FFLAGS_orig"
Packit Service c5cf8c
if test "$pac_result" = "yes" ; then
Packit Service c5cf8c
     ifelse([$2],[],[FOPTIONS="$FOPTIONS $1"],[$2])
Packit Service c5cf8c
else
Packit Service c5cf8c
     ifelse([$3],[],[:],[$3])
Packit Service c5cf8c
fi
Packit Service c5cf8c
AC_LANG_POP([Fortran 77])
Packit Service c5cf8c
])
Packit Service c5cf8c
dnl
Packit Service c5cf8c
dnl/*D
Packit Service c5cf8c
dnl PAC_PROG_F77_LIBRARY_DIR_FLAG - Determine the flag used to indicate
Packit Service c5cf8c
dnl the directories to find libraries in
Packit Service c5cf8c
dnl
Packit Service c5cf8c
dnl Notes:
Packit Service c5cf8c
dnl Many compilers accept '-Ldir' just like most C compilers.  
Packit Service c5cf8c
dnl Unfortunately, some (such as some HPUX Fortran compilers) do not, 
Packit Service c5cf8c
dnl and require instead either '-Wl,-L,dir' or something else.  This
Packit Service c5cf8c
dnl command attempts to determine what is accepted.  The flag is 
Packit Service c5cf8c
dnl placed into 'F77_LIBDIR_LEADER'.
Packit Service c5cf8c
dnl
Packit Service c5cf8c
dnl D*/
Packit Service c5cf8c
dnl
Packit Service c5cf8c
dnl An earlier version of this only tried the arguments without using
Packit Service c5cf8c
dnl a library.  This failed when the HP compiler complained about the
Packit Service c5cf8c
dnl arguments, but produced an executable anyway.
Packit Service c5cf8c
AC_DEFUN([PAC_PROG_F77_LIBRARY_DIR_FLAG],[
Packit Service c5cf8c
AC_CACHE_CHECK([for Fortran 77 flag for library directories],
Packit Service c5cf8c
pac_cv_prog_f77_library_dir_flag,[
Packit Service c5cf8c
AC_LANG_PUSH([Fortran 77])
Packit Service c5cf8c
AC_COMPILE_IFELSE([
Packit Service c5cf8c
    AC_LANG_SOURCE([
Packit Service c5cf8c
        subroutine f1conf
Packit Service c5cf8c
        end
Packit Service c5cf8c
    ])
Packit Service c5cf8c
],[
Packit Service c5cf8c
    # pac_f77compile_ok=yes
Packit Service c5cf8c
    PAC_RUNLOG([mv conftest.$OBJEXT pac_f77conftest.$OBJEXT])
Packit Service c5cf8c
    PAC_RUNLOG([test -d conftestdir || mkdir conftestdir])
Packit Service c5cf8c
    PAC_RUNLOG([${AR-ar} ${AR_FLAGS-cr} conftestdir/libf77conftest.a pac_f77conftest.$OBJEXT])
Packit Service c5cf8c
    PAC_RUNLOG([${RANLIB-ranlib} conftestdir/libf77conftest.a])
Packit Service c5cf8c
    # Save original LIBS, prepend previously generated object file to LIBS
Packit Service c5cf8c
    saved_LIBS="$LIBS"
Packit Service c5cf8c
    LIBS="-lf77conftest $LIBS"
Packit Service c5cf8c
    saved_LDFLAGS="$LDFLAGS"
Packit Service c5cf8c
    pac_cv_prog_f77_library_dir_flag="none"
Packit Service c5cf8c
    for ldir in "-L" "-Wl,-L," ; do
Packit Service c5cf8c
        LDFLAGS="${ldir}conftestdir $saved_LDFLAGS"
Packit Service c5cf8c
        AC_LINK_IFELSE([
Packit Service c5cf8c
            AC_LANG_SOURCE([
Packit Service c5cf8c
                program main
Packit Service c5cf8c
                call f1conf
Packit Service c5cf8c
                end
Packit Service c5cf8c
            ])
Packit Service c5cf8c
        ],[pac_cv_prog_f77_library_dir_flag="$ldir";break])
Packit Service c5cf8c
    done
Packit Service c5cf8c
    LDFLAGS="$saved_LDFLAGS"
Packit Service c5cf8c
    LIBS="$saved_LIBS"
Packit Service c5cf8c
    rm -rf conftestdir
Packit Service c5cf8c
    rm -f pac_f77conftest.$OBJEXT
Packit Service c5cf8c
],[])
Packit Service c5cf8c
AC_LANG_POP([Fortran 77])
Packit Service c5cf8c
])
Packit Service c5cf8c
dnl Endof ac_cache_check
Packit Service c5cf8c
if test "X$pac_cv_prog_f77_library_dir_flag" != "Xnone" ; then
Packit Service c5cf8c
    F77_LIBDIR_LEADER="$pac_cv_prog_f77_library_dir_flag"
Packit Service c5cf8c
    AC_SUBST(F77_LIBDIR_LEADER)
Packit Service c5cf8c
fi
Packit Service c5cf8c
])
Packit Service c5cf8c
dnl
Packit Service c5cf8c
dnl/*D 
Packit Service c5cf8c
dnl PAC_PROG_F77_HAS_INCDIR - Check whether Fortran accepts -Idir flag
Packit Service c5cf8c
dnl
Packit Service c5cf8c
dnl Syntax:
Packit Service c5cf8c
dnl   PAC_PROG_F77_HAS_INCDIR(directory,action-if-true,action-if-false)
Packit Service c5cf8c
dnl
Packit Service c5cf8c
dnl Output Effect:
Packit Service c5cf8c
dnl  Sets 'F77_INCDIR' to the flag used to choose the directory.  
Packit Service c5cf8c
dnl
Packit Service c5cf8c
dnl Notes:
Packit Service c5cf8c
dnl This refers to the handling of the common Fortran include extension,
Packit Service c5cf8c
dnl not to the use of '#include' with the C preprocessor.
Packit Service c5cf8c
dnl If directory does not exist, it will be created.  In that case, the 
Packit Service c5cf8c
dnl directory should be a direct descendant of the current directory.
Packit Service c5cf8c
dnl
Packit Service c5cf8c
dnl D*/
Packit Service c5cf8c
AC_DEFUN([PAC_PROG_F77_HAS_INCDIR],[
Packit Service c5cf8c
ifelse([$1],[],[checkdir=f77tmpdir],[checkdir=$1;checkdir_is_given=yes])
Packit Service c5cf8c
AC_CACHE_CHECK([for include directory flag for Fortran],
Packit Service c5cf8c
pac_cv_prog_f77_has_incdir,[
Packit Service c5cf8c
test -d $checkdir || mkdir $checkdir
Packit Service c5cf8c
dnl PAC_RUNLOG([echo '       call sub()' > $checkdir/conftestf.h])
Packit Service c5cf8c
echo '       call sub()' > $checkdir/conftestf.h
Packit Service c5cf8c
AC_LANG_PUSH([Fortran 77])
Packit Service c5cf8c
saved_FFLAGS="$FFLAGS"
Packit Service c5cf8c
pac_cv_prog_f77_has_incdir="none"
Packit Service c5cf8c
# SGI wants -Wf,-I
Packit Service c5cf8c
for idir in "-I" "-Wf,-I" ; do
Packit Service c5cf8c
    FFLAGS="${idir} $checkdir $saved_FFLAGS"
Packit Service c5cf8c
    AC_COMPILE_IFELSE([
Packit Service c5cf8c
        AC_LANG_SOURCE([
Packit Service c5cf8c
            program main
Packit Service c5cf8c
            include 'conftestf.h'
Packit Service c5cf8c
            end
Packit Service c5cf8c
        ])
Packit Service c5cf8c
    ],[pac_cv_prog_f77_has_incdir="$idir"; break])
Packit Service c5cf8c
done
Packit Service c5cf8c
FFLAGS="$saved_FFLAGS"
Packit Service c5cf8c
AC_LANG_POP([Fortran 77])
Packit Service c5cf8c
if test "$checkdir_is_given" = "yes" ; then
Packit Service c5cf8c
    rm -f $checkdir/conftestf.h
Packit Service c5cf8c
else
Packit Service c5cf8c
    rm -rf $checkdir
Packit Service c5cf8c
fi
Packit Service c5cf8c
])
Packit Service c5cf8c
dnl Endof ac_cache_check
Packit Service c5cf8c
if test "X$pac_cv_prog_f77_has_incdir" != "Xnone" ; then
Packit Service c5cf8c
    F77_INCDIR="$pac_cv_prog_f77_has_incdir"
Packit Service c5cf8c
    AC_SUBST(F77_INCDIR)
Packit Service c5cf8c
fi
Packit Service c5cf8c
])
Packit Service c5cf8c
dnl
Packit Service c5cf8c
dnl/*D
Packit Service c5cf8c
dnl PAC_PROG_F77_ALLOWS_UNUSED_EXTERNALS - Check whether the Fortran compiler
Packit Service c5cf8c
dnl allows unused and undefined functions to be listed in an external 
Packit Service c5cf8c
dnl statement
Packit Service c5cf8c
dnl
Packit Service c5cf8c
dnl Syntax:
Packit Service c5cf8c
dnl   PAC_PROG_F77_ALLOWS_UNUSED_EXTERNALS(action-if-true,action-if-false)
Packit Service c5cf8c
dnl
Packit Service c5cf8c
dnl D*/
Packit Service c5cf8c
AC_DEFUN([PAC_PROG_F77_ALLOWS_UNUSED_EXTERNALS],[
Packit Service c5cf8c
AC_CACHE_CHECK([whether Fortran allows unused externals],
Packit Service c5cf8c
pac_cv_prog_f77_allows_unused_externals,[
Packit Service c5cf8c
AC_LANG_PUSH([Fortran 77])
Packit Service c5cf8c
AC_LINK_IFELSE([
Packit Service c5cf8c
    AC_LANG_SOURCE([
Packit Service c5cf8c
        program main
Packit Service c5cf8c
        external bar
Packit Service c5cf8c
        end
Packit Service c5cf8c
    ])
Packit Service c5cf8c
],[
Packit Service c5cf8c
    pac_cv_prog_f77_allows_unused_externals="yes"
Packit Service c5cf8c
],[
Packit Service c5cf8c
    pac_cv_prog_f77_allows_unused_externals="no"
Packit Service c5cf8c
])
Packit Service c5cf8c
AC_LANG_POP([Fortran 77])
Packit Service c5cf8c
])
Packit Service c5cf8c
dnl Endof ac_cache_check
Packit Service c5cf8c
if test "X$pac_cv_prog_f77_allows_unused_externals" = "Xyes" ; then
Packit Service c5cf8c
   ifelse([$1],[],[:],[$1])
Packit Service c5cf8c
else
Packit Service c5cf8c
   ifelse([$2],[],[:],[$2])
Packit Service c5cf8c
fi
Packit Service c5cf8c
])
Packit Service c5cf8c
dnl PAC_PROG_F77_RUN_PROC_FROM_C( c main program, fortran routine, 
Packit Service c5cf8c
dnl                               [action-if-works], [action-if-fails], 
Packit Service c5cf8c
dnl                               [cross-action] )
Packit Service c5cf8c
dnl Fortran routine MUST be named ftest unless you include code
Packit Service c5cf8c
dnl to select the appropriate Fortran name.
Packit Service c5cf8c
dnl 
Packit Service c5cf8c
AC_DEFUN([PAC_PROG_F77_RUN_PROC_FROM_C],[
Packit Service c5cf8c
AC_REQUIRE([AC_HEADER_STDC])
Packit Service c5cf8c
AC_REQUIRE([AC_F77_LIBRARY_LDFLAGS])
Packit Service c5cf8c
AC_LANG_PUSH([Fortran 77])
Packit Service c5cf8c
AC_COMPILE_IFELSE([
Packit Service c5cf8c
    AC_LANG_SOURCE([$2])
Packit Service c5cf8c
],[
Packit Service c5cf8c
    # pac_f77compile_ok=yes
Packit Service c5cf8c
    PAC_RUNLOG([mv conftest.$OBJEXT pac_f77conftest.$OBJEXT])
Packit Service c5cf8c
    # Save original LIBS, prepend previously generated object file to LIBS
Packit Service c5cf8c
    saved_LIBS="$LIBS"
Packit Service c5cf8c
    LIBS="pac_f77conftest.$OBJEXT $FLIBS $LIBS"
Packit Service c5cf8c
    AC_LANG_PUSH([C])
Packit Service c5cf8c
    AC_RUN_IFELSE([
Packit Service c5cf8c
        AC_LANG_SOURCE([
Packit Service c5cf8c
#if defined(HAVE_STDIO_H) || defined(STDC_HEADERS)
Packit Service c5cf8c
#include <stdio.h>
Packit Service c5cf8c
#endif
Packit Service c5cf8c
#ifdef F77_NAME_UPPER
Packit Service c5cf8c
#define ftest_ FTEST
Packit Service c5cf8c
#elif defined(F77_NAME_LOWER) || defined(F77_NAME_MIXED)
Packit Service c5cf8c
#define ftest_ ftest
Packit Service c5cf8c
#endif
Packit Service c5cf8c
$1
Packit Service c5cf8c
        ])
Packit Service c5cf8c
    ],[
Packit Service c5cf8c
        ifelse([$3],[],[:],[$3])
Packit Service c5cf8c
    ],[
Packit Service c5cf8c
        ifelse([$4],[],[:],[$4])
Packit Service c5cf8c
    ],[
Packit Service c5cf8c
        ifelse([$5],[],[:],[$5])
Packit Service c5cf8c
    ])
Packit Service c5cf8c
    AC_LANG_POP([C])
Packit Service c5cf8c
    LIBS="$saved_LIBS"
Packit Service c5cf8c
    rm -f pac_f77conftest.$OBJEXT
Packit Service c5cf8c
],[
Packit Service c5cf8c
])
Packit Service c5cf8c
AC_LANG_POP([Fortran 77])
Packit Service c5cf8c
])
Packit Service c5cf8c
dnl PAC_PROG_F77_IN_C_LIBS
Packit Service c5cf8c
dnl
Packit Service c5cf8c
dnl Find the essential libraries that are needed to use the C linker to 
Packit Service c5cf8c
dnl create a program that includes a trival Fortran code.  
Packit Service c5cf8c
dnl
Packit Service c5cf8c
dnl For example, all pgf90 compiled objects include a reference to the
Packit Service c5cf8c
dnl symbol pgf90_compiled, found in libpgf90 .
Packit Service c5cf8c
dnl
Packit Service c5cf8c
dnl There is an additional problem.  To *run* programs, we may need 
Packit Service c5cf8c
dnl additional arguments; e.g., if shared libraries are used.  Even
Packit Service c5cf8c
dnl with autoconf 2.52, the autoconf macro to find the library arguments
Packit Service c5cf8c
dnl doesn't handle this, either by detecting the use of -rpath or
Packit Service c5cf8c
dnl by trying to *run* a trivial program.  It only checks for *linking*.
Packit Service c5cf8c
dnl 
Packit Service c5cf8c
dnl
Packit Service c5cf8c
AC_DEFUN([PAC_PROG_F77_IN_C_LIBS],[
Packit Service c5cf8c
AC_REQUIRE([AC_HEADER_STDC])
Packit Service c5cf8c
AC_REQUIRE([AC_F77_LIBRARY_LDFLAGS])
Packit Service c5cf8c
AC_MSG_CHECKING([for which Fortran libraries are needed to link C with Fortran])
Packit Service c5cf8c
F77_IN_C_LIBS="invalid"
Packit Service c5cf8c
AC_LANG_PUSH([Fortran 77])
Packit Service c5cf8c
AC_COMPILE_IFELSE([
Packit Service c5cf8c
    AC_LANG_SOURCE([
Packit Service c5cf8c
        subroutine ftest
Packit Service c5cf8c
        end
Packit Service c5cf8c
    ])
Packit Service c5cf8c
],[
Packit Service c5cf8c
    # pac_f77compile_ok=yes
Packit Service c5cf8c
    PAC_RUNLOG([mv conftest.$OBJEXT pac_f77conftest.$OBJEXT])
Packit Service c5cf8c
    # Save original LIBS, prepend previously generated object file to LIBS
Packit Service c5cf8c
    saved_LIBS="$LIBS"
Packit Service c5cf8c
    LIBS="pac_f77conftest.$OBJEXT $FLIBS $saved_LIBS"
Packit Service c5cf8c
    AC_LANG_PUSH([C])
Packit Service c5cf8c
Packit Service c5cf8c
    # Create conftest for all link tests.
Packit Service c5cf8c
    AC_LANG_CONFTEST([
Packit Service c5cf8c
        AC_LANG_PROGRAM([
Packit Service c5cf8c
#if defined(HAVE_STDIO_H) || defined(STDC_HEADERS)
Packit Service c5cf8c
#include <stdio.h>
Packit Service c5cf8c
#endif
Packit Service c5cf8c
        ],[
Packit Service c5cf8c
#ifdef F77_NAME_UPPER
Packit Service c5cf8c
#define ftest_ FTEST
Packit Service c5cf8c
#elif defined(F77_NAME_LOWER) || defined(F77_NAME_MIXED)
Packit Service c5cf8c
#define ftest_ ftest
Packit Service c5cf8c
#endif
Packit Service c5cf8c
extern void ftest_(void);
Packit Service c5cf8c
ftest_();
Packit Service c5cf8c
        ])
Packit Service c5cf8c
    ])
Packit Service c5cf8c
Packit Service c5cf8c
    F77_IN_C_LIBS=""
Packit Service c5cf8c
    AC_LINK_IFELSE([],[:],[
Packit Service c5cf8c
        flibdirs=`echo $FLIBS | tr ' ' '\012' | grep '\-L' | tr '\012' ' '`
Packit Service c5cf8c
        fliblibs=`echo $FLIBS | tr ' ' '\012' | grep -v '\-L' | tr '\012' ' '`
Packit Service c5cf8c
        for flibs in $fliblibs ; do
Packit Service c5cf8c
            LIBS="pac_f77conftest.$OBJEXT $flibdirs $flibs $saved_LIBS"
Packit Service c5cf8c
            AC_LINK_IFELSE([],[F77_IN_C_LIBS="$flibdirs $flibs"; break])
Packit Service c5cf8c
        done
Packit Service c5cf8c
        if test "X$F77_IN_C_LIBS" = "X" ; then
Packit Service c5cf8c
            flibscat=""
Packit Service c5cf8c
            for flibs in $fliblibs ; do
Packit Service c5cf8c
                flibscat="$flibscat $flibs"
Packit Service c5cf8c
                LIBS="pac_f77conftest.$OBJEXT $flibdirs $flibscat $saved_LIBS"
Packit Service c5cf8c
                AC_LINK_IFELSE([],[F77_IN_C_LIBS="$flibdirs $flibscat";break])
Packit Service c5cf8c
            done
Packit Service c5cf8c
        fi
Packit Service c5cf8c
    ])
Packit Service c5cf8c
Packit Service c5cf8c
    # remove conftest created by ac_lang_conftest
Packit Service c5cf8c
    rm -f conftest.$ac_ext
Packit Service c5cf8c
    AC_LANG_POP([C])
Packit Service c5cf8c
    LIBS="$saved_LIBS"
Packit Service c5cf8c
    rm -f pac_f77conftest.$OBJEXT
Packit Service c5cf8c
])
Packit Service c5cf8c
AC_LANG_POP([Fortran 77])
Packit Service c5cf8c
if test "X$F77_IN_C_LIBS" = "X" ; then
Packit Service c5cf8c
    AC_MSG_RESULT(none)
Packit Service c5cf8c
else
Packit Service c5cf8c
    AC_MSG_RESULT($F77_IN_C_LIBS)
Packit Service c5cf8c
fi
Packit Service c5cf8c
])
Packit Service c5cf8c
dnl
Packit Service c5cf8c
dnl Test to see if we should use C or Fortran to link programs whose
Packit Service c5cf8c
dnl main program is in Fortran.  We may find that neither work because 
Packit Service c5cf8c
dnl we need special libraries in each case.
Packit Service c5cf8c
dnl
Packit Service c5cf8c
AC_DEFUN([PAC_PROG_F77_LINKER_WITH_C],[
Packit Service c5cf8c
AC_REQUIRE([AC_F77_LIBRARY_LDFLAGS])
Packit Service c5cf8c
AC_MSG_CHECKING([for linker for Fortran main program])
Packit Service c5cf8c
dnl Create a C program that uses multiplication and division
Packit Service c5cf8c
dnl in case that requires special libraries
Packit Service c5cf8c
AC_LANG_PUSH([C])
Packit Service c5cf8c
AC_COMPILE_IFELSE([
Packit Service c5cf8c
    AC_LANG_PROGRAM([],[long long a;])
Packit Service c5cf8c
],[
Packit Service c5cf8c
    AC_DEFINE(HAVE_LONG_LONG,1,[Define if long long allowed])
Packit Service c5cf8c
])
Packit Service c5cf8c
AC_LANG_CONFTEST([
Packit Service c5cf8c
    AC_LANG_SOURCE([
Packit Service c5cf8c
#ifdef HAVE_LONG_LONG
Packit Service c5cf8c
int f(int a, long long b) { int c; c = a * ( b / 3 ) / (b-1); return c ; }
Packit Service c5cf8c
#else
Packit Service c5cf8c
int f(int a, long b) { int c; c = a * b / (b-1); return c ; }
Packit Service c5cf8c
#endif
Packit Service c5cf8c
    ])
Packit Service c5cf8c
])
Packit Service c5cf8c
AC_LANG_POP([C])
Packit Service c5cf8c
Packit Service c5cf8c
dnl Create a Fortran program for test
Packit Service c5cf8c
AC_LANG_PUSH([Fortran 77])
Packit Service c5cf8c
AC_LANG_CONFTEST([
Packit Service c5cf8c
    AC_LANG_SOURCE([
Packit Service c5cf8c
        program main
Packit Service c5cf8c
        double precision d
Packit Service c5cf8c
        print *, "hi"
Packit Service c5cf8c
        end
Packit Service c5cf8c
    ])
Packit Service c5cf8c
])
Packit Service c5cf8c
AC_LANG_POP([Fortran 77])
Packit Service c5cf8c
Packit Service c5cf8c
dnl Initialize flags
Packit Service c5cf8c
pac_linkwithf77=no
Packit Service c5cf8c
pac_linkwithC=no
Packit Service c5cf8c
Packit Service c5cf8c
dnl Use F77 as a linker to compile a Fortran main and C subprogram.
Packit Service c5cf8c
if test "$pac_linkwithC" != "yes" ; then
Packit Service c5cf8c
    AC_LANG_PUSH([C])
Packit Service c5cf8c
    AC_COMPILE_IFELSE([],[
Packit Service c5cf8c
        PAC_RUNLOG([mv conftest.$OBJEXT pac_conftest.$OBJEXT])
Packit Service c5cf8c
        saved_LIBS="$LIBS"
Packit Service c5cf8c
        LIBS="pac_conftest.$OBJEXT $saved_LIBS"
Packit Service c5cf8c
        AC_LANG_PUSH([Fortran 77])
Packit Service c5cf8c
        AC_LINK_IFELSE([],[
Packit Service c5cf8c
            AC_MSG_RESULT([Use Fortran to link programs])
Packit Service c5cf8c
            pac_linkwithf77=yes
Packit Service c5cf8c
        ])
Packit Service c5cf8c
        AC_LANG_POP([Fortran 77])
Packit Service c5cf8c
        LIBS="$saved_LIBS"
Packit Service c5cf8c
        rm -f pac_conftest.$OBJEXT
Packit Service c5cf8c
    ])
Packit Service c5cf8c
    AC_LANG_POP([C])
Packit Service c5cf8c
fi
Packit Service c5cf8c
Packit Service c5cf8c
dnl Use C as a linker and FLIBS to compile a Fortran main and C subprogram.
Packit Service c5cf8c
if test "$pac_linkwithf77" != "yes" ; then
Packit Service c5cf8c
    AC_LANG_PUSH([Fortran 77])
Packit Service c5cf8c
    AC_COMPILE_IFELSE([],[
Packit Service c5cf8c
        PAC_RUNLOG([mv conftest.$OBJEXT pac_f77conftest.$OBJEXT])
Packit Service c5cf8c
        saved_LIBS="$LIBS"
Packit Service c5cf8c
        LIBS="pac_f77conftest.$OBJEXT $FLIBS $saved_LIBS"
Packit Service c5cf8c
        AC_LANG_PUSH([C])
Packit Service c5cf8c
        AC_LINK_IFELSE([],[
Packit Service c5cf8c
            pac_linkwithC=yes
Packit Service c5cf8c
            AC_MSG_RESULT([Use C with FLIBS to link programs])
Packit Service c5cf8c
            F77LINKER="$CC"
Packit Service c5cf8c
            F77_LDFLAGS="$F77_LDFLAGS $FLIBS"
Packit Service c5cf8c
        ])
Packit Service c5cf8c
        AC_LANG_POP([C])
Packit Service c5cf8c
        LIBS="$saved_LIBS"
Packit Service c5cf8c
        rm -f pac_f77conftest.$OBJEXT
Packit Service c5cf8c
    ])
Packit Service c5cf8c
    AC_LANG_POP([Fortran 77])
Packit Service c5cf8c
fi
Packit Service c5cf8c
Packit Service c5cf8c
AC_LANG_PUSH([Fortran 77])
Packit Service c5cf8c
rm -f conftest.$ac_ext
Packit Service c5cf8c
AC_LANG_POP([Fortran 77])
Packit Service c5cf8c
Packit Service c5cf8c
AC_LANG_PUSH([C])
Packit Service c5cf8c
rm -f conftest.$ac_ext
Packit Service c5cf8c
AC_LANG_POP([C])
Packit Service c5cf8c
Packit Service c5cf8c
if test "$pac_linkwithf77" != "yes" -a "$pac_linkwithC" != "yes" ; then
Packit Service c5cf8c
    AC_MSG_ERROR([Could not determine a way to link a Fortran test program!])
Packit Service c5cf8c
fi
Packit Service c5cf8c
])
Packit Service c5cf8c
dnl
Packit Service c5cf8c
dnl Check to see if a C program can be linked when using the libraries
Packit Service c5cf8c
dnl needed by C programs
Packit Service c5cf8c
dnl
Packit Service c5cf8c
AC_DEFUN([PAC_PROG_F77_CHECK_FLIBS],[
Packit Service c5cf8c
AC_REQUIRE([AC_F77_LIBRARY_LDFLAGS])
Packit Service c5cf8c
AC_MSG_CHECKING([whether $CC links with FLIBS found by autoconf])
Packit Service c5cf8c
AC_LANG_PUSH([C])
Packit Service c5cf8c
# Create a simple C program for the tests.
Packit Service c5cf8c
AC_LANG_CONFTEST([
Packit Service c5cf8c
    AC_LANG_PROGRAM([],[int a;])
Packit Service c5cf8c
])
Packit Service c5cf8c
# Try to link a C program with all of these libraries
Packit Service c5cf8c
saved_LIBS="$LIBS"
Packit Service c5cf8c
LIBS="$FLIBS $saved_LIBS"
Packit Service c5cf8c
AC_LINK_IFELSE([],[
Packit Service c5cf8c
    AC_MSG_RESULT([yes])
Packit Service c5cf8c
],[
Packit Service c5cf8c
    AC_MSG_RESULT([no])
Packit Service c5cf8c
    AC_MSG_CHECKING([for which libraries can be used])
Packit Service c5cf8c
    pac_ldirs=""
Packit Service c5cf8c
    pac_libs=""
Packit Service c5cf8c
    pac_other=""
Packit Service c5cf8c
    for name in $FLIBS ; do
Packit Service c5cf8c
        case $name in 
Packit Service c5cf8c
        -l*) pac_libs="$pac_libs $name"   ;;
Packit Service c5cf8c
        -L*) pac_ldirs="$pac_ldirs $name" ;;
Packit Service c5cf8c
          *) pac_other="$pac_other $name" ;;
Packit Service c5cf8c
        esac
Packit Service c5cf8c
    done
Packit Service c5cf8c
    keep_libs=""
Packit Service c5cf8c
    for name in $pac_libs ; do
Packit Service c5cf8c
        LIBS="$saved_LIBS $pac_ldirs $pac_other $name"
Packit Service c5cf8c
        AC_LINK_IFELSE([],[
Packit Service c5cf8c
            keep_libs="$keep_libs $name"
Packit Service c5cf8c
        ])
Packit Service c5cf8c
    done
Packit Service c5cf8c
    AC_MSG_RESULT($keep_libs)
Packit Service c5cf8c
    FLIBS="$pac_ldirs $pac_other $keep_libs"
Packit Service c5cf8c
])
Packit Service c5cf8c
LIBS="$saved_LIBS"
Packit Service c5cf8c
rm -f conftest.$ac_ext
Packit Service c5cf8c
AC_LANG_PUSH([C])
Packit Service c5cf8c
])
Packit Service c5cf8c
dnl
Packit Service c5cf8c
dnl Test for extra libraries needed when linking C routines that use
Packit Service c5cf8c
dnl stdio with Fortran.  This test was created for OSX, which 
Packit Service c5cf8c
dnl sometimes requires -lSystemStubs.  If another library is needed,
Packit Service c5cf8c
dnl add it to F77_OTHER_LIBS
Packit Service c5cf8c
dnl
Packit Service c5cf8c
AC_DEFUN([PAC_PROG_F77_AND_C_STDIO_LIBS],[
Packit Service c5cf8c
AC_REQUIRE([AC_HEADER_STDC])
Packit Service c5cf8c
AC_REQUIRE([PAC_PROG_F77_NAME_MANGLE])
Packit Service c5cf8c
# To simply the code in the cache_check macro, chose the routine name
Packit Service c5cf8c
# first, in case we need it
Packit Service c5cf8c
confname=conf1_
Packit Service c5cf8c
case "$pac_cv_prog_f77_name_mangle" in
Packit Service c5cf8c
    "lower underscore")       confname=conf1_ ;;
Packit Service c5cf8c
    "upper stdcall")          confname=CONF1  ;;
Packit Service c5cf8c
    "upper")                  confname=CONF1  ;;
Packit Service c5cf8c
    "lower doubleunderscore") confname=conf1_ ;;
Packit Service c5cf8c
    "lower")                  confname=conf1  ;;
Packit Service c5cf8c
    "mixed underscore")       confname=conf1_ ;;
Packit Service c5cf8c
    "mixed")                  confname=conf1  ;;
Packit Service c5cf8c
esac
Packit Service c5cf8c
Packit Service c5cf8c
AC_CACHE_CHECK([for libraries to link Fortran main with C stdio routines],
Packit Service c5cf8c
pac_cv_prog_f77_and_c_stdio_libs,[
Packit Service c5cf8c
pac_cv_prog_f77_and_c_stdio_libs=unknown
Packit Service c5cf8c
AC_LANG_PUSH([C])
Packit Service c5cf8c
AC_COMPILE_IFELSE([
Packit Service c5cf8c
    AC_LANG_SOURCE([
Packit Service c5cf8c
#if defined(HAVE_STDIO_H) || defined(STDC_HEADERS)
Packit Service c5cf8c
#include <stdio.h>
Packit Service c5cf8c
#endif
Packit Service c5cf8c
int $confname(int a) {
Packit Service c5cf8c
    printf( "The answer is %d\n", a ); fflush(stdout); return 0;
Packit Service c5cf8c
}
Packit Service c5cf8c
    ])
Packit Service c5cf8c
],[
Packit Service c5cf8c
    PAC_RUNLOG([mv conftest.$OBJEXT pac_conftest.$OBJEXT])
Packit Service c5cf8c
    saved_LIBS="$LIBS"
Packit Service c5cf8c
    AC_LANG_PUSH([Fortran 77])
Packit Service c5cf8c
    AC_LANG_CONFTEST([
Packit Service c5cf8c
        AC_LANG_SOURCE([
Packit Service c5cf8c
            program main
Packit Service c5cf8c
            call conf1(0)
Packit Service c5cf8c
            end
Packit Service c5cf8c
        ])
Packit Service c5cf8c
    ])
Packit Service c5cf8c
    for extralib in "" "-lSystemStubs" ; do
Packit Service c5cf8c
        LIBS="pac_conftest.$OBJEXT $saved_LIBS $extralib"
Packit Service c5cf8c
        AC_LINK_IFELSE([],[
Packit Service c5cf8c
            pac_cv_prog_f77_and_c_stdio_libs="$extralib"; break
Packit Service c5cf8c
        ])
Packit Service c5cf8c
    done
Packit Service c5cf8c
    if test "X$pac_cv_prog_f77_and_c_stdio_libs" = "X" ; then
Packit Service c5cf8c
        pac_cv_prog_f77_and_c_stdio_libs=none
Packit Service c5cf8c
    fi
Packit Service c5cf8c
    rm -f conftest.$ac_ext
Packit Service c5cf8c
    AC_LANG_POP([Fortran 77])
Packit Service c5cf8c
    LIBS="$saved_LIBS"
Packit Service c5cf8c
    rm -f pac_conftest.$OBJEXT
Packit Service c5cf8c
])
Packit Service c5cf8c
AC_LANG_POP([C])
Packit Service c5cf8c
])
Packit Service c5cf8c
dnl Endof ac_cache_check
Packit Service c5cf8c
if test "$pac_cv_prog_f77_and_c_stdio_libs" != "none" \
Packit Service c5cf8c
     -a "$pac_cv_prog_f77_and_c_stdio_libs" != "unknown" ; then
Packit Service c5cf8c
    F77_OTHER_LIBS="$F77_OTHER_LIBS $pac_cv_prog_f77_and_c_stdio_libs"
Packit Service c5cf8c
fi    
Packit Service c5cf8c
])
Packit Service c5cf8c
dnl
Packit Service c5cf8c
dnl Check that the FLIBS determined by AC_F77_LIBRARY_LDFLAGS is valid.
Packit Service c5cf8c
dnl That macro (at least as of autoconf 2.59) attempted to parse the output
Packit Service c5cf8c
dnl of the compiler when asked to be verbose; in the case of the Fujitsu
Packit Service c5cf8c
dnl frt Fortran compiler, it included files that frt looked for and then
Packit Service c5cf8c
dnl discarded because they did not exist.
Packit Service c5cf8c
dnl
Packit Service c5cf8c
AC_DEFUN([PAC_PROG_F77_FLIBS_VALID],[
Packit Service c5cf8c
AC_REQUIRE([AC_F77_LIBRARY_LDFLAGS])
Packit Service c5cf8c
AC_MSG_CHECKING([whether $F77 accepts the FLIBS found by autoconf])
Packit Service c5cf8c
pac_cv_f77_flibs_valid=unknown
Packit Service c5cf8c
AC_LANG_PUSH([Fortran 77])
Packit Service c5cf8c
AC_LANG_CONFTEST([
Packit Service c5cf8c
    AC_LANG_SOURCE([
Packit Service c5cf8c
        program main
Packit Service c5cf8c
        end
Packit Service c5cf8c
    ])
Packit Service c5cf8c
])
Packit Service c5cf8c
AC_LINK_IFELSE([],[
Packit Service c5cf8c
    AC_MSG_RESULT([yes])
Packit Service c5cf8c
],[
Packit Service c5cf8c
    AC_MSG_RESULT([no])
Packit Service c5cf8c
    AC_MSG_CHECKING([for valid entries in FLIBS])
Packit Service c5cf8c
    goodFLIBS=""
Packit Service c5cf8c
    saveFLIBS=$FLIBS
Packit Service c5cf8c
    FLIBS=""
Packit Service c5cf8c
    for arg in $saveFLIBS ; do
Packit Service c5cf8c
        FLIBS="$goodFLIBS $arg"
Packit Service c5cf8c
        AC_LINK_IFELSE([],[goodFLIBS=$FLIBS])
Packit Service c5cf8c
    done
Packit Service c5cf8c
    FLIBS=$goodFLIBS
Packit Service c5cf8c
    AC_MSG_RESULT($FLIBS)
Packit Service c5cf8c
])
Packit Service c5cf8c
rm -f conftest.$ac_ext
Packit Service c5cf8c
AC_LANG_POP([Fortran 77])
Packit Service c5cf8c
])
Packit Service c5cf8c
dnl
Packit Service c5cf8c
dnl Check if the Fortran 77 and C objects are compatible in linking.
Packit Service c5cf8c
dnl e.g. On some intel x86_64 Mac, Fortran compiler's default binary format
Packit Service c5cf8c
dnl is different from C, so either -m64 or -m32 is needed in either CFLAGS
Packit Service c5cf8c
dnl or FFLAGS.
Packit Service c5cf8c
dnl
Packit Service c5cf8c
AC_DEFUN([PAC_PROG_F77_OBJ_LINKS_WITH_C],[
Packit Service c5cf8c
AC_REQUIRE([AC_F77_LIBRARY_LDFLAGS])
Packit Service c5cf8c
AC_MSG_CHECKING([whether Fortran 77 and C objects are compatible])
Packit Service c5cf8c
AC_LANG_PUSH([C])
Packit Service c5cf8c
AC_LANG_CONFTEST([
Packit Service c5cf8c
    AC_LANG_SOURCE([
Packit Service c5cf8c
/* lower */
Packit Service c5cf8c
void c_subpgm( int *rc );
Packit Service c5cf8c
void c_subpgm( int *rc ) { *rc = 1; }
Packit Service c5cf8c
Packit Service c5cf8c
/* lower underscore */
Packit Service c5cf8c
void c_subpgm_( int *rc );
Packit Service c5cf8c
void c_subpgm_( int *rc ) { *rc = 2; }
Packit Service c5cf8c
Packit Service c5cf8c
/* upper */
Packit Service c5cf8c
void C_SUBPGM( int *rc );
Packit Service c5cf8c
void C_SUBPGM( int *rc ) { *rc = 3; }
Packit Service c5cf8c
Packit Service c5cf8c
/* lower doubleunderscore */
Packit Service c5cf8c
void c_subpgm__( int *rc );
Packit Service c5cf8c
void c_subpgm__( int *rc ) { *rc = 4; }
Packit Service c5cf8c
Packit Service c5cf8c
/* mixed */
Packit Service c5cf8c
void C_subpgm( int *rc );
Packit Service c5cf8c
void C_subpgm( int *rc ) { *rc = 5; }
Packit Service c5cf8c
Packit Service c5cf8c
/* mixed underscore */
Packit Service c5cf8c
void C_subpgm_( int *rc );
Packit Service c5cf8c
void C_subpgm_( int *rc ) { *rc = 6; }
Packit Service c5cf8c
    ])
Packit Service c5cf8c
])
Packit Service c5cf8c
AC_LANG_POP([C])
Packit Service c5cf8c
Packit Service c5cf8c
AC_LANG_PUSH([Fortran 77])
Packit Service c5cf8c
AC_LANG_CONFTEST([
Packit Service c5cf8c
    AC_LANG_SOURCE([
Packit Service c5cf8c
        program test
Packit Service c5cf8c
        integer rc
Packit Service c5cf8c
        rc = -1
Packit Service c5cf8c
        call c_subpgm( rc )
Packit Service c5cf8c
        write(6,*) "rc=", rc
Packit Service c5cf8c
        end
Packit Service c5cf8c
    ])
Packit Service c5cf8c
])
Packit Service c5cf8c
AC_LANG_POP([Fortran 77])
Packit Service c5cf8c
Packit Service c5cf8c
dnl Initialize flags
Packit Service c5cf8c
pac_linkwithf77=no
Packit Service c5cf8c
pac_linkwithC=no
Packit Service c5cf8c
Packit Service c5cf8c
dnl Use F77 as a linker to compile a Fortran main and C subprogram.
Packit Service c5cf8c
if test "$pac_linkwithC" != "yes" ; then
Packit Service c5cf8c
    AC_LANG_PUSH([C])
Packit Service c5cf8c
    AC_COMPILE_IFELSE([],[
Packit Service c5cf8c
        PAC_RUNLOG([mv conftest.$OBJEXT pac_conftest.$OBJEXT])
Packit Service c5cf8c
        saved_LIBS="$LIBS"
Packit Service c5cf8c
        LIBS="pac_conftest.$OBJEXT $saved_LIBS"
Packit Service c5cf8c
        AC_LANG_PUSH([Fortran 77])
Packit Service c5cf8c
        AC_LINK_IFELSE([],[
Packit Service c5cf8c
            pac_linkwithf77=yes
Packit Service c5cf8c
            AC_MSG_RESULT([yes])
Packit Service c5cf8c
        ])
Packit Service c5cf8c
        AC_LANG_POP([Fortran 77])
Packit Service c5cf8c
        LIBS="$saved_LIBS"
Packit Service c5cf8c
        if test "$pac_linkwithf77" = "yes" ; then
Packit Service c5cf8c
            rm -f pac_conftest.$OBJEXT
Packit Service c5cf8c
        fi
Packit Service c5cf8c
    ])
Packit Service c5cf8c
    AC_LANG_POP([C])
Packit Service c5cf8c
fi
Packit Service c5cf8c
Packit Service c5cf8c
dnl Use C as a linker and FLIBS to compile a Fortran main and C subprogram.
Packit Service c5cf8c
if test "$pac_linkwithf77" != "yes" ; then
Packit Service c5cf8c
    AC_LANG_PUSH([Fortran 77])
Packit Service c5cf8c
    AC_COMPILE_IFELSE([],[
Packit Service c5cf8c
        PAC_RUNLOG([mv conftest.$OBJEXT pac_f77conftest.$OBJEXT])
Packit Service c5cf8c
        saved_LIBS="$LIBS"
Packit Service c5cf8c
        LIBS="pac_f77conftest.$OBJEXT $FLIBS $saved_LIBS"
Packit Service c5cf8c
        AC_LANG_PUSH([C])
Packit Service c5cf8c
        AC_LINK_IFELSE([],[
Packit Service c5cf8c
            pac_linkwithC=yes
Packit Service c5cf8c
            AC_MSG_RESULT([yes])
Packit Service c5cf8c
        ])
Packit Service c5cf8c
        AC_LANG_POP([C])
Packit Service c5cf8c
        LIBS="$saved_LIBS"
Packit Service c5cf8c
        if test "$pac_linkwithC" = "yes" ; then
Packit Service c5cf8c
            rm -f pac_f77conftest.$OBJEXT
Packit Service c5cf8c
        fi
Packit Service c5cf8c
    ])
Packit Service c5cf8c
    AC_LANG_POP([Fortran 77])
Packit Service c5cf8c
fi
Packit Service c5cf8c
Packit Service c5cf8c
AC_LANG_PUSH([Fortran 77])
Packit Service c5cf8c
rm -f conftest.$ac_ext
Packit Service c5cf8c
AC_LANG_POP([Fortran 77])
Packit Service c5cf8c
Packit Service c5cf8c
AC_LANG_PUSH([C])
Packit Service c5cf8c
rm -f conftest.$ac_ext
Packit Service c5cf8c
AC_LANG_POP([C])
Packit Service c5cf8c
Packit Service c5cf8c
if test "$pac_linkwithf77" != "yes" -a "$pac_linkwithC" != "yes" ; then
Packit Service c5cf8c
    AC_MSG_RESULT(no)
Packit Service c5cf8c
    AC_CHECK_PROG(FILE, file, file, [])
Packit Service c5cf8c
    if test "X$FILE" != "X" ; then
Packit Service c5cf8c
        fobjtype="`${FILE} pac_f77conftest.$OBJEXT | sed -e \"s|pac_f77conftest\.$OBJEXT||g\"`"
Packit Service c5cf8c
        cobjtype="`${FILE} pac_conftest.$OBJEXT | sed -e \"s|pac_conftest\.$OBJEXT||g\"`"
Packit Service c5cf8c
        if test "$fobjtype" != "$cobjtype" ; then
Packit Service c5cf8c
            AC_MSG_ERROR([****  Incompatible Fortran and C Object File Types!  ****
Packit Service c5cf8c
F77 Object File Type produced by \"${F77} ${FFLAGS}\" is : ${fobjtype}.
Packit Service c5cf8c
 C  Object File Type produced by \"${CC} ${CFLAGS}\" is : ${cobjtype}.])
Packit Service c5cf8c
        fi
Packit Service c5cf8c
    fi
Packit Service c5cf8c
fi
Packit Service c5cf8c
])
Packit Service c5cf8c
dnl
Packit Service c5cf8c
dnl /*D
Packit Service c5cf8c
dnl PAC_F77_WORKS_WITH_CPP
Packit Service c5cf8c
dnl
Packit Service c5cf8c
dnl Checks if Fortran 77 compiler works with C preprocessor
Packit Service c5cf8c
dnl
Packit Service c5cf8c
dnl Most systems allow the Fortran compiler to process .F and .F90 files
Packit Service c5cf8c
dnl using the C preprocessor.  However, some systems either do not
Packit Service c5cf8c
dnl allow this or have serious bugs (OSF Fortran compilers have a bug
Packit Service c5cf8c
dnl that generates an error message from cpp).  The following test
Packit Service c5cf8c
dnl checks to see if .F works, and if not, whether "cpp -P -C" can be used
Packit Service c5cf8c
dnl D*/
Packit Service c5cf8c
AC_DEFUN([PAC_F77_WORKS_WITH_CPP],[
Packit Service c5cf8c
AC_REQUIRE([AC_PROG_CPP])
Packit Service c5cf8c
AC_MSG_CHECKING([whether Fortran 77 compiler processes .F files with C preprocessor])
Packit Service c5cf8c
AC_LANG_PUSH([Fortran 77])
Packit Service c5cf8c
saved_f77_ext=${ac_ext}
Packit Service c5cf8c
ac_ext="F"
Packit Service c5cf8c
saved_FFLAGS="$FFLAGS"
Packit Service c5cf8c
FFLAGS="$FFLAGS $CPPFLAGS"
Packit Service c5cf8c
AC_LANG_CONFTEST([
Packit Service c5cf8c
    AC_LANG_SOURCE([
Packit Service c5cf8c
        program main
Packit Service c5cf8c
#define ASIZE 10
Packit Service c5cf8c
        integer a(ASIZE)
Packit Service c5cf8c
        end
Packit Service c5cf8c
    ])
Packit Service c5cf8c
])
Packit Service c5cf8c
AC_COMPILE_IFELSE([],[
Packit Service c5cf8c
    pac_cv_f77_accepts_F=yes
Packit Service c5cf8c
    ifelse([$1],[],[],[$1=""])
Packit Service c5cf8c
],[
Packit Service c5cf8c
    pac_cv_f77_accepts_F=no
Packit Service c5cf8c
    ifelse([$1],[],[:],[$1="false"])
Packit Service c5cf8c
])
Packit Service c5cf8c
# Restore Fortran 77's ac_ext but not FFLAGS
Packit Service c5cf8c
ac_ext="$saved_f77_ext"
Packit Service c5cf8c
Packit Service c5cf8c
if test "$pac_cv_f77_accepts_F" != "yes" ; then
Packit Service c5cf8c
    pac_cpp_f77="$ac_cpp -C -P conftest.F > conftest.$ac_ext"
Packit Service c5cf8c
    PAC_RUNLOG_IFELSE([$pac_cpp_f77],[
Packit Service c5cf8c
        if test -s conftest.${ac_ext} ; then
Packit Service c5cf8c
            AC_COMPILE_IFELSE([],[
Packit Service c5cf8c
                pac_cv_f77_accepts_F="no, use cpp"
Packit Service c5cf8c
                ifelse([$1],[],[],[$1="$CPP -C -P"])
Packit Service c5cf8c
            ],[])
Packit Service c5cf8c
            rm -f conftest.${ac_ext}
Packit Service c5cf8c
        fi
Packit Service c5cf8c
    ],[])
Packit Service c5cf8c
fi
Packit Service c5cf8c
FFLAGS="$saved_FFLAGS"
Packit Service c5cf8c
rm -f conftest.F
Packit Service c5cf8c
AC_LANG_POP([Fortran 77])
Packit Service c5cf8c
AC_MSG_RESULT([$pac_cv_f77_accepts_F])
Packit Service c5cf8c
])
Packit Service c5cf8c
dnl
Packit Service c5cf8c
dnl /*D 
Packit Service c5cf8c
dnl PAC_PROG_F77_CRAY_POINTER - Check if Fortran 77 supports Cray-style pointer.
Packit Service c5cf8c
dnl                             If so, set pac_cv_prog_f77_has_pointer to yes
Packit Service c5cf8c
dnl                             and find out if any extra compiler flag is
Packit Service c5cf8c
dnl                             needed and set it as CRAYPTR_FFLAGS.
Packit Service c5cf8c
dnl                             i.e. CRAYPTR_FFLAGS is meaningful only if
Packit Service c5cf8c
dnl                             pac_cv_prog_f77_has_pointer = yes.
Packit Service c5cf8c
dnl
Packit Service c5cf8c
dnl Synopsis:
Packit Service c5cf8c
dnl   PAC_PROG_F77_CRAY_POINTER([action-if-true],[action-if-false])
Packit Service c5cf8c
dnl D*/
Packit Service c5cf8c
AC_DEFUN([PAC_PROG_F77_CRAY_POINTER],[
Packit Service c5cf8c
AC_CACHE_CHECK([whether Fortran 77 supports Cray-style pointer],
Packit Service c5cf8c
pac_cv_prog_f77_has_pointer,[
Packit Service c5cf8c
AC_LANG_PUSH([Fortran 77])
Packit Service c5cf8c
AC_LANG_CONFTEST([
Packit Service c5cf8c
    AC_LANG_PROGRAM([],[
Packit Service c5cf8c
        integer M
Packit Service c5cf8c
        pointer (MPTR,M)
Packit Service c5cf8c
        data MPTR/0/
Packit Service c5cf8c
    ])
Packit Service c5cf8c
])
Packit Service c5cf8c
saved_FFLAGS="$FFLAGS"
Packit Service c5cf8c
pac_cv_prog_f77_has_pointer=no
Packit Service c5cf8c
CRAYPTR_FFLAGS=""
Packit Service c5cf8c
for ptrflag in '' '-fcray-pointer' ; do
Packit Service c5cf8c
    FFLAGS="$saved_FFLAGS $ptrflag"
Packit Service c5cf8c
    AC_COMPILE_IFELSE([], [
Packit Service c5cf8c
        pac_cv_prog_f77_has_pointer=yes
Packit Service c5cf8c
        CRAYPTR_FFLAGS="$ptrflag"
Packit Service c5cf8c
        break
Packit Service c5cf8c
    ])
Packit Service c5cf8c
done
Packit Service c5cf8c
dnl Restore FFLAGS first, since user may not want to modify FFLAGS
Packit Service c5cf8c
FFLAGS="$saved_FFLAGS"
Packit Service c5cf8c
dnl remove conftest after ac_lang_conftest
Packit Service c5cf8c
rm -f conftest.$ac_ext
Packit Service c5cf8c
AC_LANG_POP([Fortran 77])
Packit Service c5cf8c
])
Packit Service c5cf8c
if test "$pac_cv_prog_f77_has_pointer" = "yes" ; then
Packit Service c5cf8c
    AC_MSG_CHECKING([for Fortran 77 compiler flag for Cray-style pointer])
Packit Service c5cf8c
    if test "X$CRAYPTR_FFLAGS" != "X" ; then
Packit Service c5cf8c
        AC_MSG_RESULT([$CRAYPTR_FFLAGS])
Packit Service c5cf8c
    else
Packit Service c5cf8c
        AC_MSG_RESULT([none])
Packit Service c5cf8c
    fi
Packit Service c5cf8c
    ifelse([$1],[],[:],[$1])
Packit Service c5cf8c
else
Packit Service c5cf8c
    ifelse([$2],[],[:],[$2])
Packit Service c5cf8c
fi
Packit Service c5cf8c
])
Packit Service c5cf8c
dnl
Packit Service c5cf8c
dnl
Packit Service c5cf8c
dnl PAC_F77_INIT_WORKS_WITH_C
Packit Service c5cf8c
dnl
Packit Service c5cf8c
AC_DEFUN([PAC_F77_INIT_WORKS_WITH_C],[
Packit Service c5cf8c
AC_REQUIRE([AC_HEADER_STDC])
Packit Service c5cf8c
AC_MSG_CHECKING([whether Fortran init will work with C])
Packit Service c5cf8c
pac_f_init_works_with_c=unknown
Packit Service c5cf8c
AC_LANG_PUSH([Fortran 77])
Packit Service c5cf8c
AC_COMPILE_IFELSE([
Packit Service c5cf8c
    AC_LANG_SOURCE([
Packit Service c5cf8c
        subroutine minit()
Packit Service c5cf8c
        common /m1/ vc, vc2
Packit Service c5cf8c
        character*1 vc(1,1), vc2(1)
Packit Service c5cf8c
        common /m2/ vd
Packit Service c5cf8c
        integer vd
Packit Service c5cf8c
        save /m1/, /m2/
Packit Service c5cf8c
        call minitc( vc, vc2, vd )
Packit Service c5cf8c
        end
Packit Service c5cf8c
    ])
Packit Service c5cf8c
],[
Packit Service c5cf8c
    PAC_RUNLOG([mv conftest.$OBJEXT pac_f77conftest.$OBJEXT])
Packit Service c5cf8c
    saved_LIBS="$LIBS"
Packit Service c5cf8c
    # This test checks if Fortran init can be done in pure C environment,
Packit Service c5cf8c
    # i.e. no FLIBS in linking, so don't put FLIBS in LIBS below
Packit Service c5cf8c
    dnl LIBS="pac_f77conftest.$OBJEXT $FLIBS $LIBS"
Packit Service c5cf8c
    LIBS="pac_f77conftest.$OBJEXT $LIBS"
Packit Service c5cf8c
    AC_LANG_PUSH([C])
Packit Service c5cf8c
    AC_LINK_IFELSE([
Packit Service c5cf8c
        AC_LANG_SOURCE([
Packit Service c5cf8c
#if defined(HAVE_STDIO_H) || defined(STDC_HEADERS)
Packit Service c5cf8c
#include <stdio.h>
Packit Service c5cf8c
#endif
Packit Service c5cf8c
#ifdef F77_NAME_UPPER
Packit Service c5cf8c
#define minit_ MINIT
Packit Service c5cf8c
#elif defined(F77_NAME_LOWER) || defined(F77_NAME_MIXED)
Packit Service c5cf8c
#define minit_ minit
Packit Service c5cf8c
#endif
Packit Service c5cf8c
extern void minit_(void);
Packit Service c5cf8c
int main( int argc, char **argv )
Packit Service c5cf8c
{
Packit Service c5cf8c
    minit_();
Packit Service c5cf8c
    return 0;
Packit Service c5cf8c
}
Packit Service c5cf8c
char *v1 = 0;
Packit Service c5cf8c
char *vc2 = 0;
Packit Service c5cf8c
int  v2 = 0;
Packit Service c5cf8c
void minitc_( char *dv1, int d, char *dv2, int d2, int dv3 );
Packit Service c5cf8c
void minitc_( char *dv1, int d, char *dv2, int d2, int dv3 )
Packit Service c5cf8c
{
Packit Service c5cf8c
v1 = dv1;
Packit Service c5cf8c
v2 = dv3;
Packit Service c5cf8c
vc2 = dv2;
Packit Service c5cf8c
*vc2 = ' ';
Packit Service c5cf8c
}
Packit Service c5cf8c
        ])
Packit Service c5cf8c
    ],[pac_f_init_works_with_c=yes],[pac_f_init_works_with_c=no])
Packit Service c5cf8c
    AC_LANG_POP([C])
Packit Service c5cf8c
    LIBS="$saved_LIBS"
Packit Service c5cf8c
    rm -f pac_f77conftest.$OBJEXT
Packit Service c5cf8c
])
Packit Service c5cf8c
AC_LANG_POP([Fortran 77])
Packit Service c5cf8c
AC_MSG_RESULT([$pac_f_init_works_with_c])
Packit Service c5cf8c
])
Packit Service c5cf8c
dnl
Packit Service c5cf8c
dnl PAC_F77_LOGICALS_IN_C(MPI_FINT)
Packit Service c5cf8c
dnl
Packit Service c5cf8c
dnl where MPI_FINT is the C type for Fortran integer.
Packit Service c5cf8c
dnl
Packit Service c5cf8c
dnl Use a Fortran main program.  This simplifies some steps, 
Packit Service c5cf8c
dnl since getting all of the Fortran libraries (including shared 
Packit Service c5cf8c
dnl libraries that are not in the default library search path) can 
Packit Service c5cf8c
dnl be tricky.  Specifically, The PROG_F77_RUN_PROC_FROM_C failed with 
Packit Service c5cf8c
dnl some installations of the Portland group compiler.
Packit Service c5cf8c
dnl
Packit Service c5cf8c
dnl We'd also like to check other values for .TRUE. and .FALSE. to see
Packit Service c5cf8c
dnl if the compiler allows (or uses) more than one value (some DEC compilers,
Packit Service c5cf8c
dnl for example, used the high (sign) bit to indicate true and false; the 
Packit Service c5cf8c
dnl rest of the bits were ignored.  For now, we'll assume that there are 
Packit Service c5cf8c
dnl unique true and false values.
Packit Service c5cf8c
dnl
Packit Service c5cf8c
AC_DEFUN([PAC_F77_LOGICALS_IN_C],[
Packit Service c5cf8c
AC_REQUIRE([AC_HEADER_STDC])
Packit Service c5cf8c
AC_REQUIRE([PAC_PROG_F77_NAME_MANGLE])
Packit Service c5cf8c
pac_mpi_fint="$1"
Packit Service c5cf8c
AC_MSG_CHECKING([for values of Fortran logicals])
Packit Service c5cf8c
AC_CACHE_VAL(pac_cv_prog_f77_true_false_value,[
Packit Service c5cf8c
pac_cv_prog_f77_true_false_value=""
Packit Service c5cf8c
AC_LANG_PUSH([C])
Packit Service c5cf8c
AC_COMPILE_IFELSE([
Packit Service c5cf8c
    AC_LANG_SOURCE([
Packit Service c5cf8c
#if defined(HAVE_STDIO_H) || defined(STDC_HEADERS)
Packit Service c5cf8c
#include <stdio.h>
Packit Service c5cf8c
#endif
Packit Service c5cf8c
#if defined(HAVE_STDLIB_H) || defined(STDC_HEADERS)
Packit Service c5cf8c
#include <stdlib.h>
Packit Service c5cf8c
#endif
Packit Service c5cf8c
#ifdef F77_NAME_UPPER
Packit Service c5cf8c
#define ftest_ FTEST
Packit Service c5cf8c
#elif defined(F77_NAME_LOWER) || defined(F77_NAME_MIXED)
Packit Service c5cf8c
#define ftest_ ftest
Packit Service c5cf8c
#endif
Packit Service c5cf8c
void ftest_( $pac_mpi_fint *, $pac_mpi_fint *);
Packit Service c5cf8c
void ftest_( $pac_mpi_fint *itrue, $pac_mpi_fint *ifalse )
Packit Service c5cf8c
{
Packit Service c5cf8c
  FILE *f = fopen("conftestval","w");
Packit Service c5cf8c
  if (!f) exit(1);
Packit Service c5cf8c
  fprintf( f, "%d %d\n", *itrue, *ifalse );
Packit Service c5cf8c
  fclose(f);
Packit Service c5cf8c
}
Packit Service c5cf8c
    ])
Packit Service c5cf8c
],[
Packit Service c5cf8c
    PAC_RUNLOG([mv conftest.$OBJEXT pac_conftest.$OBJEXT])
Packit Service c5cf8c
    saved_LIBS="$LIBS"
Packit Service c5cf8c
    LIBS="pac_conftest.$OBJEXT $saved_LIBS"
Packit Service c5cf8c
    AC_LANG_PUSH([Fortran 77])
Packit Service c5cf8c
    AC_RUN_IFELSE([
Packit Service c5cf8c
        AC_LANG_SOURCE([
Packit Service c5cf8c
            program main
Packit Service c5cf8c
            logical itrue, ifalse
Packit Service c5cf8c
            itrue = .TRUE.
Packit Service c5cf8c
            ifalse = .FALSE.
Packit Service c5cf8c
            call ftest( itrue, ifalse )
Packit Service c5cf8c
            end
Packit Service c5cf8c
        ])
Packit Service c5cf8c
    ],[
Packit Service c5cf8c
        pac_cv_prog_f77_true_false_value="`cat conftestval`"
Packit Service c5cf8c
    ],[
Packit Service c5cf8c
        AC_MSG_WARN([Failed to build/run program to determine Fortran logical values.])
Packit Service c5cf8c
    ],[
Packit Service c5cf8c
        # Cross-Compiling.  Allow the user to set the values
Packit Service c5cf8c
        if test -n "$CROSS_F77_TRUE_VALUE" -a -n "$CROSS_F77_FALSE_VALUE" ; then
Packit Service c5cf8c
            pac_cv_prog_f77_true_false_value="$CROSS_F77_TRUE_VALUE $CROSS_F77_FALSE_VALUE"
Packit Service c5cf8c
        else
Packit Service c5cf8c
            AC_MSG_WARN([Either CROSS_F77_TRUE_VALUE="$CROSS_F77_TRUE_VALUE" or CROSS_F77_FALSE_VALUE="$CROSS_F77_FALSE_VALUE" is not set.])
Packit Service c5cf8c
        fi
Packit Service c5cf8c
    ])
Packit Service c5cf8c
    AC_LANG_POP([Fortran 77])
Packit Service c5cf8c
    LIBS="$saved_LIBS"
Packit Service c5cf8c
    rm -f pac_conftest.$OBJEXT
Packit Service c5cf8c
])
Packit Service c5cf8c
AC_LANG_POP([C])
Packit Service c5cf8c
])
Packit Service c5cf8c
dnl Endof ac_cache_val
Packit Service c5cf8c
if test "X$pac_cv_prog_f77_true_false_value" != "X" ; then
Packit Service c5cf8c
    true_val="`echo $pac_cv_prog_f77_true_false_value | sed -e 's/ .*//g'`"
Packit Service c5cf8c
    false_val="`echo $pac_cv_prog_f77_true_false_value | sed -e 's/.*  *//g'`"
Packit Service c5cf8c
    if test -n "$true_val" -a -n "$false_val" ; then
Packit Service c5cf8c
        AC_MSG_RESULT([True is $true_val and False is $false_val])
Packit Service c5cf8c
    else
Packit Service c5cf8c
        AC_MSG_RESULT([could not determine])
Packit Service c5cf8c
    fi
Packit Service c5cf8c
fi
Packit Service c5cf8c
if test -n "$true_val" -a -n "$false_val" ; then
Packit Service c5cf8c
    AC_DEFINE(F77_TRUE_VALUE_SET,1,[Define if we know the value of Fortran true and false])
Packit Service c5cf8c
    AC_DEFINE_UNQUOTED(F77_TRUE_VALUE,$true_val,[The value of true in Fortran])
Packit Service c5cf8c
    AC_DEFINE_UNQUOTED(F77_FALSE_VALUE,$false_val,[The value of false in Fortran])
Packit Service c5cf8c
fi
Packit Service c5cf8c
])
Packit Service c5cf8c
dnl/*D
Packit Service c5cf8c
dnl PAC_PROG_F77_MISMATCHED_ARGS([option],[AllOnly]) - Determine whether the 
Packit Service c5cf8c
dnl Fortran compiler allows routines to be called with different 
Packit Service c5cf8c
dnl argument types.  If not, attempts to determine a command-line argument 
Packit Service c5cf8c
dnl that permits such use 
Packit Service c5cf8c
dnl (The Fortran standard prohibits this usage)
Packit Service c5cf8c
dnl
Packit Service c5cf8c
dnl option is set to the compiler option to use.
Packit Service c5cf8c
dnl if AllOnly is yes (literal, not variable with value), then only consider 
Packit Service c5cf8c
dnl options that turn off checking
Packit Service c5cf8c
dnl for all routines
Packit Service c5cf8c
dnl
Packit Service c5cf8c
dnl The NAG Fortran compiler, nagfor, is known to enforce this part of the
Packit Service c5cf8c
dnl Fortran standard.
Packit Service c5cf8c
dnl D*/
Packit Service c5cf8c
AC_DEFUN([PAC_PROG_F77_MISMATCHED_ARGS],[
Packit Service c5cf8c
AC_MSG_CHECKING([whether $F77 allows mismatched arguments])
Packit Service c5cf8c
if test "X$pac_cv_prog_f77_mismatched_args" = X ; then
Packit Service c5cf8c
    pac_cv_prog_f77_mismatched_args_parm=""
Packit Service c5cf8c
    pac_cv_prog_f77_mismatched_args=no
Packit Service c5cf8c
    AC_LANG_PUSH([Fortran 77])
Packit Service c5cf8c
    AC_COMPILE_IFELSE([
Packit Service c5cf8c
       AC_LANG_SOURCE([
Packit Service c5cf8c
        program main
Packit Service c5cf8c
        integer a
Packit Service c5cf8c
        real b
Packit Service c5cf8c
        character c
Packit Service c5cf8c
        call foo1(a)
Packit Service c5cf8c
        call foo1(b)
Packit Service c5cf8c
        call foo1(c)
Packit Service c5cf8c
        end
Packit Service c5cf8c
])],[pac_cv_prog_f77_mismatched_args=yes])
Packit Service c5cf8c
    if test "$pac_cv_prog_f77_mismatched_args" != "yes" ; then
Packit Service c5cf8c
        # try again with -wmismatch=foo1
Packit Service c5cf8c
        save_FFLAGS="$FFLAGS"
Packit Service c5cf8c
	# The best solution is to turn off errors on particular routines
Packit Service c5cf8c
	# if that isn't possible (e.g., too many of them), then
Packit Service c5cf8c
	# just try arguments that turn off all checking
Packit Service c5cf8c
	for flags in ifelse($2,yes,,"-wmismatch=foo1") "-mismatch" ; do
Packit Service c5cf8c
            testok=no
Packit Service c5cf8c
            FFLAGS="$FFLAGS $flags"
Packit Service c5cf8c
            AC_COMPILE_IFELSE([
Packit Service c5cf8c
            AC_LANG_SOURCE([
Packit Service c5cf8c
        program main
Packit Service c5cf8c
        integer a
Packit Service c5cf8c
        real b
Packit Service c5cf8c
        character c
Packit Service c5cf8c
        call foo1(a)
Packit Service c5cf8c
        call foo1(b)
Packit Service c5cf8c
        call foo1(c)
Packit Service c5cf8c
        end
Packit Service c5cf8c
])],[testok=yes])
Packit Service c5cf8c
            FFLAGS="$save_FFLAGS"
Packit Service c5cf8c
            if test "$testok" = yes ; then break ; fi
Packit Service c5cf8c
        done
Packit Service c5cf8c
        if test "$testok" = yes ; then 
Packit Service c5cf8c
	    pac_cv_prog_f77_mismatched_args_parm="$flags"
Packit Service c5cf8c
            pac_cv_prog_f77_mismatched_args="yes, with $pac_cv_prog_f77_mismatched_args_parm"
Packit Service c5cf8c
        fi
Packit Service c5cf8c
    fi
Packit Service c5cf8c
    AC_LANG_POP([Fortran 77])
Packit Service c5cf8c
fi
Packit Service c5cf8c
AC_MSG_RESULT($pac_cv_prog_f77_mismatched_args)
Packit Service c5cf8c
if test "$pac_cv_prog_f77_mismatched_args" = no ; then
Packit Service c5cf8c
    AC_MSG_ERROR([The Fortran compiler $F77 will not compile files that call 
Packit Service c5cf8c
the same routine with arguments of different types.])
Packit Service c5cf8c
fi
Packit Service c5cf8c
Packit Service c5cf8c
ifelse($1,,,[$1=$pac_cv_prog_f77_mismatched_args_parm])
Packit Service c5cf8c
])