mirror of
git://git.sv.gnu.org/autoconf
synced 2025-01-18 10:45:15 +08:00
6cfdc56489
This patch adds the AC_F77_CRAY_POINTERS and AC_FC_CRAY_POINTERS macros, which test if the Fortran compiler supports Cray pointers. The macros are written such that the tests share a common backend (_AC_FC_CRAY_POINTERS) which works on both F77 and FC compilers. Wrappers are provided to address any future potential compatibility issues. The macros include additional tests for particular flags required by GFortran and PGI compilers. The current set of flags is sparse, but can be extended for other compilers if needed. Documentation and a minimal test of the macro have been included. Two minor variable name typos (@EXEEXT@ as @EEXEXT@) were also fixed in two of the other Fortran tests.
1280 lines
25 KiB
Plaintext
1280 lines
25 KiB
Plaintext
# -*- Autotest -*-
|
|
|
|
AT_BANNER([Fortran low level compiling/preprocessing macros.])
|
|
|
|
# Copyright (C) 2000-2001, 2003, 2008-2017, 2020-2021 Free Software
|
|
# Foundation, Inc.
|
|
#
|
|
# This program is free software: you can redistribute it and/or modify
|
|
# it under the terms of the GNU General Public License as published by
|
|
# the Free Software Foundation, either version 3 of the License, or
|
|
# (at your option) any later version.
|
|
#
|
|
# This program is distributed in the hope that it will be useful,
|
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
# GNU General Public License for more details.
|
|
#
|
|
# You should have received a copy of the GNU General Public License
|
|
# along with this program. If not, see <https://www.gnu.org/licenses/>.
|
|
|
|
# Since the macros which compile are required by most tests, check
|
|
# them first. But remember that looking for a compiler is even more
|
|
# primitive, so check those first.
|
|
|
|
|
|
## --------------------- ##
|
|
## Fortran 77 Compiler. ##
|
|
## --------------------- ##
|
|
|
|
|
|
AT_CHECK_MACRO([GNU Fortran 77],
|
|
[[AC_LANG(Fortran 77)
|
|
AC_LANG_COMPILER
|
|
|
|
: > conftest.f
|
|
if AC_TRY_COMMAND([$F77 --version | grep GNU >&2]) \
|
|
|| AC_TRY_COMMAND([$F77 -v -c conftest.f 2>&1 | grep "f2c " >&2]); then
|
|
# Be sure to remove files which might be created by compilers that
|
|
# don't support --version, or by the second compile.
|
|
rm -f a.exe a.out conftest.f conftest.$ac_objext
|
|
# Has GNU in --version.
|
|
test "$G77" != yes &&
|
|
AC_MSG_ERROR([failed to recognize GNU Fortran 77 compiler])
|
|
else
|
|
# Be sure to remove files which might be created by compilers that
|
|
# don't support --version, or by the second compile.
|
|
rm -f a.exe a.out conftest.f conftest.$ac_objext
|
|
# Has not.
|
|
test "$G77" = yes &&
|
|
AC_MSG_ERROR([incorrectly recognized a GNU Fortran 77 compiler])
|
|
fi
|
|
]])
|
|
|
|
|
|
|
|
## ------------------ ##
|
|
## Fortran Compiler. ##
|
|
## ------------------ ##
|
|
|
|
|
|
AT_CHECK_MACRO([GNU Fortran],
|
|
[[AC_LANG(Fortran)
|
|
AC_LANG_COMPILER
|
|
|
|
# No Fortran compiler is known not to support "*.f".
|
|
AC_FC_SRCEXT([f])
|
|
|
|
# GNU Fortran is known to support freeform.
|
|
AC_FC_FREEFORM([],
|
|
[AC_MSG_WARN([Fortran does not accept free-form source])])
|
|
if test "$ac_compiler_gnu" = yes; then
|
|
case $FCFLAGS in
|
|
*-ffree-form*) ;;
|
|
*) AC_MSG_ERROR([failed to recognize GNU Fortran's -ffree-form option]);;
|
|
esac
|
|
fi
|
|
]])
|
|
|
|
|
|
## ------------------------- ##
|
|
## AC_OPENMP and Fortran 77. ##
|
|
## ------------------------- ##
|
|
|
|
AT_SETUP([AC_OPENMP and Fortran 77])
|
|
|
|
AT_DATA([configure.ac],
|
|
[[AC_INIT
|
|
AC_PROG_F77
|
|
AC_LANG([Fortran 77])
|
|
AC_OPENMP
|
|
if test "X$ac_cv_prog_f77_openmp" = Xunsupported; then
|
|
AS_EXIT([77])
|
|
fi
|
|
FFLAGS="$FFLAGS $OPENMP_FFLAGS"
|
|
AC_CONFIG_FILES([Makefile])
|
|
AC_OUTPUT
|
|
]])
|
|
|
|
AT_DATA([Makefile.in],
|
|
[[foo@EXEEXT@: foo.@OBJEXT@
|
|
@F77@ @FFLAGS@ @LDFLAGS@ -o $@ foo.@OBJEXT@
|
|
|
|
foo.@OBJEXT@: foo.f
|
|
@F77@ @FFLAGS@ -c foo.f
|
|
]])
|
|
|
|
AT_DATA([foo.f],
|
|
[[ program main
|
|
end
|
|
]])
|
|
|
|
# Prevent autoreconf from running aclocal, which might not exist,
|
|
# or could barf over warnings in third-party macro files.
|
|
AT_DATA([aclocal.m4])
|
|
ACLOCAL=true
|
|
export ACLOCAL
|
|
|
|
AT_CHECK([autoreconf -vi], [], [ignore], [ignore])
|
|
AT_CHECK_CONFIGURE
|
|
AT_CHECK_MAKE
|
|
|
|
AT_CLEANUP
|
|
|
|
|
|
## ---------------------- ##
|
|
## AC_OPENMP and Fortran. ##
|
|
## ---------------------- ##
|
|
|
|
AT_SETUP([AC_OPENMP and Fortran])
|
|
|
|
AT_DATA([configure.ac],
|
|
[[AC_INIT
|
|
AC_PROG_FC
|
|
AC_LANG([Fortran])
|
|
AC_OPENMP
|
|
if test "X$ac_cv_prog_fc_openmp" = Xunsupported; then
|
|
AS_EXIT([77])
|
|
fi
|
|
FCFLAGS="$FCFLAGS $OPENMP_FCFLAGS"
|
|
AC_CONFIG_FILES([Makefile])
|
|
AC_OUTPUT
|
|
]])
|
|
|
|
AT_DATA([Makefile.in],
|
|
[[foo@EXEEXT@: foo.@OBJEXT@
|
|
@FC@ @FCFLAGS@ @LDFLAGS@ -o $@ foo.@OBJEXT@
|
|
|
|
foo.@OBJEXT@: foo.f
|
|
@FC@ @FCFLAGS@ -c foo.f
|
|
]])
|
|
|
|
AT_DATA([foo.f],
|
|
[[ program main
|
|
end
|
|
]])
|
|
|
|
# Prevent autoreconf from running aclocal, which might not exist,
|
|
# or could barf over warnings in third-party macro files.
|
|
AT_DATA([aclocal.m4])
|
|
ACLOCAL=true
|
|
export ACLOCAL
|
|
|
|
AT_CHECK([autoreconf -vi], [], [ignore], [ignore])
|
|
AT_CHECK_CONFIGURE
|
|
AT_CHECK_MAKE
|
|
|
|
AT_CLEANUP
|
|
|
|
|
|
# We don't test the AC_F77_LIBRARY_LDFLAGS macro on its own because of
|
|
# (autoconf.info)Fortran Compiler:
|
|
# The macros 'AC_F77_DUMMY_MAIN' and 'AC_FC_DUMMY_MAIN' or
|
|
# 'AC_F77_MAIN' and 'AC_FC_MAIN' are probably also necessary to link
|
|
# C/C++ with Fortran; see below.
|
|
#
|
|
# and we would need libtool to create shared libraries.
|
|
|
|
# Further, for any sensible test of the AC_F{77,C}(_DUMMY)?_MAIN macros
|
|
# we also need to use AC_F{77,C}_WRAPPERS, in order to be able to actually
|
|
# call the functions.
|
|
|
|
## ------------------------ ##
|
|
## AC_F77_DUMMY_MAIN usage. ##
|
|
## ------------------------ ##
|
|
|
|
AT_SETUP([AC_F77_DUMMY_MAIN usage])
|
|
|
|
AT_CONFIGURE_AC([[
|
|
AC_PROG_F77
|
|
AC_F77_DUMMY_MAIN([], [AC_MSG_FAILURE([failed to determine F77 dummy main], [77])])
|
|
AC_F77_WRAPPERS
|
|
AC_PROG_CC
|
|
AC_CONFIG_FILES([Makefile])
|
|
]])
|
|
|
|
AT_DATA([Makefile.in],
|
|
[[
|
|
all: cprogram@EXEEXT@
|
|
|
|
cprogram@EXEEXT@: cprogram.@OBJEXT@ foobar.@OBJEXT@
|
|
@CC@ @CFLAGS@ @LDFLAGS@ -o $@ cprogram.@OBJEXT@ foobar.@OBJEXT@ @LIBS@ @FLIBS@
|
|
|
|
.SUFFIXES: .c .f .@OBJEXT@
|
|
.f.@OBJEXT@:
|
|
@F77@ @FFLAGS@ -c $<
|
|
.c.@OBJEXT@:
|
|
@CC@ @DEFS@ -I. @CPPFLAGS@ @CFLAGS@ -c $<
|
|
]])
|
|
|
|
AT_DATA([foobar.f],
|
|
[[C This is just a purely numeric routine, no I/O needed.
|
|
C Taken from autoconf.texi:Fortran Compiler.
|
|
subroutine foobar (x, y)
|
|
double precision x, y
|
|
y = 3.14159 * x
|
|
return
|
|
end
|
|
]])
|
|
|
|
AT_DATA([cprogram.c],
|
|
[[#include <config.h>
|
|
#include <math.h>
|
|
|
|
/* Taken from autoconf.texi:Fortran Compiler. */
|
|
#define FOOBAR_F77 F77_FUNC (foobar, FOOBAR)
|
|
#ifdef __cplusplus
|
|
extern "C" /* prevent C++ name mangling */
|
|
#endif
|
|
void FOOBAR_F77 (double *x, double *y);
|
|
|
|
/* Taken from autoconf.texi:Fortran Compiler. */
|
|
#ifdef F77_DUMMY_MAIN
|
|
# ifdef __cplusplus
|
|
extern "C"
|
|
# endif
|
|
int F77_DUMMY_MAIN () { return 1; }
|
|
#endif
|
|
|
|
int main(int argc, char *argv[])
|
|
{
|
|
double x = 2.7183, y;
|
|
FOOBAR_F77 (&x, &y);
|
|
if (fabs (8.539784097 - y) > 1.e-6)
|
|
return 1;
|
|
return 0;
|
|
}
|
|
]])
|
|
|
|
AT_CHECK_AUTOCONF
|
|
AT_CHECK_AUTOHEADER([], [
|
|
F77_DUMMY_MAIN
|
|
F77_FUNC
|
|
F77_FUNC_
|
|
FC_DUMMY_MAIN_EQ_F77
|
|
])
|
|
AT_CHECK_CONFIGURE
|
|
AT_CHECK_MAKE
|
|
AT_CHECK([./cprogram])
|
|
|
|
AT_CLEANUP
|
|
|
|
|
|
## ----------------------- ##
|
|
## AC_FC_DUMMY_MAIN usage. ##
|
|
## ----------------------- ##
|
|
|
|
AT_SETUP([AC_FC_DUMMY_MAIN usage])
|
|
|
|
AT_CONFIGURE_AC([[
|
|
AC_PROG_FC
|
|
AC_FC_FIXEDFORM
|
|
AC_FC_DUMMY_MAIN([], [AC_MSG_FAILURE([failed to determine FC dummy main], [77])])
|
|
AC_FC_WRAPPERS
|
|
AC_PROG_CC
|
|
AC_CONFIG_FILES([Makefile])
|
|
]])
|
|
|
|
AT_DATA([Makefile.in],
|
|
[[
|
|
all: cprogram@EXEEXT@
|
|
|
|
cprogram@EXEEXT@: cprogram.@OBJEXT@ foobar.@OBJEXT@
|
|
@CC@ @CFLAGS@ @LDFLAGS@ -o $@ cprogram.@OBJEXT@ foobar.@OBJEXT@ @LIBS@ @FCLIBS@
|
|
|
|
.SUFFIXES: .c .f .@OBJEXT@
|
|
.f.@OBJEXT@:
|
|
@FC@ @FCFLAGS@ -c $<
|
|
.c.@OBJEXT@:
|
|
@CC@ @DEFS@ -I. @CPPFLAGS@ @CFLAGS@ -c $<
|
|
]])
|
|
|
|
AT_DATA([foobar.f],
|
|
[[C This is just a purely numeric routine, no I/O needed.
|
|
C Taken from autoconf.texi:Fortran Compiler.
|
|
subroutine foobar (x, y)
|
|
double precision x, y
|
|
y = 3.14159 * x
|
|
return
|
|
end
|
|
]])
|
|
|
|
AT_DATA([cprogram.c],
|
|
[[#include <config.h>
|
|
#include <math.h>
|
|
|
|
/* Taken from autoconf.texi:Fortran Compiler. */
|
|
#define FOOBAR_FC FC_FUNC (foobar, FOOBAR)
|
|
#ifdef __cplusplus
|
|
extern "C" /* prevent C++ name mangling */
|
|
#endif
|
|
void FOOBAR_FC(double *x, double *y);
|
|
|
|
/* Taken from autoconf.texi:Fortran Compiler. */
|
|
#ifdef FC_DUMMY_MAIN
|
|
# ifdef __cplusplus
|
|
extern "C"
|
|
# endif
|
|
int FC_DUMMY_MAIN () { return 1; }
|
|
#endif
|
|
|
|
int main (int argc, char *argv[])
|
|
{
|
|
double x = 2.7183, y;
|
|
FOOBAR_FC (&x, &y);
|
|
if (fabs (8.539784097 - y) > 1.e-6)
|
|
return 1;
|
|
return 0;
|
|
}
|
|
]])
|
|
|
|
AT_CHECK_AUTOCONF
|
|
AT_CHECK_AUTOHEADER([], [
|
|
FC_DUMMY_MAIN
|
|
FC_DUMMY_MAIN_EQ_F77
|
|
FC_FUNC
|
|
FC_FUNC_
|
|
])
|
|
AT_CHECK_CONFIGURE
|
|
AT_CHECK_MAKE
|
|
AT_CHECK([./cprogram])
|
|
|
|
AT_CLEANUP
|
|
|
|
|
|
## ------------------ ##
|
|
## AC_F77_MAIN usage. ##
|
|
## ------------------ ##
|
|
|
|
AT_SETUP([AC_F77_MAIN usage])
|
|
|
|
AT_CONFIGURE_AC([[
|
|
AC_PROG_F77
|
|
AC_F77_MAIN
|
|
AC_F77_WRAPPERS
|
|
AC_PROG_CC
|
|
AC_CONFIG_FILES([Makefile])
|
|
]])
|
|
|
|
AT_DATA([Makefile.in],
|
|
[[
|
|
all: cprogram@EXEEXT@
|
|
|
|
cprogram@EXEEXT@: cprogram.@OBJEXT@ foobar.@OBJEXT@
|
|
@CC@ @CFLAGS@ @LDFLAGS@ -o $@ cprogram.@OBJEXT@ foobar.@OBJEXT@ @LIBS@ @FLIBS@
|
|
|
|
.SUFFIXES: .c .f .@OBJEXT@
|
|
.f.@OBJEXT@:
|
|
@F77@ @FFLAGS@ -c $<
|
|
.c.@OBJEXT@:
|
|
@CC@ @DEFS@ -I. @CPPFLAGS@ @CFLAGS@ -c $<
|
|
]])
|
|
|
|
AT_DATA([foobar.f],
|
|
[[C This uses Fortran I/O, so is likely to require Fortran startup.
|
|
subroutine foobar (x)
|
|
integer x
|
|
if (x == 42) then
|
|
write(*,*) 'some output from Fortran sources'
|
|
end if
|
|
end
|
|
]])
|
|
|
|
AT_DATA([cprogram.c],
|
|
[[#include <config.h>
|
|
#include <stdio.h>
|
|
|
|
/* Taken from autoconf.texi:Fortran Compiler. */
|
|
#define FOOBAR_F77 F77_FUNC (foobar, FOOBAR)
|
|
#ifdef __cplusplus
|
|
extern "C" /* prevent C++ name mangling */
|
|
#endif
|
|
void FOOBAR_F77 (int *x);
|
|
|
|
/* Taken from autoconf.texi:Fortran Compiler. */
|
|
#ifdef __cplusplus
|
|
extern "C"
|
|
#endif
|
|
int F77_MAIN (int argc, char *argv[]);
|
|
|
|
int F77_MAIN (int argc, char *argv[])
|
|
{
|
|
int x = 42;
|
|
puts ("output from C main");
|
|
fflush (stdout);
|
|
FOOBAR_F77 (&x);
|
|
puts ("more output from C main");
|
|
return 0;
|
|
}
|
|
]])
|
|
|
|
AT_CHECK_AUTOCONF
|
|
AT_CHECK_AUTOHEADER([], [
|
|
F77_DUMMY_MAIN
|
|
F77_FUNC
|
|
F77_FUNC_
|
|
F77_MAIN
|
|
FC_DUMMY_MAIN_EQ_F77
|
|
])
|
|
AT_CHECK_CONFIGURE
|
|
AT_CHECK_MAKE
|
|
AT_CHECK([./cprogram], [], [output from C main
|
|
some output from Fortran sources
|
|
more output from C main
|
|
])
|
|
|
|
AT_CLEANUP
|
|
|
|
|
|
## ----------------- ##
|
|
## AC_FC_MAIN usage. ##
|
|
## ----------------- ##
|
|
|
|
AT_SETUP([AC_FC_MAIN usage])
|
|
|
|
AT_CONFIGURE_AC([[
|
|
AC_PROG_FC
|
|
AC_FC_FIXEDFORM
|
|
AC_FC_MAIN
|
|
AC_FC_WRAPPERS
|
|
AC_PROG_CC
|
|
AC_CONFIG_FILES([Makefile])
|
|
]])
|
|
|
|
AT_DATA([Makefile.in],
|
|
[[all: cprogram@EXEEXT@
|
|
|
|
cprogram@EXEEXT@: cprogram.@OBJEXT@ foobar.@OBJEXT@
|
|
@CC@ @CFLAGS@ @LDFLAGS@ -o $@ cprogram.@OBJEXT@ foobar.@OBJEXT@ @LIBS@ @FCLIBS@
|
|
|
|
.SUFFIXES: .c .f .@OBJEXT@
|
|
.f.@OBJEXT@:
|
|
@FC@ @FCFLAGS@ -c $<
|
|
.c.@OBJEXT@:
|
|
@CC@ @DEFS@ -I. @CPPFLAGS@ @CFLAGS@ -c $<
|
|
]])
|
|
|
|
AT_DATA([foobar.f],
|
|
[[C This uses Fortran I/O, so is likely to require Fortran startup.
|
|
subroutine foobar (x)
|
|
integer x
|
|
if (x == 42) then
|
|
write (*,*) 'some output from Fortran sources'
|
|
end if
|
|
end
|
|
]])
|
|
|
|
AT_DATA([cprogram.c],
|
|
[[#include <config.h>
|
|
#include <stdio.h>
|
|
|
|
/* Taken from autoconf.texi:Fortran Compiler. */
|
|
#define FOOBAR_FC FC_FUNC (foobar, FOOBAR)
|
|
#ifdef __cplusplus
|
|
extern "C" /* prevent C++ name mangling */
|
|
#endif
|
|
void FOOBAR_FC (int *x);
|
|
|
|
/* Taken from autoconf.texi:Fortran Compiler. */
|
|
#ifdef __cplusplus
|
|
extern "C"
|
|
#endif
|
|
int FC_MAIN (int argc, char *argv[]);
|
|
|
|
int FC_MAIN (int argc, char *argv[])
|
|
{
|
|
int x = 42;
|
|
puts ("output from C main");
|
|
fflush (stdout);
|
|
FOOBAR_FC (&x);
|
|
puts ("more output from C main");
|
|
return 0;
|
|
}
|
|
]])
|
|
|
|
AT_CHECK_AUTOCONF
|
|
AT_CHECK_AUTOHEADER([], [
|
|
FC_DUMMY_MAIN
|
|
FC_DUMMY_MAIN_EQ_F77
|
|
FC_FUNC
|
|
FC_FUNC_
|
|
FC_MAIN
|
|
])
|
|
AT_CHECK_CONFIGURE
|
|
AT_CHECK_MAKE
|
|
AT_CHECK([./cprogram], [], [output from C main
|
|
some output from Fortran sources
|
|
more output from C main
|
|
])
|
|
|
|
AT_CLEANUP
|
|
|
|
|
|
## ------------------ ##
|
|
## AC_F77_FUNC usage. ##
|
|
## ------------------ ##
|
|
|
|
AT_SETUP([AC_F77_FUNC usage])
|
|
|
|
AT_CONFIGURE_AC([[
|
|
AC_PROG_F77
|
|
AC_F77_FUNC([foobar])
|
|
AC_SUBST([foobar])
|
|
AC_PROG_CC
|
|
AC_CONFIG_FILES([cprogram.c:cprogram.in])
|
|
AC_CONFIG_FILES([Makefile])
|
|
]])
|
|
|
|
AT_DATA([Makefile.in],
|
|
[[
|
|
all: cprogram@EXEEXT@
|
|
|
|
cprogram@EXEEXT@: cprogram.@OBJEXT@ foobar.@OBJEXT@
|
|
@CC@ @CFLAGS@ @LDFLAGS@ -o $@ cprogram.@OBJEXT@ foobar.@OBJEXT@ @LIBS@ @FLIBS@
|
|
|
|
.SUFFIXES: .c .f .@OBJEXT@
|
|
.f.@OBJEXT@:
|
|
@F77@ @FFLAGS@ -c $<
|
|
.c.@OBJEXT@:
|
|
@CC@ @DEFS@ -I. @CPPFLAGS@ @CFLAGS@ -c $<
|
|
]])
|
|
|
|
AT_DATA([foobar.f],
|
|
[[ subroutine foobar (x)
|
|
integer x
|
|
x = 42
|
|
return
|
|
end
|
|
]])
|
|
|
|
AT_DATA([cprogram.in],
|
|
[[#include <config.h>
|
|
#include <math.h>
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" /* prevent C++ name mangling */
|
|
#endif
|
|
void @foobar@ (int *x);
|
|
|
|
/* Taken from autoconf.texi:Fortran Compiler. */
|
|
#ifdef F77_DUMMY_MAIN
|
|
# ifdef __cplusplus
|
|
extern "C"
|
|
# endif
|
|
int F77_DUMMY_MAIN () { return 1; }
|
|
#endif
|
|
|
|
int main(int argc, char *argv[])
|
|
{
|
|
int x;
|
|
@foobar@ (&x);
|
|
if (x != 42)
|
|
return 1;
|
|
return 0;
|
|
}
|
|
]])
|
|
|
|
AT_CHECK_AUTOCONF
|
|
AT_CHECK_AUTOHEADER([], [
|
|
F77_DUMMY_MAIN
|
|
FC_DUMMY_MAIN_EQ_F77
|
|
])
|
|
AT_CHECK_CONFIGURE
|
|
AT_CHECK_MAKE
|
|
AT_CHECK([./cprogram])
|
|
|
|
AT_CLEANUP
|
|
|
|
|
|
## ----------------- ##
|
|
## AC_FC_FUNC usage. ##
|
|
## ----------------- ##
|
|
|
|
AT_SETUP([AC_FC_FUNC usage])
|
|
|
|
AT_CONFIGURE_AC([[
|
|
AC_PROG_FC
|
|
AC_FC_FUNC([foobar])
|
|
AC_SUBST([foobar])
|
|
AC_PROG_CC
|
|
AC_CONFIG_FILES([cprogram.c:cprogram.in])
|
|
AC_CONFIG_FILES([Makefile])
|
|
]])
|
|
|
|
AT_DATA([Makefile.in],
|
|
[[
|
|
all: cprogram@EXEEXT@
|
|
|
|
cprogram@EXEEXT@: cprogram.@OBJEXT@ foobar.@OBJEXT@
|
|
@CC@ @CFLAGS@ @LDFLAGS@ -o $@ cprogram.@OBJEXT@ foobar.@OBJEXT@ @LIBS@ @FCLIBS@
|
|
|
|
.SUFFIXES: .c .f .@OBJEXT@
|
|
.f.@OBJEXT@:
|
|
@FC@ @FCFLAGS@ -c $<
|
|
.c.@OBJEXT@:
|
|
@CC@ @DEFS@ -I. @CPPFLAGS@ @CFLAGS@ -c $<
|
|
]])
|
|
|
|
AT_DATA([foobar.f],
|
|
[[ subroutine foobar (x)
|
|
integer x
|
|
x = 42
|
|
return
|
|
end
|
|
]])
|
|
|
|
AT_DATA([cprogram.in],
|
|
[[#include <config.h>
|
|
#include <math.h>
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" /* prevent C++ name mangling */
|
|
#endif
|
|
void @foobar@ (int *x);
|
|
|
|
/* Taken from autoconf.texi:Fortran Compiler. */
|
|
#ifdef FC_DUMMY_MAIN
|
|
# ifdef __cplusplus
|
|
extern "C"
|
|
# endif
|
|
int FC_DUMMY_MAIN () { return 1; }
|
|
#endif
|
|
|
|
int main(int argc, char *argv[])
|
|
{
|
|
int x;
|
|
@foobar@ (&x);
|
|
if (x != 42)
|
|
return 1;
|
|
return 0;
|
|
}
|
|
]])
|
|
|
|
AT_CHECK_AUTOCONF
|
|
AT_CHECK_AUTOHEADER([], [
|
|
FC_DUMMY_MAIN
|
|
FC_DUMMY_MAIN_EQ_F77
|
|
])
|
|
AT_CHECK_CONFIGURE
|
|
AT_CHECK_MAKE
|
|
AT_CHECK([./cprogram])
|
|
|
|
AT_CLEANUP
|
|
|
|
|
|
## ------------------- ##
|
|
## AC_FC_SRCEXT usage. ##
|
|
## ------------------- ##
|
|
|
|
AT_SETUP([AC_FC_SRCEXT usage])
|
|
|
|
AT_DATA([configure.ac],
|
|
[[AC_INIT
|
|
AC_PROG_FC
|
|
FCFLAGS_NOFREE=$FCFLAGS
|
|
AC_SUBST([FCFLAGS_NOFREE])
|
|
AC_FC_FREEFORM
|
|
# Unconditionally require .f to work.
|
|
AC_FC_SRCEXT([f])
|
|
# For each other extension, fail gracefully if it does not work:
|
|
# Not all compilers support all extensions/language versions.
|
|
m4@&t@_foreach([ext], [f77, f90, f95, f03, f08],
|
|
[AC_FC_SRCEXT(ext, ext[_object='foo]ext[.$(OBJEXT)'], ext[_object=])
|
|
AC_SUBST(ext[_object])])
|
|
AC_CONFIG_FILES([Makefile])
|
|
AC_OUTPUT
|
|
]])
|
|
|
|
AT_DATA([Makefile.in],
|
|
[[OBJEXT = @OBJEXT@
|
|
|
|
all: prog@EXEEXT@
|
|
prog@EXEEXT@: foof.@OBJEXT@ @f77_object@ @f90_object@ \
|
|
@f95_object@ @f03_object@ @f08_object@
|
|
@FC@ @FCFLAGS@ -o $@ foof.@OBJEXT@ @f77_object@ @f90_object@ \
|
|
@f95_object@ @f03_object@ @f08_object@
|
|
|
|
.SUFFIXES: .f .f77 .f90 .f95 .f03 .f08 .@OBJEXT@
|
|
.f.@OBJEXT@:
|
|
@FC@ -c @FCFLAGS_NOFREE@ @FCFLAGS_f@ $<
|
|
.f77.@OBJEXT@:
|
|
@FC@ -c @FCFLAGS_NOFREE@ @FCFLAGS_f77@ $<
|
|
.f90.@OBJEXT@:
|
|
@FC@ -c @FCFLAGS@ @FCFLAGS_f90@ $<
|
|
.f95.@OBJEXT@:
|
|
@FC@ -c @FCFLAGS@ @FCFLAGS_f95@ $<
|
|
.f03.@OBJEXT@:
|
|
@FC@ -c @FCFLAGS@ @FCFLAGS_f03@ $<
|
|
.f08.@OBJEXT@:
|
|
@FC@ -c @FCFLAGS@ @FCFLAGS_f08@ $<
|
|
]])
|
|
|
|
AT_DATA([foof.f],
|
|
[[ program main
|
|
end
|
|
]])
|
|
|
|
AT_DATA([foof77.f77],
|
|
[[ subroutine foof77
|
|
end
|
|
]])
|
|
|
|
AT_DATA([foof90.f90],
|
|
[[subroutine foof90
|
|
end
|
|
]])
|
|
|
|
AT_DATA([foof95.f95],
|
|
[[subroutine foof95
|
|
end
|
|
]])
|
|
|
|
AT_DATA([foof03.f03],
|
|
[[subroutine foof03
|
|
end
|
|
]])
|
|
|
|
AT_DATA([foof08.f08],
|
|
[[subroutine foof08
|
|
end
|
|
]])
|
|
|
|
AT_CHECK_AUTOCONF
|
|
AT_CHECK_CONFIGURE
|
|
AT_CHECK_MAKE
|
|
|
|
AT_CLEANUP
|
|
|
|
|
|
## ---------------------- ##
|
|
## AC_FC_PP_SRCEXT usage. ##
|
|
## ---------------------- ##
|
|
|
|
AT_SETUP([AC_FC_PP_SRCEXT usage])
|
|
|
|
AT_DATA([configure.ac],
|
|
[[AC_INIT
|
|
AC_PROG_FC
|
|
# Unconditionally require .f and .F to work.
|
|
AC_FC_PP_SRCEXT([f])
|
|
AC_FC_PP_SRCEXT([F])
|
|
# For each other extension, fail gracefully if it does not work:
|
|
# Not all compilers support all extensions/language versions.
|
|
m4@&t@_foreach([ext], [f77, f90, f95, f03, f08],
|
|
[AC_FC_PP_SRCEXT(ext, ext[_object='foo]ext[.$(OBJEXT)'], ext[_object=])
|
|
AC_SUBST(ext[_object])])
|
|
m4@&t@_foreach([ext], [F77, F90, F95, F03, F08],
|
|
[AC_FC_PP_SRCEXT(ext, ext[_object='bar]ext[.$(OBJEXT)'], ext[_object=])
|
|
AC_SUBST(ext[_object])])
|
|
AC_CONFIG_FILES([Makefile])
|
|
AC_OUTPUT
|
|
]])
|
|
|
|
AT_DATA([Makefile.in],
|
|
[[OBJEXT = @OBJEXT@
|
|
|
|
all: prog@EXEEXT@
|
|
prog@EXEEXT@: foof.@OBJEXT@ @f77_object@ @f90_object@ \
|
|
@f95_object@ @f03_object@ @f08_object@ \
|
|
barF.@OBJEXT@ @F77_object@ @F90_object@ \
|
|
@F95_object@ @F03_object@ @F08_object@
|
|
@FC@ @FCFLAGS@ -o $@ foof.@OBJEXT@ @f77_object@ @f90_object@ \
|
|
@f95_object@ @f03_object@ @f08_object@ \
|
|
barF.@OBJEXT@ @F77_object@ @F90_object@ \
|
|
@F95_object@ @F03_object@ @F08_object@
|
|
|
|
.SUFFIXES: .f .f77 .f90 .f95 .f03 .f08 .F .F77 .F90 .F95 .F03 .F08 .@OBJEXT@
|
|
.f.@OBJEXT@:
|
|
@FC@ -c @FCFLAGS@ @FCFLAGS_f@ $<
|
|
.f77.@OBJEXT@:
|
|
@FC@ -c @FCFLAGS@ @FCFLAGS_f77@ $<
|
|
.f90.@OBJEXT@:
|
|
@FC@ -c @FCFLAGS@ @FCFLAGS_f90@ $<
|
|
.f95.@OBJEXT@:
|
|
@FC@ -c @FCFLAGS@ @FCFLAGS_f95@ $<
|
|
.f03.@OBJEXT@:
|
|
@FC@ -c @FCFLAGS@ @FCFLAGS_f03@ $<
|
|
.f08.@OBJEXT@:
|
|
@FC@ -c @FCFLAGS@ @FCFLAGS_f08@ $<
|
|
.F.@OBJEXT@:
|
|
@FC@ -c @FCFLAGS@ @FCFLAGS_F@ $<
|
|
.F77.@OBJEXT@:
|
|
@FC@ -c @FCFLAGS@ @FCFLAGS_F77@ $<
|
|
.F90.@OBJEXT@:
|
|
@FC@ -c @FCFLAGS@ @FCFLAGS_F90@ $<
|
|
.F95.@OBJEXT@:
|
|
@FC@ -c @FCFLAGS@ @FCFLAGS_F95@ $<
|
|
.F03.@OBJEXT@:
|
|
@FC@ -c @FCFLAGS@ @FCFLAGS_F03@ $<
|
|
.F08.@OBJEXT@:
|
|
@FC@ -c @FCFLAGS@ @FCFLAGS_F08@ $<
|
|
]])
|
|
|
|
for ext in f77 f90 f95 f03 f08; do
|
|
cat > foo$ext.$ext <<EOF
|
|
subroutine foo$ext
|
|
#if 0
|
|
this is not correct fortran
|
|
#endif
|
|
end
|
|
EOF
|
|
done
|
|
|
|
for ext in F F77 F90 F95 F03 F08; do
|
|
cat > bar$ext.$ext <<EOF
|
|
subroutine bar$ext
|
|
#if 0
|
|
this is not correct fortran
|
|
#endif
|
|
end
|
|
EOF
|
|
done
|
|
|
|
AT_DATA([foof.f],
|
|
[[ program main
|
|
#if 0
|
|
this is not correct fortran
|
|
#endif
|
|
end
|
|
]])
|
|
|
|
AT_CHECK_AUTOCONF
|
|
AT_CHECK_CONFIGURE
|
|
AT_CHECK_MAKE
|
|
AT_CHECK([./prog])
|
|
|
|
AT_CLEANUP
|
|
|
|
|
|
## --------------- ##
|
|
## AC_FC_FREEFORM. ##
|
|
## --------------- ##
|
|
|
|
AT_SETUP([AC_FC_FREEFORM])
|
|
|
|
AT_DATA([configure.ac],
|
|
[[AC_INIT
|
|
AC_PROG_FC
|
|
AC_FC_FREEFORM
|
|
AC_CONFIG_FILES([Makefile])
|
|
AC_OUTPUT
|
|
]])
|
|
|
|
AT_DATA([Makefile.in],
|
|
[[prog: prog.@OBJEXT@
|
|
@FC@ @FCFLAGS@ -o $@ prog.@OBJEXT@ @LIBS@
|
|
|
|
.SUFFIXES: .f .@OBJEXT@
|
|
.f.@OBJEXT@:
|
|
@FC@ @FCFLAGS@ -c $<
|
|
]])
|
|
|
|
AT_DATA([prog.f],
|
|
[[program main
|
|
end
|
|
]])
|
|
|
|
AT_CHECK_AUTOCONF
|
|
AT_CHECK_CONFIGURE
|
|
AT_CHECK_MAKE
|
|
AT_CHECK([./prog])
|
|
|
|
AT_CLEANUP
|
|
|
|
|
|
## --------------------------------- ##
|
|
## AC_FC_FREEFORM with AC_FC_SRCEXT. ##
|
|
## --------------------------------- ##
|
|
|
|
AT_SETUP([AC_FC_FREEFORM with AC_FC_SRCEXT])
|
|
|
|
AT_DATA([configure.ac],
|
|
[[AC_INIT
|
|
AC_FC_SRCEXT([f90], [], [AS_EXIT([77])])
|
|
AC_PROG_FC
|
|
AC_FC_FREEFORM
|
|
AC_CONFIG_FILES([Makefile])
|
|
AC_OUTPUT
|
|
]])
|
|
|
|
AT_DATA([Makefile.in],
|
|
[[prog: prog.@OBJEXT@
|
|
@FC@ @FCFLAGS@ -o $@ prog.@OBJEXT@ @LIBS@
|
|
|
|
.SUFFIXES: .f90 .@OBJEXT@
|
|
.f90.@OBJEXT@:
|
|
@FC@ @FCFLAGS@ -c @FCFLAGS_f90@ $<
|
|
]])
|
|
|
|
AT_DATA([prog.f90],
|
|
[[program main
|
|
end
|
|
]])
|
|
|
|
AT_CHECK_AUTOCONF
|
|
AT_CHECK_CONFIGURE
|
|
AT_CHECK_MAKE
|
|
AT_CHECK([./prog])
|
|
|
|
AT_CLEANUP
|
|
|
|
|
|
## ---------------- ##
|
|
## AC_FC_FIXEDFORM. ##
|
|
## ---------------- ##
|
|
|
|
AT_SETUP([AC_FC_FIXEDFORM])
|
|
|
|
AT_DATA([configure.ac],
|
|
[[AC_INIT
|
|
AC_PROG_FC
|
|
AC_FC_FIXEDFORM
|
|
AC_CONFIG_FILES([Makefile])
|
|
AC_OUTPUT
|
|
]])
|
|
|
|
AT_DATA([Makefile.in],
|
|
[[prog: prog.@OBJEXT@
|
|
@FC@ @FCFLAGS@ -o $@ prog.@OBJEXT@ @LIBS@
|
|
|
|
.SUFFIXES: .f .@OBJEXT@
|
|
.f.@OBJEXT@:
|
|
@FC@ @FCFLAGS@ -c $<
|
|
]])
|
|
|
|
AT_DATA([prog.f],
|
|
[[ program main
|
|
C fixed-form style comment
|
|
end
|
|
]])
|
|
|
|
AT_CHECK_AUTOCONF
|
|
AT_CHECK_CONFIGURE
|
|
AT_CHECK_MAKE
|
|
AT_CHECK([./prog])
|
|
|
|
AT_CLEANUP
|
|
|
|
|
|
## ---------------------------------- ##
|
|
## AC_FC_FIXEDFORM with AC_FC_SRCEXT. ##
|
|
## ---------------------------------- ##
|
|
|
|
AT_SETUP([AC_FC_FIXEDFORM with AC_FC_SRCEXT])
|
|
|
|
AT_DATA([configure.ac],
|
|
[[AC_INIT
|
|
AC_PROG_FC
|
|
AC_FC_SRCEXT([f90], [], [AS_EXIT([77])])
|
|
AC_FC_FIXEDFORM
|
|
AC_CONFIG_FILES([Makefile])
|
|
AC_OUTPUT
|
|
]])
|
|
|
|
AT_DATA([Makefile.in],
|
|
[[prog: prog.@OBJEXT@
|
|
@FC@ @FCFLAGS@ -o $@ prog.@OBJEXT@ @LIBS@
|
|
|
|
.SUFFIXES: .f90 .@OBJEXT@
|
|
.f90.@OBJEXT@:
|
|
@FC@ @FCFLAGS@ -c @FCFLAGS_f90@ $<
|
|
]])
|
|
|
|
AT_DATA([prog.f90],
|
|
[[ program main
|
|
C fixed-form style comment
|
|
end
|
|
]])
|
|
|
|
AT_CHECK_AUTOCONF
|
|
AT_CHECK_CONFIGURE
|
|
AT_CHECK_MAKE
|
|
AT_CHECK([./prog])
|
|
|
|
AT_CLEANUP
|
|
|
|
|
|
## ------------------ ##
|
|
## AC_FC_LINE_LENGTH. ##
|
|
## ------------------ ##
|
|
|
|
AT_SETUP([AC_FC_LINE_LENGTH])
|
|
|
|
AT_DATA([Makefile.in],
|
|
[[prog@EXEEXT@: prog.@OBJEXT@
|
|
@FC@ @FCFLAGS@ -o $@ prog.@OBJEXT@ @LIBS@
|
|
|
|
.SUFFIXES: .f .@OBJEXT@
|
|
.f.@OBJEXT@:
|
|
@FC@ @FCFLAGS@ -c @FCFLAGS_f@ $<
|
|
|
|
clean:
|
|
rm -f *.@OBJEXT@ prog@EXEEXT@
|
|
]])
|
|
|
|
# When preceded by 7 spaces and followed by newline, line_80 generates
|
|
# a line of exactly 79 columns, line_132 generates a line of exactly 131
|
|
# coluns, and line_250 generates a line of exactly 250 columns.
|
|
# FIXME: Shouldn't line_80 and line_132 generate lines that are one column
|
|
# longer, so that their contents match the variable names?
|
|
line_80=\
|
|
'subroutine foo(arg1,arg2,arg3,arg4,arg5,arg6,arg7,arg8,arg9,arg10,arg11)'
|
|
line_132=\
|
|
'subroutine foo(arg1,arg2,arg3,arg4,arg5,arg6,arg7,arg8,arg9,arg10,arg11,'\
|
|
'arg12,arg13,arg14,arg15,arg16,arg17,arg18,arg19)'
|
|
line_250=\
|
|
'subroutine foofoo(arg1,arg2,arg3,arg4,arg5,arg6,arg7,arg8,arg9,arg10,arg11,'\
|
|
'arg12,arg13,arg14,arg15,arg16,arg17,arg18,arg19,arg20,arg21,arg22,arg23,'\
|
|
'arg24,arg25,arg26,arg27,arg28,arg29,arg30,arg31,arg32,arg33,arg34,arg35,'\
|
|
'arg36,arg37,arg38,arg39)'
|
|
|
|
for len in 80 132 250
|
|
do
|
|
if test $len -eq 250; then arg=unlimited; else arg=$len; fi
|
|
eval long_line=\$line_$len
|
|
|
|
# Try free-form first, it has a bigger chance of succeeding.
|
|
for fixed_or_free in FREEFORM FIXEDFORM
|
|
do
|
|
|
|
cat >configure.ac <<EOF
|
|
AC_INIT
|
|
AC_PROG_FC
|
|
AC_FC_SRCEXT([f])
|
|
AC_FC_$fixed_or_free
|
|
AC_FC_LINE_LENGTH([$arg])
|
|
AC_CONFIG_FILES([Makefile])
|
|
AC_OUTPUT
|
|
EOF
|
|
|
|
cat >prog.f <<EOF
|
|
$long_line
|
|
end subroutine
|
|
program main
|
|
end program
|
|
EOF
|
|
|
|
AT_CHECK_AUTOCONF
|
|
AT_CHECK_CONFIGURE
|
|
AT_CHECK_MAKE
|
|
AT_CHECK([./prog])
|
|
AT_CHECK_MAKE([clean])
|
|
|
|
done
|
|
done
|
|
|
|
AT_CLEANUP
|
|
|
|
|
|
## ------------------- ##
|
|
## AC_FC_CHECK_BOUNDS. ##
|
|
## ------------------- ##
|
|
|
|
AT_SETUP([AC_FC_CHECK_BOUNDS])
|
|
|
|
AT_DATA([Makefile.in],
|
|
[[prog@EXEEXT@: prog.@OBJEXT@
|
|
@FC@ @FCFLAGS@ -o $@ prog.@OBJEXT@ @LIBS@
|
|
|
|
.SUFFIXES: .f .@OBJEXT@
|
|
.f.@OBJEXT@:
|
|
@FC@ @FCFLAGS@ -c @FCFLAGS_f@ $<
|
|
|
|
clean:
|
|
rm -f *.@OBJEXT@ prog@EXEEXT@
|
|
]])
|
|
|
|
cat >configure.ac <<EOF
|
|
AC_INIT
|
|
AC_PROG_FC
|
|
AC_FC_SRCEXT([f])
|
|
AC_FC_CHECK_BOUNDS
|
|
AC_CONFIG_FILES([Makefile])
|
|
AC_OUTPUT
|
|
EOF
|
|
|
|
AT_DATA([prog.f],
|
|
[[
|
|
subroutine copy(a,b,n)
|
|
integer a(:), b(:), n, i
|
|
do i = 1, n
|
|
a(i) = b(i)
|
|
end do
|
|
end subroutine
|
|
|
|
program main
|
|
integer, parameter :: n = 20
|
|
integer a(1:n), b(1:n-1), i
|
|
interface
|
|
subroutine copy(a,b,n)
|
|
integer a(:), b(:), i
|
|
end subroutine
|
|
end interface
|
|
|
|
call copy(a,b,n)
|
|
end program
|
|
]])
|
|
|
|
AT_CHECK_AUTOCONF
|
|
AT_CHECK_CONFIGURE
|
|
AT_CHECK_MAKE
|
|
AT_CHECK([./prog || exit 1], [1], [ignore], [ignore])
|
|
AT_CHECK_MAKE([clean])
|
|
|
|
AT_CLEANUP
|
|
|
|
|
|
## ------------------ ##
|
|
## AC_FC_MODULE_FLAG. ##
|
|
## ------------------ ##
|
|
|
|
AT_SETUP([AC_FC_MODULE_FLAG])
|
|
|
|
AT_DATA([Makefile.in],
|
|
[[OBJEXT = @OBJEXT@
|
|
EXEEXT = @EXEEXT@
|
|
LIBS = @LIBS@
|
|
ac_empty = @ac_empty@
|
|
FC = @FC@
|
|
FC_MODEXT = @FC_MODEXT@
|
|
FC_MODINC = @FC_MODINC@
|
|
FCFLAGS = @FCFLAGS@
|
|
FCFLAGS_f = @FCFLAGS_f@
|
|
|
|
prog$(EXEEXT): sub/mod.$(OBJEXT) prog.$(OBJEXT)
|
|
$(FC) $(FCFLAGS) -o $@ prog.$(OBJEXT) sub/mod.$(OBJEXT) $(LIBS)
|
|
|
|
sub/mod.$(OBJEXT): sub/mod.f
|
|
cd sub && $(FC) $(FCFLAGS) -c $(FCFLAGS_f) mod.f
|
|
|
|
# Depend on the object, for the module dependency.
|
|
prog.$(OBJEXT): prog.f sub/mod.$(OBJEXT)
|
|
$(FC) $(FCFLAGS) $(FC_MODINC). $(FC_MODINC)sub -c $(FCFLAGS_f) $<
|
|
|
|
clean:
|
|
-test -z "$(FC_MODEXT)" || rm -f *.$(FC_MODEXT) sub/*.$(FC_MODEXT)
|
|
-rm -f *.$(OBJEXT) sub/*.$(OBJEXT) prog$(EXEEXT)
|
|
]])
|
|
|
|
AT_DATA([configure.ac],
|
|
[[AC_INIT
|
|
AC_PROG_FC
|
|
AC_FC_SRCEXT([f])
|
|
AC_FC_MODULE_FLAG
|
|
if test -n "$FC_MODINC"; then
|
|
FCFLAGS="$FCFLAGS $FC_MODINC. ${FC_MODINC}sub"
|
|
fi
|
|
AC_FC_MODULE_EXTENSION
|
|
AC_CONFIG_FILES([Makefile])
|
|
AC_OUTPUT
|
|
]])
|
|
|
|
mkdir sub
|
|
|
|
AT_DATA([sub/mod.f],
|
|
[[ module foobar
|
|
end module foobar
|
|
]])
|
|
|
|
AT_DATA([prog.f],
|
|
[[ program main
|
|
use foobar
|
|
end program
|
|
]])
|
|
|
|
AT_CHECK_AUTOCONF
|
|
AT_CHECK_CONFIGURE
|
|
AT_CHECK_MAKE([], [], [], [stdout], [stderr])
|
|
# Both the FCFLAGS setting from configure.ac, and the Makefile rule
|
|
# should add to the module search path.
|
|
AT_CHECK([grep 'sub .*sub ' stdout stderr], [], [ignore])
|
|
AT_CHECK([./prog], [], [ignore], [ignore])
|
|
AT_CHECK_MAKE([clean])
|
|
|
|
AT_CLEANUP
|
|
|
|
|
|
## --------------------- ##
|
|
## AC_F77_CRAY_POINTERS. ##
|
|
## --------------------- ##
|
|
|
|
AT_SETUP([AC_F77_CRAY_POINTERS])
|
|
|
|
AT_DATA([configure.ac],
|
|
[[AC_INIT
|
|
AC_PROG_F77
|
|
AC_F77_CRAY_POINTERS
|
|
AC_CONFIG_FILES([Makefile])
|
|
AC_OUTPUT
|
|
]])
|
|
|
|
AT_DATA([Makefile.in],
|
|
[[prog@EXEEXT@: prog.@OBJEXT@
|
|
@F77@ @FFLAGS@ -o $@ prog.@OBJEXT@ @LIBS@
|
|
|
|
.SUFFIXES: .f .@OBJEXT@
|
|
.f.@OBJEXT@:
|
|
@F77@ @FFLAGS@ -c $<
|
|
|
|
clean:
|
|
rm -f *.@OBJEXT@ prog@EXEEXT@
|
|
]])
|
|
|
|
AT_DATA([prog.f],
|
|
[[ program main
|
|
integer aptr(2)
|
|
pointer (iptr, aptr)
|
|
end
|
|
]])
|
|
|
|
AT_CHECK_AUTOCONF
|
|
AT_CHECK_CONFIGURE
|
|
AT_CHECK_MAKE
|
|
AT_CHECK([./prog])
|
|
AT_CHECK_MAKE([clean])
|
|
|
|
AT_CLEANUP
|
|
|
|
|
|
## -------------------- ##
|
|
## AC_FC_CRAY_POINTERS. ##
|
|
## -------------------- ##
|
|
|
|
AT_SETUP([AC_FC_CRAY_POINTERS])
|
|
|
|
AT_DATA([configure.ac],
|
|
[[AC_INIT
|
|
AC_PROG_FC
|
|
AC_FC_SRCEXT([f])
|
|
AC_FC_CRAY_POINTERS
|
|
AC_CONFIG_FILES([Makefile])
|
|
AC_OUTPUT
|
|
]])
|
|
|
|
AT_DATA([Makefile.in],
|
|
[[prog@EXEEXT@: prog.@OBJEXT@
|
|
@FC@ @FCFLAGS@ -o $@ prog.@OBJEXT@ @LIBS@
|
|
|
|
.SUFFIXES: .f .@OBJEXT@
|
|
.f.@OBJEXT@:
|
|
@FC@ @FCFLAGS@ -c @FCFLAGS_f@ $<
|
|
|
|
clean:
|
|
rm -f *.@OBJEXT@ prog@EXEEXT@
|
|
]])
|
|
|
|
AT_DATA([prog.f],
|
|
[[ program main
|
|
integer aptr(2)
|
|
pointer (iptr, aptr)
|
|
end
|
|
]])
|
|
|
|
AT_CHECK_AUTOCONF
|
|
AT_CHECK_CONFIGURE
|
|
AT_CHECK_MAKE
|
|
AT_CHECK([./prog])
|
|
AT_CHECK_MAKE([clean])
|
|
|
|
AT_CLEANUP
|