Prefer HTTPS to FTP and HTTP
[autoconf.git] / tests / fortran.at
blobb371293eecbb3c8471b937ea60e5daaa3d13cae7
1 #                                                       -*- Autotest -*-
3 AT_BANNER([Fortran low level compiling/preprocessing macros.])
5 # Copyright (C) 2000-2001, 2003, 2008-2017 Free Software Foundation,
6 # Inc.
8 # This program is free software: you can redistribute it and/or modify
9 # it under the terms of the GNU General Public License as published by
10 # the Free Software Foundation, either version 3 of the License, or
11 # (at your option) any later version.
13 # This program is distributed in the hope that it will be useful,
14 # but WITHOUT ANY WARRANTY; without even the implied warranty of
15 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16 # GNU General Public License for more details.
18 # You should have received a copy of the GNU General Public License
19 # along with this program.  If not, see <https://www.gnu.org/licenses/>.
21 # Since the macros which compile are required by most tests, check
22 # them first.  But remember that looking for a compiler is even more
23 # primitive, so check those first.
26 ## --------------------- ##
27 ## Fortran 77 Compiler.  ##
28 ## --------------------- ##
31 AT_CHECK_MACRO([GNU Fortran 77],
32 [[AC_LANG(Fortran 77)
33 AC_LANG_COMPILER
35 : > conftest.f
36 if AC_TRY_COMMAND([$F77 --version | grep GNU >&2]) \
37    || AC_TRY_COMMAND([$F77 -v -c conftest.f 2>&1 | grep "f2c " >&2]); then
38   # Be sure to remove files which might be created by compilers that
39   # don't support --version, or by the second compile.
40   rm -f a.exe a.out conftest.f conftest.$ac_objext
41   # Has GNU in --version.
42   test "$G77" != yes &&
43     AC_MSG_ERROR([failed to recognize GNU Fortran 77 compiler])
44 else
45   # Be sure to remove files which might be created by compilers that
46   # don't support --version, or by the second compile.
47   rm -f a.exe a.out conftest.f conftest.$ac_objext
48   # Has not.
49   test "$G77" = yes &&
50     AC_MSG_ERROR([incorrectly recognized a GNU Fortran 77 compiler])
52 ]])
56 ## ------------------ ##
57 ## Fortran Compiler.  ##
58 ## ------------------ ##
61 AT_CHECK_MACRO([GNU Fortran],
62 [[AC_LANG(Fortran)
63 AC_LANG_COMPILER
65 # No Fortran compiler is known not to support "*.f".
66 AC_FC_SRCEXT([f])
68 # GNU Fortran is known to support freeform.
69 AC_FC_FREEFORM([],
70                [AC_MSG_WARN([Fortran does not accept free-form source])])
71 if test "$ac_compiler_gnu" = yes; then
72   case $FCFLAGS in
73    *-ffree-form*) ;;
74    *) AC_MSG_ERROR([failed to recognize GNU Fortran's -ffree-form option]);;
75   esac
77 ]])
80 ## ------------------------- ##
81 ## AC_OPENMP and Fortran 77. ##
82 ## ------------------------- ##
84 AT_SETUP([AC_OPENMP and Fortran 77])
86 AT_DATA([configure.ac],
87 [[AC_INIT
88 AC_PROG_F77
89 AC_LANG([Fortran 77])
90 AC_OPENMP
91 if test "X$ac_cv_prog_f77_openmp" = Xunsupported; then
92   AS_EXIT([77])
94 FFLAGS="$FFLAGS $OPENMP_FFLAGS"
95 AC_CONFIG_FILES([Makefile])
96 AC_OUTPUT
97 ]])
99 AT_DATA([Makefile.in],
100 [[foo@EXEEXT@: foo.@OBJEXT@
101         @F77@ @FFLAGS@ @LDFLAGS@ -o $@ foo.@OBJEXT@
103 foo.@OBJEXT@: foo.f
104         @F77@ @FFLAGS@ -c foo.f
107 AT_DATA([foo.f],
108 [[       program main
109       end
112 : "${MAKE=make}"
113 AT_CHECK([env ACLOCAL=true autoreconf -vi], [], [ignore], [ignore])
114 AT_CHECK_CONFIGURE
115 AT_CHECK([$MAKE], [], [ignore], [ignore])
117 AT_CLEANUP
120 ## ---------------------- ##
121 ## AC_OPENMP and Fortran. ##
122 ## ---------------------- ##
124 AT_SETUP([AC_OPENMP and Fortran])
126 AT_DATA([configure.ac],
127 [[AC_INIT
128 AC_PROG_FC
129 AC_LANG([Fortran])
130 AC_OPENMP
131 if test "X$ac_cv_prog_fc_openmp" = Xunsupported; then
132   AS_EXIT([77])
134 FCFLAGS="$FCFLAGS $OPENMP_FCFLAGS"
135 AC_CONFIG_FILES([Makefile])
136 AC_OUTPUT
139 AT_DATA([Makefile.in],
140 [[foo@EXEEXT@: foo.@OBJEXT@
141         @FC@ @FCFLAGS@ @LDFLAGS@ -o $@ foo.@OBJEXT@
143 foo.@OBJEXT@: foo.f
144         @FC@ @FCFLAGS@ -c foo.f
147 AT_DATA([foo.f],
148 [[      program main
149       end
152 : "${MAKE=make}"
153 AT_CHECK([env ACLOCAL=true autoreconf -vi], [], [ignore], [ignore])
154 AT_CHECK_CONFIGURE
155 AT_CHECK([$MAKE], [], [ignore], [ignore])
157 AT_CLEANUP
160 # We don't test the AC_F77_LIBRARY_LDFLAGS macro on its own because of
161 # (autoconf.info)Fortran Compiler:
162 #      The macros `AC_F77_DUMMY_MAIN' and `AC_FC_DUMMY_MAIN' or
163 #    `AC_F77_MAIN' and `AC_FC_MAIN' are probably also necessary to link
164 #    C/C++ with Fortran; see below.
166 # and we would need libtool to create shared libraries.
168 # Further, for any sensible test of the AC_F{77,C}(_DUMMY)?_MAIN macros
169 # we also need to use AC_F{77,C}_WRAPPERS, in order to be able to actually
170 # call the functions.
172 ## ------------------------ ##
173 ## AC_F77_DUMMY_MAIN usage. ##
174 ## ------------------------ ##
176 AT_SETUP([AC_F77_DUMMY_MAIN usage])
178 AT_CONFIGURE_AC([[
179 AC_PROG_F77
180 AC_F77_DUMMY_MAIN([], [AC_MSG_FAILURE([failed to determine F77 dummy main], [77])])
181 AC_F77_WRAPPERS
182 AC_PROG_CC
183 AC_CONFIG_FILES([Makefile])
186 AT_DATA([Makefile.in],
188 all: cprogram@EXEEXT@
190 cprogram@EXEEXT@: cprogram.@OBJEXT@ foobar.@OBJEXT@
191         @CC@ @CFLAGS@ @LDFLAGS@ -o $@ cprogram.@OBJEXT@ foobar.@OBJEXT@ @LIBS@ @FLIBS@
193 .SUFFIXES: .c .f .@OBJEXT@
194 .f.@OBJEXT@:
195         @F77@ @FFLAGS@ -c $<
196 .c.@OBJEXT@:
197         @CC@ @DEFS@ -I. @CPPFLAGS@ @CFLAGS@ -c $<
200 AT_DATA([foobar.f],
201 [[C     This is just a purely numeric routine, no I/O needed.
202 C     Taken from autoconf.texi:Fortran Compiler.
203       subroutine foobar (x, y)
204       double precision x, y
205       y = 3.14159 * x
206       return
207       end
210 AT_DATA([cprogram.c],
211 [[#include <config.h>
212 #include <math.h>
214 /* Taken from autoconf.texi:Fortran Compiler. */
215 #define FOOBAR_F77 F77_FUNC (foobar, FOOBAR)
216 #ifdef __cplusplus
217 extern "C"  /* prevent C++ name mangling */
218 #endif
219 void FOOBAR_F77 (double *x, double *y);
221 /* Taken from autoconf.texi:Fortran Compiler.  */
222 #ifdef F77_DUMMY_MAIN
223 #  ifdef __cplusplus
224      extern "C"
225 #  endif
226    int F77_DUMMY_MAIN () { return 1; }
227 #endif
229 int main(int argc, char *argv[])
231   double x = 2.7183, y;
232   FOOBAR_F77 (&x, &y);
233   if (fabs (8.539784097 - y) > 1.e-6)
234     return 1;
235   return 0;
239 AT_CHECK_AUTOCONF
240 AT_CHECK_AUTOHEADER
241 AT_CHECK_CONFIGURE
242 : "${MAKE=make}"
243 AT_CHECK([$MAKE], [], [ignore], [ignore])
244 dnl AT_CHECK([./cprogram])
246 AT_CLEANUP
249 ## ----------------------- ##
250 ## AC_FC_DUMMY_MAIN usage. ##
251 ## ----------------------- ##
253 AT_SETUP([AC_FC_DUMMY_MAIN usage])
255 AT_CONFIGURE_AC([[
256 AC_PROG_FC
257 AC_FC_FIXEDFORM
258 AC_FC_DUMMY_MAIN([], [AC_MSG_FAILURE([failed to determine FC dummy main], [77])])
259 AC_FC_WRAPPERS
260 AC_PROG_CC
261 AC_CONFIG_FILES([Makefile])
264 AT_DATA([Makefile.in],
266 all: cprogram@EXEEXT@
268 cprogram@EXEEXT@: cprogram.@OBJEXT@ foobar.@OBJEXT@
269         @CC@ @CFLAGS@ @LDFLAGS@ -o $@ cprogram.@OBJEXT@ foobar.@OBJEXT@ @LIBS@ @FCLIBS@
271 .SUFFIXES: .c .f .@OBJEXT@
272 .f.@OBJEXT@:
273         @FC@ @FCFLAGS@ -c $<
274 .c.@OBJEXT@:
275         @CC@ @DEFS@ -I. @CPPFLAGS@ @CFLAGS@ -c $<
278 AT_DATA([foobar.f],
279 [[C     This is just a purely numeric routine, no I/O needed.
280 C     Taken from autoconf.texi:Fortran Compiler.
281       subroutine foobar (x, y)
282       double precision x, y
283       y = 3.14159 * x
284       return
285       end
288 AT_DATA([cprogram.c],
289 [[#include <config.h>
290 #include <math.h>
292 /* Taken from autoconf.texi:Fortran Compiler. */
293 #define FOOBAR_FC FC_FUNC (foobar, FOOBAR)
294 #ifdef __cplusplus
295 extern "C"  /* prevent C++ name mangling */
296 #endif
297 void FOOBAR_FC(double *x, double *y);
299 /* Taken from autoconf.texi:Fortran Compiler.  */
300 #ifdef FC_DUMMY_MAIN
301 #  ifdef __cplusplus
302      extern "C"
303 #  endif
304    int FC_DUMMY_MAIN () { return 1; }
305 #endif
307 int main (int argc, char *argv[])
309   double x = 2.7183, y;
310   FOOBAR_FC (&x, &y);
311   if (fabs (8.539784097 - y) > 1.e-6)
312     return 1;
313   return 0;
317 AT_CHECK_AUTOCONF
318 AT_CHECK_AUTOHEADER
319 AT_CHECK_CONFIGURE
320 : "${MAKE=make}"
321 AT_CHECK([$MAKE], [], [ignore], [ignore])
322 dnl AT_CHECK([./cprogram])
324 AT_CLEANUP
327 ## ------------------ ##
328 ## AC_F77_MAIN usage. ##
329 ## ------------------ ##
331 AT_SETUP([AC_F77_MAIN usage])
333 AT_CONFIGURE_AC([[
334 AC_PROG_F77
335 AC_F77_MAIN
336 AC_F77_WRAPPERS
337 AC_PROG_CC
338 AC_CONFIG_FILES([Makefile])
341 AT_DATA([Makefile.in],
343 all: cprogram@EXEEXT@
345 cprogram@EXEEXT@: cprogram.@OBJEXT@ foobar.@OBJEXT@
346         @CC@ @CFLAGS@ @LDFLAGS@ -o $@ cprogram.@OBJEXT@ foobar.@OBJEXT@ @LIBS@ @FLIBS@
348 .SUFFIXES: .c .f .@OBJEXT@
349 .f.@OBJEXT@:
350         @F77@ @FFLAGS@ -c $<
351 .c.@OBJEXT@:
352         @CC@ @DEFS@ -I. @CPPFLAGS@ @CFLAGS@ -c $<
355 AT_DATA([foobar.f],
356 [[C     This uses Fortran I/O, so is likely to require Fortran startup.
357       subroutine foobar (x)
358       integer x
359       if (x == 42) then
360         write(*,*) 'some output from Fortran sources'
361       end if
362       end
365 AT_DATA([cprogram.c],
366 [[#include <config.h>
367 #include <stdio.h>
369 /* Taken from autoconf.texi:Fortran Compiler. */
370 #define FOOBAR_F77 F77_FUNC (foobar, FOOBAR)
371 #ifdef __cplusplus
372 extern "C"  /* prevent C++ name mangling */
373 #endif
374 void FOOBAR_F77 (int *x);
376 /* Taken from autoconf.texi:Fortran Compiler.  */
377 #ifdef __cplusplus
378   extern "C"
379 #endif
380 int F77_MAIN (int argc, char *argv[]);
382 int F77_MAIN (int argc, char *argv[])
384   int x = 42;
385   puts ("output from C main");
386   fflush (stdout);
387   FOOBAR_F77 (&x);
388   puts ("more output from C main");
389   return 0;
393 AT_CHECK_AUTOCONF
394 AT_CHECK_AUTOHEADER
395 AT_CHECK_CONFIGURE
396 : "${MAKE=make}"
397 AT_CHECK([$MAKE], [], [ignore], [ignore])
398 dnl AT_CHECK([./cprogram], [], [output from C main
399 dnl  some output from Fortran sources
400 dnl more output from C main
401 dnl ])
403 AT_CLEANUP
406 ## ----------------- ##
407 ## AC_FC_MAIN usage. ##
408 ## ----------------- ##
410 AT_SETUP([AC_FC_MAIN usage])
412 AT_CONFIGURE_AC([[
413 AC_PROG_FC
414 AC_FC_FIXEDFORM
415 AC_FC_MAIN
416 AC_FC_WRAPPERS
417 AC_PROG_CC
418 AC_CONFIG_FILES([Makefile])
421 AT_DATA([Makefile.in],
422 [[all: cprogram@EXEEXT@
424 cprogram@EXEEXT@: cprogram.@OBJEXT@ foobar.@OBJEXT@
425         @CC@ @CFLAGS@ @LDFLAGS@ -o $@ cprogram.@OBJEXT@ foobar.@OBJEXT@ @LIBS@ @FCLIBS@
427 .SUFFIXES: .c .f .@OBJEXT@
428 .f.@OBJEXT@:
429         @FC@ @FCFLAGS@ -c $<
430 .c.@OBJEXT@:
431         @CC@ @DEFS@ -I. @CPPFLAGS@ @CFLAGS@ -c $<
434 AT_DATA([foobar.f],
435 [[C     This uses Fortran I/O, so is likely to require Fortran startup.
436       subroutine foobar (x)
437       integer x
438       if (x == 42) then
439         write (*,*) 'some output from Fortran sources'
440       end if
441       end
444 AT_DATA([cprogram.c],
445 [[#include <config.h>
446 #include <stdio.h>
448 /* Taken from autoconf.texi:Fortran Compiler. */
449 #define FOOBAR_FC FC_FUNC (foobar, FOOBAR)
450 #ifdef __cplusplus
451 extern "C"  /* prevent C++ name mangling */
452 #endif
453 void FOOBAR_FC (int *x);
455 /* Taken from autoconf.texi:Fortran Compiler.  */
456 #ifdef __cplusplus
457   extern "C"
458 #endif
459 int FC_MAIN (int argc, char *argv[]);
461 int FC_MAIN (int argc, char *argv[])
463   int x = 42;
464   puts ("output from C main");
465   fflush (stdout);
466   FOOBAR_FC (&x);
467   puts ("more output from C main");
468   return 0;
472 AT_CHECK_AUTOCONF
473 AT_CHECK_AUTOHEADER
474 AT_CHECK_CONFIGURE
475 : "${MAKE=make}"
476 AT_CHECK([$MAKE], [], [ignore], [ignore])
477 dnl AT_CHECK([./cprogram], [], [output from C main
478 dnl  some output from Fortran sources
479 dnl more output from C main
480 dnl ])
482 AT_CLEANUP
485 ## ------------------ ##
486 ## AC_F77_FUNC usage. ##
487 ## ------------------ ##
489 AT_SETUP([AC_F77_FUNC usage])
491 AT_CONFIGURE_AC([[
492 AC_PROG_F77
493 AC_F77_FUNC([foobar])
494 AC_SUBST([foobar])
495 AC_PROG_CC
496 AC_CONFIG_FILES([cprogram.c:cprogram.in])
497 AC_CONFIG_FILES([Makefile])
500 AT_DATA([Makefile.in],
502 all: cprogram@EXEEXT@
504 cprogram@EXEEXT@: cprogram.@OBJEXT@ foobar.@OBJEXT@
505         @CC@ @CFLAGS@ @LDFLAGS@ -o $@ cprogram.@OBJEXT@ foobar.@OBJEXT@ @LIBS@ @FLIBS@
507 .SUFFIXES: .c .f .@OBJEXT@
508 .f.@OBJEXT@:
509         @F77@ @FFLAGS@ -c $<
510 .c.@OBJEXT@:
511         @CC@ @DEFS@ -I. @CPPFLAGS@ @CFLAGS@ -c $<
514 AT_DATA([foobar.f],
515 [[      subroutine foobar (x)
516       integer x
517       x = 42
518       return
519       end
522 AT_DATA([cprogram.in],
523 [[#include <config.h>
524 #include <math.h>
526 #ifdef __cplusplus
527 extern "C"  /* prevent C++ name mangling */
528 #endif
529 void @foobar@ (int *x);
531 /* Taken from autoconf.texi:Fortran Compiler.  */
532 #ifdef F77_DUMMY_MAIN
533 #  ifdef __cplusplus
534      extern "C"
535 #  endif
536    int F77_DUMMY_MAIN () { return 1; }
537 #endif
539 int main(int argc, char *argv[])
541   int x;
542   @foobar@ (&x);
543   if (x != 42)
544     return 1;
545   return 0;
549 AT_CHECK_AUTOCONF
550 AT_CHECK_AUTOHEADER
551 AT_CHECK_CONFIGURE
552 : "${MAKE=make}"
553 AT_CHECK([$MAKE], [], [ignore], [ignore])
554 dnl AT_CHECK([./cprogram])
556 AT_CLEANUP
559 ## ----------------- ##
560 ## AC_FC_FUNC usage. ##
561 ## ----------------- ##
563 AT_SETUP([AC_FC_FUNC usage])
565 AT_CONFIGURE_AC([[
566 AC_PROG_FC
567 AC_FC_FUNC([foobar])
568 AC_SUBST([foobar])
569 AC_PROG_CC
570 AC_CONFIG_FILES([cprogram.c:cprogram.in])
571 AC_CONFIG_FILES([Makefile])
574 AT_DATA([Makefile.in],
576 all: cprogram@EXEEXT@
578 cprogram@EXEEXT@: cprogram.@OBJEXT@ foobar.@OBJEXT@
579         @CC@ @CFLAGS@ @LDFLAGS@ -o $@ cprogram.@OBJEXT@ foobar.@OBJEXT@ @LIBS@ @FCLIBS@
581 .SUFFIXES: .c .f .@OBJEXT@
582 .f.@OBJEXT@:
583         @FC@ @FCFLAGS@ -c $<
584 .c.@OBJEXT@:
585         @CC@ @DEFS@ -I. @CPPFLAGS@ @CFLAGS@ -c $<
588 AT_DATA([foobar.f],
589 [[      subroutine foobar (x)
590       integer x
591       x = 42
592       return
593       end
596 AT_DATA([cprogram.in],
597 [[#include <config.h>
598 #include <math.h>
600 #ifdef __cplusplus
601 extern "C"  /* prevent C++ name mangling */
602 #endif
603 void @foobar@ (int *x);
605 /* Taken from autoconf.texi:Fortran Compiler.  */
606 #ifdef FC_DUMMY_MAIN
607 #  ifdef __cplusplus
608      extern "C"
609 #  endif
610    int FC_DUMMY_MAIN () { return 1; }
611 #endif
613 int main(int argc, char *argv[])
615   int x;
616   @foobar@ (&x);
617   if (x != 42)
618     return 1;
619   return 0;
623 AT_CHECK_AUTOCONF
624 AT_CHECK_AUTOHEADER
625 AT_CHECK_CONFIGURE
626 : "${MAKE=make}"
627 AT_CHECK([$MAKE], [], [ignore], [ignore])
628 dnl AT_CHECK([./cprogram])
629 AT_CLEANUP
632 ## ------------------- ##
633 ## AC_FC_SRCEXT usage. ##
634 ## ------------------- ##
636 AT_SETUP([AC_FC_SRCEXT usage])
638 AT_DATA([configure.ac],
639 [[AC_INIT
640 AC_PROG_FC
641 FCFLAGS_NOFREE=$FCFLAGS
642 AC_SUBST([FCFLAGS_NOFREE])
643 AC_FC_FREEFORM
644 # Unconditionally require .f to work.
645 AC_FC_SRCEXT([f])
646 # For each other extension, fail gracefully if it does not work:
647 # Not all compilers support all extensions/language versions.
648 m4@&t@_foreach([ext], [f77, f90, f95, f03, f08],
649   [AC_FC_SRCEXT(ext, ext[_object='foo]ext[.$(OBJEXT)'], ext[_object=])
650    AC_SUBST(ext[_object])])
651 AC_CONFIG_FILES([Makefile])
652 AC_OUTPUT
655 AT_DATA([Makefile.in],
656 [[OBJEXT = @OBJEXT@
658 all: prog@EXEEXT@
659 prog@EXEEXT@: foof.@OBJEXT@ @f77_object@ @f90_object@ \
660               @f95_object@ @f03_object@ @f08_object@
661         @FC@ @FCFLAGS@ -o $@ foof.@OBJEXT@ @f77_object@ @f90_object@ \
662                              @f95_object@ @f03_object@ @f08_object@
664 .SUFFIXES: .f .f77 .f90 .f95 .f03 .f08 .@OBJEXT@
665 .f.@OBJEXT@:
666         @FC@ -c @FCFLAGS_NOFREE@ @FCFLAGS_f@ $<
667 .f77.@OBJEXT@:
668         @FC@ -c @FCFLAGS_NOFREE@ @FCFLAGS_f77@ $<
669 .f90.@OBJEXT@:
670         @FC@ -c @FCFLAGS@ @FCFLAGS_f90@ $<
671 .f95.@OBJEXT@:
672         @FC@ -c @FCFLAGS@ @FCFLAGS_f95@ $<
673 .f03.@OBJEXT@:
674         @FC@ -c @FCFLAGS@ @FCFLAGS_f03@ $<
675 .f08.@OBJEXT@:
676         @FC@ -c @FCFLAGS@ @FCFLAGS_f08@ $<
679 AT_DATA([foof.f],
680 [[      program main
681       end
684 AT_DATA([foof77.f77],
685 [[      subroutine foof77
686       end
689 AT_DATA([foof90.f90],
690 [[subroutine foof90
694 AT_DATA([foof95.f95],
695 [[subroutine foof95
699 AT_DATA([foof03.f03],
700 [[subroutine foof03
704 AT_DATA([foof08.f08],
705 [[subroutine foof08
709 AT_CHECK_AUTOCONF
710 AT_CHECK_CONFIGURE
711 : "${MAKE=make}"
712 AT_CHECK([$MAKE], [], [ignore], [ignore])
714 AT_CLEANUP
717 ## ---------------------- ##
718 ## AC_FC_PP_SRCEXT usage. ##
719 ## ---------------------- ##
721 AT_SETUP([AC_FC_PP_SRCEXT usage])
723 AT_DATA([configure.ac],
724 [[AC_INIT
725 AC_PROG_FC
726 # Unconditionally require .f and .F to work.
727 AC_FC_PP_SRCEXT([f])
728 AC_FC_PP_SRCEXT([F])
729 # For each other extension, fail gracefully if it does not work:
730 # Not all compilers support all extensions/language versions.
731 m4@&t@_foreach([ext], [f77, f90, f95, f03, f08],
732   [AC_FC_PP_SRCEXT(ext, ext[_object='foo]ext[.$(OBJEXT)'], ext[_object=])
733    AC_SUBST(ext[_object])])
734 m4@&t@_foreach([ext], [F77, F90, F95, F03, F08],
735   [AC_FC_PP_SRCEXT(ext, ext[_object='bar]ext[.$(OBJEXT)'], ext[_object=])
736    AC_SUBST(ext[_object])])
737 AC_CONFIG_FILES([Makefile])
738 AC_OUTPUT
741 AT_DATA([Makefile.in],
742 [[OBJEXT = @OBJEXT@
744 all: prog@EXEEXT@
745 prog@EXEEXT@: foof.@OBJEXT@ @f77_object@ @f90_object@ \
746               @f95_object@ @f03_object@ @f08_object@ \
747               barF.@OBJEXT@ @F77_object@ @F90_object@ \
748               @F95_object@ @F03_object@ @F08_object@
749         @FC@ @FCFLAGS@ -o $@ foof.@OBJEXT@ @f77_object@ @f90_object@ \
750                              @f95_object@ @f03_object@ @f08_object@ \
751                              barF.@OBJEXT@ @F77_object@ @F90_object@ \
752                              @F95_object@ @F03_object@ @F08_object@
754 .SUFFIXES: .f .f77 .f90 .f95 .f03 .f08 .F .F77 .F90 .F95 .F03 .F08 .@OBJEXT@
755 .f.@OBJEXT@:
756         @FC@ -c @FCFLAGS@ @FCFLAGS_f@ $<
757 .f77.@OBJEXT@:
758         @FC@ -c @FCFLAGS@ @FCFLAGS_f77@ $<
759 .f90.@OBJEXT@:
760         @FC@ -c @FCFLAGS@ @FCFLAGS_f90@ $<
761 .f95.@OBJEXT@:
762         @FC@ -c @FCFLAGS@ @FCFLAGS_f95@ $<
763 .f03.@OBJEXT@:
764         @FC@ -c @FCFLAGS@ @FCFLAGS_f03@ $<
765 .f08.@OBJEXT@:
766         @FC@ -c @FCFLAGS@ @FCFLAGS_f08@ $<
767 .F.@OBJEXT@:
768         @FC@ -c @FCFLAGS@ @FCFLAGS_F@ $<
769 .F77.@OBJEXT@:
770         @FC@ -c @FCFLAGS@ @FCFLAGS_F77@ $<
771 .F90.@OBJEXT@:
772         @FC@ -c @FCFLAGS@ @FCFLAGS_F90@ $<
773 .F95.@OBJEXT@:
774         @FC@ -c @FCFLAGS@ @FCFLAGS_F95@ $<
775 .F03.@OBJEXT@:
776         @FC@ -c @FCFLAGS@ @FCFLAGS_F03@ $<
777 .F08.@OBJEXT@:
778         @FC@ -c @FCFLAGS@ @FCFLAGS_F08@ $<
781 for ext in f77 f90 f95 f03 f08; do
782   cat > foo$ext.$ext <<EOF
783       subroutine foo$ext
784 #if 0
785 this is not correct fortran
786 #endif
787       end
789 done
791 for ext in F F77 F90 F95 F03 F08; do
792   cat > bar$ext.$ext <<EOF
793       subroutine bar$ext
794 #if 0
795 this is not correct fortran
796 #endif
797       end
799 done
801 AT_DATA([foof.f],
802 [[      program main
803 #if 0
804 this is not correct fortran
805 #endif
806       end
809 AT_CHECK_AUTOCONF
810 AT_CHECK_CONFIGURE
811 : "${MAKE=make}"
812 AT_CHECK([$MAKE], [], [ignore], [ignore])
814 AT_CLEANUP
817 ## --------------- ##
818 ## AC_FC_FREEFORM. ##
819 ## --------------- ##
821 AT_SETUP([AC_FC_FREEFORM])
823 AT_DATA([configure.ac],
824 [[AC_INIT
825 AC_PROG_FC
826 AC_FC_FREEFORM
827 AC_CONFIG_FILES([Makefile])
828 AC_OUTPUT
831 AT_DATA([Makefile.in],
832 [[prog: prog.@OBJEXT@
833         @FC@ @FCFLAGS@ -o $@ prog.@OBJEXT@ @LIBS@
835 .SUFFIXES: .f .@OBJEXT@
836 .f.@OBJEXT@:
837         @FC@ @FCFLAGS@ -c $<
840 AT_DATA([prog.f],
841 [[program main
845 AT_CHECK_AUTOCONF
846 AT_CHECK_CONFIGURE
847 : "${MAKE=make}"
848 AT_CHECK([$MAKE], [], [ignore], [ignore])
849 dnl AT_CHECK([./prog])
851 AT_CLEANUP
854 ## --------------------------------- ##
855 ## AC_FC_FREEFORM with AC_FC_SRCEXT. ##
856 ## --------------------------------- ##
858 AT_SETUP([AC_FC_FREEFORM with AC_FC_SRCEXT])
860 AT_DATA([configure.ac],
861 [[AC_INIT
862 AC_FC_SRCEXT([f90], [], [AS_EXIT([77])])
863 AC_PROG_FC
864 AC_FC_FREEFORM
865 AC_CONFIG_FILES([Makefile])
866 AC_OUTPUT
869 AT_DATA([Makefile.in],
870 [[prog: prog.@OBJEXT@
871         @FC@ @FCFLAGS@ -o $@ prog.@OBJEXT@ @LIBS@
873 .SUFFIXES: .f90 .@OBJEXT@
874 .f90.@OBJEXT@:
875         @FC@ @FCFLAGS@ -c @FCFLAGS_f90@ $<
878 AT_DATA([prog.f90],
879 [[program main
883 AT_CHECK_AUTOCONF
884 AT_CHECK_CONFIGURE
885 : "${MAKE=make}"
886 AT_CHECK([$MAKE], [], [ignore], [ignore])
887 dnl AT_CHECK([./prog])
889 AT_CLEANUP
892 ## ---------------- ##
893 ## AC_FC_FIXEDFORM. ##
894 ## ---------------- ##
896 AT_SETUP([AC_FC_FIXEDFORM])
898 AT_DATA([configure.ac],
899 [[AC_INIT
900 AC_PROG_FC
901 AC_FC_FIXEDFORM
902 AC_CONFIG_FILES([Makefile])
903 AC_OUTPUT
906 AT_DATA([Makefile.in],
907 [[prog: prog.@OBJEXT@
908         @FC@ @FCFLAGS@ -o $@ prog.@OBJEXT@ @LIBS@
910 .SUFFIXES: .f .@OBJEXT@
911 .f.@OBJEXT@:
912         @FC@ @FCFLAGS@ -c $<
915 AT_DATA([prog.f],
916 [[      program main
917 C      fixed-form style comment
918        end
921 AT_CHECK_AUTOCONF
922 AT_CHECK_CONFIGURE
923 : "${MAKE=make}"
924 AT_CHECK([$MAKE], [], [ignore], [ignore])
925 dnl AT_CHECK([./prog])
927 AT_CLEANUP
930 ## ---------------------------------- ##
931 ## AC_FC_FIXEDFORM with AC_FC_SRCEXT. ##
932 ## ---------------------------------- ##
934 AT_SETUP([AC_FC_FIXEDFORM with AC_FC_SRCEXT])
936 AT_DATA([configure.ac],
937 [[AC_INIT
938 AC_PROG_FC
939 AC_FC_SRCEXT([f90], [], [AS_EXIT([77])])
940 AC_FC_FIXEDFORM
941 AC_CONFIG_FILES([Makefile])
942 AC_OUTPUT
945 AT_DATA([Makefile.in],
946 [[prog: prog.@OBJEXT@
947         @FC@ @FCFLAGS@ -o $@ prog.@OBJEXT@ @LIBS@
949 .SUFFIXES: .f90 .@OBJEXT@
950 .f90.@OBJEXT@:
951         @FC@ @FCFLAGS@ -c @FCFLAGS_f90@ $<
954 AT_DATA([prog.f90],
955 [[      program main
956 C      fixed-form style comment
957        end
960 AT_CHECK_AUTOCONF
961 AT_CHECK_CONFIGURE
962 : "${MAKE=make}"
963 AT_CHECK([$MAKE], [], [ignore], [ignore])
964 dnl AT_CHECK([./prog])
966 AT_CLEANUP
969 ## ------------------ ##
970 ## AC_FC_LINE_LENGTH. ##
971 ## ------------------ ##
973 AT_SETUP([AC_FC_LINE_LENGTH])
975 AT_DATA([Makefile.in],
976 [[prog@EXEEXT@: prog.@OBJEXT@
977         @FC@ @FCFLAGS@ -o $@ prog.@OBJEXT@ @LIBS@
979 .SUFFIXES: .f .@OBJEXT@
980 .f.@OBJEXT@:
981         @FC@ @FCFLAGS@ -c @FCFLAGS_f@ $<
983 clean:
984         rm -f *.@OBJEXT@ prog@EEXEXT@
987 line_80=\
988 'subroutine foo(arg1,arg2,arg3,arg4,arg5,arg6,arg7,arg8,arg9,arg10,arg11)'
989 line_132=\
990 'subroutine foo(arg1,arg2,arg3,arg4,arg5,arg6,arg7,arg8,arg9,arg10,arg11,'\
991 'arg12,arg13,arg14,arg15,arg16,arg17,arg18,arg19)'
992 line_254=\
993 'subroutine foo(arg1,arg2,arg3,arg4,arg5,arg6,arg7,arg8,arg9,arg10,arg11,'\
994 'arg12,arg13,arg14,arg15,arg16,arg17,arg18,arg19,arg20,arg21,arg22,arg23,'\
995 'arg24,arg25,arg26,arg27,arg28,arg29,arg30,arg31,arg32,arg33,arg34,arg35,'\
996 'arg36,arg37,arg38,arg39,arg40)'
998 for len in 80 132 254
1000   if test $len -eq 254; then arg=unlimited; else arg=$len; fi
1001   eval long_line=\$line_$len
1003   # Try free-form first, it has a bigger chance of succeeding.
1004   for fixed_or_free in FREEFORM FIXEDFORM
1005   do
1007     cat >configure.ac <<EOF
1008 AC_INIT
1009 AC_PROG_FC
1010 AC_FC_SRCEXT([f])
1011 AC_FC_$fixed_or_free
1012 AC_FC_LINE_LENGTH([$arg])
1013 AC_CONFIG_FILES([Makefile])
1014 AC_OUTPUT
1017     cat >prog.f <<EOF
1018        $long_line
1019        end subroutine
1020        program main
1021        end program
1024     AT_CHECK_AUTOCONF
1025     AT_CHECK_CONFIGURE
1026     : "${MAKE=make}"
1027     AT_CHECK([$MAKE], [], [ignore], [ignore])
1028     dnl AT_CHECK([./prog])
1029     AT_CHECK([$MAKE clean], [], [ignore], [ignore])
1031   done
1032 done
1034 AT_CLEANUP
1037 ## ------------------- ##
1038 ## AC_FC_CHECK_BOUNDS. ##
1039 ## ------------------- ##
1041 AT_SETUP([AC_FC_CHECK_BOUNDS])
1043 AT_DATA([Makefile.in],
1044 [[prog@EXEEXT@: prog.@OBJEXT@
1045         @FC@ @FCFLAGS@ -o $@ prog.@OBJEXT@ @LIBS@
1047 .SUFFIXES: .f .@OBJEXT@
1048 .f.@OBJEXT@:
1049         @FC@ @FCFLAGS@ -c @FCFLAGS_f@ $<
1051 clean:
1052         rm -f *.@OBJEXT@ prog@EEXEXT@
1055 cat >configure.ac <<EOF
1056 AC_INIT
1057 AC_PROG_FC
1058 AC_FC_SRCEXT([f])
1059 AC_FC_CHECK_BOUNDS
1060 AC_CONFIG_FILES([Makefile])
1061 AC_OUTPUT
1064 AT_DATA([prog.f],
1066       subroutine copy(a,b,n)
1067       integer a(:), b(:), n, i
1068       do i = 1, n
1069          a(i) = b(i)
1070       end do
1071       end subroutine
1073       program main
1074       integer, parameter :: n = 20
1075       integer a(1:n), b(1:n-1), i
1076       interface
1077          subroutine copy(a,b,n)
1078          integer a(:), b(:), i
1079          end subroutine
1080       end interface
1082       call copy(a,b,n)
1083       end program
1086 AT_CHECK_AUTOCONF
1087 AT_CHECK_CONFIGURE
1088 : "${MAKE=make}"
1089 AT_CHECK([$MAKE], [], [ignore], [ignore])
1090 AT_CHECK([./prog || exit 1], [1], [ignore], [ignore])
1091 AT_CHECK([$MAKE clean], [], [ignore], [ignore])
1093 AT_CLEANUP
1096 ## ------------------ ##
1097 ## AC_FC_MODULE_FLAG. ##
1098 ## ------------------ ##
1100 AT_SETUP([AC_FC_MODULE_FLAG])
1102 AT_DATA([Makefile.in],
1103 [[OBJEXT = @OBJEXT@
1104 EXEEXT = @EXEEXT@
1105 LIBS = @LIBS@
1106 ac_empty = @ac_empty@
1107 FC = @FC@
1108 FC_MODEXT = @FC_MODEXT@
1109 FC_MODINC = @FC_MODINC@
1110 FCFLAGS = @FCFLAGS@
1111 FCFLAGS_f = @FCFLAGS_f@
1113 prog$(EXEEXT): sub/mod.$(OBJEXT) prog.$(OBJEXT)
1114         $(FC) $(FCFLAGS) -o $@ prog.$(OBJEXT) sub/mod.$(OBJEXT) $(LIBS)
1116 sub/mod.$(OBJEXT): sub/mod.f
1117         cd sub && $(FC) $(FCFLAGS) -c $(FCFLAGS_f) mod.f
1119 # Depend on the object, for the module dependency.
1120 prog.$(OBJEXT): prog.f sub/mod.$(OBJEXT)
1121         $(FC) $(FCFLAGS) $(FC_MODINC). $(FC_MODINC)sub -c $(FCFLAGS_f) $<
1123 clean:
1124         -test -z "$(FC_MODEXT)" || rm -f *.$(FC_MODEXT) sub/*.$(FC_MODEXT)
1125         -rm -f *.$(OBJEXT) sub/*.$(OBJEXT) prog$(EXEEXT)
1128 AT_DATA([configure.ac],
1129 [[AC_INIT
1130 AC_PROG_FC
1131 AC_FC_SRCEXT([f])
1132 AC_FC_MODULE_FLAG
1133 if test -n "$FC_MODINC"; then
1134   FCFLAGS="$FCFLAGS $FC_MODINC. ${FC_MODINC}sub"
1136 AC_FC_MODULE_EXTENSION
1137 AC_CONFIG_FILES([Makefile])
1138 AC_OUTPUT
1141 mkdir sub
1143 AT_DATA([sub/mod.f],
1144 [[      module foobar
1145       end module foobar
1148 AT_DATA([prog.f],
1149 [[      program main
1150       use foobar
1151       end program
1154 AT_CHECK_AUTOCONF
1155 AT_CHECK_CONFIGURE
1156 : "${MAKE=make}"
1157 AT_CHECK([$MAKE], [], [stdout], [stderr])
1158 # Both the FCFLAGS setting from configure.ac, and the Makefile rule
1159 # should add to the module search path.
1160 AT_CHECK([grep 'sub .*sub ' stdout stderr], [], [ignore])
1161 AT_CHECK([./prog], [], [ignore], [ignore])
1162 AT_CHECK([$MAKE clean], [], [ignore], [ignore])
1164 AT_CLEANUP